Kaynağa Gözat

订单手动模式复用节点代码,废弃之前的代码

yejian 3 yıl önce
ebeveyn
işleme
c9cb7de4f4

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

@@ -155,6 +155,7 @@ public class TaskWorkNode {
         String taskNodeId = jsonObject.getString("taskNodeId");
         //业务类型-1、是普通的节点类型,2-是线边库轮询
         String bizType = jsonObject.getString("bizType");
+        String handMode = jsonObject.getString("handMode");
 
         //多产品搬运类型
         String carryType = jsonObject.getString("carryType");
@@ -223,6 +224,7 @@ public class TaskWorkNode {
                 Map queryMap = Maps.newHashMap();
                 queryMap.put("bizType", bizType);
                 queryMap.put("carryType", carryType);
+                queryMap.put("handMode", handMode);
                 if (jsonObject.containsKey(taskNode.getId() + "count")) {
                     queryMap.put(taskNode.getId() + "count", jsonObject.getString(taskNode.getId() + "count"));
                 }
@@ -354,10 +356,9 @@ public class TaskWorkNode {
         TTask task = (TTask) conMap.get("task");
         //业务类型
         String bizType = conMap.get("bizType") == null ? "" : conMap.get("bizType").toString();
-
+        String handMode = conMap.get("handMode") == null ? "" : conMap.get("handMode").toString();
         String count = conMap.get(taskNode.getId() + "count") == null ? "" : conMap.get(taskNode.getId() + "count").toString();
 
-
         //出入库类型
         String stockType = conMap.get(DemoLineConstant.DEMOLINE_STOCK_TYPE) == null ? "" : conMap.get(DemoLineConstant.DEMOLINE_STOCK_TYPE).toString();
 
@@ -400,6 +401,7 @@ public class TaskWorkNode {
         bizJsonObject.put("targetPostion", tstorge == null ? "" : tstorge.getId().toString());
         bizJsonObject.put("aimStorge", aimStorge == null ? "" : aimStorge.getId().toString());
         bizJsonObject.put("bizType", bizType);
+        bizJsonObject.put("handMode", handMode);
 
         //放入到线边库
         String xbkFlag = conMap.get(DemoLineConstant.DEMOLINE_XBKFLAG) == null ? "" : conMap.get(DemoLineConstant.DEMOLINE_XBKFLAG).toString();
@@ -536,6 +538,7 @@ public class TaskWorkNode {
         logger.info("=============进入条件检测==============" + taskNode);
         //业务类型(区分正常设备节点和线边库节点)
         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 carryType = dataMap.get("carryType") == null ? "" : dataMap.get("carryType").toString();
@@ -557,6 +560,7 @@ public class TaskWorkNode {
         map.put("task", task);
         map.put(taskNode.getId() + "count", count);
         map.put("bizType", bizType);
+        map.put("handMode", handMode);
         map.put("categoryName", DictionaryKey.RESOURCE_CATEGORY.get(category));
         map.put("instructions", moduleInstructions);
         map.put("moduleName", module.getName());

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

@@ -1009,6 +1009,7 @@ public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, Order> imple
                 JSONObject jsonObject = new JSONObject();
                 jsonObject.put("taskNodeId",taskNode0.getId().toString());
                 jsonObject.put("bizType",BizConstant.MQ_TASK_NODE_TYPE_COMMON);
+                jsonObject.put("handMode",0);
                 log.info("推送mq队列{}消息{}",taskNode0.getResourceId().toString(),jsonObject.toString());
                 dynamicRabbitMq.sendMsg(taskNode0.getResourceId().toString(),jsonObject.toString());
             }

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

@@ -1382,9 +1382,13 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
         //websocket推送TODO临时注释
 //        msgUtil.pushTask(task);
 
-        //推送到消息队列
-        msgUtil.pushToNextMq(taskNode, task, taskNodeList, n, callBackJson,currWorkpiece);
+        // 判断当前是手动模式还是自动模式,如果是自动模式继续走下一个节点,如果是手动模式,判断当前节点是否是该工序最后一个节点
+        TaskNode currProcedureLastNode =  baseMapper.selectOne(Wraps.<TaskNode>lbQ().eq(TaskNode::getTaskId, task.getId()).orderByDesc(TaskNode::getCompleteBatchSort).last("limit 1"));
 
+        if(!currProcedureLastNode.getId().equals(taskNode.getId())){
+            //推送到消息队列
+            msgUtil.pushToNextMq(taskNode, task, taskNodeList, n, callBackJson,currWorkpiece);
+        }
     }
 
     /**

+ 111 - 96
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/WorkpieceServiceImpl.java

@@ -35,8 +35,10 @@ import com.github.zuihou.business.productionResourceCenter.entity.Productionreso
 import com.github.zuihou.business.productionResourceCenter.entity.ZZone;
 import com.github.zuihou.business.productionResourceCenter.entity.ZZoneProductionresource;
 import com.github.zuihou.business.productionResourceCenter.service.ProductionresourcePositionService;
+import com.github.zuihou.business.util.DynamicRabbitMq;
 import com.github.zuihou.business.util.ManualTaskOperatorUtil;
 import com.github.zuihou.business.util.MsgUtil;
+import com.github.zuihou.common.constant.BizConstant;
 import com.github.zuihou.common.constant.DictionaryKey;
 import com.github.zuihou.common.util.StringUtil;
 import com.github.zuihou.context.BaseContextHandler;
@@ -116,6 +118,8 @@ public class WorkpieceServiceImpl extends SuperServiceImpl<WorkpieceMapper, TWor
     private BomProcedureTrayMapper bomProcedureTrayMapper;
     @Autowired
     private BBomMapper bBomMapper;
+    @Autowired
+    private DynamicRabbitMq dynamicRabbitMq;
 
     private static ArrayList<String> robotTaskNodes = new ArrayList<>();
     static {
@@ -654,102 +658,113 @@ public class WorkpieceServiceImpl extends SuperServiceImpl<WorkpieceMapper, TWor
         TTask tTask = tTaskMapper.selectById(taskId);
         // 工序节点子任务
         List<TaskNode> taskNodes = taskNodeService.list(Wraps.<TaskNode>lbQ().eq(TaskNode::getCompleteBatchNo,tTask.getCompleteBatchNo()).eq(TaskNode::getExeStatus,"1").orderByAsc(TaskNode:: getPrority));
-        // 工件信息
-        TWorkpiece workpiece = baseMapper.selectOne(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getCompleteBatchNo,tTask.getCompleteBatchNo()));
-
-        // 查找工件所属产线
-        BBom bom = bBomMapper.selectById(workpiece.getBomId());
-        ZZone zZone = zZoneMapper.selectById(bom.getZoneId());
-        // 根据工序判断需要做什么任务
-        BomProcedure bomProcedure = bomProcedureMapper.selectOne(Wraps.<BomProcedure>lbQ().eq(BomProcedure::getBomId,workpiece.getBomId()).eq(BomProcedure::getId,tTask.getProcedureId()));
-        // 人工序只有上下料
-        if("上料".equals(bomProcedure.getType())){
-            // 判断当前任务所属产品,找出相应的子盘夹具
-            BomProcedureTray bomProcedureTray = bomProcedureTrayMapper.selectOne(Wraps.<BomProcedureTray>lbQ().eq(BomProcedureTray::getProcedureId,tTask.getProcedureId()));
-            // 判断夹具是否有可用的,查询330个库位信息中是否还有夹具
-            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getGoodsId,bomProcedureTray.getTrayId()).orderByAsc(StockInfo::getStorgeId));
-            if(stockInfos.size() <= 0){
-                return R.fail("托盘数量不足");
-            }
-            // 按照顺序将托盘移动到上下料站
-            // 获取抓取托盘起点及放设备重点
-            StockInfo metetailStockInfo = stockInfos.get(0);
-            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, metetailStockInfo.getStorgeId()));
-            String startPointid = startProductionresourcePosition.getPointId();
-            ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
-            String endPointid = endProductionresourcePosition.getPointId();
-            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
-
-        }else if("下料".equals(bomProcedure.getType())){
-            // 按照顺序将托盘移动到上下料站
-            // 获取抓取托盘起点及放设备重点
-            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
-            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
-            String startPointid = startProductionresourcePosition.getPointId();
-            ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
-            String endPointid = endProductionresourcePosition.getPointId();
-            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
-
-        }else if("翻面".equals(bomProcedure.getType())){
-            // 按照顺序将托盘移动到上下料站
-            // 获取抓取托盘起点及放设备重点
-            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
-            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
-            String startPointid = startProductionresourcePosition.getPointId();
-            ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
-            String endPointid = endProductionresourcePosition.getPointId();
-            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
-
-        }else{
-            // 按照顺序将托盘移动到上下料站
-            // 根据动作节点拆分
-
-            // 判断当前第一个指令是的设备是机器人还是加工设备,如果是机器人指定起点和重点,如果是设备不需要传入起点和重点
-            Productionresource firstNodeResource = productionresourceBizMapper.selectById(taskNodes.get(0).getResourceId());
-            // TODO 先用名称判断
-            if(firstNodeResource.getName().contains("伺服舵机") || firstNodeResource.getName().contains("机器人")){
-                // 机器人需要有起点和终点
-            }else{
-
-            }
-
-            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
-            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
-            String startPointid = startProductionresourcePosition.getPointId();
-
-            TaskNode lastActionTaskNode = getNextActionTaskNode(taskNodes,0);
-            TaskNode currentTaskNode = taskNodes.get(0);
-            ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,currentTaskNode.getResourceId()));
-//            ZZone zzone = zZoneMapper.selectOne(Wraps.<ZZone>lbQ().eq(ZZone::getId,zZoneProductionresource.getZoneId()));
-            ProductionresourcePosition endProductionresourcePosition = null;
-            if(null == lastActionTaskNode.getResourceId()){
-                // agv动作,动态查询agv接驳位
-                // 查询当前设备所在产线的接驳位
-                Map queryParams = new HashMap();
-                queryParams.put("zoneId",zZoneProductionresource.getZoneId());
-                queryParams.put("resourceName","接驳");
-                List<Productionresource> productionresources = productionresourceBizMapper.selectResouces(queryParams);
-
-                // 遍历接驳位判断是否有可用的接驳位
-                for(Productionresource productionresource : productionresources){
-                    endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, productionresource.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());
-                    // 有托板但是没有托盘认为可放
-                    if(meterails.contains("5") &&  meterails.contains("2")){
-                        break;
-                    }
-                }
-            }
-            if(null == endProductionresourcePosition){
-                return R.fail("不具备搬运条件,AGV接驳位不可用");
-            }
-            // 满足条件的agv接驳位
-            String endPointid = endProductionresourcePosition.getPointId();
-
-            // 在回调中分段处理
-            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
-        }
+//        // 工件信息
+//        TWorkpiece workpiece = baseMapper.selectOne(Wraps.<TWorkpiece>lbQ().eq(TWorkpiece::getCompleteBatchNo,tTask.getCompleteBatchNo()));
+//
+//        // 查找工件所属产线
+//        BBom bom = bBomMapper.selectById(workpiece.getBomId());
+//        ZZone zZone = zZoneMapper.selectById(bom.getZoneId());
+//        // 根据工序判断需要做什么任务
+//        BomProcedure bomProcedure = bomProcedureMapper.selectOne(Wraps.<BomProcedure>lbQ().eq(BomProcedure::getBomId,workpiece.getBomId()).eq(BomProcedure::getId,tTask.getProcedureId()));
+//        // 人工序只有上下料
+//        if("上料".equals(bomProcedure.getType())){
+//            // 判断当前任务所属产品,找出相应的子盘夹具
+//            BomProcedureTray bomProcedureTray = bomProcedureTrayMapper.selectOne(Wraps.<BomProcedureTray>lbQ().eq(BomProcedureTray::getProcedureId,tTask.getProcedureId()));
+//            // 判断夹具是否有可用的,查询330个库位信息中是否还有夹具
+//            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getGoodsId,bomProcedureTray.getTrayId()).orderByAsc(StockInfo::getStorgeId));
+//            if(stockInfos.size() <= 0){
+//                return R.fail("托盘数量不足");
+//            }
+//            // 按照顺序将托盘移动到上下料站
+//            // 获取抓取托盘起点及放设备重点
+//            StockInfo metetailStockInfo = stockInfos.get(0);
+//            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, metetailStockInfo.getStorgeId()));
+//            String startPointid = startProductionresourcePosition.getPointId();
+//            ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
+//            String endPointid = endProductionresourcePosition.getPointId();
+//            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
+//
+//        }else if("下料".equals(bomProcedure.getType())){
+//            // 按照顺序将托盘移动到上下料站
+//            // 获取抓取托盘起点及放设备重点
+//            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
+//            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
+//            String startPointid = startProductionresourcePosition.getPointId();
+//            ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
+//            String endPointid = endProductionresourcePosition.getPointId();
+//            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
+//
+//        }else if("翻面".equals(bomProcedure.getType())){
+//            // 按照顺序将托盘移动到上下料站
+//            // 获取抓取托盘起点及放设备重点
+//            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
+//            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
+//            String startPointid = startProductionresourcePosition.getPointId();
+//            ProductionresourcePosition endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, tTask.getResourceId()));
+//            String endPointid = endProductionresourcePosition.getPointId();
+//            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
+//
+//        }else{
+//            // 按照顺序将托盘移动到上下料站
+//            // 根据动作节点拆分
+//
+//            // 判断当前第一个指令是的设备是机器人还是加工设备,如果是机器人指定起点和重点,如果是设备不需要传入起点和重点
+//            Productionresource firstNodeResource = productionresourceBizMapper.selectById(taskNodes.get(0).getResourceId());
+//            // TODO 先用名称判断
+//            if(firstNodeResource.getName().contains("伺服舵机") || firstNodeResource.getName().contains("机器人")){
+//                // 机器人需要有起点和终点
+//            }else{
+//
+//            }
+//
+//            List<StockInfo> stockInfos = stockInfoMapper.selectList(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo,tTask.getCompleteBatchNo()));
+//            ProductionresourcePosition startProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getStorgeId, stockInfos.get(0).getStorgeId()));
+//            String startPointid = startProductionresourcePosition.getPointId();
+//
+//            TaskNode lastActionTaskNode = getNextActionTaskNode(taskNodes,0);
+//            TaskNode currentTaskNode = taskNodes.get(0);
+//            ZZoneProductionresource zZoneProductionresource = zZoneProductionresourceMapper.selectOne(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getResourceId,currentTaskNode.getResourceId()));
+////            ZZone zzone = zZoneMapper.selectOne(Wraps.<ZZone>lbQ().eq(ZZone::getId,zZoneProductionresource.getZoneId()));
+//            ProductionresourcePosition endProductionresourcePosition = null;
+//            if(null == lastActionTaskNode.getResourceId()){
+//                // agv动作,动态查询agv接驳位
+//                // 查询当前设备所在产线的接驳位
+//                Map queryParams = new HashMap();
+//                queryParams.put("zoneId",zZoneProductionresource.getZoneId());
+//                queryParams.put("resourceName","接驳");
+//                List<Productionresource> productionresources = productionresourceBizMapper.selectResouces(queryParams);
+//
+//                // 遍历接驳位判断是否有可用的接驳位
+//                for(Productionresource productionresource : productionresources){
+//                    endProductionresourcePosition = productionresourcePositionMapper.selectOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, productionresource.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());
+//                    // 有托板但是没有托盘认为可放
+//                    if(meterails.contains("5") &&  meterails.contains("2")){
+//                        break;
+//                    }
+//                }
+//            }
+//            if(null == endProductionresourcePosition){
+//                return R.fail("不具备搬运条件,AGV接驳位不可用");
+//            }
+//            // 满足条件的agv接驳位
+//            String endPointid = endProductionresourcePosition.getPointId();
+//
+//            // 在回调中分段处理
+//            return processOperation(taskId, tTask, taskNodes, zZone, startPointid, endPointid);
+//        }
+        // 直接复用当前节点代码
+        JSONObject jsonObject = new JSONObject();
+        TaskNode taskNode = taskNodes.get(0);
+        jsonObject.put("taskNodeId",taskNode.getId().toString());
+        jsonObject.put("bizType", BizConstant.MQ_TASK_NODE_TYPE_COMMON);
+        // 手动模式
+        jsonObject.put("handMode", "1");
+        log.info("推送mq队列{}消息{}",taskNode.getResourceId().toString(),jsonObject.toString());
+        dynamicRabbitMq.sendMsg(taskNode.getResourceId().toString(),jsonObject.toString());
+
+        return R.success();
     }
 
     /**

+ 4 - 2
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/operationManagementCenter/PlanMapper.xml

@@ -229,13 +229,14 @@
                     itp.name
                 FROM imcs_tenant_productionresource itp
                 WHERE itp.id = ibbpp.resource_id) AS resourceName,
-                (SELECT ict.cutting_tool_name FROM imcs_cutting_tool ict WHERE ict.id = ibbpt.tool_id) AS needCuttingTools
+                ict.cutting_tool_name  AS needCuttingTools
         FROM imcs_p_plan_product ippp,
                 imcs_b_bom ibb,
                 imcs_b_bom_version_info ibbvi,
                 imcs_b_bom_procedure ibbp,
                 imcs_b_bom_procedure_tool ibbpt,
-                imcs_b_bom_procedure_productionresource ibbpp
+                imcs_b_bom_procedure_productionresource ibbpp,
+                imcs_cutting_tool ict
             WHERE ippp.bom_id = ibb.id
             AND ibb.id = ibbvi.bom_id
             AND ibbvi.use_status = '1'
@@ -243,6 +244,7 @@
             AND ibbp.id = ibbpt.procedure_id
             AND ibbp.program_conf = '2'
             AND ibbp.id = ibbpp.procedure_id
+            AND ict.id = ibbpt.tool_id
             <if test="planId != null and planId != ''">
                 and ippp.plan_id = #{planId}
             </if>