Parcourir la source

机器人线边库改动

姚云青 il y a 3 ans
Parent
commit
ea478dc22b

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

@@ -545,74 +545,8 @@ public class TaskWorkNode {
         List<ProductionresourcePosition> robotList = null;
 
         // 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是agv动作时锁定锁定agv接驳位
-        TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
-        TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
-        TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
 
-        beforTaskNode.setAutoNode(resourceAutoCodeMapper.selectById(beforTaskNode.getAutoNode().getId()));
         //前序是设备序并且最后一个节点是agv搬运,锁定agv相关库位信息
-        if(beforTaskNode.getTaskId().equals(taskNode.getTaskId()) && "1".equals(beforTaskNode.getAutoNode().getCategory()) && null == lastOperationTaskNode.getResourceId()) {
-            ProductionresourcePosition startProductionresourcePosition = null;
-            ProductionresourcePosition endProductionresourcePosition = null;
-            Storge agvStartStationStorge = null;
-            Storge agvEndStationStorge = null;
-            // 判断agv接驳位是可用
-            ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId, taskNode.getResourceId()));
-            Map queryParams = new HashMap();
-            queryParams.put("zoneId", zZoneProductionresource.getZoneId());
-            queryParams.put("resourceName", "接驳");
-            List<Productionresource> agvStartStationsResources = productionresourceBizMapper.selectResouces(queryParams);
-            Productionresource startAgvStation = null;
-            Productionresource endAgvStation = null;
-            // 遍历开始接驳位判断是否有可用的接驳位
-            for (Productionresource agvStation : agvStartStationsResources) {
-                startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
-                List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId, endProductionresourcePosition.getStorgeId()));
-                List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
-                agvStartStationStorge = storgeService.getById(startProductionresourcePosition.getStorgeId());
-                // 有托板但是没有托盘认为可放
-                if (meterails.contains("5") && !meterails.contains("2") && agvStartStationStorge.getStatus().equals("1")) {
-                    startAgvStation = agvStation;
-                    break;
-                }
-            }
-            BBom bom = bBomMapper.selectById(task.getBomId());
-            Long bomZzoneId = bom.getZoneId();
-
-            queryParams.clear();
-            queryParams.put("zoneId", bomZzoneId);
-            queryParams.put("resourceName", "接驳");
-            List<Productionresource> agvEndStationsResources = productionresourceBizMapper.selectResouces(queryParams);
-
-            // 遍历开始接驳位判断是否有可用的接驳位
-            for (Productionresource agvStation : agvEndStationsResources) {
-                endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
-                List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId, endProductionresourcePosition.getStorgeId()));
-                List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
-                agvEndStationStorge = storgeService.getById(endProductionresourcePosition.getStorgeId());
-                // 有托板但是没有托盘认为可放
-                // 终点接驳位任何东西都不能有
-                if(meterails.size() == 0 && "1".equals(agvEndStationStorge.getLockStatus())){
-                    endAgvStation = agvStation;
-                    break;
-                }
-            }
-
-            if (null != agvStartStationStorge && null != agvEndStationStorge) {
-                storgeService.lockStorge(agvStartStationStorge, nextTaskNode.getId());
-                storgeService.lockStorge(agvEndStationStorge, lastOperationTaskNode.getId());
-                // 将agv相关的节点的目标节点地址更新进tasknode表
-                nextTaskNode.setTargetResourceId(startAgvStation.getId());
-                lastOperationTaskNode.setTargetResourceId(endAgvStation.getId());
-                taskNodeService.updateById(nextTaskNode);
-                taskNodeService.updateById(lastOperationTaskNode);
-
-                TWorkpiece tWorkpiece = workpieceService.getOne(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getTaskNodeId,taskNode.getId()));
-                tWorkpiece.setStorgeId(agvStartStationStorge.getId());
-                workpieceService.updateById(tWorkpiece);
-
-            }
-        }
 
         if(BizConstant.ROBOT_TYPE_CACHE.equals(zoneService.getRobotTypebyZone(zone.getName()))){//有缓存位的机器人
             //执行到第几步
@@ -624,10 +558,16 @@ public class TaskWorkNode {
                 Map<String, List<ProductionresourcePosition>> jqrMap = robotList.stream().collect(groupingBy(ProductionresourcePosition::getPointId));
 
                 robotList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {taskNode.getResourceId().toString()});
-                //目标地址和类型
-                targetStorge = workpieceService.getWorkPieceTargetStock(taskNode.getId());
+//                //目标地址和类型
+//                targetStorge = workpieceService.getWorkPieceTargetStock(taskNode.getId());
 
-                jqrStorge = storgeService.getById(robotList.get(0).getStorgeId());
+                TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+                Map returnMap  = getTargetStorge(nextTaskNode,taskNode.getFindAgvFlag(),zone);
+
+                targetStorge = returnMap.get("store")==null?null:(Storge)returnMap.get("store");
+                Storge agvEndStationStorge = returnMap.get("agvEndStationStorge")==null?null:(Storge)returnMap.get("agvEndStationStorge");
+
+//                jqrStorge = storgeService.getById(robotList.get(0).getStorgeId());
 
                 Storge startStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
 
@@ -664,7 +604,7 @@ public class TaskWorkNode {
                 dataMap.put("result", po!=null);
             } else if (count == 1) {
                 jqrStorge = (Storge) msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_JXS + taskNode.getId());
-                dataMap.put("method", "GetServoStacker");
+                dataMap.put("method", "GetFlexibleWire");
                 Storge currentStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
                 dataMap.put("fromStorge", currentStore);
 
@@ -678,7 +618,7 @@ public class TaskWorkNode {
                 dataMap.put("result", true);
             } else if (count == 2) {
                 Storge currentStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
-                dataMap.put("method", "SendServoStacker");
+                dataMap.put("method", "SendFlexibleWire");
                 dataMap.put("fromStorge", currentStore);
                 //出入库类型
                 dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
@@ -698,7 +638,7 @@ public class TaskWorkNode {
 
                 dataMap.put("method", "MoveRobotPosition");
             }else if(count == 4){//从缓存位拿出来
-                dataMap.put("method", "GetServoStacker");
+                dataMap.put("method", "GetFlexibleWire");
                 Storge hcwStorge = (Storge)msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + YunjianConstant.YUNJIAN_HCW + taskNode.getId());
 
                 Map locationMap = new HashMap();
@@ -711,7 +651,7 @@ public class TaskWorkNode {
                 //出入库类型
                 dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
             }else if(count == 5){
-                dataMap.put("method", "SendServoStacker");
+                dataMap.put("method", "SendFlexibleWire");
                 //出入库类型
                 dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);
 
@@ -774,6 +714,50 @@ public class TaskWorkNode {
     }
 
 
+    public Map getTargetStorge(TaskNode taskNode,String findAgvFlag,ZZone zZone){
+        Map returnMap = new HashMap();
+        Storge targetStorge = null;
+        Storge agvEndStationStorge = null;
+        Long resourceId = taskNode.getTargetResourceId();
+
+        if("1".equals(findAgvFlag)){//需要提前锁定下个接驳位
+            //获取接驳位。
+            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");
+            //对面产线接驳位不为空TODO
+            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);
+
+                //更新到targetresourceid
+//                TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+                TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
+                taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
+                lastOperationTaskNode.setTargetResourceId(position.getResourceId());
+                lastOperationTaskNode.setResourceId(taskNode.getTargetResourceId());
+                taskNodeService.updateById(taskNode);
+                taskNodeService.updateById(lastOperationTaskNode);
+            }
+        }else {
+            //目标设备
+            if(resourceId!=null){
+                List<ProductionresourcePosition> targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
+                if(CollectionUtil.isNotEmpty(targetList)){
+                    targetStorge = storgeService.getById(targetList.get(0).getStorgeId());
+                    returnMap.put("store",targetStorge);
+                }
+            }
+        }
+        returnMap.put("agvEndStationStorge",agvEndStationStorge);
+        return returnMap;
+    }
+
     /**
      *  设备动态逻辑判断处理
      *