فهرست منبع

机器人缓存位逻辑

yejian 3 سال پیش
والد
کامیت
512b8a7608

+ 3 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/DemoLine/YunjianConstant.java

@@ -182,6 +182,9 @@ public interface YunjianConstant {
     //示范线传参常量-----线边库作为MQ的情形
     String YUNJIAN_XBKFLAG ="YUNJIAN_XBKFLAG";
 
+    // 机器人缓存位线边库逻辑标志
+    String YUNJIAN_HCW_XBKFLAG ="YUNJIAN_HCW_XBKFLAG";
+
     //示范线传参常量
     String DEMOLINE_XBK_TYPE ="DEMOLINE_XBK_TYPE";
 

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/aps/algorithm/ga/GAScheduler.java

@@ -81,7 +81,7 @@ public class GAScheduler {
 			System.out.println("[" + operation.getCompleteBatchNo() + "]" + operation.getProcedureNo() + "[" + operation.getMachineId() + "]" + ":"+ DateUtil.format(new Date(operation.getStart()),"yyyy-MM-dd HH:mm:ss") + "-" + DateUtil.format(new Date(operation.getFinish()),"yyyy-MM-dd HH:mm:ss"));
 		}
 		System.out.println(JSONObject.toJSONString(instance.getPartMap()));
-		System.out.println("调度用时:" + (end - start) / 1000.0 / 60.0 + "分钟");
+		System.out.println("调度用时:" + Double.valueOf((end - start) / 1000.0) + "秒");
 	}
 
 }

+ 16 - 6
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/edgeLibrary/service/impl/StorgeServiceImpl.java

@@ -266,7 +266,8 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
     public Map getPlateStorgeByNo(ZZone zZone, ZZone bomzZone) {
         //返回的map
         Map returnMap = new HashMap();
-
+        Long tempAgvTaskEndResourceId = null;
+        Long tempAgvTaskStartResourceId= null;
         String tempAgvTaskEndPoint = "";
         String tempAgvTaskStartPoint = "";
         Storge tempAgvTaskStartPointStorge = null;
@@ -345,6 +346,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
                 log.info("起点接驳位不可用,查找无托盘的起点接驳位{}",productionresourcePositions.toString());
                 if(productionresourcePositions.size() > 0){
                     ProductionresourcePosition productionresourcePosition = productionresourcePositions.get(0);
+                    tempAgvTaskEndResourceId = productionresourcePosition.getResourceId();
                     tempAgvTaskEndPoint = productionresourcePosition.getCode();
                     tempAgvTaskEndPointStorge = baseMapper.selectById(productionresourcePosition.getStorgeId());
                 }
@@ -359,6 +361,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
             log.info("起点接驳位不可用,查找无托盘的起点接驳位{}",productionresourcePositions.toString());
             if(productionresourcePositions.size() > 0){
                 ProductionresourcePosition productionresourcePosition = productionresourcePositions.get(0);
+                tempAgvTaskEndResourceId = productionresourcePosition.getResourceId();
                 tempAgvTaskEndPoint = productionresourcePosition.getCode();
                 tempAgvTaskEndPointStorge = baseMapper.selectById(productionresourcePosition.getStorgeId());
             }
@@ -394,11 +397,15 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
                         List<ProductionresourcePosition> list = tempAgvStartMap.get(key);
                         // 无托板
                         if(list!=null && list.size()==1 && StringUtils.isBlank(tempAgvTaskStartPoint)){
+                            ProductionresourcePosition productionresourcePosition = list.get(0);
                             if(zoneType.equals(ParameterKey.ZONE_SFX)){
-                                if(list.get(0).getCode().equals(DictionaryKey.SFX_JBW_RELATION.get(tempAgvTaskEndPoint))){
+                                if(productionresourcePosition.getCode().equals(DictionaryKey.SFX_JBW_RELATION.get(tempAgvTaskEndPoint))){
                                     // 必须是存放了1个托板
-                                    tempAgvTaskStartPoint = list.get(0).getCode();
-                                    tempAgvTaskStartPointStorge = baseMapper.selectById(list.get(0).getStorgeId());
+                                    tempAgvTaskStartResourceId = productionresourcePosition.getResourceId();
+                                    tempAgvTaskStartPoint = productionresourcePosition.getCode();
+                                    tempAgvTaskStartPointStorge = baseMapper.selectById(productionresourcePosition.getStorgeId());
+                                    returnMap.put("tempAgvTaskStartResourceId",tempAgvTaskStartResourceId);
+                                    returnMap.put("tempAgvTaskEndResourceId",tempAgvTaskEndResourceId);
                                     returnMap.put("tempAgvTaskStartPoint",tempAgvTaskStartPoint);
                                     returnMap.put("tempAgvTaskEndPoint",tempAgvTaskEndPoint);
                                     returnMap.put("tempAgvTaskStartPointStorge",tempAgvTaskStartPointStorge);
@@ -406,8 +413,11 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
                                 }
                             }else{
                                 // 必须是存放了1个托板
-                                tempAgvTaskStartPoint = list.get(0).getCode();
-                                tempAgvTaskStartPointStorge = baseMapper.selectById(list.get(0).getStorgeId());
+                                tempAgvTaskStartResourceId = productionresourcePosition.getResourceId();
+                                tempAgvTaskStartPoint = productionresourcePosition.getCode();
+                                tempAgvTaskStartPointStorge = baseMapper.selectById(productionresourcePosition.getStorgeId());
+                                returnMap.put("tempAgvTaskStartResourceId",tempAgvTaskStartResourceId);
+                                returnMap.put("tempAgvTaskEndResourceId",tempAgvTaskEndResourceId);
                                 returnMap.put("tempAgvTaskStartPoint",tempAgvTaskStartPoint);
                                 returnMap.put("tempAgvTaskEndPoint",tempAgvTaskEndPoint);
                                 returnMap.put("tempAgvTaskStartPointStorge",tempAgvTaskStartPointStorge);

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderDetailInfoServiceImpl.java

@@ -74,7 +74,7 @@ public class AgvHikOrderDetailInfoServiceImpl extends SuperCacheServiceImpl<AgvH
         // sleep10秒
         log.info("异步模拟agv回到参数data=",data);
         try {
-            Thread.sleep(10000);
+            Thread.sleep(60000);
             // 组装数据模拟agv任务完成返回
             JSONObject jsonObject = JSONObject.parseObject(data);
             String taskCode = jsonObject.getString("taskCode");

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

@@ -191,6 +191,7 @@ public class TaskWorkNode {
                     msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + operationTaskNodeId);
                     msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + operationTaskNodeId);
                     msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + operationTaskNodeId);
+                    msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + operationTaskNodeId);
                     msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + operationTaskNodeId);
                     msgUtil.redis_del(CacheKey.TASK_CURRENT_NODE + "_" +  + operationTaskNodeId);
                 }
