From 320efd494252d86cb61fc0961ecc3289266e933f Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期二, 13 一月 2026 14:22:03 +0800
Subject: [PATCH] 库位移转

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |  257 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 166 insertions(+), 91 deletions(-)

diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index f80a683..aef2d1d 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -222,6 +222,16 @@
                                 ledThread.errorReset();
                             }
                         } else {
+                            // WMS杩斿洖閿欒鏃讹紝鍏堟鏌ユ槸鍚︽槸鎷f枡鍏ュ簱锛屽鏋滄槸鍒欒烦杩囧洖閫�锛岃鎷f枡鍏ュ簱娴佺▼澶勭悊
+                            WrkMast pickWrkMast = wrkMastMapper.selectPickStep(barcode);
+                            if (pickWrkMast != null) {
+                                // 鏄嫞鏂欏叆搴擄紝璺宠繃鍥為��锛岃鎷f枡鍏ュ簱娴佺▼澶勭悊
+                                News.info("鏉$爜{}鏄嫞鏂欏叆搴擄紙宸ヤ綔鍙凤細{}锛屽伐浣滅姸鎬侊細{}锛屽叆鍑哄簱绫诲瀷锛歿}锛夛紝璺宠繃鏅�氬叆搴撳洖閫�锛屼氦鐢辨嫞鏂欏叆搴撴祦绋嬪鐞�", 
+                                        barcode, pickWrkMast.getWrkNo(), pickWrkMast.getWrkSts(), pickWrkMast.getIoType());
+                                continue;
+                            }
+                            
+                            // 涓嶆槸鎷f枡鍏ュ簱锛屾墽琛屽洖閫�
                             staProtocol.setWorkNo(wrkNo);
                             wrkNo++;
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -277,26 +287,46 @@
                     staProtocol = staProtocol.clone();
                 }
 
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) {
+                if (staProtocol.isAutoing() //鑷姩
+                        && staProtocol.isLoading() //鏈夌墿
+                        && staProtocol.isInEnable() //鍙叆
+                        && staProtocol.isPakMk() //閿佸畾鏍囪
+//                        && staProtocol.getWorkNo() == 9999
+
+                ) {
                     News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛�");
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                     if (wrkMast == null) {
                         // 鏃犳嫞鏂欐暟鎹�
                         continue;
                     }
-                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
-                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                    // 鍒ゆ柇宸ヤ綔妗g被鍨嬶細鏈浆鎹㈢姸鎬�(103/104/107)鎴栧凡杞崲鐘舵��(53/54/57)
+                    boolean isValidIoType = (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 104 || wrkMast.getIoType() == 107)
+                            || (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57);
+                    if (!isValidIoType || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                         continue;
                     }
 
+                    // 鍒ゆ柇宸ヤ綔妗f槸鍚﹀凡杞崲锛氬凡杞崲鐘舵��(53/54/57)鎴栨湭杞崲鐘舵��(103/104/107)
+                    boolean isConverted = (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57);
+                    
+                    // 瀵逛簬宸茶浆鎹㈢姸鎬佺殑宸ヤ綔妗o紝妫�鏌ユ槸鍚﹀凡缁忎笅鍙戣繃锛堥伩鍏嶉噸澶嶅鐞嗭級
+                    if (isConverted && staProtocol.getWorkNo() != null && staProtocol.getWorkNo().equals(wrkMast.getWrkNo())) {
+                        // 宸ヤ綔鍙峰凡鍖归厤锛岃鏄庡凡缁忎笅鍙戣繃锛岃烦杩�
+                        News.info("鎷f枡鍏ュ簱宸ヤ綔妗}宸蹭笅鍙戯紝璺宠繃閲嶅澶勭悊", wrkMast.getWrkNo());
+                        continue;
+                    }
+                    
+                    Integer typeNo = isConverted ? wrkMast.getIoType() : (wrkMast.getIoType() - 50);
+                    
                     // 鑾峰彇鐩爣绔�
                     Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-                            .eq("type_no", wrkMast.getIoType() - 50)
+                            .eq("type_no", typeNo)
                             .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
                             .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
                     StaDesc staDesc = staDescService.selectOne(wrapper);
                     if (Cools.isEmpty(staDesc)) {
-                        News.error(""+mark+" - 2"+" - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
+                        News.error(""+mark+" - 2"+" - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", typeNo, pickSta.getStaNo(), wrkMast.getCrnNo());
                         staProtocol.setWorkNo(wrkNo);
                         wrkNo++;
                         staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()-(short)1));
@@ -313,6 +343,9 @@
                         continue;
                     }
 
+                    // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+                    Integer staNo = staDesc.getCrnStn();
+                    
                     try {
                         // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
                         if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
@@ -324,28 +357,32 @@
                         }
 
                         Date now = new Date();
-                        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
-                        Integer staNo = staDesc.getCrnStn();
                         // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
                         wrkMast.setIoTime(now);
-                        wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
-                        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-                        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
-                        wrkMast.setStaNo(staNo); // 鐩爣绔�
-                        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
-                        wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+                        // 濡傛灉鏈浆鎹紝鍒欒浆鎹负鍏ュ簱绫诲瀷锛涘鏋滃凡杞崲锛屽垯淇濇寔涓嶅彉
+                        if (!isConverted) {
+                            wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+                            wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+                            wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+                            wrkMast.setStaNo(staNo); // 鐩爣绔�
+                            wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+                            wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+                        }
+                        // 瀵逛簬宸茶浆鎹㈢姸鎬侊紝鍙洿鏂版椂闂达紝涓嶄慨鏀瑰叾浠栧瓧娈碉紙閬垮厤瑕嗙洊宸叉湁淇℃伅锛�
                         wrkMast.setModiTime(now);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
                             throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
                         }
                         // 鏇存柊鏄庣粏妗o_time (鍘嗗彶妗e叧鑱斾娇鐢級
                         wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now);
