Browse Source

抽检时一个工序存在多次agv调度,agv动态位子判断逻辑修改,节点回调前先判断是否在排产,排产时等待排产完成继续执行

yejian 3 năm trước cách đây
mục cha
commit
a64ba64abc

+ 10 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/TaskNodeServiceImpl.java

@@ -1305,6 +1305,16 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
         String msg = bean.getMsg();
         String taskNodeId = bean.getTaskNodeId() == null ? "" : bean.getTaskNodeId().toString();
 
+        // begin add by yejian on 20220503 for yj on 如果排产中先等待排产完成后继续执行
+        while(null != msgUtil.redis_get(YunjianConstant.YUNJIAN_SHEDULE_FLAG)){
+            try {
+                Thread.sleep(3000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        // end add by yejian on 20220503 for yj on 如果排产中先等待排产完成后继续执行
+
         //接口不让传多余参数,只能从缓存传
         String jsonParam = msgUtil.redis_get(YunjianConstant.YUNJIAN_CALLBACK_PARAM+"_" + taskNodeId)==null?"":msgUtil.redis_get(YunjianConstant.YUNJIAN_CALLBACK_PARAM+"_" + taskNodeId).toString();
 

+ 45 - 10
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/service/impl/RobotNodeServiceImpl.java

@@ -530,22 +530,22 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
         if("1".equals(findAgvFlag)){//需要提前锁定下个接驳位
 
-            TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
-
+            // begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
+            // 先找到处理节点下一节点agv起点地址
+            TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);;
             //获取接驳位。
             Map map = storgeService.getPlateStorgeByNo(zZone);
             targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
             String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
-            //对面产线接驳位不为空
-            TaskNode nextOperationFirstTaskNode = taskNodeService.getNextNTaskNode(lastOperationTaskNode,1);
-            ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,nextOperationFirstTaskNode.getResourceId()));
+            // 在向下找agv终点位子
+            // 下一个节点机器人所属产线
+            TaskNode afterLastAgvTaskNode = taskNodeService.getNextNTaskNode(lastAgvTaskNode,1);
+            ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,afterLastAgvTaskNode.getResourceId()));
             //获取产线ID
             zoneId = zoneProductionresource.getZoneId();
             zZone = zoneService.getById(zoneId);
-
             String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
             List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
-
             if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
                 ProductionresourcePosition position = jbwBList.get(0);
                 agvEndStationStorge =storgeService.getById(position.getStorgeId());
@@ -556,13 +556,48 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                 //更新到targetresourceid
 //                TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
                 taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
-                lastOperationTaskNode.setTargetResourceId(position.getResourceId());
-                lastOperationTaskNode.setResourceId(taskNode.getTargetResourceId());
+                lastAgvTaskNode.setTargetResourceId(position.getResourceId());
+                lastAgvTaskNode.setResourceId(taskNode.getTargetResourceId());
                 taskNodeService.updateById(taskNode);
-                taskNodeService.updateById(lastOperationTaskNode);
+                taskNodeService.updateById(lastAgvTaskNode);
             }else{//需要放到线边库
                 xbkFlag = "1";
             }
+
+            // end modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
+//            TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
+
+//            //获取接驳位。
+//            Map map = storgeService.getPlateStorgeByNo(zZone);
+//            targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
+//            String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
+//            //对面产线接驳位不为空
+//            TaskNode nextOperationFirstTaskNode = taskNodeService.getNextNTaskNode(lastOperationTaskNode,1);
+//            ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,nextOperationFirstTaskNode.getResourceId()));
+//            //获取产线ID
+//            zoneId = zoneProductionresource.getZoneId();
+//            zZone = zoneService.getById(zoneId);
+//
+//            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
+//            List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
+//
+//            if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
+//                ProductionresourcePosition position = jbwBList.get(0);
+//                agvEndStationStorge =storgeService.getById(position.getStorgeId());
+//
+//                returnMap.put("store",targetStorge);
+//                returnMap.put("targetxbk","0");
+//
+//                //更新到targetresourceid
+////                TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+//                taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
+//                lastOperationTaskNode.setTargetResourceId(position.getResourceId());
+//                lastOperationTaskNode.setResourceId(taskNode.getTargetResourceId());
+//                taskNodeService.updateById(taskNode);
+//                taskNodeService.updateById(lastOperationTaskNode);
+//            }else{//需要放到线边库
+//                xbkFlag = "1";
+//            }
         }else {
             //
             if(bomProcedureType.equals("下料")){