From 29e0a8a8f74a7155f7e6c0d854bb7566c655b0c8 Mon Sep 17 00:00:00 2001
From: pjb <pjb123456>
Date: 星期三, 13 八月 2025 18:11:54 +0800
Subject: [PATCH] 记录输送线异常日志,手动站点转移,

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |  577 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 524 insertions(+), 53 deletions(-)

diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index 2292107..e7d7fe8 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -77,6 +77,7 @@
 
     // 鎴愬搧搴撳爢鍨涙満鍑哄簱绔欑偣鍒皉gv鎺ラ┏鐐�
     public static final Map<Integer,Short>  crnOutSiteToRgvSite = new HashMap<>();
+    public static final Map<Integer,Short>  crnOutSiteToRgvSite2 = new HashMap<>();
 
     static {
         emptyPalletSiteMap.put(1001,"M"); // emptyPalletSiteMap.put(1002,"M");
@@ -104,6 +105,9 @@
         outGzxSiteList.add(1081);outGzxSiteList.add(1084);outGzxSiteList.add(1087);
 
         crnOutSiteToRgvSite.put(1093, (short) 1091);crnOutSiteToRgvSite.put(1099, (short) 1097);crnOutSiteToRgvSite.put(1107, (short) 1105);
+
+        crnOutSiteToRgvSite2.put(1087, (short) 1089);crnOutSiteToRgvSite2.put(1084, (short) 1086);crnOutSiteToRgvSite2.put(1081, (short) 1083);
+        crnOutSiteToRgvSite2.put(1043, (short) 1041);crnOutSiteToRgvSite2.put(1016, (short) 1018);
     }
 
     @Autowired
@@ -118,6 +122,9 @@
     private WaitPakinMapper waitPakinMapper;
     @Autowired
     private LocMastService locMastService;
+
+    @Resource
+    private LocMastMapper locMastMapper;
     @Autowired
     private StaDescService staDescService;
     @Autowired
@@ -143,6 +150,9 @@
 
     @Resource
     private ConfigService configService;
+
+    @Resource
+    private BasDevpErrLogService basDevpErrLogService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -265,9 +275,12 @@
                             barcodeThread.setBarcode("");
                             staProtocol.setWorkNo(dto.getWorkNo());
                             staProtocol.setStaNo(dto.getStaNo().shortValue());
+                            if (dto.getStaNo() == 1071 || dto.getStaNo() == 1064 || dto.getStaNo() == 1078) {
+                                decreaseWantBucketCount(dto.getStaNo(),1);
+                            }
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            log.error("杈撻�佺嚎涓嬪彂2锛�"+dto.getWorkNo()+","+dto.getStaNo());
+                            log.info("杈撻�佺嚎涓嬪彂2锛�"+dto.getWorkNo()+","+dto.getStaNo());
                             if (!result) {
                                 News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
@@ -302,10 +315,52 @@
         StaProtocol staProtocol1084 = devpThread.getStation().get(1084);
         StaProtocol staProtocol1087 = devpThread.getStation().get(1087);
         List<SearchLocParam.WantBucket> wantBucketList = new ArrayList<>();
-        wantBucketList.add(new SearchLocParam.WantBucket(1064,staProtocol1084.getWantBucketFlag()));
-        wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag()));
-        wantBucketList.add(new SearchLocParam.WantBucket(1078,staProtocol1087.getWantBucketFlag()));
+        wantBucketList.add(new SearchLocParam.WantBucket(1064,staProtocol1084.getWantBucketFlag(),staProtocol1084.getWantBucketCount()));
+        wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag(),staProtocol1081.getWantBucketCount()));
+        wantBucketList.add(new SearchLocParam.WantBucket(1078,staProtocol1087.getWantBucketFlag(),staProtocol1087.getWantBucketCount()));
         return wantBucketList;
