Browse Source

Merge remote-tracking branch 'origin/master' into master

yejian 3 years ago
parent
commit
c92a3cd111

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

@@ -259,11 +259,9 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
     public Map getPlateStorgeByNo(ZZone zZone) {
         //返回的map
         Map returnMap = new HashMap();
-        Long relJBW = null;
-        //关系的MAP,接驳位
-        Map relMap = new HashMap();
 
         Storge storge = null;
+        String resourceId = null;
         String jbwCode = "";
         //查询接驳位库位的存放物品,验证是否放置了1个托板
         Map map = new HashMap();
@@ -290,7 +288,6 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
             }
             //拼凑出托板列表,一起查询提高效率,避免循环查询
             if(tbList!=null&&tbList.size()>0){
-                relJBW = tbList.get(0).getStorgeId();
                 //托板的编号和”托板生产资源“一致
                 List<String>tbIdList = tbList.stream().map(t->t.getUniqueCode().toString()).collect(Collectors.toList());
                 Map querymap = new HashMap();
@@ -305,6 +302,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
                 if(emptyList!=null&&emptyList.size()>0){
                     ProductionresourcePosition position = emptyList.get(0);
                     storge = baseMapper.selectById(position.getStorgeId());
+                    resourceId = position.getResourceId()==null?"":position.getResourceId().toString();
                 }
             }
             }
@@ -313,12 +311,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
                 returnMap.put("storge",storge);
                 storge.setResourceNo(jbwCode);
                 returnMap.put("jbwCode",jbwCode);
-                //把所属的接驳位放入map
-//                if(relJBW!=null){
-//                    Storge jbwStorge = this.getById(relJBW);
-//                    jbwStorge.setResourceNo(jbwCode);
-//                    returnMap.put("jbwStorge",jbwStorge);
-//                }
+                returnMap.put("resourceId",resourceId);
             }
             return returnMap;
         }

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

