From d7ec100166068db8197d218c57d2a6c86a5289a4 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期二, 04 十一月 2025 14:10:42 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  268 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 219 insertions(+), 49 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 d358482..e8ee51c 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2756,51 +2756,58 @@
      * 婕旂ず妯″紡鍚姩
      */
     public boolean crnStnDEMOOpen1() {
-        int selectCount = taskWrkService.selectCount(new EntityWrapper<TaskWrk>());
-        if (selectCount>0) {
-            return false;
-        }
-        for (CrnSlave crn : slaveProperties.getCrn()) {
-
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) {
-                continue;
+        try{
+            int selectCount = taskWrkService.selectCount(new EntityWrapper<TaskWrk>());
+            if (selectCount>0) {
+                return false;
             }
-            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
-            if (basCrnp == null) {
-                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
-                continue;
-            }
-
-            if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){
-                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "瀛樺湪鍏跺畠鍫嗗灈鏈哄紑鍚紨绀烘ā寮忥紒");
-                continue;
-            }
-
-            CrnSlave crnSlave = new CrnSlave(crn);
-            if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
-                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄贩閬撳彿寮傚父锛�");
-                continue;
-            }
-
-            if (!crn.getId().equals(crnProtocol.getLaneNo())) {
-                for (CrnSlave crnOther : slaveProperties.getCrn()) {
-                    if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
-                        crnSlave.updateCrnInStn(crnOther);
+            for (CrnSlave crn : slaveProperties.getCrn()) {
+                try{
+                    // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                    if (crnProtocol == null) {
+                        continue;
                     }
-                }
-            }
-            for (String locNo : crnProtocol.getLocMastDemoList()){
-                LocMast locMast = locMastService.selectByLocNo(locNo);
-                TaskCreateParam taskCreateParam = new TaskCreateParam(crnSlave,locMast);
-                taskCreateParam.setStartPointSta(crnProtocol.getStaIntDemo());
-                taskCreateParam.setTargetPointSta(crnProtocol.getStaOutDemo());
-                openService.taskCreate(taskCreateParam);
-            }
+                    BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+                    if (basCrnp == null) {
+                        log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                        continue;
+                    }
 
-            return true;
+                    if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){
+                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "瀛樺湪鍏跺畠鍫嗗灈鏈哄紑鍚紨绀烘ā寮忥紒");
+                        continue;
+                    }
+//
+                    CrnSlave crnSlave = new CrnSlave(crn);
+                    if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄贩閬撳彿寮傚父锛�");
+                        continue;
+                    }
+
+                    if (!crn.getId().equals(crnProtocol.getLaneNo())) {
+                        for (CrnSlave crnOther : slaveProperties.getCrn()) {
+                            if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
+                                crnSlave.updateCrnInStn(crnOther);
+                            }
+                        }
+                    }
+                    for (String locNo : crnProtocol.getLocMastDemoList()){
+                        LocMast locMast = locMastService.selectByLocNo(locNo);
+                        TaskCreateParam taskCreateParam = new TaskCreateParam(crnSlave,locMast);
+                        taskCreateParam.setStartPointSta(crnProtocol.getStaIntDemo());
+                        taskCreateParam.setTargetPointSta(crnProtocol.getStaOutDemo());
+                        openService.taskCreate(taskCreateParam);
+                    }
+                } catch (Exception e) {
+                    CrnErrCache.updateCrnErr(crn.getId(), "婕旂ず妯″紡鐢熸垚浠诲姟寮傚父锛�");
+                    continue;
+                }
+
+                return true;
+            }
+        } catch (Exception e) {
         }
         return false;
     }
@@ -2853,14 +2860,18 @@
                         this.crnStnToLocDemo(crn, crnProtocol); //  鍏ュ簱
                         crnProtocol.setLastIo("O");
                     } else if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStnDemo(crn, crnProtocol); //  鍑哄簱
+                        if (!Cools.isEmpty(basCrnp.getHpMk()) && basCrnp.getHpMk().equals("Y")) {
+                            this.locToCrnStnDemo(crn, crnProtocol); //  鍑哄簱
+                        }
                         crnProtocol.setLastIo("I");
                     }
                 }
                 // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
                 else if (crnProtocol.getLastIo().equals("O")) {
                     if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStnDemo(crn, crnProtocol); //  鍑哄簱
+                        if (!Cools.isEmpty(basCrnp.getHpMk()) && basCrnp.getHpMk().equals("Y")) {
+                            this.locToCrnStnDemo(crn, crnProtocol); //  鍑哄簱
+                        }
                         crnProtocol.setLastIo("I");
                     } else if (basCrnp.getInEnable().equals("Y")) {
                         this.crnStnToLocDemo(crn, crnProtocol); //  鍏ュ簱
@@ -2996,7 +3007,7 @@
      * 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
      */
     public void locToCrnStnDemo(CrnSlave slave, CrnProtocol crnProtocol) {
-        List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(crnProtocol.getLaneNo(), null);
+        List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOutDemo(crnProtocol.getLaneNo(), null);
         if (taskWrksInitial.size() == 0) {
             return;
         }
@@ -3173,7 +3184,6 @@
                                 continue;
                             }
                             log.info("涓嬪彂杈撻�佺嚎浠诲姟锛歵askWrk:" + JSON.toJSONString(taskWrk));
-//                            R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false);
                             staProtocol.setWorkNo(taskWrk.getWrkNo());
                             staProtocol.setStaNo(BarcodeUtils.getStaNo(staProtocol.getSiteId()));
                             boolean offer = false;
@@ -3183,18 +3193,17 @@
                                 log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯�:" + e);
                                 log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯�:offer:" + offer);
                             }
