Commit c4bea40f LN

韩华接口调试修改

1 个父辈 06d99ddb
...@@ -427,10 +427,13 @@ public class LiteOrderCache { ...@@ -427,10 +427,13 @@ public class LiteOrderCache {
boolean singleOut = false; boolean singleOut = false;
return checkOutLiteOrder(orderNo,outBom,singleOut); return checkOutLiteOrder(orderNo,outBom,singleOut);
} }
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut ) {
return checkOutLiteOrder(orderNo,outBom,singleOut,false);
}
/** /**
* 执行工单出库 * 执行工单出库
*/ */
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut) { public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut,boolean needCheck) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo); LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
...@@ -462,6 +465,7 @@ public class LiteOrderCache { ...@@ -462,6 +465,7 @@ public class LiteOrderCache {
return checkOutOrder(cacheOrder).getMsgKey(); return checkOutOrder(cacheOrder).getMsgKey();
} }
log.info("开始执行工单[" + orderNo + "] outBom=" + outBom); log.info("开始执行工单[" + orderNo + "] outBom=" + outBom);
cacheOrder.setTaskReelCount(0); cacheOrder.setTaskReelCount(0);
cacheOrder.setTaskFinishedTime(-1); cacheOrder.setTaskFinishedTime(-1);
...@@ -474,9 +478,13 @@ public class LiteOrderCache { ...@@ -474,9 +478,13 @@ public class LiteOrderCache {
//liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder); //liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
int taskReelCount = 0; int taskReelCount = 0;
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType(); CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
if(needCheck&&(shortageCheck(cacheOrder,outBom))) {
return "smfcore.order.out.noTask";
}
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
//其他出库模式一次性全部生成任务 //其他出库模式一次性全部生成任务
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) { for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
orderItem.setOutNum(0); orderItem.setOutNum(0);
...@@ -570,6 +578,91 @@ public class LiteOrderCache { ...@@ -570,6 +578,91 @@ public class LiteOrderCache {
} }
return ""; return "";
} }
public boolean shortageCheck(LiteOrder cacheOrder, boolean outBom) {
String orderNo = cacheOrder.getOrderNo();
boolean shortReel=false;
try {
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
log.info("工单[" + orderNo + "]出库前需要进行缺料检查");
//其他出库模式一次性全部生成任务
List<LiteOrderItem> newItems = new ArrayList<>();
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
//剩余未出数量
Float totalNum = orderItem.getNeedNum() * cacheOrder.getOrderTimes();
int remainNum = totalNum.intValue() - orderItem.getTotalOutNum();
//剩余未出盘数
int remainReelCount = orderItem.getNeedReelCount() - orderItem.getTotalOutReelCount();
Collection<String> excludePosIds = excludeOutPosIds();
//此PN未完成
if (remainNum > 0 || remainReelCount > 0) {
if (outBom) {
//套料出库,设置剩余数量为1,这样就只会出一盘
remainNum = 1;
remainReelCount = 0;
}
int assignNum = 0;
int assignReelCount = 0;
while (assignNum < remainNum || assignReelCount < remainReelCount) {
String partNumber = orderItem.getPn();
String reelId = orderItem.getRi();
String mpn = orderItem.getMpn();
StoragePos pos = null;
if (!Strings.isNullOrEmpty(reelId)) {
//RI
pos = storagePosManager.getByBarcode(reelId);
if (pos == null) {
log.error("工单[" + orderNo + "]RI出库时,未找到料盘[" + reelId + "],返回缺料");
shortReel=true;
orderItem.addAppendDate("shortage","true");
liteOrderItemManager.save(orderItem);
break;
} else {
excludePosIds.add(pos.getPosName());
}
break;
} else if (Strings.isNullOrEmpty(reelId) && !Strings.isNullOrEmpty(partNumber)) {
//PN
pos = storagePosManager.findPartNumberInStorages(availableStorageIds, "", partNumber, excludePosIds, checkoutType, orderItem.getAppendData());
} else if (Strings.isNullOrEmpty(reelId) && Strings.isNullOrEmpty(partNumber) && !Strings.isNullOrEmpty(mpn)) {
pos = storagePosManager.findMpnInStorages(availableStorageIds, mpn, excludePosIds, checkoutType, orderItem.getAppendData());
}
if (pos == null) {
shortReel=true;
log.error("工单[" + orderNo + "]未找到可以出库的物料PN=[" + partNumber + "],返回缺料");
orderItem.addAppendDate("shortage","true");
liteOrderItemManager.save(orderItem);
break;
} else {
assignNum = assignNum + pos.getBarcode().getAmount();
assignReelCount = assignReelCount + 1;
excludePosIds.add(pos.getPosName());
}
}
}
newItems.add(orderItem);
}
} catch (Exception ex) {
log.info("工单[" + orderNo + "]缺料检查出错:" + ex.toString());
}
if(shortReel){
cacheOrder.setClosed(true);
cacheOrder.setStatus(LITEORDER_STATUS.CLOSED);
liteOrderManager.save(cacheOrder);
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
log.info("工单[" + orderNo + "]缺料,直接关闭工单 ");
}
return shortReel;
}
/** /**
* 防止仓位任务重复,需要排除掉已经分配掉的出库仓位 * 防止仓位任务重复,需要排除掉已经分配掉的出库仓位
*/ */
......
...@@ -103,6 +103,20 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li ...@@ -103,6 +103,20 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
*/ */
public Map<String,String> appendData = new HashMap<>(); public Map<String,String> appendData = new HashMap<>();
public void addAppendDate(String key ,String value){
if(appendData==null){
appendData=new HashMap<>();
}
appendData.put(key,value);
}
public String getAppend(String key) {
if (appendData != null && appendData.containsKey(key)) {
return appendData.get(key);
}
return "";
}
/** /**
* 出库是否满足要求,已出库数量大于需求数量 * 出库是否满足要求,已出库数量大于需求数量
*/ */
......
...@@ -31,7 +31,7 @@ public class MyWebSocketClient extends WebSocketClient { ...@@ -31,7 +31,7 @@ public class MyWebSocketClient extends WebSocketClient {
@Override @Override
public void onMessage(String s) { public void onMessage(String s) {
log.info("onMessage: "+s); // log.info("onMessage: "+s);
if(msgReceivedListener!=null){ if(msgReceivedListener!=null){
msgReceivedListener.onMsgReceived(s); msgReceivedListener.onMsgReceived(s);
} }
......
...@@ -11,7 +11,6 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder; ...@@ -11,7 +11,6 @@ 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;
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;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.custom.hanwha.handler.bean.TMSPart; import com.neotel.smfcore.custom.hanwha.handler.bean.TMSPart;
...@@ -55,7 +54,6 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -55,7 +54,6 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@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();
} }
@Autowired @Autowired
...@@ -104,6 +102,10 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -104,6 +102,10 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
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],
// 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}]
boolean needS = false; boolean needS = false;
if (ObjectUtil.isNotEmpty(pn)) { if (ObjectUtil.isNotEmpty(pn)) {
barcode.setPartNumber(pn); barcode.setPartNumber(pn);
...@@ -198,6 +200,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -198,6 +200,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
if (storage == null) { if (storage == null) {
continue; continue;
} }
storageIds.add(storage.getId());
String type = "Storage"; String type = "Storage";
if (storage.isNLShelf() || storage.isNLPShelf() || storage.isNLMShelf() || storage.isShelf()) { if (storage.isNLShelf() || storage.isNLPShelf() || storage.isNLMShelf() || storage.isShelf()) {
type = "Rack"; type = "Rack";
......
...@@ -4,7 +4,7 @@ import cn.hutool.core.util.ObjectUtil; ...@@ -4,7 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.exception.ApiException; import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.utils.DateUtil; import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.HttpHelper; import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil; import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.custom.hanwha.handler.bean.*; import com.neotel.smfcore.custom.hanwha.handler.bean.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -33,7 +33,8 @@ public class TMSApis { ...@@ -33,7 +33,8 @@ public class TMSApis {
Map<String, Object> sendData = new HashMap<>(); Map<String, Object> sendData = new HashMap<>();
sendData.put("data", dataMap); sendData.put("data", dataMap);
String responseStr = PostJson(url, sendData); String responseStr = PostJson(url, sendData);
if (!ObjectUtil.isNotEmpty(responseStr)) { if (ObjectUtil.isNotEmpty(responseStr)) {
// {"RequestID":0,"Data":[{"PartName":"Z2203061201A","ReelCode":"20180710184319-001","Count":5000}],"error":null}
Map<String, Object> dataMap2 = JsonUtil.toMap(responseStr); Map<String, Object> dataMap2 = JsonUtil.toMap(responseStr);
List<Object> jArray = (List<Object>) dataMap2.get("Data"); List<Object> jArray = (List<Object>) dataMap2.get("Data");
...@@ -142,7 +143,7 @@ public class TMSApis { ...@@ -142,7 +143,7 @@ public class TMSApis {
Map<String, Object> sendData = new HashMap<>(); Map<String, Object> sendData = new HashMap<>();
sendData.put("data", dataMap); sendData.put("data", dataMap);
String responseStr = PostJson(url, sendData); String responseStr = PostJson(url, sendData);
if (!ObjectUtil.isNotEmpty(responseStr)) { if (ObjectUtil.isNotEmpty(responseStr)) {
List<Object> resList = JsonUtil.toList(responseStr, Object.class); List<Object> resList = JsonUtil.toList(responseStr, Object.class);
for (Object obj : resList) { for (Object obj : resList) {
Map<String, Object> map = JsonUtil.toMap(JsonUtil.toJsonStr(obj)); Map<String, Object> map = JsonUtil.toMap(JsonUtil.toJsonStr(obj));
...@@ -473,4 +474,5 @@ public class TMSApis { ...@@ -473,4 +474,5 @@ public class TMSApis {
log.info("PostJson, url=["+url+"],send=["+JsonUtil.toJsonStr(sendData)+"],response=["+responseStr+"]"); log.info("PostJson, url=["+url+"],send=["+JsonUtil.toJsonStr(sendData)+"],response=["+responseStr+"]");
return responseStr; return responseStr;
} }
} }
package com.neotel.smfcore.custom.hanwha.handler.bean; package com.neotel.smfcore.custom.hanwha.handler.bean;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -44,39 +45,48 @@ public class TMSPos implements Serializable { ...@@ -44,39 +45,48 @@ public class TMSPos implements Serializable {
// setRowID(posName.substring(0,index-1)); // setRowID(posName.substring(0,index-1));
// setColID(posName.substring(index+1,posName.length()-1)); // setColID(posName.substring(index+1,posName.length()-1));
// } // }
String rowId = proStr(posName);
String colId = "";
String spit = "_"; String spit = "_";
String[] posArray = posName.split(spit); String[] posArray = posName.split(spit);
if (posArray.length >= 2) { if (posArray.length >= 3) {
} else { } else {
spit = "-"; spit = "-";
posArray = posName.split(spit);
} }
try { try {
String rowId =proStr(posName) ; if (posArray.length == 3) {
String colId = ""; rowId = Convert.toInt(posArray[1]) + "";
int index = posName.lastIndexOf(spit); colId = Convert.toInt(posArray[2]) + "";
if (index > 0) {
rowId = posName.substring(0, index);
colId = posName.substring(index + 1, posName.length());
} else {
String nPosName=proStr(posName);
if(nPosName.length()>2){
index = posName.length() - 2;
rowId = posName.substring(0, index);
colId = posName.substring(index, posName.length());
}
} }
setRowID(proStr(rowId)); } catch (Exception ex) {
setColID(proStr(colId)); log.error("解析出错:" + ex.toString());
try {
int index = posName.lastIndexOf(spit);
if (index > 0) {
rowId = posName.substring(0, index);
colId = posName.substring(index + 1, posName.length());
} else {
String nPosName = proStr(posName);
if (nPosName.length() > 2) {
index = posName.length() - 2;
rowId = posName.substring(0, index);
colId = posName.substring(index, posName.length());
}
}
// setColID(posArray[posArray.length - 1]); // setColID(posArray[posArray.length - 1]);
// setRowID(posArray[posArray.length - 2]); // setRowID(posArray[posArray.length - 2]);
} catch (Exception ex) { } catch (Exception ex2) {
log.error("解析位置的行列失败 " + posName + "," + ex.toString()); log.error("解析位置的行列失败 " + posName + "," + ex2.toString());
}
} }
setRowID(proStr(rowId));
setColID(proStr(colId));
} }
private String proStr(String input) { private String proStr(String input) {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!