@@ -126,6 +126,8 @@ public class RobotNodeServiceImpl implements NodeOperationService {
     private ZZone zZone;
 
     private Long bomZzoneId;
+
+    private ZZone bomzZone;
     // Plc url
     private String url;
     // Plc port
@@ -160,6 +162,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
         zoneName = zZone.getName();
         BBom bom = bBomMapper.selectById(task.getBomId());
         bomZzoneId = bom.getZoneId();
+        bomzZone = zoneService.getById(bomZzoneId);
 
         // 判断该节点使用那条线的plc
         plcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
@@ -200,7 +203,9 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
         List<StockInfo> flikustockInfos = null;//获取初始立库库存
 
-        Storge currStore = null;
+        //当需要锁定agv开始、结束的接驳位库位
+        Storge agvStartStationStorge = null;
+        Storge agvEndStationStorge = null;
         // 人工序只有上下料
         if(taskNode.getCompleteBatchSort()==1){
 //            BBom bom = bBomMapper.selectOne(Wraps.<BBom>lbQ().eq(BBom::getId,task.getBomId()));
@@ -222,85 +227,59 @@ public class RobotNodeServiceImpl implements NodeOperationService {
             // 获取抓取托盘起点及放设备重点
 //            StockInfo metetailStockInfo = flikustockInfos.get(0);
 //            currStore = storgeMapper.selectById(metetailStockInfo.getStorgeId());
-        }else{
-            // 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是agv动作时锁定锁定agv接驳位
-            TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
-            TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
-            TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
-
-            beforTaskNode.setAutoNode(resourceAutoCodeMapper.selectById(beforTaskNode.getAutoNode().getId()));
-            //前序是设备序并且最后一个节点是agv搬运,锁定agv相关库位信息
-            if(beforTaskNode.getTaskId().equals(taskNode.getTaskId()) && "1".equals(beforTaskNode.getAutoNode().getCategory()) && null == lastOperationTaskNode.getResourceId()){
-                currStore = workpieceService.getWorkPieceStock(taskNode.getCompleteBatchNo(), false);
-                ProductionresourcePosition startProductionresourcePosition = null;
-                ProductionresourcePosition endProductionresourcePosition = null;
-                Storge agvStartStationStorge = null;
-                Storge agvEndStationStorge = null;
-                // 判断agv接驳位是可用
-                ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,taskNode.getResourceId()));
-                Map queryParams = new HashMap();
-                queryParams.put("zoneId",zZoneProductionresource.getZoneId());
-                queryParams.put("resourceName","接驳");
-                List<Productionresource> agvStartStationsResources = productionresourceBizMapper.selectResouces(queryParams);
-                Productionresource startAgvStation = null;
-                Productionresource endAgvStation = null;
-                // 遍历开始接驳位判断是否有可用的接驳位
-                for(Productionresource agvStation : agvStartStationsResources){
-                    startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
-                    List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId,startProductionresourcePosition.getStorgeId()));
-                    List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
-                    agvStartStationStorge = storgeService.getById(startProductionresourcePosition.getStorgeId());
-                    // 有托板但是没有托盘认为可放
-                    if(meterails.contains("5") &&  !meterails.contains("2") && agvStartStationStorge.getStatus().equals("1") && "1".equals(agvStartStationStorge.getLockStatus())){
-                        startAgvStation = agvStation;
-                        break;
-                    }
-                }
-                queryParams.clear();
-                queryParams.put("zoneId",bomZzoneId);
-                queryParams.put("resourceName","接驳");
-                List<Productionresource> agvEndStationsResources = productionresourceBizMapper.selectResouces(queryParams);
-
-                // 遍历开始接驳位判断是否有可用的接驳位
-                for(Productionresource agvStation : agvEndStationsResources){
-                    endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
-                    List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId,endProductionresourcePosition.getStorgeId()));
-                    List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
-                    agvEndStationStorge = storgeService.getById(endProductionresourcePosition.getStorgeId());
+//        }else{
+//            // 先判断上一指令是否为是否为设备指令,在判断工序最后一个指令是agv动作时锁定锁定agv接驳位
+//            TaskNode beforTaskNode = taskNodeService.getNextNTaskNode(taskNode,-1);
+//            TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+//            TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
+//
+//            beforTaskNode.setAutoNode(resourceAutoCodeMapper.selectById(beforTaskNode.getAutoNode().getId()));
+//            //前序是设备序并且最后一个节点是agv搬运,锁定agv相关库位信息
+//            if(beforTaskNode.getTaskId().equals(taskNode.getTaskId()) && "1".equals(beforTaskNode.getAutoNode().getCategory()) && null == lastOperationTaskNode.getResourceId()){
+//                ProductionresourcePosition startProductionresourcePosition = null;
+//                ProductionresourcePosition endProductionresourcePosition = null;
+//                // 判断agv接驳位是可用
+//                ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,taskNode.getResourceId()));
+//                Map queryParams = new HashMap();
+//                queryParams.put("zoneId",zZoneProductionresource.getZoneId());
+//                queryParams.put("resourceName","接驳");
+//                List<Productionresource> agvStartStationsResources = productionresourceBizMapper.selectResouces(queryParams);
+//                Productionresource startAgvStation = null;
+//                Productionresource endAgvStation = null;
+//                // 遍历开始接驳位判断是否有可用的接驳位
+//                for(Productionresource agvStation : agvStartStationsResources){
+//                    startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, agvStation.getId()));
+//                    List<StockInfo> agvStationMeterails = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getStorgeId,startProductionresourcePosition.getStorgeId()));
+//                    List<String> meterails = agvStationMeterails.stream().map(p -> p.getGoodsType()).collect(Collectors.toList());
+//                    agvStartStationStorge = storgeService.getById(startProductionresourcePosition.getStorgeId());
 //                    // 有托板但是没有托盘认为可放
 //                    if(meterails.contains("5") && !meterails.contains("2") && agvEndStationStorge.getStatus().equals("1")){
 //                        endAgvStation = agvStation;
 //                        break;
 //                    }
