From b3280d431ea42f46afe020782b677b11d504be31 Mon Sep 17 00:00:00 2001
From: 1 <1>
Date: 星期三, 14 一月 2026 13:32:38 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  132 ++++++++++++++++++++++++++++---------------
 1 files changed, 86 insertions(+), 46 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 155d1b3..54da5d7 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -43,6 +43,8 @@
 import com.zy.core.thread.LedThread;
 import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -77,6 +79,8 @@
     private WaitPakinMapper waitPakinMapper;
     @Autowired
     private LocMastService locMastService;
+    @Autowired
+    private ConfigService configService;
     @Autowired
     private StaDescService staDescService;
     @Autowired
@@ -310,7 +314,7 @@
                     }
                     WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                             .eq("barcode", barcode)
-                            .in("io_type", 107,103,57));
+                            .in("io_type", 107,103,57,53));
                     if (!Cools.isEmpty(checkPick)) {
                         continue;
                     }
@@ -533,6 +537,44 @@
 //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
 
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
+                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                    WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1(pickSta.getStaNo(), barcode);
+                    if (wrkMast1 != null) {
+                        int wrkNo1 = basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast1.getWrkNo()));
+                        if (wrkNo1 != 0){
+                            News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast1.getWrkNo());
+                            StaProtocol staProtocolNew = new StaProtocol();
+                            staProtocolNew.setWorkNo(wrkMast1.getWrkNo());
+                            staProtocolNew.setStaNo(RouteUtils.SouStaEnd(wrkMast1.getStaNo(),wrkMast1.getSourceStaNo()));
+                            staProtocolNew.setSiteId(staProtocol.getSiteId());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            staProtocolNew.setBarcode(barcode);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolNew));
+                            if (ledThread != null) {
+                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�="+ wrkMast1.getWrkNo()));
+                            }
+                            continue;
+                        }
+                        barcodeThread.setBarcode("");
+                        staProtocol.setWorkNo(wrkMast1.getWrkNo());
+                        staProtocol.setStaNo(RouteUtils.SouStaEnd(null,wrkMast1.getSourceStaNo()));
+                        staProtocol.setBarcode(barcode);
+
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        log.info("杈撻�佺嚎涓嬪彂(瀛樺湪璁惧涓婅蛋鐨勫伐浣滄。锛岀洿鎺ヤ笅鍙戯紒))锛�"+wrkMast1.getWrkNo()+","+wrkMast1.getStaNo());
+
+                        ledThread.errorReset();
+                        log.info("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
+
+                        if (!result) {
+                            News.error( ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            log.error("杈撻�佺嚎涓嬪彂(瀛樺湪璁惧涓婅蛋鐨勫伐浣滄。锛岀洿鎺ヤ笅鍙戯紒)==>鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            continue;
+                        }
+                        continue;
+
+                    }
                     News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛�");
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
 //                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
@@ -1180,7 +1222,7 @@
             //mark - 3 - ....
             this.locToLoc(crn, crnProtocol,mark);
             //棰勮皟搴�
-//            this.crnRebackHp(crn, crnProtocol, crnThread);
+            this.crnRebackHp(crn, crnProtocol, crnThread);
 
         }
 //        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
@@ -1198,6 +1240,9 @@
                     new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo())
             );
             boolean result = true;
+            if(crnProtocol.getCrnNo() == 3){
+                return;
+            }
 
             for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
@@ -1537,14 +1582,14 @@
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
 //                     if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
 //                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
-
-                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && !staProtocol.isLoading()
+                boolean unLoading = !staProtocol.isLoading();
+                Config configAGVAUTOIN = configService.selectConfigByCode("COB");
+                if(Boolean.parseBoolean(configAGVAUTOIN.getValue())){
+                    unLoading = true;
+                }
+                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && unLoading
                         ) {
-//                    if (slave.getId() == 1 || slave.getId() == 2){
-//                        if (staProtocol.isLoading() || staProtocol.getWorkNo() != 0 || !staProtocol.isOutEnable()){
-//                            continue;
-//                        }
-//                    }
+//
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
@@ -4114,6 +4159,9 @@
                 log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�4", slave.getId());
                 continue;
             }
+            if(staProtocol == null){
+                continue;
+            }
             if(staProtocol.getWorkNo() == 0){
                 continue;
             }
@@ -4656,34 +4704,26 @@
             rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
             RgvTaskStatusType type;
             Integer targetPosition = 0;
