From 77ee4fbf68b83bf2ff0577d6751bbfbe85312f9f Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期三, 17 九月 2025 10:33:07 +0800
Subject: [PATCH] 堆垛机空闲10秒有入库任务回原点,空闲两分钟回原点

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |  254 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 244 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index ddfcc62..f823d8b 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -39,10 +39,8 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import javax.annotation.Resource;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -88,6 +86,9 @@
     private WrkMastService wrkMastService;
     @Autowired
     private BasRgvMapService basRgvMapService;
+
+    @Resource
+    private BasDevpErrLogService basDevpErrLogService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -907,13 +908,14 @@
             if (crnProtocol == null) {
                 continue;
             }
+            if (crnProtocol.getModeType() != CrnModeType.STOP) {
                 // 鏈変换鍔�
                 if (crnProtocol.getTaskNo() != 0) {
 
                     BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
                     // 鏈夊紓甯�
                     if (latest == null) {
-                        News.warnNoLog(""+mark+" - 1"+" - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏈変换鍔★紝鏈夊紓甯�");
+                        News.warnNoLog("" + mark + " - 1" + " - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏈変换鍔★紝鏈夊紓甯�");
                         if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
                             WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
                             if (wrkMast == null) {
@@ -945,7 +947,7 @@
                                     "浠诲姟涓紓甯�"    // 澶囨敞
                             );
                             if (!basErrLogService.insert(basErrLog)) {
-                                News.error(""+mark+" - 2"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+                                News.error("" + mark + " - 2" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                             }
                         }
                     } else {
@@ -955,7 +957,7 @@
                             latest.setUpdateTime(now);
                             latest.setStatus(2);
                             if (!basErrLogService.updateById(latest)) {
-                                News.error(""+mark+" - 3"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                                News.error("" + mark + " - 3" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                             }
                         }
                     }
@@ -964,7 +966,7 @@
                     BasErrLog latest = basErrLogService.findLatest(crn.getId());
                     // 鏈夊紓甯�
                     if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
-                        News.warnNoLog(""+mark+" - 4"+" - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏃犱换鍔★紝鏈夊紓甯�");
+                        News.warnNoLog("" + mark + " - 4" + " - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏃犱换鍔★紝鏈夊紓甯�");
                         // 璁板綍鏂板紓甯�
                         if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
@@ -993,7 +995,7 @@
                                     "鏃犱换鍔″紓甯�"    // 澶囨敞
                             );
                             if (!basErrLogService.insert(basErrLog)) {
-                                News.error(""+mark+" - 5"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+                                News.error("" + mark + " - 5" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                             }
                         }
                         // 鏃犲紓甯�
@@ -1004,11 +1006,12 @@
                             latest.setUpdateTime(now);
                             latest.setStatus(2);
                             if (!basErrLogService.updateById(latest)) {
-                                News.error(""+mark+" - 6"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                                News.error("" + mark + " - 6" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                             }
                         }
                     }
                 }
+            }
         }
     }
 
@@ -1120,6 +1123,174 @@
                 }
             }
         }
