Commit 797223ae zshaohui

1.增加物料追溯和日志监控功能

1 个父辈 a2d68952
正在显示 23 个修改的文件 包含 523 行增加12 行删除
...@@ -147,7 +147,8 @@ public class MenuInit { ...@@ -147,7 +147,8 @@ public class MenuInit {
addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(62, pMenuLog, "消息查询", "message", "neolight/message/index", "messagefind",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(62, pMenuLog, "消息查询", "message", "neolight/message/index", "messagefind",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(63, pMenuLog, "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind"); addDefaultFunctionMenu(63, pMenuLog, "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind");
addDefaultFunctionMenu(64, pMenuLog, "日志监控", "logMonitor", "neolight/logMonitor/index", "messagefind");
addDefaultFunctionMenu(65, pMenuLog, "物料追溯", "materialTrace", "neolight/materialTrace/index", "trace");
//报表:出入库、库存 //报表:出入库、库存
Menu pMenuReport = Menu.CreatePMenu("报表", 5, "report","inOutData",null); Menu pMenuReport = Menu.CreatePMenu("报表", 5, "report","inOutData",null);
......
...@@ -550,6 +550,9 @@ public class StatusBean { ...@@ -550,6 +550,9 @@ public class StatusBean {
} else if (msg.startsWith("W=")) { } else if (msg.startsWith("W=")) {
msgType = MessageType.WARNING.name(); msgType = MessageType.WARNING.name();
msg = msg.substring(2); msg = msg.substring(2);
} else if (msg.startsWith("C=")){
msgType = MessageType.CRITICAL.name();
msg = msg.substring(2);
} }
if (msgArray.length == 1) { if (msgArray.length == 1) {
......
...@@ -21,4 +21,9 @@ public enum MessageType { ...@@ -21,4 +21,9 @@ public enum MessageType {
* 3 设备操作数据 * 3 设备操作数据
*/ */
DATA, DATA,
/**
* 4 需要人员立即操作的
*/
CRITICAL
} }
package com.neotel.smfcore.core.message.rest; package com.neotel.smfcore.core.message.rest;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.neotel.smfcore.common.base.IExcelDownLoad; import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.BetweenData;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
...@@ -32,9 +36,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -32,9 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Locale;
@Slf4j @Slf4j
@RestController @RestController
...@@ -148,4 +150,50 @@ public class MessageController { ...@@ -148,4 +150,50 @@ public class MessageController {
} }
@ApiOperation("根据type汇总总数量")
@GetMapping("/typeTotalByDate")
@AnonymousAccess
public ResultBean typeTotalByDate(MessageCriteria criteria, HttpServletRequest request) {
//默认取7天的,如果客户端传的有,就用客户端的
Date endDate = new Date();
Date startDate = DateUtil.offsetDay(endDate, -7);
BetweenData<Date> updateDate = criteria.getUpdateDate();
if (updateDate != null && !updateDate.isEmpty()) {
Date from = updateDate.getFrom();
Date to = updateDate.getTo();
if (from != null) {
startDate = from;
}
if (to != null) {
endDate = to;
}
}
List<Message> messageList = messageManager.findByUpdateAndFileds(startDate, endDate, "");
Map<String, List<MessageDto>> resultMap = Maps.newConcurrentMap();
resultMap.put("INFO", new ArrayList<>());
resultMap.put("WARNING", new ArrayList<>());
resultMap.put("ERROR", new ArrayList<>());
resultMap.put("CRITICAL", new ArrayList<>());
if (messageList != null && !messageList.isEmpty()) {
for (Message message : messageList) {
MessageDto dto = messageMapper.toDto(message);
String type = message.getType();
if (ObjectUtil.isNotEmpty(dto.getMsgCode())) {
dto.setMsg(MessageUtils.getText(dto.getMsgCode(), dto.getMsgParams(), request.getLocale(), dto.getMsg()));
}
List<MessageDto> list = resultMap.get(type);
if (list == null) {
list = new ArrayList<>();
}
list.add(dto);
resultMap.put(type, list);
}
}
return ResultBean.newOkResult(resultMap);
}
} }
...@@ -7,6 +7,7 @@ import lombok.Data; ...@@ -7,6 +7,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
public class MessageCriteria { public class MessageCriteria {
...@@ -18,7 +19,7 @@ public class MessageCriteria { ...@@ -18,7 +19,7 @@ public class MessageCriteria {
private BetweenData<Date> createDate; private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate") @QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> updateDate; private BetweenData<Date> updateDate;
...@@ -37,4 +38,8 @@ public class MessageCriteria { ...@@ -37,4 +38,8 @@ public class MessageCriteria {
@QueryCondition @QueryCondition
@ApiModelProperty("类型") @ApiModelProperty("类型")
private String type; private String type;
@QueryCondition(type = QueryCondition.Type.IN,propName = "type")
@ApiModelProperty("多个类型")
private List<String> typeList;
} }
...@@ -7,6 +7,7 @@ import org.springframework.data.mongodb.core.query.Criteria; ...@@ -7,6 +7,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
...@@ -20,4 +21,6 @@ public interface IMessageManager extends IBaseManager<Message> { ...@@ -20,4 +21,6 @@ public interface IMessageManager extends IBaseManager<Message> {
List<MsgCountDto> getMsgCountList(Criteria criteria); List<MsgCountDto> getMsgCountList(Criteria criteria);
List<MsgCountDto> getParetoData(Criteria criteria) ; List<MsgCountDto> getParetoData(Criteria criteria) ;
List<Message> findByUpdateAndFileds(Date startDate, Date endDate, String field);
} }
...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.bean.PageData; ...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil; import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.language.service.nanager.impl.LanguageMsgManagerImpl; import com.neotel.smfcore.core.language.service.nanager.impl.LanguageMsgManagerImpl;
import com.neotel.smfcore.core.language.service.po.LanguageMsg; import com.neotel.smfcore.core.language.service.po.LanguageMsg;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
...@@ -70,9 +71,10 @@ public class MessageManagerImpl implements IMessageManager { ...@@ -70,9 +71,10 @@ public class MessageManagerImpl implements IMessageManager {
String createDate = MessageUtils.getText("smfcore.messages.createDate", locale, "创建时间"); String createDate = MessageUtils.getText("smfcore.messages.createDate", locale, "创建时间");
String msg = MessageUtils.getText("smfcore.messages.msg", locale, "内容"); String msg = MessageUtils.getText("smfcore.messages.msg", locale, "内容");
String info = MessageUtils.getText("smfcorre.message.info", locale, "消息"); String info = MessageUtils.getText("smfcore.message.info", locale, "消息");
String warning = MessageUtils.getText("smfcorre.message.warning", locale, "警告"); String warning = MessageUtils.getText("smfcore.message.warning", locale, "警告");
String error = MessageUtils.getText("smfcorre.message.error", locale, "错误"); String error = MessageUtils.getText("smfcore.message.error", locale, "错误");
String critical = MessageUtils.getText("smfcore.message.critical", locale, "严重错误");
List<String> titles = new ArrayList<>(); List<String> titles = new ArrayList<>();
titles.add(device); titles.add(device);
...@@ -90,6 +92,8 @@ public class MessageManagerImpl implements IMessageManager { ...@@ -90,6 +92,8 @@ public class MessageManagerImpl implements IMessageManager {
typeV=warning; typeV=warning;
}else if(obj.getType().equals(MessageType.ERROR.name())){ }else if(obj.getType().equals(MessageType.ERROR.name())){
typeV=error; typeV=error;
}else if (obj.getType().equals(MessageType.CRITICAL.name())){
typeV=critical;
} }
map.put(type, typeV); map.put(type, typeV);
map.put(createDate, DateUtil.toDateTimeString(obj.getCreateDate())); map.put(createDate, DateUtil.toDateTimeString(obj.getCreateDate()));
...@@ -136,6 +140,17 @@ public class MessageManagerImpl implements IMessageManager { ...@@ -136,6 +140,17 @@ public class MessageManagerImpl implements IMessageManager {
return messageDao.getParetoData(criteria) ; return messageDao.getParetoData(criteria) ;
} }
@Override
public List<Message> findByUpdateAndFileds(Date startDate, Date endDate, String field) {
Query q = new Query();
Criteria c = Criteria.where("updateDate").gte(startDate).lt(endDate);
q.addCriteria(c);
if (StringUtils.isNotEmpty(field)) {
q.fields().include(field);
}
return messageDao.findByQuery(q);
}
@Data @Data
private class MsgDeviceName { private class MsgDeviceName {
private String deviceName; private String deviceName;
......
package com.neotel.smfcore.core.system.rest;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.system.rest.bean.dto.MaterialTraceDto;
import com.neotel.smfcore.core.system.rest.bean.mapstruct.MaterialTraceMapper;
import com.neotel.smfcore.core.system.rest.bean.query.MaterialTraceQueryCondition;
import com.neotel.smfcore.core.system.service.manager.IMaterialTraceManager;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@Slf4j
@Api(tags = "物料追溯管理")
@RestController
@RequestMapping("/api/materialTrace")
@RequiredArgsConstructor
public class MaterialTraceController {
@Autowired
private IMaterialTraceManager materialTraceManager;
@Autowired
private MaterialTraceMapper materialTraceMapper;
@ApiOperation("查询物料追溯信息")
@GetMapping("/history")
@PreAuthorize("@el.check('materialTrace')")
@AnonymousAccess
public PageData<MaterialTraceDto> query(MaterialTraceQueryCondition criteria, Pageable pageable) {
Query query = getQuery(criteria);
PageData<MaterialTrace> materialTraceList = materialTraceManager.findByPage(query, pageable);
PageData<MaterialTraceDto> result = materialTraceMapper.toDto(materialTraceList);
return result;
}
@ApiOperation("导出物料追溯日志")
@GetMapping(value = "/history/download")
@PreAuthorize("@el.check('taskLog')")
@AnonymousAccess
public void download(HttpServletResponse response, MaterialTraceQueryCondition criteria, Pageable pageable, HttpServletRequest request) throws IOException {
Query query = getQuery(criteria);
Locale locale = request.getLocale();
log.info("开始导出物料追溯日志");
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
List<List<String>> header = new ArrayList<>();
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.barcode",locale,"条码编号")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.partNumber",locale,"料件编号")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.posName",locale,"料仓名称")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.amount",locale,"数量")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.type",locale,"类型")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.orderSource",locale,"来源")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.status",locale,"状态")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.operator",locale,"操作人")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.createDate",locale,"创建时间")));
header.add(Lists.newArrayList(MessageUtils.getSmfClientMsg("smfclient.NeoLight.updateDate",locale,"更新时间")));
return header;
}
@Override
public List<List<Object>> getPageData(Query query, Pageable pageable) {
List<List<Object>> dataList = new ArrayList<>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<MaterialTrace> materialTraceList = materialTraceManager.findByQuery(query,pageable);
for (MaterialTrace materialTrace : materialTraceList) {
String createDate = dateFormat.format(materialTrace.getCreateDate());
String updateDate = dateFormat.format(materialTrace.getUpdateDate());
List<Object> data = new ArrayList<>();
data.add(materialTrace.getBarcode());
data.add(materialTrace.getPartNumber());
data.add(materialTrace.getPosName() + " " + materialTrace.getStorageName());
data.add(materialTrace.getNum());
String typeKey = "NeoLight.logType." + materialTrace.getType();
String typeMsg = MessageUtils.getSmfClientMsg(typeKey,locale,typeKey);
data.add(typeMsg);
data.add(materialTrace.getSourceName());
String status = materialTrace.getStatus().toLowerCase();
String statusKey = "NeoLight.logStatus." + status;
String statusMsg = MessageUtils.getSmfClientMsg(statusKey,locale,statusKey);
data.add(statusMsg);
data.add(materialTrace.getOperator());
data.add(createDate);
data.add(updateDate);
dataList.add(data);
}
return dataList;
}
});
log.info("物料追溯日志导出完成");
}
private Query getQuery(MaterialTraceQueryCondition criteria){
String un_End = "UN_END";
boolean unEnd = false;
boolean finished=false;
if (criteria.getStatus()!=null&& criteria.getStatus().equals(un_End)) {
criteria.setStatus(null);
unEnd = true;
}else if(criteria.getStatus()!=null&&criteria.getStatus().equals(OP_STATUS.FINISHED.name())){
criteria.setStatus(null);
finished=true;
}
/*if (StringUtils.isBlank(criteria.getStorageId())){
criteria.setStorageIdList(SecurityUtils.getUserGroupStorageId());
}*/
Query query = QueryHelp.getQuery(criteria);
if (unEnd) {
query.addCriteria(Criteria.where("status").nin(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}else if(finished){
query.addCriteria(Criteria.where("status").in(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}
return query;
}
}
package com.neotel.smfcore.core.system.rest.bean.dto;
import lombok.Data;
@Data
public class MaterialTraceDto extends TaskDto {
}
package com.neotel.smfcore.core.system.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.system.rest.bean.dto.MaterialTraceDto;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MaterialTraceMapper extends BaseMapper<MaterialTraceDto, MaterialTrace> {
}
package com.neotel.smfcore.core.system.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("查询条件")
public class MaterialTraceQueryCondition {
@QueryCondition(blurry = "barcode,partNumber,posName,sourceName,subSourceInfo,memo")
@ApiModelProperty("模糊搜索")
private String blurry;
@QueryCondition
@ApiModelProperty("条码编号")
private String barcode;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> updateDate;
@QueryCondition
@ApiModelProperty("來源ID")
private String sourceId;
@QueryCondition
@ApiModelProperty("任务状态")
private String status;
@QueryCondition(isDBId =true)
@ApiModelProperty("料仓Id")
private String storageId;
@QueryCondition(type = QueryCondition.Type.IN, propName = "storageId")
private List<String> storageIdList;
@QueryCondition
@ApiModelProperty("出入库类型")
private Integer type;
@ApiModelProperty("分组ID")
private String groupId;
@ApiModelProperty("CID数组")
private String[] cids;
@QueryCondition
@ApiModelProperty("来源名称")
private String sourceName;
@QueryCondition
@ApiModelProperty("出入库类型")
private String inOutType;
@QueryCondition
@ApiModelProperty("操作人")
private String operator;
}
package com.neotel.smfcore.core.system.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
public interface IMaterialTraceDao extends IBaseDao {
}
package com.neotel.smfcore.core.system.service.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.core.system.service.dao.IMaterialTraceDao;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.springframework.stereotype.Service;
@Service
public class MaterialTraceDaoImpl extends AbstractBaseDao implements IMaterialTraceDao {
@Override
public Class getEntityClass() {
return MaterialTrace.class;
}
}
package com.neotel.smfcore.core.system.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List;
public interface IMaterialTraceManager extends IBaseManager<MaterialTrace> {
//List<MaterialTrace> dataLogs = materialTraceManager.findByQuery(query,pageable);
List<MaterialTrace> findByQuery(Query query, Pageable pageable);
}
package com.neotel.smfcore.core.system.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.system.service.dao.IMaterialTraceDao;
import com.neotel.smfcore.core.system.service.manager.IMaterialTraceManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MaterialTraceManagerImpl implements IMaterialTraceManager {
@Autowired
private IMaterialTraceDao materialTraceDao;
@Override
public MaterialTrace get(String id) {
return null;
}
@Override
public MaterialTrace save(MaterialTrace object) throws ValidateException {
return materialTraceDao.save(object);
}
@Override
public void delete(MaterialTrace object) throws ValidateException {
}
@Override
public PageData<MaterialTrace> findByPage(Query query, Pageable pageable) {
int totalCount = materialTraceDao.countByQuery(query);
List<MaterialTrace> list = materialTraceDao.findByQuery(query, pageable);
return new PageData<MaterialTrace>(list, totalCount);
}
@Override
public List<MaterialTrace> findByQuery(Query query) {
return null;
}
@Override
public List<MaterialTrace> findByQuery(Query query, Pageable pageable) {
return materialTraceDao.findByQuery(query,pageable);
}
}
package com.neotel.smfcore.core.system.service.po;
import lombok.Data;
/**
* 物料追溯(字段和datalog一样,直接继承使用)
*/
@Data
public class MaterialTrace extends DataLog {
}
package com.neotel.smfcore.core.system.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.neotel.smfcore.core.system.bean.MSDAppendInfo;
import com.neotel.smfcore.core.system.service.manager.IMaterialTraceManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.service.po.MaterialTrace;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
public class MaterialTraceUtil {
@Autowired
private IMaterialTraceManager materialTraceManager;
//把task每个状态都拆分出来 重新保存一张表
public void onTaskStatusChange(DataLog task) {
try {
MaterialTrace materialTrace = dataLogToMaterialTrace(task);
materialTrace.setId("");
materialTrace.setCreateDate(new Date());
materialTrace.setUpdateDate(new Date());
materialTraceManager.save(materialTrace);
} catch (Exception e) {
e.printStackTrace();
}
}
private MaterialTrace dataLogToMaterialTrace(DataLog task) throws JsonProcessingException {
MaterialTrace materialTrace = new MaterialTrace();
materialTrace.setSingleOut(task.isSingleOut());
materialTrace.setStorageName(task.getStorageName());
materialTrace.setCid(task.getCid());
materialTrace.setStorageId(task.getStorageId());
materialTrace.setGroupId(task.getGroupId());
materialTrace.setSourceId(task.getSourceId());
materialTrace.setPosId(task.getPosId());
materialTrace.setPosName(task.getPosName());
materialTrace.setBarcode(task.getBarcode());
materialTrace.setW(task.getW());
materialTrace.setH(task.getH());
materialTrace.setCutReel(task.isCutReel());
materialTrace.setUrgentReel(task.isUrgentReel());
materialTrace.setLessSendReel(task.isLessSendReel());
materialTrace.setNgReel(task.isNgReel());
materialTrace.setPackageReel(task.isPackageReel());
materialTrace.setPartNumber(task.getPartNumber());
materialTrace.setNum(task.getNum());
materialTrace.setType(task.getType());
materialTrace.setStatus(task.getStatus());
materialTrace.setBatchId(task.getBatchId());
materialTrace.setBatchInfo(task.getBatchInfo());
materialTrace.setSourceType(task.getSourceType());
materialTrace.setSourceId(task.getSourceId());
materialTrace.setSourceName(task.getSourceName());
materialTrace.setSubSourceId(task.getSubSourceId());
materialTrace.setSubSourceInfo(task.getSubSourceInfo());
materialTrace.setCreator(task.getCreator());
materialTrace.setOperator(task.getOperator());
materialTrace.setRelationCodes(task.getRelationCodes());
materialTrace.setMemo(task.getMemo());
materialTrace.setMixTime(task.getMixTime());
materialTrace.setLightColor(task.getLightColor());
materialTrace.setExecuteTime(task.getExecuteTime());
materialTrace.setInStoreTime(task.getInStoreTime());
materialTrace.setPutInDate(task.getPutInDate());
materialTrace.setLocInfo(task.getLocInfo());
materialTrace.setInOutType(task.getInOutType());
materialTrace.setProviderNumber(task.getProviderNumber());
materialTrace.setMsdAppendInfo(task.getMsdAppendInfo());
//materialTrace.setPriority(task.getPriority());
//materialTrace.setLine(task.getLine());
//materialTrace.setClosed(task.isClosed());
return materialTrace;
}
}
...@@ -58,6 +58,10 @@ public class TaskService { ...@@ -58,6 +58,10 @@ public class TaskService {
@Autowired @Autowired
private SmfApi smfApi; private SmfApi smfApi;
@Autowired
private MaterialTraceUtil materialTraceUtil;
/** /**
* 任务队列,Key 为dataLog的ID,value 为本区域待执行的任务 * 任务队列,Key 为dataLog的ID,value 为本区域待执行的任务
*/ */
...@@ -156,6 +160,7 @@ public class TaskService { ...@@ -156,6 +160,7 @@ public class TaskService {
liteOrderCache.onTaskStatusChange(task); liteOrderCache.onTaskStatusChange(task);
smfApi.onTaskStatusChange(task); smfApi.onTaskStatusChange(task);
selfAuditUtil.onTaskStatusChange(task); selfAuditUtil.onTaskStatusChange(task);
materialTraceUtil.onTaskStatusChange(task);
} }
/** /**
......
...@@ -380,3 +380,6 @@ smfcore.loading.retry.msgok=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F ...@@ -380,3 +380,6 @@ smfcore.loading.retry.msgok=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F
smfcore.loading.retry.msgfail=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u5931\u8D25 smfcore.loading.retry.msgfail=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u5931\u8D25
smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u5168\u90E8\u5165\u5E93\u6210\u529F\u624D\u80FDEnd smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u5168\u90E8\u5165\u5E93\u6210\u529F\u624D\u80FDEnd
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF
smfcore.message.critical=\u4E25\u91CD\u9519\u8BEF
...@@ -368,4 +368,7 @@ smfcore.loading.retry.msg=Retry completed: {0}/{1} retried successfully, {2}/{3} ...@@ -368,4 +368,7 @@ smfcore.loading.retry.msg=Retry completed: {0}/{1} retried successfully, {2}/{3}
smfcore.loading.retry.msgok=Retry completed: {0}/{1} retried successfully smfcore.loading.retry.msgok=Retry completed: {0}/{1} retried successfully
smfcore.loading.retry.msgfail=Retry completed: {0}/{1} retry failed smfcore.loading.retry.msgfail=Retry completed: {0}/{1} retry failed
smfcore.micron.inlisttaskhasfail=Operation failed: All materials must be successfully stored before ending smfcore.micron.inlisttaskhasfail=Operation failed: All materials must be successfully stored before ending
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
\ No newline at end of file \ No newline at end of file
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=Log Monitoring
smfcore.materialTrace=Material Trace
smfcore.message.critical=Critical
\ No newline at end of file \ No newline at end of file
...@@ -363,4 +363,7 @@ smfcore.loading.retry.msg=\u30EA\u30C8\u30E9\u30A4\u5B8C\u4E86\u3001{0}/{1}\u30E ...@@ -363,4 +363,7 @@ smfcore.loading.retry.msg=\u30EA\u30C8\u30E9\u30A4\u5B8C\u4E86\u3001{0}/{1}\u30E
smfcore.loading.retry.msgok=\u30EA\u30C8\u30E9\u30A4\u5B8C\u4E86\u3001{0}/{1}\u30EA\u30C8\u30E9\u30A4\u6210\u529F smfcore.loading.retry.msgok=\u30EA\u30C8\u30E9\u30A4\u5B8C\u4E86\u3001{0}/{1}\u30EA\u30C8\u30E9\u30A4\u6210\u529F
smfcore.loading.retry.msgfail=\u30EA\u30C8\u30E9\u30A4\u5B8C\u4E86\u3001{0}/{1}\u30EA\u30C8\u30E9\u30A4\u5931\u6557 smfcore.loading.retry.msgfail=\u30EA\u30C8\u30E9\u30A4\u5B8C\u4E86\u3001{0}/{1}\u30EA\u30C8\u30E9\u30A4\u5931\u6557
smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u6557\uFF1A\u3059\u3079\u3066\u306E\u7D20\u6750\u304C\u6B63\u5E38\u306B\u30B9\u30C8\u30A2\u3055\u308C\u305F\u5F8C\u3067\u306A\u3044\u3068\u7D42\u4E86\u3067\u304D\u307E\u305B\u3093 smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u6557\uFF1A\u3059\u3079\u3066\u306E\u7D20\u6750\u304C\u6B63\u5E38\u306B\u30B9\u30C8\u30A2\u3055\u308C\u305F\u5F8C\u3067\u306A\u3044\u3068\u7D42\u4E86\u3067\u304D\u307E\u305B\u3093
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
\ No newline at end of file \ No newline at end of file
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u30ED\u30B0\u76E3\u8996
smfcore.materialTrace=\u30DE\u30C6\u30EA\u30A2\u30EB\u30C8\u30EC\u30FC\u30B9
smfcore.message.critical=\u91CD\u5927\u30A8\u30E9\u30FC
\ No newline at end of file \ No newline at end of file
...@@ -363,4 +363,7 @@ smfcore.loading.retry.msg=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F\uFF0C{ ...@@ -363,4 +363,7 @@ smfcore.loading.retry.msg=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F\uFF0C{
smfcore.loading.retry.msgok=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F smfcore.loading.retry.msgok=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F
smfcore.loading.retry.msgfail=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u5931\u8D25 smfcore.loading.retry.msgfail=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u5931\u8D25
smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u5168\u90E8\u5165\u5E93\u6210\u529F\u624D\u80FDEnd smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u5168\u90E8\u5165\u5E93\u6210\u529F\u624D\u80FDEnd
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
\ No newline at end of file \ No newline at end of file
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF
smfcore.message.critical=\u4E25\u91CD\u9519\u8BEF
\ No newline at end of file \ No newline at end of file
...@@ -364,4 +364,7 @@ smfcore.loading.retry.msg=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F\uFF0C{ ...@@ -364,4 +364,7 @@ smfcore.loading.retry.msg=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F\uFF0C{
smfcore.loading.retry.msgok=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F smfcore.loading.retry.msgok=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u6210\u529F
smfcore.loading.retry.msgfail=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u5931\u8D25 smfcore.loading.retry.msgfail=Retry\u5B8C\u6210\uFF1A{0}/{1}Retry\u5931\u8D25
smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u5168\u90E8\u5165\u5E93\u6210\u529F\u624D\u80FDEnd smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u5168\u90E8\u5165\u5E93\u6210\u529F\u624D\u80FDEnd
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
\ No newline at end of file \ No newline at end of file
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u65E5\u8A8C\u76E3\u63A7
smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF
smfcore.message.critical=\u56B4\u91CD\u932F\u8AA4
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!