@@ -318,8 +319,10 @@ public class TaskWorkNode {
 
                     //运行条件验证
                     conMap = checkCon(taskNode, tTask, queryMap);
+                    logger.info("节点{}检查资源返回{}",taskNode.getId(), conMap);
                     msgUtil.redis_set_map(CacheKey.TASK_CURRENT_NODE_CONDITION + "_" + taskNode.getId(), conMap);
 
+
                     if((boolean)conMap.get("result")){
                         if ("03".equals(taskNode.getInterfaceType())) {
                             // 执行线边库操作
@@ -365,7 +368,7 @@ public class TaskWorkNode {
                         } else {
                             if (!"04".equals(taskNode.getInterfaceType())) {
                                 // 判断当前工序是三坐标或者前一工序是三坐标,分别将三坐标的放和三坐标下一工序的取不调用ccs接口
-                                String method = conMap.get("method").toString();
+                                String method = conMap.get("method")==null?null:conMap.get("method").toString();
                                 ResourceBusiness resourceBusiness = resourceBusinessService.getById(tTask.getResourceBusinessId());
                                 TaskNode beforTaskNode = null;
                                 TTask beforTask = null;
@@ -376,37 +379,53 @@ public class TaskWorkNode {
                                     beforResourceBusiness = resourceBusinessService.getById(beforTask.getResourceBusinessId());
                                 }
 
-                                if("打标业务".equals(resourceBusiness.getName()) && "SendServoStacker".equals(method)){
-                                    specialCallBackMyselfFlag = true;
-                                    String jsonParam = getRequestParam(conMap);
-                                    //缓存执行当前节点传参
-                                    msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
-                                    JSONObject ret = new JSONObject();
-                                    ret.put("result","true");
-                                    returnData = ret.toJSONString();
-                                }else if(taskNode.getCompleteBatchSort()!=1 && "3".equals(beforTask.getStatus()) && resourceBusiness.getName().contains("下料业务") && "GetServoStacker".equals(method) && "打标业务".equals(beforResourceBusiness.getName())){
-                                    specialCallBackMyselfFlag = true;
-                                    String jsonParam = getRequestParam(conMap);
-                                    //缓存执行当前节点传参
-                                    msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
-                                    JSONObject ret = new JSONObject();
-                                    ret.put("result","true");
-                                    returnData = ret.toJSONString();
+                                // begin add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
+
+                                logger.info("节点{}执行缓存位线边库逻辑无需再次取放标志{}",taskNode.getId(),conMap.get(YunjianConstant.YUNJIAN_HCW_XBKFLAG));
+                                if(conMap.containsKey(YunjianConstant.YUNJIAN_HCW_XBKFLAG)){
+                                    // 将消息重新推入消息对列执行缓存为线边库逻辑,直接移动到设备位子从机器人缓存位拿
+                                    logger.info("节点{}执行缓存位线边库逻辑无需再次取放",taskNode.getId());
+                                    List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
+                                    List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
+                                    if (CollectionUtil.isNotEmpty(storgeList)) {
+                                        logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
+                                        storgeService.unlockStorgeList(storgeList);
+                                    }
+                                    msgUtil.pushToNextMq(taskNode,3);
+
                                 }else{
-                                    //组装接口参数
-                                    HttpHeaders headers = new HttpHeaders();
-                                    headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
-                                    String jsonParam = getRequestParam(conMap);
-                                    //缓存执行当前节点传参
-                                    msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
-                                    HttpEntity<String> formEntity = new HttpEntity<String>(jsonParam, headers);
-
-                                    //动态调用接口和新增指令执行时间
-                                    log.setZoneId(zZone.getId()).setMethod(method).setExecuteTime(new Date());
-                                    String instructionUrl = conMap.get("instructionUrl") + "/api/" + conMap.get("method").toString();
-                                    logger.info("instructionUrl=" + instructionUrl);
-                                    logger.info("jsonParam=" + jsonParam);
-                                    returnData = restTemplate.postForObject(instructionUrl, formEntity, String.class);
+                                    if("打标业务".equals(resourceBusiness.getName()) && "SendServoStacker".equals(method)){
+                                        specialCallBackMyselfFlag = true;
+                                        String jsonParam = getRequestParam(conMap);
+                                        //缓存执行当前节点传参
+                                        msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
+                                        JSONObject ret = new JSONObject();
+                                        ret.put("result","true");
+                                        returnData = ret.toJSONString();
+                                    }else if(taskNode.getCompleteBatchSort()!=1 && "3".equals(beforTask.getStatus()) && resourceBusiness.getName().contains("下料业务") && "GetServoStacker".equals(method) && "打标业务".equals(beforResourceBusiness.getName())){
+                                        specialCallBackMyselfFlag = true;
+                                        String jsonParam = getRequestParam(conMap);
+                                        //缓存执行当前节点传参
+                                        msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
+                                        JSONObject ret = new JSONObject();
+                                        ret.put("result","true");
+                                        returnData = ret.toJSONString();
+                                    }else{
+                                        //组装接口参数
+                                        HttpHeaders headers = new HttpHeaders();
+                                        headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
+                                        String jsonParam = getRequestParam(conMap);
+                                        //缓存执行当前节点传参
+                                        msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS + "_" + taskNode.getId(), jsonParam);
+                                        HttpEntity<String> formEntity = new HttpEntity<String>(jsonParam, headers);
+
+                                        //动态调用接口和新增指令执行时间
+                                        log.setZoneId(zZone.getId()).setMethod(method).setExecuteTime(new Date());
+                                        String instructionUrl = conMap.get("instructionUrl") + "/api/" + conMap.get("method").toString();
+                                        logger.info("instructionUrl=" + instructionUrl);
+                                        logger.info("jsonParam=" + jsonParam);
+                                        returnData = restTemplate.postForObject(instructionUrl, formEntity, String.class);
+                                    }
                                 }
                             }
                         }
@@ -813,14 +832,6 @@ public class TaskWorkNode {
         String paramKey = zone.getNo() + "_plc";
         String instructionUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(paramKey).toString());
 
-
-//        // TODO 后续删除代码,目前条用模拟接口
-//        if("framework".equals(zone.getNo())){
-//            instructionUrl = instructionUrl.replace("8086","8083");
-//        }else{
-//            instructionUrl = instructionUrl.replace("8081","8083");
-//        }
-
         int count = Integer.parseInt(dataMap.get(taskNode.getId().toString() + "count") == null ? "0" : dataMap.get(taskNode.getId().toString() + "count").toString());
         BomProcedure bomProcedure = bomProcedureMapper.selectOne(Wraps.<BomProcedure>lbQ().eq(BomProcedure::getId,task.getProcedureId()));
         BBom bom = bBomMapper.selectById(task.getBomId());
@@ -910,14 +921,6 @@ public class TaskWorkNode {
 
                         dataMap.put("method", "MoveRobotPosition");
                         dataMap.put("result", true);
-
-                        // begin modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
-                        // TODO 后续可改成信号对接判断,先如果返回失败释放资源进去队列重新轮训
-                        // 返回内容中记录当前任务占用资源
-//                        String occupyResources = jqrStorge.getId() + "," + hcwStorge.getId() + "," + targetStorge.getId();
-//                        dataMap.put(DictionaryType.OCCUPY_RESOURCE + taskNode.getId()  ,occupyResources);
-                        // end modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
-
                     }else{
                         dataMap.put("result", false);
                     }
@@ -956,13 +959,70 @@ public class TaskWorkNode {
                 dataMap.put("result", true);
             }
             if (count == 3) {
-                targetStorge = msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId())==null?null:(Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId());
-                Map locationMap = new HashMap();
-                locationMap.put("location", targetStorge.getPointId());
-                dataMap.put("data", locationMap);
+                // begin add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
+                TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
+                String targetHcwXbk =(String)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + taskNode.getId());
+                logger.info("节点{}线边库逻辑缓存位处理{}",taskNode.getId(),targetHcwXbk);
+
+                // 放在机器人缓存为暂存线边库逻辑,无需再次移动取放
+                if("1".equals(targetHcwXbk)){
+                    //判断机器人是否为空
+                    robotList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[]{taskNode.getResourceId().toString()});
+                    Map<String, List<ProductionresourcePosition>> jqrMap = robotList.stream().collect(groupingBy(ProductionresourcePosition::getPointId));
+                    Storge startStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
+
+                    ProductionresourcePosition po = logical(robotList,dataMap);
+
+                    //机器人手抓没被锁定,并且有空闲未知
+                    if (po != null) {
+                        // 线边库轮询判断后续节点目标地址是否时接驳位
+                        String findAgvFlag = "0";
+
+                        if("1".equals(beforTaskNode.getFindAgvFlag()) && null == taskNode.getTargetResourceId()){
+                            findAgvFlag = "1";
+                        }
+                        logger.info("节点{}findAgvFlag={}",taskNode.getId(), findAgvFlag);
+                        Map returnMap = getTargetStorge(taskNode, findAgvFlag, zone,bomProcedure.getType(),bomzZone);
+                        targetStorge = returnMap.get("store") == null ? null : (Storge) returnMap.get("store");
+
+                        if(null != targetStorge){
+                            jqrStorge = storgeService.getById(jqrMap.get(DemoLineConstant.DEMOLINE_RJQR_ZS).get(0).getStorgeId());
+                            jqrStorge.setCompleteBatchNo(task.getCompleteBatchNo());
+                            storgeService.lockStorge(jqrStorge, taskNode.getId());
+
+                            //锁定目标库位
+                            targetStorge.setCompleteBatchNo(task.getCompleteBatchNo());
+                            storgeService.lockStorge(targetStorge, taskNode.getId());
+
+                            //抓手缓存
+                            msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + taskNode.getId(), jqrStorge, 1, TimeUnit.DAYS);
+                            //缓存位缓存
+                            msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + taskNode.getId(), startStore, 1, TimeUnit.DAYS);
+                            //目标缓存
+                            msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId(), targetStorge, 1, TimeUnit.DAYS);
+
+                            Map locationMap = new HashMap();
+                            locationMap.put("location", targetStorge.getPointId());
+                            dataMap.put("data", locationMap);
+
+                            dataMap.put("method", "MoveRobotPosition");
+                            dataMap.put("result", true);
+                        }else{
+                            dataMap.put("result", false);
+                        }
+                    }else{
+                        dataMap.put("result", false);
+                    }
+                }else{
+                    targetStorge = msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId())==null?null:(Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId());
+                    Map locationMap = new HashMap();
+                    locationMap.put("location", targetStorge.getPointId());
+                    dataMap.put("data", locationMap);
+
+                    dataMap.put("method", "MoveRobotPosition");
+                    dataMap.put("result", true);
+                }
 
