Explorar el Código

fix:优化刀具任务下发问题

wang.sq@aliyun.com hace 1 mes
padre
commit
121f5d50ea

+ 2 - 2
imcs-admin-boot/imcs-authority-server/src/main/java/com/github/zuihou/job/DashboardJob.java

@@ -133,7 +133,7 @@ public class DashboardJob {
 
 
 
-    @Scheduled(cron="0 0/1 * * * ?")
+    @Scheduled(cron="0 0/2 * * * ?")
     public void updateDashboardJob(){
         //taskService.pushTask();
         BaseContextHandler.setTenant("0000");
@@ -229,7 +229,7 @@ public class DashboardJob {
         }
     }
 
-    @Scheduled(cron="0/10 * * * * ?")
+    @Scheduled(cron="0/20 * * * * ?")
     public void updateExceptionJob(){
         BaseContextHandler.setTenant("0000");
         List<String> userIds = webSocketServer.getUserIds();

+ 21 - 20
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/centralToolMagazine/service/impl/ToolManagementServiceImpl.java

@@ -194,6 +194,7 @@ public class ToolManagementServiceImpl extends SuperCacheServiceImpl<ToolManagem
                 .collect(Collectors.toList());
 
         List<ToolCheckDTO> returnList=new ArrayList<>();
+
         planIds.stream().forEach(item ->{
             PlanProduct planProduct = planProductMapper.selectOne(Wraps.<PlanProduct>lbQ().eq(PlanProduct::getPlanId, item));
             Long bomId=planProduct.getBomId();
@@ -216,13 +217,15 @@ public class ToolManagementServiceImpl extends SuperCacheServiceImpl<ToolManagem
                     .eq(BomProcedure::getBomId, bomId).eq(BomProcedure::getType,"设备序"));
 
             //产品所需所有的类别集合
-            List<String> toolId=new ArrayList<>();
-            Map<String, List<String>> toolMaps = Maps.newConcurrentMap();
+//            List<String> toolId=new ArrayList<>();
+
+            // 产品所需要的刀具列表
+            List<CutterCategories> needToolList = new ArrayList<>();
 
             //所有可执行设备资源
             List<BomProcedureProductionresource> resourceList=new ArrayList<>();
 
-            bomProcedures.stream().forEach(vo->{
+            for (BomProcedure vo : bomProcedures) {
                 BomProcedureVersion bomProcedureVersion=new BomProcedureVersion();
                 bomProcedureVersion.setId(vo.getId());
 
@@ -235,19 +238,13 @@ public class ToolManagementServiceImpl extends SuperCacheServiceImpl<ToolManagem
                 /*List<String> toolIdList = toolList.stream()
                         .map(BBomProcedureTool::getCuttingToolCategory)
                         .collect(Collectors.toList()); */
-                List<String> toolIdList = null;
-                if (null == bomProcedureTool){
-                    toolIdList = Lists.newArrayList();
-                }else{
+                if (null != bomProcedureTool){
                     String[] conditions = bomProcedureTool.getCuttingToolCategory().split("_");
-                    List<CutterCategories> toolList = cutterCategoriesService.list(new LbqWrapper<CutterCategories>().eq(CutterCategories::getPartsNo, conditions[0]).eq(CutterCategories::getProcedureNo, conditions[1]));
-                    toolIdList = toolList.stream().map(obj->obj.getCutterT())
-                            .collect(Collectors.toList());
+                    needToolList = cutterCategoriesService.list(new LbqWrapper<CutterCategories>().eq(CutterCategories::getPartsNo, conditions[0]).eq(CutterCategories::getProcedureNo, conditions[1]));
                 }
-                toolId.addAll(toolIdList);
-                toolMaps.put(vo.getId().toString(), toolId);
-            });
-            if(CollectionUtil.isEmpty(toolId)){
+            }
+
+            if(needToolList.isEmpty()|| needToolList.size()<=0){
                 log.info("刀具校验:未配置工艺刀具");
                 ToolCheckDTO toolCheckDTO=new ToolCheckDTO();
                 toolCheckDTO.setName(bBom.getName());
@@ -260,6 +257,7 @@ public class ToolManagementServiceImpl extends SuperCacheServiceImpl<ToolManagem
             }
             //List<Long> resourceId = resourceList.stream().map(BomProcedureProductionresource::getResourceId).collect(Collectors.toList());
 
+            List<CutterCategories> finalNeedToolList = needToolList;
             resourceList.stream().forEach(vo->{
                 ToolCheckDTO toolCheckDTO=new ToolCheckDTO();
 
@@ -288,27 +286,30 @@ public class ToolManagementServiceImpl extends SuperCacheServiceImpl<ToolManagem
                 //比较 刀具类别  是否存在
                 if(freeCount > 0){
                     List<String> finalRealToolId = realToolId;
-                    List<String> differenceCategory = toolId.stream()
-                            .filter(id -> !finalRealToolId.contains(id)).distinct()
+                    List<CutterCategories> lackTools = finalNeedToolList.stream()
+                            .filter(tool -> !finalRealToolId.contains(tool.getCutterT())).distinct()
                             .collect(Collectors.toList());
-                    List<CutterCategories> cutterCategories = cutterCategoriesService.list(new LbqWrapper<CutterCategories>().in(CutterCategories::getCutterT, differenceCategory)).stream().collect(Collectors.toList());
                     //List<String> dicName = dictionaryMapper.getDicName(toolId);
                     /*List<Long> differenceTool = toolId.stream()
                             .filter(id -> !realToolId.contains(id))
                             .collect(Collectors.toList());
                     List<CuttingTool> cuttingTools = cuttingToolMapper.selectList(Wraps.<CuttingTool>lbQ().in(CuttingTool::getId, differenceTool));*/
+                    List<Long> needCutters = lackTools.stream().map(CutterCategories::getId).collect(Collectors.toList());
+                    List<String> differenceCategory = lackTools.stream().map(CutterCategories::getCutterT).collect(Collectors.toList());
+
                     //true 机床刀库空闲个数大于缺刀个数
-                    Boolean isFree=freeCount > differenceCategory.size();
+                    Boolean isFree=freeCount > lackTools.size();
                     //ToolTask findToolTask = toolTaskMapper.selectOne(Wraps.<ToolTask>lbQ().eq(ToolTask::getPlanId, item));
-                    toolCheckDTO.setIsTask(differenceCategory.size()>0?"是":"否");
+                    toolCheckDTO.setIsTask(lackTools.size()>0?"是":"否");
                     toolCheckDTO.setId(vo.getResourceId());
                     toolCheckDTO.setDeviceName(vo.getName());
                     toolCheckDTO.setName(bBom.getName());
                     toolCheckDTO.setList(differenceCategory);
+                    toolCheckDTO.setListData(needCutters);
                     toolCheckDTO.setIsFree(isFree);
                     toolCheckDTO.setHasCuttingToolsFlag(CollectionUtil.isEmpty(differenceCategory) ? "是" : "否" );
                     toolCheckDTO.setMsg(CollectionUtil.isNotEmpty(differenceCategory) ?
-                            "缺少:"+cutterCategories.stream().map(obj->obj.getCutterName()).collect(Collectors.joining(","))+(isFree ? ",机床刀库空闲个数大于缺刀个数":"") +(" 缺刀总数:"+ differenceCategory.size() +"个"):"校验成功" );
+                            "缺少:"+lackTools.stream().map(obj->obj.getCutterName()).collect(Collectors.joining(","))+(isFree ? ",机床刀库空闲个数大于缺刀个数":"") +(" 缺刀总数:"+ differenceCategory.size() +"个"):"校验成功" );
                     toolCheckDTO.setPlanId(item);
                     returnList.add(toolCheckDTO);
                 }

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

@@ -323,6 +323,7 @@ public class CutterTestDataServiceImpl extends SuperServiceImpl<CutterTestDataMa
 
             CutterTestDataEntity build = new CutterTestDataEntity();
             build.setCutterT(cuttingTool.getCuttingToolNo().toString());
+            build.setCutterName(cuttingTool.getCuttingToolName().toString());
             build.setCutterP(cuttingTool.getCutterNo().toString());
             build.setCutterTypSubDnc(cutterTestDataEntity.getCutterTypSubDnc());
             build.setWriteOrDel("2");

+ 9 - 4
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/ToolTaskServiceImpl.java

@@ -14,6 +14,7 @@ import com.github.zuihou.business.centralToolMagazine.entity.TaskNodeTool;
 import com.github.zuihou.business.centralToolMagazine.entity.ToolManagement;
 import com.github.zuihou.business.centralToolMagazine.entity.ToolStorge;
 import com.github.zuihou.business.centralToolMagazine.entity.ToolTask;
+import com.github.zuihou.business.cuttercategories.entity.CutterCategories;
 import com.github.zuihou.business.edgeLibrary.entity.StockInfo;
 import com.github.zuihou.business.edgeLibrary.service.StockInfoService;
 import com.github.zuihou.business.operationManagementCenter.dao.ToolTaskMapper;
@@ -27,6 +28,7 @@ import com.github.zuihou.business.productionReadyCenter.service.CuttingToolServi
 import com.github.zuihou.business.productionReadyCenter.service.MachineCuttingToolService;
 import com.github.zuihou.business.productionResourceCenter.entity.Productionresource;
 import com.github.zuihou.business.productionResourceCenter.entity.ProductionresourcePosition;
+import com.github.zuihou.business.productionResourceCenter.service.CutterCategoriesService;
 import com.github.zuihou.business.productionResourceCenter.service.ProductionresourceBizService;
 import com.github.zuihou.business.productionResourceCenter.service.ProductionresourcePositionService;
 import com.github.zuihou.business.util.MsgUtil;
@@ -92,6 +94,8 @@ public class ToolTaskServiceImpl extends SuperCacheServiceImpl<ToolTaskMapper, T
     @Autowired
     private MachineCuttingToolService machineCuttingToolService;
 
+    @Autowired
+    private CutterCategoriesService cutterCategoriesService;
     @Override
     public R taskSave(List<ToolCheckDTO> list) {
         /*
@@ -126,7 +130,8 @@ public class ToolTaskServiceImpl extends SuperCacheServiceImpl<ToolTaskMapper, T
              */
 
             Plan plan = planService.getById(vo.getPlanId().toString());
-            List<CuttingTool> cuttingToolList = cuttingToolService.list(new LbqWrapper<CuttingTool>().in(CuttingTool::getCuttingToolNo, vo.getList()));
+
+            List<CutterCategories> list1 = cutterCategoriesService.list(new LbqWrapper<CutterCategories>().in(CutterCategories::getId, vo.getListData()));
 
             // 获取机床刀位号
             List<String> cutGoalNo1 = null;
@@ -137,18 +142,18 @@ public class ToolTaskServiceImpl extends SuperCacheServiceImpl<ToolTaskMapper, T
             }
 
             List<String> finalCutGoalNo = cutGoalNo1;
-            cuttingToolList.stream().forEach(Obj->{
+            list1.stream().forEach(Obj->{
                 // 给刀具分配的刀加号
                 if(ObjectUtil.isEmpty(finalCutGoalNo)){
                     return;
                 }
                 String s = finalCutGoalNo.get(0);
 
-                CuttingToolApply cuttingToolApply = CuttingToolApply.builder()
+                CuttingToolApply cuttingToolApply = CuttingToolApply.builder().categoriesId(Obj.getId())
                         .planId(vo.getPlanId().toString()).resourceId(vo.getId().toString())
                         .processStatus("0").produceId(plan.getOrderId().toString()).cutGoalNo(finalCutGoalNo.get(0))
                         .build();
-                cuttingToolApply.setCuttingToolName(Obj.getCuttingToolName()).setCuttingToolNo(Obj.getCuttingToolNo().toString());
+                cuttingToolApply.setCuttingToolName(Obj.getCutterName()).setCuttingToolNo(Obj.getCutterT());
                 dataList.add(cuttingToolApply);
 
                 // 删除已经使用的刀位号

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionReadyCenter/service/impl/MachineCuttingToolServiceImpl.java

@@ -144,7 +144,7 @@ public class MachineCuttingToolServiceImpl extends SuperCacheServiceImpl<Machine
                     ResponseEntity<String> postForEntity = restTemplate.postForEntity(instructionUrl, request, String.class);
                     resultData = postForEntity.getBody();
                 } else {
-                    resultData = "{\"result\":\"true\",\"msg\":\"success\",\"code\":200,\"total\":0,\"data\":[{\"position\":\"1.1\",\"number\":\"1\",\"name\":\"XD20\",\"warnLife\":\"0\",\"targetLife\":\"2282.88\",\"workPiece\":null,\"workPieceWarn\":null,\"workPieceTarget\":null,\"wear\":null,\"wearWarn\":null,\"wearTarget\":null,\"sisterNo\":null,\"toolEdgeNo\":null,\"toolPosition\":null,\"toolRadius\":null,\"tl\":\"0\",\"doc\":\"\",\"isMainShaft\":\"0\"},{\"position\":\"1.5\",\"number\":\"5\",\"name\":\"7-N123F2-57032R-C5RG-C5L90\",\"warnLife\":\"0\",\"targetLife\":\"6.78\",\"workPiece\":null,\"workPieceWarn\":null,\"workPieceTarget\":null,\"wear\":null,\"wearWarn\":null,\"wearTarget\":null,\"sisterNo\":null,\"toolEdgeNo\":null,\"toolPosition\":null,\"toolRadius\":null,\"tl\":\"0\",\"doc\":\"HD\",\"isMainShaft\":\"0\"}]}\n";
+                    resultData = "{\"result\":\"true\",\"msg\":\"success\",\"code\":200,\"total\":0,\"data\":[{\"position\":\"1.1\",\"number\":\"1\",\"name\":\"XD20\",\"warnLife\":\"0\",\"targetLife\":\"2282.88\",\"workPiece\":null,\"workPieceWarn\":null,\"workPieceTarget\":null,\"wear\":null,\"wearWarn\":null,\"wearTarget\":null,\"sisterNo\":null,\"toolEdgeNo\":null,\"toolPosition\":null,\"toolRadius\":null,\"tl\":\"0\",\"doc\":\"\",\"isMainShaft\":\"0\"},{\"position\":\"1.5\",\"number\":\"5\",\"name\":\"7-N123F2-57032R-C5RG-C5L90\",\"warnLife\":\"0\",\"targetLife\":\"6.78\",\"workPiece\":null,\"workPieceWarn\":null,\"workPieceTarget\":null,\"wear\":null,\"wearWarn\":null,\"wearTarget\":null,\"sisterNo\":null,\"toolEdgeNo\":null,\"toolPosition\":null,\"toolRadius\":null,\"tl\":\"0\",\"doc\":\"\",\"isMainShaft\":\"0\"}]}\n";
                 }
 
                 JSONObject resultObj = JSONObject.parseObject(resultData);

+ 19 - 14
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/productionReadyCenter/CuttingToolApplyMapper.xml

@@ -82,30 +82,35 @@
         (
             SELECT
                 icta.id,
+                icta.categories_id,
+                icta.cutting_tool_no,
+                icta.plan_id,
+                icta.produce_id,
                 icta.cutting_tool_name AS cuttingToolName,
                 icta.process_status,
                 icta.resource_id,
                 icta.create_time,
                 icta.cut_goal_no,
                 icta.process_status_message,
-                (case icta.process_status when '0' then '未处理' when '1' then '缺料' when '2' then '处理中' when '3' then '已处理' end) AS processStatusName,
+                ( CASE icta.process_status WHEN '0' THEN '未处理' WHEN '1' THEN '缺料' WHEN '2' THEN '处理中' WHEN '3' THEN '已处理' END ) AS processStatusName,
                 icc.parts_no,
                 icc.procedure_no,
-                iss.point_id AS start,
+                iss.point_id AS START,
                 ioo.order_name,
                 ioo.delivery_time AS orderDeliveryTime,
-                iss.name AS storgeName,
-                itp.name AS resourceName,
-                itp.code AS goalType
-
-
-            FROM imcs_cutting_tool_apply icta
-                     LEFT JOIN imcs_cutter_categories icc on icta.cutting_tool_no = icc.cutter_t
-                     LEFT JOIN imcs_cutting_tool ict on icta.cutting_tool_no = ict.cutting_tool_no
-                     LEFT JOIN imcs_s_stock_info issi on ict.id = issi.goods_id and issi.goods_type='6'
-                     LEFT JOIN imcs_s_storge iss on issi.storge_id = iss.id
-                     LEFT JOIN imcs_tenant_productionresource itp ON icta.resource_id = itp.id
-                     LEFT JOIN imcs_o_order ioo on icta.produce_id = ioo.id and ioo.single_task_flag='0'
+                iss.NAME AS storgeName,
+                itp.NAME AS resourceName,
+                itp.CODE AS goalType
+            FROM
+                imcs_cutting_tool_apply icta
+                    LEFT JOIN imcs_cutter_categories icc ON icta.categories_id = icc.id
+                    LEFT JOIN imcs_cutting_tool ict ON icta.cutting_tool_no = ict.cutting_tool_no
+                    LEFT JOIN imcs_s_stock_info issi ON ict.id = issi.goods_id
+                    AND issi.goods_type = '6'
+                    LEFT JOIN imcs_s_storge iss ON issi.storge_id = iss.id
+                    LEFT JOIN imcs_tenant_productionresource itp ON icta.resource_id = itp.id
+                    LEFT JOIN imcs_o_order ioo ON icta.produce_id = ioo.id
+                    AND ioo.single_task_flag = '0'
             ) tmp ${ew.customSqlSegment}
     </select>
 

+ 2 - 1
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/productionReadyCenter/CuttingToolApplyController.java

@@ -135,7 +135,7 @@ public class CuttingToolApplyController extends SuperCacheController<CuttingTool
     public R<Boolean> cuttingToolTask() {
         BaseContextHandler.setTenant("0000");
         IPage<CuttingToolApply> page = new Page<CuttingToolApply>(1L, 100L);
-        List<CuttingToolApply> dataList = baseService.findPageByQueryWrapper(page, new LbqWrapper<CuttingToolApply>().eq(CuttingToolApply::getProcessStatus, "0").orderByAsc(CuttingToolApply::getCreateTime)).getRecords();
+        List<CuttingToolApply> dataList = baseService.findPageByQueryWrapper(page, new LbqWrapper<CuttingToolApply>().eq(CuttingToolApply::getProcessStatus, "0").orderByAsc(CuttingToolApply::getCreateTime).orderByAsc(CuttingToolApply::getPlanId).orderByAsc(CuttingToolApply::getResourceId).orderByAsc(CuttingToolApply::getProcessStatus)).getRecords();
         Map<String, CuttingToolApply> currentMap = Maps.newHashMap();
         dataList.stream().forEach(item -> {
             String goalDeviceId = item.getResourceId();
@@ -153,6 +153,7 @@ public class CuttingToolApplyController extends SuperCacheController<CuttingTool
             if(StringUtils.isEmpty(item.getStart())){
                 //刀具线内不存在
                 item.setProcessStatus("1");
+                item.setProcessStatusMessage("刀架无这把刀具");
                 baseService.updateAllById(item);
                 return;
             }

+ 1 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/centralToolMagazine/dto/ToolCheckDTO.java

@@ -16,6 +16,7 @@ public class ToolCheckDTO {
     private String name;
     //需要的刀具类别集合
     private List<String> list;
+    private List<Long> listData;
     private String hasCuttingToolsFlag;
     private String isTask;
     private String msg;

+ 8 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/productionReadyCenter/entity/CuttingToolApply.java

@@ -1,5 +1,6 @@
 package com.github.zuihou.business.productionReadyCenter.entity;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -8,6 +9,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
 
 import java.util.List;
 
@@ -37,6 +39,12 @@ public class CuttingToolApply extends Entity<Long> {
 
     private Long id;
 
+    @ApiModelProperty(value = "刀具需求id")
+    @Length(max = 128, message = "名称长度不能超过128")
+    @TableField(value = "categories_id", condition = LIKE)
+    @Excel(name = "刀具需求id")
+    private  Long categoriesId;
+
     /**
      * 设备id
      */