-                        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+                        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴擄紙濡傛灉搴撲綅鐘舵�佷笉鏄疩锛�
                         LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
-                        locMast.setLocSts("Q");
-                        locMast.setModiTime(new Date());
-                        if (!locMastService.updateById(locMast)) {
-                            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+                        if (locMast != null && !"Q".equals(locMast.getLocSts())) {
+                            locMast.setLocSts("Q");
+                            locMast.setModiTime(new Date());
+                            if (!locMastService.updateById(locMast)) {
+                                throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+                            }
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -353,12 +390,14 @@
                         continue;
                     }
 
-                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护锛堝弬鑰冨叏鐗堝叆搴撶殑鏂瑰紡锛�
                     staProtocol.setWorkNo(wrkMast.getWrkNo());
-                    staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
+                    // 瀵逛簬宸茶浆鎹㈢姸鎬侊紝浣跨敤宸ヤ綔妗d腑宸叉湁鐨勭洰鏍囩珯锛涘浜庢湭杞崲鐘舵�侊紝浣跨敤鏂拌绠楃殑鐩爣绔�
+                    Integer targetStaNo = isConverted ? wrkMast.getStaNo() : staNo;
+                    staProtocol.setStaNo(targetStaNo.shortValue()); // 鐩爣绔欙細鍫嗗灈鏈虹珯鐐瑰彿
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                    log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
+                    log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+targetStaNo);
                     if (!result) {
                         News.error(""+mark+" - 3"+" - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                     }
@@ -380,65 +419,87 @@
     public synchronized void crnStnToOutStn(Integer mark) {
 
         for (CrnSlave crnSlave : slaveProperties.getCrn()) {
-            // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
-            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
-                // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
-                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
-                    // 鏌ヨ宸ヤ綔妗�
-                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
-                    if (wrkMast == null) {
-                        continue;
-                    }
-                    // 鍒ゆ柇宸ヤ綔妗f潯浠�
-                    if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
-                        continue;
-                    }
-                    // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
-                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
-                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-                    if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
-                        // 绉诲姩涓�
-                        continue;
-                    }
-                    //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
-                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
-                            && crnProtocol.statusType == CrnStatusType.WAITING
-                            && crnProtocol.forkPosType == CrnForkPosType.HOME) {
-
-                        // 鍛戒护涓嬪彂鍖�.鏇存柊宸ヤ綔妗g姸鎬佷负14 涓嬪彂绔欑偣淇℃伅--------------------------------------------------------------------------
-                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-                        wrkMast.setWrkSts(14L);
-                        staProtocol.setWorkNo(wrkMast.getWrkNo());
-
-                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
-                            continue;
-                        }
-                        wrkMast.setCrnEndTime(new Date());
-                        if (wrkMastMapper.updateById(wrkMast) != 0) {
-                            // 澶嶄綅鍫嗗灈鏈�
-                            News.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
-                            crnThread.setResetFlag(true);
-                        } else {
-                            News.error(""+mark+" - 1"+" - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
-                        }
-
-                    }else {
-                        News.errorNoLog(""+mark+" - 6"+" - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
-                                +" 鍫嗗灈鏈虹姸鎬侊細"+crnProtocol.modeType+"==鑷姩AUTO锛�" + CrnModeType.AUTO
-                                +"銆佸爢鍨涙満浠诲姟鍙凤細"+crnProtocol.getTaskNo()+"==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
-                                +"銆佺姸鎬佹灇涓撅細"+crnProtocol.statusType+"==WAITING锛�10 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
-                                +"銆佽揣鍙変綅缃細"+crnProtocol.forkPosType+"==HOME锛�0  // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
-                    }
-
-                }
+            try {
+                // 姣忓彴鍫嗗灈鏈虹殑鎵�鏈夊嚭搴撶珯澶勭悊鍦ㄥ悓涓�涓簨鍔′腑鎵ц锛屽揩閫熸彁浜ら噴鏀鹃攣
+                mainService.processCrnStnToOutStnForCrn(crnSlave, mark);
+            } catch (Exception e) {
+                News.error(""+mark+" - crnStnToOutStn"+" - 澶勭悊鍫嗗灈鏈簕}鏃跺彂鐢熷紓甯�", crnSlave.getId(), e);
+                // 缁х画澶勭悊涓嬩竴鍙板爢鍨涙満锛屼笉涓柇鏁翠釜娴佺▼
             }
+        }
+    }
+
+    /**
+     * 澶勭悊鍗曞彴鍫嗗灈鏈虹殑鎵�鏈夊嚭搴撶珯鎿嶄綔锛堜娇鐢ㄧ嫭绔嬩簨鍔★紝蹇�熸彁浜ら噴鏀鹃攣锛�
+     */
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    public void processCrnStnToOutStnForCrn(CrnSlave crnSlave, Integer mark) {
+        // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+        for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
+            mainService.processCrnStnToOutStn(crnStn, mark);
+        }
+    }
+
+    /**
+     * 澶勭悊鍗曚釜鍫嗗灈鏈哄嚭搴撶珯鐨勫嚭搴撴搷浣滐紙鏃犱簨鍔★紝浜嬪姟鐢变笂灞傛柟娉曠鐞嗭級
+     */
+    private void processCrnStnToOutStn(CrnSlave.CrnStn crnStn, Integer mark) {
+        // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+        StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+        if (staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
+        if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+            // 鏌ヨ宸ヤ綔妗�
+            WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+            if (wrkMast == null) {
+                return;
+            }
+            // 鍒ゆ柇宸ヤ綔妗f潯浠�
+            if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+                return;
+            }
+            // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
+                // 绉诲姩涓�
+                return;
+            }
+            //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+            if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
+                    && crnProtocol.statusType == CrnStatusType.WAITING
+                    && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+
+                // 鍛戒护涓嬪彂鍖�.鏇存柊宸ヤ綔妗g姸鎬佷负14 涓嬪彂绔欑偣淇℃伅--------------------------------------------------------------------------
+                staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                wrkMast.setWrkSts(14L);
+                staProtocol.setWorkNo(wrkMast.getWrkNo());
+
+                if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                    return;
+                }
+                wrkMast.setCrnEndTime(new Date());
+                if (wrkMastMapper.updateById(wrkMast) != 0) {
+                    // 澶嶄綅鍫嗗灈鏈�
+                    News.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
+                    crnThread.setResetFlag(true);
+                } else {
+                    News.error(""+mark+" - 1"+" - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                    throw new CoolException("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触");
+                }
+
+            }else {
+                News.errorNoLog(""+mark+" - 6"+" - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
+                        +" 鍫嗗灈鏈虹姸鎬侊細"+crnProtocol.modeType+"==鑷姩AUTO锛�" + CrnModeType.AUTO
+                        +"銆佸爢鍨涙満浠诲姟鍙凤細"+crnProtocol.getTaskNo()+"==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
+                        +"銆佺姸鎬佹灇涓撅細"+crnProtocol.statusType+"==WAITING锛�10 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
+                        +"銆佽揣鍙変綅缃細"+crnProtocol.forkPosType+"==HOME锛�0  // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
+            }
+
         }
     }
 
