Browse Source

agv多线程调度回滚

yejian 3 years ago
parent
commit
da64251d59

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/edgeLibrary/service/StorgeService.java

@@ -84,7 +84,7 @@ public interface StorgeService extends SuperCacheService<Storge> {
 
     void setValidTray(Map map);
 
-    Map getPlateStorgeByNo(ZZone zZone,List<Long> occupyAgvStations);
+    Map getPlateStorgeByNo(ZZone zZone);
 
     String getPointId(Storge storge, TTask task,String zoneType);
 

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

@@ -256,7 +256,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
      * @return
      */
     @Override
-    public Map getPlateStorgeByNo(ZZone zZone,List<Long> occupyAgvStations) {
+    public Map getPlateStorgeByNo(ZZone zZone) {
         //返回的map
         Map returnMap = new HashMap();
 
@@ -307,10 +307,8 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
 //                }
                 ProductionresourcePosition position = null;
                 for(ProductionresourcePosition productionresourcePosition : tbList){
-                    if(!occupyAgvStations.contains(productionresourcePosition.getResourceId())){
-                        position = productionresourcePosition;
-                        break;
-                    }
+                    position = productionresourcePosition;
+                    break;
                 }
 
                 if(null != position){

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

@@ -830,47 +830,33 @@ public class TaskWorkNode {
         Long resourceId = taskNode.getTargetResourceId();
 
         if ("1".equals(findAgvFlag)) {//需要提前锁定下个接驳位
-            synchronized (DictionaryKey.CHECK_AGV_STATION){
-                List<Long> occupyAgvStations = (null == msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY) ? new ArrayList<>(): (List<Long>) msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY));
-                //获取接驳位。
-                Map map = storgeService.getPlateStorgeByNo(zZone, occupyAgvStations);
-                targetStorge = map.get("storge") == null ? null : (Storge) map.get("storge");
-                String targetResourceId = map.get("resourceId") == null ? null : (String) map.get("resourceId");
-                //对面产线接驳位不为空TODO
-                String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
-                List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
-
-                if (targetStorge != null && CollectionUtil.isNotEmpty(jbwBList)) {
-                    ProductionresourcePosition position = null;
-                    for(ProductionresourcePosition productionresourcePosition : jbwBList){
-                        if(!occupyAgvStations.contains(productionresourcePosition.getResourceId())){
-                            position = productionresourcePosition;
-                            break;
-                        }
-                    }
-                    if(null!=position){
-                        agvEndStationStorge = storgeService.getById(position.getStorgeId());
-
-                        //更新到targetresourceid
-                        TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
-//                    TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId, taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
-                        taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
-                        lastAgvTaskNode.setTargetResourceId(position.getResourceId());
-                        lastAgvTaskNode.setResourceId(taskNode.getTargetResourceId());
-                        taskNodeService.updateById(taskNode);
-                        taskNodeService.updateById(lastAgvTaskNode);
-
-                        if(!occupyAgvStations.contains(Long.valueOf(targetResourceId))){
-                            occupyAgvStations.add(Long.valueOf(targetResourceId));
-                        }
-                        if(!occupyAgvStations.contains(position.getResourceId())){
-                            occupyAgvStations.add(position.getResourceId());
-                        }
-                        msgUtil.redis_set(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY,occupyAgvStations);
-                    }
+            //获取接驳位。
+            Map map = storgeService.getPlateStorgeByNo(zZone);
+            targetStorge = map.get("storge") == null ? null : (Storge) map.get("storge");
+            String targetResourceId = map.get("resourceId") == null ? null : (String) map.get("resourceId");
+            //对面产线接驳位不为空TODO
+            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
+            List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
+
+            if (targetStorge != null && CollectionUtil.isNotEmpty(jbwBList)) {
+                ProductionresourcePosition position = null;
+                for(ProductionresourcePosition productionresourcePosition : jbwBList){
+                    position = productionresourcePosition;
+                    break;
+                }
+                if(null!=position){
+                    agvEndStationStorge = storgeService.getById(position.getStorgeId());
 
-                    returnMap.put("store", targetStorge);
+                    //更新到targetresourceid
+                    TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+//                    TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId, taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
+                    taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
+                    lastAgvTaskNode.setTargetResourceId(position.getResourceId());
+                    lastAgvTaskNode.setResourceId(taskNode.getTargetResourceId());
+                    taskNodeService.updateById(taskNode);
+                    taskNodeService.updateById(lastAgvTaskNode);
                 }
+                returnMap.put("store", targetStorge);
             }
         } else {
             //目标设备

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

@@ -1603,23 +1603,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
      * @param task
      * @param callBackJson
      */
-    public synchronized R<String> demoLineStock(TaskNode taskNode, TTask task, JSONObject callBackJson,TWorkpiece currWorkpiece) {
-
-        // begin add by yejian on 20220504 for agv出入库预占释放防止多线程抢占
-
-        // 如果前一节点时agv搬运节点,机器人将物料帮运走后释放预占redis里面的内容
-
-        List<Long> occupyAgvStations = (null == msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY) ? new ArrayList<>(): (List<Long>) msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY));
-        TaskNode beforTaskNode = getNextNTaskNode(taskNode, -1);
-        if("03".equals(taskNode.getInterfaceType())){
-            occupyAgvStations.remove(beforTaskNode.getTargetResourceId());
-        }
-
-        if(null != beforTaskNode && "03".equals(beforTaskNode.getInterfaceType())){
-            occupyAgvStations.remove(beforTaskNode.getTargetResourceId());
-        }
-        msgUtil.redis_set(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY,occupyAgvStations);
-        // end add by yejian on 20220504 for agv出入库预占释放防止多线程抢占
+    public R<String> demoLineStock(TaskNode taskNode, TTask task, JSONObject callBackJson,TWorkpiece currWorkpiece) {
 
         //没有回传参数,直接不需要出入库操作
         String stockType = callBackJson.getString(DemoLineConstant.DEMOLINE_STOCK_TYPE);

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

@@ -514,60 +514,47 @@ public class RobotNodeServiceImpl implements NodeOperationService {
         String xbkFlag = "";
 
         if("1".equals(findAgvFlag)){//需要提前锁定下个接驳位
-            synchronized (DictionaryKey.CHECK_AGV_STATION){
-                // begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
-                // 先找到处理节点下一节点agv起点地址
-                List<Long> occupyAgvStations = (null == msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY) ? new ArrayList<>(): (List<Long>) msgUtil.redis_get(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY));
-
-                TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);;
-                //获取接驳位。agvEndStationStorge
-                Map map = storgeService.getPlateStorgeByNo(zZone,occupyAgvStations);
-                targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
-                String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
-                // 在向下找agv终点位子
-                // 下一个节点机器人所属产线
-                TaskNode afterLastAgvTaskNode = taskNodeService.getNextNTaskNode(lastAgvTaskNode,1);
-                ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,afterLastAgvTaskNode.getResourceId()));
-                //获取产线ID
-                zoneId = zoneProductionresource.getZoneId();
-                zZone = zoneService.getById(zoneId);
-                String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
-                List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
-                if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
-
-                    ProductionresourcePosition position = null;
-                    for(ProductionresourcePosition productionresourcePosition : jbwBList){
-                        if(!occupyAgvStations.contains(productionresourcePosition.getResourceId())){
-                            position = productionresourcePosition;
-                            break;
-                        }
-                    }
-                    if(null!=position){
-                        agvEndStationStorge =storgeService.getById(position.getStorgeId());
+            // begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
+            // 先找到处理节点下一节点agv起点地址
+
+            TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);;
+            //获取接驳位。agvEndStationStorge
+            Map map = storgeService.getPlateStorgeByNo(zZone);
+            targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
+            String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
+            // 在向下找agv终点位子
+            // 下一个节点机器人所属产线
+            TaskNode afterLastAgvTaskNode = taskNodeService.getNextNTaskNode(lastAgvTaskNode,1);
+            ZZoneProductionresource zoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,afterLastAgvTaskNode.getResourceId()));
+            //获取产线ID
+            zoneId = zoneProductionresource.getZoneId();
+            zZone = zoneService.getById(zoneId);
+            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName()).split(",");
+            List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
+            if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
+
+                ProductionresourcePosition position = null;
+                for(ProductionresourcePosition productionresourcePosition : jbwBList){
+                    position = productionresourcePosition;
+                    break;
+                }
+                if(null!=position){
+                    agvEndStationStorge =storgeService.getById(position.getStorgeId());
 
-                        //更新到targetresourceid
+                    //更新到targetresourceid
 //                TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
-                        taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
-                        lastAgvTaskNode.setTargetResourceId(position.getResourceId());
-                        lastAgvTaskNode.setResourceId(taskNode.getTargetResourceId());
-                        taskNodeService.updateById(taskNode);
-                        taskNodeService.updateById(lastAgvTaskNode);
-
-                        if(!occupyAgvStations.contains(Long.valueOf(targetResourceId))){
-                            occupyAgvStations.add(Long.valueOf(targetResourceId));
-                        }
-                        if(!occupyAgvStations.contains(position.getResourceId())){
-                            occupyAgvStations.add(position.getResourceId());
-                        }
-                        msgUtil.redis_set(DemoCacheKey.DEMOLINE_AGV_STATION_OCCUPY,occupyAgvStations);
-                    }
+                    taskNode.setTargetResourceId(Long.parseLong(targetResourceId));
+                    lastAgvTaskNode.setTargetResourceId(position.getResourceId());
+                    lastAgvTaskNode.setResourceId(taskNode.getTargetResourceId());
+                    taskNodeService.updateById(taskNode);
+                    taskNodeService.updateById(lastAgvTaskNode);
+                }
 
-                    returnMap.put("store",targetStorge);
-                    returnMap.put("targetxbk","0");
+                returnMap.put("store",targetStorge);
+                returnMap.put("targetxbk","0");
 
-                }else{//需要放到线边库
-                    xbkFlag = "1";
-                }
+            }else{//需要放到线边库
+                xbkFlag = "1";
             }
 
             // end modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题