From 5aa831dffdfb0ca524362e8d649c28babc681ece Mon Sep 17 00:00:00 2001
From: cpT <1@123>
Date: 星期一, 30 六月 2025 16:43:18 +0800
Subject: [PATCH] #改造

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  273 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 259 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index cd335fa..fdcb0d3 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.controller.CrnController;
 import com.zy.asrs.domain.enums.TaskStatusType;
@@ -104,6 +105,9 @@
     private Long avoidDistance;
     @Autowired
     private TaskWrkLogServiceImpl taskWrkLogService;
+    @Autowired
+    private BasPlcerrorLogServiceImpl basPlcerrorLogService;
+    public Long currentTimeMilliConnectCrnAuto= 0L;
 
     public void generateStoreWrkFile() {
         try {
@@ -225,7 +229,7 @@
                             TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode));
                             if (!Cools.isEmpty(taskWrk1)) {
                                 log.info("鎵樼洏鐮侊細" + barcode + "浠诲姟妗e瓨鍦�");
-                                if (taskWrk1.getIoType() == 1 && taskWrk1.getStatus() < 3 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())) {
+                                if (taskWrk1.getIoType() == 1 && taskWrk1.getStatus() < 3 && (taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString()) || taskWrk1.getStartPoint().equals(String.valueOf((staProtocol.getSiteId()+1))))) {
                                     StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                                             .eq("CRN_NO", taskWrk1.getCrnNo()).eq("TYPE_NO", 1).eq("STN_NO", staProtocol.getSiteId()));
 
@@ -719,26 +723,61 @@
                     log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
                     continue;
                 }
