Преглед изворни кода

三坐标业务和CCS交互处理

oyq28 пре 2 година
родитељ
комит
daaa181720

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

@@ -613,8 +613,8 @@ public class StorgeServiceImpl extends SuperCacheServiceImpl<StorgeMapper, Storg
     @Override
     public boolean szbStockHandle(boolean isFetched, TaskNode taskNode){
         List<Storge> storgeList = baseMapper.selectList(new LbqWrapper<Storge>().in(Storge::getPointId, Arrays.asList(DictionaryKey.ZEISS_LOCATION.get("M"), DictionaryKey.ZEISS_LOCATION.get("L"))));
-        List<StockInfo> mPointList = stockInfoMapper.selectList(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, storgeList.get(0).getId()).eq(StockInfo::getCompleteBatchNo, taskNode.getCompleteBatchNo()));
-        List<StockInfo> lPointList = stockInfoMapper.selectList(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, storgeList.get(1).getId()).eq(StockInfo::getCompleteBatchNo, taskNode.getCompleteBatchNo()));
+        List<StockInfo> mPointList = stockInfoMapper.selectList(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, storgeList.get(0).getId()));
+        List<StockInfo> lPointList = stockInfoMapper.selectList(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, storgeList.get(1).getId()));
 
         JSONObject params = new JSONObject();
         //三坐标中间位取操作

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

