From 3ba44e1a566074a38779c918da391b5c6264a381 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期一, 03 十一月 2025 18:28:58 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  258 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 162 insertions(+), 96 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 6f9f172..a7a1d9c 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -11,6 +11,7 @@
 import com.zy.asrs.domain.enums.WorkNoType;
 import com.zy.asrs.domain.param.CrnOperatorParam;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.TaskCreateParam;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.*;
@@ -81,6 +82,8 @@
     private CrnController crnController;
     @Autowired
     private BasDevpPositionService basDevpPositionService;
+    @Autowired
+    private OpenService openService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -670,6 +673,7 @@
 
             CrnSlave crnSlave = new CrnSlave(crn);
             if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄贩閬撳彿寮傚父锛�");
                 continue;
             }
 
@@ -761,19 +765,25 @@
                         if (!taskWrks.isEmpty()) {
                             continue;
                         }
-                        List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<TaskWrkLog>().eq("CRN_NO",crnProtocol.getLaneNo()).orderBy("COMPLETE_TIME",true));
+                        List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<TaskWrkLog>().eq("CRN_NO",crnProtocol.getLaneNo()).orderBy("COMPLETE_TIME",false));
                         if (!taskWrkLogs.isEmpty()) {
-                            TaskWrkLog taskWrkLog = taskWrkLogs.get(0);
-                            Date completeTime = taskWrkLog.getCompleteTime();
-                            if (completeTime==null){
-                                completeTime = taskWrkLog.getCancelTime();
+                            boolean signT = false;
+                            for (TaskWrkLog taskWrkLog : taskWrkLogs){
+                                Date completeTime = taskWrkLog.getCompleteTime();
                                 if (completeTime==null){
-                                    completeTime = taskWrkLog.getModiTime();
+                                    continue;
+                                }
+                                long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(completeTime, new Date());
+                                if (differenceInSeconds <= 60*2*1000) {
+                                    signT = true;
+                                    break;
+                                } else {
+                                    signT = false;
+                                    break;
                                 }
                             }
-                            long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(completeTime, new Date());
-                            if (differenceInSeconds <= 60*10*1000) {
-                                return;
+                            if (signT){
+                                continue;
                             }
                         }
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
@@ -782,11 +792,11 @@
                         crnCommand.setLaneNo(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);   // 婧愬簱浣嶅眰
+                        crnCommand.setTaskMode(CrnTaskModeType.SITE_MOVE); // 浠诲姟妯″紡:  绔欎綅绉昏浆4
                         int row = crnProtocol.getLaneNo() * 2;
+                        crnCommand.setSourcePosX((short) row);     // 婧愬簱浣嶆帓
+                        crnCommand.setSourcePosY((short) 1);     // 婧愬簱浣嶅垪
+                        crnCommand.setSourcePosZ((short) 1);   // 婧愬簱浣嶅眰
                         crnCommand.setDestinationPosX((short) row);     // 鐩爣搴撲綅鎺�
                         crnCommand.setDestinationPosY((short) 1);     // 鐩爣搴撲綅灞�
                         crnCommand.setDestinationPosZ((short) 1);     // 鐩爣搴撲綅鍒�
@@ -809,7 +819,7 @@
                     }
                 }
             } catch (Exception e){
-                log.error("鍫嗗灈鏈�5鍒嗛挓鏃犱换鍔″垯鍥炲埌婧愮偣澶辫触");
+                log.error("鍫嗗灈鏈�10鍒嗛挓鏃犱换鍔″垯鍥炲埌婧愮偣澶辫触");
             }
         }
     }
@@ -833,6 +843,7 @@
 
             CrnSlave crn = new CrnSlave(crnSlave);
             if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄贩閬撳彿寮傚父锛�");
                 continue;
             }
 
@@ -941,41 +952,6 @@
 
                 // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                 if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
-                    TaskWrk taskWrkNow3 = taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo());
-                    if (taskWrkNow3.getWrkSts() == 3){
-                        try{
-                            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                            CrnCommand crnCommand = new CrnCommand();
-                            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                            crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
-                            crnCommand.setTaskNo(taskWrkNow3.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
-                            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());   // 婧愬簱浣嶅眰
-                            crnCommand.setDestinationPosX(Utils.getRowShort(taskWrkNow3.getTargetPoint()));     // 鐩爣搴撲綅鍒�
-                            int bay1 = Utils.getBayShort(taskWrkNow3.getTargetPoint()) + 1;
-                            crnCommand.setDestinationPosY((short)bay1);     // 鐩爣搴撲綅灞�
-                            crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrkNow3.getTargetPoint()));     // 鐩爣搴撲綅鎺�
-//                crnCommand.setCommand((short) 1);
-                            try{
-                                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
-                                deviceErrorService.addDeviceError("CrnErr", slave.getId(), "宸烽亾鍙�"+crnCommand.getLaneNo()+";鍫嗗灈鏈哄懡浠ゅ湴鍧�琛ヤ竵閲嶆柊鍐欏叆:"+JSON.toJSONString(crnCommand.getNowTask()));
-                            } catch (Exception e2){
-                            }
-                            if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
-                                log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
-                                devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
-                                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "杩愯鍛戒护涓嬪彂澶辫触");
-
-                                throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
-                            }
-                        } catch (Exception eNow3){
-
-                        }
-                    }
-
                     devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄瓨鍦ㄥ悐杞︿换鍔�");
                     CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄瓨鍦ㄦ墽琛屼腑鍚婅溅浠诲姟");
                     continue;
