Bläddra i källkod

1.初始化在手动模式下,订单手动模式单工艺执行完成后不停止问题修改
2.模式切换连续切换存在问题修改,
3.agv模拟异常及指令重发

yejian 2 år sedan
förälder
incheckning
9208b89afb

+ 3 - 2
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/WorkpieceServiceImpl.java

@@ -534,7 +534,7 @@ public class WorkpieceServiceImpl extends SuperServiceImpl<WorkpieceMapper, TWor
 
     /**
      *
-     * @param taskNodeId
+     * @param completeBatchNo
      * @param isParent
      * @return
      */
@@ -653,11 +653,12 @@ public class WorkpieceServiceImpl extends SuperServiceImpl<WorkpieceMapper, TWor
     }
     @Override
     public R executeOrder(Map paraMap) {
+        BaseContextHandler.setTenant("0000");
         // 根据taskid查找工序任务
         long taskId = Long.valueOf(paraMap.get("taskId").toString());
         TTask tTask = tTaskMapper.selectById(taskId);
         // 工序节点子任务
-        List<TaskNode> taskNodes = taskNodeService.list(Wraps.<TaskNode>lbQ().eq(TaskNode::getCompleteBatchNo,tTask.getCompleteBatchNo()).eq(TaskNode::getExeStatus,"1").orderByAsc(TaskNode:: getPrority));
+        List<TaskNode> taskNodes = taskNodeService.list(Wraps.<TaskNode>lbQ().eq(TaskNode::getExeStatus,"1").eq(TaskNode::getTaskId,tTask.getId()).orderByAsc(TaskNode::getCompleteBatchSort));
 //        // 工件信息
 //        TWorkpiece workpiece = baseMapper.selectOne(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getCompleteBatchNo,tTask.getCompleteBatchNo()));
 //

+ 28 - 8
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/service/impl/ZZoneServiceImpl.java

@@ -10,6 +10,7 @@ import com.github.zuihou.business.DemoLine.YunjianConstant;
 import com.github.zuihou.business.operationManagementCenter.dao.TTaskMapper;
 import com.github.zuihou.business.operationManagementCenter.dao.TaskNodeMapper;
 import com.github.zuihou.business.operationManagementCenter.dao.WorkpieceMapper;
+import com.github.zuihou.business.operationManagementCenter.entity.Order;
 import com.github.zuihou.business.operationManagementCenter.entity.TTask;
 import com.github.zuihou.business.operationManagementCenter.entity.TWorkpiece;
 import com.github.zuihou.business.operationManagementCenter.entity.TaskNode;
@@ -195,10 +196,15 @@ public class ZZoneServiceImpl extends SuperServiceImpl<ZZoneMapper, ZZone> imple
 
         //修改workpiece当前正在执行的工序
         //先查出当前产线的零件
-        List<BBom>bBomList = bomMapper.selectList(Wraps.<BBom>lbQ().eq(BBom::getZoneId, data.getId()));
-        List<Long>bomIdList =  bBomList.stream().map(p -> p.getId()).collect(Collectors.toList());
+        // begin modify by yejian on 20220524 for 模式切换工件查找还需判断订单是否在生产中,如果非生产中不能推送消息
+//        List<BBom>bBomList = bomMapper.selectList(Wraps.<BBom>lbQ().eq(BBom::getZoneId, data.getId()));
+//        List<Long>bomIdList =  bBomList.stream().map(p -> p.getId()).collect(Collectors.toList());
+//        List<TWorkpiece>workpieceList = workpieceService.list(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getIsEnd, "0").in(TWorkpiece::getBomId,bomIdList));
+        List<Order> orderList = orderService.list(Wraps.<Order>lbQ().eq(Order::getZoneId, data.getId()));
+        List<Long> orderIds =  orderList.stream().map(p -> p.getId()).collect(Collectors.toList());
+        List<TWorkpiece> workpieceList = workpieceService.list(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getIsEnd, "0").in(TWorkpiece::getOrderId,orderIds));
 
-        List<TWorkpiece>workpieceList = workpieceService.list(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getIsEnd, "0").in(TWorkpiece::getBomId,bomIdList));
+        // end modify by yejian on 20220524 for 模式切换工件查找还需判断订单是否在生产中,如果非生产中不能推送消息
 
         if(CollectionUtil.isNotEmpty(workpieceList)){
             workpieceList.stream().map((t) -> {
@@ -208,11 +214,25 @@ public class ZZoneServiceImpl extends SuperServiceImpl<ZZoneMapper, ZZone> imple
                     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);
-                        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());
+                        // begin add by yejian on 20220524 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 20220524 for  判断当前节点是否是是否是工序的第一个节点,如果是推送,如果不是不推送,防止模式切换平凡时,之前工序节点继续走,模式切换在调用一次的极端情况
                     }
                 }
 

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