@@ -451,7 +512,7 @@
             for (CrnSlave crn : slaveProperties.getCrn()) {
                 try {
                     // 姣忎釜鍫嗗灈鏈虹殑澶勭悊鍦ㄧ嫭绔嬩簨鍔′腑鎵ц锛屽揩閫熸彁浜ら噴鏀鹃攣
-                    processCrnIo(crn, mark);
+                    mainService.processCrnIo(crn, mark);
                 } catch (Exception e) {
                     News.error(""+mark+" - crnIoExecute"+" - 澶勭悊鍫嗗灈鏈簕}鏃跺彂鐢熷紓甯�", crn.getId(), e);
                     // 缁х画澶勭悊涓嬩竴涓爢鍨涙満锛屼笉涓柇鏁翠釜娴佺▼
@@ -459,7 +520,7 @@
             }
         } catch (Exception e) {
             News.error(""+mark+" - crnIoExecute"+" - 鎵ц鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鏃跺彂鐢熷紓甯�", e);
-            }
+        }
     }
 
     /**
@@ -713,15 +774,15 @@
                     outStationAvailable =
                             //鑷姩
                             staProtocol.isAutoing()
-                            //!鏈夌墿
-                            && !staProtocol.isLoading()
-                            //鑳藉嚭
-                            && staDetl.getCanouting() != null
-                            && staDetl.getCanouting().equals("Y")
-                            //宸ヤ綔鍙�
-                            && staProtocol.getWorkNo() == 0
-                            //鍙嚭
-                            && staProtocol.isOutEnable();
+                                    //!鏈夌墿
+                                    && !staProtocol.isLoading()
+                                    //鑳藉嚭
+                                    && staDetl.getCanouting() != null
+                                    && staDetl.getCanouting().equals("Y")
+                                    //宸ヤ綔鍙�
+                                    && staProtocol.getWorkNo() == 0
+                                    //鍙嚭
+                                    && staProtocol.isOutEnable();
                 }
                 // 鍑哄簱绔欏彲鐢ㄦ椂缁х画鎵ц
                 if (outStationAvailable) {
@@ -936,9 +997,16 @@
                         continue;
                     }
                     // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+                    // 鏀寔鏅�氬叆搴�(io_type=1/10)鍜屾嫞鏂欏叆搴�(io_type=53/54/57)鐨勭姸鎬�3瀹屾垚纭
+                    // 鏀寔搴撲綅绉昏浆(io_type=11)鐨勭姸鎬�12瀹屾垚纭
+                    boolean canFinish = (wrkMast.getWrkSts() == 3) || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11);
+                    if (canFinish) {
+                        News.info(""+mark+" - 1"+" - 鍏ュ簱浠诲姟瀹屾垚纭锛氬伐浣滃彿={}锛屽伐浣滅姸鎬�={}锛屽叆鍑哄簱绫诲瀷={}锛屽崟鎹紪鍙�={}锛屾墭鐩樼爜={}", 
+                                wrkMast.getWrkNo(), wrkMast.getWrkSts(), wrkMast.getIoType(), wrkMast.getSheetNo(), wrkMast.getBarcode());
                         wrkMast.setWrkSts(4L);
                     } else {
+                        News.warn(""+mark+" - 1"+" - 鍏ュ簱浠诲姟鐘舵�佷笉绗﹀悎瀹屾垚鏉′欢锛氬伐浣滃彿={}锛屽伐浣滅姸鎬�={}锛屽叆鍑哄簱绫诲瀷={}锛屽崟鎹紪鍙�={}锛岃烦杩�", 
+                                wrkMast.getWrkNo(), wrkMast.getWrkSts(), wrkMast.getIoType(), wrkMast.getSheetNo());
                         continue;
                     }
                     Date now = new Date();
@@ -949,6 +1017,13 @@
                         // 鍫嗗灈鏈哄浣�
                         News.warnNoLog(""+mark+" - 2"+" - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
                         crnThread.setResetFlag(true);
+                        
+                        // 瀵逛簬鎷f枡鍏ュ簱锛坕o_type=53/54/57锛夛紝璁板綍瀹屾垚淇℃伅锛屾柟渚縒MS绯荤粺鏌ヨ璁㈠崟鐘舵��
+                        if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57) {
+                            News.info(""+mark+" - 2"+" - 銆愭嫞鏂欏叆搴撳畬鎴愩�戝伐浣滃彿={}锛屽叆鍑哄簱绫诲瀷={}锛屽伐浣滅姸鎬�={}锛屽崟鎹紪鍙�={}锛屾墭鐩樼爜={}锛屽簱浣嶅彿={}锛屽畬鎴愭椂闂�={}", 
+                                    wrkMast.getWrkNo(), wrkMast.getIoType(), wrkMast.getWrkSts(), 
+                                    wrkMast.getSheetNo(), wrkMast.getBarcode(), wrkMast.getLocNo(), now);
+                        }
                     }
                 }
 

--
Gitblit v1.9.1