Commit 9bc8749c LN

1053修改:1.Status和ML5页面状态修改。2.ML5页面的NG可以查看详情。3.料架显示入库中,出库中,待取出。4.温湿度,呆滞物料报表增加导出。5.UID和过期物料导出增加批次字段

1 个父辈 d78b2fd4
......@@ -140,6 +140,7 @@ public class MaterialStockController {
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.partNumber",locale,"物料编号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.proDate",locale,"生产日期")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.expireDate",locale,"过期时间")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.batch",locale,"物料批次")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.posName",locale,"库位号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.lockName",locale,"工单号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.amount",locale,"数量")));
......@@ -170,6 +171,7 @@ public class MaterialStockController {
data.add(pos.getBarcode().getPartNumber());
data.add(proDate);
data.add(expireDate);
data.add(pos.getBarcode().getBatch());
data.add(pos.getPosName());
data.add(pos.getBarcode().getLockName());
data.add(pos.getBarcode().getAmount());
......@@ -233,6 +235,7 @@ public class MaterialStockController {
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.partNumber",locale,"物料编号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.proDate",locale,"生产日期")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.expireDate",locale,"过期时间")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.batch",locale,"物料批次")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.posName",locale,"库位号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.lockName",locale,"工单号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.amount",locale,"数量")));
......@@ -264,6 +267,7 @@ public class MaterialStockController {
data.add(proDate);
data.add(expireDate);
data.add(pos.getPosName());
data.add(pos.getBarcode().getBatch());
data.add(pos.getBarcode().getLockName());
data.add(pos.getBarcode().getAmount());
data.add(putInTime);
......
......@@ -372,6 +372,7 @@ public class StoragePosController {
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.partNumber",locale,"物料编号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.proDate",locale,"生产日期")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.expireDate",locale,"过期时间")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.batch",locale,"物料批次")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.posName",locale,"库位号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.lockName",locale,"工单号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.amount",locale,"数量")));
......@@ -402,6 +403,7 @@ public class StoragePosController {
data.add(pos.getBarcode().getPartNumber());
data.add(proDate);
data.add(expireDate);
data.add(pos.getBarcode().getBatch());
data.add(pos.getPosName());
data.add(pos.getBarcode().getLockName());
data.add(pos.getBarcode().getAmount());
......
package com.neotel.smfcore.custom.micron1053.bean;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ML5NgReelInfo implements Serializable {
@ApiModelProperty("NG口位置,1=左侧,2=右侧")
private int NgPos=0;
@ApiModelProperty("物料类型:pizzaBox,pcb,tray,reel")
private String mType;
@ApiModelProperty("条码")
private String barcode;
@ApiModelProperty("库位号")
private String posName;
@ApiModelProperty("出入库类型,1=入库,2=出库")
private String type;
@ApiModelProperty("NG原因")
private String ngMsg;
}
......@@ -12,7 +12,7 @@ import java.util.List;
@NoArgsConstructor
public class MicronEquipStatus implements Serializable {
/**
* 设备名称:ML5,CI,R1,R2,R3,M1-M8,SBDH1,SBDH2,SBDH3,SBSH1,SBSH2
* 设备名称:CI,R1,R2,R3,M1-M8,SBDH1,SBDH2,SBDH3,SBSH1,SBSH2
* ML5-R1,ML5-R2,ML5-L1,ML5-R2
*/
private String equipName;
......@@ -21,9 +21,19 @@ public class MicronEquipStatus implements Serializable {
*/
private int status;
/**
* 左边代表l1,l2,1=正常运行,2=报警。3=入库中,4=出库中,5=满料待取出
*/
private int P1status;
/**
* 右边代表R1R21,1=正常运行,2=报警。3=入库中,4=出库中,5=满料待取出
*/
private int P2status;
/**
* 当name为ML5-R1对应右侧的ng,ML5-L1对应左侧的ng
*/
private int ngCount;
private long updateTime;
private List<EquipMsg> msgList=null;
/**
......
......@@ -18,9 +18,9 @@ public class ML5StatusDto implements Serializable {
private int l1Status=0;
@ApiModelProperty("L2状态 0=离线,1=正常运行,2=报警")
private int l2Status=0;
@ApiModelProperty("R1状态 0=离线,1=正常运行,2=报警")
@ApiModelProperty("R1状态 0=离线,1=正常运行,2=报警,3=入库中,4=出库中,5=满料待取出")
private int r1Status=0;
@ApiModelProperty("R2状态 0=离线,1=正常运行,2=报警")
@ApiModelProperty("R2状态 0=离线,1=正常运行,2=报警,3=入库中,4=出库中,5=满料待取出")
private int r2Status=0;
@ApiModelProperty("NG1处料盘数量")
......
......@@ -4,6 +4,7 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.micron1053.bean.ML5NgReelInfo;
import com.neotel.smfcore.custom.micron1053.bean.MicronEquipStatus;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
......@@ -97,6 +98,31 @@ public class MicronDeviceController {
Object value = MicronDataCache.getDDate(key);
return ResultBean.newOkResult(value);
}
@ApiOperation("上传一个NG料 ")
@PostMapping(value = "/uploadNgReel")
@ResponseBody
@AnonymousAccess
public ResultBean uploadNgReel(@RequestBody Object param, HttpServletRequest request) {
ML5NgReelInfo info = JsonUtil.toObj(param.toString(), ML5NgReelInfo.class);
if (info == null) {
return ResultBean.newOkResult("fail");
}
log.info("uploadNgReel : [" + info.getNgPos() + "],barcode:[" + info.getBarcode() + "],posName:[" + info.getPosName() + "]type:[" + info.getMType() + "]inout:[" + info.getType() + "],msg[" + info.getNgMsg() + "]");
MicronDataCache.uploadNgReel(info);
return ResultBean.newOkResult("ok");
}
@ApiOperation("清空指定NG的NG料,参数 ngPos:1=左侧,2=右侧 ")
@PostMapping(value = "/clearNgPos")
@ResponseBody
@AnonymousAccess
public ResultBean clearNgPos( HttpServletRequest request) {
Integer ngPos =Integer.valueOf(request.getParameter("ngPos")) ;
log.info("clearNgPos : ngPos=" + ngPos);
MicronDataCache.clearNgPos(ngPos);
return ResultBean.newOkResult("clearNgPos " + ngPos + " ok");
}
// @ApiOperation("ML5设备状态更新")
// @PostMapping(value = "ml5/updateStatus")
......
......@@ -3,10 +3,10 @@ package com.neotel.smfcore.custom.micron1053.controller;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.micron1053.bean.EquipMsg;
import com.neotel.smfcore.custom.micron1053.bean.ML5NgReelInfo;
import com.neotel.smfcore.custom.micron1053.bean.MicronEquipStatus;
import com.neotel.smfcore.custom.micron1053.bean.dto.ML5ShelfDto;
import com.neotel.smfcore.custom.micron1053.bean.dto.ML5StatusDto;
import com.neotel.smfcore.custom.micron1053.enums.MicronEquipName;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
......@@ -17,6 +17,7 @@ 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 java.util.*;
@Slf4j
......@@ -32,30 +33,22 @@ public class MicronML5Controller {
@AnonymousAccess
public ML5StatusDto ml5Status( ) {
ML5StatusDto resultDto = new ML5StatusDto();
MicronEquipStatus r1 = MicronDataCache.getStatus(MicronEquipName.ML5_R1.getName());
MicronEquipStatus r2 = MicronDataCache.getStatus(MicronEquipName.ML5_R2.getName());
MicronEquipStatus l1 = MicronDataCache.getStatus(MicronEquipName.ML5_L1.getName());
MicronEquipStatus l2 = MicronDataCache.getStatus(MicronEquipName.ML5_L2.getName());
MicronEquipStatus mlL = MicronDataCache.getStatus("ML5-L");
MicronEquipStatus mlR = MicronDataCache.getStatus("ML5-R");
resultDto.setL1Status(l1.getStatus());
resultDto.setL2Status(l2.getStatus());
resultDto.setR1Status(r1.getStatus());
resultDto.setR2Status(r2.getStatus());
resultDto.setNg1Count(l1.getNgCount());
resultDto.setNg2Count(r1.getNgCount());
resultDto.setL1Status(mlL.getP1status());
resultDto.setL2Status(mlL.getP2status());
resultDto.setR1Status(mlR.getP1status());
resultDto.setR2Status(mlR.getP2status());
resultDto.setNg1Count(mlL.getNgCount());
resultDto.setNg2Count(mlR.getNgCount());
List<EquipMsg> msgs = new ArrayList<>();
if (r1.getMsgList() != null && r1.getMsgList().size() > 0) {
msgs.addAll(r1.getMsgList());
if (mlL.getMsgList() != null && mlL.getMsgList().size() > 0) {
msgs.addAll(mlL.getMsgList());
}
if (r2.getMsgList() != null && r2.getMsgList().size() > 0) {
msgs.addAll(r2.getMsgList());
}
if (l1.getMsgList() != null && l1.getMsgList().size() > 0) {
msgs.addAll(l1.getMsgList());
}
if (l2.getMsgList() != null && l2.getMsgList().size() > 0) {
msgs.addAll(l2.getMsgList());
if (mlR.getMsgList() != null && mlR.getMsgList().size() > 0) {
msgs.addAll(mlR.getMsgList());
}
if (msgs.size() > 0) {
resultDto.setMsgList(msgs);
......@@ -96,4 +89,13 @@ public class MicronML5Controller {
return resultDto;
}
@ApiOperation("ML5页面点击NG查看详情;参数 ngPos:1=左侧,2=右侧")
@GetMapping("/ngDetials")
@AnonymousAccess
public List<ML5NgReelInfo> ngDetials(Integer ngPos, HttpServletRequest servletRequest) {
List<ML5NgReelInfo> results=MicronDataCache.getNgDetials(ngPos);
return results;
}
}
......@@ -20,7 +20,6 @@ import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.custom.micron1053.bean.EquipMsg;
import com.neotel.smfcore.custom.micron1053.bean.MicronEquipStatus;
import com.neotel.smfcore.custom.micron1053.bean.dto.*;
import com.neotel.smfcore.custom.micron1053.enums.MicronEquipName;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
......@@ -60,12 +59,13 @@ public class MicronStatusController {
dto.setStatusMap(new HashMap<>());
// ML5,CI,R1,R2,R3
String[] names=new String[]{"ML5","CI","R1","R2","R3"};
String[] names=new String[]{"ML5-L","ML5-R","CI","R1","R2","R3"};
for (String name :names
) {
MicronEquipStatus s=MicronDataCache.getStatus(name);
if(!s.timeOut()){
dto.getStatusMap().put(s.getEquipName(),s.getStatus() );
String newKey=s.getEquipName().replace("-","");
dto.getStatusMap().put(newKey,s.getStatus() );
// if(s.getMsgList()!=null&&s.getMsgList().size()>0) {
// dto.getMsgList().addAll(s.getMsgList());
// }
......@@ -91,9 +91,15 @@ public class MicronStatusController {
) {
boxList.add("M"+i);
}
for (MicronEquipName name : MicronEquipName.sbBoxList()){
boxList.add(name.getName());
}
// SBDH1, SBDH2, SBDH3, SBSH1, SBSH2
boxList.add("SBDH1");
boxList.add("SBDH2");
boxList.add("SBDH3");
boxList.add("SBSH1");
boxList.add("SBSH2");
// for (MicronEquipName name : MicronEquipName.sbBoxList()){
// boxList.add(name.getName());
// }
for (String boxName :
boxList) {
......@@ -125,7 +131,7 @@ public class MicronStatusController {
private MicronEquipStatus getBoxEquip(String boxName,Locale locale) {
List<String> cids =getCidsByBoxName(boxName);
MicronEquipStatus dto = new MicronEquipStatus(boxName, 0,0, System.currentTimeMillis(), new ArrayList<>());
MicronEquipStatus dto = new MicronEquipStatus(boxName, 0,0,0,0, System.currentTimeMillis(), new ArrayList<>());
List<StatusBean> statusBeans = new ArrayList<>();
for (String cid :
cids) {
......
......@@ -7,43 +7,43 @@ import java.util.List;
/**
* Created by sunke on 2021/7/13.
*/
public enum MicronEquipName {
// ,,,,,M1-M8,SBDH1,SBDH2,SBDH3,SBSH1,SBSH2
ML5("ML5"),
CI("CI"),
R1("R1"),
R2("R2"),
R3("R3"),
SBDH1("SBDH1"),
SBDH2("SBDH2"),
SBDH3("SBDH3"),
SBSH1("SBSH1"),
SBSH2("SBSH2"),
ML5_R1("ML5-R1"),
ML5_R2("ML5-R2"),
ML5_L1("ML5-L1"),
ML5_L2("ML5-L2");
private String key;
MicronEquipName(String key) {
this.key = key;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name();
}
public static List<MicronEquipName> sbBoxList() {
return Lists.newArrayList(SBDH1, SBDH2, SBDH3, SBSH1, SBSH2);
}
}
//public enum MicronEquipName {
//// ,,,,,M1-M8,SBDH1,SBDH2,SBDH3,SBSH1,SBSH2
//
// ML5("ML5"),
// CI("CI"),
// R1("R1"),
// R2("R2"),
// R3("R3"),
// SBDH1("SBDH1"),
// SBDH2("SBDH2"),
// SBDH3("SBDH3"),
// SBSH1("SBSH1"),
// SBSH2("SBSH2"),
// ML5_R1("ML5-R1"),
// ML5_R2("ML5-R2"),
// ML5_L1("ML5-L1"),
// ML5_L2("ML5-L2");
//
// private String key;
//
// MicronEquipName(String key) {
// this.key = key;
// }
//
// public String getKey() {
// return key;
// }
//
// public void setKey(String key) {
// this.key = key;
// }
//
// public String getName() {
// return name();
// }
//
// public static List<MicronEquipName> sbBoxList() {
// return Lists.newArrayList(SBDH1, SBDH2, SBDH3, SBSH1, SBSH2);
// }
//}
......@@ -3,13 +3,16 @@ package com.neotel.smfcore.custom.micron1053.util;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.micron1053.bean.EquipMsg;
import com.neotel.smfcore.custom.micron1053.bean.ML5NgReelInfo;
import com.neotel.smfcore.custom.micron1053.bean.MicronEquipStatus;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
/**
* 设备状态缓存类
*/
@Slf4j
public class MicronDataCache {
// public static ML5StatusBean ml5StatusBean=null;
......@@ -145,4 +148,24 @@ public class MicronDataCache {
Object value = deviceDataMap.getOrDefault(key, "");
return value;
}
public static Map<Integer,List<ML5NgReelInfo>> ml5NgMap=new HashMap<>();
public static void uploadNgReel(ML5NgReelInfo info) {
List<ML5NgReelInfo> list=ml5NgMap.getOrDefault(info.getNgPos(),new ArrayList<>());
list.add(info);
ml5NgMap.put(info.getNgPos(),list);
}
public static void clearNgPos(Integer ngPos) {
ml5NgMap.remove(ngPos);
}
public static List<ML5NgReelInfo> getNgDetials(Integer ngPos){
List<ML5NgReelInfo> list=ml5NgMap.getOrDefault(ngPos,new ArrayList<>());
return list;
}
}
......@@ -304,6 +304,12 @@ smfcore.diagnosis=Diagnosis
smfcore.helps=Help
smfcore.error.storage.noPos={0}\u7684\u6599\u683C[{1}]\u5DF2\u6EE1,\u65E0\u6CD5\u7EE7\u7EED\u653E\u5165
smfcore.status=Status
smfcore.storagePos.batch=\u6279\u6B21
smfcore.humiture.cid=CID
smfcore.humiture.temperature=\u6E29\u5EA6
smfcore.humiture.humiture=\u6E7F\u5EA6
smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate=\u66F4\u65B0\u65F6\u95F4
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
......
......@@ -302,4 +302,10 @@ smfcore.ml2=MI2
smfcore.diagnosis=Diagnosis
smfcore.helps=Help
smfcore.error.storage.noPos={0}'s cell [{1}] is full and cannot be added
smfcore.status=Status
\ No newline at end of file
smfcore.status=Status
smfcore.storagePos.batch=Material Batch
smfcore.humiture.cid=CID
smfcore.humiture.temperature=Temperature
smfcore.humiture.humiture=Humidity
smfcore.humiture.createDate=Create Time
smfcore.humiture.updateDate=Update Time
\ No newline at end of file
......@@ -300,3 +300,9 @@ smfcore.diagnosis=Diagnosis
smfcore.helps=Help
smfcore.error.storage.noPos={0}\u7684\u6599\u683C[{1}]\u5DF2\u6EE1,\u65E0\u6CD5\u7EE7\u7EED\u653E\u5165
smfcore.status=Status
smfcore.storagePos.batch=\u54C1\u76EE\u30ED\u30C3\u30C8
smfcore.humiture.cid=CID
smfcore.humiture.temperature=\u6E29\u5EA6
smfcore.humiture.humiture=\u6E7F\u5EA6
smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate=\u66F4\u65B0\u65F6\u95F4
......@@ -299,4 +299,10 @@ smfcore.ml2=MI2
smfcore.diagnosis=Diagnosis
smfcore.helps=Help
smfcore.error.storage.noPos={0}\u7684\u6599\u683C[{1}]\u5DF2\u6EE1,\u65E0\u6CD5\u7EE7\u7EED\u653E\u5165
smfcore.status=Status
\ No newline at end of file
smfcore.status=Status
smfcore.storagePos.batch=\u6279\u6B21
smfcore.humiture.cid=CID
smfcore.humiture.temperature=\u6E29\u5EA6
smfcore.humiture.humiture=\u6E7F\u5EA6
smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate=\u66F4\u65B0\u65F6\u95F4
\ No newline at end of file
......@@ -300,4 +300,10 @@ smfcore.ml2=MI2
smfcore.diagnosis=Diagnosis
smfcore.helps=Help
smfcore.error.storage.noPos={0}\u7684\u6599\u683C[{1}]\u5DF2\u6EFF,\u7121\u6CD5\u7E7C\u7E8C\u653E\u5165
smfcore.status=Status
\ No newline at end of file
smfcore.status=Status
smfcore.storagePos.batch=\u6279\u6B21
smfcore.humiture.cid=CID
smfcore.humiture.temperature=\u6E29\u5EA6
smfcore.humiture.humiture=\u6E7F\u5EA6
smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate=\u66F4\u65B0\u65F6\u95F4
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!