@@ -1024,22 +1000,22 @@
 //                }
 
                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                CrnCommand crnCommand = new CrnCommand();
-                crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
-                crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
-                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());   // 婧愬簱浣嶅眰
-                crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鍒�
+                CrnCommand crnCommand1 = new CrnCommand();
+                crnCommand1.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand1.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
+                crnCommand1.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                crnCommand1.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                crnCommand1.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                crnCommand1.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                crnCommand1.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+                crnCommand1.setSourcePosZ(crnStn.getLev().shortValue());   // 婧愬簱浣嶅眰
+                crnCommand1.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鍒�
                 int bay1 = Utils.getBayShort(taskWrk.getTargetPoint()) + 1;
-                crnCommand.setDestinationPosY((short)bay1);     // 鐩爣搴撲綅灞�
-                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鎺�
+                crnCommand1.setDestinationPosY((short)bay1);     // 鐩爣搴撲綅灞�
+                crnCommand1.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鎺�
 //                crnCommand.setCommand((short) 1);
-                if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
-                    log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
+                if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand1))) {
+                    log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand1));
                     devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
                     CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "杩愯鍛戒护涓嬪彂澶辫触");
 
@@ -1153,39 +1129,6 @@
 
                         // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                         if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
-
-                            TaskWrk taskWrkNow3 = taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo());
-                            if (taskWrkNow3.getWrkSts() == 12){
-                                try{
-                                    CrnCommand command = new CrnCommand();
-                                    command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                                    command.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈虹紪鍙�
-                                    command.setTaskNo(taskWrkNow3.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                                    command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                                    command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
-                                    command.setSourcePosX(Utils.getRowShort(taskWrkNow3.getStartPoint()));     // 婧愬簱浣嶆帓
-                                    int bayS = Utils.getBayShort(taskWrkNow3.getStartPoint()) + 1;
-                                    command.setSourcePosY((short)bayS);     // 婧愬簱浣嶅垪
-                                    command.setSourcePosZ(Utils.getLevShort(taskWrkNow3.getStartPoint()));     // 婧愬簱浣嶅眰
-                                    command.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
-                                    command.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
-                                    command.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-//                        command.setCommand((short) 1);
-                                    try{
-                                        DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
-                                        deviceErrorService.addDeviceError("CrnErr", slave.getId(), "宸烽亾鍙�"+command.getLaneNo()+";鍫嗗灈鏈哄懡浠ゅ湴鍧�琛ヤ竵閲嶆柊鍐欏叆:"+JSON.toJSONString(command.getNowTask()));
-                                    } catch (Exception e2){
-                                    }
-                                    if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command))) {
-                                        log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屽贩閬�={}锛屼换鍔℃暟鎹�={}", slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command));
-                                        devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
-                                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "杩愯鍛戒护涓嬪彂澶辫触");
-                                        throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
-                                    }
-                                } catch (Exception eNow3){
-
-                                }
-                            }
                             devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄瓨鍦ㄥ悐杞︿换鍔�");
                             CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄瓨鍦ㄦ墽琛屼腑鍚婅溅浠诲姟");
                             break;
@@ -1312,6 +1255,7 @@
 
                 // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                 if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
+                    CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄瓨鍦ㄦ墽琛屼腑鍚婅溅浠诲姟");
                     continue;
                 }
 
@@ -1408,6 +1352,7 @@
 
                 CrnSlave crn = new CrnSlave(crnSlave);
                 if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                    CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄贩閬撳彿寮傚父锛�");
                     continue;
                 }
 
@@ -2738,4 +2683,125 @@
     }
 
 
+
+    /**
+     * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
+     */
+    public boolean crnStnDEMOStop2() {
+        int signHpMk = 0;
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                continue;
+            }
+            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+            if (basCrnp == null) {
+                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                continue;
+            }
+
+            if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){
+                signHpMk++;
+            }
+        }
+        if (signHpMk == slaveProperties.getCrn().size()){
+            return true;
+        }
+        return false;
+    }
+
+
+
+    /**
+     * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
+     */
+    public boolean crnStnDEMOStop3() {
+        int selectCount = taskWrkService.selectCount(new EntityWrapper<TaskWrk>().eq("io_type",4));
+        if (selectCount>0) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 婕旂ず妯″紡鍚姩
+     */
+    public boolean crnStnDEMOOpen0() {
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                continue;
+            }
+            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+            if (basCrnp == null) {
+                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                continue;
+            }
+
+            if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){
+                continue;
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 婕旂ず妯″紡鍚姩
+     */
+    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;
+            }
+            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 (String locNo : crnProtocol.getLocMastDemoList()){
+                LocMast locMast = locMastService.selectByLocNo(locNo);
+                TaskCreateParam taskCreateParam = new TaskCreateParam(crnSlave,locMast);
+                openService.taskCreate(taskCreateParam);
+            }
+
+            return true;
+        }
+        return false;
+    }
+
+
 }

--
Gitblit v1.9.1