Commit d3ed66f7 LN

重试需要从API010预扣开始重试。所有接口失败增加提示

1 个父辈 7f15d5b8
......@@ -92,11 +92,12 @@ public class LiteOrderCache {
}
}
}
public void addOrderToMap(LiteOrder order ){
if(order==null|| order.getOrderNo()==null){
public void addOrderToMap(LiteOrder order) {
if (order == null || order.getOrderNo() == null) {
return;
}
if(liteOrderMap.containsKey(order.getOrderNo())){
if (liteOrderMap.containsKey(order.getOrderNo())) {
liteOrderMap.remove(order.getOrderNo());
}
liteOrderMap.put(order.getOrderNo(), order);
......@@ -116,19 +117,19 @@ public class LiteOrderCache {
private boolean isProcessTimer = false;
public void runTimer(){
if(!isProcessTimer){
public void runTimer() {
if (!isProcessTimer) {
isProcessTimer = true;
try {
boolean startJob = dataCache.getCache(Constants.CACHE_StartJob);
if(startJob){
if (startJob) {
//定时执行工单任务
executeOrderTask();
}
}catch (Exception e){
log.error("需求单定时器执行出错:",e);
}finally {
} catch (Exception e) {
log.error("需求单定时器执行出错:", e);
} finally {
isProcessTimer = false;
}
}
......@@ -145,22 +146,22 @@ public class LiteOrderCache {
}
}
public void executeOrderTask(){
public void executeOrderTask() {
for (LiteOrder order : liteOrderMap.values()) {
if(order.isClosed()){
if (order.isClosed()) {
continue;
}
if(order.isNew()||order.isTaskFinished()){
//判断是否到达时间
Date curr=new Date();
if(order.getSDate().before(curr)){
if (order.isNew() || order.isTaskFinished()) {
//判断是否到达时间
Date curr = new Date();
if (order.getSDate().before(curr)) {
//开始自动出库
String result= checkOutLiteOrder(order.getOrderNo(),false);
if(!ObjectUtil.isEmpty(result)){
String msg= MessageUtils.getText(result,MessageUtils.getDefaultLocal(),"");
log.info("自动执行工单 【"+order.getOrderNo()+"】 失败:"+msg);
}else{
log.info("自动执行工单 【"+order.getOrderNo()+"】 成功");
String result = checkOutLiteOrder(order.getOrderNo(), false);
if (!ObjectUtil.isEmpty(result)) {
String msg = MessageUtils.getText(result, MessageUtils.getDefaultLocal(), "");
log.info("自动执行工单 【" + order.getOrderNo() + "】 失败:" + msg);
} else {
log.info("自动执行工单 【" + order.getOrderNo() + "】 成功");
}
break;
......@@ -175,18 +176,18 @@ public class LiteOrderCache {
ORDER_COLOR nextColor = getNextColor();
if (nextColor == null) {
log.info("执行工单[" + liteOrder.getOrderNo() + "] 时,已达最大可执行工单数");
throw new ValidateException("order.out.maxOrder","已达最大可执行工单数");
throw new ValidateException("order.out.maxOrder", "已达最大可执行工单数");
}
//其他出库模式一次性全部生成任务
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
if(lockPosList==null){
throw new ValidateException("smfcore.notFindPos","未找到锁定库位");
if (lockPosList == null) {
throw new ValidateException("smfcore.notFindPos", "未找到锁定库位");
}
int taskReelCount = 0;
for (StoragePos lockPos : lockPosList) {
Storage storage = dataCache.getStorageById(lockPos.getStorageId());
Barcode barcode = lockPos.getBarcode();
DataLog task = new DataLog(storage,barcode,lockPos);
DataLog task = new DataLog(storage, barcode, lockPos);
task.setSourceId(liteOrder.getId());
task.setSourceName(liteOrder.getOrderNo());
......@@ -203,7 +204,7 @@ public class LiteOrderCache {
}
liteOrder.setTaskReelCount(taskReelCount);
liteOrder.setTotalTaskReelCount(liteOrder.getTotalTaskReelCount()+taskReelCount);
liteOrder.setTotalTaskReelCount(liteOrder.getTotalTaskReelCount() + taskReelCount);
liteOrder.setStatus(LITEORDER_STATUS.TAILS);
log.info("工单[" + liteOrder.getOrderNo() + "]任务分配结束,任务数[" + taskReelCount + "]");
smfApi.onOrderStatusChange(liteOrder);
......@@ -211,28 +212,28 @@ public class LiteOrderCache {
if (taskReelCount <= 0) {
//没有任务,直接结束
finishedOrderTasks(liteOrder);
}else{
} else {
//有需要出库的 ,更新状态
liteOrder.setStatus(LITEORDER_STATUS.TAILS);
}
liteOrder = liteOrderManager.save(liteOrder);
liteOrderMap.put(liteOrder.getOrderNo(),liteOrder);
liteOrderMap.put(liteOrder.getOrderNo(), liteOrder);
if (taskReelCount <= 0) {
return ResultBean.newErrorResult(-1,"smfcore.notask","No task in this order");
return ResultBean.newErrorResult(-1, "smfcore.notask", "No task in this order");
}
return ResultBean.newOkResult("smfcore.taskCount", "total task is :{0}",new String[]{ taskReelCount+""},"");
return ResultBean.newOkResult("smfcore.taskCount", "total task is :{0}", new String[]{taskReelCount + ""}, "");
}
/**
* 结束当前的任务
*/
public void finishedOrderTasks(LiteOrder liteOrder){
if(liteOrder.isOutOne()){
public void finishedOrderTasks(LiteOrder liteOrder) {
if (liteOrder.isOutOne()) {
// setStatus(LITEORDER_STATUS.ONE_FINISHED);
liteOrder.setClosed(true);
}else if(liteOrder.isOutBom()){
} else if (liteOrder.isOutBom()) {
liteOrder.setStatus(LITEORDER_STATUS.BOM_FINISHED);
}else if(liteOrder.isOutTails()){
} else if (liteOrder.isOutTails()) {
// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
liteOrder.setClosed(true);
}
......@@ -241,12 +242,12 @@ public class LiteOrderCache {
smfApi.onOrderStatusChange(liteOrder);
}
public LiteOrder getLiteOrder(String orderNo){
public LiteOrder getLiteOrder(String orderNo) {
LiteOrder order = liteOrderMap.get(orderNo);
if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo);
if(order != null){
if (order != null) {
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId());
order.setOrderItems(items);
}
......@@ -283,13 +284,12 @@ public class LiteOrderCache {
liteOrderMap.put(orderNo, order);
//如果是preTask,不需要重新出库
if(ObjectUtil.isNotEmpty(order.getMode())) {
if (ObjectUtil.isNotEmpty(order.getMode())) {
checkoutAgain(task, order);
}
}
else if (task.isFinished()) {
} else if (task.isFinished()) {
order.setFinishedReelCount(order.getFinishedReelCount() + 1);
order.setTotalFinishedReelCount(order.getTotalFinishedReelCount()+1);
order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1);
String orderItemId = task.getSubSourceId();
List<LiteOrderItem> items = new ArrayList<>();
for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
......@@ -298,8 +298,8 @@ public class LiteOrderCache {
//更新对应条目的已出库数量和出库盘数
liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum());
liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1);
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum()+task.getNum());
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount()+1);
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum() + task.getNum());
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount() + 1);
liteOrderItem.setStatus(task.getStatus());
liteOrderItem.setLocInfo(task.getLocInfo());
liteOrderItem.setStatus(OrderItemStatus.finish);
......@@ -332,37 +332,36 @@ public class LiteOrderCache {
//判断位置信息是否以"-"开头,如果是,则获取相同位置的orderItemId,进行通知
// if (StringUtils.isNotBlank(task.getLocInfo()) && task.getLocInfo().startsWith("-")) {
if ( ObjectUtil.isNotEmpty(order.getMode())&& StringUtils.isNotBlank(task.getLocInfo()) ) {
if (ObjectUtil.isNotEmpty(order.getMode()) && StringUtils.isNotBlank(task.getLocInfo())) {
String locInfo = task.getLocInfo();
List<String> itemIdList = new ArrayList<>();
itemIdList.add(task.getSubSourceId());
String locInfo = task.getLocInfo();
List<String> itemIdList = new ArrayList<>();
itemIdList.add(task.getSubSourceId());
// 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()) {
String msg = MicronApi.Api007(order.getOrderNo(), task.getLocInfo(), dataLogList);
for (LiteOrderItem item : items) {
if (itemIdList.contains(item.getId())) {
if (ObjectUtil.isEmpty(msg)) {
item.setStatus(OrderItemStatus.notify_success);
} else {
item.setExecutFailReason(msg);
item.setStatus(OrderItemStatus.notify_fail);
item.setExecutFailReason(msg);
}
//先改为单盘上传
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").in(itemIdList)));
if (dataLogList != null && !dataLogList.isEmpty()) {
String msg = MicronApi.Api007(order.getOrderNo(), task.getLocInfo(), dataLogList);
for (LiteOrderItem item : items) {
if (itemIdList.contains(item.getId())) {
if (ObjectUtil.isEmpty(msg)) {
item.setStatus(OrderItemStatus.notify_success);
} else {
item.setExecutFailReason(msg);
item.setStatus(OrderItemStatus.notify_fail);
item.setExecutFailReason(msg);
}
liteOrderItemManager.save(item);
}
order.setOrderItems(items);
liteOrderItemManager.save(item);
}
order.setOrderItems(items);
}
}
if (!order.isClosed()) {
......@@ -382,19 +381,19 @@ public class LiteOrderCache {
}
}
//判断是否发送成功
if(ObjectUtil.isNotEmpty(order.getMode())){
if(liteOrderItem.getStatus()==OrderItemStatus.notify_fail){
closed=false;
if (ObjectUtil.isNotEmpty(order.getMode())) {
if (liteOrderItem.getStatus() == OrderItemStatus.notify_fail) {
closed = false;
break;
}
}
}
if(closed){
if (closed) {
order.setClosed(closed);
if(ObjectUtil.isNotEmpty(order.getMode())){
String key=Constants.CACHE_DISPATCH+order.getMode();
log.info(" mode="+order.getMode()+"的出库已结束,清空 key="+key+" 的cache");
dataCache.updateCache(key,"");
if (ObjectUtil.isNotEmpty(order.getMode())) {
String key = Constants.CACHE_DISPATCH + order.getMode();
log.info(" mode=" + order.getMode() + "的出库已结束,清空 key=" + key + " 的cache");
dataCache.updateCache(key, "");
}
}
}
......@@ -415,10 +414,10 @@ public class LiteOrderCache {
}
}
private LiteOrder checkoutAgain(DataLog task,LiteOrder order) {
try{
private LiteOrder checkoutAgain(DataLog task, LiteOrder order) {
try {
//出库任务,如果是工单任务,如果此料仓离线,需要补发一盘
if(ObjectUtil.isNotEmpty(task.getSourceId())) {
if (ObjectUtil.isNotEmpty(task.getSourceId())) {
StatusBean bean = DevicesStatusUtil.getStatusBean(task.getCid());
if (bean != null && (!bean.timeOut())) {
//如果当前料仓在线,不处理
......@@ -431,7 +430,7 @@ public class LiteOrderCache {
return order;
}
if ( order.isClosed() || order.isTaskFinished()) {
if (order.isClosed() || order.isTaskFinished()) {
return order;
}
for (LiteOrderItem item :
......@@ -469,28 +468,28 @@ public class LiteOrderCache {
}
log.info("工单[" + orderNo + "]任务["+task.getPosName()+"]取消,补发结束,任务数[" + order.getTaskReelCount() + "]");
log.info("工单[" + orderNo + "]任务[" + task.getPosName() + "]取消,补发结束,任务数[" + order.getTaskReelCount() + "]");
liteOrderManager.save(order);
liteOrderMap.put(order.getOrderNo(), order);
}catch (Exception ex){
log.error("任务["+task.getPosName()+"]["+task.getPartNumber()+"]["+task.getBarcode()+"]取消时,对应工单["+task.getSourceId()+"]["+task.getSourceName()+"]补发任务出错:"+ex.getMessage());
} catch (Exception ex) {
log.error("任务[" + task.getPosName() + "][" + task.getPartNumber() + "][" + task.getBarcode() + "]取消时,对应工单[" + task.getSourceId() + "][" + task.getSourceName() + "]补发任务出错:" + ex.getMessage());
}
return order;
}
public ORDER_COLOR getNextColor() {
//设置颜色
Set<String> currentColors = new HashSet<>();
// for (DataLog dataLog :taskService. getQueueTasks()) {
// currentColors.add(dataLog.getLightColor());
// }
for (DataLog dataLog :taskService.getAllTasks()){
if(dataLog.isFinished()||dataLog.isCancel()||dataLog.isEnd()){
for (DataLog dataLog : taskService.getAllTasks()) {
if (dataLog.isFinished() || dataLog.isCancel() || dataLog.isEnd()) {
continue;
}
if(dataLog.isCheckOutTask() && ObjectUtil.isNotEmpty(dataLog.getSourceId())&&ObjectUtil.isNotEmpty(dataLog.getLightColor())) {
if (dataLog.isCheckOutTask() && ObjectUtil.isNotEmpty(dataLog.getSourceId()) && ObjectUtil.isNotEmpty(dataLog.getLightColor())) {
currentColors.add(dataLog.getLightColor());
}
}
......@@ -501,14 +500,15 @@ public class LiteOrderCache {
/**
* 执行工单出库,批量料仓默认出库到料串上
*/
public String checkOutLiteOrder(String orderNo, boolean outBom){
public String checkOutLiteOrder(String orderNo, boolean outBom) {
boolean singleOut = false;
return checkOutLiteOrder(orderNo,outBom,singleOut);
return checkOutLiteOrder(orderNo, outBom, singleOut);
}
/**
* 执行工单出库
*/
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut) {
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom, boolean singleOut) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
......@@ -519,17 +519,16 @@ public class LiteOrderCache {
return "smfcore.order.out.notFound";
}
if ( !cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
if (!cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
log.info("工单[" + orderNo + "]正在执行");
return "smfcore.order.out.executing";
}
if(cacheOrder.isClosed()) {
if (cacheOrder.isClosed()) {
log.info("工单[" + orderNo + "]已关闭,无法出库");
return "smfcore.order.hasClose";
}
ORDER_COLOR nextColor = getNextColor();
if (nextColor == null) {
log.info("执行工单[" + orderNo + "] outBom=" + outBom + "时,已达最大可执行工单数");
......@@ -538,8 +537,8 @@ public class LiteOrderCache {
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
List<StoragePos> lockPosList = storagePosManager.findLockPos(cacheOrder.getOrderNo());
if(lockPosList!=null&& lockPosList.size()>0){
return checkOutOrder(cacheOrder).getMsgKey();
if (lockPosList != null && lockPosList.size() > 0) {
return checkOutOrder(cacheOrder).getMsgKey();
}
log.info("开始执行工单[" + orderNo + "] outBom=" + outBom);
......@@ -580,27 +579,27 @@ public class LiteOrderCache {
int assignNum = 0;
int assignReelCount = 0;
while (assignNum < remainNum || assignReelCount < remainReelCount) {
Collection<String> excludePosIds = excludeOutPosIds();
Collection<String> excludePosIds = excludeOutPosIds();
String partNumber = orderItem.getPn();
String reelId = orderItem.getRi();
String mpn = orderItem.getMpn();
StoragePos pos = null;
if(!Strings.isNullOrEmpty(reelId)){
if (!Strings.isNullOrEmpty(reelId)) {
//RI
pos=storagePosManager.getByBarcode(reelId);
if(pos != null){
if(excludePosIds.contains(pos.getId())) {
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 {
log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘[" + reelId + "]");
}
}else if (Strings.isNullOrEmpty(reelId) && !Strings.isNullOrEmpty(partNumber)){
} 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());
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) {
// log.error("未找到可以出库的物料[" + partNumber + "]");
......@@ -610,7 +609,7 @@ public class LiteOrderCache {
assignReelCount = assignReelCount + 1;
taskReelCount = taskReelCount + 1;
log.info("工单[" + orderNo + "],任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + partNumber + "] num:" + pos.getBarcode().getAmount());
DataLog task = newTask(pos) ;
DataLog task = newTask(pos);
task.setSourceId(cacheOrder.getId());
task.setSourceName(cacheOrder.getOrderNo());
......@@ -624,7 +623,7 @@ public class LiteOrderCache {
taskService.addTaskToExecute(task);
}
//如果是RI出库,只有一盘,出完就结束
if(!Strings.isNullOrEmpty(reelId)){
if (!Strings.isNullOrEmpty(reelId)) {
break;
}
}
......@@ -633,7 +632,7 @@ public class LiteOrderCache {
}
cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount() + taskReelCount);
log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]");
smfApi.onOrderStatusChange(cacheOrder);
//有需要出库的
......@@ -650,6 +649,7 @@ public class LiteOrderCache {
}
return "";
}
/**
* 防止仓位任务重复,需要排除掉已经分配掉的出库仓位
*/
......@@ -658,7 +658,7 @@ public class LiteOrderCache {
List<DataLog> allTasks = taskService.getAllTasks();
Collection<String> operatingPosIds = new HashSet<>();
for (DataLog task : allTasks) {
if(task.isCheckOutTask()){
if (task.isCheckOutTask()) {
String posId = task.getPosId();
if (!Strings.isNullOrEmpty(posId)) {
operatingPosIds.add(task.getPosId());
......@@ -671,7 +671,7 @@ public class LiteOrderCache {
private DataLog newTask(StoragePos pos) {
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog task = new DataLog(storage,pos.getBarcode(),pos);
DataLog task = new DataLog(storage, pos.getBarcode(), pos);
String operator = SecurityUtils.getLoginUsername();
task.setOperator(operator);
return task;
......@@ -679,25 +679,26 @@ public class LiteOrderCache {
/**
* 关闭工单
*
* @param orderNo
*/
public String closeOrder(String orderNo) {
LiteOrder liteOrder = liteOrderMap.get(orderNo);
if (liteOrder == null) {
liteOrder=liteOrderManager.findByOrderNo(orderNo);
if(liteOrder==null){
liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) {
return "smfcore.order.out.notFound";
}
}
//有任务的工单不能关闭
List<DataLog> allTask=taskService.getAllTasks();
for (DataLog task:allTask
) {
if (OP.CHECKOUT == task.getType()&&(!task.isEnd())) {
List<DataLog> allTask = taskService.getAllTasks();
for (DataLog task : allTask
) {
if (OP.CHECKOUT == task.getType() && (!task.isEnd())) {
//更新工单状态
String taskSourceName = task.getSourceName();
if (!Strings.isNullOrEmpty(taskSourceName) && orderNo.equals(taskSourceName)) {
log.info("关闭工单[" + orderNo + "]失败,有未完成的出库任务:"+task.getPosName());
log.info("关闭工单[" + orderNo + "]失败,有未完成的出库任务:" + task.getPosName());
return "smfcore.order.close.taskNotEnd";
}
}
......@@ -709,11 +710,12 @@ public class LiteOrderCache {
liteOrder.setClosed(true);
liteOrderManager.save(liteOrder);
smfApi.onOrderStatusChange(liteOrder);
return "smfcore.order.close.success";
return "smfcore.order.close.success";
}
/**
* 工单详情补料出库
*
* @param orderNo
* @param orderItemId
* @return
......@@ -721,46 +723,46 @@ public class LiteOrderCache {
public ResultBean orderItemSupplementOut(String orderNo, String orderItemId) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
cacheOrder=liteOrderManager.findByOrderNo(orderNo);
if(cacheOrder==null){
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
if (cacheOrder == null) {
return ResultBean.newErrorResult(-1, "smfcore.order.out.notFound", "未找到工单");
}
}
if(cacheOrder.isClosed()){
if (cacheOrder.isClosed()) {
return ResultBean.newErrorResult(-1, "smfcore.order.hasClose", "工单已关闭");
}
List<String> orderItemIds = Lists.newArrayList(orderItemId.split(","));
String resultMsg = "";
int outCount = 0;
for (LiteOrderItem orderItem:cacheOrder.getOrderItems()) {
if(orderItemIds.contains(orderItem.getId())){
Collection<String> excludePosIds = excludeOutPosIds();
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
if (orderItemIds.contains(orderItem.getId())) {
Collection<String> excludePosIds = excludeOutPosIds();
StoragePos pos = null;
String reelId = orderItem.getRi();
if(Strings.isNullOrEmpty(reelId)){
if (Strings.isNullOrEmpty(reelId)) {
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
String partNumber = orderItem.getPn();
//PN
pos = storagePosManager.findPartNumberInStorages(availableStorageIds, partNumber, excludePosIds, checkoutType);
}else{
} else {
//RI
pos=storagePosManager.getByBarcode(orderItem.getRi());
pos = storagePosManager.getByBarcode(orderItem.getRi());
}
if (pos == null) {
log.info("PN["+orderItem.getRi()+"]RI["+orderItem.getPn()+"]出库时,未找到物料,忽略");
log.info("PN[" + orderItem.getRi() + "]RI[" + orderItem.getPn() + "]出库时,未找到物料,忽略");
//return "smfcore.order.supplementOutFail";
continue;
}
if(excludePosIds.contains(pos.getId())) {
if (excludePosIds.contains(pos.getId())) {
log.info("工单[" + orderNo + "]RI出库,仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理");
}else{
} else {
outCount = outCount + 1;
log.info("工单[" + orderNo + "]["+orderItem.getId()+"]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount());
DataLog task = newTask(pos) ;
log.info("工单[" + orderNo + "][" + orderItem.getId() + "]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount());
DataLog task = newTask(pos);
task.setSourceId(cacheOrder.getId());
task.setSourceName(cacheOrder.getOrderNo());
......@@ -770,23 +772,23 @@ public class LiteOrderCache {
// task.setLightColor(nextColor.getRgb());
task.setStatus(OP_STATUS.WAIT.name());
// task = dataLogDao.save(task);
try{
try {
taskService.addTaskToExecute(task);
}catch (Exception e){
String msg = "工单[" + orderNo + "]["+orderItem.getId()+"]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount();
log.error("补料生成任务出错["+msg+"]:"+e.getMessage());
} catch (Exception e) {
String msg = "工单[" + orderNo + "][" + orderItem.getId() + "]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount();
log.error("补料生成任务出错[" + msg + "]:" + e.getMessage());
}
}
}
}
if(outCount > 0){
if (outCount > 0) {
cacheOrder.setTaskReelCount(outCount);
cacheOrder.setTaskFinishedTime(-1);
cacheOrder.setFinishedReelCount(0);
liteOrderManager.save(cacheOrder);
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
return ResultBean.newErrorResult(0, "smfcore.order.supplement.result", "操作成功,共出库"+outCount+"盘物料");
return ResultBean.newErrorResult(0, "smfcore.order.supplement.result", "操作成功,共出库" + outCount + "盘物料");
}
return ResultBean.newErrorResult(-1, "smfcore.order.supplementOutFail", "补料出库失败,无可出库料盘");
}
......@@ -825,26 +827,47 @@ public class LiteOrderCache {
}
public synchronized void preTaskCheckOut(LiteOrder order, String operationId, List<Material> materialList) {
public synchronized String preTaskCheckOut(LiteOrder order, String operationId, List<Material> materialList,boolean isRetry) {
order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0);
order.setFinishedReelCount(0);
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库");
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库,isRetry=" + isRetry);
int taskReelCount = 0;
List<StoragePos> storagePosList = new ArrayList<>();
List<String> barcodeList = new ArrayList<>();
if (isRetry) {
materialList = new ArrayList<>();
for (LiteOrderItem orderItem : order.getOrderItems()) {
if (orderItem.getStatus().equals(OrderItemStatus.executFail)) {
Material material = new Material();
material.setSerialNum(orderItem.getRi());
material.setPartNumber(orderItem.getPn());
materialList.add(material);
barcodeList.add(orderItem.getRi());
}
}
if (materialList.size() < 0) {
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] 未找到可以retry的物料");
return "";
}
storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(barcodeList)));
} else {
//提取barcode
barcodeList = materialList.stream().map(item -> item.getSerialNum()).collect(Collectors.toList());
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());
}
//mes提前扣除,扣除成功的直接出库,失败的标记状态
//提取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());
}
//mes提前扣除,扣除成功的直接出库,失败的标记状态
List<TrackStatus> trackStatusList = new ArrayList<>();
......@@ -867,7 +890,9 @@ public class LiteOrderCache {
} else {
orderItem.setNeedNum(storagePos.getBarcode().getAmount());
TrackStatus trackStatus = trackStatusList.stream().filter(item -> ri.equals(item.getSerialNum())).findAny().orElse(null);
if (ObjectUtil.isEmpty(orderItem.getPn())) {
orderItem.setPn(storagePos.getBarcode().getPartNumber());
}
if (trackStatus != null && trackStatus.isSuccess()) {
//生成任务
......@@ -882,6 +907,7 @@ public class LiteOrderCache {
taskReelCount++;
//设置状态.正在出库
orderItem.setStatus(OrderItemStatus.executing);
orderItem.setExecutFailReason("");
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证成功,开始出库,累计出库盘数=" + taskReelCount);
} else {
......@@ -903,6 +929,21 @@ public class LiteOrderCache {
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] 出库完成,累计任务数=" + taskReelCount);
order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
int currTask = 0;
if (isRetry) {
//判断是否之前有未结束任务
List<DataLog> dataLogs = new ArrayList<>();
dataLogs.addAll(taskService.getQueueTasks());
for (DataLog log :
dataLogs) {
if (log.isCheckOutTask() && ObjectUtil.isNotEmpty(log.getSourceId()) && log.getSourceId().equals(order.getId())) {
currTask++;
}
}
if (currTask > 0) {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] 还有 [" + currTask + "] 未完成的出库任务");
}
}
if (taskReelCount <= 0) {
if (order.isOutTails()) {
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
......@@ -911,12 +952,13 @@ public class LiteOrderCache {
}
liteOrderManager.save(order);
addOrderToMap(order);
return "";
}
/**
* 工单挑料,OutSide Shelf Dispatch Controlled Dispatch
*/
public synchronized String OrderReady(String orderNo,String lineId ) {
public synchronized String OrderReady(String orderNo, String lineId) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
......@@ -1054,9 +1096,9 @@ public class LiteOrderCache {
//调用API009进行验证
Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(cacheOrder.getOperationId(),lineId, allBarcodes);
Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(cacheOrder.getOperationId(), lineId, allBarcodes);
List<StoragePos> lockPos=new ArrayList<>();
List<StoragePos> lockPos = new ArrayList<>();
for (LiteOrderItem item :
newItems) {
item.setOutNum(0);
......@@ -1066,7 +1108,7 @@ public class LiteOrderCache {
for (LiteOrderItem reelItem :
item.getSelectItems()) {
MaterialStatus s = apiResultMap.get(reelItem.getRi());
if (s!=null&& s.isAvailable()) {
if (s != null && s.isAvailable()) {
reelItem.setStatus(OrderItemStatus.CheckOk);
StoragePos pos = storagePosManager.getByBarcode(s.getSerialNum());
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】");
......@@ -1112,13 +1154,12 @@ public class LiteOrderCache {
}
public synchronized void dispatchCheckOut(LiteOrder order ) {
public synchronized String dispatchCheckOut(LiteOrder order, boolean isRetry) {
order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0);
order.setFinishedReelCount(0);
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库");
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库,isRetry="+isRetry);
int taskReelCount = 0;
List<String> needOutBarcode = new ArrayList<>();
......@@ -1127,13 +1168,24 @@ public class LiteOrderCache {
for (LiteOrderItem selItem :
item.getSelectItems()) {
if (selItem.getStatus().equals(OrderItemStatus.CheckOk)) {
//只出checkOK的
needOutBarcode.add(selItem.getRi());
if (isRetry) {
if (selItem.getStatus().equals(OrderItemStatus.executFail)) {
//retry检查出库失败的
needOutBarcode.add(selItem.getRi());
}
} else {
if (selItem.getStatus().equals(OrderItemStatus.CheckOk)) {
//只出checkOK的
needOutBarcode.add(selItem.getRi());
}
}
}
}
if (needOutBarcode.size() < 0) {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] 未找到可以retry的物料");
return "";
}
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(needOutBarcode)));
List<Material> materialList = new ArrayList<>();
......@@ -1173,11 +1225,12 @@ public class LiteOrderCache {
taskReelCount++;
//设置状态.正在出库
selItem.setStatus(OrderItemStatus.executing);
selItem.setExecutFailReason("");
outNum += storagePos.getBarcode().getAmount();
outReelCount += 1;
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证成功,开始出库,累计出库盘数=" + taskReelCount);
} else {
if(trackStatus!=null){
if (trackStatus != null) {
selItem.setExecutFailReason(trackStatus.getDescription());
}
selItem.setStatus(OrderItemStatus.executFail);
......@@ -1198,7 +1251,24 @@ public class LiteOrderCache {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] 出库完成,累计任务数=" + taskReelCount);
order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
if (taskReelCount <= 0) {
int currTask = 0;
if (isRetry) {
//判断是否之前有未结束任务
List<DataLog> dataLogs = new ArrayList<>();
dataLogs.addAll(taskService.getQueueTasks());
for (DataLog log :
dataLogs) {
if (log.isCheckOutTask() && ObjectUtil.isNotEmpty(log.getSourceId()) && log.getSourceId().equals(order.getId())) {
currTask++;
}
}
if (currTask > 0) {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] 还有 [" + currTask + "] 未完成的出库任务");
}
}
if (taskReelCount <= 0 && currTask <= 0) {
if (order.isOutTails()) {
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
}
......@@ -1206,5 +1276,6 @@ public class LiteOrderCache {
}
liteOrderManager.save(order);
addOrderToMap(order);
return "";
}
}
......@@ -203,7 +203,7 @@ public class MicronApi {
throw new ApiException("smfcore.api.001." + errmsg, error + ";" + errmsg, new String[]{});
} else {
log.info("API001 ,验证失败,获取数据失败:" + errmsg);
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API001"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API001 : "+result.getResponseData()});
}
}
......@@ -357,7 +357,7 @@ public class MicronApi {
}
else{
log.info("API002 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API002"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API002 : "+result.getResponseData()});
}
return resultMap;
}
......@@ -433,7 +433,7 @@ public class MicronApi {
log.info("API004 ,接口通信失败");
//throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API004"});
String msg = "API004 Failed to get data";
String msg = "API004 : "+result.getResponseData()+" Failed to get data";
Object message = result.getResult("message", false);
if (message != null){
msg = message.toString();
......@@ -453,40 +453,46 @@ public class MicronApi {
String url = config.getUrl(config.api_name_005);
List<Material> materialList = new ArrayList<>();
if( Debug){
materialList.add(new Material("serialNum1","partNumber1"));
if (Debug) {
materialList.add(new Material("serialNum1", "partNumber1"));
return materialList;
}
url = MessageFormat.format(url,operationId,linePrepOrderId);
url = MessageFormat.format(url, operationId, linePrepOrderId);
try {
log.info("调用MES接口 API005: url=" + url + "");
MicronResult result = HttpHelper.getMicronJson(url);
String errMsg=getDErrorMsg(result);
if (result.isOk() ) {
List<Object> objects = result.getResult("materials",false);
if(objects==null||objects.size()<=0){
log.info("API005 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005"});
String errMsg = getDErrorMsg(result);
if (result.isOk()) {
List<Object> objects = result.getResult("materials", false);
if (objects == null || objects.size() <= 0) {
if (ObjectUtil.isNotEmpty(errMsg)) {
log.info("API005 ,接口通信失败:" + errMsg);
throw new ApiException(errMsg);
} else {
log.info("API005 ,接口通信失败 :" + result.getResponseData());
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005 : " + result.getResponseData()});
}
}
for (Object object :
objects) {
Material material= JsonUtil.toObj(JsonUtil.toJsonStr( object) ,Material.class);
Material material = JsonUtil.toObj(JsonUtil.toJsonStr(object), Material.class);
materialList.add(material);
}
return materialList;
}
else if(ObjectUtil.isNotEmpty(errMsg)) {
return materialList;
} else if (ObjectUtil.isNotEmpty(errMsg)) {
log.info("API005 ,接口通信失败:" + errMsg);
throw new ApiException(errMsg);
}else{
} else {
log.info("API005 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005"});
log.info("API005 ,接口通信失败 :" + result.getResponseData());
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005 : " + result.getResponseData()});
}
} catch (Exception e) {
log.error(url + "出错", e);
return null;
return null;
}
}
......@@ -524,8 +530,14 @@ public class MicronApi {
List<Object> objects = result.getResult("materials",false);
if(objects==null||objects.size()<=0){
log.info("API006 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006"});
if(ObjectUtil.isNotEmpty(errMsg)){
log.info("API006 ,接口通信失败:" + errMsg);
throw new ApiException(errMsg);
}else{
log.info("API006 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006:"+result.getResponseData()});
}
}
for (Object object :
objects) {
......@@ -539,7 +551,7 @@ public class MicronApi {
}else{
log.info("API006 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006:"+result.getResponseData()});
}
} catch (Exception e) {
......@@ -603,7 +615,7 @@ public class MicronApi {
// throw new ApiException(errMsg);
} else {
log.info("API007 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API007"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API007 : "+micronResult.getResponseData()});
}
} catch (ApiException e) {
......@@ -650,7 +662,7 @@ public class MicronApi {
} else {
log.info("API008 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API008"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API008 : "+micronResult.getResponseData()});
}
} catch (ApiException e) {
log.error(url + "出错", e);
......@@ -731,7 +743,7 @@ public class MicronApi {
} else {
log.info("API009 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API009"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API009: "+micronResult.getResponseData()});
}
} catch (ApiException e) {
log.error(url + "出错", e);
......@@ -741,7 +753,7 @@ public class MicronApi {
public static List<TrackStatus> Api010(String operationId, List<Material> materialList) {
//出库前预扣
List<TrackStatus> statusList = new ArrayList<>();
if(Debug){
for (Material m :
......@@ -780,11 +792,6 @@ public class MicronApi {
TrackStatus s= JsonUtil.toObj(JsonUtil.toJsonStr( obj) ,TrackStatus.class);
statusList.add(s);
}
// if(statusList==null||statusList.size()<=0){
//
// log.info("API010 ,接口通信失败");
// throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010"});
// }
}
if( ObjectUtil.isNotEmpty(errMsg)&&( statusList==null||statusList.size()<=0) ){
for (Material m :
......@@ -804,7 +811,7 @@ public class MicronApi {
}
else{
log.info("API010 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010 : "+micronResult.getResponseData()});
}
//statusList = micronResult.getResult("trackStatus");
} catch (Exception e) {
......@@ -847,7 +854,7 @@ public class MicronApi {
}else{
log.info("Api011 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011 : "+result.getResponseData()});
}
} catch (Exception e) {
log.error(url + "出错", e);
......@@ -946,7 +953,7 @@ public class MicronApi {
if (ObjectUtil.isNotEmpty(msg)) {
return msg;
}
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api201"});
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api201 : "+result.getResponseData()});
} catch (ApiException e) {
log.error(url + "出错", e);
return e.getMessage();
......
......@@ -534,6 +534,7 @@ private IStoragePosManager storagePosManager;
public ResultBean checkOut(@RequestBody Map<String,Object> params) {
String mode = params.get("mode").toString();
log.info(" checkOut :mode=" + mode + ",开始确认出库");
//判断有没有生成任务
LiteOrder order = getOrderByMode(mode);
......@@ -542,7 +543,7 @@ private IStoragePosManager storagePosManager;
}
//调用API010扣除库存,扣除成功的才可以出库
liteOrderCache.dispatchCheckOut(order);
liteOrderCache.dispatchCheckOut(order,false);
//工单开始出库
......@@ -556,48 +557,58 @@ private IStoragePosManager storagePosManager;
public ResultBean retry(@RequestBody Map<String,Object> params) {
String mode = params.get("mode").toString();
log.info(" retry :mode=" + mode + ",入库完成发送失败的,重新发送,其他状态暂不处理");
log.info(" retry :mode=" + mode + ",重新出库");
//判断有没有生成任务
LiteOrder order=getOrderByMode(mode);
LiteOrder order = getOrderByMode(mode);
if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
List<LiteOrderItem> orderItems = new ArrayList<>();
boolean canClose=true;
for (LiteOrderItem orderItem :
liteOrderItemList) {
if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
String id = orderItem.getId();
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
if (dataLogList != null && !dataLogList.isEmpty()) {
log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
if (ObjectUtil.isEmpty(msg)) {
orderItem.setStatus(OrderItemStatus.notify_success);
} else {
orderItem.setExecutFailReason(msg);
orderItem.setStatus(OrderItemStatus.notify_fail);
canClose=false;
}
liteOrderItemManager.save(orderItem);
}
}else if(orderItem.getStatus()==OrderItemStatus.executing){
canClose=false;
}
orderItems.add(orderItem);
}
order.setOrderItems(orderItems);
if(canClose){
//可以关闭工单
CloseOrder(order);
}else{
liteOrderCache.addOrderToMap(order);
}
liteOrderCache.dispatchCheckOut(order,true);
return ResultBean.newOkResult("");
// //判断有没有生成任务
// LiteOrder order=getOrderByMode(mode);
// if (order == null) {
// return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
// }
// List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
// List<LiteOrderItem> orderItems = new ArrayList<>();
// boolean canClose=true;
// for (LiteOrderItem orderItem :
// liteOrderItemList) {
// if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
// String id = orderItem.getId();
// List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
// if (dataLogList != null && !dataLogList.isEmpty()) {
//
// log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
// String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
// if (ObjectUtil.isEmpty(msg)) {
// orderItem.setStatus(OrderItemStatus.notify_success);
// } else {
// orderItem.setExecutFailReason(msg);
// orderItem.setStatus(OrderItemStatus.notify_fail);
// canClose=false;
// }
// liteOrderItemManager.save(orderItem);
//
// }
// }else if(orderItem.getStatus()==OrderItemStatus.executing){
// canClose=false;
// }
// orderItems.add(orderItem);
// }
// order.setOrderItems(orderItems);
// if(canClose){
// //可以关闭工单
// CloseOrder(order);
// }else{
//
// liteOrderCache.addOrderToMap(order);
// }
// return ResultBean.newOkResult("");
}
private void CloseOrder(LiteOrder order) {
......
......@@ -221,7 +221,8 @@ public class MicronPreTaskController {
liteOrderCache.addOrderToMap(liteOrder);
log.info("submit 勾选后,生成工单:[" + operationId + "][" + mode + "]");
//开始查询是否可以出库
liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList);
String msg= liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList,false);
}
}catch (Exception ex){
......@@ -258,53 +259,65 @@ public class MicronPreTaskController {
@AnonymousAccess
public ResultBean retry(@RequestBody Map<String,Object> params) {
String mode=params.get("mode").toString();
log.info(" retry :mode=" + mode + ",入库完成发送失败的,重新发送,其他状态暂不处理");
String mode = params.get("mode").toString();
log.info(" retry :mode=" + mode + ",重新出库");
TaskDto dto = getTaskDtoByMode(mode);
if (dto == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
//判断有没有生成任务
LiteOrder order=getOrderByMode(mode);
LiteOrder order = getOrderByMode(mode);
if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
List<LiteOrderItem> orderItems = new ArrayList<>();
boolean canClose=true;
for (LiteOrderItem orderItem :
liteOrderItemList) {
if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
String id = orderItem.getId();
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
if (dataLogList != null && !dataLogList.isEmpty()) {
log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
if (ObjectUtil.isEmpty(msg)) {
orderItem.setStatus(OrderItemStatus.notify_success);
} else {
orderItem.setExecutFailReason(msg);
orderItem.setStatus(OrderItemStatus.notify_fail);
canClose=false;
}
liteOrderItemManager.save(orderItem);
}
}else if(orderItem.getStatus()==OrderItemStatus.executing){
canClose=false;
try {
//开始查询是否可以出库
String msg = liteOrderCache.preTaskCheckOut(order, dto.getOperationId(), new ArrayList<>(), true);
if (ObjectUtil.isNotEmpty(msg)) {
return ResultBean.newErrorResult(-1, msg, "操作失败");
}
orderItems.add(orderItem);
} catch (Exception ex) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
order.setOrderItems(orderItems);
if(canClose){
//可以关闭工单
CloseOrder(order);
}else{
liteOrderCache.addOrderToMap(order);
}
return ResultBean.newOkResult("");
// List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
// List<LiteOrderItem> orderItems = new ArrayList<>();
// boolean canClose=true;
// for (LiteOrderItem orderItem :
// liteOrderItemList) {
// if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
// String id = orderItem.getId();
// List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
// if (dataLogList != null && !dataLogList.isEmpty()) {
//
// log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
// String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
// if (ObjectUtil.isEmpty(msg)) {
// orderItem.setStatus(OrderItemStatus.notify_success);
// } else {
// orderItem.setExecutFailReason(msg);
// orderItem.setStatus(OrderItemStatus.notify_fail);
// canClose=false;
// }
// liteOrderItemManager.save(orderItem);
//
// }
// }else if(orderItem.getStatus()==OrderItemStatus.executing){
// canClose=false;
// }
// orderItems.add(orderItem);
// }
// order.setOrderItems(orderItems);
// if(canClose){
// //可以关闭工单
// CloseOrder(order);
// }else{
//
// liteOrderCache.addOrderToMap(order);
// }
// return ResultBean.newOkResult("");
}
......
......@@ -360,6 +360,7 @@ smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hastask=\u6761\u7801[0]\u5DF2\u6709\u5165\u5E93\u4EFB\u52A1
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599
smfcore.error.noRetryReel=No material found to retry
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
......
......@@ -358,4 +358,5 @@ smfcore.api.toXray={0}Need to Xray
smfcore.paretoChart=Pareto chart
smfcore.selfAudit.hasOutTask=The location [{0}] already has a release task
smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
\ No newline at end of file
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel=No material found to retry
\ No newline at end of file
......@@ -353,4 +353,5 @@ smfcore.micron.apiClose=Not yet open
smfcore.paretoChart=\u30D1\u30EC\u30FC\u30C8\u56F3
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
\ No newline at end of file
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel=No material found to retry
\ No newline at end of file
......@@ -353,4 +353,5 @@ smfcore.micron.apiClose=API\u529F\u80FD\u672A\u5F00\u653E
smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599
\ No newline at end of file
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599
smfcore.error.noRetryReel=\u6CA1\u6709\u53EF\u4EE5\u91CD\u8BD5\u7684\u7269\u6599
\ No newline at end of file
......@@ -354,4 +354,5 @@ smfcore.api.fail={0} \u83B7\u53D6\u6570\u636E\u5931\u8D25
smfcore.micron.apiClose=API\u529F\u80FD\u672A\u5F00\u653E
smfcore.paretoChart=\u5E15\u7D2F\u6258\u5716
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u865F[0] \u5DF2\u6709\u51FA\u5EAB\u4EFB\u52D9\uFF0C\u51FA\u5EAB\u524D\u4E0D\u5F97\u5165\u5EAB\u76F8\u540C\u5E8F\u5217\u865F\u7269\u6599
\ No newline at end of file
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u865F[0] \u5DF2\u6709\u51FA\u5EAB\u4EFB\u52D9\uFF0C\u51FA\u5EAB\u524D\u4E0D\u5F97\u5165\u5EAB\u76F8\u540C\u5E8F\u5217\u865F\u7269\u6599
smfcore.error.noRetryReel=\u6C92\u6709\u53EF\u4EE5\u91CD\u8A66\u7684\u7269\u6599
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!