From e9a5f5c065e7232e9d5ca1f2a4948d2f8e6e0c03 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期日, 27 四月 2025 09:29:25 +0800
Subject: [PATCH] 米多泉州wcs开发完成

---
 src/main/java/com/zy/common/model/CombParam.java             |   54 ++
 src/main/resources/mapper/WrkMastMapper.xml                  |    3 
 src/main/java/com/zy/service/impl/MainServiceImpl.java       |  529 +++++++++++++++++++----
 src/main/java/com/zy/common/model/SearchLocParam.java        |   20 
 src/main/java/com/zy/common/model/LocTypeDto.java            |    9 
 /dev/null                                                    |   95 ----
 src/main/java/com/zy/core/model/protocol/StaProtocol.java    |   28 
 src/main/java/com/zy/core/thread/SiemensCrnThread.java       |   18 
 src/main/java/com/zy/common/model/CanningLineInLocParam.java |   23 +
 src/main/java/com/zy/core/MainProcess.java                   |   15 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java      |  322 -------------
 src/main/java/com/zy/entity/WrkMast.java                     |    9 
 src/main/resources/application.yml                           |  146 +++---
 13 files changed, 664 insertions(+), 607 deletions(-)

diff --git a/src/main/java/com/zy/common/model/CanningLineInLocParam.java b/src/main/java/com/zy/common/model/CanningLineInLocParam.java
new file mode 100644
index 0000000..055eb19
--- /dev/null
+++ b/src/main/java/com/zy/common/model/CanningLineInLocParam.java
@@ -0,0 +1,23 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+/**
+ * @author pang.jiabao
+ * @description 缃愯瀹屾垚锛岀敵璇峰叆鎴愬搧搴�
+ * @createDate 2025/4/24 10:13
+ */
+@Data
+public class CanningLineInLocParam {
+
+    /**
+     * 浠诲姟鍙�
+     */
+    private Integer wrkNo;
+
+    /**
+     * 婧愮珯鐐�
+     */
+    private Integer sourceStaNo;
+
+}
diff --git a/src/main/java/com/zy/common/model/CombParam.java b/src/main/java/com/zy/common/model/CombParam.java
new file mode 100644
index 0000000..fb203ad
--- /dev/null
+++ b/src/main/java/com/zy/common/model/CombParam.java
@@ -0,0 +1,54 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/6/28
+ */
+@Data
+public class CombParam {
+
+    // 鍗曟嵁缂栧彿
+    private String orderNo;
+
+    // 鎵樼洏鏉$爜
+    private String barcode;
+
+    // 搴撲綅缂栧彿
+    private String locNo;
+
+    private List<CombMat> combMats;
+
+    @Data
+    public static class CombMat {
+
+        private String orderNo;
+
+        // 鐗╂枡缂栧彿
+        private String matnr = "";
+
+        // 搴忓垪鐮�
+        private String batch = "";
+        private String brand = "";
+        private String standby1 = "";
+        private String standby2 = "";
+        private String standby3 = "";
+
+        private String boxType1 = "1";
+        private String boxType2 = "1";
+        private String boxType3 = "1";
+
+        // 鐗╂枡鏁伴噺
+        private Double anfme;
+
+        // 鍟嗗搧鍚嶇О
+        private String maktx;
+
+        // 瑙勬牸
+        private String specs;
+
+    }
+
+}
diff --git a/src/main/java/com/zy/common/model/LocTypeDto.java b/src/main/java/com/zy/common/model/LocTypeDto.java
index 38fb7d2..84da5f1 100644
--- a/src/main/java/com/zy/common/model/LocTypeDto.java
+++ b/src/main/java/com/zy/common/model/LocTypeDto.java
@@ -1,6 +1,5 @@
 package com.zy.common.model;
 
-import com.core.exception.CoolException;
 import com.zy.core.model.protocol.StaProtocol;
 import lombok.Data;
 
@@ -34,11 +33,11 @@
 //        if (staProtocol.isHigh() == staProtocol.isLow()) {
 //            throw new CoolException("plc楂樹綆妫�娴嬪紓甯�");
 //        }
-        if (staProtocol.getSiteId() == 106 || staProtocol.getSiteId() == 159){
-            this.locType1 = 2; // 楂樺簱浣�
-        }else {
+//        if (staProtocol.getSiteId() == 106 || staProtocol.getSiteId() == 159){
+//            this.locType1 = 2; // 楂樺簱浣�
+//        }else {
             this.locType1 = 1; // 浣庡簱浣�
-        }
+//        }
     }
 
     /**
diff --git a/src/main/java/com/zy/common/model/SearchLocParam.java b/src/main/java/com/zy/common/model/SearchLocParam.java
index 159024e..dc7c9d6 100644
--- a/src/main/java/com/zy/common/model/SearchLocParam.java
+++ b/src/main/java/com/zy/common/model/SearchLocParam.java
@@ -3,6 +3,9 @@
 import com.alibaba.fastjson.JSON;
 import lombok.Data;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by vincent on 2020/10/30
  */
@@ -18,6 +21,23 @@
     // 搴撲綅瑙勬牸锛� 0:鏈煡, 1:浣庡簱浣�, 2:涓簱浣�, 3:楂樺簱浣� 锛�
     private Short locType1;
 
+    /**
+     * 搴撳尯绫诲瀷 1.鎴愬搧搴擄紝2.绌烘《搴�
+     */
+    private int locArea;
+
+    // 鍏ュ簱妗剁紪鍙�
+    private String bucketType;
+
+    // 鍏ュ簱妗舵暟閲�
+    private int bucketCount;
+
+    // 灏炬墭鏍囪瘑
+    private boolean tailSupportFlag;
+
+    // 缃愯绾胯妗� 缃愯绾垮彿-妗剁被鍨�
+    private Map<Integer,String> wantBucketFlag =  new HashMap<>();
+
     public static void main(String[] args) {
         SearchLocParam searchLocParam = new SearchLocParam();
         searchLocParam.setIoType(1);
diff --git a/src/main/java/com/zy/controller/OpenController.java b/src/main/java/com/zy/controller/OpenController.java
deleted file mode 100644
index 6106853..0000000
--- a/src/main/java/com/zy/controller/OpenController.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.zy.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.core.common.Cools;
-import com.core.common.R;
-import com.core.exception.CoolException;
-import com.zy.common.model.AgvTaskCompleteDto;
-import com.zy.common.web.BaseController;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.model.Task;
-import com.zy.core.model.protocol.StaProtocol;
-import com.zy.core.thread.SiemensDevpThread;
-import com.zy.entity.BasDevp;
-import com.zy.entity.WrkMast;
-import com.zy.service.BasDevpService;
-import com.zy.service.WrkMastService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-
-/**
- * Created by vincent on 2022/4/8
- */
-@Slf4j
-@RestController
-@RequestMapping("open/asrs")
-public class OpenController extends BaseController {
-
-    private static final boolean auth = true;
-    public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
-        add("ea1f0459efc02a79f046f982767939ae");
-    }};
-    @Autowired
-    private BasDevpService basDevpService;
-    @Autowired
-    private WrkMastService wrkMastService;
-    /**
-     * agv鍙栨斁璐у畬鎴愶紝閫氱煡wcs
-     */
-    @PostMapping("/agv/agvTaskComplete")
-    public synchronized R agvTaskComplete(@RequestHeader(required = false) String appkey,
-                                     @RequestBody AgvTaskCompleteDto param,
-                                     HttpServletRequest request) {
-        auth(appkey, param, request);
-            // 缁�305鍐欏叧闂�
-            BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305));
-            if (basDevp.getWrkNo() != 0) {
-                WrkMast wrkMast = wrkMastService.selectById(basDevp.getWrkNo());
-                if(wrkMast.getWhsType() != null && wrkMast.getWhsType() == 3) {
-                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-                    StaProtocol staProtocol305 = devpThread.getStation().get(305);
-                    if (!staProtocol305.getIfCloseDoor()) { // 娌¤姹傚叧闂�
-                        // 璇锋眰鍏抽棴
-                        if(!MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 0))){
-                            log.error("璇锋眰鍏抽棬澶辫触");
-                            R.parse("璇锋眰鍏抽棬澶辫触");
-                        }
-                        staProtocol305.setOpenAskDoor(false);
-                        wrkMast.setWhsType(4);
-                        wrkMastService.updateById(wrkMast);
-                    } else {
-                        return R.ok("宸茬粡璇锋眰杩囧叧闂細" + staProtocol305.getIfCloseDoor());
-                    }
-                } else {
-                    return R.parse("璇锋眰鍏抽棬寮傚父,褰撳墠鐘舵�佷负锛�" + wrkMast.getWhsType());
-                }
-            } else {
-                return R.parse("鏃犱换鍔�");
-            }
-        return R.ok("璇锋眰鍏抽棬鎴愬姛");
-    }
-
-
-    private void auth(String appkey, Object obj, HttpServletRequest request) {
-        log.info("{}鎺ュ彛琚闂紱appkey:{}锛涜姹傛暟鎹細{}", request.getRequestURI(), appkey, JSON.toJSONString(obj));
-        request.setAttribute("cache", obj);
-        if (!auth) {
-            return;
-        }
-        if (Cools.isEmpty(appkey)) {
-            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
-        }
-        if (!APP_KEY_LIST.contains(appkey)) {
-            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
-        }
-    }
-
-
-}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index c58dabc..bd4cedf 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -41,12 +41,22 @@
                         continue;
                     }
 