+    }
+
+    /**
+     * 缃愯绾胯妗舵暟閲忓噺灏�
+     */
+    private void decreaseWantBucketCount(int site, int decrease) throws InterruptedException {
+
+        int siteNew;
+        switch (site) {
+            case 1071: siteNew = 1081;break;
+            case 1064: siteNew = 1084;break;
+            case 1078: siteNew = 1087;break;
+            default:
+                return;
+        }
+
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
+        StaProtocol staProtocol = devpThread.getStation().get(siteNew);
+        if(staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
+
+        int count = staProtocol.getWantBucketCount();
+
+        int remaining = count - decrease;
+        if ( remaining < 0) {
+            log.error("鑷姩鍑虹┖妗跺噺灏戠綈瑁呯嚎瑕佹《鏁板紓甯革紝绔欑偣锛歿}锛屽噺灏戝墠锛歿}锛屽噺灏戞暟锛歿}锛屽墿浣欒妗舵暟锛歿}", site, count, decrease, remaining);
+            return;
+        }
+
+        staProtocol.setWantBucketCount(remaining);
+
+        boolean offer = MessageQueue.offer(SlaveType.Devp, inGzxSiteList.indexOf(site) + 4, new Task(6, staProtocol));
+        if (offer) {
+            log.info("鑷姩鍑虹┖妗跺噺灏戠綈瑁呯嚎瑕佹《鏁板懡浠ゆ帹閫侀槦鍒楁垚鍔燂細绔欑偣锛歿}锛屽墿浣欒妗舵暟锛歿}" ,site, remaining);
+        } else {
+            log.error("鑷姩鍑虹┖妗跺噺灏戠綈瑁呯嚎瑕佹《鏁板懡浠ゆ帹閫侀槦鍒楀け璐ワ細绔欑偣锛歿}锛屽墿浣欒妗舵暟锛歿}" ,site, remaining);
+        }
+
+        log.info("鑷姩鍑虹┖妗跺噺灏戠綈瑁呯嚎瑕佹《鏁版垚鍔燂紝绔欑偣锛歿}锛屽噺灏戝墠锛歿}锛屽噺灏戞暟锛歿}锛屽墿浣欒妗舵暟锛歿}", site, count, decrease, remaining);
     }
 
     /**
@@ -686,7 +741,7 @@
                         continue;
                     }
 
-                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) {
                     News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
                     // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
                     if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
@@ -774,12 +829,30 @@
      */
     public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) {
         News.warnNoLog(""+mark+" - 2"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�");
+        boolean crnAvailableOut = false;
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","removeCrnAvailableOut"));
+        if (config != null && config.getStatus() == 1) {
+            crnAvailableOut = true;
+        }
+        // 闄愬埗鍘绘崋缁戞満鍣ㄤ换鍔℃暟
+        int kbWrks = wrkMastMapper.selectCountByKb();
         for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
             List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
             for (WrkMast wrkMast : wrkMasts) {
                 if (wrkMast == null) {
                     continue;
+                }
+                if (wrkMast.getStaNo() == 1031) {
+                    // 鑾峰彇1033鏃犵姸鎬佹椂浠诲姟鏁�+1
+                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+                    StaProtocol staProtocol = devpThread.getStation().get(1033);
+                    if (staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
+                        kbWrks ++;
+                    }
+                    if (kbWrks > 2) {
+                        continue;
+                    }
                 }
                 // 宸ヤ綔妗g姸鎬佸垽鏂�
                 if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
@@ -810,8 +883,8 @@
                 }
 
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
-                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") &&
+                        (crnAvailableOut || !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable())) {
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
                     if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                         break;
@@ -848,7 +921,7 @@
 
                                 }
                             }
-                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) {
                             News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
 //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                             //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
@@ -1102,21 +1175,23 @@
                     // 绌烘《鍏ュ簱瀹屾垚锛屽厛瀹屾垚瀵瑰簲搴撲綅缁勪换鍔�
                     if(wrkMast.getWorkNoOther() != 0 ){
                         WrkMast wrkMast1 = wrkMastService.selectByWrkNo(wrkMast.getWorkNoOther());
-                        // 浜ゆ崲搴撲綅鍙�
-                        String locNo = wrkMast.getLocNo();
-                        wrkMast.setLocNo(wrkMast1.getLocNo());
-                        // 浜ゆ崲鍏ュ簱鏃堕棿锛屾彁鍙栧簱瀛樻椂鎸夐『搴忓厛娴呭悗娣�
-                        Date ioTime = wrkMast.getIoTime();
-                        if(locNo.startsWith("10")) {
-                            wrkMast.setIoTime(wrkMast1.getIoTime());
-                            wrkMast1.setIoTime(ioTime);
+                        if (wrkMast1 != null) {
+                            // 浜ゆ崲搴撲綅鍙�
+                            String locNo = wrkMast.getLocNo();
+                            wrkMast.setLocNo(wrkMast1.getLocNo());
+                            // 浜ゆ崲鍏ュ簱鏃堕棿锛屾彁鍙栧簱瀛樻椂鎸夐『搴忓厛娴呭悗娣�
+                            Date ioTime = wrkMast.getIoTime();
+                            if(locNo.startsWith("10")) {
+                                wrkMast.setIoTime(wrkMast1.getIoTime());
+                                wrkMast1.setIoTime(ioTime);
+                            }
+                            wrkMast1.setLocNo(locNo);
+                            wrkMast1.setCrnEndTime(now);
+                            wrkMast1.setModiTime(now);
+                            wrkMast1.setWrkSts(4L);
+                            wrkMast1.setWorkNoOther(0);
+                            wrkMastMapper.updateById(wrkMast1);
                         }
-                        wrkMast1.setLocNo(locNo);
-                        wrkMast1.setCrnEndTime(now);
-                        wrkMast1.setModiTime(now);
-                        wrkMast1.setWrkSts(4L);
-                        wrkMast1.setWorkNoOther(0);
-                        wrkMastMapper.updateById(wrkMast1);
                     }
                     wrkMast.setCrnEndTime(now);
                     wrkMast.setModiTime(now);
@@ -1137,13 +1212,13 @@
     /**
      * 鍫嗗灈鏈哄洖鍘熺偣
      */
-    public synchronized void originGo() {
+    public synchronized void originGo() throws InterruptedException {
 
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) {
+            if(crnProtocol == null) {
                 continue;
             }
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
@@ -1154,10 +1229,24 @@
                 }
                 // 鍒ゆ柇鏄笉鏄┖闂蹭笁鍒嗛挓
                 BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+                if (basCrnp.getWrkNo() != 0) {
+                    continue;
+                }
                 Date now = new Date();
                 Date modiTime = basCrnp.getModiTime();
                 long diffInMillis = now.getTime()-modiTime.getTime();
-                if(diffInMillis < 3 * 60 * 1000) {
+                if(diffInMillis < 10 * 1000) { // 绌洪棽灏忎簬10绉掑垯璺宠繃
+                    continue;
+                } else {  // 鏈夊叆搴撲换鍔℃垨澶т簬2鍒嗛挓锛屽洖鍘熺偣
+                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("crn_no", crn.getId()).in("wrk_sts", 2, 9, 10));
+                    if(count == 0 && diffInMillis < 2 * 60 * 1000) {
+                        continue;
+                    }
+                }
+
+                // 鏈夊悐杞﹀叆搴撴垨鍚婅溅鍑哄簱浠诲姟
+                int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnProtocol.getCrnNo()).in("wrk_sts", 3, 12));
+                if(count != 0) {
                     continue;
                 }
 
@@ -1174,8 +1263,11 @@
                 if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
                     News.error("鍥炲師鐐逛换鍔′笅鍙戝け璐�", crn.getId(), JSON.toJSON(crnCommand));
                 } else {
+                    basCrnp.setModiTime(new Date());
+                    basCrnpService.updateById(basCrnp); // 璁剧疆鏇存柊鏃堕棿锛岄伩鍏嶉噸澶嶄笅鍙戝洖鍘熺偣
                     log.info("{}鍙峰爢鍨涙満鍥炲師鐐逛换鍔′笅鍙戞垚鍔燂細{}", crn.getId(), JSON.toJSON(crnCommand));
                 }