-                dataMap.put("method", "MoveRobotPosition");
-                dataMap.put("result", true);
             } else if (count == 4) {//从缓存位拿出来
                 dataMap.put("method", "GetFlexibleWire");
                 Storge hcwStorge = (Storge) msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + taskNode.getId());
@@ -993,7 +1053,8 @@ public class TaskWorkNode {
                 dataMap.put("fromStorge", handStorge);
                 dataMap.put("result", true);
             }
-        } else {//没缓存位的机器人,伺服陀机
+        } else {
+            //没缓存位的机器人,伺服陀机
 
             if (count == 0) {//第一步的时候锁定资源
                 //目标地址和类型

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

@@ -1853,6 +1853,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
                 msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + operationTaskNodeId);
                 msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + operationTaskNodeId);
                 msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + operationTaskNodeId);
+                msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + operationTaskNodeId);
                 msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + operationTaskNodeId);
                 msgUtil.redis_del(CacheKey.TASK_CURRENT_NODE + "_" + operationTaskNodeId);
             }

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

@@ -375,7 +375,6 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                     log.info("节点{}查找物料所在位子{}",taskNode.getId(),startStore.getPointId());
                     // begin modify by yejian on 20220510 for 条件检验先检查机器人,在检查目标库位
                     ProductionresourcePosition po = logical(robotList,flikustockInfos,taskNode);