-
-                if (crnProtocol.getLaneNo()!=0 && (crnProtocol.getBay()!=1 || crnProtocol.getLevel()!=1)){
-                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.statusType == CrnStatusType.IDLE && crnProtocol.getTaskNo() != 0) {
+                if (System.currentTimeMillis()-currentTimeMilliConnectCrnAuto<1000*60*10){
+                    continue;
+                }
+                if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.statusType == CrnStatusType.IDLE && crnProtocol.getLoaded().equals((short)0) && crnProtocol.getLaneNo()!=0 && crnProtocol.getTaskNo() == 0 ) {
+                    if (crnProtocol.getBay()!=1 || crnProtocol.getLevel()!=1){
                         //鑾峰彇宸ヤ綔妗�
                         List<TaskWrk> taskWrks = taskWrkMapper.selectByLaneNo(crnProtocol.getLaneNo());
                         if (!taskWrks.isEmpty()) {
                             continue;
                         }
                         List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<TaskWrkLog>().eq("CRN_NO",crnProtocol.getLaneNo()).orderBy("COMPLETE_TIME",true));
-                        if (taskWrkLogs.isEmpty()) {
-                            CrnCommand command = new CrnCommand();
-                            if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(4, command))) {
-                                log.error("鍫嗗灈鏈鸿嚜鍔ㄥ洖婧愮偣澶辫触锛屽爢鍨涙満鍙�={}", crnProtocol.getCrnNo());
+                        if (!taskWrkLogs.isEmpty()) {
+                            TaskWrkLog taskWrkLog = taskWrkLogs.get(0);
+                            Date completeTime = taskWrkLog.getCompleteTime();
+                            if (completeTime==null){
+                                completeTime = taskWrkLog.getCancelTime();
+                                if (completeTime==null){
+                                    completeTime = taskWrkLog.getModiTime();
+                                }
+                            }
+                            long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(completeTime, new Date());
+                            if (differenceInSeconds <= 60*10*1000) {
+                                return;
                             }
                         }
-//                        long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(taskWrkLogs.get(0).getCompleteTime(), new Date());
-//                        if (differenceInSeconds <= 1000) {
-//                            return;
-//                        }
+                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                        CrnCommand crnCommand = new CrnCommand();
+                        crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                        crnCommand.setCrnNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
+                        crnCommand.setTaskNo((short)999); // 宸ヤ綔鍙�
+                        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                        crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                        crnCommand.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
+                        crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+                        crnCommand.setSourcePosZ((short) 0);   // 婧愬簱浣嶅眰
+                        int row = crnProtocol.getLaneNo() * 2;
+                        crnCommand.setDestinationPosX((short) row);     // 鐩爣搴撲綅鎺�
+                        crnCommand.setDestinationPosY((short) 1);     // 鐩爣搴撲綅灞�
+                        crnCommand.setDestinationPosZ((short) 1);     // 鐩爣搴撲綅鍒�
+                        if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
+                            log.error("鍫嗗灈鏈鸿嚜鍔ㄥ洖婧愮偣澶辫触锛屽爢鍨涙満鍙�={}", crnProtocol.getCrnNo());
 
+                            if (System.currentTimeMillis()-currentTimeMilliConnectCrnAuto>1000*60*10){
+                                try{
+                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                                    deviceErrorService.addDeviceError("CrnErr", crnProtocol.getCrnNo(), "鍫嗗灈鏈鸿嚜鍔ㄥ洖婧愮偣澶辫触");
+                                } catch (Exception e2){
+                                }
+                                if (currentTimeMilliConnectCrnAuto == 0){
+                                    currentTimeMilliConnectCrnAuto = System.currentTimeMillis()-1000*60*10-1;
+                                } else {
+                                    currentTimeMilliConnectCrnAuto = System.currentTimeMillis();
+                                }
+                            }
+                        }
                     }
                 }
             } catch (Exception e){
@@ -1413,8 +1452,8 @@
                                         null,    // 缁撴潫鏃堕棿
                                         taskWrk.getWrkSts().longValue(),    // 宸ヤ綔鐘舵��
                                         taskWrk.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-                                        crn.getId(),    // 鍫嗗灈鏈�
-                                        null,    // plc
+                                        taskWrk.getCrnNo(),    // 宸烽亾鍙�
+                                        crn.getId(),    // 鍫嗗灈鏈哄彿
                                         taskWrk.getTargetPoint(),    // 鐩爣搴撲綅
                                         0,    // 鐩爣绔�
                                         0,    // 婧愮珯
@@ -1496,6 +1535,132 @@
                 }
             } catch (Exception e){
                 log.error("鍫嗗灈鏈哄紓甯镐俊鎭褰曞け璐� ===>> [id:{}] [error:{}]", crn.getId(), e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
+     */
+    public void recDevErr() {
+        Date now = new Date();
+        for (DevpSlave devpSlave : slaveProperties.getDevp()) {
+            try{
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
+                Map<Integer, StaProtocol> station = devpThread.getStation();
+                for (StaProtocol staProtocol : station.values()){
+                    try{
+                        if (staProtocol == null) {
+                            continue;
+                        }
+//                        if (staProtocol.isAutoing()) {
+//                            // 鏈変换鍔�
+//                            if (staProtocol.getWorkNo() != 0) {
+////                                BasErrLog latest = basPlcerrorLogService.se(crn.getId(), crnProtocol.getTaskNo().intValue());
+//                                // 鏈夊紓甯�
+//                                if (latest == null) {
+//                                    if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
+//                                        TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(crnProtocol.getTaskNo()));
+//                                        if (taskWrk == null) {
+//                                            continue;
+//                                        }
+//                                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm().intValue());
+//                                        String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
+//                                        BasErrLog basErrLog = new BasErrLog(
+//                                                null,    // 缂栧彿
+//                                                taskWrk.getWrkNo(),    // 宸ヤ綔鍙�
+//                                                now,    // 鍙戠敓鏃堕棿
+//                                                null,    // 缁撴潫鏃堕棿
+//                                                taskWrk.getWrkSts().longValue(),    // 宸ヤ綔鐘舵��
+//                                                taskWrk.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+//                                                crn.getId(),    // 鍫嗗灈鏈�
+//                                                null,    // plc
+//                                                taskWrk.getTargetPoint(),    // 鐩爣搴撲綅
+//                                                0,    // 鐩爣绔�
+//                                                0,    // 婧愮珯
+//                                                taskWrk.getStartPoint(),    // 婧愬簱浣�
+//                                                taskWrk.getBarcode(),    // 鏉$爜
+//                                                (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
+//                                                errName,    // 寮傚父
+//                                                1,    // 寮傚父鎯呭喌
+//                                                taskWrk.getCreateTime(),    // 浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)
+//                                                null,    // 娣诲姞浜哄憳
+//                                                now,    // 淇敼鏃堕棿
+//                                                null,    // 淇敼浜哄憳
+//                                                "浠诲姟涓紓甯�"    // 澶囨敞
+//                                        );
+//                                        if (!basErrLogService.insert(basErrLog)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+//                                        }
+//                                    }
+//                                } else {
+//                                    // 寮傚父淇
+//                                    if (crnProtocol.getAlarm() == null || crnProtocol.getAlarm() == 0) {
+//                                        latest.setEndTime(now);
+//                                        latest.setUpdateTime(now);
+//                                        latest.setStatus(2);
+//                                        if (!basErrLogService.updateById(latest)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+//                                        }
+//                                    }
+//                                }
+//                                // 鏃犱换鍔�
+//                            } else {
+//                                BasErrLog latest = basErrLogService.findLatest(crn.getId());
+//                                // 鏈夊紓甯�
+//                                if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
+//                                    // 璁板綍鏂板紓甯�
+//                                    if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
+//                                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
+//                                        String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
+//                                        BasErrLog basErrLog = new BasErrLog(
+//                                                null,    // 缂栧彿
+//                                                null,    // 宸ヤ綔鍙�
+//                                                now,    // 鍙戠敓鏃堕棿
+//                                                null,    // 缁撴潫鏃堕棿
+//                                                null,    // 宸ヤ綔鐘舵��
+//                                                null,    // 鍏ュ嚭搴撶被鍨�
+//                                                crn.getId(),    // 鍫嗗灈鏈�
+//                                                null,    // plc
+//                                                null,    // 鐩爣搴撲綅
+//                                                null,    // 鐩爣绔�
+//                                                null,    // 婧愮珯
+//                                                null,    // 婧愬簱浣�
+//                                                null,    // 鏉$爜
+//                                                (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
+//                                                errName,    // 寮傚父
+//                                                1,    // 寮傚父鎯呭喌
+//                                                now,    // 娣诲姞鏃堕棿
+//                                                null,    // 娣诲姞浜哄憳
+//                                                now,    // 淇敼鏃堕棿
+//                                                null,    // 淇敼浜哄憳
+//                                                "鏃犱换鍔″紓甯�"    // 澶囨敞
+//                                        );
+//                                        if (!basErrLogService.insert(basErrLog)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+//                                        }
+//                                    }
+//                                    // 鏃犲紓甯�
+//                                } else {
+//                                    // 寮傚父淇
+//                                    if (latest != null && latest.getStatus() == 1) {
+//                                        latest.setEndTime(now);
+//                                        latest.setUpdateTime(now);
+//                                        latest.setStatus(2);
+//                                        if (!basErrLogService.updateById(latest)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+//                                        }
+//                                    }
+//                                }
+//                            }
+//                        }
+                    } catch (Exception devErr){
+                        log.error("杈撻�佺嚎绔欑偣寮傚父淇℃伅璁板綍澶辫触 ===>> [id:{}] [error:{}]", staProtocol.getStaNo(), devErr.getMessage());
+                    }
+                }
+            } catch (Exception e){
+                log.error("杈撻�佺嚎寮傚父淇℃伅璁板綍澶辫触 ===>> [id:{}] [error:{}]", devpSlave.getId(), e.getMessage());
             }
         }
     }
@@ -1774,6 +1939,52 @@
         }
         return null;
     }
