Commit db2e662c LN

韩华接口修改

1 个父辈 eb3a560b
...@@ -730,6 +730,19 @@ public class LiteOrderCache { ...@@ -730,6 +730,19 @@ public class LiteOrderCache {
} }
} }
} }
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
//缓存清除锁定 TODO
if(lockPosList!=null){
for (StoragePos pos :
lockPosList) {
Storage storage=dataCache.getStorageById(pos.getStorageId());
dataCache.unLockOneReel(storage.getCid(),pos.getBarcode().getPartNumber());
}
}
//绑定料需要解绑 //绑定料需要解绑
storagePosManager.clearLockPos(liteOrder.getOrderNo()); storagePosManager.clearLockPos(liteOrder.getOrderNo());
...@@ -922,7 +935,7 @@ public class LiteOrderCache { ...@@ -922,7 +935,7 @@ public class LiteOrderCache {
} else if (Strings.isNullOrEmpty(reelId) && Strings.isNullOrEmpty(partNumber) && !Strings.isNullOrEmpty(mpn)){ } else if (Strings.isNullOrEmpty(reelId) && Strings.isNullOrEmpty(partNumber) && !Strings.isNullOrEmpty(mpn)){
pos=storagePosManager.findMpnInStorages(availableStorageIds, mpn, excludePosIds, checkoutType,orderItem.getAppendData()); pos=storagePosManager.findMpnInStorages(availableStorageIds, mpn, excludePosIds, checkoutType,orderItem.getAppendData());
} }
if (pos == null) { if (pos != null) {
// //锁定物料 // //锁定物料
assignNum = assignNum + pos.getBarcode().getAmount(); assignNum = assignNum + pos.getBarcode().getAmount();
assignReelCount = assignReelCount + 1; assignReelCount = assignReelCount + 1;
...@@ -934,6 +947,10 @@ public class LiteOrderCache { ...@@ -934,6 +947,10 @@ public class LiteOrderCache {
pos.setBarcode(barcode); pos.setBarcode(barcode);
storagePosManager.save(pos); storagePosManager.save(pos);
//增加物料锁定
Storage storage=dataCache.getStorageById(pos.getStorageId());
dataCache.lockOneReel(storage.getCid(),pos.getBarcode().getPartNumber());
} }
//如果是RI出库,只有一盘,出完就结束 //如果是RI出库,只有一盘,出完就结束
if(!Strings.isNullOrEmpty(reelId)){ if(!Strings.isNullOrEmpty(reelId)){
......
...@@ -507,10 +507,22 @@ public class StorageController { ...@@ -507,10 +507,22 @@ public class StorageController {
Integer width =0; Integer width =0;
String labelName=""; String labelName="";
Integer posType=0; Integer posType=0;
String column = lineValues[columnIndex]; //lie String column = "";
String magazine = lineValues[magazineIndex]; //模组 String magazine="";
String layer = lineValues[layerIndex]; //层 String layer="";
String slot = lineValues[slotIndex]; //槽位 String slot="";
if(columnIndex>=0){
column=lineValues[columnIndex]; //lie
}
if(magazineIndex>=0) {
magazine = lineValues[magazineIndex]; //模组
}
if(layerIndex>=0) {
layer = lineValues[layerIndex]; //层
}
if(slotIndex>=0) {
slot = lineValues[slotIndex]; //槽位
}
try { try {
priority =Integer.parseInt(lineValues[priIndex]) ; priority =Integer.parseInt(lineValues[priIndex]) ;
height = Integer.parseInt(lineValues[hIndex]); height = Integer.parseInt(lineValues[hIndex]);
......
...@@ -139,7 +139,11 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -139,7 +139,11 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
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;
} }
return null; else{
log.info("barcode[" + params.getCode() + "] 解析条码到完整条码:"+fullCode+",调用 RequestGetPartInfo 未收到反馈");
throw new ValidateException("smfcore.mesApi.inCheck.error", "RequestGetPartInfo no data");
}
// return null;
} }
private Date getDate(String str) { private Date getDate(String str) {
...@@ -154,7 +158,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -154,7 +158,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@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() + "] 准备入库, 直接返回");
// 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();
......
...@@ -465,7 +465,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -465,7 +465,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
List<String> rackList; List<String> rackList;
List<TMSPos> Locations; List<TMSPos> Locations;
List<String> reelCds; List<String> reelCds;
boolean towerLamp; boolean towerLamp = false;
String registerID; String registerID;
String reelCode; String reelCode;
int count; int count;
...@@ -473,32 +473,32 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -473,32 +473,32 @@ public class TMSCommunicator implements WsMsgReceivedListener {
switch (topic) { switch (topic) {
case "RequestDeliveryOrder": case "RequestDeliveryOrder":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],"); 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");
rackList= getMapValue(msgMap,"RackList"); rackList = getMapValue(msgMap, "RackList");
if(rackList==null){ if (rackList == null) {
rackList=new ArrayList<>(); rackList = new ArrayList<>();
} }
//3.8 RequestDeliveryOrder //3.8 RequestDeliveryOrder
RequestDeliveryOrder(requestID, partItems, partCounts, towerLamp,rackList); RequestDeliveryOrder(requestID, partItems, partCounts, towerLamp, rackList);
break; break;
case "RequestDeliveryOrderByLocation": case "RequestDeliveryOrderByLocation":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],"); log.info("onMsgReceived: requestID=[" + requestID + "],Topic=[" + topic + "],message:[" + message + "],");
Locations = getMapValue(msgMap, "Locations"); 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+"],"); log.info("onMsgReceived: requestID=[" + requestID + "],Topic=[" + topic + "],message:[" + message + "],");
reelCds = getMapValue(msgMap, "ReelCds"); reelCds = getMapValue(msgMap, "ReelCds");
rackList= getMapValue(msgMap,"RackList"); rackList = getMapValue(msgMap, "RackList");
//3.12 RequestDeliveryOrderByReelCd //3.12 RequestDeliveryOrderByReelCd
RequestDeliveryOrderByReelCd(requestID, reelCds,rackList); RequestDeliveryOrderByReelCd(requestID, reelCds, rackList);
break; break;
case "RequestUpdateDeliveryReserveState": case "RequestUpdateDeliveryReserveState":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],"); 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");
// //
...@@ -506,31 +506,35 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -506,31 +506,35 @@ public class TMSCommunicator implements WsMsgReceivedListener {
RequestUpdateDeliveryReserveState(requestID, reserveCodes, resultCodes); RequestUpdateDeliveryReserveState(requestID, reserveCodes, resultCodes);
break; break;
case "RequestDeliveryReserve": case "RequestDeliveryReserve":
log.info("onMsgReceived: requestID=[" + requestID + "],Topic=[" + topic + "],message:[" + message + "],");
// 2024-12-10 10:49:05.223 ERROR [TMSCommunicator.java:585] - 处理消息出错:message=
// [{"PartNames":["EP16-000689B"],"Counts":[5000],"RackList":[],"Topic":"RequestDeliveryReserve","id":4,"uid":463433}],error:java.lang.NullPointerException
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");
rackList= getMapValue(msgMap,"RackList"); rackList = getMapValue(msgMap, "RackList");
if(rackList==null){ if (rackList == null) {
rackList=new ArrayList<>(); rackList = new ArrayList<>();
} }
//3.14 RequestDeliveryReserve //3.14 RequestDeliveryReserve
RequestDeliveryReserve(requestID, partItems, partCounts,towerLamp,rackList); RequestDeliveryReserve(requestID, partItems, partCounts, towerLamp, rackList);
break; break;
case "RequestDeliveryReserveByLocation": case "RequestDeliveryReserveByLocation":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],"); log.info("onMsgReceived: requestID=[" + requestID + "],Topic=[" + topic + "],message:[" + message + "],");
Locations = getMapValue(msgMap, "Locations"); Locations = getMapValue(msgMap, "Locations");
// 3.16 ,RequestDeliveryReserveByLocation // 3.16 ,RequestDeliveryReserveByLocation
RequestDeliveryReserveByLocation(requestID, Locations); RequestDeliveryReserveByLocation(requestID, Locations);
break; break;
case "RequestDeliveryReserveByReelCd": case "RequestDeliveryReserveByReelCd":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],"); log.info("onMsgReceived: requestID=[" + requestID + "],Topic=[" + topic + "],message:[" + message + "],");
reelCds = getMapValue(msgMap, "ReelCds"); reelCds = getMapValue(msgMap, "ReelCds");
rackList= getMapValue(msgMap,"RackList"); rackList = getMapValue(msgMap, "RackList");
//3.18 RequestDeliveryOrderByReelCd //3.18 RequestDeliveryOrderByReelCd
RequestDeliveryReserveByReelCd(requestID, reelCds,rackList); RequestDeliveryReserveByReelCd(requestID, reelCds, rackList);
break; break;
// case "RequestResultOfDeliveryReserve": // case "RequestResultOfDeliveryReserve":
...@@ -575,7 +579,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -575,7 +579,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
break; break;
default: default:
// log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],"); // log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
log.debug("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"],requestID=["+requestID+"],message:["+message+"]"); // log.info("onMsgReceived:未找到对应的TOPIC: Topic=[" + topic + "],requestID=[" + requestID + "],message:[" + message + "]");
// log.debug("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"] "); // log.debug("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"] ");
return; return;
...@@ -902,6 +906,8 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -902,6 +906,8 @@ public class TMSCommunicator implements WsMsgReceivedListener {
String responseCmd = "ResponseDeliveryReserve"; String responseCmd = "ResponseDeliveryReserve";
try { try {
//成功返回2010
//2001:, 2002: ,2003:
if (partItem == null || partCount == null || partItem.size() <= 0 || partCount.size() <= 0) { if (partItem == null || partCount == null || partItem.size() <= 0 || partCount.size() <= 0) {
log.info(requestCmd + " 数据不完整,直接返回"); log.info(requestCmd + " 数据不完整,直接返回");
...@@ -911,6 +917,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -911,6 +917,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
String soName = "DO" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss"); String soName = "DO" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
List<LiteOrderItem> liteOrderItems = tmsUtil.partToItems(partItem, partCount); List<LiteOrderItem> liteOrderItems = tmsUtil.partToItems(partItem, partCount);
//锁定物料可以有执行中的工单
LiteOrder liteOrder = tmsUtil.createOrder(responseCmd, requestID, liteOrderItems, soName, false, rackList); LiteOrder liteOrder = tmsUtil.createOrder(responseCmd, requestID, liteOrderItems, soName, false, rackList);
if (liteOrder == null) { if (liteOrder == null) {
...@@ -919,7 +926,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -919,7 +926,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
ResponseDeliveryReserve(responseCmd, requestID, parts, "", ""); ResponseDeliveryReserve(responseCmd, requestID, parts, "", "");
} else { } else {
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo()); liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder != null) { if (liteOrder != null) {
List<TMSPart> parts =tmsUtil.GetReserveList(requestCmd,liteOrder); List<TMSPart> parts =tmsUtil.GetReserveList(requestCmd,liteOrder);
......
...@@ -3,13 +3,16 @@ package com.neotel.smfcore.custom.hanwha.handler; ...@@ -3,13 +3,16 @@ package com.neotel.smfcore.custom.hanwha.handler;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
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.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.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; 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;
...@@ -47,6 +50,8 @@ public class TMSUtil { ...@@ -47,6 +50,8 @@ public class TMSUtil {
private DataCache dataCache; private DataCache dataCache;
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
@Autowired
private IComponentManager componentManager;
public TMSReserve GetOrderInfo(LiteOrder liteOrder) { public TMSReserve GetOrderInfo(LiteOrder liteOrder) {
...@@ -128,12 +133,25 @@ public class TMSUtil { ...@@ -128,12 +133,25 @@ public class TMSUtil {
if (rackList == null) { if (rackList == null) {
rackList = new ArrayList<>(); rackList = new ArrayList<>();
} }
//判断是否有已执行的工单,有的话创建失败 if(autoOut){
Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
List<LiteOrder> orderList = liteOrderManager.findByQuery(query); //判断是否有已执行的工单,有的话创建失败
if (orderList.size() > 0) { Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED).ne(LITEORDER_STATUS.NEW));
log.info(requestCmd + ": 当前有未关闭的工单" + orderList.size() + ",创建工单失败"); List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
return null; List<LiteOrder> orders=new ArrayList<>();
for (LiteOrder order:orderList
) {
if (order.isNew()) {
continue;
}
orders.add(order);
}
if (orders.size() > 0) {
log.info(requestCmd + ": 当前有未关闭的工单" + orderList.size() + ",创建工单失败");
return null;
}
}else{
} }
LiteOrder liteOrder = new LiteOrder(orderNo, items); LiteOrder liteOrder = new LiteOrder(orderNo, items);
...@@ -164,8 +182,6 @@ public class TMSUtil { ...@@ -164,8 +182,6 @@ public class TMSUtil {
//先锁定物料 //先锁定物料
liteOrderCache.LiteOrderLockReel(liteOrder.getOrderNo(), false, false, true, rackList); liteOrderCache.LiteOrderLockReel(liteOrder.getOrderNo(), false, false, true, rackList);
} }
return liteOrder; return liteOrder;
} }
...@@ -197,6 +213,44 @@ public class TMSUtil { ...@@ -197,6 +213,44 @@ public class TMSUtil {
} }
} }
if (curroNum <= 0) {
//预留失败
List<InventoryItem> items = dataCache.getInventoryByPN(item.getPn());
TMSPart p;
if (items.size() > 0 ) {
//如果库存的料都是已锁定的,需要返回2003 .已锁定的需要更新缓存
InventoryItem inventoryItem=items.get(0);
if(inventoryItem.getLockReel()>=inventoryItem.getStockReel()) {
//如果是有库存但是库存不足,发送2001
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2003, "", "");
log.info(requestCmd + " pn=" + item.getPn() + ",出库失败缺料,库存不足:code=" + TMS_Code.CODE_2003);
}
else {
//如果是有库存但是库存不足,发送2001
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2001, "", "");
log.info(requestCmd + " pn=" + item.getPn() + ",出库失败缺料,库存不足:code=" + TMS_Code.CODE_2001);
}
} else {
//判断pn是否存在,存在返回2002,否则返回2003
Component component = componentManager.findOneByPN(item.getPn());
if (component == null) {
//pn不存在,返回2002
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2002, "", "");
log.info(requestCmd + " pn=" + item.getPn() + ",出库失败缺料,PN不存在:code=" + TMS_Code.CODE_2002);
} else {
//库存无此物料,发送2003
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2003, "", "");
log.info(requestCmd + " pn=" + item.getPn() + ",出库失败缺料,库存无此料:code=" + TMS_Code.CODE_2003);
}
}
parts.add(p);
}
} catch (Exception ex) { } catch (Exception ex) {
log.error(requestCmd + " " + item.getPn() + ",error::", ex.toString()); log.error(requestCmd + " " + item.getPn() + ",error::", ex.toString());
} }
......
...@@ -84,11 +84,13 @@ public class TMS_Code { ...@@ -84,11 +84,13 @@ public class TMS_Code {
/** /**
* 2002 Out of part 无材料 * 2002 Out of part 无材料
* 从来没有的PN
*/ */
public static final String CODE_2002 = "2002"; public static final String CODE_2002 = "2002";
/** /**
* 2003 Registered part but not on the rack 缺料 * 2003 Registered part but not on the rack 缺料
* 有PN,但是当前无库存
*/ */
public static final String CODE_2003 = "2003"; public static final String CODE_2003 = "2003";
......
...@@ -25,11 +25,12 @@ public class TMSPart extends TMSPos implements Serializable { ...@@ -25,11 +25,12 @@ public class TMSPart extends TMSPos implements Serializable {
private String resultCode = ""; private String resultCode = "";
//生产日期
public String ProductionDate =""; public String ProductionDate ="";
//过期日期
public String ExpiryDate = ""; public String ExpiryDate = "";
//登录韩华系统的日期。 TODO 需要保存下来
public String WarehousingDate = ""; 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 ) {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!