From 44be6da8fc2740a7e81d5b878a894e318b6a5f8c Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期日, 27 四月 2025 15:51:37 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/core/model/CrnSlave.java               |    5 +
 src/main/java/com/zy/core/thread/SiemensCrnThread.java      |    5 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   72 ++++++++++++++----
 src/main/resources/application-prod.yml                     |   84 ++++++++++++++++++++
 src/main/java/com/zy/core/model/command/CrnCommand.java     |    1 
 src/main/java/com/zy/core/model/protocol/CrnProtocol.java   |    1 
 src/main/resources/application.yml                          |    2 
 src/main/java/com/zy/asrs/entity/StaDesc.java               |   14 +++
 8 files changed, 164 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/StaDesc.java b/src/main/java/com/zy/asrs/entity/StaDesc.java
index c6b4a61..942b614 100644
--- a/src/main/java/com/zy/asrs/entity/StaDesc.java
+++ b/src/main/java/com/zy/asrs/entity/StaDesc.java
@@ -69,6 +69,14 @@
     private Integer crnNo;
 
     /**
+     * 鍫嗗灈鏈哄彿
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableId(value = "LANE_NO", type = IdType.INPUT)
+    @TableField("LANE_NO")
+    private Integer laneNo;
+
+    /**
      * 鍫嗗灈鏈虹珯鐐�
      */
     @ApiModelProperty(value= "鍫嗗灈鏈虹珯鐐�")
@@ -301,5 +309,11 @@
         return basWrkIotype.getIoDesc();
     }
 
+    public Integer getLaneNo() {
+        return laneNo;
+    }
 
+    public void setLaneNo(Integer laneNo) {
+        this.laneNo = laneNo;
+    }
 }
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 be3b65a..8fda140 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -384,9 +384,28 @@
      */
     public void crnStnToOutStn() {
         for (CrnSlave crnSlave : slaveProperties.getCrn()) {
+
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            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;
+            }
+            if (!crnSlave.getId().equals(crnProtocol.getLaneNo())){
+                for (CrnSlave crnOther : slaveProperties.getCrn()) {
+                    if (crnOther.getId().equals(crnProtocol.getLaneNo())){
+                        crnSlave.updateCrnInStn(crnOther);
+                    }
+                }
+            }
             // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
             for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
-                List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo()));
+
+                List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", crnSlave.getId()).eq("LANE_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
+//                List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("").eq("crn_stn", crnStn.getStaNo()));
                 for (StaDesc staDesc : staDescs){
                     try{
                         // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
@@ -399,7 +418,7 @@
                         }
                         if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                             // 鏌ヨ宸ヤ綔妗�
-                            TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staDesc.getStnNo().toString());
+                            TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnProtocol.getLaneNo(), staDesc.getStnNo().toString());
                             if (taskWrk == null) {
                                 continue;
                             }
@@ -452,6 +471,14 @@
                 continue;
             }
 
+            if (!crn.getId().equals(crnProtocol.getLaneNo())){
+                for (CrnSlave crnOther : slaveProperties.getCrn()) {
+                    if (crnOther.getId().equals(crnProtocol.getLaneNo())){
+                        crn.updateCrnInStn(crnOther);
+                    }
+                }
+            }
+
             // 搴撲綅绉昏浆
             this.locToLoc(crn, crnProtocol);
 
@@ -488,7 +515,7 @@
      */
     public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) throws IOException {
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
-            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo()));
+            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", slave.getId()).eq("LANE_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
             for (StaDesc staDesc : staDescs) {
                 boolean flag = false;
                 // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
@@ -514,7 +541,7 @@
                 }
 
                 // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
-                TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
+                TaskWrk taskWrk = taskWrkMapper.selectPakIn(crnProtocol.getLaneNo(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
                 if(null == taskWrk) {
                     continue;
                 }
@@ -525,7 +552,7 @@
                 }
 
                 // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
+                if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
                     continue;
                 }
 
@@ -573,7 +600,8 @@
 
                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                 CrnCommand crnCommand = new CrnCommand();