+    public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
+        ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
+            add(1009);
+            add(1011);
+            add(1012);
+            add(1014);
+            add(1016);
+        }};
+        try{
+
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
+            ArrayList<Integer> listW = new ArrayList<Integer>();
+            ArrayList<Integer> listL = new ArrayList<Integer>();
+            for (Integer staNo : arrayList){
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (staProtocol == null) {
+                    RgvErrCache.updateRgvErr(rgvNo,staNo+"绔欑偣鏁版嵁涓㈠け");
+                    return false;
+                }
+                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+                if (staProtocol.getWorkNo() != 0) {
+                    if (!listW.contains(staProtocol.getWorkNo())) {
+                        listW.add(staProtocol.getWorkNo());
+                    }
+                }
+                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+                if (staProtocol.isLoading()) {
+                    if (!listL.contains(staProtocol.getStaNo())) {
+                        listL.add(staProtocol.getStaNo());
+                    }
+                }
+            }
+            if (listW.size()>=3){
+                RgvErrCache.updateRgvErr(rgvNo,"绛夊緟1012鎷i�夛紝闃叉鍫靛");
+                return false;
+            }
+            if (listL.size()>=3){
+                RgvErrCache.updateRgvErr(rgvNo,"绛夊緟1012鎷i�夛紝闃叉鍫靛");
+                return false;
+            }
+        } catch (Exception e){
+            RgvErrCache.updateRgvErr(rgvNo,"1012妫�娴嬪紓甯革細"+e.getMessage());
+            return false;
+        }
+        return true;
+    }
 
     public boolean rgvOtherStatusEnable(RgvSlave slave) {
         RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -1797,6 +2008,11 @@
                     boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
                     if (basDevpPositions.isEmpty()) {
                         log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
+                        try{
+                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                            deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚锛氳幏鍙栨墍鏈夌珯鐐逛俊鎭紓甯�");
+                        } catch (Exception e2){
+                        }
                         continue;
                     }
                     List<TaskWrk> taskWrkList = new ArrayList<>();
@@ -1836,6 +2052,7 @@
                             if (rgvOtherIDLEOther(rgvSlave)){
                                 if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
                                     System.out.println("绌洪棽灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"绌洪棽灏辫繎璺宠繃");
 
                                     sign=true;
                                 }
@@ -1916,6 +2133,8 @@
                             if (rgvOtherIDLEOther2(rgvSlave)){
                                 if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
                                     System.out.println("杩愯灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"杩愯灏辫繎璺宠繃");
+
                                     sign=true;
                                 }
                             }
@@ -2078,6 +2297,8 @@
                             }
 
                         }
