Browse Source

agv托板不够用时从对应线内主动调度过来测试问题修改

yejian 3 years ago
parent
commit
71dd65ff43
12 changed files with 79 additions and 30 deletions
  1. 1 1
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/edgeLibrary/service/StorgeService.java
  2. 9 9
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/edgeLibrary/service/impl/StorgeServiceImpl.java
  3. 2 2
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderInfoServiceImpl.java
  4. 8 3
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/mq/TaskWorkNode.java
  5. 1 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/service/ProductionresourcePositionService.java
  6. 9 0
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/service/impl/ProductionresourcePositionServiceImpl.java
  7. 10 8
      imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/service/impl/RobotNodeServiceImpl.java
  8. 1 1
      imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/edgeLibrary/StorgeMapper.xml
  9. 3 0
      imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/productionResourceCenter/ProductionresourcePositionMapper.xml
  10. 14 0
      imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/AgvControl.java
  11. 14 0
      imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/HikAgvControl.java
  12. 7 6
      imcs-admin-boot/imcs-common/src/main/java/com/github/zuihou/common/constant/DictionaryKey.java

+ 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);
+    Map getPlateStorgeByNo(ZZone zZone,ZZone bomzZone);
 
     String getPointId(Storge storge, TTask task,String zoneType);
 

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

@@ -258,7 +258,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
      * @return
      */
     @Override