@@ -503,6 +503,7 @@ public class TaskWorkNode {
             JSONObject retJson = JSONObject.parseObject(returnData);
             if (retJson != null) {
                 String code = retJson.getString("result").trim();
+                String concurrency = retJson.containsKey("concurrency")? retJson.getString("concurrency").trim() : "false";
                 if (code.equals("true")) {
                     //回调处理
 //                    taskNode.setExeStatus("3").setEndTime(new Date()).setExeResult("1");
@@ -515,19 +516,12 @@ public class TaskWorkNode {
 //                    log.setExeResult("0").setManual("1").setFeedback(retJson.getString("msg"));
                     // begin modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
                     log.setExeResult("0").setManual("0").setFeedback("设备资源不通过");
-                    // 释放之前占用的资源
-//                    String occupyResourcesKey = DictionaryType.OCCUPY_RESOURCE + taskNodeId;
-//                    String occupyResources = conMap.get(occupyResourcesKey)==null?"":(String)conMap.get(occupyResourcesKey);
-//                    String[] occupyResourcesArray = occupyResources.split(",");
-//                    for (String occupyResource : occupyResourcesArray){
-//                        Storge storge = storgeService.getById(Long.valueOf(occupyResource));
-//                        if("0".equals(storge.getLockStatus())){
-//                            storge.setLockStatus("1");
-//                            storgeService.updateById(storge);
-//                        }
-//                    }
-                    taskNodeService.freeLock(taskNode.getCompleteBatchNo());
-                    conMap.put("result",false);
+                    // 释放之前占用的资源 并发延迟带来的异常不释放锁定资源
+                    if(concurrency.equals("false")) {
+                        taskNodeService.freeLock(taskNode.getCompleteBatchNo());
+                        logger.warn("{}设备资源不通过freeLock节点", taskNode.getCompleteBatchNo());
+                    }
+                    conMap.put("result", false);
                     // end  modify by yejian on 20220520 for 解决资源抢占时机器人是空闲状态但是实际上面有料不能操作的时候请求指令接口返回失败后进入死循环问题
 
                 } else if (code.equals("exception")) {
@@ -1192,6 +1186,9 @@ public class TaskWorkNode {
 
                         Map locationMap = returnMap.containsKey("data")? (Map)returnMap.get("data"):new HashMap();
                         locationMap.put("location", startStore.getPointId());
+                        if(BizConstant.ROBOT_TYPE_NOCACHE.equals(zoneService.getRobotTypebyZone(zone.getName()))){
+                            locationMap.put("DestLocation", targetStorge.getPointId());
+                        }
                         dataMap.put("data", locationMap);
                         //出入库类型
                         dataMap.put(DemoLineConstant.DEMOLINE_STOCK_TYPE, DemoLineConstant.DEMOLINE_STOCK_TYPE_ALL_CRK);

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

@@ -1930,22 +1930,37 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
         String srcStorgeId = callBackJson.getString("srcPosition");
         String targetStorgeId = "";
         String stationId = callBackJson.getString("stationId");
+
+        String uniqueCode = callBackJson.containsKey("uniqueCode") ? callBackJson.getString("uniqueCode") : "";
+        //boolean bool = StringUtil.isNotEmpty(uniqueCode) && taskService.confirmCode(new HashMap<String, Object>(){{put("uniqueCode" , uniqueCode); put("orderId", currWorkpiece.getOrderId());}}).getIsSuccess();
+        boolean bool = StringUtil.isNotEmpty(uniqueCode) && workpieceService.count(new LbqWrapper<TWorkpiece>().eq(TWorkpiece::getUniqueCode, uniqueCode).eq(TWorkpiece::getOrderId, currWorkpiece.getOrderId()))>0;
+
+        //更新目标位置
         if (StringUtils.isNotBlank(stationId)) {
-            //三坐标检测位与虚拟位切换
-            int count = storgeService.count(new LbqWrapper<Storge>().eq(Storge::getPointId, DictionaryKey.ZEISS_LOCATION.get("L")));
+            /*
+            Long storgeId = storgeService.getOne(new LbqWrapper<Storge>().eq(Storge::getPointId, DictionaryKey.ZEISS_LOCATION.get("L"))).getId();
+            List<ProductionresourcePosition> productionresourcePositionList =
+                    productionresourcePositionService.list(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, taskNode.getTargetResourceId()).in(ProductionresourcePosition::getPointId, Arrays.asList(DictionaryKey.ZEISS_LOCATION.get("L"), DictionaryKey.ZEISS_LOCATION.get("M"))).orderByDesc(ProductionresourcePosition::getStatus));
+            int count = stockInfoService.count(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, storgeId));
             String getPoint = (count == 0)? DictionaryKey.ZEISS_LOCATION.get("L"): DictionaryKey.ZEISS_LOCATION.get("M");
-            ProductionresourcePosition productionresourcePosition =
-                    productionresourcePositionService.getOne(Wraps.<ProductionresourcePosition>lbQ().eq(ProductionresourcePosition::getResourceId, taskNode.getTargetResourceId()).eq(ProductionresourcePosition::getPointId, getPoint));
-            targetStorgeId = String.valueOf(productionresourcePosition.getStorgeId());
+            targetStorgeId = (lPointList.size() == 0)? String.valueOf(storgeList.get(0).getId()) : String.valueOf(storgeList.get(1).getId());
+            */
+            List<Storge> storgeList = storgeService.list(new LbqWrapper<Storge>().in(Storge::getPointId, Arrays.asList(DictionaryKey.ZEISS_LOCATION.get("M"), DictionaryKey.ZEISS_LOCATION.get("L"))));
+            List<StockInfo> mPointList = stockInfoMapper.selectList(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, storgeList.get(0).getId()));
+            List<StockInfo> lPointList = stockInfoMapper.selectList(new LbqWrapper<StockInfo>().eq(StockInfo::getStorgeId, storgeList.get(1).getId()));
+            targetStorgeId = storgeList.get(1).getId().toString();
+            if(lPointList.size() > 0 && mPointList.size() == 0){
+                //三坐标检测位与虚拟位切换 原虚拟位替换为M位
+                lPointList.forEach(item->item.setStorgeId(storgeList.get(0).getId()));
+                stockInfoService.updateBatchById(lPointList);
+                logger.warn("三坐标检测节点{}将上一零件从虚拟位切换到M位", taskNode.getId());
+            }
+            // 三坐标检测零件默认放置在M点位上
+            workpieceService.setWorkPieceStock(currWorkpiece, storgeList.get(0).getId().toString(), "", taskNode, uniqueCode);
         } else {
             targetStorgeId = callBackJson.getString("targetPostion");
+            workpieceService.setWorkPieceStock(currWorkpiece, targetStorgeId, "", taskNode, uniqueCode);
         }
-        // end modify by yejian on 20221019 for 滑台三座标结果返回需动态更新取位子
-        String uniqueCode = callBackJson.containsKey("uniqueCode") ? callBackJson.getString("uniqueCode") : "";
-        //boolean bool = StringUtil.isNotEmpty(uniqueCode) && taskService.confirmCode(new HashMap<String, Object>(){{put("uniqueCode" , uniqueCode); put("orderId", currWorkpiece.getOrderId());}}).getIsSuccess();
-        boolean bool = StringUtil.isNotEmpty(uniqueCode) && workpieceService.count(new LbqWrapper<TWorkpiece>().eq(TWorkpiece::getUniqueCode, uniqueCode).eq(TWorkpiece::getOrderId, currWorkpiece.getOrderId()))>0;
-        //更新目标位置
-        workpieceService.setWorkPieceStock(currWorkpiece, targetStorgeId, "", taskNode, uniqueCode);
 
         if (DemoLineConstant.DEMOLINE_STOCK_TYPE_METERIAL_RK.equals(stockType)) {
             List<BomProcedureMeterial> meterialList =

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

@@ -379,7 +379,7 @@ public class MachineNodeServiceImpl implements NodeOperationService {
                         /*data.put("workType", procedure.getThreeDimensionalPrograme());*/
                         data.put("workProgramName", procedure.getThreeDimensionalPrograme());
                         String location = DictionaryKey.ZEISS_LOCATION.get("M");
-                        data.put("stationId","M");
+                        //data.put("stationId","M");
                         data.put("location",location);
                         // begin modify by yejian on 20220507 for 更新tasknode表中nodetype,方便三坐标测量完成后回调后快速查找测量结果
                         taskNode.setNodeType("3");

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

@@ -55,6 +55,7 @@ import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.compress.utils.Lists;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -614,6 +615,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
                                 dataMap.put("fromStorge", startStore);
 
                                 locationMap.put("location", startStore.getPointId());
+                                locationMap.put("DestLocation", targetStorge.getPointId());
                                 dataMap.put("data", locationMap);
                                 // TODO 有问题,需要区分是否是第一步上料
                                 //出入库类型
@@ -694,7 +696,9 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
                         for(Storge jqrHcwStorge : jrqHcwStorges){
                             Long jqrHcwStorgeTaskNodeId = jqrHcwStorge.getCampId();
-                            if(null==jqrHcwStorgeTaskNodeId) break;
+                            if(null==jqrHcwStorgeTaskNodeId) {
+                                jqrHcwStorgeTaskNodeId = workpieceService.getOne(new LbqWrapper<TWorkpiece>().eq(TWorkpiece::getStorgeId, jqrHcwStorge.getId())).getTaskNodeId();
+                            }
                             TaskNode jqrHcwStorgeTaskNode = taskNodeService.getById(jqrHcwStorgeTaskNodeId);
                             //当前节点零件和缓存位上的零件不相同
                             if(!jqrHcwStorgeTaskNode.getCompleteBatchNo().equals(taskNode.getCompleteBatchNo())){