-                crnCommand.setCrnNo(staDesc.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setCrnNo(staDesc.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
                 crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                 crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                 crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
@@ -634,15 +662,17 @@
      * 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
      */
     public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
-        List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(slave.getId(), null);
+        List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(crnProtocol.getLaneNo(), null);
         if (taskWrksInitial.size()==0){
             return;
         }
         for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
-            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo()));
+            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", slave.getId()).eq("LANE_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
+
+//            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnProtocol.getLaneNo()).eq("crn_stn", crnStn.getStaNo()));
             for (StaDesc staDesc : staDescs){
                 // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
-                List<TaskWrk> taskWrks = taskWrkMapper.selectPakOut(slave.getId(),staDesc.getStnNo().toString());
+                List<TaskWrk> taskWrks = taskWrkMapper.selectPakOut(crnProtocol.getLaneNo(),staDesc.getStnNo().toString());
                 for (TaskWrk taskWrk : taskWrks){
                     if (taskWrk == null) {
                         continue;
@@ -679,12 +709,13 @@
                         }
 
                         // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                        if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
+                        if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
                             break;
                         }
 
                         CrnCommand command = new CrnCommand();
-                        command.setCrnNo(taskWrk.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                        command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                        command.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈虹紪鍙�
                         command.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                         command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                         command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
@@ -696,7 +727,7 @@
                         command.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
                         command.setCommand((short)1);
                         if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, command),false)) {
-                            log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(command));
+                            log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屽贩閬�={}锛屼换鍔℃暟鎹�={}",slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command));
                             throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
                         }else{
                             try{
@@ -755,7 +786,7 @@
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑绉诲簱宸ヤ綔妗�
             List<TaskWrk> taskWrks = taskWrkMapper.selectList(
                     new EntityWrapper<TaskWrk>()
-                    .eq("CRN_NO",slave.getId())
+                    .eq("CRN_NO",crnProtocol.getLaneNo())
                     .eq("WRK_STS",11)
                     .eq("IO_TYPE",3)
                     .orderBy("IO_PRI",false));
@@ -775,7 +806,7 @@
                 }
 
                 // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
+                if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
                     continue;
                 }
 
@@ -796,6 +827,7 @@
                 // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                 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); // 浠诲姟妯″紡:  搴撲綅绉昏浆
@@ -863,12 +895,20 @@
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
             if (crnProtocol == null) { continue; }
 
+            if (!crn.getId().equals(crnProtocol.getLaneNo())){
+                for (CrnSlave crnOther : slaveProperties.getCrn()) {
+                    if (crnOther.getId().equals(crnProtocol.getLaneNo())){
+                        crn.updateCrnInStn(crnOther);
+                    }
+                }
+            }
+
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (!Cools.isEmpty(crnProtocol.getTaskFinish()) && crnProtocol.getTaskFinish() == 0 && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 //鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crn.getId(),crnProtocol.getTaskNo().intValue());
+                TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crnProtocol.getLaneNo(),crnProtocol.getTaskNo().intValue());
                 if (Cools.isEmpty(taskWrk)&&crnProtocol.getTaskNo() !=999) {
-                    log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                    log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽贩閬撳彿={}锛屽伐浣滃彿={}", crn.getId(),crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
                     continue;
                 }
                 Thread.sleep(300);
diff --git a/src/main/java/com/zy/core/model/CrnSlave.java b/src/main/java/com/zy/core/model/CrnSlave.java
index f84dcdc..d7d8d68 100644
--- a/src/main/java/com/zy/core/model/CrnSlave.java
+++ b/src/main/java/com/zy/core/model/CrnSlave.java
@@ -51,4 +51,9 @@
 
     }
 
+    public void updateCrnInStn(CrnSlave crnSlave){
+        crnInStn = crnSlave.getCrnInStn();
+        crnOutStn = crnSlave.getCrnOutStn();
+    }
+
 }
diff --git a/src/main/java/com/zy/core/model/command/CrnCommand.java b/src/main/java/com/zy/core/model/command/CrnCommand.java
index cea2f4d..9454973 100644
--- a/src/main/java/com/zy/core/model/command/CrnCommand.java
+++ b/src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -16,6 +16,7 @@
 
     // 鍫嗗灈鏈哄彿
     private Integer crnNo = 0;