+                    // 鎵樼洏鍒拌揪rgv鎺ラ┏绔欑偣锛屾洿鏀瑰伐浣滄。鐘舵�佷负9.鍛煎彨RGV锛岀幆绌跨▼搴忚皟搴gv
+                    mainService.callRgv();
+
                     // 鍏ュ簱  ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。
                     mainService.generateStoreWrkFile(1); // 缁勬墭
+
                     Thread.sleep(500);
 
-                    // 鐢熸垚 绌哄瓙/姣嶆墭鐩樹换鍔�
+                    // 鐢熸垚 绌哄瓙/姣嶆墭鐩樺嚭搴撲换鍔�
                     mainService.generateEmptyPalletStoreWrk();
+
+                    // 鍏ュ簱 ===>> 绌哄瓙鎵樼洏鍏ュ簱
+                    mainService.storeEmptyPlt();
+
+                    // 鍏ュ簱 ===>> 姣嶇┖鎵樼洏鍙犳弧鍏ュ簱
+                    mainService.autoEmptyIn();
 
                     // 鍑哄簱  ===>>  鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯
                     mainService.crnStnToOutStn(4);
@@ -57,6 +67,9 @@
                     // 鍏ュ簱  ===>> 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
                     mainService.storeFinished(6);
 
+                    // 绌烘《缃愯瀹屾垚鍒拌揪缃愯绾縭gv鍙� 瀹屾垚鐩翠緵缃愯绾夸换鍔″拰绌烘《鍑哄簱浠诲姟锛屽垱寤烘垚鍝佹《鍏ュ簱浠诲姟
+                    mainService.canningLineTaskFinish();
+
                     // 鍫嗗灈鏈哄紓甯镐俊鎭褰�
                     mainService.recCrnErr(7);
 
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index c844cae..8abdeee 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -58,6 +58,26 @@
     //lfd鍏ュ簱鍗拌  褰搒tamp>=2鏃舵墠鍏ュ簱
     private Integer stamp = 0;
 
+    /**
+     * 鍏ュ簱妗剁紪鍙�/鐗╂枡鍙�
+     */
+    private String bucketType;
+
+    /**
+     * 鍏ュ簱妗舵暟閲忥紝鎵樼洏涓婃湁鍑犱釜妗�
+     */
+    private int bucketCount;
+
+    /**
+     * 灏炬墭鏍囪瘑 0涓嶆槸灏炬墭锛�1鏄熬鎵�
+     */
+    private boolean tailSupportFlag;
+
+    /**
+     * 娓呴櫎瑕佹《淇″彿 0.涓嶇敤娓呴櫎锛�123娓呴櫎鐩稿簲瑕佹《淇″彿
+     */
+    private int clearBucketSignal;
+
     // 澶栧舰妫�娴� ------------------------------------------------------------------------
 
     // 鍓嶈秴闄�
@@ -97,14 +117,6 @@
     private Boolean contactErr = false; //鐢垫満鎺ヨЕ鍣ㄦ晠闅�
 
     private Boolean upcontactErr = false; //椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�
-
-    private Boolean ifOpenDoor = false; // 鏄惁鎵撳紑
-
-    private Boolean ifCloseDoor = false; // 鏄惁鍏抽棴
-
-    private Boolean openAskDoor = false; // 璇锋眰寮�闂�
-
-    private Boolean closeAskDoor = false; // 璇锋眰鍏抽棬
 
     public BasDevp toSqlModel(){
         BasDevp basDevp = new BasDevp();
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 7cd498d..9f6e7cb 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -278,16 +278,10 @@
         array[7] = command.getDestinationPosY(); // 鐩爣浣嶇疆鍒楀彿
         array[8] = command.getDestinationPosZ(); // 鐩爣浣嶇疆灞傚彿
         array[9] = command.getCommand();
-//        array[10] = 0;   //澶囩敤1
-
-//        boolean[] array2 = new boolean[1];
-//        array2[0] = command.isTraySize();
         OperateResult result = siemensNet.Write("DB100.0", array);
-//        OperateResult result2 = siemensNet.Write("DB100.22", array2);
         News.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), array);
 
-//        if(!result.IsSuccess || !result2.IsSuccess){
-            if(!result.IsSuccess){
+        if(!result.IsSuccess){
             News.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
             MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
             Thread.sleep(100);
@@ -372,14 +366,6 @@
             }
         }
 
-//        if (command.getAckFinish() == 0) {
-//            short commandFinish = 1;
-//            Thread.sleep(200L);
-//            result = siemensNet.Write("DB100.18", commandFinish);
-//            log.info("鍫嗗灈鏈篶ommandFinish涓嬪彂[id:{}] >>>>> {}", slave.getId(), commandFinish);
-////            result = siemensNet.Write("DB100.22", commandFinish);
-//        }
-
         try {
             // 鏃ュ織璁板綍
             BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
@@ -403,7 +389,7 @@
             bean.insert(basCrnOpt);
         } catch (Exception ignore) {}
 
-        if (result != null && result.IsSuccess) {
+        if (result.IsSuccess) {
             this.readStatus();
             News.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 9fe3d21..25784fa 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -43,10 +43,15 @@
     private short heartBeatVal = 1;
     private StaError1 staError1;
     public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
-        add(1002);add(1020);add(1035);add(103);
-        add(104);add(105);add(106);add(107);
-        add(200);add(201);add(202);add(203);add(210);
-        add(300);add(301);add(302);add(303);add(304);add(305);
+        add(1001);add(1002);add(1004);add(1005);add(1006);add(1007);add(1008);add(1009);add(1010);add(1011);add(1012);
+        add(1041);add(1042);add(1043);add(1013);add(1014);add(1015);add(1016);add(1017);add(1018);add(1019);add(1020);
+        add(1034);add(1035);add(1036);add(1038);add(1039);add(1040);
+        add(1022);add(1023);add(1024);add(1025);add(1026);add(1027);add(1028);add(1030);add(1031);add(1032);add(1033);
+        add(1044);add(1045);add(1046);add(1047);add(1049);add(1050);add(1051);add(1052);add(1053);add(1054);add(1056);add(1057);
+        add(1061);add(1063);add(1064);add(1065);add(1066);add(1067);add(1068);add(1073);add(1074);add(1075);add(1077);add(1078);add(1079);
+        add(1081);add(1082);add(1083);add(1084);add(1085);add(1086);add(1087);add(1088);add(1089);add(1090);
+        add(1091);add(1092);add(1093);add(1094);add(1095);add(1096);add(1097);add(1098);add(1099);add(1100);add(1101);add(1102);add(1103);add(1104);
+        add(1105);add(1106);add(1107);
     }};
 
     public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{
@@ -55,6 +60,9 @@
     public static final ArrayList<Integer> staNosErrList = new ArrayList<Integer>() {{
         add(101); add(103);
     }};
+
+    // 缃愯绾胯妗舵爣璇�
+    private volatile Map<Integer,String> wantBucketFlag =  new HashMap<>();
 
     /**
      * 鏉$爜鏁伴噺
@@ -105,10 +113,6 @@
                         write((StaProtocol)task.getData());
 //                        log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
                         break;
-                    // 鍐欏紑闂�
-                    case 3:
-                        write2((Integer) task.getData());
-                        break;
                     default:
                         break;
                 }
@@ -119,44 +123,6 @@
                 e.printStackTrace();
             }
 
-        }
-    }
-
-    private void write2(int flag) throws InterruptedException {
-        if (flag == 0) {
-            OperateResultExOne<byte[]> readOpenResult = siemensS7Net.Read("DB100.826", (short) 1);
-            if (readOpenResult.IsSuccess) {
-                boolean[] booleans = siemensS7Net.getByteTransform().TransBool(readOpenResult.Content, 0, 1);
-                booleans[1] = true; // 鍏抽棬淇″彿
-                booleans[0] = false;
-                siemensS7Net.Write("DB100.826",booleans);
-                log.info("涓嬪彂鍏抽棬淇″彿鎴愬姛锛�" + Arrays.toString(booleans));
-            }
-        } else if(flag == 1) {
-            OperateResultExOne<byte[]> readOpenResult = siemensS7Net.Read("DB100.826", (short) 1);
-            if (readOpenResult.IsSuccess) {
-                boolean[] booleans = siemensS7Net.getByteTransform().TransBool(readOpenResult.Content, 0, 1);
-                booleans[0] = true; // 寮�闂ㄤ俊鍙�
-                booleans[1] = false;
-                siemensS7Net.Write("DB100.826",booleans);
-                log.info("涓嬪彂寮�闂ㄤ俊鍙锋垚鍔燂細" + Arrays.toString(booleans));
-            }
-        }
-        Thread.sleep(500);
-        OperateResultExOne<byte[]> readOpenResult = siemensS7Net.Read("DB100.826", (short) 1);
-        if (readOpenResult.IsSuccess) {
-            boolean[] booleans = siemensS7Net.getByteTransform().TransBool(readOpenResult.Content, 0, 1);
-            StaProtocol staProtocol = station.get(305);
-            if (null == staProtocol) {
-                staProtocol = new StaProtocol();
-                staProtocol.setSiteId(305);
-                station.put(305, staProtocol);
-            }
-            staProtocol.setOpenAskDoor(booleans[0]);
-            staProtocol.setCloseAskDoor(booleans[1]);
-            staProtocol.setIfOpenDoor(booleans[2]);
-            staProtocol.setIfCloseDoor(booleans[3]);
-            log.info("涓嬪彂寮�鍏抽棬鍚庡洖璇伙細" + Arrays.toString(booleans));
         }
     }
 
@@ -211,10 +177,10 @@
      * 璇诲彇鐘舵�� ====> 鏁村潡plc
      */
     private void read() throws InterruptedException {
-//        // 鏇存柊鍏ュ嚭搴撴ā寮�
-//        updateIoMode();
-//        ArrayList<Integer> staNos = getStaNo();
-//        int staNoSize = staNos.size();
+        wantBucketFlag.clear();
+        //todo 璇诲彇缃愯绾縋LC瑕佹《鏍囪瘑
+        wantBucketFlag.put(1,"IBC");
+
         // 璇讳竴妤艰繛缁�8涓珯鐐�
         OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (8*8));
         if (result.IsSuccess) {
@@ -245,112 +211,6 @@
                 }
             }
         }
