Commit f89c27d4 hjh

Merge remote-tracking branch 'origin/master'

2 个父辈 d6f0806e 6a7ed1d0
...@@ -919,6 +919,7 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -919,6 +919,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
needSaveToMongo = statusBean.needSaveToMongo(); needSaveToMongo = statusBean.needSaveToMongo();
} }
statusBean.setTime(System.currentTimeMillis()); statusBean.setTime(System.currentTimeMillis());
statusBean.setOfflineTime(-1);
Map<String, BoxStatusBean> statusOfBoxes = statusBeanToSave.getBoxStatus(); Map<String, BoxStatusBean> statusOfBoxes = statusBeanToSave.getBoxStatus();
statusBean.setBoxStatus(statusOfBoxes); statusBean.setBoxStatus(statusOfBoxes);
......
...@@ -167,6 +167,6 @@ public class MimoG3BoxHandler extends BaseDeviceHandler{ ...@@ -167,6 +167,6 @@ public class MimoG3BoxHandler extends BaseDeviceHandler{
@Override @Override
public DeviceType getDeviceType() { public DeviceType getDeviceType() {
return DeviceType.SMD_MIMO_G2; return DeviceType.SMD_MIMO_G3;
} }
} }
...@@ -335,13 +335,18 @@ public class NLShelfHandler extends BaseDeviceHandler { ...@@ -335,13 +335,18 @@ public class NLShelfHandler extends BaseDeviceHandler {
return ResultBean.newOkResult("smfcore.shelf.msg.tipScanReel", "库位[" + pos.getPosName() + "]操作成功,请扫描要放入的物料", new String[]{pos.getPosName()},pos.getPosName()); return ResultBean.newOkResult("smfcore.shelf.msg.tipScanReel", "库位[" + pos.getPosName() + "]操作成功,请扫描要放入的物料", new String[]{pos.getPosName()},pos.getPosName());
} }
} else { } else {
//先判断库存中有没有此条码 ResultBean resultBean;
ResultBean resultBean = outProcess(storageId,code,sourceId, loginUser,request); try {
if(resultBean != null){ //先判断库存中有没有此条码
return resultBean; resultBean = outProcess(storageId, code, sourceId, loginUser, request);
if(resultBean!=null) {
return resultBean;
}
} catch (Exception exa) {
log.error(exa.toString());
} }
resultBean = putInProcess(groupId, storageId, code, token, loginUser); resultBean = putInProcess(groupId, storageId, code, token, loginUser);
if(resultBean != null){ if (resultBean != null) {
return resultBean; return resultBean;
} }
} }
......
...@@ -23,6 +23,8 @@ import com.neotel.smfcore.core.storage.bean.InventoryItem; ...@@ -23,6 +23,8 @@ import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE; import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.core.storage.enums.COMPATIBLE_TYPE; import com.neotel.smfcore.core.storage.enums.COMPATIBLE_TYPE;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.rest.dto.InventoryItemDto;
import com.neotel.smfcore.core.storage.rest.query.InventoryQueryCriteria;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.bean.OrderSetting; import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.service.dao.ICacheItemDao; import com.neotel.smfcore.core.system.service.dao.ICacheItemDao;
...@@ -38,6 +40,7 @@ import org.apache.logging.log4j.LogManager; ...@@ -38,6 +40,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.apache.poi.ss.formula.functions.T; import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
...@@ -47,6 +50,7 @@ import javax.annotation.PostConstruct; ...@@ -47,6 +50,7 @@ import javax.annotation.PostConstruct;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors;
/** /**
* 缓存 * 缓存
...@@ -658,6 +662,20 @@ public class DataCache { ...@@ -658,6 +662,20 @@ public class DataCache {
return storageInventoryMap; return storageInventoryMap;
} }
public List<InventoryItem> getInventoryByPN(String pn) {
Map<String, InventoryItem> inventoryItemMap = getAllInventory(null, "");
List<InventoryItem> list = Lists.newArrayList(inventoryItemMap.values());
List<InventoryItem> resultList = new ArrayList<>();
for (InventoryItem item : list
) {
if (item.getPartNumber().equals(pn)&&item.getStockCount()>0) {
resultList.add(item);
}
}
return resultList;
}
/** /**
* 手动修改数量的时候更新库存 * 手动修改数量的时候更新库存
* @param cid * @param cid
......
...@@ -36,7 +36,9 @@ public class EquipmentCache { ...@@ -36,7 +36,9 @@ public class EquipmentCache {
map.put(equipment.getCid(), equipment); map.put(equipment.getCid(), equipment);
} }
allEquipment = map; allEquipment = map;
log.info("加载所有设备["+all.size()+"]信息到缓存"); if(all.size()>0) {
log.info("加载所有设备[" + all.size() + "]信息到缓存");
}
} }
} }
} }
......
...@@ -600,8 +600,7 @@ public class LiteOrderCache { ...@@ -600,8 +600,7 @@ public class LiteOrderCache {
//剩余未出盘数 //剩余未出盘数
int remainReelCount = orderItem.getNeedReelCount() - orderItem.getTotalOutReelCount(); int remainReelCount = orderItem.getNeedReelCount() - orderItem.getTotalOutReelCount();
Collection<String> excludePosIds = excludeOutPosIds();
excludePosIds.addAll(findPosIds);
//此PN未完成 //此PN未完成
if (remainNum > 0 || remainReelCount > 0) { if (remainNum > 0 || remainReelCount > 0) {
if (outBom) { if (outBom) {
...@@ -612,6 +611,8 @@ public class LiteOrderCache { ...@@ -612,6 +611,8 @@ public class LiteOrderCache {
int assignNum = 0; int assignNum = 0;
int assignReelCount = 0; int assignReelCount = 0;
while (assignNum < remainNum || assignReelCount < remainReelCount) { while (assignNum < remainNum || assignReelCount < remainReelCount) {
Collection<String> excludePosIds = excludeOutPosIds();
excludePosIds.addAll(findPosIds);
String partNumber = orderItem.getPn(); String partNumber = orderItem.getPn();
String reelId = orderItem.getRi(); String reelId = orderItem.getRi();
String mpn = orderItem.getMpn(); String mpn = orderItem.getMpn();
......
...@@ -102,7 +102,8 @@ public class Storage extends BasePo implements Serializable { ...@@ -102,7 +102,8 @@ public class Storage extends BasePo implements Serializable {
* @return * @return
*/ */
public boolean isMimoG2(){ public boolean isMimoG2(){
return DeviceType.SMD_MIMO_G2.name().equals(type); //MIMOG2和G3统一处理
return (DeviceType.SMD_MIMO_G2.name().equals(type))||(DeviceType.SMD_MIMO_G3.name().equals(type));
} }
/** /**
* 是否是单台自动仓 * 是否是单台自动仓
......
...@@ -204,6 +204,7 @@ public class DevicesStatusUtil { ...@@ -204,6 +204,7 @@ public class DevicesStatusUtil {
StatusBean statusBean = new StatusBean(); StatusBean statusBean = new StatusBean();
statusBean.setCid(cid); statusBean.setCid(cid);
statusBean.setTime(System.currentTimeMillis()); statusBean.setTime(System.currentTimeMillis());
statusBean.setOfflineTime(-1);
statusBean.setMsgList(msgs); statusBean.setMsgList(msgs);
clientMsgs.put(cid, statusBean); clientMsgs.put(cid, statusBean);
return statusBean; return statusBean;
......
...@@ -12,16 +12,17 @@ import java.util.TimerTask; ...@@ -12,16 +12,17 @@ import java.util.TimerTask;
@Slf4j @Slf4j
public class MyWebSocketClient extends WebSocketClient { public class MyWebSocketClient extends WebSocketClient {
private String url="";
private WsMsgReceivedListener msgReceivedListener; // 消息接收监听器 private WsMsgReceivedListener msgReceivedListener; // 消息接收监听器
public MyWebSocketClient(URI serverUri, WsMsgReceivedListener listener) { public MyWebSocketClient(URI serverUri, WsMsgReceivedListener listener) {
super(serverUri); super(serverUri);
url=serverUri.toString();
this.msgReceivedListener =listener; this.msgReceivedListener =listener;
} }
@Override @Override
public void onOpen(ServerHandshake serverHandshake) { public void onOpen(ServerHandshake serverHandshake) {
log.info("onOpen "); log.info(url+":" +(new Date().toString()) + "connect webSServer ok ");
log.info((new Date().toString()) + "connect webSServer ok ");
cancelReconnect(); cancelReconnect();
if(msgReceivedListener!=null) { if(msgReceivedListener!=null) {
msgReceivedListener.onOpen(); msgReceivedListener.onOpen();
...@@ -41,20 +42,20 @@ public class MyWebSocketClient extends WebSocketClient { ...@@ -41,20 +42,20 @@ public class MyWebSocketClient extends WebSocketClient {
@Override @Override
public void onClose(int i, String s, boolean b) { public void onClose(int i, String s, boolean b) {
log.info("onClose: code:{} reason:{} {}", i, s, b); log.info(url+":" +"onClose: code:{} reason:{} {}", i, s, b);
startReconnect(); startReconnect();
} }
@Override @Override
public void onError(Exception e) { public void onError(Exception e) {
log.error("web socket client onerror :"+e.toString()); log.error(url+":" +"web socket client onerror :"+e.toString());
//关闭后重新连接 //关闭后重新连接
try { try {
close(); close();
}catch (Exception ex){ }catch (Exception ex){
log.error("web socket client onerror close error:"+e.toString()); log.error(url+":" +"web socket client onerror close error:"+e.toString());
} }
startReconnect(); startReconnect();
} }
......
...@@ -2,10 +2,15 @@ package com.neotel.smfcore.custom.hanwha.handler; ...@@ -2,10 +2,15 @@ package com.neotel.smfcore.custom.hanwha.handler;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
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.JsonUtil; import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.api.bean.CodeValidateParam; import com.neotel.smfcore.core.api.bean.CodeValidateParam;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener; import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.bean.BarcodeRule;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
...@@ -51,6 +56,9 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -51,6 +56,9 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@Autowired @Autowired
private TMSCommunicator tmsCommunicator; private TMSCommunicator tmsCommunicator;
@Autowired
private IComponentManager componentManager;
@Override @Override
public boolean isForThisApi(String apiName) { public boolean isForThisApi(String apiName) {
return apiName != null && apiName.equalsIgnoreCase("hanwha") && TMSCommunicator.isEnable(); return apiName != null && apiName.equalsIgnoreCase("hanwha") && TMSCommunicator.isEnable();
...@@ -61,8 +69,14 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -61,8 +69,14 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@Override @Override
public Barcode canPutInBeforeResolve(String codeResolveUrl, CodeValidateParam params) throws ValidateException { public Barcode canPutInBeforeResolve(String codeResolveUrl, CodeValidateParam params) throws ValidateException {
log.info("barcode[" + params.getCode() + "] 解析条码,调用 RequestGetPartInfo"); log.info("barcode[" + params.getCode() + "] 解析条码");
List<TMSPart> result = tmsApis.RequestGetPartInfo(0, params.getCode()); CodeBean codeBean = BarcodeRule.splitCodeAndSize(params.getCode());
String fullCode = codeBean.getCodeStr();
if (fullCode.endsWith("##")) {
fullCode = fullCode.substring(0, fullCode.length() - 2);
}
log.info("barcode[" + params.getCode() + "] 解析条码到完整条码:"+fullCode+",调用 RequestGetPartInfo");
List<TMSPart> result = tmsApis.RequestGetPartInfo(0, fullCode);
if (result.size() > 0) { if (result.size() > 0) {
String pn = result.get(0).getPartName(); String pn = result.get(0).getPartName();
String code = result.get(0).getReelCode(); String code = result.get(0).getReelCode();
...@@ -81,13 +95,44 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -81,13 +95,44 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
} }
int width = 7; int width = 7;
int height = 8; int height = 8;
Barcode barcode = new Barcode();
Barcode barcode = barcodeManager.findByBarcode(code);
if (barcode == null) {
barcode = new Barcode();
}
barcode.setFullCode(params.getCode()); barcode.setFullCode(params.getCode());
barcode.setAmount(count); barcode.setAmount(count);
barcode.setPartNumber(pn); barcode.setPartNumber(pn);
barcode.setBarcode(code); barcode.setBarcode(code);
barcode.setHeight(height); barcode.setHeight(height);
barcode.setPlateSize(width); barcode.setPlateSize(width);
Date proDate = getDate(result.get(0).getProductionDate());
if (proDate != null) {
barcode.setProduceDate(proDate);
}
Date expDate = getDate(result.get(0).getExpiryDate());
if (expDate != null) {
barcode.setExpireDate(expDate);
}
//判断Pn是否存在
Component component = componentManager.findOneByPN(pn);
if (component != null) {
log.info("未找到PN[" + pn + "] 新建一个");
//找到了,复制一个
Component newComponent = new Component();
newComponent.setProvider("");
newComponent.setPlateSize(width);
newComponent.setHeight(height);
newComponent.setPartNumber(component.getPartNumber());
newComponent.setAmount(count);
newComponent.setName(component.getPartNumber());
component = componentManager.save(component);
}
barcode = barcodeManager.saveBarcode(barcode); barcode = barcodeManager.saveBarcode(barcode);
log.info("barcode[" + params.getCode() + "] RequestGetPartInfo ,PN=[" + pn + "],code=[" + code + "],count=[" + count + "]新增条码准备入库"); log.info("barcode[" + params.getCode() + "] RequestGetPartInfo ,PN=[" + pn + "],code=[" + code + "],count=[" + count + "]新增条码准备入库");
return barcode; return barcode;
...@@ -95,36 +140,46 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -95,36 +140,46 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
return null; return null;
} }
private Date getDate(String str) {
try {
if (ObjectUtil.isNotEmpty(str)) {
return DateUtil.toDate(str, "yyyy-MM-dd HH:mm:ss");
}
} catch (Exception ex) {
}
return null;
}
@Override @Override
public Barcode canPutInAfterResolve(String inCheckUrl, CodeValidateParam params, Barcode barcode) throws ValidateException { public Barcode canPutInAfterResolve(String inCheckUrl, CodeValidateParam params, Barcode barcode) throws ValidateException {
log.info("barcode[" + barcode.getBarcode() + "] 准备入库,调用 RequestGetPartInfo"); log.info("barcode[" + barcode.getBarcode() + "] 准备入库,调用 RequestGetPartInfo");
List<TMSPart> result = tmsApis.RequestGetPartInfo(0, barcode.getFullCode()); // List<TMSPart> result = tmsApis.RequestGetPartInfo(0, barcode.getFullCode());
if (result.size() > 0) { // if (result.size() > 0) {
String pn = result.get(0).getPartName(); // String pn = result.get(0).getPartName();
String code = result.get(0).getReelCode(); // String code = result.get(0).getReelCode();
// 2024-05-23 14:15:45.749 INFO [TMSApis.java:473] - PostJson, url=[http://192.168.101.96:8082/webservice/RequestGetPartInfo], //// 2024-05-23 14:15:45.749 INFO [TMSApis.java:473] - PostJson, url=[http://192.168.101.96:8082/webservice/RequestGetPartInfo],
// send=[{"data":{"RequestID":0,"ReelCode":"20180710184319-001","Indate":"2024-05-23 14:15:45"}}], // // send=[{"data":{"RequestID":0,"ReelCode":"20180710184319-001","Indate":"2024-05-23 14:15:45"}}],
// response=[{"RequestID":0,"Data":[{"PartName":"Z2203061201A","ReelCode":"20180710184319-001","Count":5000}],"error":null}] // // response=[{"RequestID":0,"Data":[{"PartName":"Z2203061201A","ReelCode":"20180710184319-001","Count":5000}],"error":null}]
//
boolean needS = false; // boolean needS = false;
if (ObjectUtil.isNotEmpty(pn)) { // if (ObjectUtil.isNotEmpty(pn)) {
barcode.setPartNumber(pn); // barcode.setPartNumber(pn);
needS = true; // needS = true;
} // }
if (ObjectUtil.isNotEmpty(code)) { // if (ObjectUtil.isNotEmpty(code)) {
barcode.setBarcode(code); // barcode.setBarcode(code);
needS = true; // needS = true;
} // }
int count = result.get(0).getResponseCount(); // int count = result.get(0).getResponseCount();
if (count > 0) { // if (count > 0) {
barcode.setAmount(count); // barcode.setAmount(count);
needS = true; // needS = true;
} // }
if (needS) { // if (needS) {
log.info("barcode[" + barcode.getBarcode() + "] 准备入库,调用 RequestGetPartInfo ,更改pn=[" + barcode.getPartNumber() + "],code=[" + barcode.getBarcode() + "],count=[" + barcode.getAmount() + "]"); // log.info("barcode[" + barcode.getBarcode() + "] 准备入库,调用 RequestGetPartInfo ,更改pn=[" + barcode.getPartNumber() + "],code=[" + barcode.getBarcode() + "],count=[" + barcode.getAmount() + "]");
barcodeManager.saveBarcode(barcode); // barcodeManager.saveBarcode(barcode);
} // }
} // }
return barcode; return barcode;
} }
...@@ -185,7 +240,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -185,7 +240,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@Override @Override
public boolean deviceStatusChanges(String deviceStatusUrl, String[] cids, Integer[] statusList) { public boolean deviceStatusChanges(String deviceStatusUrl, String[] cids, Integer[] statusList) {
log.info("deviceStatusChanges ,设备状态变化[" + JsonUtil.toJsonStr(cids) + "],[" + JsonUtil.toJsonStr(statusList) + "],通知TMS"); log.info("deviceStatusChanges ,设备状态变化[" + JsonUtil.toJsonStr(cids) + "],[" + JsonUtil.toJsonStr(statusList) + "],通知TMS");
// UpdateStorageConnectionInfo(cids,statusList); UpdateStorageConnectionInfo(cids,statusList);
RequestSyncRackStatusInfo(cids, statusList); RequestSyncRackStatusInfo(cids, statusList);
return true; return true;
...@@ -225,8 +280,10 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -225,8 +280,10 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
} }
} }
boolean needSendRack=false;
if(status==-1||status==0||status>=1){ if(status==-1||status==0||status>=1){
if(status>=1){ if(status>=1){
needSendRack=false;
needSyncDataList.add(storage); needSyncDataList.add(storage);
log.info("设备"+cid+"状态改变,当前状态:"+status+",需要通知韩华,并同步物料信息"); log.info("设备"+cid+"状态改变,当前状态:"+status+",需要通知韩华,并同步物料信息");
}else{ }else{
...@@ -241,26 +298,31 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -241,26 +298,31 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
if (status >= 1) { if (status >= 1) {
flag = 2; flag = 2;
} }
List<StoragePos> allStorage = storagePosManager.findByStorage(storage.getId()); if(needSendRack) {
for (StoragePos pos : allStorage //只有上线需要发送rack
) { List<StoragePos> allStorage = storagePosManager.findByStorage(storage.getId());
TMSRackStatus st = new TMSRackStatus(); for (StoragePos pos : allStorage
st.setPosName(pos.getPosName()); ) {
st.setRackID(storage.getCid()); TMSRackStatus st = new TMSRackStatus();
st.setFlag(flag); st.setPosName(pos.getPosName());
st.setOutdate(""); st.setRackID(storage.getCid());
st.setIndate(""); st.setFlag(flag);
if (flag == 2) { st.setOutdate("");
st.setIndate(dateString); st.setIndate("");
} else { if (flag == 2) {
st.setOutdate(dateString); st.setIndate(dateString);
} else {
st.setOutdate(dateString);
}
SyncRackStatusDatas.add(st);
} }
SyncRackStatusDatas.add(st);
} }
} }
//离线只发状态改变
//上线时只发状态改变,和reel同步,暂不发Rack
if (storageIds.size() > 0) { if (storageIds.size() > 0) {
tmsApis.RequestSyncRackStatusInfo(0, SyncRackStatusDatas); // tmsApis.RequestSyncRackStatusInfo(0, SyncRackStatusDatas);
} }
if(needSyncDataList.size()>0){ if(needSyncDataList.size()>0){
for (Storage st : for (Storage st :
...@@ -327,21 +389,24 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -327,21 +389,24 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
status = bean.getStatus(); status = bean.getStatus();
} }
} }
String conCode = TMS_Code.CODE_1020; String conCode = "0";
if (status <= 0) { // if (status <= 0) {
//初始化失败 // //初始化失败
conCode = TMS_Code.CODE_0002; // conCode = TMS_Code.CODE_0002;
} else if (status == 1) { // } else if (status == 1) {
conCode = TMS_Code.CODE_1020; // conCode = TMS_Code.CODE_1020;
} else if (status <= 4) { // } else if (status <= 4) {
//报警 // //报警
conCode = TMS_Code.CODE_1024; // conCode = TMS_Code.CODE_1024;
} else if (status == 5) { // } else if (status == 5) {
conCode = TMS_Code.CODE_1023; // conCode = TMS_Code.CODE_1023;
} else { // } else {
//忙碌 // //忙碌
conCode = TMS_Code.CODE_1010; // conCode = TMS_Code.CODE_1010;
// }
if(status>=1){
conCode="2";
} }
storageIds.add(storage.getCid()); storageIds.add(storage.getCid());
storageTypes.add(type); storageTypes.add(type);
......
...@@ -45,6 +45,9 @@ public class TMSApis { ...@@ -45,6 +45,9 @@ public class TMSApis {
item.setReelCode(getMapValue(map, "ReelCode")); item.setReelCode(getMapValue(map, "ReelCode"));
item.setResponseCount((Integer)getMapValue(map, "Count")); item.setResponseCount((Integer)getMapValue(map, "Count"));
item.setRequestCount((Integer)getMapValue(map, "Count")); item.setRequestCount((Integer)getMapValue(map, "Count"));
item.setProductionDate(getMapValue(map,"ProductionDate"));
item.setExpiryDate(getMapValue(map,"ExpiryDate"));
item.setWarehousingDate(getMapValue(map,"WarehousingDate"));
list.add(item); list.add(item);
......
...@@ -18,7 +18,9 @@ import com.neotel.smfcore.common.exception.ValidateException; ...@@ -18,7 +18,9 @@ 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.JsonUtil; import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.api.SmfApi; import com.neotel.smfcore.core.api.SmfApi;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
...@@ -26,6 +28,7 @@ import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; ...@@ -26,6 +28,7 @@ import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
...@@ -93,6 +96,9 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -93,6 +96,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
@Autowired @Autowired
private IDataLogManager dataLogManager; private IDataLogManager dataLogManager;
@Autowired
private IComponentManager componentManager;
private static int gRequestID = 1000; private static int gRequestID = 1000;
public static int GetRequestID() public static int GetRequestID()
{ {
...@@ -463,9 +469,10 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -463,9 +469,10 @@ public class TMSCommunicator implements WsMsgReceivedListener {
//查找工单的所有任务 //查找工单的所有任务
Criteria c = Criteria.where("sourceName").is(liteOrder.getOrderNo()).and("type").is(2); Criteria c = Criteria.where("sourceName").is(liteOrder.getOrderNo()).and("type").is(2);
List<DataLog> dataLogs = dataLogManager.findByQuery(new Query(c)); List<DataLog> dataLogs = dataLogManager.findByQuery(new Query(c));
boolean hasCancelTask=false;
for (DataLog task : boolean allCancel = true;
dataLogs) { for (DataLog task :
dataLogs) {
// if(ObjectUtil.isNotEmpty(item.getPn())&&task.getPartNumber().equals(task.getPartNumber())){ // if(ObjectUtil.isNotEmpty(item.getPn())&&task.getPartNumber().equals(task.getPartNumber())){
// //
// }else if(ObjectUtil.isNotEmpty(item.getRi())&&task.getBarcode().equals(task.getBarcode())){ // }else if(ObjectUtil.isNotEmpty(item.getRi())&&task.getBarcode().equals(task.getBarcode())){
...@@ -473,29 +480,40 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -473,29 +480,40 @@ public class TMSCommunicator implements WsMsgReceivedListener {
// }else{ // }else{
// continue; // continue;
// } // }
//是工单出库任务 //是工单出库任务
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo())) { if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo())) {
int responseNum = task.getNum();
String logCode = TMS_Code.CODE_2013;//默认已完成 String logCode = TMS_Code.CODE_2013;//默认已完成
if (task.isCancel()) { if (task.isCancel()) {
logCode = TMS_Code.CODE_2012;//取消成功 hasCancelTask=true;
} else if (task.isExecuting() || task.isWait()) { responseNum = 0;
logCode = TMS_Code.CODE_2011;//出库中 logCode = TMS_Code.CODE_2012;//取消成功
} else { } else if (task.isExecuting() || task.isWait()) {
logCode = TMS_Code.CODE_2013;//已完成 logCode = TMS_Code.CODE_2011;//出库中
} allCancel = false;
TMSPart part = TMSPart.newBean(tmsParts.size(),task.getPartNumber(), task.getBarcode(), task.getNum(), task.getNum(), logCode, task.getCid(), task.getPosName()); } else {
tmsParts.add(part); logCode = TMS_Code.CODE_2013;//已完成
allCancel = false;
} }
TMSPart part = TMSPart.newBean(tmsParts.size(), task.getPartNumber(), task.getBarcode(), task.getNum(), responseNum, logCode, task.getCid(), task.getPosName());
tmsParts.add(part);
} }
}
//有取消且有完成的返回2016.全部取消返回2012
if (liteOrder.isClosed()) { if (liteOrder.isClosed()) {
if (tmsParts.size() > 0) { //如果工单全部取消,需要发送2012
if (allCancel) {
tmsReserve.setResultCode(TMS_Code.CODE_2012);
} else if (hasCancelTask) {
//有取消任务返回2016
tmsReserve.setResultCode(TMS_Code.CODE_2016);
} else if (tmsParts.size() > 0) {
tmsReserve.setResultCode(TMS_Code.CODE_2013); tmsReserve.setResultCode(TMS_Code.CODE_2013);
} else { } else {
tmsReserve.setResultCode(TMS_Code.CODE_2001); tmsReserve.setResultCode(TMS_Code.CODE_2001);
} }
} else if (liteOrder.isOutOne() || liteOrder.isOutTails() || liteOrder.isOutOne()) { }else if (liteOrder.isOutOne() || liteOrder.isOutTails() || liteOrder.isOutOne()) {
tmsReserve.setResultCode(TMS_Code.CODE_2011); tmsReserve.setResultCode(TMS_Code.CODE_2011);
} }
...@@ -533,10 +551,10 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -533,10 +551,10 @@ public class TMSCommunicator implements WsMsgReceivedListener {
String reelCode; String reelCode;
int count; int count;
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
switch (topic) { switch (topic) {
case "RequestDeliveryOrder": case "RequestDeliveryOrder":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
partItems = getMapValue(msgMap, "PartNames"); partItems = getMapValue(msgMap, "PartNames");
partCounts = getMapValue(msgMap, "Counts"); partCounts = getMapValue(msgMap, "Counts");
towerLamp = (boolean) getMapValue(msgMap, "TowerLamp"); towerLamp = (boolean) getMapValue(msgMap, "TowerLamp");
...@@ -544,16 +562,19 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -544,16 +562,19 @@ public class TMSCommunicator implements WsMsgReceivedListener {
RequestDeliveryOrder(requestID, partItems, partCounts, towerLamp); RequestDeliveryOrder(requestID, partItems, partCounts, towerLamp);
break; break;
case "RequestDeliveryOrderByLocation": case "RequestDeliveryOrderByLocation":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
List<TMSPos> Locations = getMapValue(msgMap, "Locations"); List<TMSPos> Locations = getMapValue(msgMap, "Locations");
//3.10 RequestDeliveryOrderByLocation //3.10 RequestDeliveryOrderByLocation
RequestDeliveryOrderByLocation(requestID, Locations); RequestDeliveryOrderByLocation(requestID, Locations);
break; break;
case "RequestDeliveryOrderByReelCd": case "RequestDeliveryOrderByReelCd":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
List<String> reelCds = getMapValue(msgMap, "ReelCds"); List<String> reelCds = getMapValue(msgMap, "ReelCds");
//3.12 RequestDeliveryOrderByReelCd //3.12 RequestDeliveryOrderByReelCd
RequestDeliveryOrderByReelCd(requestID, reelCds); RequestDeliveryOrderByReelCd(requestID, reelCds);
break; break;
case "RequestUpdateDeliveryReserveState": case "RequestUpdateDeliveryReserveState":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
List<String> reserveCodes = getMapValue(msgMap, "ReserveCodes"); List<String> reserveCodes = getMapValue(msgMap, "ReserveCodes");
List<Integer> resultCodes = getMapValue(msgMap, "ResultCodes"); List<Integer> resultCodes = getMapValue(msgMap, "ResultCodes");
// //
...@@ -604,11 +625,13 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -604,11 +625,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
// RequestPrintLabelDockingCart(requestID, dockingCartInfo); // RequestPrintLabelDockingCart(requestID, dockingCartInfo);
// break; // break;
case "NotifyLog": case "NotifyLog":
// log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
break; break;
default: default:
// log.error("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"],requestID=["+requestID+"],message:["+message+"]"); // log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
log.debug("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"],requestID=["+requestID+"],message:["+message+"]");
// log.error("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"] "); // log.debug("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"] ");
return; return;
} }
} }
...@@ -724,31 +747,58 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -724,31 +747,58 @@ public class TMSCommunicator implements WsMsgReceivedListener {
try { try {
int curroNum = 0; int curroNum = 0;
try {
for (DataLog task : for (DataLog task :
dataLogs) { dataLogs) {
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getPartNumber().equals(item.getPn())) { if (ObjectUtil.isEmpty(task.getSourceName()) || ObjectUtil.isEmpty(task.getSubSourceId())) {
if (task.getSubSourceId().equals(item.getId())) { continue;
int requestNum = task.getNum(); }
curroNum += task.getNum(); if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getPartNumber().equals(item.getPn())) {
if (curroNum > item.getNeedNum()) { if (task.getSubSourceId().equals(item.getId())) {
requestNum = task.getNum() - (curroNum - item.getNeedNum()); int requestNum = task.getNum();
curroNum += task.getNum();
if (curroNum > item.getNeedNum()) {
requestNum = task.getNum() - (curroNum - item.getNeedNum());
}
TMSPart p = TMSPart.newBean(parts.size(), task.getPartNumber(), task.getBarcode(), requestNum, task.getNum(), TMS_Code.CODE_2010, task.getCid(), task.getPosName());
log.info("RequestDeliveryOrder pn=" + task.getPartNumber() + ",出库成功:code=" + TMS_Code.CODE_2010 + ",posName=" + task.getPosName() + ",barcode=" + task.getBarcode());
parts.add(p);
} }
TMSPart p = TMSPart.newBean(parts.size(), task.getPartNumber(), task.getBarcode(), requestNum, task.getNum(), TMS_Code.CODE_2010, task.getCid(), task.getPosName());
log.info("RequestDeliveryOrder pn=" + task.getPartNumber() + ",出库成功:code=" + TMS_Code.CODE_2010 + ",posName=" + task.getPosName() + ",barcode=" + task.getBarcode());
parts.add(p);
} }
} }
} catch (Exception ex) {
log.error(" RequestDeliveryOrder 查找 " + item.getPn() + "的出库任务出错:error::", ex.toString());
} }
if (curroNum <= 0) { if (curroNum <= 0) {
//如果缺料返回2002,否则还是返回2010 //如果缺料返回2002,否则还是返回2010
String shortValue = item.getAppend("shortage"); String shortValue = item.getAppend("shortage");
if (ObjectUtil.isEmpty(shortValue)) {
shortValue = "";
}
if (ObjectUtil.isNotEmpty(shortValue) && shortValue.equals("true")) { if (ObjectUtil.isNotEmpty(shortValue) && shortValue.equals("true")) {
//未出库 //查找库存中是否有此物料,如果数量不足返回2003,否则返回2002
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2002, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",出库失败缺料:code=" + TMS_Code.CODE_2002); List<InventoryItem> itmes = dataCache.getInventoryByPN(item.getPn());
TMSPart p;
if (itmes.size() > 0) {
//如果是有库存但是库存不足,发送2003
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2001, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",出库失败缺料,库存不足:code=" + TMS_Code.CODE_2001);
} else {
//判断pn是否存在,存在返回2002,否则返回2003
Component component=componentManager.findOneByPN(item.getPn());
if(component==null){
//pn不存在,返回2003
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2003, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",出库失败缺料,PN不存在:code=" + TMS_Code.CODE_2003);
}else {
//库存无此物料,发送2002
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2002, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",出库失败缺料,库存无此料:code=" + TMS_Code.CODE_2002);
}
}
parts.add(p); parts.add(p);
} else { } else {
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2010, "", ""); TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2010, "", "");
...@@ -759,7 +809,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -759,7 +809,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
} }
} catch (Exception ex) { } catch (Exception ex) {
log.error(" RequestDeliveryOrder " + item.getPn() + ",error:" + ex.toString()); log.error(" RequestDeliveryOrder " + item.getPn() + ",error::", ex.toString());
} }
} }
...@@ -951,6 +1001,9 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -951,6 +1001,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
private void RequestUpdateDeliveryReserveState(int requestID, List<String> reserveCodes, List<Integer> resultCodes) { private void RequestUpdateDeliveryReserveState(int requestID, List<String> reserveCodes, List<Integer> resultCodes) {
//3.15 ResponseUpdateDeliveryReserveState //3.15 ResponseUpdateDeliveryReserveState
//2016也需要取消工单,返回的时候整体的code需要返回2016
List<TMSReserve> ReserveList = new ArrayList<>(); List<TMSReserve> ReserveList = new ArrayList<>();
int state = 0; int state = 0;
try { try {
...@@ -979,7 +1032,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -979,7 +1032,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
tmsReserve.setResultCode(resultCode); tmsReserve.setResultCode(resultCode);
tmsReserve.setPartList(new ArrayList<>()); tmsReserve.setPartList(new ArrayList<>());
List<TMSPart> tmsParts = new ArrayList<>(); List<TMSPart> tmsParts = new ArrayList<>();
if (resultCode.equals(TMS_Code.CODE_2012)) { if (resultCode.equals(TMS_Code.CODE_2012)||resultCode.equals(TMS_Code.CODE_2016)) {
tmsReserve.setResultCode(TMS_Code.CODE_2014); tmsReserve.setResultCode(TMS_Code.CODE_2014);
LiteOrder order = liteOrderCache.getLiteOrder(reserveCode); LiteOrder order = liteOrderCache.getLiteOrder(reserveCode);
if (order != null) { if (order != null) {
...@@ -1026,7 +1079,11 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -1026,7 +1079,11 @@ public class TMSCommunicator implements WsMsgReceivedListener {
//判断工单是否可以取消, //判断工单是否可以取消,
liteOrderCache.closeOrder(order.getOrderNo()); liteOrderCache.closeOrder(order.getOrderNo());
if (order.isClosed()) { if (order.isClosed()) {
tmsReserve.setResultCode(TMS_Code.CODE_2012);//取消成功 if ( resultCode.equals(TMS_Code.CODE_2016)) {
tmsReserve.setResultCode(TMS_Code.CODE_2016);//取消成功
}else {
tmsReserve.setResultCode(TMS_Code.CODE_2012);//取消成功
}
}else{ }else{
order.addAppendDate("cancel",""); order.addAppendDate("cancel","");
liteOrderManager.save(order); liteOrderManager.save(order);
......
...@@ -78,7 +78,7 @@ public class TMS_Code { ...@@ -78,7 +78,7 @@ public class TMS_Code {
public static final String CODE_1024 = "1024"; public static final String CODE_1024 = "1024";
/** /**
* 2001 Part not enough * 2001 Part not enough 数量不足
*/ */
public static final String CODE_2001 = "2001"; public static final String CODE_2001 = "2001";
......
...@@ -24,6 +24,14 @@ public class TMSPart extends TMSPos implements Serializable { ...@@ -24,6 +24,14 @@ public class TMSPart extends TMSPos implements Serializable {
private int responseCount = 0; private int responseCount = 0;
private String resultCode = ""; private String resultCode = "";
public String ProductionDate ="";
public String ExpiryDate = "";
public String WarehousingDate = "";
public static TMSPart newBean(int index, String pn,String barcode,int requestCount,int responseCount,String resultCode,String cid,String posName ) { public static TMSPart newBean(int index, String pn,String barcode,int requestCount,int responseCount,String resultCode,String cid,String posName ) {
TMSPart bean = new TMSPart(); TMSPart bean = new TMSPart();
bean.setIndex(index); bean.setIndex(index);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!