-                    log.info("节点{}检查机器人资源{}点位返回{}",taskNode.getId(),po.getResourceId(),po.getPointId());
                     if (po != null) {
                         // 机器人可用,判断目标地址
                         // 判断同一资源是否有优先级更高的任务需要执行,如果有重新进入队列
@@ -396,6 +395,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
                             //目标地址和类型
                             Storge targetStorge = returnMap.get("store")==null?null:(Storge)returnMap.get("store");
+                            Long targetStorgeResourceId= returnMap.get("storeResourceId")==null?null:Long.valueOf(returnMap.get("storeResourceId").toString());
                             log.info("节点{}检查目标库位是否满足返回{}",taskNode.getId(),targetStorge.getPointId());
                             if(null != targetStorge){
 
@@ -409,9 +409,20 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                                 hcwStorge.setCompleteBatchNo(task.getCompleteBatchNo());
                                 storgeService.lockStorge(hcwStorge, nextTaskNode.getId());
 
-                                //锁定目标库位
-                                targetStorge.setCompleteBatchNo(task.getCompleteBatchNo());
-                                storgeService.lockStorge(targetStorge, nextTaskNode.getId());
+                                // add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
+                                List<ProductionresourcePosition> robotHcwList = robotList.stream().filter(p -> !p.getPointId().equals(DemoLineConstant.DEMOLINE_RJQR_ZS)).collect(Collectors.toList());
+
+                                log.info("节点{}检查机器人缓存位库位数{}",taskNode.getId(),robotHcwList.size());
+                                nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+                                if (!"1".equals(taskNode.getFindAgvFlag()) && !targetStorgeResourceId.equals(nextTaskNode.getTargetResourceId()) && robotHcwList.size() > 1){
+                                    targetStorge = hcwStorge;
+                                    msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + nextTaskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
+                                }else{
+                                    //锁定目标库位
+                                    targetStorge.setCompleteBatchNo(task.getCompleteBatchNo());
+                                    storgeService.lockStorge(targetStorge, nextTaskNode.getId());
+                                }
+                                // 放入线边库或机器人缓存位
                                 log.info("节点{}提前占用机器人抓手{},缓存位{},目标库位{}",taskNode.getId(),jqrStorge.getPointId(),hcwStorge.getPointId(),targetStorge.getPointId());
                                 //抓手缓存
                                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + nextTaskNode.getId(), jqrStorge, 1, TimeUnit.DAYS);
@@ -432,13 +443,6 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                                 dataMap.put("data", locationMap);
                                 dataMap.put("method", "MoveRobotPosition");
                                 dataMap.put("result", true);
-//                            dataMap.put("bizType", targetxbk);
-                                // begin modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
-                                // TODO 后续可改成信号对接判断,先如果返回失败释放资源进去队列重新轮训
-                                // 返回内容中记录当前任务占用资源
-//                            String occupyResources = jqrStorge.getId() + "," + hcwStorge.getId() + "," + targetStorge.getId();
-//                            dataMap.put(DictionaryType.OCCUPY_RESOURCE+taskNode.getId(),occupyResources);
-                                // end modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
                             }else{
                                 dataMap.put("result", false);
                             }