-        // 璇讳簩妤艰繛缁�4涓珯鐐�
-        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.800", (short) (4*8));
-        if (result2.IsSuccess) {
-            for (int i = 8; i < 12; i++) {
-                Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
-                StaProtocol staProtocol = station.get(siteId);
-                if (null == staProtocol) {
-                    staProtocol = new StaProtocol();
-                    staProtocol.setSiteId(siteId);
-                    station.put(siteId, staProtocol);
-                }
-                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result2.Content, (i-8)*8));     // 宸ヤ綔鍙�
-
-                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, (i-8)*8 + 4));   // 鐩爣绔�
-
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(result2.Content, (i-8)*8 + 6, 2);
-                staProtocol.setAutoing(status[0]);  // 鑷姩
-                staProtocol.setLoading(status[1]);  // 鏈夌墿
-                staProtocol.setInEnable(status[2]); // 鍙叆
-                staProtocol.setOutEnable(status[3]);// 鍙嚭
-                staProtocol.setEmptyMk(status[4]);  // 绌烘澘淇″彿
-                staProtocol.setFullPlt(status[5]);  // 婊℃墭鐩�
-                staProtocol.setHigh(status[6]);     // 楂樺簱浣�
-                staProtocol.setLow(status[7]);      // 浣庡簱浣�
-
-                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
-                    staProtocol.setPakMk(true);
-                }
-            }
-        }
-        // 璇讳簩妤�210
-        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB101.880", (short) (8));
-        if (result3.IsSuccess) {
-                Integer siteId = staNos.get(12); // 绔欑偣缂栧彿210
-                StaProtocol staProtocol = station.get(siteId);
-                if (null == staProtocol) {
-                    staProtocol = new StaProtocol();
-                    staProtocol.setSiteId(siteId);
-                    station.put(siteId, staProtocol);
-                }
-                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result3.Content, 0));     // 宸ヤ綔鍙�
-
-                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result3.Content, 4));   // 鐩爣绔�
-
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, 6, 2);
-                staProtocol.setAutoing(status[0]);  // 鑷姩
-                staProtocol.setLoading(status[1]);  // 鏈夌墿
-                staProtocol.setInEnable(status[2]); // 鍙叆
-                staProtocol.setOutEnable(status[3]);// 鍙嚭
-                staProtocol.setEmptyMk(status[4]);  // 绌烘澘淇″彿
-                staProtocol.setFullPlt(status[5]);  // 婊℃墭鐩�
-                staProtocol.setHigh(status[6]);     // 楂樺簱浣�
-                staProtocol.setLow(status[7]);      // 浣庡簱浣�
-
-                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
-                    staProtocol.setPakMk(true);
-                }
-        }
-        // 璇讳簩妤�3鍖�
-        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.1600", (short) (6*8));
-        if (result2.IsSuccess) {
-            for (int i = 13; i < staNos.size(); i++) {
-                Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
-                StaProtocol staProtocol = station.get(siteId);
-                if (null == staProtocol) {
-                    staProtocol = new StaProtocol();
-                    staProtocol.setSiteId(siteId);
-                    station.put(siteId, staProtocol);
-                }
-                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result4.Content, (i-13)*8));     // 宸ヤ綔鍙�
-
-                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result4.Content, (i-13)*8 + 4));   // 鐩爣绔�
-
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(result4.Content, (i-13)*8 + 6, 2);
-                staProtocol.setAutoing(status[0]);  // 鑷姩
-                staProtocol.setLoading(status[1]);  // 鏈夌墿
-                staProtocol.setInEnable(status[2]); // 鍙叆
-                staProtocol.setOutEnable(status[3]);// 鍙嚭
-                staProtocol.setEmptyMk(status[4]);  // 绌烘澘淇″彿
-                staProtocol.setFullPlt(status[5]);  // 婊℃墭鐩�
-                staProtocol.setHigh(status[6]);     // 楂樺簱浣�
-                staProtocol.setLow(status[7]);      // 浣庡簱浣�
-
-                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
-                    staProtocol.setPakMk(true);
-                }
-            }
-        }
-//        BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
-        //RGV灏忚溅1
-//        Thread.sleep(100);
-//        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB50.200",(short)10);
-//        if (result3.IsSuccess) {
-//            BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result3.Content, 0));
-//            if (!Cools.isEmpty(basRgvMap)){
-//                Integer siteId = 1;
-//                StaProtocol staProtocol = station.get(siteId);
-//                if (null == staProtocol) {
-//                    staProtocol = new StaProtocol();
-//                    staProtocol.setSiteId(siteId);
-//                    station.put(siteId, staProtocol);
-//                }
-//                staProtocol.setAutoing(true);
-//                staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8)));
-//            }
-//        }
 
         // 鏉$爜鎵弿鍣�
         OperateResultExOne<byte[]> barcodeResult = siemensS7Net.Read("DB101.1672", (short) ((BarcodeList.size()+1) * 8)); // 涓嶈繛缁�
@@ -396,145 +256,6 @@
 
             }
         }
