From 74863c38a407b1e0f36250dfa0c63e5da7fe5f66 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 19 一月 2026 18:06:51 +0800
Subject: [PATCH] WMS功能完善

---
 src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java |  310 ++++++++++++++++++++-------------------------------
 1 files changed, 122 insertions(+), 188 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
index a983123..1b0199b 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
+import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.TaskMapper;
@@ -14,6 +15,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
@@ -35,6 +37,9 @@
     @Autowired
     private TaskDetlLogService taskDetlLogService;
 
+    @Resource
+    private BasStationService basStationService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void completeWrkMast(String workNo, Long userId) {
@@ -42,17 +47,37 @@
         if (Cools.isEmpty(wrkMast)) {
             throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
         }
-        if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
-            throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
-        }
-        // 鍏ュ簱 + 搴撲綅杞Щ
-        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) {
-            wrkMast.setWrkSts(4L);
-            // 鍑哄簱
-        } else if (wrkMast.getWrkSts() > 10) {
-            wrkMast.setWrkSts(14L);
-        }
         Date now = new Date();
+        // 缁堢偣鏄帴椹充綅 鍙兘瀹屾垚305
+        if (wrkMast.getStaNo().startsWith("A")) {
+            if(wrkMast.getWrkSts() == 305) {
+                throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+            }
+            wrkMast.setWrkSts(305L);
+            // 缁戝畾绔欑偣
+            BasStation basStation = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getStaNo()));
+            if (basStation.getBarcode().equals(wrkMast.getBarcode())) {
+                basStation.setLocSts("F");
+                basStation.setModiTime(now);
+                basStation.setModiUser(userId);
+                basStationService.updateById(basStation);
+            }
+        } else {
+            // 璧风偣鏄帴椹充綅 鍙兘瀹屾垚304
+            if (wrkMast.getWrkSts() == 304) {
+                throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+            }
+            wrkMast.setWrkSts(304L);
+            // 瑙g粦绔欑偣
+            BasStation basStation = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getSourceStaNo()));
+            if (basStation.getBarcode().equals(wrkMast.getBarcode())) {
+                basStation.setLocSts("O");
+                basStation.setModiTime(now);
+                basStation.setModiUser(userId);
+                basStationService.updateById(basStation);
+            }
+        }
+
         wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
         wrkMast.setCrnEndTime(now);
         wrkMast.setModiTime(now);
@@ -64,61 +89,68 @@
         }
     }
 
+    @Resource
+    private MobileService mobileService;
+
     @Override
     @Transactional
     public void pickWrkMast(String workNo, Long userId) {
-        Task wrkMast = this.selectById(workNo);
+        Task wrkMast = this.selectOne(new EntityWrapper<Task>().eq("wrk_no", workNo));
         if (Cools.isEmpty(wrkMast)) {
             throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
         }
-        // 鍏ュ嚭搴撶被鍨嬪垽鏂�
-        if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
-            throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�");
+        R r = mobileService.djReturn(wrkMast.getBarcode());
+        if(!r.get("code").equals(200)) {
+            throw new CoolException(""+r.get("msg"));
         }
-        // 宸ヤ綔鐘舵�佸垽鏂�
-        if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
-        }
-        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
-//            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
+//        // 鍏ュ嚭搴撶被鍨嬪垽鏂�
+//        if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
+//            throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�");
 //        }
-        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-        if (!taskLogService.save(wrkMast.getWrkNo())) {
-            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-        }
-        // 鑾峰彇鐩爣绔�
-//        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-//                .eq("type_no", wrkMast.getIoType() - 50)
-//                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
-//                .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
-//        StaDesc staDesc = staDescService.selectOne(wrapper);
-//        if (Cools.isEmpty(staDesc)) {
-//            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+//        // 宸ヤ綔鐘舵�佸垽鏂�
+//        if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
+//            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
 //        }
