Commit c4bea40f LN

韩华接口调试修改

1 个父辈 06d99ddb
......@@ -427,10 +427,13 @@ public class LiteOrderCache {
boolean singleOut = false;
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);
if (cacheOrder == null) {
......@@ -462,6 +465,7 @@ public class LiteOrderCache {
return checkOutOrder(cacheOrder).getMsgKey();
}
log.info("开始执行工单[" + orderNo + "] outBom=" + outBom);
cacheOrder.setTaskReelCount(0);
cacheOrder.setTaskFinishedTime(-1);
......@@ -474,9 +478,13 @@ public class LiteOrderCache {
//liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
int taskReelCount = 0;
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()) {
orderItem.setOutNum(0);
......@@ -570,6 +578,91 @@ public class LiteOrderCache {
}
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
*/
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 {
@Override
public void onMessage(String s) {
log.info("onMessage: "+s);
// log.info("onMessage: "+s);
if(msgReceivedListener!=null){
msgReceivedListener.onMsgReceived(s);
}
......
......@@ -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.po.Storage;
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.util.DevicesStatusUtil;
import com.neotel.smfcore.custom.hanwha.handler.bean.TMSPart;
......@@ -55,7 +54,6 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@Override
public boolean isForThisApi(String apiName) {
return apiName != null && apiName.equalsIgnoreCase("hanwha") && TMSCommunicator.isEnable();
}
@Autowired
......@@ -104,6 +102,10 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
if (result.size() > 0) {
String pn = result.get(0).getPartName();
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;
if (ObjectUtil.isNotEmpty(pn)) {
barcode.setPartNumber(pn);
......@@ -198,6 +200,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
if (storage == null) {
continue;
}
storageIds.add(storage.getId());
String type = "Storage";
if (storage.isNLShelf() || storage.isNLPShelf() || storage.isNLMShelf() || storage.isShelf()) {
type = "Rack";
......
......@@ -4,7 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.utils.DateUtil;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......@@ -33,7 +33,8 @@ public class TMSApis {
Map<String, Object> sendData = new HashMap<>();
sendData.put("data", dataMap);
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);
List<Object> jArray = (List<Object>) dataMap2.get("Data");
......@@ -142,7 +143,7 @@ public class TMSApis {
Map<String, Object> sendData = new HashMap<>();
sendData.put("data", dataMap);
String responseStr = PostJson(url, sendData);
if (!ObjectUtil.isNotEmpty(responseStr)) {
if (ObjectUtil.isNotEmpty(responseStr)) {
List<Object> resList = JsonUtil.toList(responseStr, Object.class);
for (Object obj : resList) {
Map<String, Object> map = JsonUtil.toMap(JsonUtil.toJsonStr(obj));
......@@ -473,4 +474,5 @@ public class TMSApis {
log.info("PostJson, url=["+url+"],send=["+JsonUtil.toJsonStr(sendData)+"],response=["+responseStr+"]");
return responseStr;
}
}
package com.neotel.smfcore.custom.hanwha.handler.bean;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
......@@ -44,39 +45,48 @@ public class TMSPos implements Serializable {
// setRowID(posName.substring(0,index-1));
// setColID(posName.substring(index+1,posName.length()-1));
// }
String rowId = proStr(posName);
String colId = "";
String spit = "_";
String[] posArray = posName.split(spit);
if (posArray.length >= 2) {
if (posArray.length >= 3) {
} else {
spit = "-";
posArray = posName.split(spit);
}
try {
String rowId =proStr(posName) ;
String colId = "";
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());
}
if (posArray.length == 3) {
rowId = Convert.toInt(posArray[1]) + "";
colId = Convert.toInt(posArray[2]) + "";
}
setRowID(proStr(rowId));
setColID(proStr(colId));
} catch (Exception ex) {
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]);
// setRowID(posArray[posArray.length - 2]);
} catch (Exception ex) {
log.error("解析位置的行列失败 " + posName + "," + ex.toString());
} catch (Exception ex2) {
log.error("解析位置的行列失败 " + posName + "," + ex2.toString());
}
}
setRowID(proStr(rowId));
setColID(proStr(colId));
}
private String proStr(String input) {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!