Forráskód Böngészése

计划暂停后该计划加工中的工件完成当前工序后不再继续加工,计划启用后重新开始加工

yejian 2 éve
szülő
commit
fb8bf06152

+ 6 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/mq/TaskWorkNode.java

@@ -445,6 +445,12 @@ public class TaskWorkNode {
             logger.error("调用接口发生异常" + e.getMessage());
         } catch (Exception e) {
             conMap.put("result",false);
+            // 释放占用资源并在autolog表中增加日志,方便指令重发
+
+            //插入执行日志
+            log.setStatus("0").setExeResult("0").setManual("1").setFeedback(e.getMessage());
+            autoNodeLogMapper.updateAllById(log);
+
             e.printStackTrace();
         } finally {
             logger.info("returnData={}",returnData);

+ 45 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/OrderServiceImpl.java

@@ -163,6 +163,12 @@ public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, Order> imple
     @Autowired
     private MsgUtil msgUtil;
 
+    @Autowired
+    private TaskNodeMapper taskNodeMapper;
+
+    @Autowired
+    private WorkpieceService workpieceService;
+
     @Override
     public IPage<Order> pageList(IPage page,String sustDesc, LbqWrapper<Order> wrapper) {
         return baseMapper.pageList(page,sustDesc, wrapper, new DataScope());
@@ -789,10 +795,48 @@ public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, Order> imple
     public R orderEnable(Order model){
         R r = reschedulingPlanTasks();
         if(r.getIsSuccess()){
-            // 默认只有一键生产过后的订单可以暂停和启用,未一键生产过的订单无需暂停和启用,启用是找出所有的所有未加工的工件重新排序
+// 默认只有一键生产过后的订单可以暂停和启用,未一键生产过的订单无需暂停和启用,启用是找出所有的所有未加工的工件重新排序
             model.setProduceStatus("2");
             planMapper.updatePlanProduceStatus(model);
 
+            List<TWorkpiece> workpieceList = workpieceService.list(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getIsEnd, "0").in(TWorkpiece::getPlanId,model.getId()));
+
+            // end modify by yejian on 20220524 for 模式切换工件查找还需判断订单是否在生产中,如果非生产中不能推送消息
+
+            if(CollectionUtil.isNotEmpty(workpieceList)){
+                workpieceList.stream().map((t) -> {
+                    // 生产计划重新启用
+
+                    JSONObject jsonObject = new JSONObject();
+                    List<TaskNode> taskNodeList = taskNodeMapper.selectList(Wraps.<TaskNode>lbQ().eq(TaskNode::getCompleteBatchNo, t.getCompleteBatchNo()).eq(TaskNode::getExeStatus,"1").orderByAsc(TaskNode::getCompleteBatchSort));
+                    if(CollectionUtil.isNotEmpty(taskNodeList)){
+                        TaskNode taskNode = taskNodeList.get(0);
+                        // begin add by yejian on 20220915 for  判断当前节点是否是是否是工序的第一个节点,如果是推送,如果不是不推送
+                        TaskNode beforTaskNode = taskNodeMapper.selectOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getCompleteBatchNo, taskNode.getCompleteBatchNo()).eq(TaskNode::getCompleteBatchSort,taskNode.getCompleteBatchSort() -1));
+                        if(null != beforTaskNode){
+                            // 非第一个节点
+                            if(!beforTaskNode.getProcedureId().equals(taskNode.getProcedureId())){
+                                jsonObject.put("taskNodeId",taskNode.getId().toString());
+                                jsonObject.put("bizType", BizConstant.MQ_TASK_NODE_TYPE_COMMON);
+                                System.err.println("计划暂停启用===========推送mq队列{}消息{}"+jsonObject.toString());
+                                log.info("推送mq队列{}消息{}",taskNode.getResourceId().toString(),jsonObject.toString());
+                                dynamicRabbitMq.sendMsg(taskNode.getResourceId().toString(),jsonObject.toString());
+                            }
+                        }else{
+                            jsonObject.put("taskNodeId",taskNode.getId().toString());
+                            jsonObject.put("bizType", BizConstant.MQ_TASK_NODE_TYPE_COMMON);
+                            System.err.println("计划暂停启用===========推送mq队列{}消息{}"+jsonObject.toString());
+                            log.info("推送mq队列{}消息{}",taskNode.getResourceId().toString(),jsonObject.toString());
+                            dynamicRabbitMq.sendMsg(taskNode.getResourceId().toString(),jsonObject.toString());
+                        }
+                        // end add by yejian on 20220915 for  判断当前节点是否是是否是工序的第一个节点,如果是推送,如果不是不推送
+                    }
+                    t.setExchangeProcedureId(t.getProcedureId());
+                    t.setExchangeZoneFlag("1");
+                    return t;
+                }).collect(Collectors.toList());
+            }
+
             return R.success();
         }else{
             return r;

+ 3 - 2
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/util/MsgUtil.java

@@ -280,9 +280,10 @@ public class MsgUtil implements ApplicationContextAware {
             BBom bom = bBomMapper.selectById(task.getBomId());
             ZZone bomzZone = zoneService.getById(bom.getZoneId());
 
+            Plan plan = planMapper.selectById(currWorkpiece.getPlanId());
             //如果是手动模式,执行完当前工序就不往下走了
-            if("2".equals(bomzZone.getRunMode()) && taskNode.getProcedureId() != nextTaskNode.getProcedureId().longValue()){
-                System.err.println("手动模式下工序最后一个工步***************************");
+            if(("2".equals(bomzZone.getRunMode()) || "3".equals(plan.getProduceStatus())) && taskNode.getProcedureId() != nextTaskNode.getProcedureId().longValue()){
+                System.err.println("手动模式下或者订单暂停时执行到工序最后一个工步***************************");
                 return;
             }