+    }
+
+    /**
+     * 杈撻�佺嚎寮傚父
+     */
+    public synchronized void recDevpErr() {
+        Date now = new Date();
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            Integer devpId = devp.getId();
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+            for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
+                Integer siteNo = entry.getKey();
+                StaProtocol staProtocol = entry.getValue();
+                Integer workNo = staProtocol.getWorkNo();
+                // 杈撻�佺嚎鎶ヨ
+                String plcErr = staPlcErr(staProtocol);
+                if (staProtocol.isAutoing()) {
+                    // 鏈変换鍔�
+                    if (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() <= 9000) {
+
+                        // 鑾峰彇杈撻�佺嚎鎶ヨ淇℃伅
+                        BasDevpErrLog latestByTaskNo = basDevpErrLogService.findLatestByTaskNo(siteNo, workNo);
+
+                        // 鏈夊紓甯�
+                        if (latestByTaskNo == null) {
+                            if (!plcErr.equals("")) {
+                                WrkMast wrkMast = wrkMastMapper.selectById(workNo);
+                                if (wrkMast == null) {
+                                    continue;
+                                }
+
+                                BasDevpErrLog basErrLog = new BasDevpErrLog(
+                                        null,    // 缂栧彿
+                                        wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                        now,    // 鍙戠敓鏃堕棿
+                                        null,    // 缁撴潫鏃堕棿
+                                        wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                        wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                        wrkMast.getCrnNo(),    // 鍫嗗灈鏈�
+                                        devpId,    // plc
+                                        wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                        wrkMast.getStaNo(),    // 鐩爣绔�
+                                        siteNo,    // 婧愮珯
+                                        wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                        wrkMast.getBarcode(),    // 鏉$爜
+                                        0,    // 寮傚父鐮�
+                                        plcErr,    // 寮傚父
+                                        1,    // 寮傚父鎯呭喌
+                                        now,    // 娣诲姞鏃堕棿
+                                        null,    // 娣诲姞浜哄憳
+                                        now,    // 淇敼鏃堕棿
+                                        null,    // 淇敼浜哄憳
+                                        "浠诲姟涓紓甯�"    // 澶囨敞
+                                );
+                                if (!basDevpErrLogService.insert(basErrLog)) {
+                                    log.error("杈撻�佺嚎寮傚父淇℃伅鎻掑叆琛╝sr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+                                }
+                            }
+                        } else {
+                            // 寮傚父淇
+                            if (plcErr.equals("")) {
+                                latestByTaskNo.setEndTime(now);
+                                latestByTaskNo.setUpdateTime(now);
+                                latestByTaskNo.setStatus(2);
+                                if (!basDevpErrLogService.updateById(latestByTaskNo)) {
+                                    log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latestByTaskNo);
+                                }
+                            }
+                        }
+                        // 鏃犱换鍔�
+                    } else {
+                        BasDevpErrLog latest = basDevpErrLogService.findLatest(siteNo);
+                        // 鏈夊紓甯�
+                        if (!plcErr.equals("")) {
+                            // 璁板綍鏂板紓甯�
+                            if (latest == null || !latest.getError().equals(plcErr) || latest.getStatus() == 2 ) {
+                                BasDevpErrLog basErrLog = new BasDevpErrLog(
+                                        null,    // 缂栧彿
+                                        null,    // 宸ヤ綔鍙�
+                                        now,    // 鍙戠敓鏃堕棿
+                                        null,    // 缁撴潫鏃堕棿
+                                        null,    // 宸ヤ綔鐘舵��
+                                        null,    // 鍏ュ嚭搴撶被鍨�
+                                        0,    // 鍫嗗灈鏈�
+                                        devpId,    // plc
+                                        null,    // 鐩爣搴撲綅
+                                        null,    // 鐩爣绔�
+                                        siteNo,    // 婧愮珯
+                                        null,    // 婧愬簱浣�
+                                        null,    // 鏉$爜
+                                        0,    // 寮傚父鐮�
+                                        plcErr,    // 寮傚父
+                                        1,    // 寮傚父鎯呭喌
+                                        now,    // 娣诲姞鏃堕棿
+                                        null,    // 娣诲姞浜哄憳
+                                        now,    // 淇敼鏃堕棿
+                                        null,    // 淇敼浜哄憳
+                                        "鏃犱换鍔″紓甯�"    // 澶囨敞
+                                );
+                                if (!basDevpErrLogService.insert(basErrLog)) {
+                                    log.error("杈撻�佺嚎寮傚父璁板綍asr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+                                }
+                            }
+                            // 鏃犲紓甯�
+                        } else {
+                            // 寮傚父淇
+                            if (latest != null && latest.getStatus() == 1) {
+                                latest.setEndTime(now);
+                                latest.setUpdateTime(now);
+                                latest.setStatus(2);
+                                if (!basDevpErrLogService.updateById(latest)) {
+                                    log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latest);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // 鑾峰彇杈撻�佺嚎鎶ヨ
+    public String staPlcErr(StaProtocol staProtocol){
+        Integer siteId = staProtocol.getSiteId();
+        if (staProtocol.getBreakerErr()){
+            return "鏂矾鍣ㄦ晠闅�";
+        }
+        if (staProtocol.getInfraredErr()){
+            return "鍏夌數寮傚父";
+        }
+        if (staProtocol.getOutTimeErr()){
+            return "杩愯瓒呮椂";
+        }
+        if (staProtocol.getSeizeSeatErr()){
+            return "鍗犱綅瓒呮椂";
+        }
+        if (staProtocol.getWrkYgoodsN()){
+            return "鏈変换鍔℃棤璐ф晠闅�";
+        }
+        if (staProtocol.getInverterErr()){
+            return "鍙橀鍣ㄦ晠闅�";
+        }
+        if (staProtocol.getContactErr()){
+            return "鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
+        }
+        if (staProtocol.getUpcontactErr()){
+            return "椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
+        }
+        if (staProtocol.isFrontErr()){
+            return "鍓嶈秴闄�";
+        }
+        if (staProtocol.isBackErr()){
+            return "鍚庤秴闄�";
+        }
+        if (staProtocol.isHighErr()){
+            return "楂樿秴闄�";
+        }
+        if (staProtocol.isLeftErr()){
+            return "宸﹁秴闄�";
+        }
+        if (staProtocol.isRightErr()){
+            return "鍙宠秴闄�";
+        }
+        if (staProtocol.isBarcodeErr() && siteId != 1083 && siteId != 1086 && siteId != 1089 ){
+            return "鎵爜澶辫触";
+        }
+        return "";
     }
 
     /**
@@ -1423,4 +1594,67 @@
 //        News.infoNoLog(""+mark+" - 0"+" - outOfDevp鎵ц瀹屾垚");
     }
 
+    /**
+     * 鍫嗗灈鏈哄洖鍘熺偣
+     */
+    public synchronized void originGo() throws InterruptedException {
+
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if(crnProtocol == null) {
+                continue;
+            }
+            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
+                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+                // 鍒ゆ柇鏄笉鏄凡鍦ㄥ師鐐�
+                if(crnProtocol.getBay() == 0 && crnProtocol.getLevel() == 1) {
+                    continue;
+                }
+                // 鍒ゆ柇鏄笉鏄┖闂蹭笁鍒嗛挓
+                BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+                if (basCrnp.getWrkNo() != 0) {
+                    continue;
+                }
+                Date now = new Date();
+                Date modiTime = basCrnp.getModiTime();
+                long diffInMillis = now.getTime()-modiTime.getTime();
+                if(diffInMillis < 10 * 1000) { // 绌洪棽灏忎簬10绉掑垯璺宠繃
+                    continue;
+                } else {  // 鏈夊叆搴撲换鍔℃垨澶т簬2鍒嗛挓锛屽洖鍘熺偣
+                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("crn_no", crn.getId()).in("wrk_sts", 2, 9, 10));
+                    if(count == 0 && diffInMillis < 2 * 60 * 1000) {
+                        continue;
+                    }
+                }
+
+                // 鏈夊悐杞﹀叆搴撴垨鍚婅溅鍑哄簱浠诲姟
+                int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnProtocol.getCrnNo()).in("wrk_sts", 3, 12));
+                if(count != 0) {
+                    continue;
+                }
+
+                CrnCommand crnCommand = new CrnCommand();
+                crnCommand.setCrnNo(crn.getId()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+                crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍥炲師鐐�
+                crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 4 : crn.getId() == 2 ? 6 : crn.getId() == 3 ? 7 : 11));     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
+                crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
+                crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
+                crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+                if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
+                    News.error("鍥炲師鐐逛换鍔′笅鍙戝け璐�", crn.getId(), JSON.toJSON(crnCommand));
+                } else {
+                    basCrnp.setModiTime(new Date());
+                    basCrnpService.updateById(basCrnp); // 璁剧疆鏇存柊鏃堕棿锛岄伩鍏嶉噸澶嶄笅鍙戝洖鍘熺偣
+                    log.info("{}鍙峰爢鍨涙満鍥炲師鐐逛换鍔′笅鍙戞垚鍔燂細{}", crn.getId(), JSON.toJSON(crnCommand));
+                }
+                Thread.sleep(3000);
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.1