@@ -478,6 +482,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
                     dataMap.put("toStorge", hcwStorge);
                     dataMap.put("result", true);
+
                 }
             }else if (BizConstant.ROBOT_TYPE_NOCACHE.equals(zoneService.getRobotTypebyZone(zoneName))) {
                 TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode, 1);
@@ -486,7 +491,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                 if(CollectionUtil.isNotEmpty(flikustockInfos)){//
                     startStore = storgeMapper.selectById(flikustockInfos.get(0).getStorgeId());
                 }
-                if(zZone.getName().equals("质量中心")){
+                if("质量中心".equals(zZone.getName())){
                     dataMap.put("method", "GetQualityCenter");
                 }else{
                     dataMap.put("method", "GetServoStacker");
@@ -556,15 +561,8 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                                 //目标是线边库
                                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + taskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
                                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + nextTaskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
-                                dataMap.put("result", true);
-
-                                // begin modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
-                                // TODO 后续可改成信号对接判断,先如果返回失败释放资源进去队列重新轮训
-                                // 返回内容中记录当前任务占用资源
-//                            String occupyResources = jqrStorge.getId() + "," + targetStorge.getId();
-//                            dataMap.put(DictionaryType.OCCUPY_RESOURCE+taskNode.getId(),occupyResources);
-                                // end modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
 
+                                dataMap.put("result", true);
                             }else{
                                 dataMap.put("result", false);
                             }
@@ -579,51 +577,62 @@ public class RobotNodeServiceImpl implements NodeOperationService {
             //执行到第几步
             dataMap.put(taskNode.getId().toString()+"count",count);
             if(BizConstant.ROBOT_TYPE_CACHE.equals(zoneService.getRobotTypebyZone(zoneName))){
-                dataMap.put(YunjianConstant.YUNJIAN_ROBORT_CACHE_FLAG, "1");
-                if(count==0) {
-                    Map locationMap = new HashMap();
-                    locationMap.put("location",targetStorge.getPointId());
-                    dataMap.put("data", locationMap);
-
-
-                    dataMap.put("method", "MoveRobotPosition");
-                }else if(count == 1){//从缓存位拿出来
-                    dataMap.put("method", "GetFlexibleWire");
-                    Storge hcwStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + taskNode.getId());
-
-                    Map locationMap = new HashMap();
-                    locationMap.put("location",hcwStorge.getPointId());
-                    dataMap.put("data", locationMap);
-
-                    dataMap.put("fromStorge", hcwStorge);
-                    Storge handStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + taskNode.getId());
-                    dataMap.put("toStorge", handStorge);
-                    //出入库类型
-                    dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
-                }else if(count == 2){
-                    dataMap.put("method", "SendFlexibleWire");
-                    //出入库类型
-                    dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
-
-                    Map locationMap = new HashMap();
-                    locationMap.put("location",targetStorge.getPointId());
-                    dataMap.put("data", locationMap);
-
-                    dataMap.put("toStorge", targetStorge);
 
-                    Storge handStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + taskNode.getId());
-                    dataMap.put("fromStorge", handStorge);
-                    String targetxbk =(String)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + taskNode.getId());
-                    if("1".equals(targetxbk)){
-                        dataMap.put(YunjianConstant.YUNJIAN_XBKFLAG, YunjianConstant.YUNJIAN_XBKFLAG);
-                        //把计数去掉,从线边库开始重新计数
-                        dataMap.remove(taskNode.getId().toString()+"count");
+                // begin add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
+                String targetHcwXbk =(String)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + taskNode.getId());
+                log.info("节点{}放逻辑判断{}",taskNode.getId(),targetHcwXbk);
+                if("1".equals(targetHcwXbk)){
+                    log.info("节点{}执行暂存缓存为线边库逻辑",taskNode.getId());
+                    dataMap.put(YunjianConstant.YUNJIAN_XBKFLAG, targetHcwXbk);
+                    dataMap.put(YunjianConstant.YUNJIAN_HCW_XBKFLAG, targetHcwXbk);
+                }else{
+                    dataMap.put(YunjianConstant.YUNJIAN_ROBORT_CACHE_FLAG, "1");
+                    if(count==0) {
+                        Map locationMap = new HashMap();
+                        locationMap.put("location",targetStorge.getPointId());
+                        dataMap.put("data", locationMap);
+
+
+                        dataMap.put("method", "MoveRobotPosition");
+                    }else if(count == 1){//从缓存位拿出来
+                        dataMap.put("method", "GetFlexibleWire");
+                        Storge hcwStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + taskNode.getId());
+
+                        Map locationMap = new HashMap();
+                        locationMap.put("location",hcwStorge.getPointId());
+                        dataMap.put("data", locationMap);
+
+                        dataMap.put("fromStorge", hcwStorge);
+                        Storge handStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + taskNode.getId());
+                        dataMap.put("toStorge", handStorge);
+                        //出入库类型
+                        dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
+                    }else if(count == 2){
+                        dataMap.put("method", "SendFlexibleWire");
+                        //出入库类型
+                        dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
+
+                        Map locationMap = new HashMap();
+                        locationMap.put("location",targetStorge.getPointId());
+                        dataMap.put("data", locationMap);
+
+                        dataMap.put("toStorge", targetStorge);
+
+                        Storge handStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + taskNode.getId());
+                        dataMap.put("fromStorge", handStorge);
+                        String targetxbk =(String)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + taskNode.getId());
+                        if("1".equals(targetxbk)){
+                            dataMap.put(YunjianConstant.YUNJIAN_XBKFLAG, YunjianConstant.YUNJIAN_XBKFLAG);
+                            //把计数去掉,从线边库开始重新计数
+                            dataMap.remove(taskNode.getId().toString()+"count");
+                        }
                     }
                 }
