Commit 9f21ba77 LN

增加DeliveryReserve处理,预留成功默认返回2010

1 个父辈 132da977
...@@ -810,6 +810,20 @@ public class DataCache { ...@@ -810,6 +810,20 @@ public class DataCache {
} }
return availableStorageIds; return availableStorageIds;
} }
public List<String> getAvailableStorageIds(List<String> cidList) {
List<String> availableStorageIds = new ArrayList<>();
for (Storage storage : getAllStorage().values()) {
if(!cidList.contains(storage)){
continue;
}
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null || bean.timeOut() || !bean.isAvailable()) {
continue;
}
availableStorageIds.add(storage.getId());
}
return availableStorageIds;
}
public List<String> getAvailableStorageIds(DeviceType deviceType) { public List<String> getAvailableStorageIds(DeviceType deviceType) {
List<String> availableStorageIds = new ArrayList<>(); List<String> availableStorageIds = new ArrayList<>();
for (Storage storage : getAllStorage().values()) { for (Storage storage : getAllStorage().values()) {
......
...@@ -430,10 +430,13 @@ public class LiteOrderCache { ...@@ -430,10 +430,13 @@ public class LiteOrderCache {
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut ) { public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut ) {
return checkOutLiteOrder(orderNo,outBom,singleOut,false); return checkOutLiteOrder(orderNo,outBom,singleOut,false);
} }
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut,boolean needCheck) {
return checkOutLiteOrder(orderNo,outBom,singleOut,needCheck);
}
/** /**
* 执行工单出库 * 执行工单出库
*/ */
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut,boolean needCheck) { public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut,boolean needCheck,List<String> cidList) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo); LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
...@@ -484,7 +487,8 @@ public class LiteOrderCache { ...@@ -484,7 +487,8 @@ public class LiteOrderCache {
return "smfcore.order.out.noTask"; return "smfcore.order.out.noTask";
} }
List<String> availableStorageIds = dataCache.getAvailableStorageIds(); List<String> availableStorageIds = dataCache.getAvailableStorageIds(cidList);
//其他出库模式一次性全部生成任务 //其他出库模式一次性全部生成任务
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) { for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
orderItem.setOutNum(0); orderItem.setOutNum(0);
...@@ -829,4 +833,122 @@ public class LiteOrderCache { ...@@ -829,4 +833,122 @@ public class LiteOrderCache {
return liteOrderMap.values(); return liteOrderMap.values();
} }
/**
* 预锁定物料
*/
public synchronized String LiteOrderLockReel(String orderNo, boolean outBom,boolean singleOut,boolean needCheck,List<String> cidList) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (cacheOrder == null) {
return "smfcore.order.out.notFound";
}
if ( !cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
log.info("工单[" + orderNo + "]正在执行");
return "smfcore.order.out.executing";
}
if(cacheOrder.isClosed()) {
log.info("工单[" + orderNo + "]已关闭,无法出库");
return "smfcore.order.hasClose";
}
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
List<StoragePos> lockPosList = storagePosManager.findLockPos(cacheOrder.getOrderNo());
if(lockPosList!=null&& lockPosList.size()>0){
return "ok";
}
if(needCheck&&(shortageCheck(cacheOrder,outBom))) {
return "smfcore.order.out.noTask";
}
log.info("开始为工单挑料[" + orderNo + "] outBom=" + outBom);
//liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
int taskReelCount = 0;
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> availableStorageIds = dataCache.getAvailableStorageIds(cidList);
//其他出库模式一次性全部生成任务
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
//剩余未出数量
Float totalNum = orderItem.getNeedNum() * cacheOrder.getOrderTimes();
int remainNum = totalNum.intValue() - orderItem.getTotalOutNum();
//剩余未出盘数
int remainReelCount = orderItem.getNeedReelCount() - orderItem.getTotalOutReelCount();
//此PN未完成
if (remainNum > 0 || remainReelCount > 0) {
if (outBom) {
//套料出库,设置剩余数量为1,这样就只会出一盘
remainNum = 1;
remainReelCount = 0;
}
int assignNum = 0;
int assignReelCount = 0;
while (assignNum < remainNum || assignReelCount < remainReelCount) {
Collection<String> excludePosIds = excludeOutPosIds();
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){
if(excludePosIds.contains(pos.getId())) {
log.info("工单[" + orderNo + "]RI出库,任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理");
break;
}
}else{
log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘["+reelId+"]");
}
}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) {
// //锁定物料
assignNum = assignNum + pos.getBarcode().getAmount();
assignReelCount = assignReelCount + 1;
taskReelCount = taskReelCount + 1;
log.info("工单[" + orderNo + "],锁定盘数[" + taskReelCount + "]锁定位置【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + partNumber + "] num:" + pos.getBarcode().getAmount());
Barcode barcode=pos.getBarcode();
barcode.setLockId(cacheOrder.getOrderNo());
pos.setBarcode(barcode);
storagePosManager.save(pos);
}
//如果是RI出库,只有一盘,出完就结束
if(!Strings.isNullOrEmpty(reelId)){
break;
}
}
}
}
log.info("工单[" + orderNo + "]挑料完成,锁定物料盘数[" + taskReelCount + "]");
if (taskReelCount <= 0) {
//return "工单无可执行的任务";
return "smfcore.order.out.noTask";
}
return "";
}
} }
...@@ -55,6 +55,8 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -55,6 +55,8 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
private IStoragePosManager storagePosManager; private IStoragePosManager storagePosManager;
@Autowired @Autowired
private TMSCommunicator tmsCommunicator; private TMSCommunicator tmsCommunicator;
@Autowired
private TMSUtil tmsUtil;
@Autowired @Autowired
private IComponentManager componentManager; private IComponentManager componentManager;
...@@ -228,7 +230,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener { ...@@ -228,7 +230,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
log.info("工单取消处理中,此处不通知TMS"); log.info("工单取消处理中,此处不通知TMS");
}else{ }else{
log.info("工单关闭,通知TMS"); log.info("工单关闭,通知TMS");
TMSReserve tmsReserve = tmsCommunicator.GetOrderInfo(liteOrder); TMSReserve tmsReserve = tmsUtil.GetOrderInfo(liteOrder);
List<TMSReserve> list = new ArrayList<>(); List<TMSReserve> list = new ArrayList<>();
list.add(tmsReserve); list.add(tmsReserve);
tmsCommunicator.ResponseUpdateDeliveryReserveState(0, list, 0); tmsCommunicator.ResponseUpdateDeliveryReserveState(0, list, 0);
......
...@@ -93,12 +93,15 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -93,12 +93,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
@Autowired @Autowired
private IStoragePosManager storagePosManager; private IStoragePosManager storagePosManager;
@Autowired // @Autowired
private IDataLogManager dataLogManager; // private IDataLogManager dataLogManager;
@Autowired @Autowired
private IComponentManager componentManager; private IComponentManager componentManager;
@Autowired
private TMSUtil tmsUtil;
private static int gRequestID = 1000; private static int gRequestID = 1000;
public static int GetRequestID() public static int GetRequestID()
{ {
...@@ -309,28 +312,6 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -309,28 +312,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
} }
log.info("WebSocket 已连接,开始同步物料信息 RequestSyncPartReelPosInfo"); log.info("WebSocket 已连接,开始同步物料信息 RequestSyncPartReelPosInfo");
// for (Map<String, StoragePos> map : allUsedPosList) {
//
// for (StoragePos pos :
// map.values()) {
// if (pos.getBarcode() == null) {
// continue;
// }
// Storage storage = dataCache.getStorageById(pos.getStorageId());
// if (storage == null) {
// log.error("posName[" + pos.getPosName() + "],storageId[" + pos.getStorageId() + "]未找到料仓");
// continue;
// }
// Barcode barcode = pos.getBarcode();
// TMSPartReelPos bean = TMSPartReelPos.newBean(barcode.getPartNumber(), barcode.getBarcode(), barcode.getAmount(),
// storage.getCid(), pos.getPosName(), 4, barcode.getPutInDate().getTime(), -1);
//
// list.add(bean);
//// if(list.size()>=10){
//// break;
//// }
// }
// }
Map<String, Storage> allStorage = dataCache.getAllStorage(); Map<String, Storage> allStorage = dataCache.getAllStorage();
for (Storage storage : for (Storage storage :
allStorage.values()) { allStorage.values()) {
...@@ -446,7 +427,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -446,7 +427,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
List<LiteOrder> orders = liteOrderManager.findByQuery(query); List<LiteOrder> orders = liteOrderManager.findByQuery(query);
for (LiteOrder order:orders for (LiteOrder order:orders
) { ) {
TMSReserve tmsReserve=GetOrderInfo(order); TMSReserve tmsReserve=tmsUtil.GetOrderInfo(order);
if(tmsReserve!=null&&tmsReserve.getPartList().size()>0){ if(tmsReserve!=null&&tmsReserve.getPartList().size()>0){
tmsReserves.add(tmsReserve); tmsReserves.add(tmsReserve);
} }
...@@ -456,71 +437,6 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -456,71 +437,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
} }
public TMSReserve GetOrderInfo(LiteOrder liteOrder) {
TMSReserve tmsReserve = new TMSReserve();
tmsReserve.setReserveCode(liteOrder.getOrderNo());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(liteOrder.getCreateDate());
tmsReserve.setDate(dateString);
List<TMSPart> tmsParts = new ArrayList<>();
//查找工单的所有任务
Criteria c = Criteria.where("sourceName").is(liteOrder.getOrderNo()).and("type").is(2);
List<DataLog> dataLogs = dataLogManager.findByQuery(new Query(c));
boolean hasCancelTask=false;
boolean allCancel = true;
for (DataLog task :
dataLogs) {
// if(ObjectUtil.isNotEmpty(item.getPn())&&task.getPartNumber().equals(task.getPartNumber())){
//
// }else if(ObjectUtil.isNotEmpty(item.getRi())&&task.getBarcode().equals(task.getBarcode())){
//
// }else{
// continue;
// }
//是工单出库任务
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo())) {
int responseNum = task.getNum();
String logCode = TMS_Code.CODE_2013;//默认已完成
if (task.isCancel()) {
hasCancelTask=true;
responseNum = 0;
logCode = TMS_Code.CODE_2012;//取消成功
} else if (task.isExecuting() || task.isWait()) {
logCode = TMS_Code.CODE_2011;//出库中
allCancel = false;
} else {
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()) {
//如果工单全部取消,需要发送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);
} else {
tmsReserve.setResultCode(TMS_Code.CODE_2001);
}
}else if (liteOrder.isOutOne() || liteOrder.isOutTails() || liteOrder.isOutOne()) {
tmsReserve.setResultCode(TMS_Code.CODE_2011);
}
tmsReserve.setPartList(tmsParts);
return tmsReserve;
}
private void parseMessage(String message) { private void parseMessage(String message) {
...@@ -546,6 +462,9 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -546,6 +462,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
} }
List<String> partItems; List<String> partItems;
List<Integer> partCounts; List<Integer> partCounts;
List<String> rackList;
List<TMSPos> Locations;
List<String> reelCds;
boolean towerLamp; boolean towerLamp;
String registerID; String registerID;
String reelCode; String reelCode;
...@@ -558,35 +477,62 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -558,35 +477,62 @@ public class TMSCommunicator implements WsMsgReceivedListener {
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");
if(rackList==null){
rackList=new ArrayList<>();
}
//3.8 RequestDeliveryOrder //3.8 RequestDeliveryOrder
RequestDeliveryOrder(requestID, partItems, partCounts, towerLamp); 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+"],");
List<TMSPos> 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+"],");
List<String> reelCds = getMapValue(msgMap, "ReelCds"); reelCds = getMapValue(msgMap, "ReelCds");
rackList= getMapValue(msgMap,"RackList");
//3.12 RequestDeliveryOrderByReelCd //3.12 RequestDeliveryOrderByReelCd
RequestDeliveryOrderByReelCd(requestID, reelCds); 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");
// //
//3.14 RequestUpdateDeliveryReserveState //3.20 RequestUpdateDeliveryReserveState
RequestUpdateDeliveryReserveState(requestID, reserveCodes, resultCodes); RequestUpdateDeliveryReserveState(requestID, reserveCodes, resultCodes);
break; break;
// case "RequestDeliveryReserve": case "RequestDeliveryReserve":
// partItems = getMapValue(msgMap, "PartNames"); partItems = getMapValue(msgMap, "PartNames");
// partCounts = getMapValue(msgMap, "Counts"); partCounts = getMapValue(msgMap, "Counts");
// RequestDeliveryReserve(requestID, partItems, partCounts); towerLamp = (boolean) getMapValue(msgMap, "TowerLamp");
// rackList= getMapValue(msgMap,"RackList");
// break; if(rackList==null){
rackList=new ArrayList<>();
}
//3.14 RequestDeliveryReserve
RequestDeliveryReserve(requestID, partItems, partCounts,towerLamp,rackList);
break;
case "RequestDeliveryReserveByLocation":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
Locations = getMapValue(msgMap, "Locations");
// 3.16 ,RequestDeliveryReserveByLocation
RequestDeliveryReserveByLocation(requestID, Locations);
break;
case "RequestDeliveryReserveByReelCd":
log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
reelCds = getMapValue(msgMap, "ReelCds");
rackList= getMapValue(msgMap,"RackList");
//3.18 RequestDeliveryOrderByReelCd
RequestDeliveryReserveByReelCd(requestID, reelCds,rackList);
break;
// case "RequestResultOfDeliveryReserve": // case "RequestResultOfDeliveryReserve":
// String reserveCode = getMapValue(msgMap, "ReserveCode"); // String reserveCode = getMapValue(msgMap, "ReserveCode");
// RequestResultOfDeliveryReserve(requestID, reserveCode); // RequestResultOfDeliveryReserve(requestID, reserveCode);
...@@ -651,48 +597,20 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -651,48 +597,20 @@ public class TMSCommunicator implements WsMsgReceivedListener {
return null; return null;
} }
private LiteOrder createOrder(int requestID, List<LiteOrderItem> items,String orderNo,boolean autoOut) {
if (items.size() <= 0) {
return null;
}
//判断是否有已执行的工单,有的话创建失败 public void OrderProEndUpdateState(String requestCmd,int requestID, LiteOrder liteOrder){
Query query =new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
if(orderList.size()>0){
log.info("RequestDelivery: 当前有未关闭的工单"+orderList.size()+",创建工单失败");
return null;
}
LiteOrder liteOrder = new LiteOrder(orderNo, items); //如果工单执行中,发送ResponseUpdateDeliveryReserveState,否则不需要
liteOrder.setSource("DeliveryOrder"); if (liteOrder.isClosed()) {
LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo()); log.info(requestCmd+" 工单已关闭,不需要发送 发送ResponseUpdateDeliveryReserveState");
if (dbOrder != null) {
orderNo = orderNo + "-" + requestID;
dbOrder = liteOrderManager.findByOrderNo(orderNo);
if (dbOrder == null) {
liteOrder.setOrderNo(orderNo);
} else { } else {
log.info("RequestDelivery :数据库中已存在工单号为[" + orderNo + "],创建工单失败");
return null;
}
}
log.info("RequestDelivery:新建工单:" + liteOrder.getOrderNo() + ",共" + items.size() + "条工单详情,自动执行:"+autoOut);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
if (autoOut) {
try {
liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(), false,false,true); TMSReserve tmsReserve =tmsUtil.GetOrderInfo(liteOrder);
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo()); List<TMSReserve> tmsReserves = new ArrayList<>();
} catch (ValidateException ex) { tmsReserves.add(tmsReserve);
log.error("RequestDelivery 自动执行工单[" + liteOrder.getOrderNo() + "] error:" + ex.toString()); ResponseUpdateDeliveryReserveState(requestID, tmsReserves, 0);
}
} }
return liteOrder;
} }
/** /**
* 3.8 RequestDeliveryOrder * 3.8 RequestDeliveryOrder
* @param requestID * @param requestID
...@@ -700,42 +618,27 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -700,42 +618,27 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param partCount * @param partCount
* @param towerLamp * @param towerLamp
*/ */
private synchronized void RequestDeliveryOrder(int requestID, List<String> partItem, List<Integer> partCount, boolean towerLamp) { private synchronized void RequestDeliveryOrder(int requestID, List<String> partItem, List<Integer> partCount, boolean towerLamp,List<String> rackList) {
// 3.9 ResponseDeliveryOrder // 3.9 ResponseDeliveryOrder
TMSReserve tmsReserve=null; String requestCmd="RequestDeliveryOrder";
String responseCmd="ResponseDeliveryOrder";
try { try {
if (partItem == null || partCount == null || partItem.size() <= 0 || partCount.size() <= 0) { if (partItem == null || partCount == null || partItem.size() <= 0 || partCount.size() <= 0) {
log.info("RequestDeliveryOrder 数据不完整,直接返回"); log.info(requestCmd+" 数据不完整,直接返回");
ResponseDeliveryOrder(requestID, new ArrayList<>(), "",""); ResponseDeliveryOrder(responseCmd,requestID, new ArrayList<>(), "","");
return; return;
} }
String soName = "DO" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss"); String soName = "DO" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
List<LiteOrderItem> liteOrderItems = new ArrayList<>();
int index = 0; List<LiteOrderItem> liteOrderItems = tmsUtil.partToItems(partItem,partCount);
for (String pn : partItem) { LiteOrder liteOrder = tmsUtil.createOrder(responseCmd,requestID, liteOrderItems, soName, true,rackList);
int count = Convert.toInt(partCount.get(index));
if (ObjectUtil.isNotEmpty(pn) && count > 0) {
LiteOrderItem item = new LiteOrderItem();
item.setPn(pn);
item.setNeedNum(count);
liteOrderItems.add(item);
}
index++;
}
LiteOrder liteOrder = createOrder(requestID, liteOrderItems, soName, true);
if(liteOrder==null){ if(liteOrder==null){
//同时只能有一个工单执行,创建工单时不能有未关闭的工单。返回2014 //同时只能有一个工单执行,创建工单时不能有未关闭的工单。返回2014
List<TMSPart> parts = new ArrayList<>(); List<TMSPart> parts =tmsUtil.itemsToTMSPartList(liteOrderItems) ;
for (LiteOrderItem item : ResponseDeliveryOrder(responseCmd,requestID, parts, "","");
liteOrderItems) {
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), 0, TMS_Code.CODE_2014, "", "");
parts.add(p);
}
ResponseDeliveryOrder(requestID, parts, "","");
}else { }else {
//能够出库成功返回2010,库存不足范围2002 Out Of Part //能够出库成功返回2010,库存不足范围2002 Out Of Part
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo()); liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
...@@ -761,13 +664,13 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -761,13 +664,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
requestNum = task.getNum() - (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()); 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()); log.info(requestCmd+" pn=" + task.getPartNumber() + ",出库成功:code=" + TMS_Code.CODE_2010 + ",posName=" + task.getPosName() + ",barcode=" + task.getBarcode());
parts.add(p); parts.add(p);
} }
} }
} }
} catch (Exception ex) { } catch (Exception ex) {
log.error(" RequestDeliveryOrder 查找 " + item.getPn() + "的出库任务出错:error::", ex.toString()); log.error(requestCmd+" 查找 " + item.getPn() + "的出库任务出错:error::", ex.toString());
} }
if (curroNum <= 0) { if (curroNum <= 0) {
...@@ -784,7 +687,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -784,7 +687,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if (itmes.size() > 0) { if (itmes.size() > 0) {
//如果是有库存但是库存不足,发送2003 //如果是有库存但是库存不足,发送2003
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2001, "", ""); 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); log.info(requestCmd+" pn=" + item.getPn() + ",出库失败缺料,库存不足:code=" + TMS_Code.CODE_2001);
} else { } else {
//判断pn是否存在,存在返回2002,否则返回2003 //判断pn是否存在,存在返回2002,否则返回2003
...@@ -792,24 +695,24 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -792,24 +695,24 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if(component==null){ if(component==null){
//pn不存在,返回2003 //pn不存在,返回2003
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_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); log.info(requestCmd+" pn=" + item.getPn() + ",出库失败缺料,PN不存在:code=" + TMS_Code.CODE_2003);
}else { }else {
//库存无此物料,发送2002 //库存无此物料,发送2002
p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_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); log.info(requestCmd+" 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, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",未出库成功:code=" + TMS_Code.CODE_2010); log.info(requestCmd+" pn=" + item.getPn() + ",未出库成功:code=" + TMS_Code.CODE_2010);
parts.add(p); parts.add(p);
} }
} }
} catch (Exception ex) { } catch (Exception ex) {
log.error(" RequestDeliveryOrder " + item.getPn() + ",error::", ex.toString()); log.error(requestCmd+" " + item.getPn() + ",error::", ex.toString());
} }
} }
...@@ -817,25 +720,16 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -817,25 +720,16 @@ public class TMSCommunicator implements WsMsgReceivedListener {
// TMSPart part = TMSPart.newBean("PN1", "Barcode1", 999, 999, TMS_Code.CODE_2002, "", ""); // TMSPart part = TMSPart.newBean("PN1", "Barcode1", 999, 999, TMS_Code.CODE_2002, "", "");
// parts.add(part); // parts.add(part);
ResponseDeliveryOrder(requestID, parts, liteOrder.getOrderNo(),""); ResponseDeliveryOrder(responseCmd,requestID, parts, liteOrder.getOrderNo(),"");
OrderProEndUpdateState(requestCmd,requestID, liteOrder);
//如果工单执行中,发送ResponseUpdateDeliveryReserveState,否则不需要
if (liteOrder.isClosed()) {
log.info("RequestDeliveryOrder 工单已关闭,不需要发送 发送ResponseUpdateDeliveryReserveState");
} else {
tmsReserve = GetOrderInfo(liteOrder);
List<TMSReserve> tmsReserves = new ArrayList<>();
tmsReserves.add(tmsReserve);
ResponseUpdateDeliveryReserveState(requestID, tmsReserves, 0);
}
} }
} }
} catch (Exception exception) { } catch (Exception exception) {
log.error("RequestDeliveryOrder error:" + exception.toString()); log.error(requestCmd+" error:" + exception.toString());
} }
ResponseDeliveryOrder(requestID, new ArrayList<>(), "",""); ResponseDeliveryOrder(responseCmd,requestID, new ArrayList<>(), "","");
} }
/** /**
...@@ -845,10 +739,12 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -845,10 +739,12 @@ public class TMSCommunicator implements WsMsgReceivedListener {
*/ */
private void RequestDeliveryOrderByLocation(int requestID, List<TMSPos> Locations) { private void RequestDeliveryOrderByLocation(int requestID, List<TMSPos> Locations) {
// 3.11 ResponseDeliveryOrderByLocation // 3.11 ResponseDeliveryOrderByLocation
String requestCmd="RequestDeliveryOrderByLocation";
String responseCmd="ResponseDeliveryOrderByLocation";
try { try {
Map<String, String> posResultMap = new HashMap<>(); Map<String, String> posResultMap = new HashMap<>();
if (Locations == null || Locations.size() <= 0) { if (Locations == null || Locations.size() <= 0) {
ResponseDeliveryOrderByLocation(requestID, new ArrayList<>(), new ArrayList<>(), ""); ResponseDeliveryOrderByLocation(responseCmd,requestID, new ArrayList<>(), new ArrayList<>(), "");
return; return;
} }
String soName = "DOL" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss"); String soName = "DOL" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
...@@ -869,15 +765,15 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -869,15 +765,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
} }
StoragePos pos = storagePosManager.getByPosName(posName); StoragePos pos = storagePosManager.getByPosName(posName);
if (pos == null) { if (pos == null) {
log.info("RequestDeliveryOrderByLocation : cid="+cid+", pos="+posName+",未找到库位号,出库结果:code="+TMS_Code.CODE_2002 ); log.info(requestCmd+" : cid="+cid+", pos="+posName+",未找到库位号,出库结果:code="+TMS_Code.CODE_2002 );
posResultMap.put(posName, TMS_Code.CODE_2002); posResultMap.put(posName, TMS_Code.CODE_2002);
} else if (pos.getBarcode() == null) { } else if (pos.getBarcode() == null) {
log.info("RequestDeliveryOrderByLocation : cid="+cid+", pos="+posName+",库位为空,出库失败,结果:code="+TMS_Code.CODE_2002 ); log.info(requestCmd+" : cid="+cid+", pos="+posName+",库位为空,出库失败,结果:code="+TMS_Code.CODE_2002 );
posResultMap.put(posName, TMS_Code.CODE_2002); posResultMap.put(posName, TMS_Code.CODE_2002);
} else { } else {
posResultMap.put(posName, TMS_Code.CODE_1011); //默认是开始送货时失败 posResultMap.put(posName, TMS_Code.CODE_1011); //默认是开始送货时失败
log.info("RequestDeliveryOrderByLocation : cid="+cid+", pos="+posName+",可出库,准备创建工单" ); log.info(requestCmd+" : cid="+cid+", pos="+posName+",可出库,准备创建工单" );
LiteOrderItem item = new LiteOrderItem(); LiteOrderItem item = new LiteOrderItem();
item.setRi(pos.getBarcode().getBarcode()); item.setRi(pos.getBarcode().getBarcode());
item.setNeedNum(1); item.setNeedNum(1);
...@@ -885,7 +781,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -885,7 +781,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
} }
} }
LiteOrder liteOrder = createOrder(requestID, liteOrderItems, soName, true); LiteOrder liteOrder = tmsUtil.createOrder(requestCmd,requestID, liteOrderItems, soName, true,new ArrayList<>());
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo()); liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder != null) { if (liteOrder != null) {
...@@ -896,7 +792,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -896,7 +792,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
dataLogs) { dataLogs) {
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getBarcode().equals(item.getRi())) { if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getBarcode().equals(item.getRi())) {
posResultMap.put(task.getPosName(), TMS_Code.CODE_2011);//状态改为开始送货 posResultMap.put(task.getPosName(), TMS_Code.CODE_2011);//状态改为开始送货
log.info("RequestDeliveryOrderByLocation : cid="+task.getCid()+", pos="+task.getPosName()+",出库成功,code="+ TMS_Code.CODE_2011); log.info(requestCmd+" : cid="+task.getCid()+", pos="+task.getPosName()+",出库成功,code="+ TMS_Code.CODE_2011);
break; break;
} }
} }
...@@ -914,12 +810,13 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -914,12 +810,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
rCodes.add(Integer.parseInt(code)); rCodes.add(Integer.parseInt(code));
} }
ResponseDeliveryOrderByLocation(requestID, Locations, rCodes, liteOrder.getOrderNo()); ResponseDeliveryOrderByLocation(responseCmd,requestID, Locations, rCodes, liteOrder.getOrderNo());
OrderProEndUpdateState(requestCmd,requestID, liteOrder);
} catch (Exception exception) { } catch (Exception exception) {
log.error("RequestDeliveryOrderByLocation error:" + exception.toString()); log.error(requestCmd+" error:" + exception.toString());
} }
ResponseDeliveryOrderByLocation(requestID, Locations, new ArrayList<>(), ""); ResponseDeliveryOrderByLocation(responseCmd,requestID, Locations, new ArrayList<>(), "");
} }
/** /**
...@@ -927,12 +824,17 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -927,12 +824,17 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param requestID * @param requestID
* @param ReelCds * @param ReelCds
*/ */
private void RequestDeliveryOrderByReelCd(int requestID, List<String> ReelCds) { private void RequestDeliveryOrderByReelCd(int requestID, List<String> ReelCds,List<String> rackList) {
// 3.13 ResponseDeliveryOrderByReelCd // 3.13 ResponseDeliveryOrderByReelCd
String requestCmd="RequestDeliveryOrderByReelCd";
String responseCmd="ResponseDeliveryOrderByReelCd";
try { try {
if(rackList==null){
rackList=new ArrayList<>();
}
Map<String, String> posResultMap = new HashMap<>(); Map<String, String> posResultMap = new HashMap<>();
if (ReelCds == null || ReelCds.size() <= 0) { if (ReelCds == null || ReelCds.size() <= 0) {
ResponseDeliveryOrderByReelCd(requestID, new ArrayList<>(), new ArrayList<>(), ""); ResponseDeliveryOrderByReelCd(responseCmd,requestID, new ArrayList<>(), new ArrayList<>(), "");
return; return;
} }
String soName = "DOR" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss"); String soName = "DOR" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
...@@ -943,7 +845,7 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -943,7 +845,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
StoragePos pos = storagePosManager.getByBarcode(ri); StoragePos pos = storagePosManager.getByBarcode(ri);
if (pos == null) { if (pos == null) {
posResultMap.put(ri, TMS_Code.CODE_2041); posResultMap.put(ri, TMS_Code.CODE_2041);
log.info("RequestDeliveryOrderByLocation : ri="+ri+", 未找到物料,出库失败,code="+ TMS_Code.CODE_2041); log.info(requestCmd+" : ri="+ri+", 未找到物料,出库失败,code="+ TMS_Code.CODE_2041);
} else { } else {
posResultMap.put(ri, TMS_Code.CODE_1011); //默认是开始送货时失败 posResultMap.put(ri, TMS_Code.CODE_1011); //默认是开始送货时失败
...@@ -951,22 +853,21 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -951,22 +853,21 @@ public class TMSCommunicator implements WsMsgReceivedListener {
item.setRi(pos.getBarcode().getBarcode()); item.setRi(pos.getBarcode().getBarcode());
item.setNeedNum(1); item.setNeedNum(1);
liteOrderItems.add(item); liteOrderItems.add(item);
log.info("RequestDeliveryOrderByLocation : ri="+ri+", 可出库,准备创建工单"); log.info(requestCmd+" : ri="+ri+", 可出库,准备创建工单");
} }
} }
LiteOrder liteOrder = createOrder(requestID, liteOrderItems, soName, true); LiteOrder liteOrder = tmsUtil.createOrder(requestCmd,requestID, liteOrderItems, soName, true,rackList);
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo()); liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder != null) { if (liteOrder != null) {
List<DataLog> dataLogs = taskService.getAllTasks(); List<DataLog> dataLogs = taskService.getAllTasks();
List<TMSPart> parts = new ArrayList<>();
for (LiteOrderItem item : liteOrder.getOrderItems()) { for (LiteOrderItem item : liteOrder.getOrderItems()) {
for (DataLog task : for (DataLog task :
dataLogs) { dataLogs) {
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getBarcode().equals(item.getRi())) { if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getBarcode().equals(item.getRi())) {
posResultMap.put(task.getBarcode(), TMS_Code.CODE_2011);//状态改为开始送货 posResultMap.put(task.getBarcode(), TMS_Code.CODE_2011);//状态改为开始送货
log.info("RequestDeliveryOrderByLocation : ri="+task.getBarcode()+", 出库成功,code="+TMS_Code.CODE_2011); log.info(requestCmd+" : ri="+task.getBarcode()+", 出库成功,code="+TMS_Code.CODE_2011);
break; break;
} }
} }
...@@ -984,122 +885,242 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -984,122 +885,242 @@ public class TMSCommunicator implements WsMsgReceivedListener {
rCodes.add(Integer.parseInt(code)); rCodes.add(Integer.parseInt(code));
} }
ResponseDeliveryOrderByReelCd(requestID, ReelCds, rCodes, liteOrder.getOrderNo()); ResponseDeliveryOrderByReelCd(responseCmd,requestID, ReelCds, rCodes, liteOrder.getOrderNo());
OrderProEndUpdateState(requestCmd,requestID, liteOrder);
} catch (Exception exception) { } catch (Exception exception) {
log.error("RequestDeliveryOrderByLocation error:" + exception.toString()); log.error(requestCmd+" error:" + exception.toString());
}
ResponseDeliveryOrderByReelCd(responseCmd,requestID, ReelCds, new ArrayList<>(), "");
} }
ResponseDeliveryOrderByReelCd(requestID, ReelCds, new ArrayList<>(), ""); /**
* 3.14 RequestDeliveryReserve
*/
private void RequestDeliveryReserve(int requestID, List<String> partItem, List<Integer> partCount, boolean towerLamp, List<String> rackList) {
//创建工单,锁定物料,但不出库
String requestCmd = "RequestDeliveryReserve";
String responseCmd = "ResponseDeliveryReserve";
try {
if (partItem == null || partCount == null || partItem.size() <= 0 || partCount.size() <= 0) {
log.info(requestCmd + " 数据不完整,直接返回");
ResponseDeliveryReserve(responseCmd, requestID, new ArrayList<>(), "", "");
return;
} }
String soName = "DO" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
List<LiteOrderItem> liteOrderItems = tmsUtil.partToItems(partItem, partCount);
LiteOrder liteOrder = tmsUtil.createOrder(responseCmd, requestID, liteOrderItems, soName, false, rackList);
if (liteOrder == null) {
//同时只能有一个工单执行,创建工单时不能有未关闭的工单。返回2014
List<TMSPart> parts = tmsUtil.itemsToTMSPartList(liteOrderItems);
ResponseDeliveryReserve(responseCmd, requestID, parts, "", "");
} else {
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder != null) {
List<TMSPart> parts =tmsUtil.GetReserveList(requestCmd,liteOrder);
ResponseDeliveryReserve(responseCmd, requestID, parts, liteOrder.getOrderNo(), "");
OrderProEndUpdateState(requestCmd, requestID, liteOrder);
}
}
} catch (Exception exception) {
log.error(requestCmd + " error:" + exception.toString());
}
ResponseDeliveryReserve(responseCmd, requestID, new ArrayList<>(), "", "");
}
/** /**
* 3.14 RequestUpdateDeliveryReserveState * 3.16 RequestDeliveryReserveByLocation
* @param requestID * @param requestID
* @param reserveCodes * @param Locations
* @param resultCodes
*/ */
private void RequestUpdateDeliveryReserveState(int requestID, List<String> reserveCodes, List<Integer> resultCodes) { private void RequestDeliveryReserveByLocation(int requestID, List<TMSPos> Locations) {
//3.15 ResponseUpdateDeliveryReserveState String requestCmd = "RequestDeliveryReserveByLocation";
String responseCmd = "ResponseDeliveryReserveByLocation";
try {
Map<String, String> posResultMap = new HashMap<>();
if (Locations == null || Locations.size() <= 0) {
ResponseDeliveryOrderByLocation(responseCmd, requestID, new ArrayList<>(), new ArrayList<>(), "");
return;
}
String soName = "DOL" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
//2016也需要取消工单,返回的时候整体的code需要返回2016 List<LiteOrderItem> liteOrderItems = new ArrayList<>();
for (TMSPos tmsPos : Locations) {
if (ObjectUtil.isEmpty(tmsPos.getColID()) && ObjectUtil.isEmpty(tmsPos.getRowID())) {
continue;
}
String cid = tmsPos.getRackID();
Storage storage = dataCache.getStorage(cid);
List<TMSReserve> ReserveList = new ArrayList<>(); String posName = tmsPos.getPosName();
int state = 0; if (storage == null || ObjectUtil.isEmpty(posName)) {
try { posResultMap.put("", TMS_Code.CODE_2002);
log.info("RequestUpdateDeliveryReserveState : reserveCodes="+JsonUtil.toJsonStr(reserveCodes)+",resultCodes="+JsonUtil.toJsonStr(resultCodes)+" "); continue;
if(reserveCodes!=null&&resultCodes!=null&&reserveCodes.size()==resultCodes.size()) { }
StoragePos pos = storagePosManager.getByPosName(posName);
if (pos == null) {
log.info("RequestDeliveryOrderByLocation : cid=" + cid + ", pos=" + posName + ",未找到库位号,出库结果:code=" + TMS_Code.CODE_2002);
posResultMap.put(posName, TMS_Code.CODE_2002);
} else if (pos.getBarcode() == null) {
log.info("RequestDeliveryOrderByLocation : cid=" + cid + ", pos=" + posName + ",库位为空,出库失败,结果:code=" + TMS_Code.CODE_2002);
posResultMap.put(posName, TMS_Code.CODE_2002);
} else {
posResultMap.put(posName, TMS_Code.CODE_1011); //默认是开始送货时失败
Collection<DataLog> dataLogCollections=taskService.getQueueTasks(); log.info("RequestDeliveryOrderByLocation : cid=" + cid + ", pos=" + posName + ",可出库,准备创建工单");
for (int i=0;i<reserveCodes.size();i++){ LiteOrderItem item = new LiteOrderItem();
String reserveCode=reserveCodes.get(i); item.setRi(pos.getBarcode().getBarcode());
Integer code=Convert.toInt(resultCodes.get(i)) ; item.setNeedNum(1);
liteOrderItems.add(item);
}
TMSReserve tmsReserve=ProcessOrder(reserveCode,code+"");
ReserveList.add(tmsReserve);
} }
LiteOrder liteOrder = tmsUtil.createOrder(requestCmd, requestID, liteOrderItems, soName, false, new ArrayList<>());
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder != null) {
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
for (StoragePos pos : lockPosList) {
posResultMap.put(pos.getPosName(), TMS_Code.CODE_2010);//准备出库
log.info(requestCmd + " : pos=" + pos.getPosName() + ",锁定成功,code=" + TMS_Code.CODE_2010);
} }
} catch (Exception exception) {
log.error("RequestUpdateDeliveryReserveState error:" + exception.toString());
} }
ResponseUpdateDeliveryReserveState(requestID, ReserveList,state);
//返回消息
List<Integer> rCodes = new ArrayList<>();
for (TMSPos tmsPos : Locations) {
String code = TMS_Code.CODE_1011;
String posName = tmsPos.getPosName();
if (posResultMap.containsKey(posName)) {
code = posResultMap.get(posName);
}
rCodes.add(Integer.parseInt(code));
} }
private TMSReserve ProcessOrder(String reserveCode,String resultCode) { ResponseDeliveryReserveByLocation(responseCmd, requestID, Locations, rCodes, liteOrder.getOrderNo());
TMSReserve tmsReserve = new TMSReserve(); OrderProEndUpdateState(requestCmd, requestID, liteOrder);
tmsReserve.setReserveCode(reserveCode);
tmsReserve.setResultCode(resultCode);
tmsReserve.setPartList(new ArrayList<>());
List<TMSPart> tmsParts = new ArrayList<>();
if (resultCode.equals(TMS_Code.CODE_2012)||resultCode.equals(TMS_Code.CODE_2016)) {
tmsReserve.setResultCode(TMS_Code.CODE_2014);
LiteOrder order = liteOrderCache.getLiteOrder(reserveCode);
if (order != null) {
if (order.isOutBom() || order.isOutTails() || order.isOutOne()) { } catch (Exception exception) {
log.error(requestCmd + " error:" + exception.toString());
}
ResponseDeliveryReserveByLocation(responseCmd, requestID, Locations, new ArrayList<>(), "");
}
log.info("ProcessOrder 准备取消工单:" + reserveCode + ",设置取消标记"); /**
* 3.18 RequestDeliveryReserveByReelCd
* @param requestID
* @param ReelCds
*/
private void RequestDeliveryReserveByReelCd(int requestID, List<String> ReelCds,List<String> rackList) {
order.addAppendDate("cancel","true"); String requestCmd = "RequestDeliveryReserveByReelCd";
liteOrderManager.save(order); String responseCmd = "ReponseDeliveryReserveByReelCd";
liteOrderCache.addOrderToMap(order); try {
if (rackList == null) {
rackList = new ArrayList<>();
}
Map<String, String> posResultMap = new HashMap<>();
if (ReelCds == null || ReelCds.size() <= 0) {
ResponseDeliveryOrderByReelCd(responseCmd, requestID, new ArrayList<>(), new ArrayList<>(), "");
return;
}
String soName = "DOR" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
List<LiteOrderItem> liteOrderItems = new ArrayList<>();
//查找工单的所有任务 for (String ri : ReelCds) {
Criteria c = Criteria.where("sourceName").is(order.getOrderNo()).and("type").is(2);
List<DataLog> dataLogs = dataLogManager.findByQuery(new Query(c)); StoragePos pos = storagePosManager.getByBarcode(ri);
for (DataLog task : if (pos == null) {
dataLogs) { posResultMap.put(ri, TMS_Code.CODE_2041);
//是工单出库任务 log.info(requestCmd + " : ri=" + ri + ", 未找到物料,出库失败,code=" + TMS_Code.CODE_2041);
if (task.isCheckOutTask() && task.getSourceName().equals(order.getOrderNo())) {
boolean cancelResult = false;
String logCode = TMS_Code.CODE_2014;//默认不能取消
if (task.isCancel()) {
logCode = TMS_Code.CODE_2012;//取消成功
} else if (task.isExecuting() || task.isWait()) {
//判断任务是否可取消
cancelResult = taskService.cancelTask(task.getId());
if (cancelResult) {
logCode = TMS_Code.CODE_2012;//取消成功
} else { } else {
posResultMap.put(ri, TMS_Code.CODE_1011); //默认是开始送货时失败
logCode = TMS_Code.CODE_2014;//取消失败 LiteOrderItem item = new LiteOrderItem();
item.setRi(pos.getBarcode().getBarcode());
item.setNeedNum(1);
liteOrderItems.add(item);
log.info(requestCmd + " : ri=" + ri + ", 可出库,准备创建工单");
} }
} else {
logCode = TMS_Code.CODE_2013;//已完成
} }
log.info("RequestUpdateDeliveryReserveState 取消出库任务,工单:" + order.getOrderNo() + ", barcode:" + task.getBarcode() + ", taskID:" + task.getId() + "取消结果:" + cancelResult); LiteOrder liteOrder = tmsUtil.createOrder(requestCmd, requestID, liteOrderItems, soName, false, rackList);
TMSPart part = TMSPart.newBean(tmsParts.size(), task.getPartNumber(), task.getBarcode(), task.getNum(), task.getNum(), logCode, task.getCid(), task.getPosName()); liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
tmsParts.add(part); if (liteOrder != null) {
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
for (StoragePos pos : lockPosList) {
posResultMap.put(pos.getBarcode().getBarcode(), TMS_Code.CODE_2010);//准备出库
log.info(requestCmd + " : barcode=" + pos.getBarcode().getBarcode() + ",锁定成功,code=" + TMS_Code.CODE_2010);
} }
} }
//判断工单是否可以取消, //返回消息
liteOrderCache.closeOrder(order.getOrderNo()); List<Integer> rCodes = new ArrayList<>();
if (order.isClosed()) { for (String ri : ReelCds) {
if ( resultCode.equals(TMS_Code.CODE_2016)) { String code = TMS_Code.CODE_1011;
tmsReserve.setResultCode(TMS_Code.CODE_2016);//取消成功
}else { if (posResultMap.containsKey(ri)) {
tmsReserve.setResultCode(TMS_Code.CODE_2012);//取消成功 code = posResultMap.get(ri);
} }
}else{ rCodes.add(Integer.parseInt(code));
order.addAppendDate("cancel","");
liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
log.info("ProcessOrder 取消工单失败,清空取消标记 ");
} }
} else { ResponseDeliveryReserveByReelCd(responseCmd, requestID, ReelCds, rCodes, liteOrder.getOrderNo());
log.error("ProcessOrder 无法取消工单:" + reserveCode + ",未开始或已结束"); OrderProEndUpdateState(requestCmd, requestID, liteOrder);
} catch (Exception exception) {
log.error(requestCmd + " error:" + exception.toString());
} }
} else { ResponseDeliveryReserveByReelCd(responseCmd, requestID, ReelCds, new ArrayList<>(), "");
log.error("ProcessOrder 未找到工单号:" + reserveCode);
} }
/**
* 3.14 RequestUpdateDeliveryReserveState
* @param requestID
* @param reserveCodes
* @param resultCodes
*/
private void RequestUpdateDeliveryReserveState(int requestID, List<String> reserveCodes, List<Integer> resultCodes) {
//3.15 ResponseUpdateDeliveryReserveState
//2016也需要取消工单,返回的时候整体的code需要返回2016
List<TMSReserve> ReserveList = new ArrayList<>();
int state = 0;
try {
log.info("RequestUpdateDeliveryReserveState : reserveCodes="+JsonUtil.toJsonStr(reserveCodes)+",resultCodes="+JsonUtil.toJsonStr(resultCodes)+" ");
if(reserveCodes!=null&&resultCodes!=null&&reserveCodes.size()==resultCodes.size()) {
Collection<DataLog> dataLogCollections=taskService.getQueueTasks();
for (int i=0;i<reserveCodes.size();i++){
String reserveCode=reserveCodes.get(i);
Integer code=Convert.toInt(resultCodes.get(i)) ;
TMSReserve tmsReserve=tmsUtil.ProcessOrder(reserveCode,code+"");
ReserveList.add(tmsReserve);
}
}
} catch (Exception exception) {
log.error("RequestUpdateDeliveryReserveState error:" + exception.toString());
} }
tmsReserve.setPartList(tmsParts); ResponseUpdateDeliveryReserveState(requestID, ReserveList,state);
return tmsReserve;
} }
...@@ -1115,19 +1136,12 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -1115,19 +1136,12 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param Parts * @param Parts
* @param OrderCode * @param OrderCode
*/ */
public void ResponseDeliveryOrder(int requestID, List<TMSPart> Parts, String OrderCode,String ReserveCode) { public void ResponseDeliveryOrder(String topic, int requestID, List<TMSPart> Parts, String OrderCode,String ReserveCode) {
Map<String, Object> dataMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>();
dataMap.put("Topic", "ResponseDeliveryOrder"); dataMap.put("Topic", topic);
dataMap.put("RequestID", requestID); dataMap.put("RequestID", requestID);
List<Map<String, Object>> arrayList = new ArrayList<>(); List<Map<String, Object>> arrayList = new ArrayList<>();
for (TMSPart Part : Parts) { for (TMSPart Part : Parts) {
// Map<String, Object> dataMap2 = new HashMap<>();
// dataMap2.put("index", Part.index);
// dataMap2.put("PartName", Part.PartName);
// dataMap2.put("ReelCode", Part.ReelCode);
// dataMap2.put("RequestCount", Part.RequestCount);
// dataMap2.put("ResponseCount", Part.ResponseCount);
// dataMap2.put("ResultCode", Part.ResultCode);
arrayList.add(Part.getJson()); arrayList.add(Part.getJson());
} }
...@@ -1148,9 +1162,9 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -1148,9 +1162,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param ResultCodes * @param ResultCodes
* @param OrderCode * @param OrderCode
*/ */
public void ResponseDeliveryOrderByLocation(int requestID, List<TMSPos> Locations, List<Integer> ResultCodes, String OrderCode) { public void ResponseDeliveryOrderByLocation(String topic,int requestID, List<TMSPos> Locations, List<Integer> ResultCodes, String OrderCode) {
Map<String, Object> dataMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>();
dataMap.put("Topic", "ResponseDeliveryOrderByLocation"); dataMap.put("Topic", topic);
dataMap.put("RequestID", requestID); dataMap.put("RequestID", requestID);
List<Object> jArray = new ArrayList<>(); List<Object> jArray = new ArrayList<>();
for (TMSPos pos : Locations) { for (TMSPos pos : Locations) {
...@@ -1175,9 +1189,9 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -1175,9 +1189,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param ResultCodes * @param ResultCodes
* @param OrderCode * @param OrderCode
*/ */
public void ResponseDeliveryOrderByReelCd(int requestID, List<String> ReelCds, List<Integer> ResultCodes, String OrderCode) { public void ResponseDeliveryOrderByReelCd(String topic,int requestID, List<String> ReelCds, List<Integer> ResultCodes, String OrderCode) {
Map<String, Object> dataMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>();
dataMap.put("Topic", "ResponseDeliveryOrderByReelCd"); dataMap.put("Topic", topic);
dataMap.put("RequestID", requestID); dataMap.put("RequestID", requestID);
dataMap.put("ReelCds", ReelCds); dataMap.put("ReelCds", ReelCds);
dataMap.put("ResultCodes", ResultCodes); dataMap.put("ResultCodes", ResultCodes);
...@@ -1187,6 +1201,75 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -1187,6 +1201,75 @@ public class TMSCommunicator implements WsMsgReceivedListener {
} }
/** /**
* 3.15 ResponseDeliveryReserve
* @param requestID
* @param Parts
* @param OrderCode
*/
public void ResponseDeliveryReserve(String topic, int requestID, List<TMSPart> Parts, String OrderCode,String ReserveCode) {
ResponseDeliveryOrder(topic,requestID,Parts,OrderCode,ReserveCode);
// Map<String, Object> dataMap = new HashMap<>();
// dataMap.put("Topic", topic);
// dataMap.put("RequestID", requestID);
// List<Map<String, Object>> arrayList = new ArrayList<>();
// for (TMSPart Part : Parts) {
// arrayList.add(Part.getJson());
// }
//
// if(ObjectUtil.isEmpty(ReserveCode)){
// ReserveCode= OrderCode;
// }
//
// dataMap.put("PartList", arrayList);
// dataMap.put("OrderCode", OrderCode);
// dataMap.put("ReserveCode", ReserveCode);
// SendData(dataMap);
}
/**
* 3.17 ResponseDeliveryReserveByLocation
* @param requestID
* @param Locations
* @param ResultCodes
* @param OrderCode
*/
public void ResponseDeliveryReserveByLocation(String topic,int requestID, List<TMSPos> Locations, List<Integer> ResultCodes, String OrderCode) {
ResponseDeliveryReserveByLocation(topic,requestID,Locations,ResultCodes,OrderCode);
// Map<String, Object> dataMap = new HashMap<>();
// dataMap.put("Topic", topic);
// dataMap.put("RequestID", requestID);
// List<Object> jArray = new ArrayList<>();
// for (TMSPos pos : Locations) {
// jArray.add(pos.getJson());
// }
//
// dataMap.put("Locations", jArray);
// dataMap.put("ResultCodes", ResultCodes);
// dataMap.put("OrderCode", OrderCode);
// dataMap.put("ReserveCode", OrderCode);
// SendData(dataMap);
}
/**
* 3.19 ResponseDeliveryReserveByReelCd
* @param requestID
* @param ReelCds
* @param ResultCodes
* @param OrderCode
*/
public void ResponseDeliveryReserveByReelCd(String topic,int requestID, List<String> ReelCds, List<Integer> ResultCodes, String OrderCode) {
ResponseDeliveryOrderByReelCd(topic,requestID,ReelCds,ResultCodes, OrderCode);
// Map<String, Object> dataMap = new HashMap<>();
// dataMap.put("Topic", topic);
// dataMap.put("RequestID", requestID);
// dataMap.put("ReelCds", ReelCds);
// dataMap.put("ResultCodes", ResultCodes);
// dataMap.put("OrderCode", OrderCode);
// dataMap.put("ReserveCode", OrderCode);
// SendData(dataMap);
}
/**
* 3.15 ResponseUpdateDeliveryReserveState * 3.15 ResponseUpdateDeliveryReserveState
* @param requestID * @param requestID
* @param ReserveList * @param ReserveList
...@@ -1208,15 +1291,6 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -1208,15 +1291,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
List<Object> jArray2 = new ArrayList<>(); List<Object> jArray2 = new ArrayList<>();
for (TMSPart part : Reserve.getPartList()) { for (TMSPart part : Reserve.getPartList()) {
Map<String, Object> dataMap3 = new HashMap<>(); Map<String, Object> dataMap3 = new HashMap<>();
// dataMap3.put("Index", part.index);
// dataMap3.put("PartName", part.PartName);
// dataMap3.put("RequestCount", part.RequestCount);
// dataMap3.put("ResponseCount", part.ResponseCount);
// dataMap3.put("ResultCode", part.ResultCode);
// dataMap3.put("ReelCode", part.ReelCode);
// dataMap3.put("RackID", part.RackID);
// dataMap3.put("RowID", part.RowID);
// dataMap3.put("ColID", part.ColID);
jArray2.add(part.getAJson()); jArray2.add(part.getAJson());
} }
...@@ -1228,4 +1302,53 @@ public class TMSCommunicator implements WsMsgReceivedListener { ...@@ -1228,4 +1302,53 @@ public class TMSCommunicator implements WsMsgReceivedListener {
SendData(dataMap); SendData(dataMap);
} }
//[order]
//
// 4-1) Request Material to smart rack. : “API” RequestDeliveryOrder << Hanwha -> Smart Rack/Storage >>
//
// 4-2) Response about request : “API” ResponseDeliveryOrder
//
//4-3) Response about reservation information : “API” ResponseUpdateDeliveryReserveState ( History / state = 2011)
//
//
//
//[Reserve]
//
// 5-1) Reserve Material to smart rack : “API” RequestDeliveryReserve << Hanwha -> Smart Rack/Storage >>
//
// 5-2) Response about request : “API” ResponseDeliveryReserve
//
//5-3) Response about reservation information : “API” ResponseUpdateDeliveryReserveState ( History / state = 2010)
//
//
//
// We can change status reservation from Reserve to Order
//
//5-4) “API” RequestUpdateDeliveryReserveState ( code = 2011 ) << Hanwha -> Smart Rack / Storage>>
//
// 5-5) Responding to the result of cancellation request : “API” ResponseUpdateDeliveryReserveState ( History / state = 2011)
//
//
//
// You can synchronize in real time or synchronize all at once when dispensing materials
//
//6) Sync Material List : “API” RequestSyncPartReelPosInfo ( state = 0 )
//
//
//
// We can cancel the requested reservation.
//
// 7-1) “API” RequestUpdateDeliveryReserveState ( code = 2012 ) << Hanwha -> Smart Rack / Storage>>
//
// 7-2) Responding to the result of cancellation request : “API” ResponseUpdateDeliveryReserveState ( History / state = 2012)
//
//
//
// When all requested materials out from rack, the status of the reservation list must also be changed
//
//8) “API” ResponseUpdateDeliveryReserveState ( History / state = 2013)
} }
package com.neotel.smfcore.custom.hanwha.handler;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache;
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.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
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.TaskService;
import com.neotel.smfcore.custom.hanwha.handler.bean.TMSPart;
import com.neotel.smfcore.custom.hanwha.handler.bean.TMSReserve;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class TMSUtil {
@Autowired
private IDataLogManager dataLogManager;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private DataCache dataCache;
@Autowired
private TaskService taskService;
public TMSReserve GetOrderInfo(LiteOrder liteOrder) {
TMSReserve tmsReserve = new TMSReserve();
tmsReserve.setReserveCode(liteOrder.getOrderNo());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(liteOrder.getCreateDate());
tmsReserve.setDate(dateString);
List<TMSPart> tmsParts = new ArrayList<>();
//查找工单的所有任务
Criteria c = Criteria.where("sourceName").is(liteOrder.getOrderNo()).and("type").is(2);
List<DataLog> dataLogs = dataLogManager.findByQuery(new Query(c));
boolean hasCancelTask = false;
boolean allCancel = true;
for (DataLog task :
dataLogs) {
//是工单出库任务
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo())) {
int responseNum = task.getNum();
String logCode = TMS_Code.CODE_2013;//默认已完成
if (task.isCancel()) {
hasCancelTask = true;
responseNum = 0;
logCode = TMS_Code.CODE_2012;//取消成功
} else if (task.isExecuting() || task.isWait()) {
logCode = TMS_Code.CODE_2011;//出库中
allCancel = false;
} else {
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()) {
//如果工单全部取消,需要发送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);
} else {
tmsReserve.setResultCode(TMS_Code.CODE_2001);
}
} else if (liteOrder.isOutOne() || liteOrder.isOutTails() || liteOrder.isOutOne()) {
tmsReserve.setResultCode(TMS_Code.CODE_2011);
} else if (liteOrder.isNew()) {
tmsReserve.setResultCode(TMS_Code.CODE_2010);
//查找锁定的物料
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
for (StoragePos pos :
lockPosList) {
Barcode code = pos.getBarcode();
TMSPart part = TMSPart.newBean(tmsParts.size(), code.getPartNumber(), code.getBarcode(), code.getAmount(), code.getAmount(),
TMS_Code.CODE_2010, "", pos.getPosName());
tmsParts.add(part);
}
}
tmsReserve.setPartList(tmsParts);
return tmsReserve;
}
public LiteOrder createOrder(String requestCmd, int requestID, List<LiteOrderItem> items, String orderNo, boolean autoOut, List<String> rackList) {
if (items.size() <= 0) {
return null;
}
if (rackList == null) {
rackList = new ArrayList<>();
}
//判断是否有已执行的工单,有的话创建失败
Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
if (orderList.size() > 0) {
log.info(requestCmd + ": 当前有未关闭的工单" + orderList.size() + ",创建工单失败");
return null;
}
LiteOrder liteOrder = new LiteOrder(orderNo, items);
liteOrder.setSource("DeliveryOrder");
LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
if (dbOrder != null) {
orderNo = orderNo + "-" + requestID;
dbOrder = liteOrderManager.findByOrderNo(orderNo);
if (dbOrder == null) {
liteOrder.setOrderNo(orderNo);
} else {
log.info(requestCmd + " :数据库中已存在工单号为[" + orderNo + "],创建工单失败");
return null;
}
}
log.info(requestCmd + ":新建工单:" + liteOrder.getOrderNo() + ",共" + items.size() + "条工单详情,自动执行:" + autoOut);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
if (autoOut) {
try {
liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(), false, false, true, rackList);
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
} catch (ValidateException ex) {
log.error(requestCmd + " 自动执行工单[" + liteOrder.getOrderNo() + "] error:" + ex.toString());
}
} else {
//先锁定物料
liteOrderCache.LiteOrderLockReel(liteOrder.getOrderNo(), false, false, true, rackList);
}
return liteOrder;
}
public List<TMSPart> GetReserveList(String requestCmd, LiteOrder liteOrder) {
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
List<TMSPart> parts = new ArrayList<>();
for (LiteOrderItem item :
liteOrder.getOrderItems()) {
try {
int curroNum = 0;
for (StoragePos pos :
lockPosList) {
if (pos.getBarcode().getPartNumber().equals(item.getPn())) {
int requestNum = pos.getBarcode().getAmount();
curroNum += requestNum;
if (curroNum > item.getNeedNum()) {
requestNum = pos.getBarcode().getAmount() - (curroNum - item.getNeedNum());
}
Storage storage = dataCache.getStorageById(pos.getStorageId());
//准备出库
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), pos.getBarcode().getBarcode(), requestNum, pos.getBarcode().getAmount(), TMS_Code.CODE_2010, storage.getCid(), pos.getPosName());
log.info(requestCmd + " pn=" + item.getPn() + ",锁定物料成功:code=" + TMS_Code.CODE_2010 + ",posName=" + pos.getPosName() + ",barcode=" + pos.getBarcode().getBarcode());
parts.add(p);
}
}
} catch (Exception ex) {
log.error(requestCmd + " " + item.getPn() + ",error::", ex.toString());
}
}
return parts;
}
public TMSReserve ProcessOrder(String reserveCode, String resultCode) {
TMSReserve tmsReserve = new TMSReserve();
tmsReserve.setReserveCode(reserveCode);
tmsReserve.setResultCode(resultCode);
tmsReserve.setPartList(new ArrayList<>());
List<TMSPart> tmsParts = new ArrayList<>();
if (resultCode.equals(TMS_Code.CODE_2012) || resultCode.equals(TMS_Code.CODE_2016)) {
tmsReserve.setResultCode(TMS_Code.CODE_2014);
LiteOrder order = liteOrderCache.getLiteOrder(reserveCode);
if (order != null) {
if (order.isOutBom() || order.isOutTails() || order.isOutOne()) {
log.info("ProcessOrder 准备取消工单:" + reserveCode + ",设置取消标记");
order.addAppendDate("cancel", "true");
liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
//查找工单的所有任务
Criteria c = Criteria.where("sourceName").is(order.getOrderNo()).and("type").is(2);
List<DataLog> dataLogs = dataLogManager.findByQuery(new Query(c));
for (DataLog task :
dataLogs) {
//是工单出库任务
if (task.isCheckOutTask() && task.getSourceName().equals(order.getOrderNo())) {
boolean cancelResult = false;
String logCode = TMS_Code.CODE_2014;//默认不能取消
if (task.isCancel()) {
logCode = TMS_Code.CODE_2012;//取消成功
} else if (task.isExecuting() || task.isWait()) {
//判断任务是否可取消
cancelResult = taskService.cancelTask(task.getId());
if (cancelResult) {
logCode = TMS_Code.CODE_2012;//取消成功
} else {
logCode = TMS_Code.CODE_2014;//取消失败
}
} else {
logCode = TMS_Code.CODE_2013;//已完成
}
log.info("RequestUpdateDeliveryReserveState 取消出库任务,工单:" + order.getOrderNo() + ", barcode:" + task.getBarcode() + ", taskID:" + task.getId() + "取消结果:" + cancelResult);
TMSPart part = TMSPart.newBean(tmsParts.size(), task.getPartNumber(), task.getBarcode(), task.getNum(), task.getNum(), logCode, task.getCid(), task.getPosName());
tmsParts.add(part);
}
}
//判断工单是否可以取消,
liteOrderCache.closeOrder(order.getOrderNo());
if (order.isClosed()) {
if (resultCode.equals(TMS_Code.CODE_2016)) {
tmsReserve.setResultCode(TMS_Code.CODE_2016);//取消成功
} else {
tmsReserve.setResultCode(TMS_Code.CODE_2012);//取消成功
}
} else {
order.addAppendDate("cancel", "");
liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
log.info("ProcessOrder 取消工单失败,清空取消标记 ");
}
} else {
log.error("ProcessOrder 无法取消工单:" + reserveCode + ",未开始或已结束");
}
} else {
log.error("ProcessOrder 未找到工单号:" + reserveCode);
}
} else if (reserveCode.equals(TMS_Code.CODE_2011)) {
tmsReserve.setResultCode(TMS_Code.CODE_2014);
//工单出库
LiteOrder order = liteOrderCache.getLiteOrder(reserveCode);
if (order != null) {
log.error("ProcessOrder 工单开始出库:" + reserveCode + "");
//工单出库
liteOrderCache.checkOutLiteOrder(order.getOrderNo(), false, false, true);
//查找工单的所有任务
Criteria c = Criteria.where("sourceName").is(order.getOrderNo()).and("type").is(2);
List<DataLog> dataLogs = dataLogManager.findByQuery(new Query(c));
for (DataLog task :
dataLogs) {
//是工单出库任务
if (task.isCheckOutTask() && task.getSourceName().equals(order.getOrderNo())) {
String logCode = TMS_Code.CODE_2011;
log.info("ProcessOrder 工单出库:" + order.getOrderNo() + ", barcode:" + task.getBarcode() + ", taskID:" + task.getId() + " ,postName=" + task.getPosName());
TMSPart part = TMSPart.newBean(tmsParts.size(), task.getPartNumber(), task.getBarcode(), task.getNum(), task.getNum(), logCode, task.getCid(), task.getPosName());
tmsParts.add(part);
}
}
} else {
log.error("ProcessOrder 未找到工单号:" + reserveCode);
}
}
tmsReserve.setPartList(tmsParts);
return tmsReserve;
}
public List<LiteOrderItem> partToItems(List<String> partItem, List<Integer> partCount) {
List<LiteOrderItem> liteOrderItems = new ArrayList<>();
int index = 0;
for (String pn : partItem) {
int count = Convert.toInt(partCount.get(index));
if (ObjectUtil.isNotEmpty(pn) && count > 0) {
LiteOrderItem item = new LiteOrderItem();
item.setPn(pn);
item.setNeedNum(count);
liteOrderItems.add(item);
}
index++;
}
return liteOrderItems;
}
public List<TMSPart> itemsToTMSPartList(List<LiteOrderItem> liteOrderItems) {
List<TMSPart> parts = new ArrayList<>();
for (LiteOrderItem item :
liteOrderItems) {
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), 0, TMS_Code.CODE_2014, "", "");
parts.add(p);
}
return parts;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!