-        // 璇讳簩妤艰繛缁�4涓珯鐐癸紝鏁呴殰淇℃伅鍙嶉
-        OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB101.3512", (short) (4*2));
-        if (resultErr3.IsSuccess) {
-            for (int i = 8; i < 12; i++) {
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, (i-8) * 2 + 1, 1);
-                StaProtocol staProtocol = station.get(staNos.get(i)); // 绔欑偣缂栧彿
-                staProtocol.setBreakerErr(status[0]);
-                staProtocol.setInfraredErr(status[1]);
-                staProtocol.setOutTimeErr(status[2]);
-                staProtocol.setSeizeSeatErr(status[3]);
-                staProtocol.setWrkYgoodsN(status[4]);
-                staProtocol.setInverterErr(status[5]);
-                staProtocol.setContactErr(status[6]);
-                staProtocol.setUpcontactErr(status[7]);
-            }
-        }
-        // 璇讳笁鍖烘晠闅滀俊鎭弽棣�
-        OperateResultExOne<byte[]> resultErr4 = siemensS7Net.Read("DB101.2096", (short) (6*2));
-        if (resultErr4.IsSuccess) {
-            for (int i = 13; i < staNos.size(); i++) {
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr4.Content, (i-13) * 2 + 1, 1);
-                StaProtocol staProtocol = station.get(staNos.get(i)); // 绔欑偣缂栧彿
-                staProtocol.setBreakerErr(status[0]);
-                staProtocol.setInfraredErr(status[1]);
-                staProtocol.setOutTimeErr(status[2]);
-                staProtocol.setSeizeSeatErr(status[3]);
-                staProtocol.setWrkYgoodsN(status[4]);
-                staProtocol.setInverterErr(status[5]);
-                staProtocol.setContactErr(status[6]);
-                staProtocol.setUpcontactErr(status[7]);
-            }
-        }
-
-        // 涓�妤煎嚭鍏ュ簱妯″紡鍒囨崲
-//        OperateResultExOne<byte[]> ioModeResult = siemensS7Net.Read("DB101.3724", (short) 1);
-//        if (ioModeResult.IsSuccess) {
-//            boolean[] ioModelBooleans = siemensS7Net.getByteTransform().TransBool(ioModeResult.Content, 0, 1);
-////            log.info("璇诲彇鍑哄叆搴撴ā寮忥細" + Arrays.toString(ioModelBooleans));
-//            WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class);
-//            if (ioModelBooleans[0]) { // 100鍒囧叆搴�
-//                if (ioModeOf101 == IoModeType.PAKOUT_MODE) {
-//                    int outCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 101)
-//                            .eq("sta_no", 100).in("wrk_sts", 12, 13, 14));
-//                    if (outCount == 0) {
-//                        boolean[] booleans = new boolean[8];
-//                        booleans[0]=true;
-//                        ioModeOf101 = IoModeType.PAKIN_MODE;
-//                        siemensS7Net.Write("DB100.824",booleans);
-//                        log.info("101鍒囨崲鍏ュ簱妯″紡鎴愬姛");
-//                    }
-//                }
-//            }
-//            if (ioModelBooleans[1]) { // 100鍒囧嚭搴�
-//                if (ioModeOf101 == IoModeType.PAKIN_MODE) {
-//                    int inCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1)
-//                            .eq("sta_no", 101).in("wrk_sts", 2, 3, 4));
-//                    if (inCount == 0) {
-//                        boolean[] booleans = new boolean[8];
-//                        booleans[0]=true;
-//                        ioModeOf101 = IoModeType.PAKOUT_MODE;
-//                        siemensS7Net.Write("DB100.824",booleans);
-//                        log.info("101鍒囨崲鍑哄簱妯″紡鎴愬姛");
-//                    }
-//                }
-//            }
-//            if (ioModelBooleans[2]) { // 102鍒囧叆搴�
-//                if (ioModeOf103 == IoModeType.PAKOUT_MODE) {
-//                    int outCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 101)
-//                            .eq("sta_no", 102).in("wrk_sts", 12, 13, 14));
-//                    if (outCount == 0) {
-//                        boolean[] booleans = new boolean[8];
-//                        booleans[1]=true;
-//                        ioModeOf103 = IoModeType.PAKIN_MODE;
-//                        siemensS7Net.Write("DB100.824",booleans);
-//                        log.info("103鍒囨崲鍏ュ簱妯″紡鎴愬姛");
-//                    }
-//                }
-//            }
-//            if (ioModelBooleans[3]) { // 102鍒囧嚭搴�
-//                if (ioModeOf103 == IoModeType.PAKIN_MODE) {
-//                    int inCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1)
-//                            .eq("sta_no", 103).in("wrk_sts", 2, 3, 4));
-//                    if (inCount == 0) {
-//                        boolean[] booleans = new boolean[8];
-//                        booleans[1]=true;
-//                        ioModeOf103 = IoModeType.PAKOUT_MODE;
-//                        siemensS7Net.Write("DB100.824",booleans);
-//                        log.info("103鍒囨崲鍑哄簱妯″紡鎴愬姛");
-//                    }
-//                }
-//            }
-//        }
-
-        // 璇诲紑闂ㄤ俊鍙�
-//        OperateResultExOne<byte[]> readOpenResult = siemensS7Net.Read("DB100.826", (short) 1);
-//        if (readOpenResult.IsSuccess) {
-//            boolean[] booleans = siemensS7Net.getByteTransform().TransBool(readOpenResult.Content, 0, 1);
-//            StaProtocol staProtocol = station.get(305);
-//            if (null == staProtocol) {
-//                staProtocol = new StaProtocol();
-//                staProtocol.setSiteId(305);
-//                station.put(305, staProtocol);
-//            }
-//            staProtocol.setOpenAskDoor(booleans[0]);
-//            staProtocol.setCloseAskDoor(booleans[1]);
-//            staProtocol.setIfOpenDoor(booleans[2]);
-//            staProtocol.setIfCloseDoor(booleans[3]);
-////            log.info("寮�闂ㄤ俊鍙凤細" + Arrays.toString(booleans));
-//        }
-
-
-////        OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB13.400", (short) 3);
-////        if (resultErr3.IsSuccess) {
-////            if (staError1 == null){
-////                staError1 = new StaError1();
-//            }
-//            boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, 0, 3);
-//            staError1.setEMERGENCY_Stop_Core(status[0]);
-//            staError1.setEMERGENCY_STOP1(status[1]);
-//            staError1.setEMERGENCY_STOP2(status[2]);
-//            staError1.setEMERGENCY_STOP3(status[3]);
-//            staError1.setEMERGENCY_STOP4(status[4]);
-//
-//            staError1.setDoor_EMERGENCY_STOP1(status[5]);
-//            staError1.setDoor_EMERGENCY_STOP2(status[6]);
-//            staError1.setDoor_EMERGENCY_STOP3(status[7]);
-//            staError1.setDoor_EMERGENCY_STOP4(status[8]);
-//            staError1.setDoor_EMERGENCY_STOP5(status[9]);
-//            staError1.setDoor_EMERGENCY_STOP6(status[10]);
-//
-//            staError1.setDoor_Open_Err1(status[11]);
-//            staError1.setDoor_Open_Err1(status[12]);
-//            staError1.setDoor_Open_Err1(status[13]);
-//            staError1.setDoor_Open_Err1(status[14]);
-//            staError1.setDoor_Open_Err1(status[15]);
-//            staError1.setDoor_Open_Err1(status[16]);
-//
-//        }
-
 
         if (result.IsSuccess) {
 
@@ -629,16 +350,6 @@
         }
     }
 
-    // 鏇存柊鍏ュ嚭搴撴ā寮�
-    private void updateIoMode() throws InterruptedException {
-//        if (this.ioModeOf2F != IoModeType.NONE) {
-//            if (!siemensS7Net.Write("DB100.180", this.ioModeOf2F.id).IsSuccess) {
-//                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
-//                News.error("SiemensDevp"+" - 6"+" - 鍐欏叆杈撻�佺嚎2F鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
-//            }
-//        }
-    }
-
     /**
      * 蹇冭烦
      */
@@ -675,7 +386,6 @@
         slave.setIp("10.10.10.18");
         SiemensDevpThread devpThread = new SiemensDevpThread(slave);
         devpThread.connect();
-        devpThread.write2(0);
         devpThread.read();
 //        // 鍐�
 //        StaProtocol staProtocol = devpThread.getStation().get(1);
diff --git a/src/main/java/com/zy/entity/WrkMast.java b/src/main/java/com/zy/entity/WrkMast.java
index aaa0edb..27358e9 100644
--- a/src/main/java/com/zy/entity/WrkMast.java
+++ b/src/main/java/com/zy/entity/WrkMast.java
@@ -301,6 +301,15 @@
     @TableField("ctn_no")
     private String ctnNo;
 
+    @TableField("rgv_no")
+    private Integer rgvNo;
+
+    @TableField("rgv_ssta_no")
+    private Integer rgvSstaNo;
+
+    @TableField("rgv_dsta_no")
+    private Integer rgvDstaNo;
+
     /**
      * 婊℃澘
      */
diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index 79b29fd..594455a 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -6,10 +6,7 @@
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
-import com.zy.common.model.LocTypeDto;
-import com.zy.common.model.MatDto;
-import com.zy.common.model.SearchLocParam;
-import com.zy.common.model.StartupDto;
+import com.zy.common.model.*;
 import com.zy.common.service.CommonService;
 import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
@@ -53,12 +50,41 @@
 
     public static final long COMMAND_TIMEOUT = 5 * 1000;
 
