Browse Source

【MQ执行方法】AGV调度

paidaxin666 2 years ago
parent
commit
c7ca72ae0b

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

@@ -1296,7 +1296,7 @@ public class TaskWorkNode {
                 returnMap.put("targetxbk","0");
 
             }else{//需要放到线边库
-                //起点空盘
+                /*//起点空盘
                 Map startJbwPlateMap =  new HashMap();
                 startJbwPlateMap.put("haveGoods","1");
                 startJbwPlateMap.put("findAgvStation","1");
@@ -1309,6 +1309,10 @@ public class TaskWorkNode {
                     return count == 1 ? true : false;
                 }).collect(Collectors.toList());
                 ProductionresourcePosition startPosition = tempAgvStartList !=null && tempAgvStartList.size()>0 ? tempAgvStartList.get(0) :  null;
+*/
+
+                //起点位置
+                ProductionresourcePosition startPosition = this.getPosition(zZone.getNo());
 
                 //目标无板
                 Map targetJbwPlateMap =  new HashMap();
@@ -1411,8 +1415,8 @@ public class TaskWorkNode {
                                 String instructionUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(paramKey).toString());
                                 String requestUrl = instructionUrl + "/api/" + "QueryThreeCoordinatesFreePos";
                                 // TODO 先写死测试
-//                                String canPutInfo = restTemplate.postForObject(requestUrl, formEntity, String.class);
-                                String canPutInfo ="{\"result\":\"L\"}";
+                                String canPutInfo = restTemplate.postForObject(requestUrl, formEntity, String.class);
+                                /*String canPutInfo ="{\"result\":\"L\"}";*/
                                 JSONObject canPutInfoObject = JSONObject.parseObject(canPutInfo);
                                 if("false".equals(canPutInfoObject.getString("result"))){
                                     targetList = null;
@@ -1456,6 +1460,55 @@ public class TaskWorkNode {
         return returnMap;
     }
 
+    /**
+     * 获取起点位置
+     * @param zone 保障中心/框体线/舱体线
+     */
+    public ProductionresourcePosition getPosition(String zone) {
+
+        //获取开始位置区域集合
+        List<String> zoneList = DictionaryKey.YJ_ZONE.get(zone);
+
+        ProductionresourcePosition position = null;
+
+        int i = 1;
+        for (String zoneT : zoneList) {
+
+            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zoneT).split(",");
+
+            Map startJbwPlateMap = new HashMap();
+            startJbwPlateMap.put("haveGoods", "1");
+            startJbwPlateMap.put("xbkFlag", "1");
+            startJbwPlateMap.put("findAgvStation", "1");
+            startJbwPlateMap.put("codes", StringUtil.changeIdsArrToSubQueryStr(jbwArr));
+
+            //查询可用的板子
+            List<ProductionresourcePosition> agvStartList = productionresourcePositionMapper.getPPList(startJbwPlateMap);
+            List<ProductionresourcePosition> tempAgvStartList = agvStartList.stream().filter(item -> {
+                int count = stockInfoMapper.selectCount(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, item.getStorgeId()));
+                return count == 1 ? true : false;
+            }).collect(Collectors.toList());
+
+            if(CollectionUtil.isNotEmpty(tempAgvStartList)){
+                if(i == 1){
+                    //距离最近
+                    position = tempAgvStartList.get(0);
+                    if(tempAgvStartList.size()>1)break; //优先取有多个板子的
+                }else{
+                    if(tempAgvStartList.size()>1){
+                        position = tempAgvStartList.get(0); //如果距离近的板子没有两个,则取远的存在多个板子的
+                        break;
+                    }else if (Objects.isNull(position)){
+                        position = tempAgvStartList.get(0);//如果第一优先级无板子,则直接取第二优先级的板子
+                    }
+                }
+            }
+            i++;
+        }
+
+        return position;
+    }
+
     /**
      * 设备动态逻辑判断处理
      *