+                Thread.sleep(3000);
             }
         }
     }
@@ -1191,15 +1283,15 @@
             if (crnProtocol == null) {
                 continue;
             }
-            if (true) {
-//            if (crnProtocol.getModeType() != CrnModeType.STOP) {
+//            if (true) {
+            if (crnProtocol.getModeType() != CrnModeType.STOP) {
                 // 鏈変换鍔�
                 if (crnProtocol.getTaskNo() != 0) {
 
                     BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
                     // 鏈夊紓甯�
                     if (latest == null) {
-                        News.warnNoLog(""+mark+" - 1"+" - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏈変换鍔★紝鏈夊紓甯�");
+//                        News.warnNoLog(""+mark+" - 1"+" - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏈変换鍔★紝鏈夊紓甯�");
                         if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
                             WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
                             if (wrkMast == null) {
@@ -1302,6 +1394,174 @@
     }
 
     /**
+     * 杈撻�佺嚎寮傚父
+     */
+    public synchronized void recDevpErr() {
+        Date now = new Date();
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            Integer devpId = devp.getId();
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+            for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
+                Integer siteNo = entry.getKey();
+                StaProtocol staProtocol = entry.getValue();
+                Integer workNo = staProtocol.getWorkNo();
+                // 杈撻�佺嚎鎶ヨ
+                String plcErr = staPlcErr(staProtocol);
+                if (staProtocol.isAutoing()) {
+                    // 鏈変换鍔�
+                    if (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() <= 9000) {
+
+                        // 鑾峰彇杈撻�佺嚎鎶ヨ淇℃伅
+                        BasDevpErrLog latestByTaskNo = basDevpErrLogService.findLatestByTaskNo(siteNo, workNo);
+
+                        // 鏈夊紓甯�
+                        if (latestByTaskNo == null) {
+                            if (!plcErr.equals("")) {
+                                WrkMast wrkMast = wrkMastMapper.selectById(workNo);
+                                if (wrkMast == null) {
+                                    continue;
+                                }
+
+                                BasDevpErrLog basErrLog = new BasDevpErrLog(
+                                        null,    // 缂栧彿
+                                        wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                        now,    // 鍙戠敓鏃堕棿
+                                        null,    // 缁撴潫鏃堕棿
+                                        wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                        wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                        wrkMast.getCrnNo(),    // 鍫嗗灈鏈�
+                                        devpId,    // plc
+                                        wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                        wrkMast.getStaNo(),    // 鐩爣绔�
+                                        siteNo,    // 婧愮珯
+                                        wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                        wrkMast.getBarcode(),    // 鏉$爜
+                                        0,    // 寮傚父鐮�
+                                        plcErr,    // 寮傚父
+                                        1,    // 寮傚父鎯呭喌
+                                        now,    // 娣诲姞鏃堕棿
+                                        null,    // 娣诲姞浜哄憳
+                                        now,    // 淇敼鏃堕棿
+                                        null,    // 淇敼浜哄憳
+                                        "浠诲姟涓紓甯�"    // 澶囨敞
+                                );
+                                if (!basDevpErrLogService.insert(basErrLog)) {
+                                    log.error("杈撻�佺嚎寮傚父淇℃伅鎻掑叆琛╝sr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+                                }
+                            }
+                        } else {
+                            // 寮傚父淇
+                            if (plcErr.equals("")) {
+                                latestByTaskNo.setEndTime(now);
+                                latestByTaskNo.setUpdateTime(now);
+                                latestByTaskNo.setStatus(2);
+                                if (!basDevpErrLogService.updateById(latestByTaskNo)) {
+                                    log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latestByTaskNo);
+                                }
+                            }
+                        }
+                        // 鏃犱换鍔�
+                    } else {
+                        BasDevpErrLog latest = basDevpErrLogService.findLatest(siteNo);
+                        // 鏈夊紓甯�
+                        if (!plcErr.equals("")) {
+                            // 璁板綍鏂板紓甯�
+                            if (latest == null || !latest.getError().equals(plcErr) || latest.getStatus() == 2 ) {
+                                BasDevpErrLog basErrLog = new BasDevpErrLog(
+                                        null,    // 缂栧彿
+                                        null,    // 宸ヤ綔鍙�
+                                        now,    // 鍙戠敓鏃堕棿
+                                        null,    // 缁撴潫鏃堕棿
+                                        null,    // 宸ヤ綔鐘舵��
+                                        null,    // 鍏ュ嚭搴撶被鍨�
+                                        0,    // 鍫嗗灈鏈�
+                                        devpId,    // plc
+                                        null,    // 鐩爣搴撲綅
+                                        null,    // 鐩爣绔�
+                                        siteNo,    // 婧愮珯
+                                        null,    // 婧愬簱浣�
+                                        null,    // 鏉$爜
+                                        0,    // 寮傚父鐮�
+                                        plcErr,    // 寮傚父
+                                        1,    // 寮傚父鎯呭喌
+                                        now,    // 娣诲姞鏃堕棿
+                                        null,    // 娣诲姞浜哄憳
+                                        now,    // 淇敼鏃堕棿
+                                        null,    // 淇敼浜哄憳
+                                        "鏃犱换鍔″紓甯�"    // 澶囨敞
+                                );
+                                if (!basDevpErrLogService.insert(basErrLog)) {
+                                    log.error("杈撻�佺嚎寮傚父璁板綍asr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+                                }
+                            }
+                            // 鏃犲紓甯�
+                        } else {
+                            // 寮傚父淇
+                            if (latest != null && latest.getStatus() == 1) {
+                                latest.setEndTime(now);
+                                latest.setUpdateTime(now);
+                                latest.setStatus(2);
+                                if (!basDevpErrLogService.updateById(latest)) {
+                                    log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latest);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // 鑾峰彇杈撻�佺嚎鎶ヨ
+    public String staPlcErr(StaProtocol staProtocol){
+        Integer siteId = staProtocol.getSiteId();
+        if (staProtocol.getBreakerErr()){
+            return "鏂矾鍣ㄦ晠闅�";
+        }
+        if (staProtocol.getInfraredErr()){
+            return "鍏夌數寮傚父";
+        }
+        if (staProtocol.getOutTimeErr()){
+            return "杩愯瓒呮椂";
+        }
+        if (staProtocol.getSeizeSeatErr()){
+            return "鍗犱綅瓒呮椂";
+        }
+        if (staProtocol.getWrkYgoodsN()){
+            return "鏈変换鍔℃棤璐ф晠闅�";
+        }
+        if (staProtocol.getInverterErr()){
+            return "鍙橀鍣ㄦ晠闅�";
+        }
+        if (staProtocol.getContactErr()){
+            return "鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
+        }
+        if (staProtocol.getUpcontactErr()){
+            return "椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
+        }
+        if (staProtocol.isFrontErr()){
+            return "鍓嶈秴闄�";
+        }
+        if (staProtocol.isBackErr()){
+            return "鍚庤秴闄�";
+        }
+        if (staProtocol.isHighErr()){
+            return "楂樿秴闄�";
+        }
+        if (staProtocol.isLeftErr()){
+            return "宸﹁秴闄�";
+        }
+        if (staProtocol.isRightErr()){
+            return "鍙宠秴闄�";
+        }
+        if (staProtocol.isBarcodeErr() && siteId != 1083 && siteId != 1086 && siteId != 1089 ){
+            return "鎵爜澶辫触";
+        }
+        return "";
+    }
+
+    /**
      * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
      */
     public synchronized void ledExecute(Integer mark) {
@@ -1354,6 +1614,9 @@
                     case 110:
                         ledCommand.setTitle("绌烘澘鍑哄簱");
                         ledCommand.setEmptyMk(true);
+                        break;
+                    case 120:
+                        ledCommand.setTitle("鎵嬪姩杞Щ");
                         break;
                     default:
                         News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
@@ -1459,13 +1722,25 @@
      */
     private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) {
 
+        // 鍙湁208L鑳芥斁11灞�
+        String model = null;
+        if(shallowLoc.getLocSts().equals("F")) {
+            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+            if(locDetl != null && locDetl.getModel() != null) {
+                String matModel = locMastMapper.selectMatMatnrByMaktx(locDetl.getModel());
+                if(matModel != null && matModel.equals("208L")) {
+                    model = "208L";
+                }
+            }
+        }
         try {
             News.warnNoLog(""+mark+"moveLocForDeepLoc"+" - 0"+" - 寮�濮嬫墽琛�:鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)");
             List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
             LocMast loc = null;
             for (Integer row : rows) {
                 if (Utils.isDeepLoc(slaveProperties, row)) {
-                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
+//                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
+                    loc = locMastMapper.queryFreeLocMastNew(row,model);
 
                     if (loc != null) {
                         if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
@@ -1484,12 +1759,12 @@
             if (null == loc) {
                 for (Integer row : rows) {
                     if (Utils.isShallowLoc(slaveProperties, row)) {
-                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
-
+//                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
+                        loc = locMastMapper.queryFreeLocMastNew(row,model);
                         if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
                             String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
                             LocMast deepLoc1 = locMastService.selectById(deepLoc);
-                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) {
+                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("M")&& !deepLoc1.getLocSts().equals("Z")) {
                                 loc = null;
                             }
                         }
@@ -1521,7 +1796,7 @@
                 wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 婊℃澘
                 wrkMast.setPicking("N"); // 鎷f枡
                 wrkMast.setExitMk("N"); // 閫�鍑�
-                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("M") ? "M" : shallowLoc.getLocSts().equals("Z") ? "Z" : "N"); // 绌烘澘
                 wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
                 wrkMast.setLinkMis("N");
                 wrkMast.setAppeTime(new Date());
@@ -1549,7 +1824,7 @@
                     }
                 }
                 // 淇敼婧愬簱浣嶇姸鎬�
-                if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+                if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M") || shallowLoc.getLocSts().equals("Z")) {
                     shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
                     shallowLoc.setModiTime(new Date());
                     if (!locMastService.updateById(shallowLoc)) {
@@ -1669,7 +1944,10 @@
             } else {
                 staProtocol = staProtocol.clone();
             }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9000) {
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && (staProtocol.getWorkNo() <= 9000 || staProtocol.getWorkNo()>=30000)) {
+                if (staProtocol.getSiteId() == 1034 && !staProtocol.isHigh()) { // 1034绌烘瘝鎷栧洖娴佷换鍔¢渶瑕侀珮淇″彿
+                    continue;
+                }
                 // 鏌ヨ宸ヤ綔妗�
                 WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
                 if (wrkMast == null) {
@@ -1708,18 +1986,18 @@
                 if (staProtocol.getSiteId() == 1090 && wrkMast.getStaNo() == 1090) {
                     continue;
                 }
-                if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) {
+                if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15 || (wrkMast.getIoType() == 120 && wrkMast.getWrkSts() == 52)) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) {
                     // 鏈�1090鐨勪换鍔¤烦杩噐gv鍒嗛厤
                     if(wrkMast.getStaNo() == 1090) {
                         DevpThread devpThread2 = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                         StaProtocol staProtocol2 = devpThread2.getStation().get(1090);
                         if(!staProtocol2.isAutoing() || staProtocol2.isLoading() || staProtocol2.getWorkNo() != 0) {
-                            log.info("鍘诲紓甯稿彛鐩爣绔欑偣锛岄潪鑷姩锛屾湁鐗╋紝宸ヤ綔鍙蜂负锛歿}",staProtocol2.getWorkNo());
+                            log.info("{}鍘诲紓甯稿彛鐩爣绔欑偣锛岃嚜鍔�:{}锛屾湁鐗�:{}锛屽伐浣滃彿涓猴細{}",wrkMast.getWrkNo(),staProtocol2.isAutoing(),staProtocol2.isLoading(),staProtocol2.getWorkNo());
                             continue;
                         }
-                        int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().where("sta_no = 1090 and wrk_sts in (9,10)"));
+                        int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().where("sta_no = 1090 AND (wrk_sts IN (9,10) OR (wrk_sts = 2 AND rgv_finish_time IS NOT NULL))"));
                         if (count > 0) {
-                            log.info("鍘诲紓甯稿彛锛屼絾鏄墠闈㈡湁鍘诲紓甯稿彛浠诲姟鏁帮細{}",count);
+                            log.info("{}鍘诲紓甯稿彛锛屼絾鏄墠闈㈡湁鍘诲紓甯稿彛浠诲姟鏁帮細{}",wrkMast.getWrkNo(),count);
                             continue;
                         }
                     }
@@ -1738,7 +2016,7 @@
     /**
      * rgv鏀捐揣瀹屾垚锛岀粰杈撻�佺嚎涓嬪彂浠诲姟
      */
-    public synchronized void rgvToDev() {
+    public synchronized void rgvToDev() throws InterruptedException {
         for (Integer site : rgvConnectionSiteList) {
             // 杈撻�佺嚎plc缂栧彿
             Integer devpPlcId = site < 1044 ? 1 : site <= 1090 ? 2 : 3;
@@ -1768,7 +2046,7 @@
 //                    }
                     wrkMast.setModiTime(new Date());
                     wrkMastService.updateById(wrkMast);
-                } else if(wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043)) {
+                } else if(wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1031 || wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043)) {
                     if(wrkMast.getWrkSts() != 2 ) {
                         log.warn("rgv鏀捐揣瀹屾垚101锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}", wrkMast.getRgvNo(), wrkMast.getWrkNo(), wrkMast.getWrkSts());
                         continue;
@@ -1776,12 +2054,20 @@
                     wrkMast.setWrkSts(15L);
                     wrkMast.setModiTime(new Date());
                     wrkMastService.updateById(wrkMast);
-                } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035)) {
+                } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035 || wrkMast.getStaNo() == 1024)) {
                     if(wrkMast.getWrkSts() != 2 ){
                         log.warn("rgv鏀捐揣瀹屾垚110锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
                         continue;
                     }
                     wrkMast.setWrkSts(15L);
+                    wrkMast.setModiTime(new Date());
+                    wrkMastService.updateById(wrkMast);
+                } else if(wrkMast.getIoType() == 120) {
+                    if(wrkMast.getWrkSts() != 53 ){
+                        log.warn("rgv鏀捐揣瀹屾垚120锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
+                        continue;
+                    }
+                    wrkMast.setWrkSts(54L);
                     wrkMast.setModiTime(new Date());
                     wrkMastService.updateById(wrkMast);
                 }
@@ -1790,10 +2076,11 @@
                 staProtocol.setWorkNo(staProtocol.getHideWorkNo());
                 staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                 if (!MessageQueue.offer(SlaveType.Devp, devpPlcId, new Task(2, staProtocol))) {
-                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护澶辫触!,plc id:{},绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getStaNo(), staProtocol.getWorkNo(), staProtocol.getStaNo());
+                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护澶辫触!,plc id:{},绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getSiteId(), staProtocol.getWorkNo(), staProtocol.getStaNo());
                 } else {
-                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护鎴愬姛plc id:{}!,绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getStaNo(), staProtocol.getWorkNo(), staProtocol.getStaNo());
+                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护鎴愬姛plc id:{}!,绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getSiteId(), staProtocol.getWorkNo(), staProtocol.getStaNo());
                 }
+                Thread.sleep(300);
             }
         }
     }
@@ -1815,7 +2102,7 @@
             if (wrkMast == null) {
                 log.error("寮傚父鍙e叆搴撲换鍔″彿鏃犱换鍔�:{}", staProtocol.getWorkNo());
                 return;
-            } else if (wrkMast.getLocNo() != null) {
+            } else if (wrkMast.getLocNo() != null && wrkMast.getLocNo().length() == 7) {
 //                log.info("寮傚父鍙e叆搴撳簱浣嶅凡鍒嗛厤:{}", wrkMast.getLocNo());
                 return;
             } else if(wrkMast.getStaNo() != 1090) {
@@ -1949,7 +2236,7 @@
     }
 
     public synchronized void autoOutEmptyBucket() {
-        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","autoOutEmptyBucket").eq("status",1));
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "autoOutEmptyBucket").eq("status", 1));
         if (config == null || Cools.isEmpty(config.getValue())) {
             return;
         }
@@ -1958,20 +2245,106 @@
         String[] split = config.getValue().split("=");
 
         for (SearchLocParam.WantBucket wantBucket : getWantBucketFlag()) {
-            if (wantBucket.getBucketType() != 0) { // 缃愯绾挎湁瑕佹《淇″彿
+            if (wantBucket.getBucketType() != 0 && wantBucket.getWantBucketCount() > 0) { // 缃愯绾挎湁瑕佹《淇″彿+瑕佹墭鏁颁笉涓�0
                 boolean flag = true; // 鏄惁闇�瑕佽嚜鍔ㄨˉ锛宼rue涓嶉渶瑕侊紝false闇�瑕�
-                for(String item: split) {
-                    if(String.valueOf(wantBucket.getSite()).equals(item)) {
+                for (String item : split) {
+                    if (String.valueOf(wantBucket.getSite()).equals(item)) {
                         flag = false;
                         break;
                     }
                 }
-                if(flag) {
+                if (flag) {
                     return;
                 }
                 // <4 < 2 < 4
                 int count = wrkMastMapper.selectInGzxCount(wantBucket.getSite());
-                if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) {
+
+                if (wantBucket.getWantBucketCount() == 1) { // 鏈�鍚庡墿涓�鎷栫殑鏃跺��
+                    log.info("{}鑷姩琛ョ┖妗跺墿鏈�鍚庝竴鎵橈紝缃愯绾胯妗跺瀷淇℃伅锛歿},姝e湪鎵ц浠诲姟鏁帮細{}", wantBucket.getSite(), wantBucket.getBucketType(), count);
+                    if (wantBucket.getSite() == 1071 && count <= 3 || wantBucket.getSite() == 1064 && count <= 1 || wantBucket.getSite() == 1078 && count <= 3) { // 鍙互鍑轰竴涓�
+                        List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType());
+                        if (locDetlList.size() == 0) {
+                            log.warn("鑷姩鍑虹┖妗舵渶鍚庝竴涓紝搴撳瓨鏃犳暟鎹�");
+                            break;
+                        }
+                        Map<String, LocDetl> locDetlMap = locDetlList.stream().collect(Collectors.toMap(LocDetl::getLocNo, locDetl -> locDetl));
+                        LocDetl locDetlSta = null;
+                        for (LocDetl locDetl : locDetlList) {
+                            String loc1 = locDetl.getLocNo(); // 褰撳墠搴撲綅
+                            String row = loc1.substring(0, 2);
+                            String rowNew = ""; // 瀵瑰簲搴撲綅
+                            switch (row) {
+                                case "09":
+                                    rowNew = "10";
+                                    break;
+                                case "10":
+                                    rowNew = "09";
+                                    break;
+                                case "11":
+                                    rowNew = "12";
+                                    break;
+                                case "12":
+                                    rowNew = "11";
+                                    break;
+                                default:
+                            }
+                            String locNoNew = rowNew + loc1.substring(2);
+                            LocDetl locDetl1 = locDetlMap.get(locNoNew);
+                            if (locDetl1 == null) {
+                                locDetlSta = locDetl;
+                                break;
+                            }
+                        }
+                        // 娌℃湁鍗曠殑锛屾繁娴呭簱浣嶉兘鏈夛紝鍏堝彇娴呭簱浣�
+                        if (locDetlSta == null) {
+                            Optional<LocDetl> first = locDetlList.stream().filter(locDetl -> locDetl.getLocNo().startsWith("10") || locDetl.getLocNo().startsWith("11")).findFirst();
+                            if (first.isPresent()) {
+                                locDetlSta = first.get();
+                            }
+                        }
+                        if (locDetlSta != null) {
+                            try {
+                                StockOutParam param = new StockOutParam();
+                                param.setOutSite(wantBucket.getSite());
+                                List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+                                StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl();
+                                locDetl2.setLocNo(locDetlSta.getLocNo());
+                                locDetl2.setMatnr(locDetlSta.getMatnr());
+                                locDetl2.setBatch(locDetlSta.getBatch());
+                                locDetl2.setBrand(locDetlSta.getBrand());
+                                locDetl2.setCount(locDetlSta.getAnfme());
+                                locDetl2.setBoxType1(locDetlSta.getBoxType1());
+                                locDetl2.setBoxType2(locDetlSta.getBoxType2());
+                                locDetl2.setBoxType3(locDetlSta.getBoxType3());
+                                locDetl2.setStandby1(locDetlSta.getStandby1());
+                                locDetl2.setStandby2(locDetlSta.getStandby2());
+                                locDetl2.setStandby3(locDetlSta.getStandby3());
+                                locDetls.add(locDetl2);
+                                param.setLocDetls(locDetls);
+                                String response = new HttpHandler.Builder()
+                                        .setUri(wmsUrl)
+                                        .setPath("/rpc/autoOutEmptyBucket")
+                                        .setJson(JSON.toJSONString(param))
+                                        .build()
+                                        .doPost();
+                                log.info("鏈�鍚庝竴涓嚜鍔ㄥ嚭绌烘《璇锋眰wms鍘熷杩斿洖锛�" + response);
+                                JSONObject jsonObject = JSON.parseObject(response);
+                                if (jsonObject.getInteger("code").equals(200)) {
+                                    decreaseWantBucketCount(wantBucket.getSite(), 1);
+                                    log.info("鏈�鍚庝竴涓嚜鍔ㄥ嚭绌烘《鎴愬姛:{}", wantBucket.getSite());
+                                    return;
+                                } else {
+                                    News.error("鏈�鍚庝竴涓嚜鍔ㄧ┖妗跺嚭搴�" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            }
+                        }
+
+                    }
+                } else if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) { // 鍙互鍑轰袱涓�
+                    log.info("{}鑷姩琛ョ┖妗讹紝缃愯绾胯妗跺瀷淇℃伅锛歿},姝e湪鎵ц浠诲姟鏁帮細{}", wantBucket.getSite(), wantBucket.getBucketType(), count);
                     // 鍒ゆ柇搴撻噷鏈夋棤绌烘《缁�
                     List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType());
                     for (int i = 0; i < locDetlList.size(); i++) {
@@ -2033,16 +2406,58 @@
                                     log.info("鑷姩鍑虹┖妗惰姹倃ms鍘熷杩斿洖锛�" + response);
                                     JSONObject jsonObject = JSON.parseObject(response);
                                     if (jsonObject.getInteger("code").equals(200)) {
-                                        log.info("鑷姩鍑虹┖妗舵垚鍔�:{}",wantBucket.getSite());
+                                        decreaseWantBucketCount(wantBucket.getSite(), 2);
+                                        log.info("鑷姩鍑虹┖妗舵垚鍔�:{}", wantBucket.getSite());
                                         return;
                                     } else {
-                                        News.error("鑷姩绌烘《鍑哄簱" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                                        News.error("鑷姩绌烘《鍑哄簱" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
                                     }
                                 } catch (Exception e) {
                                     e.printStackTrace();
                                     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                 }
                             }
+                        }
+                    }
+                    if (locDetlList.size() > 0) {
+                        log.info("娌℃湁鎴愬鐨勭┖妗剁粍锛屽彧鑳戒竴涓竴涓嚭");
+                        try {
+                            LocDetl locDetl = locDetlList.get(0);
+                            StockOutParam param = new StockOutParam();
+                            param.setOutSite(wantBucket.getSite());
+                            List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+                            StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl();
+                            locDetl2.setLocNo(locDetl.getLocNo());
+                            locDetl2.setMatnr(locDetl.getMatnr());
+                            locDetl2.setBatch(locDetl.getBatch());
+                            locDetl2.setBrand(locDetl.getBrand());
+                            locDetl2.setCount(locDetl.getAnfme());
+                            locDetl2.setBoxType1(locDetl.getBoxType1());
+                            locDetl2.setBoxType2(locDetl.getBoxType2());
+                            locDetl2.setBoxType3(locDetl.getBoxType3());
+                            locDetl2.setStandby1(locDetl.getStandby1());
+                            locDetl2.setStandby2(locDetl.getStandby2());
+                            locDetl2.setStandby3(locDetl.getStandby3());
+                            locDetls.add(locDetl2);
+                            param.setLocDetls(locDetls);
+                            String response = new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/autoOutEmptyBucket")
+                                    .setJson(JSON.toJSONString(param))
+                                    .build()
+                                    .doPost();
+                            log.info("鑷姩鍑虹┖妗惰姹倃ms鍘熷杩斿洖锛�" + response);
+                            JSONObject jsonObject = JSON.parseObject(response);
+                            if (jsonObject.getInteger("code").equals(200)) {
+                                decreaseWantBucketCount(wantBucket.getSite(), 1);
+                                log.info("鑷姩鍑虹┖妗舵垚鍔�:{}", wantBucket.getSite());
+                                return;
+                            } else {
+                                News.error("鑷姩绌烘《鍑哄簱" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         }
                     }
                 }
@@ -2198,4 +2613,60 @@
             }
         }
     }
+
+    /**
+     * 鎵嬪姩绔欎綅杞Щ
+     */
+    public synchronized void manualStationTransfer() {
+        WrkMast wrkMast = wrkMastMapper.selectByIoTypeAndWrkSts(120, 51L);
+
+        if (Cools.isEmpty(wrkMast)) {
+            return;
+        }
+        int devpId;
+        if (wrkMast.getSourceStaNo() < 1044) {
+            devpId = 1;
+        } else if (wrkMast.getSourceStaNo() < 1091) {
+            devpId = 2;
+        } else {
+            devpId = 3;
+        }
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
+        try {
+            StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getSourceStaNo());
+
+            if (staProtocol == null) {
+                wrkMast.setIoTime(new Date());
+                wrkMastService.updateById(wrkMast);
+                return;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+
+            // 绔欑偣鏉′欢鍒ゆ柇
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) {
+                // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                StaProtocol staProtocolNew = new StaProtocol();
+                staProtocolNew.setSiteId(staProtocol.getSiteId());
+                staProtocolNew.setWorkNo(wrkMast.getWrkNo());
+                staProtocolNew.setStaNo(crnOutSiteToRgvSite2.get(wrkMast.getSourceStaNo()));
+                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocolNew));
+                log.info("鎵嬪姩绔欎綅杞Щ杈撻�佺嚎涓嬪彂锛�" + staProtocolNew.getWrkNo() + "," + staProtocolNew.getSiteId());
+                if (!result) {
+                    News.errorNoLog("" + " - 1" + " - 鏇存柊plc绔欑偣淇℃伅澶辫触");
+                    throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                }
+
+                wrkMast.setIoTime(new Date());
+                wrkMast.setWrkSts(52L);
+                wrkMastService.updateById(wrkMast);
+            } else {
+                wrkMast.setIoTime(new Date());
+                wrkMastService.updateById(wrkMast);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }

--
Gitblit v1.9.1