Commit 389298f7 LN

abort时,已结束的任务需要调API002或API007通知镁光

1 个父辈 eca2cc90
package com.neotel.smfcore.core.order.service.po;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.base.BasePo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
......@@ -13,6 +15,7 @@ import java.util.Map;
@Data
@Document
@Slf4j
public class LiteOrderItem extends BasePo implements Serializable ,Comparable<LiteOrderItem> {
/**
* 物料编号
......@@ -120,6 +123,26 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
public List<LiteOrderItem> selectItems;
public boolean updateSelItemS(String subItemId,String selItemStatus,String reason) {
try {
if (selectItems == null || selectItems.size() <= 0) {
return false;
}
for (int i = 0; i < selectItems.size(); i++) {
if (selectItems.get(i).getId().equals(subItemId)) {
selectItems.get(i).setStatus(selItemStatus);
if (ObjectUtil.isNotEmpty(reason)) {
selectItems.get(i).setExecutFailReason(reason);
}
return true;
}
}
} catch (Exception ex) {
log.error("updateSelItemS error :" + ex.toString());
}
return false;
}
/**
* 出库是否满足要求,已出库数量大于需求数量
*/
......
......@@ -36,7 +36,7 @@ public class MicronApi {
public static boolean Debug=false;
public static boolean Debug=true;
private static MicronConfig config;
@Autowired
......@@ -568,9 +568,10 @@ public class MicronApi {
}
public static String Api007(String operationId, String rfid, List<DataLog> dataLogList) {
public static Map<String,String> Api007(String operationId, String rfid, List<DataLog> dataLogList) {
String url = config.getUrl(config.api_name_007);
String errMsg = "";
Map<String, String> resultMap = new HashMap<>();
try {
String jobId = operationId + "_" + rfid;
Map<String, Object> paramMap = new HashMap<>();
......@@ -595,7 +596,7 @@ public class MicronApi {
String paramStr = JsonUtil.toJsonStr(paramMap);
log.info("调用MES接口 API007: url=" + url + ",body=" + paramStr + "");
Map<String, String> resultMap = new HashMap<>();
MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap);
errMsg = getDErrorMsg(micronResult);
// if (micronResult.isOk()&& micronResult.statusIsSuccess()) {
......@@ -615,21 +616,84 @@ public class MicronApi {
}
}
//需要解析
return "";
return resultMap;
} else if (ObjectUtil.isNotEmpty(errMsg)) {
log.info("API007 ,接口通信失败:"+errMsg);
log.info("API007 ,接口通信失败:" + errMsg);
resultMap.put("msg", errMsg);
// throw new ApiException(errMsg);
} else {
log.info("API007 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API007 : " + micronResult.getResponseData()});
}
} catch (ApiException e) {
log.error(url + "出错", e);
resultMap.put("msg", e.getMessage());
// return e.getMessage();
}
return resultMap;
}
public static String Api007SingleReel(String operationId, String rfid, DataLog dataLog) {
String url = config.getUrl(config.api_name_007);
String errMsg = "";
try {
String jobId = operationId + "_" + rfid;
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("jobId", jobId);
paramMap.put("operationId", operationId);
List<Map<String, Object>> materialList = new ArrayList<>();
Map<String, Object> materialsMap = new HashMap<>();
materialsMap.put("location", dataLog.getPosName());
materialsMap.put("towerId", dataLog.getStorageId());
materialsMap.put("materialStatus", "Available");
Barcode barcode = barcodeManager.findByBarcode(dataLog.getBarcode());
if (barcode != null) {
materialsMap.put("material", AMaterialBean.toBean(barcode).toMap());
}
materialList.add(materialsMap);
paramMap.put("dispatchedMaterials", materialList);
String paramStr = JsonUtil.toJsonStr(paramMap);
log.info("调用MES接口 API007: url=" + url + ",body=" + paramStr + "");
Map<String, String> resultMap = new HashMap<>();
MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap);
errMsg = getDErrorMsg(micronResult);
// if (micronResult.isOk()&& micronResult.statusIsSuccess()) {
if (micronResult.isOk()) {
List<Object> resultList = micronResult.getResult("materialStatusList");
for (Object Obj :
resultList) {
MaterialStatus s = JsonUtil.toObj(JsonUtil.toJsonStr(Obj), MaterialStatus.class);
// if (s.getMaterialStatus().toUpperCase().equals("SUCCESS")) {
if (s.isSuccess()) {
resultMap.put(s.getSerialNum(), "true");
return "";
} else if (ObjectUtil.isNotEmpty(s.getDescription())) {
resultMap.put(s.getSerialNum(), s.getDescription());
return s.getDescription();
}
}
} else if (ObjectUtil.isNotEmpty(errMsg)) {
log.info("API007 ,接口通信失败:" + errMsg);
return errMsg;
// throw new ApiException(errMsg);
} else {
log.info("API007 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API007 : "+micronResult.getResponseData()});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API007 : " + micronResult.getResponseData()});
}
} catch (ApiException e) {
log.error(url + "出错", e);
return e.getMessage();
}
return MessageUtils.getText("smfcore.api.fail", new String[]{"API007 "}, MessageUtils.getDefaultLocal(), "{0} Failed to get data");
}
public static String Api008(String serialNum, int qty, int newQty)throws ApiException {
......
......@@ -397,6 +397,17 @@ public class LoadingUtil {
}
private boolean PushToMes(String rfid, InList inList,List<StoragePos> posList) {
for (InListItem item : inList.getInListItems()) {
if (item.getRfid().equals(rfid) && item.getState() == INITEM_STATUS.Cancel && ObjectUtil.isNotEmpty(item.getRi())&&ObjectUtil.isNotEmpty(item.getPosName())) {
StoragePos pos = storagePosManager.getByPosName(item.getPosName());
if(pos!=null&&pos.getBarcode()!=null&&pos.getBarcode().getBarcode().equals(item.getRi())) {
log.info("入库单[" + inList.getName() + "],rfid [" + rfid + "],posName[" + item.getPosName() + "],ri[" + item.getRi() + "],任务取消但是入库完成,也需要发送API002");
posList.add(pos);
}
}
}
Map<String, String> resultMap = MicronApi.API002(rfid, inList.getOperationId(), posList);
List<InListItem> inListItems = new ArrayList<>();
......
......@@ -8,6 +8,7 @@ import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.inList.service.po.InListItem;
import com.neotel.smfcore.core.order.LiteOrderCache;
......@@ -667,6 +668,39 @@ private IStoragePosManager storagePosManager;
}
private void CloseOrder(LiteOrder order) {
try {
//如果有已执行完成,未发送的物料,还需要发送过去
List<LiteOrderItem> liteOrderItemList = order.getOrderItems();
List<DataLog> needSendList = new ArrayList<>();
for (LiteOrderItem orderItem :
liteOrderItemList) {
if (orderItem.getSelectItems() == null) {
continue;
}
for (LiteOrderItem sItem :
orderItem.getSelectItems()) {
if (sItem.getStatus() == OrderItemStatus.notify_fail || sItem.getStatus() == OrderItemStatus.cancel || sItem.getStatus() == OrderItemStatus.executing) {
List<DataLog> dataLogList = dataLogManager.findByQuery(new
Query(Criteria.where("subSourceId").is(sItem.getId())).addCriteria(Criteria.where("status").is(OP_STATUS.FINISHED.name())));
if (dataLogList.size() > 0) {
needSendList.addAll(dataLogList);
}
}
}
}
if (needSendList.size() > 0) {
Map<String, String> resultM = MicronApi.Api007(order.getOperationId(), needSendList.get(0).getLocInfo(), needSendList);
log.info(" abort mode [" + order.getMode() + "] 共" + needSendList.size() + " 已出库完成,调用API007 ,工单已经要关闭,不再更新工单状态");
}
} catch (Exception ex) {
log.error("关闭工单前调用API007出错:" + ex.toString());
}
order.setStatus(LITEORDER_STATUS.CLOSED);
order.setClosed(true);
liteOrderManager.save(order);
......@@ -680,7 +714,7 @@ private IStoragePosManager storagePosManager;
log.info("abort mode=" + order.getMode() + " 清空 key=" + key + " 的cache,更改action=ABORT");
dataCache.updateCache(key, "");
MicronApi.ActionUpdate(order.getOperationId(),MicronApi.ABORT);
MicronApi.ActionUpdate(order.getOperationId(), MicronApi.ABORT);
}
liteOrderCache.clearOrderLock(order);
}
......
......@@ -349,8 +349,6 @@ public class MicronPreTaskController {
dataCache.updateCache(key,"");
return ResultBean.newOkResult("");
}
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
List<LiteOrderItem> liteOrderItemList = order.getOrderItems();
......@@ -358,7 +356,7 @@ public class MicronPreTaskController {
for (LiteOrderItem orderItem :
liteOrderItemList) {
if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
if (orderItem.getStatus() == OrderItemStatus.executing) {
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(orderItem.getId())));
......@@ -366,7 +364,6 @@ public class MicronPreTaskController {
for (DataLog dataLog : dataLogList
) {
if (dataLog.isExecuting()) {
taskService.cancelTask(dataLog.getId());
log.info("abort 终止出库,mode=" + mode + ",取消正在执行的出库任务:barcode=" + dataLog.getBarcode() + ",posName=" + dataLog.getPosName());
}
......@@ -374,18 +371,6 @@ public class MicronPreTaskController {
orderItem.setStatus(OrderItemStatus.cancel);
orderItem = liteOrderItemManager.save(orderItem);
newList.add(orderItem);
// String orderId = orderItem.getOrderId();
// LiteOrder liteOrder = liteOrderManager.get(orderId);
// DataLog dataLog = new DataLog();
// dataLog.setBarcode(orderItem.getRi());
// dataLog.setPartNumber(orderItem.getPn());
// dataLog.setStatus(OP_STATUS.CANCEL.name());
// dataLog.setType(OP.CHECKOUT);
// dataLog.setSourceId(liteOrder.getId());
// dataLog.setSourceName(liteOrder.getOrderNo());
// dataLog.setSubSourceId(orderItem.getId());
// dataLog.setOperationId(liteOrder.getOrderNo());
// taskService.updateFinishedTask(dataLog);
log.info(" abort :barcode=[" + orderItem.getPn() + "] 取消出库任务");
}
}
......@@ -396,18 +381,51 @@ public class MicronPreTaskController {
return ResultBean.newOkResult("");
}
private void CloseOrder(LiteOrder order){
private void CloseOrder(LiteOrder order) {
try {
//如果有已执行完成,未发送的物料,还需要发送过去
List<LiteOrderItem> liteOrderItemList = order.getOrderItems();
for (LiteOrderItem orderItem :
liteOrderItemList) {
if (orderItem.getStatus() == OrderItemStatus.notify_fail || orderItem.getStatus() == OrderItemStatus.cancel || orderItem.getStatus() == OrderItemStatus.executing) {
List<DataLog> dataLogList = dataLogManager.findByQuery(new
Query(Criteria.where("subSourceId").is(orderItem.getId())).addCriteria(Criteria.where("status").is(OP_STATUS.FINISHED.name())));
if (dataLogList.size() > 0) {
DataLog dataLog = dataLogList.get(0);
String msg = MicronApi.Api007SingleReel(order.getOperationId(), dataLog.getLocInfo(), dataLog);
if (ObjectUtil.isEmpty(msg)) {
orderItem.setStatus(OrderItemStatus.notify_success);
} else {
orderItem.setExecutFailReason(msg);
orderItem.setStatus(OrderItemStatus.notify_fail);
orderItem.setExecutFailReason(msg);
}
log.info(" abort mode [" + order.getMode() + "] :barcode=[" + dataLog.getBarcode() + "],posname=[" + dataLog.getPosName() + "] 已出库完成,调用API007 ,更改状态=" + orderItem.getStatus() + ",msg=" + orderItem.getExecutFailReason());
liteOrderItemManager.save(orderItem);
}
}
}
} catch (Exception ex) {
log.error("关闭工单前调用API007出错:" + ex.toString());
}
order.setStatus(LITEORDER_STATUS.CLOSED);
order.setClosed(true);
liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
//清空配置
String key=Constants.CACHE_DISPATCH+order.getMode();
log.info(" mode="+order.getMode()+"工单已关闭,清空 key="+key+" 的cache,更改action=ABORT");
dataCache.updateCache(key,"");
String key = Constants.CACHE_DISPATCH + order.getMode();
log.info(" mode=" + order.getMode() + "工单已关闭,清空 key=" + key + " 的cache,更改action=ABORT");
dataCache.updateCache(key, "");
MicronApi.ActionUpdate(order.getOperationId(),MicronApi.ABORT);
MicronApi.ActionUpdate(order.getOperationId(), MicronApi.ABORT);
liteOrderCache.clearOrderLock(order);
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!