+    private Integer laneNo = 0;
 
     // 浠诲姟瀹屾垚纭浣�
     private Short ackFinish = 0;
diff --git a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
index a9b3212..36cad3c 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -14,6 +14,7 @@
 public class CrnProtocol {
 
     private Integer crnNo;
+    private Integer laneNo;
 
     /**
      * 1 = 鎵嬪姩妯″紡
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 40592be..cd97abe 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -159,8 +159,11 @@
             if (result.IsSuccess) {
                 if (null == crnProtocol) {
                     crnProtocol = new CrnProtocol();
-                    crnProtocol.setCrnNo(slave.getId());
                 }
+                crnProtocol.setCrnNo(slave.getId());
+
+                crnProtocol.setLaneNo(siemensNet.getByteTransform().TransInt32(result.Content, 0));//宸烽亾鍙�
+
                 crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
                 crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2));
                 crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4));
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 29de2ec..b8a26bd 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -1,7 +1,7 @@
 wcs-slave:
-  doubleDeep: true #鍙屾繁
+  doubleDeep: false #鍙屾繁
   doubleLocs: 3,6,7,10,13 #鍙屾繁搴撲綅鎺掑彿 3,6,7,10,13
-  groupCount: 4 #涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
+  groupCount: 2 #涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
   crn[0]: #鍫嗗灈鏈�1
     ip: 192.168.4.250
     id: 1
@@ -22,6 +22,86 @@
       bay: 1
       lev: 1
       devpPlcId: ${wcs-slave.devp[0].id}
+  crn[1]: #鍫嗗灈鏈�1
+    ip: 192.168.4.250
+    id: 2
+    slot: 0
+    demo: false
+    rack: 0
+    offset: 2    #鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
+    port: 102
+    crnOutStn[0]:    #鍫嗗灈鏈哄嚭搴撶珯鐐�
+      staNo: 101
+      row: 2
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
+    crnInStn[0]:    #鍫嗗灈鏈哄叆搴撶珯鐐�1
+      staNo: 100
+      row: 1
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
+  crn[2]: #鍫嗗灈鏈�1
+    ip: 192.168.4.250
+    id: 3
+    slot: 0
+    demo: false
+    rack: 0
+    offset: 2    #鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
+    port: 102
+    crnOutStn[0]:    #鍫嗗灈鏈哄嚭搴撶珯鐐�
+      staNo: 101
+      row: 2
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
+    crnInStn[0]:    #鍫嗗灈鏈哄叆搴撶珯鐐�1
+      staNo: 100
+      row: 1
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
+  crn[3]: #鍫嗗灈鏈�1
+    ip: 192.168.4.250
+    id: 4
+    slot: 0
+    demo: false
+    rack: 0
+    offset: 2    #鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
+    port: 102
+    crnOutStn[0]:    #鍫嗗灈鏈哄嚭搴撶珯鐐�
+      staNo: 101
+      row: 2
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
+    crnInStn[0]:    #鍫嗗灈鏈哄叆搴撶珯鐐�1
+      staNo: 100
+      row: 1
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
+  crn[4]: #鍫嗗灈鏈�1
+    ip: 192.168.4.250
+    id: 5
+    slot: 0
+    demo: false
+    rack: 0
+    offset: 2    #鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
+    port: 102
+    crnOutStn[0]:    #鍫嗗灈鏈哄嚭搴撶珯鐐�
+      staNo: 101
+      row: 2
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
+    crnInStn[0]:    #鍫嗗灈鏈哄叆搴撶珯鐐�1
+      staNo: 100
+      row: 1
+      bay: 1
+      lev: 1
+      devpPlcId: ${wcs-slave.devp[0].id}
   barcode[0]: #鏉$爜鎵弿浠�1
     port: 51236
     ip: 10.10.10.52
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index afc15d7..cd922e4 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 8080
+  port: 8083
   servlet:
     context-path: /@pom.build.finalName@
 

--
Gitblit v1.9.1