-        Date now = new Date();
-        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
-//        Integer staNo = staDesc.getCrnStn();
-        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-        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);
-        wrkMast.setModiUser(userId);
-        if (!this.updateById(wrkMast)) {
-            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-        }
-        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
-        LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
-        locMast.setLocSts("Q");
-        locMast.setModiTime(now);
-        locMast.setModiUser(userId);
-        if (!locCacheService.updateById(locMast)) {
-            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
-        }
+//        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+////        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
+////            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
+////        }
+//        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+//        if (!taskLogService.save(wrkMast.getWrkNo())) {
+//            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+//        }
+//        // 鑾峰彇鐩爣绔�
+////        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+////                .eq("type_no", wrkMast.getIoType() - 50)
+////                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+////                .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
+////        StaDesc staDesc = staDescService.selectOne(wrapper);
+////        if (Cools.isEmpty(staDesc)) {
+////            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+////        }
+//        Date now = new Date();
+//        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+////        Integer staNo = staDesc.getCrnStn();
+//        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+//        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);
+//        wrkMast.setModiUser(userId);
+//        if (!this.updateById(wrkMast)) {
+//            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+//        }
+//        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+//        LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
+//        locMast.setLocSts("Q");
+//        locMast.setModiTime(now);
+//        locMast.setModiUser(userId);
+//        if (!locCacheService.updateById(locMast)) {
+//            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+//        }
     }
 
     @Override
@@ -135,117 +167,36 @@
         if (Cools.isEmpty(wrkMast)) {
             throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
         }