+                // end add by yejian on 20220819 for 将机器人上的缓存位利用历来:如果缓存位数量n-1 >= 1,则可以将工件不放到线边库,直接放在缓存位上暂存后轮训线边库逻辑
             }else if (BizConstant.ROBOT_TYPE_NOCACHE.equals(zoneService.getRobotTypebyZone(zoneName))) {
                 Storge currentStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
 
-                if(zZone.getName().equals("质量中心")){
+                if("质量中心".equals(zZone.getName())){
                     dataMap.put("method", "SendQualityCenter");
                 }else{
                     dataMap.put("method", "SendServoStacker");
@@ -730,13 +739,15 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                     taskNodeService.updateById(lastAgvTaskNode);
 //                    log.info("节点{},更新相应节点接驳位信息完成",taskNode.getId());
                 }
-
+                returnMap.put("storeResourceId",targetResourceId);
                 returnMap.put("store",targetStorge);
                 returnMap.put("targetxbk","0");
 
             }else{
                 //需要放到线边库
                 // begin add by yejian on 20220802 for 调度空托盘流转
+                Long tempAgvTaskStartResourceId = map.get("tempAgvTaskStartResourceId")== null?null:Long.valueOf(map.get("tempAgvTaskStartResourceId").toString());
+                Long tempAgvTaskEndResourceId = map.get("tempAgvTaskEndResourceId")== null?null:Long.valueOf(map.get("tempAgvTaskEndResourceId").toString());
                 String tempAgvTaskStartPoint = map.get("tempAgvTaskStartPoint") == null?null:(String)map.get("tempAgvTaskStartPoint");
                 String tempAgvTaskEndPoint = map.get("tempAgvTaskEndPoint") == null?null:(String)map.get("tempAgvTaskEndPoint");
                 Storge tempAgvTaskStartPointStorge = map.get("tempAgvTaskStartPointStorge") == null?null:(Storge)map.get("tempAgvTaskStartPointStorge");
@@ -755,8 +766,19 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                     JSONObject agvParam = new JSONObject();
                     agvParam.putAll(agvData);
                     String zoneType = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.ZONE_TYPE).toString());
