Browse Source

fix:优化中央刀库自动化上刀

wang.sq@aliyun.com 2 months ago
parent
commit
9f5766deb1

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

@@ -727,6 +727,7 @@ public class TaskWorkNode {
                     conMap.put("result", false);
                 }
             } catch (BizException e) {
+                logger.error("调用接口发生异常" + e.getMessage());
                 e.printStackTrace();
                 conMap.put("result", false);
                 JSONObject errJsonObject = new JSONObject();
@@ -736,8 +737,8 @@ public class TaskWorkNode {
                 returnData = errJsonObject.toJSONString();
                 log.setStatus("0").setExeResult("0").setManual("1").setFeedback("节点" + taskNode.getId() + "逻辑出现异常:" + conMap.get("resultMsg") + ":" + e.getMessage());
                 autoNodeLogMapper.updateAllById(log);
-                logger.error("调用接口发生异常" + e.getMessage());
             } catch (Exception e) {
+                logger.error("调用接口发生异常" + e.getMessage());
                 e.printStackTrace();
                 conMap.put("result", false);
                 // 释放占用资源并在autolog表中增加日志,方便指令重发
@@ -748,7 +749,6 @@ public class TaskWorkNode {
                 returnData = errJsonObject.toJSONString();
                 //插入执行日志
                 log.setStatus("0").setExeResult("0").setManual("1").setFeedback("节点" + taskNode.getId() + "逻辑出现异常:" + conMap.get("resultMsg") + ":" + e.getMessage());
-
                 autoNodeLogMapper.updateAllById(log);
             } finally {
                 logger.info("returnData={}", returnData);

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

@@ -1,12 +1,15 @@
 package com.github.zuihou.business.productionReadyCenter.service.impl;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.log.Log;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.zuihou.base.service.SuperCacheServiceImpl;
+import com.github.zuihou.business.operationManagementCenter.entity.OrderTask;
+import com.github.zuihou.business.operationManagementCenter.service.OrderTaskService;
 import com.github.zuihou.business.productionReadyCenter.dao.CuttingToolMapper;
 import com.github.zuihou.business.productionReadyCenter.dao.MachineCuttingToolMapper;
 import com.github.zuihou.business.productionReadyCenter.dto.MachineCuttingToolSaveDTO;
@@ -14,9 +17,11 @@ import com.github.zuihou.business.productionReadyCenter.entity.CuttingTool;
 import com.github.zuihou.business.productionReadyCenter.entity.MachineCuttingTool;
 import com.github.zuihou.business.productionReadyCenter.service.MachineCuttingToolService;
 import com.github.zuihou.business.productionResourceCenter.dao.ZZoneProductionresourceMapper;
+import com.github.zuihou.business.productionResourceCenter.entity.ProductionresourcePosition;
 import com.github.zuihou.business.productionResourceCenter.entity.ResourceBusiness;
 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.productionResourceCenter.service.ZZoneService;
 import com.github.zuihou.business.util.MsgUtil;
 import com.github.zuihou.common.constant.CacheKey;
@@ -98,6 +103,11 @@ public class MachineCuttingToolServiceImpl extends SuperCacheServiceImpl<Machine
         return machineCuttingTool;
     }
 
+    @Autowired
+    private ProductionresourcePositionService productionresourcePositionService;
+    @Autowired
+    private OrderTaskService orderTaskService;
+
     @Override
     public List<MachineCuttingTool> sysCuttingTools(MachineCuttingTool data) throws Exception{
         BaseContextHandler.setTenant("0000");
@@ -135,7 +145,7 @@ public class MachineCuttingToolServiceImpl extends SuperCacheServiceImpl<Machine
                 } else {
                     synMachineCuttingTolls = "[{\"position\":\"1.4\",\"number\":\"22\",\"name\":\"1-LC190202-C5CFOL3507002L-C5L90\",\"warnLife\":\"87\",\"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\":\"\"}," +
                             "{\"position\":\"1.1\",\"number\":\"7\",\"name\":\"XD6\",\"warnLife\":\"87\",\"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\":\"\"}," +
-                            "{\"position\":\"1.3\",\"number\":\"3\",\"name\":\"8C-N123E2-C5CFMR35070\",\"warnLife\":\"0\",\"targetLife\":\"8021.45\",\"workPiece\":null,\"workPieceWarn\":null,\"workPieceTarget\":null,\"wear\":null,\"wearWarn\":null,\"wearTarget\":null,\"sisterNo\":null,\"toolEdgeNo\":null,\"toolPosition\":null,\"toolRadius\":null,\"tl\":\"0\",\"doc\":\"FDJ\"}]\n";
+                            "{\"position\":\"1.3\",\"number\":\"3\",\"name\":\"8C-N123E2-C5CFMR35070\",\"warnLife\":\"0\",\"targetLife\":\"8021.45\",\"workPiece\":null,\"workPieceWarn\":null,\"workPieceTarget\":null,\"wear\":null,\"wearWarn\":null,\"wearTarget\":null,\"sisterNo\":null,\"toolEdgeNo\":null,\"toolPosition\":null,\"toolRadius\":null,\"tl\":\"0\",\"doc\":\"\"}]\n";
                 }
 
                 log.info("设备" + productionresource.getName() + "同步刀具返回{},请求参数{}", synMachineCuttingTolls, jsonObject.toString());
@@ -159,6 +169,11 @@ public class MachineCuttingToolServiceImpl extends SuperCacheServiceImpl<Machine
 
 
 
+                // 查询出临时订单是否已经创建此点位的订单
+                ProductionresourcePosition productionresourcePosition = productionresourcePositionService.getOne(new LbqWrapper<ProductionresourcePosition>().eq(ProductionresourcePosition::getResourceId, productionresource.getId()).like(ProductionresourcePosition::getPointId, "CNCT").last("LIMIT 1"));
+                List<OrderTask> list = orderTaskService.list(Wraps.<OrderTask>lbQ().eq(OrderTask::getStart,"CT_" + productionresourcePosition.getPointId()));
+
+
                 for (int i = 0; i < upResult.size(); i++) {
                     JSONObject tool = upResult.getJSONObject(i);
                     String cuttingToolNo = tool.getString("number");
@@ -219,7 +234,16 @@ public class MachineCuttingToolServiceImpl extends SuperCacheServiceImpl<Machine
 
                     //刀具报警 调用天轨 目标去刀具上下料站
                     if (!map.containsKey(resourceId) && (doc.equals("FDJ") || doc.equals("HD"))) {
-                        map.put(resourceId, machineCuttingTool);
+                        if(!list.isEmpty()){
+                            Map<String, List<OrderTask>> collect1 = list.stream().collect(Collectors.groupingBy(OrderTask::getCutStartNo));
+
+                            List<OrderTask> orderTasks = collect1.get(machineCuttingTool.getCuttingToolPosition().replace("1.", ""));
+                            if(orderTasks ==null || orderTasks.isEmpty()){
+                                map.put(resourceId, machineCuttingTool);
+                            }
+                        }else {
+                            map.put(resourceId, machineCuttingTool);
+                        }
                     }
                 }
 

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/strategy/impl/CacheRobotStrategy.java

@@ -157,7 +157,7 @@ public class CacheRobotStrategy implements RobotStrategy {
 
         if (ObjectUtil.isEmpty(targetStorge)) {
             dataMap.put("result", false);
-            dataMap.put("resultMsg", Objects.isNull(dataMap.get("resultMsg"))?"目标点位不满足,线边库不符合要求存放": dataMap.get("resultMsg"));
+            dataMap.put("resultMsg", dataMap.containsKey("resultMsg")?dataMap.get("resultMsg"):"目标点位不满足or线边库不符合要求存放");
             return dataMap;
         }
         String targetXbk = !returnMap.containsKey("targetxbk") ? null : returnMap.get("targetxbk").toString();

+ 15 - 3
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/strategy/impl/ToolRobotStrategy.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.github.zuihou.business.DemoLine.DemoCacheKey;
 import com.github.zuihou.business.DemoLine.DemoLineConstant;
 import com.github.zuihou.business.DemoLine.YunjianConstant;
+import com.github.zuihou.business.cutterdata.entity.CutterTestDataEntity;
 import com.github.zuihou.business.edgeLibrary.entity.StockInfo;
 import com.github.zuihou.business.edgeLibrary.entity.Storge;
 import com.github.zuihou.business.edgeLibrary.service.StockInfoService;
@@ -157,8 +158,10 @@ public class ToolRobotStrategy implements RobotStrategy {
             //从机床刀具库取需要预置处理
             Object cutToolAction = msgUtil.redis_get(DemoLineConstant.DEMOLINE_CUT_DEVICE_ACTION);
             if(ObjectUtil.isEmpty(cutToolAction)){
+                //查询是从那个机床取刀,
+                List<ProductionresourcePosition> list = productionresourcePositionService.list(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getPointId, orderTask.getStart().replace("CT_", "")));
                 //机床内刀具库位信息同步到机床待取位
-                CuttingTool cuttingTool = cuttingToolService.getOne(new LbqWrapper<CuttingTool>().eq(CuttingTool::getCutterNo, orderTask.getCutStartNo()));
+                CuttingTool cuttingTool = cuttingToolService.getOne(new LbqWrapper<CuttingTool>().eq(CuttingTool::getDeviceId, list.get(0).getResourceId()).eq(CuttingTool::getCutterNo, orderTask.getCutStartNo()));
                 if(cuttingTool == null){
                     throw new BizException("刀具点位与刀具信息点位数据不对,起始点位,"+startStore.getPointId()+";起始刀位号:"+orderTask.getCutStartNo());
                 }
@@ -212,7 +215,7 @@ public class ToolRobotStrategy implements RobotStrategy {
 
         if (ObjectUtil.isEmpty(targetStorge)) {
             dataMap.put("result", false);
-            dataMap.put("resultMsg", Objects.isNull(dataMap.get("resultMsg"))?"目标点位不满足,线边库不符合要求存放": dataMap.get("resultMsg"));
+            dataMap.put("resultMsg", dataMap.containsKey("resultMsg")?dataMap.get("resultMsg") : "目标点位不满足or线边库不符合要求存放");
             return dataMap;
         }
         String targetXbk = !returnMap.containsKey("targetxbk") ? null : returnMap.get("targetxbk").toString();
@@ -406,7 +409,16 @@ public class ToolRobotStrategy implements RobotStrategy {
             cutToolData.put("locationNo", orderTask.getCutStartNo());
         }
         cutToolObject.put("data", cutToolData);
-        msgUtil.getCcsData("/api/CutterDeviceTakeOrPutRequest", cutToolObject, taskNode);
+        String ccsData = "{\"taskID\":\"1922469448631975936\",\"taskNodeID\":\"1922469449227997186\",\"result\":\"true\",\"resultMsg\":\"\",\"concurrency\":\"false\",\"data\":null,\"returnData\":null}\n" ;
+        if(imcsTOccsEnable){
+            ccsData = msgUtil.getCcsData("/api/CutterDeviceTakeOrPutRequest", cutToolObject, taskNode);
+        }
+
+        JSONObject jsonObject = JSONObject.parseObject(ccsData);
+        if(jsonObject.getString("result").equalsIgnoreCase("false")){
+            throw new BizException(jsonObject.getString("resultMsg"));
+        }
+
     }
 
 }

+ 27 - 2
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/productionResourceCenter/ToolController.java

@@ -8,6 +8,8 @@ import com.github.zuihou.base.request.PageParams;
 import com.github.zuihou.business.controller.operationManagementCenter.ToolbarController;
 import com.github.zuihou.business.edgeLibrary.entity.Storge;
 import com.github.zuihou.business.edgeLibrary.service.StorgeService;
+import com.github.zuihou.business.operationManagementCenter.entity.OrderTask;
+import com.github.zuihou.business.operationManagementCenter.service.OrderTaskService;
 import com.github.zuihou.business.productionReadyCenter.entity.MachineCuttingTool;
 import com.github.zuihou.business.productionReadyCenter.service.MachineCuttingToolService;
 import com.github.zuihou.business.productionResourceCenter.dto.ToolPageDTO;
@@ -22,6 +24,7 @@ import com.github.zuihou.business.productionResourceCenter.service.ToolService;
 import com.github.zuihou.business.util.MsgUtil;
 import com.github.zuihou.common.constant.DictionaryKey;
 import com.github.zuihou.context.BaseContextHandler;
+import com.github.zuihou.database.mybatis.conditions.Wraps;
 import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
 import com.github.zuihou.database.mybatis.conditions.query.QueryWrap;
 import com.github.zuihou.log.annotation.SysLog;
@@ -110,6 +113,9 @@ public class ToolController extends SuperController<ToolService, Long, Tool, Too
         return success(tool);
     }
 
+    @Autowired
+    private OrderTaskService orderTaskService;
+
     //刀具定时任务处理
     @Scheduled(cron = "0 0/2 * * * *")
     @ApiOperation(value = "同步刀具", notes = "同步刀具")
@@ -130,9 +136,28 @@ public class ToolController extends SuperController<ToolService, Long, Tool, Too
 
         String zoneName = "涡轴柔性加工单元";
         List<ProductionresourcePosition> xbkList = productionresourcePositionService.getFreeProductionresourcePositionByNos(DictionaryKey.YJ_ZONE_XBK.get(zoneName+"-tool").split(","));
+        // 去除临时订单占用的点位 --start
+        List<OrderTask> list = orderTaskService.list();
+        if(!list.isEmpty()){
+            List<String> collect = list.stream().map(OrderTask::getGoal).collect(Collectors.toList());
+            Map<String, List<ProductionresourcePosition>> collect1 = xbkList.stream().collect(Collectors.groupingBy(ProductionresourcePosition::getPointId));
+
+            for (String s : collect) {
+                List<ProductionresourcePosition> list1 = collect1.get(s.replace("CT_", ""));
+                if(list1!=null && !list1.isEmpty()){
+                    collect1.remove(s.replace("CT_", ""));
+                }
+            }
+
+            xbkList = collect1.values().stream()
+                    .flatMap(List::stream)
+                    .collect(Collectors.toList());
+        }
+        // 去除临时订单占用的点位 --end
+
         if(xbkList.size()==0 || xbkList.size() < cutToolList.size()) {
-            msgUtil.createWarnLog("刀具线边库条件不满足", "DataException");
-            return R.fail("刀具线边库条件不满足");
+            msgUtil.createWarnLog("定时检测刀具出库,刀具线边库条件不满足", "DataException");
+            return R.fail("定时检测刀具出库,刀具线边库条件不满足");
         }
 
         for(int i=0;i<cutToolList.size(); i++) {