-//                            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r));
                             if (offer) {
                                 log.info("涓嬪彂杈撻�佺嚎浠诲姟鎴愬姛锛歵askWrk:" + JSON.toJSONString(taskWrk));
                                 Date now = new Date();
-//                                taskWrk.setStatus(TaskStatusType.OVER3.id);
+                                taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);
+
                                 taskWrk.setWrkSts(2);
                                 taskWrk.setModiTime(now);
                                 taskWrk.setCompleteTime(now);
                                 taskWrkService.updateById(taskWrk);
                             } else {
                                 log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛歵askWrk:" + JSON.toJSONString(taskWrk));
-//                                log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯镐俊鎭�:"+JSON.toJSONString(r));
                             }
                         }
                     } catch (Exception e) {
@@ -3206,4 +3215,165 @@
         }
     }
 
+
+
+    public synchronized void taskStartDemo() {
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            try {
+                if (rgvDetection(rgvSlave)) {
+                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
+                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true));
+                    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<>();
+                    List<Integer> staList = new ArrayList<>();
+                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
+                        TaskWrk taskWrk = deviceDetection(inSta);
+                        if (taskWrk != null) {
+                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
+                            taskWrkList.add(taskWrk);
+                            staList.add(inSta.getStaNo());
+                        }
+                    }
+
+                    if (taskWrkList.isEmpty() || staList.isEmpty()) continue;
+
+                    boolean sign = false;
+
+                    if (!sign){
+                        //鍙敤鍖哄煙灏辫繎鍙栬揣
+                        //灏辫繎鎺掑簭
+                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+                        List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
+                        //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+                        for (Integer staNoNow : rangeList) {
+                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+                                if (rgvStn.getStaNo().equals(staNoNow)) {
+                                    TaskWrk taskWrk = deviceDetection(rgvStn);
+                                    if (taskWrk != null) {
+                                        Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+                                        for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
+                                            if (rgvStnOut.getStaNo().equals(outStaNo)) {
+                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
+                                                break;
+                                            }
+                                        }
+                                    }
+                                    break;
+                                }
+                            }
+                            if (sign) {
+                                break;
+                            }
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚澶辫触");
+                } catch (Exception e2){
+                }
+            }
+        }
+    }
+
+    /**
+     * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
+     */
+    public void storeFinishedDemo() throws InterruptedException {
+        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
+            try{
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    continue;
+                }
+
+                BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId());
+                if (basCrnp == null) {
+                    log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crnSlave.getId());
+                    continue;
+                }
+
+
+                CrnSlave crn = new CrnSlave(crnSlave);
+                if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                    CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄贩閬撳彿寮傚父锛�");
+                    continue;
+                }
+
+                if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
+                    for (CrnSlave crnOther : slaveProperties.getCrn()) {
+                        if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
+                            crn.updateCrnInStn(crnOther);
+                        }
+                    }
+                }
+
+                //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+                    //鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                    TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorkingDemo(crnProtocol.getLaneNo(), crnProtocol.getTaskNo().intValue());
+                    if (Cools.isEmpty(taskWrk) && crnProtocol.getTaskNo() != 999) {
+                        log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽贩閬撳彿={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
+                        continue;
+                    }
+
+                    Date now = new Date();
+
+                    crnThread.setResetFlag(true);
+
+                    if (!Cools.isEmpty(taskWrk)) {
+                        if (taskWrk.getIoType() == 4 && taskWrk.getWrkSts() == 3) {
+                            taskWrk.setWrkSts(11);//鍏ュ簱瀹屾垚
+                            taskWrk.setStatus(TaskStatusType.RECEIVE.id);//鎺ユ敹
+                            if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")) {
+                                taskWrk.setWrkSts(4);
+                                taskWrk.setStatus(TaskStatusType.OVER.id);
+                            }
+                            //鏇存柊搴撲綅鐘舵��
+                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
+                            locMast.setLocSts("R");//F.鍦ㄥ簱
+                            if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")) {
+                                locMast.setLocSts("F");//F.鍦ㄥ簱
+                            }
+                            locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
+                            locMast.setModiTime(now);
+                            locMast.setModiUser(9999L);
+                            locMastService.updateById(locMast);
+                        } else if (taskWrk.getIoType() == 4 && taskWrk.getWrkSts() == 12) {
+                            taskWrk.setWrkSts(13);//鍑哄簱瀹屾垚
+                            taskWrk.setStatus(TaskStatusType.RECEIVE.id);//鎺ユ敹
+                            //鏇存柊搴撲綅鐘舵��
+                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
+                            locMast.setLocSts("S");//O.绌哄簱浣�
+                            locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
+                            locMast.setModiTime(now);
+                            locMast.setModiUser(9999L);
+                            locMastService.updateById(locMast);
+                        }
+                        taskWrk.setModiTime(now);
+                        taskWrk.setCompleteTime(now);
+                        taskWrkService.updateById(taskWrk);
+
+                    }
+
+                }
+            } catch (Exception e){
+                log.error("鍫嗗灈鏈烘墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔澶辫触 ===>> [id:{}] [error:{}]", crnSlave.getId(), e.getMessage());
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.1