@@ -142,17 +142,17 @@ public class MsgUtil implements ApplicationContextAware {
             TaskNode nextTaskNode = taskNodeList.get(n+1);
 
             //如果切换成了手动档,则只把当前工序走完
-            if(currWorkpiece!=null&&"1".equals(currWorkpiece.getExchangeZoneFlag())){
+//            if(currWorkpiece!=null&&"1".equals(currWorkpiece.getExchangeZoneFlag())){
                 BBom bom = bBomMapper.selectById(task.getBomId());
                 ZZone bomzZone = zoneService.getById(bom.getZoneId());
                 Long exchangeProcedureId = currWorkpiece.getExchangeProcedureId();
 
                 System.err.println("***************************");
                 //如果是手动模式,执行完当前工序就不往下走了
-                if("2".equals(bomzZone.getRunMode())&&exchangeProcedureId.longValue()!=nextTaskNode.getProcedureId().longValue()){
+                if("2".equals(bomzZone.getRunMode()) && taskNode.getProcedureId() != nextTaskNode.getProcedureId().longValue()){
                     return;
                 }
-            }
+//            }
 
             //如果是三坐标检测
             if("3".equals(taskNode.getNodeType())){

+ 5 - 1
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/operationManagementCenter/TTaskMapper.xml

@@ -288,10 +288,11 @@
           imm.equipment_name AS equipmentName,
           imm.trade_mark AS tradeMark,
           ibbpt.armor_pic AS armorPic,
-          (select ittn.interface_type  from imcs_t_task_node ittn where ittn.task_id = itt.id and exe_status = '2') AS interfaceType
+          ittn.interface_type AS interfaceType
         FROM
              imcs_p_plan ipp,
              imcs_t_task itt,
+             imcs_t_task_node ittn,
              imcs_b_bom_procedure ibbp,
              imcs_b_bom_procedure_tray ibbpt,
              imcs_b_bom ibb,
@@ -301,6 +302,9 @@
         AND ipp.id = itt.plan_id
         AND ipp.produce_status = '2'
         AND itt.status IN  ('1','2')
+        AND itt.id = ittn.task_id
+        AND ittn.exe_status IN ('1','2')
+        AND ittn.interface_type =  '04'
         AND ibbp.id = itt.procedure_id
         AND ibbp.bom_id = ibb.id
         AND ibbpt.procedure_id = ibbp.id

+ 1 - 1
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/dispatchRecord/DispatchExceptionController.java

@@ -194,7 +194,7 @@ public class DispatchExceptionController extends SuperSimpleController<AAutoNode
             return  R.fail("指令模式必须在手动模式下才可以执行,请确认产线模式");
         }
         //清除资源锁定
-        if(taskNode.getInterfaceType().equals("3")){
+        if(taskNode.getInterfaceType().equals("03")){
             //AGV资源释放
             Map agvData = JSONObject.parseObject(jsonParam,Map.class);
             R addHikTask = agvHikOrderInfoService.addHikTask(agvData);

+ 6 - 1
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/HikAgvControl.java

@@ -187,7 +187,12 @@ public class HikAgvControl extends SuperController<AgvHikOrderInfoService, Long,
         }else{
             // TODO 记录AGV任务异常信息并告警
             Object autoNodeTaskInfo = redisTemplate.opsForValue().get(taskCode);
-            JSONObject autoNodeTaskInfoObj =(autoNodeTaskInfo==null?null:JSONObject.parseObject(autoNodeTaskInfo.toString()));
+
+            String taskId = autoNodeTaskInfo.toString().split("-")[0];
+            String taskNodeId = autoNodeTaskInfo.toString().split("-")[1];
+            JSONObject autoNodeTaskInfoObj = new JSONObject();
+            autoNodeTaskInfoObj.put("taskId",taskId);
+            autoNodeTaskInfoObj.put("taskNodeId",taskNodeId);
             redisTemplate.delete(taskCode);
             // TODO 后续改成0失败
             autoNodeTaskInfoObj.put("code","0");