-        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
-        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
-        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
-        if (wrkMast.getWrkSts() < 4) {
-            locNo = wrkMast.getLocNo();
-            locSts = "O";
-
-            // 搴撲綅杞Щ
-            if (wrkMast.getIoType() == 11) {
-                // 搴撲綅杞Щ锛氭簮搴撲綅
-                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getSourceLocNo()));
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:" + wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F");
-                locMast.setModiTime(now);
-                locMast.setModiUser(userId);
-                locCacheService.updateById(locMast);
-            }
-            // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
-            locNo = wrkMast.getSourceLocNo();
-            // 鍑哄簱 ===>> F.鍦ㄥ簱
-            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
-                locSts = "F";
-                // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
-            } else if (wrkMast.getIoType() == 110) {
-                locSts = "D";
-                // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
-            } else if (wrkMast.getIoType() == 11) {
-                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F";
-                // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
-                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:" + wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts("O");
-                locMast.setModiTime(now);
-                locMast.setModiUser(userId);
-                locCacheService.updateById(locMast);
-            }
-        } else {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
-        }
-
-        //鍙栨秷鍏ュ簱宸ヤ綔妗f椂锛屾煡璇㈢粍鎵樿〃锛屽鏋滄湁灏嗙姸鎬佹敼涓哄緟澶勭悊
-        if (wrkMast.getIoType() == 1) {
-            List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
-            for (WaitPakin waitPakin : waitPakins) {
-                if (!Cools.isEmpty(waitPakin)) {
-                    waitPakin.setIoStatus("N");
-                    waitPakin.setLocNo("");
-                    waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>()
-//                            .eq("order_no", waitPakin.getOrderNo())
-                            .eq("zpallet", waitPakin.getZpallet())
-                            .eq("matnr", waitPakin.getMatnr())
-                            .eq("batch", waitPakin.getBatch()));
-                }
-            }
-        }
-
-        //鍙栨秷鍑哄簱宸ヤ綔妗f椂锛屾煡璇㈠崟鎹鐞嗚〃锛屽洖婊氫綔涓氫腑鏁伴噺
-        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
-            List<TaskDetl> wrkDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkMast.getWrkNo()));
-            for (TaskDetl wrkDetl : wrkDetls) {
-                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
-//                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
-//                        throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-//                    }
-                    OrderInAndOutUtil.decrease(Boolean.FALSE, wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
-                            wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme());
-
-                    //淇敼璁㈠崟涓昏〃鐘舵��,娌℃湁浣滀笟鏁伴噺鏃舵墠鍙互淇敼
-                    boolean flag = true;
-//                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo()));
-                    Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, wrkDetl.getOrderNo());
-                    List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId());
-                    for (OrderDetl orderDetl : orderDetls) {
-                        if (orderDetl.getWorkQty() > 0) {
-                            flag = false;
-                        }
-                    }
-                    if (flag) {
-//                        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()));
-                        if (!Cools.isEmpty(order) && order.getSettle() == 2) {
-                            order.setSettle(1L);
-                            order.setUpdateBy(userId);
-                            order.setUpdateTime(now);
-                        }
-//                        if(!orderService.update(order,new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()))){
-//                            throw new CoolException("淇敼璁㈠崟鐘舵�佸け璐�");
-//                        }
-                        OrderInAndOutUtil.updateOrder(Boolean.FALSE, order.getId(), order.getSettle(), userId);
-                    }
-                }
-            }
-
-        }
-
-//        // 璁㈠崟鍏宠仈
-//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
-//        for (WrkDetl wrkDetl : wrkDetls) {
-//            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
-//                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
-//                    throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-//                }
-//                // 鐢熸垚鏂扮殑鍑哄簱浣滀笟
-////                        stockOutRe(wrkMast, wrkDetls);
+        // 缁堢偣鏄帴椹充綅
+        if (wrkMast.getStaNo().startsWith("A")) {
+//            if(wrkMast.getWrkSts() == 305) {
+//                throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
 //            }
-//        }
+            // 瑙g粦绔欑偣
+            BasStation basStation = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getStaNo()));
+            if (basStation.getBarcode().equals(wrkMast.getBarcode())) {
+                basStation.setLocSts("O");
+                basStation.setBarcode("");
+                basStation.setModiTime(now);
+                basStation.setModiUser(userId);
+                basStationService.updateById(basStation);
+            }
+
+        } else {
+            // 璧风偣鏄帴椹充綅 鍙兘瀹屾垚304
+            if (wrkMast.getWrkSts() == 304) {
+                throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+            }
+            // 瑙g粦绔欑偣
+            BasStation basStation = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getSourceStaNo()));
+            if (basStation.getBarcode().equals(wrkMast.getBarcode())) {
+                basStation.setLocSts("O");
+                basStation.setBarcode("");
+                basStation.setModiTime(now);
+                basStation.setModiUser(userId);
+                basStationService.updateById(basStation);
+            }
+        }
 
         // 鍙栨秷鎿嶄綔浜哄憳璁板綍
         wrkMast.setManuType("鎵嬪姩鍙栨秷");
@@ -259,29 +210,12 @@
             throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
         }
         // 鍒犻櫎宸ヤ綔涓绘。
-        boolean wrkMastRes = taskService.deleteById(wrkMast);
+        taskService.deleteById(wrkMast);
 
-        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
-            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-            if (!taskDetlLogService.save(wrkMast.getWrkNo())) {
-//                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
-            }
-            // 鍒犻櫎宸ヤ綔妗f槑缁�
-            boolean wrkDetlRes = taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
-        }
-
-        // 淇敼搴撲綅鐘舵��
-        LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", locNo));
-        if (Cools.isEmpty(locMast)) {
-            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:" + locNo);
-        }
-        locMast.setLocSts(locSts);
-        locMast.setModiTime(now);
-        locMast.setModiUser(userId);
-        boolean locMastRes = locCacheService.updateById(locMast);
-        if (!wrkMastRes || !locMastRes) {
-            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
-        }
+        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+        taskDetlLogService.save(wrkMast.getWrkNo());
+        // 鍒犻櫎宸ヤ綔妗f槑缁�
+        taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
     }
 
 }

--
Gitblit v1.9.1