-    // 绌烘嫋鍑哄簱绔欑偣
+    // 绌烘嫋鍑哄簱绔欑偣锛屽尯鍒嗗瓙姣嶇┖鎵樼洏
     public static final Map<Integer,String>  emptyPalletSiteMap = new HashMap<>();
 
-    // 鍒濆鍖栫┖鎵樼洏鍑哄簱绔欑偣 M绌烘瘝鎵樼洏锛孼绌哄瓙鎵樼洏
+    // 姣嶆墭鐩樺彔鐩樼珯鐐�
+    public static final List<Integer>  stackingSite = new ArrayList<>();
+
+    // rgv鎺ラ┏绔欑偣
+    public static final List<Integer>  rgvConnectionSiteList = new ArrayList<>();
+
+    // 宸ヤ綔妗e搴旂洰鏍囩珯鐐硅浆鎹负rgv鐩爣绔欑偣
+    public static final Map<Integer,Integer> taskStaNoToRgvStaNoMap = new HashMap<>();
+
+    // 缃愯瀹屾垚rgv鎺ラ┏绔欑偣
+    public static final List<Integer>  canningLineRgvConnectionSiteList = new ArrayList<>();
+
     static {
-        emptyPalletSiteMap.put(1002,"M");emptyPalletSiteMap.put(1020,"M");emptyPalletSiteMap.put(1035,"Z");
+        emptyPalletSiteMap.put(1002,"M");
+        emptyPalletSiteMap.put(1020,"M");emptyPalletSiteMap.put(1035,"Z");
+
+        stackingSite.add(1027);stackingSite.add(1020);
+
+        rgvConnectionSiteList.add(1012);rgvConnectionSiteList.add(1006);rgvConnectionSiteList.add(1001);rgvConnectionSiteList.add(1018);
+        rgvConnectionSiteList.add(1019);rgvConnectionSiteList.add(1041);rgvConnectionSiteList.add(1034);rgvConnectionSiteList.add(1033);
+        rgvConnectionSiteList.add(1026);rgvConnectionSiteList.add(1022);rgvConnectionSiteList.add(1044);
+        rgvConnectionSiteList.add(1083);rgvConnectionSiteList.add(1086);rgvConnectionSiteList.add(1089);rgvConnectionSiteList.add(1090);
+        rgvConnectionSiteList.add(1105);rgvConnectionSiteList.add(1100);rgvConnectionSiteList.add(1097);rgvConnectionSiteList.add(1094);
+        rgvConnectionSiteList.add(1091);
+
+        taskStaNoToRgvStaNoMap.put(1050,1044);taskStaNoToRgvStaNoMap.put(1079,1044);taskStaNoToRgvStaNoMap.put(1065,1044);taskStaNoToRgvStaNoMap.put(1072,1044);taskStaNoToRgvStaNoMap.put(1093,1094);
+        taskStaNoToRgvStaNoMap.put(1104,1100);taskStaNoToRgvStaNoMap.put(1102,1100);taskStaNoToRgvStaNoMap.put(1090,1090);taskStaNoToRgvStaNoMap.put(1002,1001);taskStaNoToRgvStaNoMap.put(1016,1018);
+        taskStaNoToRgvStaNoMap.put(1020,1019);taskStaNoToRgvStaNoMap.put(1024,1022);taskStaNoToRgvStaNoMap.put(1035,1034);taskStaNoToRgvStaNoMap.put(1040,1033);taskStaNoToRgvStaNoMap.put(1043,1041);
+
+        canningLineRgvConnectionSiteList.add(1083);canningLineRgvConnectionSiteList.add(1086);
+        canningLineRgvConnectionSiteList.add(1089);
+
     }
 
     @Autowired
@@ -129,14 +155,7 @@
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
-//                if ((staProtocol.getSiteId() == 101 && devpThread.ioModeOf101 == IoModeType.PAKOUT_MODE)
-//                ||(staProtocol.getSiteId() == 103 && devpThread.ioModeOf103 == IoModeType.PAKOUT_MODE)
-//                ||(staProtocol.getSiteId() == 305 && devpThread.ioModeOf305 == IoModeType.PAKOUT_MODE)) {
-//                    errMsg = "褰撳墠涓哄嚭搴撴ā寮�";
-//                    back = true;
-//                }
-//                if (!back && staProtocol.isFrontErr()) {
-                    if (staProtocol.isFrontErr()) {
+                if (staProtocol.isFrontErr()) {
                     errMsg = "鍓嶈秴闄�";
                     back = true;
                 }
@@ -166,7 +185,6 @@
                 }
                 // 閫�鍥�
                 if (back) {
-//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
                     MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
 
                     if (!staProtocol.isLoading()){
@@ -225,6 +243,12 @@
                         param.setIoType(1);
                         param.setSourceStaNo(inSta.getStaNo());
                         param.setLocType1(locTypeDto.getLocType1());
+                        param.setLocArea(2);// 鍏ョ┖妗跺簱鏍囪瘑
+                        param.setBucketType(staProtocol.getBucketType());
+                        param.setBucketCount(staProtocol.getBucketCount());
+                        param.setTailSupportFlag(staProtocol.isTailSupportFlag());
+                        param.setWantBucketFlag(devpThread.getWantBucketFlag());
+
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
                                 .setPath("/rpc/pakin/loc/v1")
@@ -236,6 +260,11 @@
                         if (jsonObject.getInteger("code").equals(200)) {
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                             barcodeThread.setBarcode("");
+                            // 鐩爣绔欑偣鏄洿渚涚綈瑁呯嚎
+                            if (dto.getStaNo() == 1079 || dto.getStaNo() == 1065 || dto.getStaNo() == 1072) {
+                                devpThread.getWantBucketFlag().remove(dto.getCrnNo()); // 绉婚櫎杈撻�佺嚎瑕佹《淇″彿
+                                staProtocol.setClearBucketSignal(dto.getCrnNo()); // 娓呴櫎瑕佹《淇″彿鏍囪瘑
+                            }
                             staProtocol.setWorkNo(dto.getWorkNo());
                             staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -253,28 +282,21 @@
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
-//                            if (ledThread != null) {
+                            if (ledThread != null) {
                                 String errorMsg = jsonObject.getString("msg");
                                 if (!Cools.isEmpty(errorMsg)) {
                                     MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                                 }
-//                            }
-//                            News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            }
+                            News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         }
-
-
                     } catch (Exception e) {
                         e.printStackTrace();
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                     }
-
                 }
-
-
             }
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
 
     }
 
@@ -522,40 +544,34 @@
                     if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
                             && crnProtocol.statusType == CrnStatusType.WAITING
                             && crnProtocol.forkPosType == CrnForkPosType.HOME) {
-//                        News.error("鍫嗗灈鏈哄嚭搴撳畬鎴� - 寮�濮嬫墽琛�");
 
-                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-
-                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-
-                        // 涓嬪彂绔欑偣淇℃伅
-
-                        if (wrkMast.getSourceStaNo() == 106 && wrkMast.getWrkSts() == 12L) {
-                            wrkMast.setWrkSts(16L);
-                            wrkMast.setCrnNo(1);
-                            if (wrkMast.getStaNo() == 107) {
-                                wrkMast.setSourceStaNo(107);
-                            } else if(wrkMast.getStaNo()==104) {
-                                wrkMast.setSourceStaNo(105);
-                            }
-                            staProtocol.setStaNo((short) 106);
-
-                            log.info("----------106绉诲簱鏍囪瘑---------");
-                        }else if(wrkMast.getSourceStaNo() == 105 && wrkMast.getWrkSts() == 16L) {
-                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-                            log.info("106绉诲簱瀹屾垚锛岃緭閫佺嚎鍙戦��105鍒�104锛屾簮绔欎负锛�" + staProtocol.getSiteId());
-                            wrkMast.setWrkSts(14L);
-                        }else {
-                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-                            wrkMast.setWrkSts(14L);
-                        }
-
+                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                         staProtocol.setWorkNo(wrkMast.getWrkNo());
                         if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                             continue;
                         }
+                        wrkMast.setWrkSts(14L);
                         wrkMast.setCrnEndTime(new Date());
                         if (wrkMastMapper.updateById(wrkMast) != 0) {
+                            // 绌烘《鍑哄簱瀹屾垚搴撲綅缁勪换鍔�
+                            if (wrkMast.getSourceStaNo() == 1056) {
+                                WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", 1056).eq("wrk_sts", 12));
+                                if (wrkMast1 != null) {
+                                    StaProtocol staProtocol1 = devpThread.getStation().get(1057);
+                                    if (staProtocol1 != null) {
+                                        staProtocol1 = staProtocol1.clone();
+                                        staProtocol1.setStaNo(wrkMast1.getStaNo().shortValue());
+                                        staProtocol1.setWorkNo(wrkMast1.getWrkNo());
+                                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol1))) {
+                                            log.error("绌烘《鍑哄簱瀹屾垚搴撲綅缁勪换鍔℃帹閫佽緭閫佺嚎鍛戒护闃熷垪澶辫触");
+                                        }
+                                        wrkMast1.setWrkSts(14L);
+                                        wrkMast1.setCrnEndTime(new Date());
+                                        if (wrkMastMapper.updateById(wrkMast1) != 0) {
+                                        }
+                                    }
+                                }
+                            }
                             // 澶嶄綅鍫嗗灈鏈�
                             log.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
                             crnThread.setResetFlag(true);