-
-                    // 终点接驳位任何东西都不能有
-                    if(meterails.size() == 0 && "1".equals(agvEndStationStorge.getLockStatus())){
-                        endAgvStation = agvStation;
-                        break;
-                    }
-                }
-
-                if (null != agvStartStationStorge && null != agvEndStationStorge){
-//                    storgeService.lockStorge(agvStartStationStorge, nextTaskNode.getId());
-//                    storgeService.lockStorge(agvEndStationStorge, lastOperationTaskNode.getId());
-                    // 将agv相关的节点的目标节点地址更新进tasknode表
-                    nextTaskNode.setTargetResourceId(startAgvStation.getId());
-                    lastOperationTaskNode.setTargetResourceId(endAgvStation.getId());
-                    taskNodeService.updateById(nextTaskNode);
-                    taskNodeService.updateById(lastOperationTaskNode);
-                    dataMap.put("bizType","agv");
-                }else{
-//                    // 获取机器人操作线边库
-//                    xbkArr = new String[]{DictionaryKey.YJ_ZONE_XBK.get(zoneName)};
-//                    xbkList = productionresourcePositionService.getFreeProductionresourcePositionByNos(xbkArr);
-//                    if(CollectionUtil.isNotEmpty(xbkList)){
-//                        ProductionresourcePosition position = xbkList.get(0);
-//                        // TODO 应该需要合并到getTargetStorge 方法中
-////                    targetStorge = storgeService.getById(position.getStorgeId());
-//                        map.put("bizType","xbk");
-//                    }
-                }
-            }
+//                }
+//
+//                if (null != agvStartStationStorge && null != agvEndStationStorge){
+////                    storgeService.lockStorge(agvStartStationStorge, nextTaskNode.getId());
+////                    storgeService.lockStorge(agvEndStationStorge, lastOperationTaskNode.getId());
+//                    // 将agv相关的节点的目标节点地址更新进tasknode表
+//                    nextTaskNode.setTargetResourceId(startAgvStation.getId());
+//                    lastOperationTaskNode.setTargetResourceId(endAgvStation.getId());
+//                    taskNodeService.updateById(nextTaskNode);
+//                    taskNodeService.updateById(lastOperationTaskNode);
+//                    dataMap.put("bizType","agv");
+//                }else{
+////                    // 获取机器人操作线边库
+////                    xbkArr = new String[]{DictionaryKey.YJ_ZONE_XBK.get(zoneName)};
+////                    xbkList = productionresourcePositionService.getFreeProductionresourcePositionByNos(xbkArr);
+////                    if(CollectionUtil.isNotEmpty(xbkList)){
+////                        ProductionresourcePosition position = xbkList.get(0);
+////                        // TODO 应该需要合并到getTargetStorge 方法中
+//////                    targetStorge = storgeService.getById(position.getStorgeId());
+////                        map.put("bizType","xbk");
+////                    }
+//                }
+//            }
         }
 
         //目标地址判断
@@ -320,26 +299,26 @@ public class RobotNodeServiceImpl implements NodeOperationService {
             case "柔性线机器人":
                 //操作柔性线边库 具有取、移动、放三种指令
                 //取放加工设备  设备存在缓存位
-                dataMap = this.commandHandle(dataMap,flikustockInfos,functionName);
+                dataMap = this.commandHandle(dataMap,flikustockInfos,agvStartStationStorge,functionName);
                 dataMap.put("deviceUrl", ZK_ip_rxx);
                 break;
             case "智能单元机器人":
                 //操作智能单元线边库 具有取、移动、放三种指令
                 //取放加工设备 无缓存位处理
-                dataMap = this.commandHandle(dataMap , flikustockInfos,functionName);
+                dataMap = this.commandHandle(dataMap , flikustockInfos,agvStartStationStorge,functionName);
                 dataMap.put("deviceUrl", ZK_ip_zndy);
                 break;
             case "舱体类加工单元":
                 //操作舱体线边库 具有取、移动、放三种指令
                 //取放加工设备
-                dataMap = this.commandHandle(dataMap,flikustockInfos, functionName);
+                dataMap = this.commandHandle(dataMap,flikustockInfos,agvStartStationStorge, functionName);
                 break;
             case "智能生产保障系统":
-                dataMap = this.commandHandle(dataMap,flikustockInfos, functionName);
+                dataMap = this.commandHandle(dataMap,flikustockInfos, agvStartStationStorge,functionName);
                 dataMap.put("deviceUrl", ZK_ip_rxx);
                 break;
             case "框体类加工单元":
-                dataMap = this.commandHandle(dataMap,flikustockInfos, functionName);
+                dataMap = this.commandHandle(dataMap,flikustockInfos,agvStartStationStorge, functionName);
                 dataMap.put("deviceUrl", ZK_ip_rxx);
                 break;
         }
@@ -368,7 +347,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
     }
 
     //机器人功能操作
