Browse Source

节点调试agv问题修改

yejian 3 năm trước cách đây
mục cha
commit
07b73a7a8b

+ 8 - 6
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/edgeLibrary/service/impl/StorgeServiceImpl.java

@@ -205,7 +205,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
     }
     /**
      * 批量解锁
-     * @param List<Storge>
+     * @param storgeList
      * @return
      */
     @Override
@@ -270,8 +270,8 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
         map.put("haveGoods","1");
         List<ProductionresourcePosition>jbwList = productionresourcePositionMapper.getPPList(map);
         if(jbwList!=null&&jbwList.size()>0){
-            //查出当前工件属于产线的托板
-            Map<Long,Plate> plateMap = getPlate(zZone.getId().toString());
+//            //查出当前工件属于产线的托板
+//            Map<Long,Plate> plateMap = getPlate(zZone.getId().toString());
             //根据接驳位分组
             Map<String,List<ProductionresourcePosition>> jbwMap = jbwList.stream().collect(groupingBy(ProductionresourcePosition::getNo));
             List<ProductionresourcePosition>tbList = new ArrayList<>();
@@ -279,7 +279,8 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
                 List<ProductionresourcePosition> list = jbwMap.get(key);
                 if(list!=null&&list.size()==1){//必须是存放了1个托板
                     ProductionresourcePosition p = list.get(0);
-                    if(BizConstant.STOCK_GOODS_TYPE_5.equals(p.getCategory())&&plateMap.containsKey(p.getGoodsId())){
+                    if(BizConstant.STOCK_GOODS_TYPE_5.equals(p.getCategory())){
+//                    if(BizConstant.STOCK_GOODS_TYPE_5.equals(p.getCategory())&&plateMap.containsKey(p.getGoodsId())){
                         tbList.add(p);
                         jbwCode = p.getCode();
 //                        relMap.put(key,p);
@@ -338,8 +339,9 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
 
     /**
      *
-      * @param storge
-     * @param jbwCode 1-质量中心2-智能单元3-柔性单元
+     * @param storge
+     * @param task
+     * @param zoneType
      * @return
      */
     @Override

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

@@ -236,10 +236,13 @@ public class TaskWorkNode {
                     TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
                     // agv搬运
                     Map agvData = new HashMap();
-                    agvData.put("start",beforTaskNode.getTargetResourceId());
-                    agvData.put("goal", taskNode.getTargetResourceId());
-                    agvData.put("taskId",tTask.getId());
-                    agvData.put("taskNodeId",taskNode.getId());
+                    agvData.put("start",conMap.get("start"));
+                    agvData.put("goal", conMap.get("goal"));
+                    agvData.put("taskId",tTask.getId().toString());
+                    agvData.put("taskNodeId",taskNode.getId().toString());
+                    String jsonParam = getRequestParam(conMap);
+                    //缓存执行当前节点传参
+                    msgUtil.redis_set(CacheKey.TASK_CURRENT_NODE_PARAMS+"_" + taskNode.getId(), jsonParam);
                     agvHikOrderInfoService.addHikTask(agvData);
                 }else{
                     //组装接口参数

+ 14 - 155
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/service/impl/AGVNodeServiceImpl.java

@@ -94,171 +94,30 @@ public class AGVNodeServiceImpl implements NodeOperationService {
         TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
         JSONObject jsonObject = new JSONObject();
         JSONObject bizJsonObject = new JSONObject();
-        Storge fstorge = storgeService.getOne(Wraps.<Storge>lbQ().eq(Storge::getCampId,beforTaskNode.getId()));
-        Storge tstorge = storgeService.getOne(Wraps.<Storge>lbQ().eq(Storge::getCampId,taskNode.getId()));
-        jsonObject.put("start", fstorge.getPointId());
-        jsonObject.put("goal", tstorge.getPointId());
-        jsonObject.put("transferType", "agv");
-        //此数据用来业务回传
-        bizJsonObject.put("srcPosition", fstorge.getId().toString());
-        bizJsonObject.put("targetPostion", tstorge.getId().toString());
-
-        map.put("jsonObject", jsonObject);
-        map.put("bizJsonObject", bizJsonObject);
 
+        // 找到相应设备点位信息
+        ProductionresourcePosition startPosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,beforTaskNode.getTargetResourceId()));
+        ProductionresourcePosition endPosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,taskNode.getTargetResourceId()));
 
-        //AGV设备操作关联接驳位(起点和终点都是接驳位库位),接驳位占用暂存在线边库
 
-//        String moduleName = dataMap.get("moduleName").toString();
-//        //List<ModuleInstruction> instructions = dataMap.get("instructions") == null ? Lists.newArrayList() : (List<ModuleInstruction>)dataMap.get("instructions");
-//        ResourceAutoCode resourceAutoCode = taskNode.getAutoNode();
-//        String functionName = resourceAutoCode.getCommand();
-//
-//
-//        //目标位置
-//        Long targetId = resourceAutoCode.getTargetId();
-//        Storge targetStore = storgeService.getById(targetId);
-//
-//        //开始位置
-//        Storge startStore = workpieceService.getWorkPieceStock(taskNode.getId(),true);
-//
-//        jbwarr = new String[] {targetStore.getNo()};
-//        List<ProductionresourcePosition> jbwList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwarr);
+        Storge fstorge = storgeService.getOne(Wraps.<Storge>lbQ().eq(Storge::getId,startPosition.getStorgeId()));
+        Storge tstorge = storgeService.getOne(Wraps.<Storge>lbQ().eq(Storge::getId,endPosition.getStorgeId()));
+        map.put("start", fstorge.getPointId().toString());
+        map.put("goal", tstorge.getPointId().toString());
+        map.put("transferType", "agv");
+        //此数据用来业务回传
+        map.put("fromStorge", fstorge);
+        map.put("toStorge", tstorge);
 
-//        //TODO还需要验证,开始接驳位是否被其他锁定。并且尚未放置上去。
-//        if (CollectionUtil.isNotEmpty(jbwList)) {
-//            //3、把起始终点库位存放到map,用于接口
-//            map.put("fromStorge", startStore);
-//            map.put("toStorge", targetStore);
-//            //这个节点没有需要验证的内容,都在前一个节点验证并且锁定了
-//            map.put("result", true);
-//
-//            storgeService.lockStorge(targetStore, taskNode.getId());
-//            //出入库类型-原料出入库
-//            map.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_METERIAL_CRK);
-//        }
+        map.put("result",true);
+        map.put(DemoLineConstant.DEMOLINE_STOCK_TYPE,DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK_WITH_PLATE);
 
-//        if (BizConstant.MQ_TASK_NODE_TYPE_COMMON.equals(bizType)) {
-//            if (DemoLineConstant.DEMOLINE_OP01_02.equals(taskNode.getNodeNo())) {
-//                //agv从wms接驳口A取料运到质量中心的接驳位B或C
-//                //节点2的任务都在节点1被锁定过了,只要从缓存拿出来对应的值即可
-//                Storge jbwAstorge = (Storge) msgUtil.redis_get(DemoCacheKey.DEMOLINE_CIRCULATION_STORAGE + "_" + task.getCompleteBatchNo());
-//                //2、取出接驳位
-//                Storge jbwstorge = (Storge) msgUtil.redis_get(DemoCacheKey.DEMOLINE_CAMP + "_" + DemoLineConstant.JBW + taskNode.getId().toString());
-//                //3、把起始终点库位存放到map,用于接口
-//                map.put("fromStorge", jbwAstorge);
-//                map.put("toStorge", jbwstorge);
-//                //这个节点没有需要验证的内容,都在前一个节点验证并且锁定了
-//                map.put("result", true);
-//                //出入库类型-原料出入库
-//                map.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_METERIAL_CRK);
-//                //4、记录机器人的库位,下一个步骤使用
-//                msgUtil.redis_set(DemoCacheKey.DEMOLINE_CIRCULATION_STORAGE + "_" + task.getCompleteBatchNo(), jbwstorge, 1, TimeUnit.DAYS);
-//            }
-//            else if (DemoLineConstant.DEMOLINE_OP01_08.equals(taskNode.getNodeNo())){
-//                //agv运输到产线接驳位
-//                //根据工件获取所在的生产单元(产线)
-//                zoneNo = msgUtil.redis_get(DemoCacheKey.DEMOLINE_WORKOP_ZONE + task.getCompleteBatchNo()) == null ? ""
-//                        : msgUtil.redis_get(DemoCacheKey.DEMOLINE_WORKOP_ZONE + task.getCompleteBatchNo()).toString();
-//                if (DemoLineConstant.DEMOLINE_WORK_SPACE1.equals(zoneNo)) {//智能生产单元
-//                    jbwarr = new String[] {DemoLineConstant.JBW_F, DemoLineConstant.JBW_G};
-//                } else if (DemoLineConstant.DEMOLINE_WORK_SPACE2.equals(zoneNo)) {//柔性智能加工生产区
-//                    jbwarr = new String[] {DemoLineConstant.JBW_H, DemoLineConstant.JBW_I};
-//                }
-//                //当前毛坯所预占的接驳位
-//                Storge jbwFromStorge = msgUtil.redis_get(DemoCacheKey.DEMOLINE_CIRCULATION_JBW_STORAGE + "_" + task.getCompleteBatchNo()) == null ? null : (Storge) msgUtil.redis_get(DemoCacheKey.DEMOLINE_CIRCULATION_JBW_STORAGE + "_" + task.getCompleteBatchNo());
-//                //查询是否被锁定
-//                Storge jbwdbStorge = storgeService.getById(jbwFromStorge.getId());
-//
-//                List<ProductionresourcePosition> jbwList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwarr);
-//                //接驳位有空闲
-//                if (CollectionUtil.isNotEmpty(jbwList) && "1".equals(jbwdbStorge.getLockStatus())) {
-//                    map.put("fromStorge", jbwFromStorge);
-//                    //锁定接驳位库位
-//                    Storge jbwstorge = storgeService.getById(jbwList.get(0).getStorgeId());
-//                    //锁定接驳位库位
-//                    jbwstorge.setCompleteBatchNo(task.getCompleteBatchNo());
-//                    storgeService.lockStorge(jbwstorge, taskNode.getId());
-//                    TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode, 1);
-//                    msgUtil.redis_set(DemoCacheKey.DEMOLINE_CAMP + "_" + DemoLineConstant.JBW + nextTaskNode.getId(), jbwstorge, 1, TimeUnit.DAYS);
-//                    //目的地为接驳位
-//                    map.put("toStorge", jbwstorge);
-//                    //出入库类型-托板出入库
-//                    map.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_PLATE_CRK);
-//                    //记录产品流转到的库位
-//                    msgUtil.redis_set(DemoCacheKey.DEMOLINE_CIRCULATION_JBW_STORAGE + "_" + task.getCompleteBatchNo(), jbwstorge, 1, TimeUnit.DAYS);
-//                }
-//                //判断接驳位是否为空
-//                map.put("result", (CollectionUtil.isNotEmpty(jbwList)));
-//            }
-//
-//            else if (DemoLineConstant.DEMOLINE_OP05_01.equals(taskNode.getNodeNo())) {
-//                //接驳位有一个为空
-//                jbwarr = new String[] {DemoLineConstant.JBW_D, DemoLineConstant.JBW_E};
-//                List<ProductionresourcePosition> jbwList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwarr);
-//                if (jbwList != null && jbwList.size() > 0) {
-//                    //取出前一步骤存放的上下料站库位
-//                    Storge jbwFromStorge = msgUtil.redis_get(DemoCacheKey.DEMOLINE_CIRCULATION_JBW_STORAGE + "_" + task.getCompleteBatchNo()) == null ? null : (Storge) msgUtil.redis_get(DemoCacheKey.DEMOLINE_CIRCULATION_JBW_STORAGE + "_" + task.getCompleteBatchNo());
-//                    map.put("fromStorge", jbwFromStorge);
-//                    //锁定其中一个
-//                    ProductionresourcePosition jbwp = jbwList.get(0);
-//                    //预占库位为下个节点准备
-//                    Storge jbwstorge = storgeService.getById(jbwp.getStorgeId());
-//                    //锁定接驳位库位
-//                    jbwstorge.setCompleteBatchNo(task.getCompleteBatchNo());
-//                    storgeService.lockStorge(jbwstorge, taskNode.getId());
-//                    TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode, 1);
-//                    msgUtil.redis_set(DemoCacheKey.DEMOLINE_CAMP + "_" + DemoLineConstant.JBW + nextTaskNode.getId(), jbwstorge, 1, TimeUnit.DAYS);
-//                    //目的地为接驳位
-//                    map.put("toStorge", jbwstorge);
-//                    //出入库类型-托板出入库
-//                    map.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_PLATE_CRK);
-//                    //记录产品流转到的库位
-////                    msgUtil.redis_set(DemoCacheKey.DEMOLINE_CIRCULATION_STORAGE + "_" +task.getCompleteBatchNo(), jbwstorge, 1, TimeUnit.DAYS);
-//                    msgUtil.redis_set(DemoCacheKey.DEMOLINE_CIRCULATION_JBW_STORAGE + "_" + task.getCompleteBatchNo(), jbwstorge, 1, TimeUnit.DAYS);
-//                }
-//                map.put("result", (CollectionUtil.isNotEmpty(jbwList)));
-//            }
-//
-//            else if (DemoLineConstant.DEMOLINE_OP06_04.equals(taskNode.getNodeNo())) {
-//                //节点4的任务都在节点3被锁定过了,只要从缓存拿出来对应的值即可
-//                //1、取出机器人
-//               jbwarr = new String[] {DemoLineConstant.JBW_A};
-//                List<ProductionresourcePosition> jbwAList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwarr);
-//                if (CollectionUtil.isNotEmpty(jbwAList)) {
-//                    Storge jbwAstorge = storgeService.getById(jbwAList.get(0).getStorgeId());
-//                    map.put("toStorge", jbwAstorge);
-//                }
-//                //临时这样写
-//                String jbwarrB[] = {DemoLineConstant.JBW_B};
-//                queryMap.put("codes", StringUtil.changeIdsArrToSubQueryStr(jbwarrB));
-//                List<ProductionresourcePosition> jbwBList = productionresourcePositionMapper.getPPList(queryMap);
-//                if (CollectionUtil.isNotEmpty(jbwBList)) {
-//                    Storge jbwBstorge = storgeService.getById(jbwBList.get(0).getStorgeId());
-//                    map.put("fromStorge", jbwBstorge);
-//                }
-//                //出入库类型-原料出入库
-//                map.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_METERIAL_CRK);
-//                map.put("result", true);
-//            }
-//        }
         return map;
     }
 
     @Override
     public Map operation(JSONObject jsonObject, JSONObject bizJsonObject,Map<String, Object> conMap) {
-
-        Storge fstorge = (Storge) conMap.get("fromStorge");
-        Storge tstorge = (Storge) conMap.get("toStorge");
-        jsonObject.put("start", fstorge.getPointId());
-        jsonObject.put("goal", tstorge.getPointId());
-        jsonObject.put("transferType", "agv");
-        //此数据用来业务回传
-        bizJsonObject.put("srcPosition", fstorge.getId().toString());
-        bizJsonObject.put("targetPostion", tstorge.getId().toString());
-
-        map.put("jsonObject", jsonObject);
-        map.put("bizJsonObject", bizJsonObject);
+        // TODO 后续改成实际的海康定义的agv路网点位
         return map;
     }
 

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

@@ -623,6 +623,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                 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{//需要放到线边库

+ 7 - 1
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/HikAgvControl.java

@@ -115,7 +115,13 @@ public class HikAgvControl extends SuperController<AgvHikOrderInfoService, Long,
 //            }
             // 托板已经到位
             Object autoNodeTaskInfo = redisTemplate.opsForValue().get(taskCode);
-            JSONObject autoNodeTaskInfoObj =(autoNodeTaskInfo==null?null:JSONObject.parseObject(autoNodeTaskInfo.toString()));
+
+            String taskId = autoNodeTaskInfo.toString().split("-")[0];
+            String taskNodeId = autoNodeTaskInfo.toString().split("-")[1];
+            JSONObject autoNodeTaskInfoObj = new JSONObject();
+            autoNodeTaskInfoObj.put("taskId",taskId);
+            autoNodeTaskInfoObj.put("taskNodeId",taskNodeId);
+
 
             if(agvOkFlag){
                 redisTemplate.delete(taskCode);