Commit 7efbc373 zshaohui

PCB,MCL,Line Prep出库

1 个父辈 33e5cc0f
...@@ -25,11 +25,16 @@ import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE; ...@@ -25,11 +25,16 @@ import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
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.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.micron1053.api.MicronApi;
import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; 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 org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
...@@ -59,6 +64,9 @@ public class LiteOrderCache { ...@@ -59,6 +64,9 @@ public class LiteOrderCache {
@Autowired @Autowired
private SmfApi smfApi; private SmfApi smfApi;
@Autowired
private IDataLogManager dataLogManager;
/** /**
* 正在执行的liteOrderMap, key 为orderNo,value 为order * 正在执行的liteOrderMap, key 为orderNo,value 为order
*/ */
...@@ -256,10 +264,20 @@ public class LiteOrderCache { ...@@ -256,10 +264,20 @@ public class LiteOrderCache {
//任务是取消的,需要将总待出库数量-1 //任务是取消的,需要将总待出库数量-1
if (task.isCancel()) { if (task.isCancel()) {
order.setTaskReelCount(order.getTaskReelCount() - 1); order.setTaskReelCount(order.getTaskReelCount() - 1);
order.setTotalTaskReelCount(order.getTotalTaskReelCount()-1); order.setTotalTaskReelCount(order.getTotalTaskReelCount() - 1);
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount()); log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount());
checkoutAgain(task,order); List<LiteOrderItem> items = new ArrayList<>();
for (LiteOrderItem orderItem : order.getOrderItems()) {
if (orderItem.getId().equals(task.getSubSourceId())) {
orderItem.setStatus(OrderItemStatus.cancel);
}
items.add(orderItem);
}
order.setOrderItems(items);
liteOrderManager.save(order);
liteOrderMap.put(orderNo, order);
checkoutAgain(task, order);
} }
else if (task.isFinished()) { else if (task.isFinished()) {
order.setFinishedReelCount(order.getFinishedReelCount() + 1); order.setFinishedReelCount(order.getFinishedReelCount() + 1);
...@@ -274,6 +292,15 @@ public class LiteOrderCache { ...@@ -274,6 +292,15 @@ public class LiteOrderCache {
liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1); liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1);
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum()+task.getNum()); liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum()+task.getNum());
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount()+1); liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount()+1);
liteOrderItem.setStatus(task.getStatus());
liteOrderItem.setLocInfo(task.getLocInfo());
liteOrderItem.setStatus(OrderItemStatus.finish);
//通知micron
/*boolean isSuccess = MicronApi.Api007(order.getOrderNo(), task.getId(), Arrays.asList(task));
if (!isSuccess){
liteOrderItem.setNotifySuccess(false);
}*/
liteOrderItem = liteOrderItemManager.save(liteOrderItem); liteOrderItem = liteOrderItemManager.save(liteOrderItem);
// Barcode barcode = barcodeManager.findByBarcode(task.getBarcode()); // Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
// if (barcode != null) { // if (barcode != null) {
...@@ -294,6 +321,35 @@ public class LiteOrderCache { ...@@ -294,6 +321,35 @@ public class LiteOrderCache {
items.add(liteOrderItem); items.add(liteOrderItem);
} }
order.setOrderItems(items); order.setOrderItems(items);
//判断位置信息是否以"-"开头,如果是,则获取相同位置的orderItemId,进行通知
if (StringUtils.isNotBlank(task.getLocInfo()) && task.getLocInfo().startsWith("-")) {
String locInfo = task.getLocInfo();
List<String> itemIdList = new ArrayList<>();
for (LiteOrderItem item : items) {
if (locInfo.contains(item.getLocInfo())) {
itemIdList.add(item.getId());
}
}
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").in(itemIdList)));
if (dataLogList != null && !dataLogList.isEmpty()) {
boolean isSuccess = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
for (LiteOrderItem item : items) {
if (itemIdList.contains(item.getId())) {
if (isSuccess) {
item.setStatus(OrderItemStatus.notify_success);
} else {
item.setStatus(OrderItemStatus.notify_fail);
}
}
liteOrderItemManager.save(item);
}
order.setOrderItems(items);
}
}
if (!order.isClosed()) { if (!order.isClosed()) {
//工单未关闭的话,检查状态,全部都出完进行关闭 //工单未关闭的话,检查状态,全部都出完进行关闭
boolean closed = true; boolean closed = true;
...@@ -737,4 +793,8 @@ public class LiteOrderCache { ...@@ -737,4 +793,8 @@ public class LiteOrderCache {
return count; return count;
} }
public Collection<LiteOrder> getAllLiteOrder() {
return liteOrderMap.values();
}
} }
...@@ -99,6 +99,9 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -99,6 +99,9 @@ public class LiteOrder extends BasePo implements Serializable {
*/ */
private Date sdate=new Date(); private Date sdate=new Date();
private String mode;
public void setClosed(boolean value){ public void setClosed(boolean value){
this.closed=value; this.closed=value;
if(value){ if(value){
......
...@@ -91,6 +91,20 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li ...@@ -91,6 +91,20 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
*/ */
private String mpn = ""; private String mpn = "";
/**
* 工单明细出库状态
*/
private String status;
/**
* 位置信息
*/
private String locInfo = "";
/**
* 类型
*/
private String mode = "";
/** /**
* 自定义的附加字段,key=字段名,value=值 * 自定义的附加字段,key=字段名,value=值
......
...@@ -243,6 +243,9 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog> ...@@ -243,6 +243,9 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
*/ */
private Boolean emptyOperate; private Boolean emptyOperate;
private String operationId;
public String getBarcode() { public String getBarcode() {
if(barcode == null){ if(barcode == null){
return ""; return "";
......
package com.neotel.smfcore.custom.micron1053.api; package com.neotel.smfcore.custom.micron1053.api;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.neotel.smfcore.common.exception.ApiException; import com.neotel.smfcore.common.exception.ApiException;
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.core.api.listener.BaseSmfApiListener; import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
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.po.DataLog;
import com.neotel.smfcore.custom.micron1053.api.bean.DispatchId;
import com.neotel.smfcore.custom.micron1053.api.bean.Material;
import com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus;
import com.neotel.smfcore.custom.micron1053.bean.MaterialInfo; import com.neotel.smfcore.custom.micron1053.bean.MaterialInfo;
import com.neotel.smfcore.custom.micron1053.bean.MicronResult; import com.neotel.smfcore.custom.micron1053.bean.MicronResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -38,6 +44,13 @@ public class MicronApi extends BaseSmfApiListener { ...@@ -38,6 +44,13 @@ public class MicronApi extends BaseSmfApiListener {
MicronApi.dataCache = cache; MicronApi.dataCache = cache;
} }
public static IBarcodeManager barcodeManager;
@Autowired
public void setBarcodeManager(IBarcodeManager manager){
MicronApi.barcodeManager = manager;
}
@Override @Override
public boolean isForThisApi(String apiName) { public boolean isForThisApi(String apiName) {
...@@ -127,32 +140,36 @@ public class MicronApi extends BaseSmfApiListener { ...@@ -127,32 +140,36 @@ public class MicronApi extends BaseSmfApiListener {
} }
public static boolean Api004(String operationId){ public static List<DispatchId> Api004(String operationId) {
String url = config.getUrl(config.api_name_004); String url = config.getUrl(config.api_name_004);
url = MessageFormat.format(url,operationId); url = MessageFormat.format(url, operationId);
try { try {
log.info("调用MES接口 API004: url=[" + url + "]"); log.info("调用MES接口 API004: url=[" + url + "]");
MicronResult result = HttpHelper.getMicronJson(url); MicronResult result = HttpHelper.getMicronJson(url);
}catch (Exception e){ return result.getResult("dispatchIds");
} catch (Exception e) {
log.error(url + "出错", e); log.error(url + "出错", e);
} }
return false; return null;
} }
public static boolean Api005(String linePrepOrderId) { public static List<Material> Api005(String operationId,String linePrepOrderId) {
String url = config.getUrl(config.api_name_005); String url = config.getUrl(config.api_name_005);
url = MessageFormat.format(url,linePrepOrderId); url = MessageFormat.format(url,operationId,linePrepOrderId);
List<Material> materialList = new ArrayList<>();
try { try {
log.info("调用MES接口 API005: url=[" + url + "]"); log.info("调用MES接口 API005: url=[" + url + "]");
MicronResult result = HttpHelper.getMicronJson(url); MicronResult result = HttpHelper.getMicronJson(url);
materialList = result.getResult("materials");
} catch (Exception e) { } catch (Exception e) {
log.error(url + "出错", e); log.error(url + "出错", e);
} }
return false; return materialList;
} }
public static boolean Api006(String operationId,List<String> pretasks) { public static List<Material> Api006(String operationId, List<String> pretasks) {
/** /**
* { * {
* "operationId": <operationId> * "operationId": <operationId>
...@@ -164,24 +181,30 @@ public class MicronApi extends BaseSmfApiListener { ...@@ -164,24 +181,30 @@ public class MicronApi extends BaseSmfApiListener {
* ] * ]
* } * }
*/ */
List<Material> materialList = new ArrayList<>();
String url = config.getUrl(config.api_name_006); String url = config.getUrl(config.api_name_006);
try { try {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
paramMap.put("operationId",operationId); paramMap.put("operationId", operationId);
paramMap.put("pretasks",pretasks); paramMap.put("pretasks", pretasks);
String paramStr = JsonUtil.toJsonStr(paramMap); String paramStr = JsonUtil.toJsonStr(paramMap);
log.info("调用MES接口 API006: url=[" + url + "],body=[" + paramStr + "]"); log.info("调用MES接口 API006: url=[" + url + "],body=[" + paramStr + "]");
MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap); MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap);
}catch (Exception e){ String responseData = micronResult.getResponseData();
JSONObject jsonObject = JSONObject.parseObject(responseData);
String materials = jsonObject.getString("materials");
materialList = JSONObject.parseArray(materials,Material.class);
} catch (Exception e) {
log.error(url + "出错", e); log.error(url + "出错", e);
} }
return false; return materialList;
} }
public static boolean Api007(String operationId, String jobId, List<StoragePos> storagePosList) { public static boolean Api007(String operationId, String jobId, List<DataLog> dataLogList) {
String url = config.getUrl(config.api_name_007); String url = config.getUrl(config.api_name_007);
try { try {
...@@ -190,12 +213,16 @@ public class MicronApi extends BaseSmfApiListener { ...@@ -190,12 +213,16 @@ public class MicronApi extends BaseSmfApiListener {
paramMap.put("operationId", operationId); paramMap.put("operationId", operationId);
List<Map<String, Object>> materialList = new ArrayList<>(); List<Map<String, Object>> materialList = new ArrayList<>();
for (StoragePos storagePos : storagePosList) { for (DataLog dataLog : dataLogList) {
Map<String, Object> materialsMap = new HashMap<>(); Map<String, Object> materialsMap = new HashMap<>();
materialsMap.put("location", storagePos.getPosName()); materialsMap.put("location", dataLog.getPosName());
materialsMap.put("towerId", storagePos.getStorageId()); materialsMap.put("towerId", dataLog.getStorageId());
materialsMap.put("materialStatus", "Available"); materialsMap.put("materialStatus", "Available");
materialsMap.put("material", AMaterialBean.toBean(storagePos.getBarcode()).toMap());
Barcode barcode = barcodeManager.findByBarcode(dataLog.getBarcode());
if (barcode != null) {
materialsMap.put("material", AMaterialBean.toBean(barcode).toMap());
}
materialList.add(materialsMap); materialList.add(materialsMap);
} }
...@@ -205,7 +232,7 @@ public class MicronApi extends BaseSmfApiListener { ...@@ -205,7 +232,7 @@ public class MicronApi extends BaseSmfApiListener {
log.info("调用MES接口 API007: url=[" + url + "],body=[" + paramStr + "]"); log.info("调用MES接口 API007: url=[" + url + "],body=[" + paramStr + "]");
MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap); MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap);
return true; return micronResult.getStatus().equals("Success");
} catch (ApiException e) { } catch (ApiException e) {
log.error(url + "出错", e); log.error(url + "出错", e);
} }
...@@ -261,31 +288,28 @@ public class MicronApi extends BaseSmfApiListener { ...@@ -261,31 +288,28 @@ public class MicronApi extends BaseSmfApiListener {
} }
public static boolean Api010(String operationId, List<Barcode> barcodeList) { public static List<TrackStatus> Api010(String operationId, List<Material> materialList) {
List<TrackStatus> statusList = new ArrayList<>();
String url = config.getUrl(config.api_name_010); String url = config.getUrl(config.api_name_010);
try { try {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
paramMap.put("operationId", operationId); paramMap.put("operationId", operationId);
List<Map<String, Object>> materialList = new ArrayList<>();
for (Barcode barcode : barcodeList) {
Map<String, Object> materialMap = new HashMap<>();
materialMap.put("serialNum", barcode.getBarcode());
materialMap.put("partNumber", barcode.getPartNumber());
materialList.add(materialMap);
}
paramMap.put("materials", materialList); paramMap.put("materials", materialList);
String paramStr = JsonUtil.toJsonStr(paramMap); String paramStr = JsonUtil.toJsonStr(paramMap);
log.info("调用MES接口 API010: url=[" + url + "],body=[" + paramStr + "]"); log.info("调用MES接口 API010: url=[" + url + "],body=[" + paramStr + "]");
MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap); MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap);
return true; JSONObject jsonObject = JSONObject.parseObject(micronResult.getResponseData());
} catch (ApiException e) { String trackStatus = jsonObject.getString("trackStatus");
statusList = JSONObject.parseArray(trackStatus,TrackStatus.class);
//statusList = micronResult.getResult("trackStatus");
} catch (Exception e) {
log.error(url + "出错", e); log.error(url + "出错", e);
} }
return false; return statusList;
} }
...@@ -555,9 +579,4 @@ public class MicronApi extends BaseSmfApiListener { ...@@ -555,9 +579,4 @@ public class MicronApi extends BaseSmfApiListener {
return null; return null;
} }
} }
...@@ -30,7 +30,7 @@ public class MicronConfig { ...@@ -30,7 +30,7 @@ public class MicronConfig {
* 根据API011返回的 operationId,从MES获取出库的Pretask/linePrepOrder * 根据API011返回的 operationId,从MES获取出库的Pretask/linePrepOrder
*Get ready Pretask/linePrepOrder list from Auto Kitting System *Get ready Pretask/linePrepOrder list from Auto Kitting System
*/ */
public String api_name_004="operation/dispatchIds?operationId={operationId}"; public String api_name_004="operation/dispatchIds?operationId={0}";
/** /**
* 出库勾选一个ID(API004返回的ID)后,从MES获取出库的RI * 出库勾选一个ID(API004返回的ID)后,从MES获取出库的RI
*Get dispatch Material list from Autokitting system to fullfil the LinePrepOrder *Get dispatch Material list from Autokitting system to fullfil the LinePrepOrder
...@@ -64,7 +64,7 @@ public class MicronConfig { ...@@ -64,7 +64,7 @@ public class MicronConfig {
/** /**
* 获取OperationID ,Get operationId for Loading or Dispatching of material * 获取OperationID ,Get operationId for Loading or Dispatching of material
*/ */
public String api_name_011="operation?mode={Mode}&username={Username}&source={Source}"; public String api_name_011="operation?mode={0}&username={1}&source={2}";
/** /**
* Validate if MBR (From Warehouse ) is valid * Validate if MBR (From Warehouse ) is valid
......
package com.neotel.smfcore.custom.micron1053.api.bean;
import lombok.Data;
import java.util.List;
@Data
public class DispatchId {
private String lineId;
private List<Id> ids;
@Data
static class Id {
private String Id;
private List<Object> Attribute;
}
}
package com.neotel.smfcore.custom.micron1053.api.bean;
import lombok.Data;
@Data
public class Material {
private String serialNum;
private String partNumber;
}
package com.neotel.smfcore.custom.micron1053.api.bean;
import lombok.Data;
@Data
public class TrackStatus {
private String serialNum;
private String partNumber;
private String materialStatus;
private String Success;
private String description;
}
package com.neotel.smfcore.custom.micron1053.task;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
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.ILiteOrderItemManager;
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.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.micron1053.api.MicronApi;
import com.neotel.smfcore.custom.micron1053.api.MicronConfig;
import com.neotel.smfcore.custom.micron1053.api.bean.DispatchId;
import com.neotel.smfcore.custom.micron1053.api.bean.Material;
import com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus;
import com.neotel.smfcore.custom.micron1053.task.bean.PreTask;
import com.neotel.smfcore.custom.micron1053.task.bean.dto.TaskDto;
import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@RestController
@Api(tags = "1053:PreTask")
@RequestMapping("/rest/micron/PreTask")
public class MicronPreTaskController {
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private TaskService taskService;
@Autowired
private DataCache dataCache;
@Autowired
private IDataLogManager dataLogManager;
@Autowired
private MicronConfig micronConfig;
/**
* 1.判断是否生成同类型的工单信息,如果没执行成功,则返回列表
* 2.先获取operationId
* 3.从接口获取要出库的taskId,人员去点击出库
* 4.从接口中获取具体的物料信息,生成工单
* 5.进行工单出库
* 6.调用接口验证是否返回成功,如果返回成功,进行出库操作
* 7.出库完成,生成任务,更改任务状态
*/
@ApiOperation("出库页面展示")
@AnonymousAccess
@RequestMapping("/getTaskId")
public ResultBean task(String mode) {
//判断是否生成,未关闭的工单
TaskDto dto = new TaskDto();
List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
if (itemList != null && !itemList.isEmpty()) {
dto.setType(1);
dto.setItemList(itemList);
} else {
//获取operatorationId
String source = micronConfig.api_011_Source;
String operationId = MicronApi.Api011(mode, SecurityUtils.getLoginUsername(), source);
if (StringUtils.isNotBlank(operationId)) {
//获取Pre Task ID
List<DispatchId> dispatchIdList = MicronApi.Api004(operationId);
if (dispatchIdList != null && !dispatchIdList.isEmpty()) {
dto.setOperationId(operationId);
dto.setType(2);
dto.setDispatchIdList(dispatchIdList);
}
}
}
return ResultBean.newOkResult(dto);
}
@ApiOperation("根据勾选的taskId,创建工单任务")
@AnonymousAccess
@RequestMapping("/createOrder")
public ResultBean createOrder(@RequestBody PreTask preTask) {
String mode = preTask.getMode();
String operationId = preTask.getOperationId();
List<String> pretasks = preTask.getPretasks();
List<Material> materialList = new ArrayList<>();
if ("Line Prep Dispatch".equals(mode)){
materialList = MicronApi.Api005(operationId,pretasks.get(0));
} else {
materialList = MicronApi.Api006(operationId, pretasks);
}
if (materialList != null && !materialList.isEmpty()) {
//生成工单进行出库
List<LiteOrderItem> itemList = new ArrayList<>();
for (Material material : materialList) {
LiteOrderItem item = new LiteOrderItem();
item.setPn(material.getPartNumber());
item.setRi(material.getSerialNum());
item.setNeedReelCount(1);
item.setMode(mode);
itemList.add(item);
}
LiteOrder liteOrder = new LiteOrder();
liteOrder.setOrderNo(operationId);
liteOrder.setMode(mode);
liteOrder.setOrderItems(itemList);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
//开始查询是否可以出库
checkOut(liteOrder, operationId, materialList);
}
return ResultBean.newOkResult("");
}
@ApiOperation("根据mode获取具体的出库信息")
@RequestMapping("/itemList")
@AnonymousAccess
public ResultBean itemListByMode(String mode){
List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
return ResultBean.newOkResult(itemList);
}
@ApiOperation("重试")
@RequestMapping("/retry")
@AnonymousAccess
public ResultBean retry(String orderItemId) {
//判断有没有生成任务
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId);
if (orderItem != null) {
String id = orderItem.getId();
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
if (dataLogList != null && !dataLogList.isEmpty()) {
LiteOrder order = liteOrderManager.get(orderItem.getId());
boolean isSuccess = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
for (LiteOrderItem item : order.getOrderItems()) {
if (item.getId().equals(orderItem.getId())) {
if (isSuccess) {
item.setStatus(OrderItemStatus.notify_success);
} else {
item.setStatus(OrderItemStatus.notify_fail);
}
liteOrderItemManager.save(item);
}
}
liteOrderCache.addOrderToMap(order);
}
}
return ResultBean.newOkResult("");
}
@ApiOperation("放弃出库")
@RequestMapping("/abort")
@AnonymousAccess
public ResultBean abort(String orderItemId) {
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId);
if (orderItem != null) {
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);
}
return ResultBean.newOkResult("");
}
public synchronized void checkOut(LiteOrder order, String operationId, List<Material> materialList) {
order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0);
order.setFinishedReelCount(0);
int taskReelCount = 0;
//提取barcode
List<String> barcodeList = materialList.stream().map(item -> item.getSerialNum()).collect(Collectors.toList());
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(barcodeList)));
if (storagePosList != null && !storagePosList.isEmpty()) {
materialList = storagePosList.stream().map(item -> {
Material material = new Material();
material.setSerialNum(item.getBarcode().getBarcode());
material.setPartNumber(item.getBarcode().getPartNumber());
return material;
}).collect(Collectors.toList());
List<TrackStatus> trackStatusList = MicronApi.Api010(operationId, materialList);
if (trackStatusList != null && !trackStatusList.isEmpty()) {
for (LiteOrderItem orderItem : order.getOrderItems()) {
String ri = orderItem.getRi();
TrackStatus trackStatus = trackStatusList.stream().filter(item -> ri.equals(item.getSerialNum())).findAny().orElse(null);
if (trackStatus != null) {
StoragePos pos = storagePosManager.getByBarcode(ri);
/*if (pos == null) {
orderItem.setStatus(OrderItemStatus.shortage);
continue;
}*/
//生成任务
DataLog dataLog = new DataLog(dataCache.getStorageById(pos.getStorageId()), pos.getBarcode(), pos);
dataLog.setType(OP.CHECKOUT);
dataLog.setSourceId(order.getId());
dataLog.setSourceName(order.getOrderNo());
dataLog.setSubSourceId(orderItem.getId());
dataLog.setStatus(OP_STATUS.WAIT.name());
dataLog.setOperationId(operationId);
taskService.addTaskToExecute(dataLog);
taskReelCount ++;
//设置状态.正在出库
orderItem.setStatus(OrderItemStatus.executing);
}
liteOrderItemManager.save(orderItem);
}
}
}
order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
if (taskReelCount <= 0) {
if (order.isOutTails()){
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
}
//liteOrderCache.finishedOrderTasks(order);
}
liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
}
public List<LiteOrderItem> getLiteOrderItemList(String mode) {
List<LiteOrderItem> itemList = new ArrayList<>();
Collection<LiteOrder> liteOrder = liteOrderCache.getAllLiteOrder();
for (LiteOrder order : liteOrder) {
if (mode.equals(order.getMode()) && !order.isClosed()) {
itemList = order.getOrderItems();
break;
}
}
return itemList;
}
}
package com.neotel.smfcore.custom.micron1053.task.bean;
import lombok.Data;
import java.util.List;
@Data
public class PreTask {
private String mode;
private String operationId;
private List<String> pretasks;
}
package com.neotel.smfcore.custom.micron1053.task.bean.dto;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.custom.micron1053.api.bean.DispatchId;
import lombok.Data;
import java.util.List;
@Data
public class TaskDto {
private int type;
private String operationId;
private List<LiteOrderItem> itemList;
private List<DispatchId> dispatchIdList;
}
package com.neotel.smfcore.custom.micron1053.task.enums;
public class OrderItemStatus {
//缺料
public static final String shortage = "1";
//正在执行
public static final String executing = "2";
//通知成功
public static final String notify_success = "3";
//通知失败
public static final String notify_fail = "4";
public static final String finish = "5";
public static final String cancel = "6";
}
...@@ -2,14 +2,14 @@ micron: ...@@ -2,14 +2,14 @@ micron:
apiAddr: https://testapigtwy.micron.com/t/app.mfg/mmsil/v1/DEVL/SINGAPORE/ apiAddr: https://testapigtwy.micron.com/t/app.mfg/mmsil/v1/DEVL/SINGAPORE/
api_name_001: material/validation/label api_name_001: material/validation/label
api_name_002: material/transfer-in api_name_002: material/transfer-in
api_name_004: operation/dispatchIds?operationId={operationId} api_name_004: operation/dispatchIds?operationId={0}
api_name_005: material/lineprep/{LinePrepOrderId} api_name_005: material/lineprep/{LinePrepOrderId}
api_name_006: material/pretasks api_name_006: material/pretasks
api_name_007: material/transfer-out api_name_007: material/transfer-out
api_name_008: material/xray/{serialNum}/{qty} api_name_008: material/xray/{serialNum}/{qty}
api_name_009: material/status api_name_009: material/status
api_name_010: material/track-out api_name_010: material/track-out
api_name_011: operation?mode={Mode}&username={Username}&source={Source} api_name_011: operation?mode={0}&username={1}&source={2}
api_name_101: operation/validation/mbr?id={Id}&operationId={operationId}&skipSap={SkipSap} api_name_101: operation/validation/mbr?id={Id}&operationId={operationId}&skipSap={SkipSap}
api_name_102: operation/validation/req?id={Id}&operationId={operationId} api_name_102: operation/validation/req?id={Id}&operationId={operationId}
api_name_103: operation/validation/gr?purchaseOrder={PurchaseOrder}&packagingSlip={PackagingSlip}&operationId={operationId}&skipSap={SkipSap} api_name_103: operation/validation/gr?purchaseOrder={PurchaseOrder}&packagingSlip={PackagingSlip}&operationId={operationId}&skipSap={SkipSap}
...@@ -27,7 +27,7 @@ spring: ...@@ -27,7 +27,7 @@ spring:
auto-index-creation: true # 默认为false,即不会自动创建索引 auto-index-creation: true # 默认为false,即不会自动创建索引
host: localhost # 主机地址 host: localhost # 主机地址
port: 27017 # 端口 port: 27017 # 端口
database: smf # 数据库 database: 5f # 数据库
#备份数据库配置 #备份数据库配置
backup-mongodb: backup-mongodb:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!