Parcourir la source

fix:修改地轨调用逻辑,区分线边库与缓存台问题

wang.sq@aliyun.com il y a 3 mois
Parent
commit
79c6eded6a

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

@@ -183,6 +183,8 @@ public interface YunjianConstant {
 
     // 机器人缓存位线边库逻辑标志
     String YUNJIAN_HCW_XBKFLAG ="YUNJIAN_HCW_XBKFLAG";
+    // 放线边库
+    String CUN_XBK ="CUN_XBK";
 
     //示范线传参常量
     String DEMOLINE_XBK_TYPE ="DEMOLINE_XBK_TYPE";

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

@@ -498,6 +498,9 @@ public class TaskWorkNode {
                         if (jsonObject.containsKey(taskNode.getId() + "count")) {
                             queryMap.put(taskNode.getId() + "count", jsonObject.getString(taskNode.getId() + "count"));
                         }
+                        if (jsonObject.containsKey(taskNode.getId() + YunjianConstant.CUN_XBK)) {
+                            queryMap.put(taskNode.getId() + YunjianConstant.CUN_XBK, jsonObject.getString(taskNode.getId() + YunjianConstant.CUN_XBK));
+                        }
 
                         //把产线放进去,避免多次查询节点业务参数
                         ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId, taskNode.getResourceId()));
@@ -1003,6 +1006,11 @@ public class TaskWorkNode {
             bizJsonObject.put(taskNode.getId() + "count", count);
         }
 
+        // 是否放到线边库
+        String cunXbk = conMap.get(taskNode.getId() + YunjianConstant.CUN_XBK) == null ? "" : conMap.get(taskNode.getId() + YunjianConstant.CUN_XBK).toString();
+        if(StringUtil.isNotEmpty(cunXbk)){
+            bizJsonObject.put(taskNode.getId() + YunjianConstant.CUN_XBK, cunXbk);
+        }
         //起点、终点缓存。
         Storge fstorge = conMap.get("fromStorge") == null ? null : (Storge) conMap.get("fromStorge");
         Storge tstorge = conMap.get("toStorge") == null ? null : (Storge) conMap.get("toStorge");