+            String typeNo = null;
             if(wrkMastSta.getWrkSts() == 0){
                 type = RgvTaskStatusType.FETCH; //鍙栬揣
                 targetPosition = wrkMastSta.getStaStart();
+                typeNo = "2";
             }else{
                 type = RgvTaskStatusType.PUT; //鏀捐揣
                 targetPosition = wrkMastSta.getStaEnd();
+                typeNo = "3";
             }
-            Date now = new Date();
-            if (targetPosition == 1038) {
-                System.out.println("灏忚溅涓嬪彂鍛戒护鏃堕棿锛�" +
-                        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(now));
-            }
-            EntityWrapper<BasRgvOpt> entityWrapper = new EntityWrapper<>();
-            entityWrapper.eq("rgv_no", rgvId)
-                    .orderBy("send_time");
-            BasRgvOpt basRgvOpt = basRgvOptService.selectOne(entityWrapper);
+            BasRgvOpt basRgvOpt = basRgvOptService.getBasRgvOpt(rgvId);
             // 闃叉閲嶅涓嬪彂鍛戒护
             if (basRgvOpt != null) {
-                // 鑾峰彇鏈�鏂拌褰曠殑 mode 瀵瑰簲鐨勪换鍔$被鍨�
-                RgvTaskStatusType latestTaskStatus = RgvTaskStatusType.valueOf(basRgvOpt.getMode());
-                // 鍒ゆ柇褰撳墠鍛戒护涓庢渶鏂拌褰曟槸鍚︾浉鍚�
-                if (latestTaskStatus == type && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) {
+                if (basRgvOpt.getMode().equals(typeNo) && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) {
                     // 濡傛灉鏈�鏂拌褰曠殑 mode 鍜� posSta 涓庡綋鍓嶅懡浠ょ浉鍚岋紝璁や负鏄噸澶嶅懡浠�
                     log.error("鍛戒护閲嶅涓嬪彂锛屽綋鍓嶅懡浠や笌鏈�鏂拌褰曠浉鍚岋紝浠诲姟涓嶄笅鍙戯紒");
                     return false;
                 }
+                log.info("rgv鍛戒护鏃ュ織wrkNo={},posSta={},mode={}",wrkMastSta.getWrkNo(),basRgvOpt.getPosSta(),basRgvOpt.getMode());
             }
-
             rgvCommand.setTaskNo(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅宸ヤ綔鍙�
             rgvCommand.setTaskStatus(type); // 宸ヤ綅浠诲姟妯″紡:  鍙栬揣
             rgvCommand.setTargetPosition(targetPosition);   //宸ヤ綅鐩爣绔欑偣
@@ -4824,6 +4864,10 @@
      * arm浠诲姟瀹屾垚鑷姩缁勬墭
      * */
     public synchronized void  armMissionAccomplished1() {
+        Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN");
+        if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){
+            return;
+        }
         try{
             for (DevpSlave devp : slaveProperties.getDevp()) {
                 // 閬嶅巻鎷f枡鍏ュ簱鍙�
@@ -4922,6 +4966,10 @@
      * arm浠诲姟瀹屾垚鑷姩缁勬墭
      * */
     public synchronized void  armMissionAccomplished2() {
+        Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN");
+        if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){
+            return;
+        }
         try{
             List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4));
             for (BasArm basArm : basArmList) {
@@ -5202,6 +5250,10 @@
      * arm浠诲姟涓嬪彂
      * */
     public synchronized void armTaskAssignment2() {
+        Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN");
+        if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){
+            return;
+        }
         try{
             List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4));
             for (BasArm basArm : basArmList) {
@@ -5357,7 +5409,7 @@
         // 閬嶅巻缁撴灉闆嗭紝妫�鏌ユ椂闂存埑宸�兼槸鍚﹀皬浜� 5 鍒嗛挓
         for (ApiLog apiLog : apiLogs) {
             long parseLong = Long.parseLong(apiLog.getTimestamp());
-            if (new Date().getTime() - parseLong < 5 * 1000 * 60) {
+            if (new Date().getTime() - parseLong < 30 * 1000 * 60) {
                 // 濡傛灉鎵惧埌绗﹀悎鏉′欢鐨勮褰曚笖鏃堕棿宸皬浜� 5 鍒嗛挓锛屽垯涓嶄繚瀛樻柊璁板綍锛岀洿鎺ヨ繑鍥�
                 return;
             }
@@ -5384,7 +5436,7 @@
         // 閬嶅巻缁撴灉闆嗭紝妫�鏌ユ椂闂存埑宸�兼槸鍚﹀皬浜� 5 鍒嗛挓
         for (ApiLog apiLog : apiLogs) {
             long parseLong = Long.parseLong(apiLog.getTimestamp());
-            if (new Date().getTime() - parseLong < 5 * 1000 * 60) {
+            if (new Date().getTime() - parseLong < 30 * 1000 * 60) {
                 // 濡傛灉鎵惧埌绗﹀悎鏉′欢鐨勮褰曚笖鏃堕棿宸皬浜� 5 鍒嗛挓锛屽垯涓嶄繚瀛樻柊璁板綍锛岀洿鎺ヨ繑鍥�
                 return;
             }
@@ -5536,7 +5588,7 @@
                     // 浠诲姟鐢熸垚鍖� --------------------------------------------------------------------------
 
                     BasAgvMast basAgvMast = new BasAgvMast();
-
+                    BasAgvWrkDetl basAgvWrkDetl = new BasAgvWrkDetl();
 
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
@@ -5723,6 +5775,9 @@
      * agv浠诲姟鐢熸垚  Empty
      * */
     public synchronized void agvTaskCreateR() {
+
+        Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN");
+
         // 鏍规嵁杈撻�佺嚎plc閬嶅巻
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鍑哄簱鍙�
@@ -5762,20 +5817,22 @@
                                     .le("row1", 26)
                                     .orderBy("io_time",true)
                             );
-                        }else if(inStaAgv.getStaNo() < 4000){
+                        }else if(inStaAgv.getStaNo() < 4000 && Boolean.parseBoolean(configAGVAUTOIN.getValue())){
                             locMastList = locMastService.selectList(new EntityWrapper<LocMast>()
                                     .eq("loc_sts", "R")
                                     .ge("row1", 28)
                                     .le("row1", 31)
                                     .orderBy("io_time",true));
                             floorNo = 2;
-                        }else{
+                        }else if(inStaAgv.getStaNo() < 5000){
                             locMastList = locMastService.selectList(new EntityWrapper<LocMast>()
                                     .eq("loc_sts", "R")
                                     .ge("row1", 32)
                                     .le("row1", 38)
                                     .orderBy("io_time",true));
                             floorNo = 3;
+                        }else{
+                            continue;
                         }
 
                         for (LocMast locMast : locMastList){
@@ -5943,23 +6000,6 @@
                     if ((!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo())) || basAgvMast.getSourceStaNo().equals(2033)){
                         AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                         if(basAgvMast.getFloorNo()==1) {
-//                            WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo());
-//                            AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
-//                            agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString());
-//                            agvBindCtnrAndBinParam.setCtnrTyp("1");
-//                            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV瀹瑰櫒缁戝畾瑙g粦", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
-//                            if (resultBind.getCode()==200){
-//                                //浠诲姟涓嬪彂
-//                                ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV浠诲姟涓嬪彂", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
-//                                if (result.getCode()==200){
-//                                    basAgvMast.setStatus(1);
-//                                    basAgvMastService.updateById(basAgvMast);
-//                                } else {
-//                                    agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV浠诲姟涓嬪彂澶辫触", "浠诲姟鍙凤細"+basAgvMast.getTaskNo()+"浠诲姟淇℃伅涓嬪彂澶辫触锛侊紒锛�", false);
-//                                }
-//                            } else {
-//                                agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV瀹瑰櫒缁戝畾瑙g粦", "浠诲姟鍙凤細"+basAgvMast.getTaskNo()+"浠诲姟淇℃伅涓嬪彂澶辫触锛侊紒锛�", false);
-//                            }
                             //浠诲姟涓嬪彂
                             ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV浠诲姟涓嬪彂", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                             if (result.getCode()==200){
@@ -5977,7 +6017,7 @@
                                     agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode());
                                     agvBindCtnrAndBinTwoParam.setPositionCode(basAgvMast.getSourceStaNo().toString());
                                     agvBindCtnrAndBinTwoParam.setIndBind("1");;
-                                    ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV瀹瑰櫒缁戝畾瑙g粦",
+                                    ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV瀹瑰櫒缁戝畾",
                                             AgvConstant.AGV_URL+"/"+AgvConstant.AGV_hikRpcService,AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam);
                                     if (resultBind.getCode()!=200){
                                         basAgvMast.setStatus(4);

--
Gitblit v1.9.1