@@ -578,6 +594,142 @@
     }
 
     /**
+     * 绌哄瓙鎵樼洏鍏ュ簱
+     */
+    public synchronized void storeEmptyPlt() {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鍏ュ簱鍙�
+            for (DevpSlave.Sta inSta : devp.getEmptyInSta()) {
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+                if (barcodeThread == null) {
+                    continue;
+                }
+                String barcode = barcodeThread.getBarcode();
+                // 灏哄妫�娴嬪紓甯�
+                boolean back = false;
+                String errMsg = "";
+                if (staProtocol.isFrontErr()) {
+                    errMsg = "鍓嶈秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isBackErr()) {
+                    errMsg = "鍚庤秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isHighErr()) {
+                    errMsg = "楂樿秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isLeftErr()) {
+                    errMsg = "宸﹁秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isRightErr()) {
+                    errMsg = "鍙宠秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isWeightErr()) {
+                    errMsg = "瓒呴噸";
+                    back = true;
+                }
+                if (!back && staProtocol.isBarcodeErr()) {
+                    errMsg = "鎵爜澶辫触";
+                    back = true;
+                }
+                // 閫�鍥�
+                if (back) {
+                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
+                    if (!staProtocol.isLoading()) {
+                        continue;
+                    }
+                    if (!staProtocol.isPakMk()) {
+                        continue;
+                    }
+                    staProtocol.setWorkNo(wrkNo);
+                    News.info("{}绌烘墭鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg, wrkNo);
+                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                    devpThread.setPakMk(staProtocol.getSiteId(), false);
+                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    log.error("杈撻�佺嚎涓嬪彂1锛�" + wrkNo + "," + inSta.getBackSta());
+                    return;
+                }
+
+                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                if (staProtocol.isAutoing()
+                        && staProtocol.isLoading()
+                        && staProtocol.isInEnable()
+                        && staProtocol.isEmptyMk()
+                        && staProtocol.isPakMk()) {
+                    if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+                        continue;
+                    }
+                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
+                    if (wrkMast != null) {
+                        continue;
+                    }
+                    try {
+                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+
+                        SearchLocParam param = new SearchLocParam();
+                        param.setBarcode(barcode);
+                        param.setIoType(10);
+                        param.setSourceStaNo(inSta.getStaNo());
+                        param.setLocType1(locTypeDto.getLocType1());
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath("/rpc/pakin/loc/v1")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        log.info("绌哄瓙鎵樼洏鍏ュ簱璇锋眰wms鍘熷杩斿洖锛�" + response);
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject.getInteger("code").equals(200)) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                            barcodeThread.setBarcode("");
+                            staProtocol.setWorkNo(dto.getWorkNo());
+                            staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(), dto.getSourceStaNo()));
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
+                            if (!result) {
+                                News.error(":鏇存柊plc绔欑偣淇℃伅澶辫触");
+                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            } else {
+                                ledThread.errorReset();
+                            }
+                        } else {
+                            staProtocol.setWorkNo(wrkNo);
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            String errorMsg = jsonObject.getString("msg");
+                            if (!Cools.isEmpty(errorMsg)) {
+                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    }
+                }
+            }
+        }
+    }
+
+    /**
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
      */
     public synchronized void crnIoExecute(Integer mark) {
@@ -594,11 +746,6 @@
                 News.error(""+mark+" - 1"+" - {}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
                 continue;
             }
-
-//            //鍫嗗灈鏈哄洖鍘熺偣浠诲姟涓�
-//            if(crnThread.isBackHpFlag()){
-//                continue;
-//            }
 
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
@@ -628,12 +775,8 @@
                 }
             }
             // 搴撲綅绉昏浆
-            //mark - 3 - ....
             this.locToLoc(crn, crnProtocol,mark);
-//            this.crnRebackHp(crnProtocol, crnThread);
-
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
     }
 
     /**
@@ -761,18 +904,6 @@
                 News.error(""+mark+" - 1"+" - 16"+" - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
 
-//                long startTime = System.currentTimeMillis();
-//                while ((System.currentTimeMillis() - startTime) < COMMAND_TIMEOUT) {
-//
-//                    if (true) {
-//                        break;
-//                    }
-//
-//                    try{
-//                        Thread.sleep(500);
-//                    }catch(Exception ignore){}
-//                }
-
                 // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
                 Date now = new Date();
                 wrkMast.setWrkSts(3L);
@@ -780,6 +911,21 @@
                 wrkMast.setModiTime(now);
                 if (wrkMastMapper.updateById(wrkMast) == 0) {
                     News.error(""+mark+" - 1"+" - 17"+" - 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                }
+                // 濡傛灉鏄�1049鍒欐湁涓や釜浠诲姟锛岄渶瑕佹妸1050鏀规垚鍚婅溅鍏ュ簱涓�
+                if (crnStn.getStaNo() == 1049) {
+                    BasDevp basDevp = basDevpService.selectById(1050);
+                    if (basDevp.getWrkNo() == 0) {
+                        log.error("鍙栬揣鐐逛负1049锛屼絾鏄�1050浠诲姟鍙蜂负0");
+                    } else {
+                        WrkMast wrkMast1 = wrkMastMapper.selectById(basDevp.getWrkNo());
+                        wrkMast1.setWrkSts(3L);
+                        wrkMast1.setCrnStrTime(now);
+                        wrkMast1.setModiTime(now);
+                        if (wrkMastMapper.updateById(wrkMast1) == 0) {
+                            News.error(""+mark+" - 1"+" - 17"+" - 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                        }
+                    }
                 }
             }
         }
@@ -794,9 +940,7 @@
         News.warnNoLog(""+mark+" - 2"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�");
         for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
-//            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
             List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
-            // todo 闄愬埗鍑哄簱鍒�305鐨勫伐浣滄。锛屽鏋滈厤缃畂utModel涓嶇瓑浜嶻锛屽垯璺宠繃
             for (WrkMast wrkMast : wrkMasts) {
                 if (wrkMast == null) {
                     continue;
@@ -818,41 +962,22 @@
                 if (staProtocol == null) {
                     News.infoNoLog(""+mark+" - 2"+" - 3"+" - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol="+staProtocol);
                     break;
-//                    continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-
-//            // 鍏ュ嚭搴撴ā寮忓垽鏂�
-//            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
-//                if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
-//                    News.infoNoLog(""+mark+" - 2"+" - 4"+" - 鍏ュ嚭搴撴ā寮忥紙姝ゅ鍑哄簱鏂规硶锛屽嚭搴撴ā寮忕户缁�=="+devpThread.ioModeOf2F);
-//                    continue;
-//                }
-                // 鍏ュ嚭搴撴ā寮忓垽鏂�
-//                if ((staProtocol.getSiteId() == 101 && devpThread.ioModeOf101 != IoModeType.PAKOUT_MODE)
-//                   || (staProtocol.getSiteId() == 103 && devpThread.ioModeOf103 != IoModeType.PAKOUT_MODE)
-//                   || (staProtocol.getSiteId() == 305 && devpThread.ioModeOf305 != IoModeType.PAKOUT_MODE)) {
-//                    continue;
-//                }
 
                 // 鏌ヨ绔欑偣璇︾粏淇℃伅
                 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                 if (staDetl == null) {
                     News.error(""+mark+" - 2"+" - 5"+" - 鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                     break;
-//                    continue;
                 }
-                // 107鏃犵墿鎵嶈兘鍑猴紝鍏朵粬鏈夎浆杩愭灦鎵嶈兘鍑�
-                boolean loading = (staProtocol.getSiteId() == 107) != staProtocol.isLoading();
+
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if (staProtocol.isAutoing() && loading && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                         && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
-                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-//                    log.warn("鍫嗗灈鏈哄嚭搴撳懡浠や笅鍙戯細"+staProtocol.getWorkNo()+","+staProtocol.isOutEnable()+","+staProtocol.getSiteId());
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
                     if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-//                        continue;
                         break;
                     }
 
@@ -908,11 +1033,39 @@
                     // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                     if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                         break;
-//                        return;
                     }
-//                    if(crnStn.getStaNo() == 105) {
-//                        continue;
-//                    }
+
+                    WrkMast wrkMast1 = null; // 搴撲綅浠诲姟瀵瑰簲鍙︿竴涓簱浣嶄换鍔�
+                    LocMast locMast = null; // 搴撲綅瀵瑰簲鍙︿竴涓簱浣�
+                    // 绌烘《搴撳嚭搴撻渶瑕佷袱涓簱浣嶄竴璧峰嚭
+                    if(slave.getId() == 4) {
+                        Integer row = sourceSta.getRow1();
+                        // 鑾峰彇瀵瑰簲搴撲綅
+                        String  newLocNo = (row == 9 || row == 11 ? String.valueOf(row + 1) : row == 10 ? "09" : "11") + sourceSta.getLocNo().substring(2);
+                        locMast = locMastService.selectById(newLocNo);
+                        if (locMast == null) {
+                            log.error("绌烘《鍑哄簱瀵绘壘{}瀵瑰簲搴撲綅缁勫簱浣嶅彿{}閿欒",sourceSta.getLocNo(),newLocNo);
+                            break;
+                        }
+                        if (locMast.getLocSts().equals("R")) {
+                            wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", newLocNo));
+                        } else if(locMast.getLocSts().equals("F")) {
+                            log.error("绌烘《鍑哄簱瀵绘壘{}瀵瑰簲搴撲綅缁勫簱浣嶅彿{}搴撲綅鐘舵�侀敊璇疐",sourceSta.getLocNo(),newLocNo);
+                            break;
+                        }
+                    }
+                    if (wrkMast1 != null) {
+                        // 鍒ゆ柇缁欏爢鍨涙満鍙戠敓鍛戒护鐨勬簮搴撲綅
+                        if (sourceSta.getRow1() == 10 || sourceSta.getRow1() == 11) {
+                            // 浜ゆ崲搴撲綅鍜屼换鍔�
+                            LocMast t1 = sourceSta;
+                            sourceSta = locMast;
+                            locMast = t1;
+                            WrkMast t2 = wrkMast1;
+                            wrkMast1 = wrkMast;
+                            wrkMast = t2;
+                        }
+                    }
 
                     News.warnNoLog(""+mark+" - 2"+" - 12"+" - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}",wrkMast.getWrkNo().shortValue()
                             ,sourceSta.getRow1().shortValue(),sourceSta.getBay1().shortValue(),sourceSta.getLev1().shortValue()
@@ -941,6 +1094,15 @@
                         wrkMast.setModiTime(now);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
                             News.error(""+mark+" - 2"+" - 14"+" - 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                        }
+                        // 淇敼绌烘《搴撳搴斿簱浣嶄换鍔$姸鎬�
+                        if (wrkMast1 != null) {
+                            wrkMast1.setWrkSts(12L);
+                            wrkMast1.setCrnStrTime(now);
+                            wrkMast1.setModiTime(now);
+                            if (wrkMastMapper.updateById(wrkMast1) == 0) {
+                                News.error(""+mark+" - 2"+" - 14"+" - 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            }
                         }
                         break;
                     }
@@ -1500,7 +1662,7 @@
     }
 
     /**
-     * 鐢熸垚 绌哄瓙/姣嶆墭鐩樹换鍔�
+     * 鐢熸垚 绌哄瓙/姣嶆墭鐩樺嚭搴撲换鍔�
      */
     public synchronized void generateEmptyPalletStoreWrk() {
         Integer devpId = 1;
@@ -1516,7 +1678,7 @@
             // 鑷姩&鏃犵墿&鍙嚭
             if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isOutEnable()) {
                 // 鍒ゆ柇鏄惁宸茬粡鐢熸垚浠诲姟
-                if (wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("sta_no", entry.getKey())).size() > 0) {
+                if (wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type", 111,112).eq("sta_no", entry.getKey())).size() > 0) {
                     log.warn("{}绔欑偣宸茬粡瀛樺湪绌烘澘鍑哄簱浠诲姟", entry.getKey());
                     continue;
                 }
@@ -1544,4 +1706,165 @@
             }
         }
     }