+
+                    // 锁定预占资源
                     storgeService.lockStorge(tempAgvTaskStartPointStorge, null);
                     storgeService.lockStorge(tempAgvTaskEndPointStorge, null);
+
+                    // 更新接驳位信息
+                    taskNode.setTargetResourceId(tempAgvTaskEndResourceId);
+                    lastAgvTaskNode.setResourceId(tempAgvTaskEndResourceId);
+                    lastAgvTaskNode.setTargetResourceId(tempAgvTaskStartResourceId);
+                    taskNodeService.updateById(taskNode);
+                    taskNodeService.updateById(lastAgvTaskNode);
+                    log.info("节点{}更新调度agv任务起点{},终点{}",taskNode.getId(),tempAgvTaskEndResourceId,tempAgvTaskStartResourceId);
+
                     if(zoneType.equals(ParameterKey.ZONE_SFX)){
                         agvData.put("transferType","agv");
                         R addAgvTask = externalApiService.processTransferJob(agvData);
@@ -768,46 +790,12 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
                 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 {
             // begin modify by yejian on 20220515 for 下料库位问题修改
             TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
             TaskNode baitingTaskNode = taskNodeService.getNextNTaskNode(beforTaskNode,-1);
-            if(bomProcedureType.equals("下料")  && "04".equals(baitingTaskNode.getInterfaceType())){
+            if("下料".equals(bomProcedureType) && "04".equals(baitingTaskNode.getInterfaceType())){
                 // 下料特殊处理,动态查找可用立库位子存放下料后的子盘夹具
                 Long storgeId = getLikuStockInList();
                 targetStorge = storgeService.getById(storgeId);
@@ -819,6 +807,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                     targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
                     if(CollectionUtil.isNotEmpty(targetList)){
                         targetStorge = storgeService.getById(targetList.get(0).getStorgeId());
+                        returnMap.put("storeResourceId",targetList.get(0).getResourceId());
                         returnMap.put("store",targetStorge);
                         returnMap.put("targetxbk","0");
 
@@ -851,6 +840,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
             if(CollectionUtil.isNotEmpty(xbkList)){
                 ProductionresourcePosition position = xbkList.get(0);
                 targetStorge = storgeService.getById(position.getStorgeId());
+                returnMap.put("storeResourceId",position.getResourceId());
                 returnMap.put("store",targetStorge);
                 returnMap.put("targetxbk","1");
             }

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

@@ -255,6 +255,7 @@ public class MsgUtil implements ApplicationContextAware {
                         msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + operationTaskNodeId);
                         msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + operationTaskNodeId);
                         msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + operationTaskNodeId);
+                        msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + operationTaskNodeId);
                         msgUtil.redis_del(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + operationTaskNodeId);
                         msgUtil.redis_del(CacheKey.TASK_CURRENT_NODE + "_" + operationTaskNodeId);
                     }
@@ -325,6 +326,18 @@ public class MsgUtil implements ApplicationContextAware {
         }
     }
 