-    public Map getPlateStorgeByNo(ZZone zZone) {
+    public Map getPlateStorgeByNo(ZZone zZone, ZZone bomzZone) {
         //返回的map
         Map returnMap = new HashMap();
 
@@ -272,7 +272,7 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
         String jbwCode = "";
         //查询接驳位库位的存放物品,验证是否放置了1个托板
         Map map = new HashMap();
-        String jbw = DictionaryKey.YJ_ZONE_JBW.get(zZone.getName());
+        String jbw = DictionaryKey.YJ_ZONE_JBW.get(zZone.getNo());
         map.put("codes",StringUtil.changeIdsArrToSubQueryStr(jbw));
         map.put("haveGoods","1");
         map.put("findAgvStation","1");
@@ -354,14 +354,14 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
             if(StringUtils.isNotBlank(tempAgvTaskEndPoint)){
 // begin add by yejian on 20220802 for 判断如果接驳位起始不可用时判断是否有可用的空托盘,如果有,先让agv搬运到需放料所在位子
                 // 查找未被锁定并且空的托盘所在位子
-                List<String> includeJbwList = new ArrayList(Arrays.asList(jbw.split(",")));
-                String allJbw = DictionaryKey.YJ_ZONE_JBW.get("allJbw");
-
-                List<String> allJbwList = new ArrayList(Arrays.asList(allJbw.split(",")));
-                allJbwList.removeAll(includeJbwList);
                 Map usableJbwPlateMap =  new HashMap();
-
-                usableJbwPlateMap.put("codes",StringUtil.changeIdsArrToSubQueryStr(allJbwList));
+                if("safeguard".equals(zZone.getNo())){
+                    usableJbwPlateMap.put("codes",StringUtil.changeIdsArrToSubQueryStr(DictionaryKey.YJ_ZONE_JBW.get(bomzZone.getNo())));
+                }else if("capsule".equals(zZone.getNo())){
+                    usableJbwPlateMap.put("codes",StringUtil.changeIdsArrToSubQueryStr(DictionaryKey.YJ_ZONE_JBW.get("safeguard")));
+                }else if("framework".equals(zZone.getNo())){
+                    usableJbwPlateMap.put("codes",StringUtil.changeIdsArrToSubQueryStr(DictionaryKey.YJ_ZONE_JBW.get("safeguard")));
+                }
                 usableJbwPlateMap.put("haveGoods","1");
                 usableJbwPlateMap.put("findAgvStation","1");
                 List<ProductionresourcePosition> tempAgvStartList = productionresourcePositionMapper.getPPList(usableJbwPlateMap);

+ 2 - 2
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/externalApi/service/impl/AgvHikOrderInfoServiceImpl.java

@@ -137,8 +137,8 @@ public class AgvHikOrderInfoServiceImpl extends SuperCacheServiceImpl<AgvHikOrde
         String goal = data.get("goal").toString();
         String taskCode = UniqueKeyGenerator.getUniqueKeyStartWithTimestamp(17);
         String reqTime = DateUtil.format(Calendar.getInstance().getTime(), DatePattern.NORM_DATETIME_MS_PATTERN);
-        String taskId = data.get("taskId").toString();
-        String taskNodeId = data.get("taskNodeId").toString();
+        String taskId = String.valueOf(data.get("taskId"));
+        String taskNodeId = String.valueOf(data.get("taskNodeId"));
         // 组装创建AGV任务数据入库
         AgvHikOrderInfo agvOrderInfo = new AgvHikOrderInfo();
         agvOrderInfo.setStart(start);

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

@@ -1091,7 +1091,7 @@ public class TaskWorkNode {
             // 先找到处理节点下一节点agv起点地址
 
             TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);;
-            Map map = storgeService.getPlateStorgeByNo(zZone);
+            Map map = storgeService.getPlateStorgeByNo(zZone, bomzZone);
 
             String startAgvStationCode = map.get("jbwCode") ==null?null:map.get("jbwCode").toString();
             targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
@@ -1103,7 +1103,7 @@ public class TaskWorkNode {
             //获取产线ID
             Long agvGoalZoneId = zoneProductionresource.getZoneId();
             ZZone agvGoalZone = zoneService.getById(agvGoalZoneId);
-            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(agvGoalZone.getName()).split(",");
+            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(agvGoalZone.getNo()).split(",");
             List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourceAgvPositionByNos(jbwArr);
             logger.info("节点{},查询线边库轮询终点接驳位接驳位数量{}",taskNode.getId(),jbwBList);
             if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
@@ -1152,7 +1152,12 @@ public class TaskWorkNode {
             }else{
                 //目标设备
                 if(resourceId!=null){
-                    List<ProductionresourcePosition> targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
+                    List<ProductionresourcePosition> targetList = null;
+                    if("1".equals(beforTaskNode.getFindAgvFlag())){
+                        targetList = productionresourcePositionService.getFreeProductionAgvResourcePositionByIds(new String[] {resourceId.toString()});
+                    }else{
+                        targetList = productionresourcePositionService.getFreeProductionresourcePositionByIds(new String[] {resourceId.toString()});
+                    }
                     logger.info("节点{},查找目标设备可用信息{}",taskNode.getId(),targetList);
                     if(CollectionUtil.isNotEmpty(targetList)){
                         targetStorge = storgeService.getById(targetList.get(0).getStorgeId());

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

@@ -87,4 +87,5 @@ public interface ProductionresourcePositionService extends SuperService<Producti
 
     List<ProductionresourcePosition>getFreeProductionresourcePositionByTrayTypeNos(String [] noArr,String fitTrayType);
 
+    List<ProductionresourcePosition> getFreeProductionAgvResourcePositionByIds(String[] idArr);
 }

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

@@ -312,6 +312,15 @@ public class ProductionresourcePositionServiceImpl extends SuperServiceImpl<Prod
         List<ProductionresourcePosition>list = baseMapper.getPPList(sxlzmap);
         return list;
     }
+    @Override
+    public List<ProductionresourcePosition> getFreeProductionAgvResourcePositionByIds(String[] idArr){
+        Map sxlzmap = new HashMap();
+        sxlzmap.put("resourceIdStr",StringUtil.changeIdsArrToSubQueryStr(idArr));
+        sxlzmap.put("xbkFlag","1");
+        List<ProductionresourcePosition>list = baseMapper.getPPList(sxlzmap);
+        return list;
+    }
+
     @Override
     public List<ProductionresourcePosition> getProductionresourcePositionByIds(String[] idArr) {
         Map sxlzmap = new HashMap();

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

@@ -414,6 +414,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + nextTaskNode.getId(), targetStorge, 1, TimeUnit.DAYS);
 
                                 //目标是线边库
+                                msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + taskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
                                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + nextTaskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
 
                                 //满足条件--机器人空闲,设备或线边库有一个空闲
@@ -536,6 +537,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + nextTaskNode.getId(), targetStorge, 1, TimeUnit.DAYS);
 
                                 //目标是线边库
+                                msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + taskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
                                 msgUtil.redis_set(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_XBK_FLAG + nextTaskNode.getId(), targetxbk, 1, TimeUnit.DAYS);
                                 dataMap.put("result", true);
 
@@ -669,7 +671,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
             TaskNode lastAgvTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);;
             //获取接驳位。agvEndStationStorge
-            Map map = storgeService.getPlateStorgeByNo(zZone);
+            Map map = storgeService.getPlateStorgeByNo(zZone,bomzZone);
 
             String startAgvStationCode = map.get("jbwCode") ==null?null:map.get("jbwCode").toString();
             targetStorge = map.get("storge") ==null?null:(Storge)map.get("storge");
@@ -681,7 +683,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
             //获取产线ID
             Long agvGoalZoneId = zoneProductionresource.getZoneId();
             ZZone agvGoalZone = zoneService.getById(agvGoalZoneId);
-            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(agvGoalZone.getName()).split(",");
+            String[] jbwArr = DictionaryKey.YJ_ZONE_JBW.get(agvGoalZone.getNo()).split(",");
             List<ProductionresourcePosition> jbwBList = productionresourcePositionService.getFreeProductionresourceAgvPositionByNos(jbwArr);
 //            log.info("节点{},查询终点接驳位接驳位数量{}",taskNode.getId(),jbwBList);
             if(targetStorge!=null&&CollectionUtil.isNotEmpty(jbwBList)){
@@ -715,7 +717,8 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                 returnMap.put("store",targetStorge);
                 returnMap.put("targetxbk","0");
 
-            }else{//需要放到线边库
+            }else{
+                //需要放到线边库
                 // begin add by yejian on 20220802 for 调度空托盘流转
                 String tempAgvTaskStartPoint = map.get("tempAgvTaskStartPoint") == null?null:(String)map.get("tempAgvTaskStartPoint");
                 String tempAgvTaskEndPoint = map.get("tempAgvTaskEndPoint") == null?null:(String)map.get("tempAgvTaskEndPoint");
@@ -724,18 +727,17 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                 if(StringUtils.isNotBlank(tempAgvTaskStartPoint) && StringUtils.isNotBlank(tempAgvTaskEndPoint)){
                     // 锁定起点终点接驳位
                     Map agvData = new HashMap();
-                    String agvTaskNodeId = UniqueKeyGenerator.getUniqueKeyStartWithTimestamp(17);
                     agvData.put("start", tempAgvTaskStartPoint);
                     agvData.put("goal", tempAgvTaskEndPoint);
-                    agvData.put("taskId", agvTaskNodeId);
-                    agvData.put("taskNodeId", agvTaskNodeId );
+                    agvData.put("taskId", taskNode.getTaskId());
+                    agvData.put("taskNodeId", taskNode.getId());
                     // 0:节点自动调度 1:节点资源不可用人工调度
                     agvData.put("agvTaskType", "1");
                     JSONObject agvParam = new JSONObject();
                     agvParam.putAll(agvData);
                     String zoneType = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.ZONE_TYPE).toString());
-                    storgeService.lockStorge(tempAgvTaskStartPointStorge, Long.valueOf(agvTaskNodeId));
-                    storgeService.lockStorge(tempAgvTaskEndPointStorge, Long.valueOf(agvTaskNodeId));
+                    storgeService.lockStorge(tempAgvTaskStartPointStorge, Long.valueOf(taskNode.getId()));
+                    storgeService.lockStorge(tempAgvTaskEndPointStorge, Long.valueOf(taskNode.getId()));
                     if(zoneType.equals(ParameterKey.ZONE_SFX)){
                         agvData.put("transferType","agv");
                         R addAgvTask = externalApiService.processTransferJob(agvData);

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

@@ -109,7 +109,7 @@
     </select>
 
     <update id="updateLockStatusById">
-        UPDATE imcs_s_storge SET lock_status = '1' WHERE lock_status = '0' and (id = #{agvStartStorgeId} or id = #{agvEndStorgeId});
+        UPDATE imcs_s_storge SET lock_status = '1', camp_id = null WHERE lock_status = '0' and (id = #{agvStartStorgeId} or id = #{agvEndStorgeId});
     </update>
 
 </mapper>

+ 3 - 0
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/productionResourceCenter/ProductionresourcePositionMapper.xml

@@ -84,6 +84,9 @@
             and r.id not in (select ittn.target_resource_id from imcs_t_task_node ittn where ittn.exe_status != 3 AND ittn.target_resource_id IS NOT null)
             and r.name like '%接驳%'
         </if>
+        <if test="xbkFlag != null and xbkFlag != ''">
+         and (i.goods_type = '5' and s.lock_status = '1')
+        </if>
     </select>
     <select id="getStorgeIdByResource" resultType="com.github.zuihou.business.productionResourceCenter.entity.ProductionresourcePosition">
         select * from imcs_p_productionresource_position where 1=1

+ 14 - 0
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/externalApi/AgvControl.java

@@ -14,6 +14,8 @@ import com.github.zuihou.business.externalApi.entity.AgvOrderInfo;
 import com.github.zuihou.business.externalApi.service.AgvOrderDetailInfoService;
 import com.github.zuihou.business.externalApi.service.AgvOrderInfoService;
 import com.github.zuihou.business.externalApi.service.ExternalApiService;
+import com.github.zuihou.business.operationManagementCenter.entity.TaskNode;
+import com.github.zuihou.business.operationManagementCenter.service.TaskNodeService;
 import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourceBizMapper;
 import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourcePositionMapper;
 import com.github.zuihou.business.productionResourceCenter.entity.Productionresource;
@@ -84,6 +86,8 @@ public class AgvControl {
     private StorgeMapper storgeMapper;
     @Autowired
     private StockInfoMapper stockInfoMapper;
+    @Autowired
+    private TaskNodeService taskNodeService;
 
     @ApiOperation(value = "agv任务完成回调", notes = "agv任务完成回调")
     @PostMapping("/agvDoneResult")
@@ -171,6 +175,16 @@ public class AgvControl {
                     ProductionresourcePosition agvStartResourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,agvStartResource.getId()));
                     ProductionresourcePosition agvEndResourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,agvEndResource.getId()));
 
+
+                    // 更新节点agv接驳位信息,agv回调后更新后续agv流转所用的接驳位设备id
+                    TaskNode taskNode = taskNodeService.getById(agvOrderInfo.getTaskNodeId());
+                    TaskNode nextOneTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+                    taskNode.setTargetResourceId(agvEndResource.getId());
+                    nextOneTaskNode.setResourceId(agvEndResource.getId());
+                    nextOneTaskNode.setTargetResourceId(agvStartResource.getId());
+                    taskNodeService.updateById(taskNode);
+                    taskNodeService.updateById(nextOneTaskNode);
+
                     // 解锁预占锁定
                     Map updateLockStatusParams =  new HashMap();
                     updateLockStatusParams.put("agvStartStorgeId", agvStartResourcePosition.getStorgeId());

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

@@ -17,8 +17,11 @@ import com.github.zuihou.business.externalApi.entity.AgvHikOrderInfo;
 import com.github.zuihou.business.externalApi.entity.AgvOrderDetailInfo;
 import com.github.zuihou.business.externalApi.entity.AgvOrderInfo;
 import com.github.zuihou.business.externalApi.service.*;
+import com.github.zuihou.business.operationManagementCenter.dao.TaskNodeMapper;
 import com.github.zuihou.business.operationManagementCenter.dto.TTaskPageDTO;
 import com.github.zuihou.business.operationManagementCenter.entity.TTask;
+import com.github.zuihou.business.operationManagementCenter.entity.TaskNode;
+import com.github.zuihou.business.operationManagementCenter.service.TaskNodeService;
 import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourceBizMapper;
 import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourcePositionMapper;
 import com.github.zuihou.business.productionResourceCenter.entity.Productionresource;
@@ -88,6 +91,8 @@ public class HikAgvControl extends SuperController<AgvHikOrderInfoService, Long,
     private StorgeMapper storgeMapper;
     @Autowired
     private StockInfoMapper stockInfoMapper;
+    @Autowired
+    private TaskNodeService taskNodeService;
 
     @Override
     public void query(PageParams<AgvHikOrderInfoPageDTO> params, IPage<AgvHikOrderInfo> page, Long defSize) {
@@ -187,6 +192,15 @@ public class HikAgvControl extends SuperController<AgvHikOrderInfoService, Long,
                     ProductionresourcePosition agvStartResourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,agvStartResource.getId()));
                     ProductionresourcePosition agvEndResourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId,agvEndResource.getId()));
 
+                    // 更新节点agv接驳位信息,agv回调后更新后续agv流转所用的接驳位设备id
+                    TaskNode taskNode = taskNodeService.getById(agvHikOrderInfo.getTaskNodeId());
+                    TaskNode nextOneTaskNode = taskNodeService.getNextNTaskNode(taskNode,1);
+                    taskNode.setTargetResourceId(agvEndResource.getId());
+                    nextOneTaskNode.setResourceId(agvEndResource.getId());
+                    nextOneTaskNode.setTargetResourceId(agvStartResource.getId());
+                    taskNodeService.updateById(taskNode);
+                    taskNodeService.updateById(nextOneTaskNode);
+
                     // 解锁预占锁定
                     Map updateLockStatusParams =  new HashMap();
                     updateLockStatusParams.put("agvStartStorgeId", agvStartResourcePosition.getStorgeId());

+ 7 - 6
imcs-admin-boot/imcs-common/src/main/java/com/github/zuihou/common/constant/DictionaryKey.java

@@ -135,7 +135,7 @@ public interface DictionaryKey {
 
             // 示范线配置
 //            put("质量中心-capsule", "XBK_01");
-//            put("舱体类加工单元", "XBK_03,XBK_04");
+//            put("柔性线", "XBK_03,XBK_04");
 //            put("plateAndClamp", "XBK_01");
         }
     };
@@ -144,14 +144,15 @@ public interface DictionaryKey {
     Map<String, String> YJ_ZONE_JBW = new HashMap<String, String>(){
         {
             // 云箭配置
-            put("智能生产保障系统", "BZ_361,BZ_362,BZ_363");
-            put("框体类加工单元", "KT_121,KT_122");
-            put("舱体类加工单元", "CT_121,CT_122");
+            put("safeguard", "BZ_361,BZ_362,BZ_363");
+            put("framework", "KT_121,KT_122");
+            put("capsule", "CT_121,CT_122");
             put("allJbw", "BZ_361,BZ_362,BZ_363,KT_121,KT_122,CT_121,CT_122");
 
             // 示范线配置
-//            put("质量中心", "R3,R4");
-//            put("柔性线", "R1,R2");
+//            put("safeguard", "R3,R4");
+//            put("capsule", "R1,R2");
+//            put("allJbw", "R1,R2,R3,R4");
         }
     };