-    private Map<String, Object>  commandHandle(Map<String, Object> dataMap, List<StockInfo>flikustockInfos, String functionName){
+    private Map<String, Object>  commandHandle(Map<String, Object> dataMap, List<StockInfo>flikustockInfos, Storge agvStartStationStorge,String functionName){
         TaskNode taskNode = (TaskNode) dataMap.get("taskNode");
         TTask task = (TTask) dataMap.get("task");
         int count = Integer.parseInt(dataMap.get(taskNode.getId().toString() + "count") == null ? "0" : dataMap.get(taskNode.getId().toString() + "count").toString());
@@ -479,6 +458,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                 //目标地址和类型
                 Storge targetStorge = returnMap.get("store")==null?null:(Storge)returnMap.get("store");
                 String targetxbk = returnMap.get("targetxbk")==null?null:(String)returnMap.get("targetxbk");
+                Storge agvEndStationStorge = returnMap.get("agvEndStationStorge")==null?null:(Storge)returnMap.get("agvEndStationStorge");
 
                 dataMap.put("method", "GetServoStacker");
                 ProductionresourcePosition po = logical(robotList,targetStorge,flikustockInfos,taskNode);
@@ -618,38 +598,48 @@ public class RobotNodeServiceImpl implements NodeOperationService {
     public Map getTargetStorge(TaskNode taskNode){
         Map returnMap = new HashMap();
         Storge targetStorge = null;
+        Storge agvEndStationStorge = null;
         Long resourceId = taskNode.getTargetResourceId();
         String xbkFlag = "";
 
-        //
-//        if(taskNode.getCompleteBatchSort()==1){
-//            if(CollectionUtil.isNotEmpty(flikustockInfos)){
-//                targetStorge = storgeMapper.selectById(flikustockInfos.get(0).getStorgeId());
-//                returnMap.put("store",targetStorge);
-//                returnMap.put("targetxbk","0");
-//                return returnMap;
-//            }
-//        }
-
-        //目标设备
-        if(resourceId!=null){
-            targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
-            if(CollectionUtil.isNotEmpty(targetList)){
-                targetStorge = storgeService.getById(targetList.get(0).getStorgeId());
-                returnMap.put("store",targetStorge);
-                returnMap.put("targetxbk","0");
-            }else{//需要放到线边库
-                xbkFlag = "1";
-            }
-        }else{//放到接驳位
+        if("1".equals(taskNode.getFindAgvFlag())){//需要提前锁定下个接驳位
+            //获取接驳位。
             Map map = storgeService.getPlateStorgeByNo(zZone);
             targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
-            if(targetStorge!=null){
+            String targetResourceId = map.get("resourceId") ==null?null:(String)map.get("resourceId");
+            //对面产线接驳位不为空
+            String[] jbwArr = new String[]{DictionaryKey.YJ_ZONE_JBW.get(bomzZone.getName())};
+            List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourcePositionByNos(jbwArr);
+
+            if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
+                ProductionresourcePosition position = jbwBList.get(0);
+                agvEndStationStorge =storgeService.getById(position.getStorgeId());
+
                 returnMap.put("store",targetStorge);
                 returnMap.put("targetxbk","0");
+
+                //更新到targetresourceid
+                TaskNode nextTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+                TaskNode lastOperationTaskNode = taskNodeService.getOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId,taskNode.getTaskId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
+                nextTaskNode.setTargetResourceId(Long.parseLong(targetResourceId));
+                lastOperationTaskNode.setTargetResourceId(position.getResourceId());
+                taskNodeService.updateById(nextTaskNode);
+                taskNodeService.updateById(lastOperationTaskNode);
             }else{//需要放到线边库
                 xbkFlag = "1";
             }
+        }else {
+            //目标设备
+            if(resourceId!=null){
+                targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
+                if(CollectionUtil.isNotEmpty(targetList)){
+                    targetStorge = storgeService.getById(targetList.get(0).getStorgeId());
+                    returnMap.put("store",targetStorge);
+                    returnMap.put("targetxbk","0");
+                }else{//需要放到线边库
+                    xbkFlag = "1";
+                }
+            }
         }
 
         if("1".equals(xbkFlag)){//最终放到线边库中
@@ -663,6 +653,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                 returnMap.put("targetxbk","1");
             }
         }
+        returnMap.put("agvEndStationStorge",agvEndStationStorge);
         return returnMap;
     }
 

+ 6 - 1
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/classSchedule/ScheduleFrequencyController.java

@@ -69,7 +69,12 @@ public class ScheduleFrequencyController extends SuperController<ScheduleFrequen
     public void query(PageParams<ScheduleFrequencyPageDTO> params, IPage<ScheduleFrequency> page, Long defSize) {
         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
-        String jsonParam = redisTemplate.opsForValue().get("testParam").toString();
+        String jsonParam = "";
+        Object obj = redisTemplate.opsForValue().get("testParam");
+        if(obj != null){
+            jsonParam = redisTemplate.opsForValue().get("testParam").toString();
+        }
+
         HttpEntity<String> formEntity = new HttpEntity<String>(jsonParam,headers);
         //调用接口
         String returnData = restTemplate.postForObject(url, formEntity, String.class);