+    /**
+     * 缓存位线边库逻辑消息推送
+     * @param taskNode
+     * @param count
+     */
+    public void  pushToNextMq(TaskNode taskNode,int count){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("taskNodeId",taskNode.getId().toString());
+        jsonObject.put(taskNode.getId().toString()+"count",count);
+        jsonObject.put("bizType",BizConstant.MQ_TASK_NODE_TYPE_XBK);
+        dynamicRabbitMq.sendMsg(taskNode.getResourceId().toString(),jsonObject.toString());
+    }
 
     public void pushDetailTask(TTask task) {
         Map<String, Object> rmap = new HashMap<>();

+ 8 - 8
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/AgvControl.java

@@ -176,14 +176,14 @@ public class AgvControl {
                     ProductionresourcePosition agvEndResourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,agvEndResource.getId()));
 
 
-                    // 更新节点agv接驳位信息,agv回调后更新后续agv流转所用的接驳位设备id
-                    TaskNode taskNode = taskNodeService.getById(agvOrderInfo.getTaskNodeId());
-                    TaskNode nextOneTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
-                    taskNode.setTargetResourceId(agvEndResource.getId());
-                    nextOneTaskNode.setResourceId(agvEndResource.getId());
-                    nextOneTaskNode.setTargetResourceId(agvStartResource.getId());
-                    taskNodeService.updateById(taskNode);
-                    taskNodeService.updateById(nextOneTaskNode);
+//                    // 更新节点agv接驳位信息,agv回调后更新后续agv流转所用的接驳位设备id
+//                    TaskNode taskNode = taskNodeService.getById(agvOrderInfo.getTaskNodeId());
+//                    TaskNode nextOneTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+//                    taskNode.setTargetResourceId(agvEndResource.getId());
+//                    nextOneTaskNode.setResourceId(agvEndResource.getId());
+//                    nextOneTaskNode.setTargetResourceId(agvStartResource.getId());
+//                    taskNodeService.updateById(taskNode);
+//                    taskNodeService.updateById(nextOneTaskNode);
 
                     // 解锁预占锁定
                     Map updateLockStatusParams =  new HashMap();

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

@@ -192,14 +192,14 @@ public class HikAgvControl extends SuperController<AgvHikOrderInfoService, Long,
                     ProductionresourcePosition agvStartResourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,agvStartResource.getId()));
                     ProductionresourcePosition agvEndResourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,agvEndResource.getId()));
 
-                    // 更新节点agv接驳位信息,agv回调后更新后续agv流转所用的接驳位设备id
-                    TaskNode taskNode = taskNodeService.getById(agvHikOrderInfo.getTaskNodeId());
-                    TaskNode nextOneTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
-                    taskNode.setTargetResourceId(agvEndResource.getId());
-                    nextOneTaskNode.setResourceId(agvEndResource.getId());
-                    nextOneTaskNode.setTargetResourceId(agvStartResource.getId());
-                    taskNodeService.updateById(taskNode);
-                    taskNodeService.updateById(nextOneTaskNode);
+//                    // 更新节点agv接驳位信息,agv回调后更新后续agv流转所用的接驳位设备id
+//                    TaskNode taskNode = taskNodeService.getById(agvHikOrderInfo.getTaskNodeId());
+//                    TaskNode nextOneTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+//                    taskNode.setTargetResourceId(agvEndResource.getId());
+//                    nextOneTaskNode.setResourceId(agvEndResource.getId());
+//                    nextOneTaskNode.setTargetResourceId(agvStartResource.getId());
+//                    taskNodeService.updateById(taskNode);
+//                    taskNodeService.updateById(nextOneTaskNode);
 
                     // 解锁预占锁定
                     Map updateLockStatusParams =  new HashMap();