+                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"鏈煡璇㈠埌鍙墽琛屼换鍔�");
+
                     } else {
                         //鍙敤鍖哄煙灏辫繎鍙栬揣
                         //灏辫繎鎺掑簭
@@ -2108,6 +2329,11 @@
                 }
             } catch (Exception e) {
                 log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚澶辫触");
+                } catch (Exception e2){
+                }
             }
         }
     }
@@ -2164,6 +2390,11 @@
                 if (targetPointConvert == null) {
                     return false;
                 }
+                if (targetPointConvert == 1009){
+                    if (!deviceDetection(rgvStn, rgvSlave.getId())){
+                        return false;
+                    }
+                }
 
                 BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
                 BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
@@ -2200,6 +2431,13 @@
                 }
             } catch (Exception e) {
                 log.error("浠诲姟鐢熸垚澶辫触issued1===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+                RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"绔欑偣浠诲姟鐢熸垚澶辫触issued1");
+
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "浠诲姟鐢熸垚澶辫触issued1");
+                } catch (Exception e2){
+                }
                 return false;
             }
 
@@ -2217,6 +2455,13 @@
             }
         } catch (Exception e) {
             log.error("浠诲姟鐢熸垚澶辫触issued2===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+            RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"绔欑偣浠诲姟鐢熸垚澶辫触issued2");
+
+            try{
+                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "绔欑偣浠诲姟鐢熸垚澶辫触issued2");
+            } catch (Exception e2){
+            }
         }
         return true;
     }

--
Gitblit v1.9.1