lxb 1 год назад
Родитель
Сommit
dca8cee25e

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

@@ -1243,7 +1243,7 @@ public class TaskWorkNode {
         Storge targetStorge = null;
         Long resourceId = taskNode.getTargetResourceId();
         String xbkFlag = "";
-
+        String goalZone = ""; //下一个节点机器人所属产线编码
         if("1".equals(findAgvFlag)){
             //需要提前锁定下个接驳位
             // begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
@@ -1262,6 +1262,7 @@ public class TaskWorkNode {
             //获取产线ID
             Long agvGoalZoneId = zoneProductionresource.getZoneId();
             ZZone agvGoalZone = zoneService.getById(agvGoalZoneId);
+            goalZone = agvGoalZone.getNo();
             String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(agvGoalZone.getNo()).split(",");
             List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourceAgvPositionByNos(jbwArr);
             logger.info("线边库逻辑节点{},查询线边库轮询终点接驳位接驳位数量{}",taskNode.getId(),jbwBList);
@@ -1312,7 +1313,7 @@ public class TaskWorkNode {
 */
 
                 //起点位置
-                ProductionresourcePosition startPosition = this.getPosition(zZone.getNo());
+                ProductionresourcePosition startPosition = this.getPosition(zZone.getNo(),goalZone);
 
                 //目标无板
                 Map targetJbwPlateMap =  new HashMap();
@@ -1462,15 +1463,48 @@ public class TaskWorkNode {
 
     /**
      * 获取起点位置
-     * @param zone 保障中心/框体线/舱体线
+     * @param zone 保障中心/框体线/仓体线(当前零件所在产线)
+     * @param goalZone 下一个节点的所属产线编码(零件要去的产线)
      */
-    public ProductionresourcePosition getPosition(String zone) {
+    public ProductionresourcePosition getPosition(String zone,String goalZone) {
 
         //获取开始位置区域集合
         List<String> zoneList = DictionaryKey.YJ_ZONE.get(zone);
 
         ProductionresourcePosition position = null;
 
+        //优先判断零件要去的产线接驳位是否有空位
+        String[] jbws = DictionaryKey.YJ_ZONE_JBW.get(goalZone).split(",");
+
+        Map startJbwMap = new HashMap();
+        startJbwMap.put("haveGoods", "1");
+        startJbwMap.put("xbkFlag", "1");
+        startJbwMap.put("findAgvStation", "1");
+        startJbwMap.put("codes", StringUtil.changeIdsArrToSubQueryStr(jbws));
+
+        //查询可用的板子
+        List<ProductionresourcePosition> agvStarts = productionresourcePositionMapper.getPPList(startJbwMap);
+        int agvStartCount=CollectionUtil.isNotEmpty(agvStarts) ? agvStarts.size() : 0; //可用的板子个数
+
+        //查询被占用的接驳位
+        Map occupyJbwMap = new HashMap();
+        startJbwMap.put("occupyFlag", "1");
+        startJbwMap.put("codes", StringUtil.changeIdsArrToSubQueryStr(jbws));
+        List<ProductionresourcePosition> occupyList = productionresourcePositionMapper.getPPList(occupyJbwMap);
+        int occupyCount=CollectionUtil.isNotEmpty(occupyList) ? occupyList.size() : 0; //占用的接驳位个数
+
+        int jbwCount = jbws.length;
+
+        if(jbwCount == (occupyCount + agvStartCount)){
+            //无空闲位置
+            if(jbwCount > occupyCount){
+                //存在可用板子
+                position = agvStarts.get(0);
+                return position;
+            }
+        }
+
+
         int i = 1;
         for (String zoneT : zoneList) {