瀏覽代碼

agv条件不满足轮询逻辑添加动态查询接驳位并设置workpiece storgeid字段

yejian 3 年之前
父節點
當前提交
087d074490

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

@@ -8,6 +8,7 @@ import com.github.zuihou.business.DemoLine.DemoCacheKey;
 import com.github.zuihou.business.DemoLine.DemoLineConstant;
 import com.github.zuihou.business.DemoLine.YunjianConstant;
 import com.github.zuihou.business.edgeLibrary.dao.StockInfoMapper;
+import com.github.zuihou.business.edgeLibrary.dao.StorgeMapper;
 import com.github.zuihou.business.edgeLibrary.entity.StockInfo;
 import com.github.zuihou.business.edgeLibrary.entity.Storge;
 import com.github.zuihou.business.edgeLibrary.service.StorgeService;
@@ -29,10 +30,7 @@ import com.github.zuihou.business.productionReadyCenter.entity.*;
 import com.github.zuihou.business.productionReadyCenter.service.AAutoNodeLogService;
 import com.github.zuihou.business.productionReadyCenter.service.BomProcedureProductionresourceService;
 import com.github.zuihou.business.productionReadyCenter.service.BomProcedureVersionService;
-import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourceBizMapper;
-import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourcePositionMapper;
-import com.github.zuihou.business.productionResourceCenter.dao.ZZoneMapper;
-import com.github.zuihou.business.productionResourceCenter.dao.ZZoneProductionresourceMapper;
+import com.github.zuihou.business.productionResourceCenter.dao.*;
 import com.github.zuihou.business.productionResourceCenter.entity.*;
 import com.github.zuihou.business.productionResourceCenter.service.*;
 import com.github.zuihou.business.productionResourceCenter.service.impl.AGVNodeServiceImpl;
@@ -73,6 +71,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 import static java.util.stream.Collectors.groupingBy;
 
@@ -134,7 +133,14 @@ public class TaskWorkNode {
     private ZZoneService zoneService;
     @Autowired
     private AgvHikOrderInfoService agvHikOrderInfoService;
-
+    @Autowired
+    private StockInfoMapper stockInfoMapper;
+    @Autowired
+    private ResourceAutoCodeMapper resourceAutoCodeMapper;
+    @Autowired
+    private ProductionresourcePositionMapper productionresourcePositionMapper;
+    @Autowired
+    private BBomMapper bBomMapper;
 
     //总控端口
     private final String ZK_port = "120";
@@ -490,6 +496,76 @@ public class TaskWorkNode {
         Storge targetStorge = null;
 
         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.contains("5") && !meterails.contains("2") && agvEndStationStorge.getStatus().equals("1")) {
+                    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()))){//有缓存位的机器人
             //执行到第几步
             dataMap.put(taskNode.getId().toString() + "count", count);

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

@@ -269,15 +269,15 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                     taskNodeService.updateById(lastOperationTaskNode);
                     map.put("bizType","agv");
                 }else{
-                    // 获取机器人操作线边库
-                    xbkArr = new String[]{DictionaryKey.YJ_ZONE_XBK.get(zoneName)};
-                    xbkList = productionresourcePositionService.getFreeProductionresourcePositionByNos(xbkArr);
-                    if(CollectionUtil.isNotEmpty(xbkList)){
-                        ProductionresourcePosition position = xbkList.get(0);
-                        // TODO 应该需要合并到getTargetStorge 方法中
-//                    targetStorge = storgeService.getById(position.getStorgeId());
-                        map.put("bizType","xbk");
-                    }
+//                    // 获取机器人操作线边库
+//                    xbkArr = new String[]{DictionaryKey.YJ_ZONE_XBK.get(zoneName)};
+//                    xbkList = productionresourcePositionService.getFreeProductionresourcePositionByNos(xbkArr);
+//                    if(CollectionUtil.isNotEmpty(xbkList)){
+//                        ProductionresourcePosition position = xbkList.get(0);
+//                        // TODO 应该需要合并到getTargetStorge 方法中
+////                    targetStorge = storgeService.getById(position.getStorgeId());
+//                        map.put("bizType","xbk");
+//                    }
                 }
             }
         }