@@ -1172,6 +1180,7 @@ public class TaskWorkNode {
         String bizType = dataMap.get("bizType") == null ? "" : dataMap.get("bizType").toString();
         String handMode = dataMap.get("handMode") == null ? "" : dataMap.get("handMode").toString();
         String count = dataMap.get(taskNode.getId() + "count") == null ? "0" : dataMap.get(taskNode.getId() + "count").toString();
+        String cunXbk = dataMap.get(taskNode.getId() + YunjianConstant.CUN_XBK) == null ? "0" : dataMap.get(taskNode.getId() + YunjianConstant.CUN_XBK).toString();
 
         //判断节点设备类型
         ResourceAutoCode resourceAutoCode = taskNode.getAutoNode();
@@ -1188,6 +1197,7 @@ public class TaskWorkNode {
         map.put("taskNode", taskNode);
         map.put("task", task);
         map.put(taskNode.getId() + "count", count);
+        map.put(taskNode.getId() + YunjianConstant.CUN_XBK, cunXbk);
         map.put("bizType", bizType);
         map.put("handMode", handMode);
         map.put("categoryName", DictionaryKey.RESOURCE_CATEGORY.get(category));
@@ -1241,7 +1251,7 @@ public class TaskWorkNode {
      * @return
      */
     public Map checkXbkCon(TaskNode taskNode, TTask task, Map<String, Object> dataMap) throws InterruptedException {
-        ZZone zone = dataMap.get("zone") == null ? null : (ZZone) dataMap.get("zone");
+         ZZone zone = dataMap.get("zone") == null ? null : (ZZone) dataMap.get("zone");
 
         String paramKey = zone.getNo() + "_plc";
         String instructionUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS) ? "" : ((Map<String, String>) msgUtil.redis_get(ParameterKey.PARAMETERS)).get(paramKey).toString());

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

@@ -1706,9 +1706,11 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
             List<AAutoNodeLog> autoNodeLogList =
                     autoNodeLogMapper.selectList(Wraps.<AAutoNodeLog>lbQ().eq(AAutoNodeLog::getTaskId, taskId).eq(AAutoNodeLog::getTaskNodeId,
                             taskNode.getId()));
-            lg = autoNodeLogList.size()>0 && autoNodeLogList.size()<4 ? autoNodeLogList.get(autoNodeLogList.size()-1):null;
-            if(null == lg){
-                return R.fail("指令和数据一致性不正确");
+            if(!autoNodeLogList.isEmpty() && autoNodeLogList.size()>0 ){
+                lg = autoNodeLogList.get(autoNodeLogList.size()-1);
+            }
+            if(null == lg || Objects.isNull(lg)){
+                return R.success("任务{}查询不到,不再循环回调", taskNodeId);
             }
             lg.setSendStatus("2");
             lg.setExeResult("1");
@@ -1733,7 +1735,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
             msgUtil.redis_del(repeatKey);
             lg.setExeStatus("2");
             lg.setExeResult("0");
-            lg.setFeedback("回调时出错"+ e.getMessage());
+            lg.setFeedback("回调时出错"+ e);
             autoNodeLogMapper.updateAllById(lg);
 
             taskNode.setExeStatus("2").setExeResult("0").setEndTime(new Date());
@@ -1847,12 +1849,21 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
             if (callBackJson.containsKey(YunjianConstant.YUNJIAN_XBKFLAG))  {//临时存放到了线边库,向虚拟线边库发一个MQ。
                 int count = callBackJson.getString(taskNode.getId().toString() + "count") == null ? 0 :
                         Integer.parseInt(callBackJson.getString(taskNode.getId().toString() + "count"));
+
+                int cunXbk = callBackJson.getString(taskNode.getId() + YunjianConstant.CUN_XBK)==null? 0:Integer.parseInt(callBackJson.getString(taskNode.getId() + YunjianConstant.CUN_XBK));
+
+                int cunXbkCS = 2;
                 int limit = 1;
                 if (!callBackJson.containsKey(YunjianConstant.YUNJIAN_ROBORT_CACHE_FLAG)) {
                     limit = 1;
                 }
 
-                if (count == limit) {//
+                if (count == limit && cunXbk == 0) {//
+                    taskNode.setExeStatus("3").setExeResult("1").setEndTime(new Date());
+                    if (null != callBackJson.getString("updateUser")) {
+                        taskNode.setLoadingUserId(Long.valueOf(callBackJson.getString("updateUser")));
+                    }
+                }else if (count == limit && cunXbk == cunXbkCS){
                     taskNode.setExeStatus("3").setExeResult("1").setEndTime(new Date());
                     if (null != callBackJson.getString("updateUser")) {
                         taskNode.setLoadingUserId(Long.valueOf(callBackJson.getString("updateUser")));
@@ -1997,7 +2008,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
      * 由于有的节点需要执行多次,此方法验证是否要推送下一个节点
      *
      * @param callBackJson
-     * @return
+     * @return true 成功,false 失败
      */
     private boolean checkPushNextNode(TaskNode taskNode, JSONObject callBackJson) {
         if (null == callBackJson) {
@@ -2018,10 +2029,15 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
         } else if (callBackJson.containsKey("YUNJIAN_XBKFLAG") && callBackJson.containsKey("YUNJIAN_ROBORT_CACHE_FLAG")){
             int count = callBackJson.getString(taskNode.getId().toString() + "count") == null ? 0 :
                     Integer.parseInt(callBackJson.getString(taskNode.getId().toString() + "count"));
+            int cunXbk = callBackJson.getString(taskNode.getId() + YunjianConstant.CUN_XBK)==null? 0:Integer.parseInt(callBackJson.getString(taskNode.getId() + YunjianConstant.CUN_XBK));
+
             if (count < 1) {
                 return false;
+            }else if (cunXbk > 0 && cunXbk<2){
+                return false;
             }
         }
+
         return true;
     }
 

+ 6 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/strategy/impl/CacheRobotStrategy.java

@@ -295,11 +295,16 @@ public class CacheRobotStrategy implements RobotStrategy {
 //                targetStorge = hcwStorge;
 //            }
             if (targetXbk.equals("0")) {
+                // 线边库标识,不使用缓存货架中转,直接一条命令下发到目的站点,所以移除,线边库出线命令分两步走的命令
+                returnMap.put( taskNode.getId() + YunjianConstant.CUN_XBK, "0");
                 //目标缓存
                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId(), targetStorge, 10, TimeUnit.DAYS);
             } else {
                 //目标是线边库
                 Object xbkFlag = msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_HCW_XBK_FLAG + taskNode.getId());
+                // 线边库标识
+                returnMap.put( taskNode.getId() + YunjianConstant.CUN_XBK, "1");
+
                 if(ObjectUtil.isNotEmpty(xbkFlag) && targetXbk.equals("1")){
                     returnMap.put("result", false);
                     return returnMap;
@@ -390,7 +395,7 @@ public class CacheRobotStrategy implements RobotStrategy {
         //线边库移动判断暂存位是否有空余位置
         if(targetXbk.equals("0") && robotList.size() == 1 && !startStore.getPointId().contains("MERK")){
             dataMap.put("result", false);
-            dataMap.put("resultMsg", "条件判断不通过,暂存位无空闲位置,节点名字"+ taskNode.getNodeName()+"节点id:"+taskNode.getId());
+            dataMap.put("resultMsg", "条件判断不通过,暂存位无空闲位置,节点名字"+task.getProcedureName()+ taskNode.getNodeName()+"节点id:"+taskNode.getId());
             return dataMap;
         }
 

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

@@ -485,6 +485,8 @@ public class MsgUtil implements ApplicationContextAware {
 
             if(callBackJson.containsKey(YunjianConstant.YUNJIAN_XBKFLAG)){//临时存放到了线边库,向虚拟线边库发一个MQ。
                     int count =  callBackJson.getString(taskNode.getId().toString()+"count")==null? 0:Integer.parseInt(callBackJson.getString(taskNode.getId().toString()+"count"));
+                    int cunXbk = callBackJson.getString(taskNode.getId() + YunjianConstant.CUN_XBK)==null? 0:Integer.parseInt(callBackJson.getString(taskNode.getId() + YunjianConstant.CUN_XBK));
+                    int cunXbkCS = 2;
                     int limit =1;
                     if(!callBackJson.containsKey(YunjianConstant.YUNJIAN_ROBORT_CACHE_FLAG)) {
                         limit =1;
@@ -495,12 +497,21 @@ public class MsgUtil implements ApplicationContextAware {
                         //把当前节点推送到mq
                         jsonObject.put("taskNodeId",taskNode.getId().toString());
                         jsonObject.put(taskNode.getId().toString()+"count",count);
+                        jsonObject.put(taskNode.getId() + YunjianConstant.CUN_XBK,cunXbk);
                         jsonObject.put("bizType",BizConstant.MQ_TASK_NODE_TYPE_XBK);
                         dynamicRabbitMq.sendMsg(taskNode.getResourceId().toString(),jsonObject.toString());
                         return;
+                    }if(cunXbk>0 && cunXbk < cunXbkCS){ // 不是缓存货架是线边库
+                        cunXbk = ++cunXbk;
+                        //把当前节点推送到mq
+                        jsonObject.put("taskNodeId",taskNode.getId().toString());
+                        jsonObject.put(taskNode.getId().toString()+"count",count);
+                        jsonObject.put(taskNode.getId() + YunjianConstant.CUN_XBK,cunXbk);
+                        jsonObject.put("bizType",BizConstant.MQ_TASK_NODE_TYPE_XBK);
+                        dynamicRabbitMq.sendMsg(taskNode.getResourceId().toString(),jsonObject.toString());
                     }else{
-                        // 删除缓存位优先执行的节点标志
-                        redis_del(DemoLineConstant.JQR_HCW_PART_PRIOTY_EXEC_FLAG + taskNode.getId());
+                            // 删除缓存位优先执行的节点标志
+                            redis_del(DemoLineConstant.JQR_HCW_PART_PRIOTY_EXEC_FLAG + taskNode.getId());
 
                         jsonObject.put("taskNodeId",nextTaskNode.getId().toString());
                         jsonObject.put("bizType", BizConstant.MQ_TASK_NODE_TYPE_COMMON);

+ 2 - 1
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/edgeLibrary/StockInfoMapper.xml

@@ -42,7 +42,8 @@
                     left join imcs_s_shelves b on a.parent_id = b.id
                     ) sh on st.shelves_id = sh.id
                 ) st on a.storge_id = st.id
-            left join imcs_z_zone z on locate(z.abbreviate, st.shelvesDesc) group by a.goods_id
+            left join imcs_z_zone z on locate(z.abbreviate, st.shelvesDesc)
+            -- group by a.goods_id
         ) s ${ew.customSqlSegment}
     </select>