+
+    /**
+     * 鎵樼洏鍒拌揪rgv鎺ラ┏绔欑偣锛屾洿鏀瑰伐浣滄。鐘舵�佷负9.鍛煎彨RGV锛岀幆绌跨▼搴忚皟搴gv
+     */
+    public synchronized void callRgv() {
+        // 杈撻�佺嚎plc缂栧彿
+        Integer devpPlcId = 1;
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpPlcId);
+        for (Integer site : rgvConnectionSiteList) {
+            StaProtocol staProtocol = devpThread.getStation().get(site);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0) {
+                // 鏌ヨ宸ヤ綔妗�
+                WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
+                if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && wrkMast.getRgvNo() == null) {
+                    wrkMast.setRgvNo(0);
+                    wrkMast.setRgvSstaNo(site);
+                    wrkMast.setRgvDstaNo(taskStaNoToRgvStaNoMap.get(wrkMast.getStaNo()));
+                    wrkMast.setModiTime(new Date());
+                    wrkMastMapper.updateById(wrkMast);
+                    log.info("浠诲姟鍙凤細{}宸插埌杈緍gv鎺ラ┏浣嶏紝鍑嗗鍛煎彨rgv...", wrkMast.getWrkNo());
+                }
+            }
+        }
+    }
+
+    /**
+     * 姣嶆墭鐩樺彔婊¤嚜鍔ㄥ叆搴�
+     */
+    public synchronized void autoEmptyIn() {
+
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻绌烘澘鍏ュ簱鍙�
+            for (Integer site :  stackingSite) {
+                // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(site);
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+                if (!staProtocol.isLoading()){
+                    continue;
+                }
+
+                // 绔欑偣鏉′欢鍒ゆ柇
+                if (staProtocol.isAutoing()
+                        && staProtocol.isLoading()
+                        && staProtocol.isInEnable()
+                        && staProtocol.isEmptyMk()
+                        && staProtocol.isPakMk()
+                        && staProtocol.getWorkNo() == 0
+                ) {
+
+                    try {
+                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+
+                        SearchLocParam param = new SearchLocParam();
+                        param.setIoType(10);
+                        param.setSourceStaNo(site);
+                        param.setLocType1(locTypeDto.getLocType1());
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath("/rpc/pakin/loc/v1")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject.getInteger("code").equals(200)) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                            staProtocol.setWorkNo(dto.getWorkNo());
+                            staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            log.error("杈撻�佺嚎涓嬪彂6锛�"+dto.getWorkNo()+","+staProtocol.getSiteId());
+                            if (!result) {
+                                News.errorNoLog(""+" - 1"+" - 鏇存柊plc绔欑偣淇℃伅澶辫触");
+                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            }
+                        } else {
+                            News.error(" - 3"+" - 姣嶆墭鍙犵洏鍏ュ簱璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    }
+                } else {
+                    News.errorNoLog(" - 姣嶆墭鍙犵洏鍏ュ簱绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒"+" 鑷姩淇″彿锛�"+staProtocol.isAutoing()+"銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable()
+                            +"銆佺┖鏉夸俊鍙凤細"+ staProtocol.isEmptyMk()+"銆佸伐浣滃彿锛�" + staProtocol.getWorkNo()
+                            +"銆侀攣瀹氭爣璁�"+ staProtocol.isPakMk());
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 绌烘《缃愯瀹屾垚鍒拌揪缃愯绾縭gv鍙� 瀹屾垚鐩翠緵缃愯绾夸换鍔″拰绌烘《鍑哄簱浠诲姟锛屽垱寤烘垚鍝佹《鍏ュ簱浠诲姟
+     */
+    public synchronized void canningLineTaskFinish() {
+        // 杈撻�佺嚎plc缂栧彿
+        Integer devpPlcId = 1;
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpPlcId);
+        for (Integer site : canningLineRgvConnectionSiteList) {
+            StaProtocol staProtocol = devpThread.getStation().get(site);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.getWorkNo() != 0) {
+                // 鏌ヨ宸ヤ綔妗�
+                WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
+                if (wrkMast.getIoType() != 1) {
+                    try {
+                        CanningLineInLocParam param = new CanningLineInLocParam();
+                        param.setWrkNo(wrkMast.getWrkNo());
+                        param.setSourceStaNo(site);
+
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath("/rpc/pakin/CanningLine/loc/v1")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        log.info("缃愯绾垮叆搴撹姹倃ms鍘熷杩斿洖锛�" + response);
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject.getInteger("code").equals(200)) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                            staProtocol.setWorkNo(dto.getWorkNo());
+                            staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(), dto.getSourceStaNo()));
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            // 杩欓噷涓嬪彂鍛戒护鍚庯紝杈撻�佺嚎瑕佹妸璇ョ珯鐐瑰彲鍏ヤ俊鍙峰幓闄�
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devpPlcId, new Task(2, staProtocol));
+                            if (result) {
+                                log.info("缃愯绾垮叆搴撴帹閫佽緭閫佺嚎鍛戒护鎴愬姛锛�" + dto.getWorkNo() + "," + site + "," + dto.getStaNo());
+                                News.info("缃愯绾垮叆搴撴帹閫佽緭閫佺嚎鍛戒护鎴愬姛锛�" + dto.getWorkNo() + "," + site + "," + dto.getStaNo());
+                            } else {
+                                log.error("缃愯绾垮叆搴撴帹閫佽緭閫佺嚎鍛戒护澶辫触锛�" + dto.getWorkNo() + "," + site + "," + dto.getStaNo());
+                                News.error("缃愯绾垮叆搴撴帹閫佽緭閫佺嚎鍛戒护澶辫触锛�" + dto.getWorkNo() + "," + site + "," + dto.getStaNo());
+                                throw new CoolException("缃愯绾垮叆搴撴帹閫佽緭閫佺嚎鍛戒护澶辫触:" + site);
+                            }
+                        } else {
+                            log.error("缃愯绾垮叆搴撹姹傛帴鍙e紓甯革紝url:{}锛宺equest:{},response:{}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response);
+                            News.error("缃愯绾垮叆搴撹姹傛帴鍙e紓甯革紒锛侊紒url锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    }
+                }
+            }
+        }
+    }
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 76f268e..f19488f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -41,7 +41,7 @@
   # 鍙屾繁
   doubleDeep: true
   # 鍙屾繁搴撲綅鎺掑彿
-  doubleLocs: 1,4,5,8
+  doubleLocs: 1,4
   # 涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
   groupCount: 4
 
@@ -58,41 +58,17 @@
     # 鍫嗗灈鏈哄叆搴撶珯鐐�
     crnInStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 103
-      row: 2
+      staNo: 1093
+      row: 3
       bay: 1
       lev: 1
-    crnInStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 203
-      row: 2
-      bay: 1
-      lev: 2
     # 鍫嗗灈鏈哄嚭搴撶珯鐐�
     crnOutStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 103
-      row: 2
+      staNo: 1093
+      row: 3
       bay: 1
       lev: 1
-    crnOutStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 105
-      row: 2
-      bay: 4
-      lev: 1
-    crnOutStn[2]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 107
-      row: 1
-      bay: 28
-      lev: 1
-    crnOutStn[3]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 203
-      row: 2
-      bay: 1
-      lev: 2
   # 鍫嗗灈鏈�2
   crn[1]:
     id: 2
@@ -106,34 +82,16 @@
     # 鍫嗗灈鏈哄叆搴撶珯鐐�
     crnInStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 101
+      staNo: 1104
       row: 6
       bay: 1
       lev: 1
-    crnInStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 201
-      row: 6
-      bay: 1
-      lev: 2
     # 鍫嗗灈鏈哄嚭搴撶珯鐐�
     crnOutStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 101
-      row: 6
+      staNo: 1099
+      row: 5
       bay: 1
-      lev: 1
-    crnOutStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 201
-      row: 6
-      bay: 1
-      lev: 2
-    crnOutStn[2]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 106
-      row: 6
-      bay: 28
       lev: 1
   # 鍫嗗灈鏈�3
   crn[2]:
@@ -148,15 +106,15 @@
     # 鍫嗗灈鏈哄叆搴撶珯鐐�
     crnInStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 101
-      row: 6
+      staNo: 1102
+      row: 7
       bay: 1
       lev: 1
     # 鍫嗗灈鏈哄嚭搴撶珯鐐�
     crnOutStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 101
-      row: 6
+      staNo: 1107
+      row: 8
       bay: 1
       lev: 1
   # 鍫嗗灈鏈�4
@@ -169,18 +127,25 @@
     # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
     offset: 2
     demo: false
-    # 鍫嗗灈鏈哄叆搴撶珯鐐�
+    # 鍫嗗灈鏈哄叆搴撶珯鐐�1
     crnInStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 101
-      row: 6
+      staNo: 1050
+      row: 11
+      bay: 1
+      lev: 1
+    # 鍫嗗灈鏈哄叆搴撶珯鐐�2
+    crnInStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1049
+      row: 12
       bay: 1
       lev: 1
     # 鍫嗗灈鏈哄嚭搴撶珯鐐�
     crnOutStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 101
-      row: 6
+      staNo: 1056
+      row: 9
       bay: 1
       lev: 1
 
@@ -193,26 +158,61 @@
     slot: 0
     # 鍏ュ簱鍙�1
     inSta[0]:
-      staNo: 101
+      staNo: 1011
       barcode: ${wcs-slave.barcode[0].id}
-      backSta: 100
+      backSta: 1010
       led: ${wcs-slave.led[0].id}
     # 鍏ュ簱鍙�2
     inSta[1]:
-      staNo: 103
+      staNo: 1007
       barcode: ${wcs-slave.barcode[1].id}
-      backSta: 102
+      backSta: 1008
       led: ${wcs-slave.led[1].id}
     # 鍏ュ簱鍙�3
     inSta[2]:
-      staNo: 305
+      staNo: 1017
+      barcode: ${wcs-slave.barcode[1].id}
+      backSta: 1016
+      led: ${wcs-slave.led[1].id}
+    # 鍏ュ簱鍙�4
+    inSta[3]:
+      staNo: 1042
+      barcode: ${wcs-slave.barcode[1].id}
+      backSta: 1043
+      led: ${wcs-slave.led[1].id}
+    # 绌烘澘鍏ュ簱鍙�1
+    emptyInSta[0]:
+      staNo: 1042
+      barcode: ${wcs-slave.barcode[0].id}
+      backSta: 1043
+      led: ${wcs-slave.led[2].id}
+    # 绌烘澘鍏ュ簱鍙�2
+    emptyInSta[1]:
+      staNo: 1017
+      barcode: ${wcs-slave.barcode[1].id}
+      backSta: 1016
+      led: ${wcs-slave.led[3].id}
+    # 绌烘澘鍏ュ簱鍙�3
+    emptyInSta[2]:
+      staNo: 1007
+      barcode: ${wcs-slave.barcode[2].id}
+      backSta: 1008
+      led: ${wcs-slave.led[4].id}
     # 鍑哄簱鍙�1
     outSta[0]:
-      staNo: 100
+      staNo: 1024
       led: ${wcs-slave.led[0].id}
     # 鍑哄簱鍙�2
     outSta[1]:
-      staNo: 102
+      staNo: 1040
+      led: ${wcs-slave.led[1].id}
+    # 鍑哄簱鍙�3
+    outSta[2]:
+      staNo: 1043
+      led: ${wcs-slave.led[1].id}
+    # 鍑哄簱鍙�4
+    outSta[3]:
+      staNo: 1016
       led: ${wcs-slave.led[1].id}
 
   # 鏉$爜鎵弿浠�1
@@ -242,46 +242,46 @@
     ip: 10.10.10.190
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 101
+    staArr: 1024
   # LED2
   led[1]:
     id: 2
     ip: 10.10.10.191
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 102
+    staArr: 1040
   # LED3
   led[2]:
     id: 3
     ip: 10.10.10.191
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 102
+    staArr: 1042,1043
   # LED4
   led[3]:
     id: 4
     ip: 10.10.10.191
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 102
+    staArr: 1017,1016
   # LED5
   led[4]:
     id: 5
     ip: 10.10.10.191
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 102
+    staArr: 1007
   # LED6
   led[5]:
     id: 6
     ip: 10.10.10.191
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 102
+    staArr: 1011
   # LED7
   led[6]:
     id: 7
     ip: 10.10.10.191
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 102
\ No newline at end of file
+    staArr: 1090
\ No newline at end of file
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 78d045c..b86468f 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -59,6 +59,9 @@
 <!--        <result column="Pdc_type" property="PdcType" />-->
         <result column="ctn_no" property="ctnNo" />
         <result column="full_plt" property="fullPlt" />
+        <result column="rgv_no" property="rgvNo" />
+        <result column="rgv_ssta_no" property="rgvSstaNo" />
+        <result column="rgv_dsta_no" property="rgvDstaNo" />
 
     </resultMap>
 

--
Gitblit v1.9.1