From 5a77719594f0a2c9ef17b3a6d5c1e2f4e5d4e092 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期五, 09 一月 2026 20:01:19 +0800
Subject: [PATCH] 出库根据机台号分别任务类型

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  293 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 227 insertions(+), 66 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index d2e32b3..72ff28f 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -12,6 +12,7 @@
 import com.zy.asrs.entity.param.FullStoreParam;
 import com.zy.asrs.entity.param.LocDetlAdjustParam;
 import com.zy.asrs.entity.param.StockOutParam;
+import com.zy.asrs.enums.LocStsType;
 import com.zy.asrs.mapper.LocMastMapper;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
 import com.zy.asrs.service.*;
@@ -91,8 +92,13 @@
     @Resource
     private LocMastMapper locMastMapper;
 
+    @Autowired
+    private LocAroundBindService locAroundBindService;
+
     @Resource
     private OrderPakoutService orderPakOutService;
+    @Autowired
+    private BasDeviceServiceImpl basDeviceService;
 
     @Override
     @Transactional
@@ -391,7 +397,7 @@
 
     @Override
     @Transactional
-    public void stockOut(BasDevp staNo, TaskDto taskDto, String deviceNo ,Long userId) {
+    public void stockOut(BasDevp staNo, TaskDto taskDto, String deviceNo, Long userId) {
         Date now = new Date();
         List<LocDto> locDtos = taskDto.getLocDtos();
         for (LocDto locDto : locDtos) {
@@ -409,86 +415,118 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
         String wrkCode = null;
+        //TODO 濡傛灉鏈哄彴鍙蜂笉涓虹┖锛屽垽鏂綋鍓嶆満鍙颁笌褰撳墠鍑哄簱搴撲綅鏄惁鍦ㄥ悓涓�搴撳尯鎴栧悓涓�鍙板爢鍨涙満锛堢浉鍚岀珯鐐癸級
+        //TODO 1. 濡傛灉鏄悓涓�鍙板爢鍨涙満锛岀敓鎴愮Щ搴擄紙鍑哄簱锛変换鍔�  2. 濡傛灉涓嶆槸锛岀敓鎴愬嚭搴撲换鍔★紝鍐嶇敓鎴愬叆搴撲换鍔�
         if (!Objects.isNull(deviceNo)) {
-            wrkCode = wrkCode + "-1";
-        }
-        // 鐢熸垚宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(workNo);
-        //鐢ㄤ簬宸ヤ綔绔欙紝浠诲姟鍒嗚В
-        wrkMast.setWrkCode(wrkCode);
-        wrkMast.setIoTime(now);
-        wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-        wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
-        wrkMast.setIoPri(13D); // 浼樺厛绾э細13
-        wrkMast.setCrnNo(locMast.getCrnNo());
-        wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 婧愮珯
-        wrkMast.setStaNo(staDesc.getStnNo() + ""); // 鐩爣绔�
-        wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
-        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk("N"); // 绌烘澘
-        wrkMast.setLinkMis("N");
-        wrkMast.setBarcode(locMast.getBarcode());
-        wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
-        wrkMast.setAppeTime(now);
-        wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(now);
-        if (!wrkMastService.insert(wrkMast)) {
-            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + taskDto.getLocNo());
-        }
-        // 鐢熸垚宸ヤ綔妗f槑缁�
-        for (LocDto locDto : taskDto.getLocDtos()) {
-            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
-                continue;
+            BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
+                    .eq("status", 1)
+                    .eq("dev_no", deviceNo));
+            if (Objects.isNull(basDevice)) {
+                throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
             }
+            List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
+            if (Objects.isNull(binds) || binds.isEmpty()) {
+                throw new CoolException("鍙版満鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
+            }
+            Set<String> locs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet());
+
+            LocMast mast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                    .in("loc_no", locs)
+                    .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+                    .eq("dev_no", basDevice.getDevNo())
+                    .orderAsc(Arrays.asList("loc_no"))
+                    .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+            if (Objects.isNull(mast)) {
+                throw new CoolException("褰撳墠鏈哄彴锛屾棤鍙敤宸ヤ綔鍙帮紒锛�");
+            }
+            //鐩稿悓琛ㄧず鍦ㄥ悓涓�涓贩閬�
+            if (mast.getCrnNo().equals(locMast.getCrnNo())) {
+
+            } else {
+                wrkCode = wrkCode + "-1";
+
+            }
+        } else {
+            // 鐢熸垚宸ヤ綔妗�
+            WrkMast wrkMast = new WrkMast();
+            wrkMast.setWrkNo(workNo);
+            //鐢ㄤ簬宸ヤ綔绔欙紝浠诲姟鍒嗚В
+            wrkMast.setWrkCode(wrkCode);
+            wrkMast.setIoTime(now);
+            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+            wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
+            wrkMast.setIoPri(13D); // 浼樺厛绾э細13
+            wrkMast.setCrnNo(locMast.getCrnNo());
+            wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 婧愮珯
+            wrkMast.setStaNo(staDesc.getStnNo() + ""); // 鐩爣绔�
+            wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
+            wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+            wrkMast.setPicking("N"); // 鎷f枡
+            wrkMast.setExitMk("N"); // 閫�鍑�
+            wrkMast.setEmptyMk("N"); // 绌烘澘
+            wrkMast.setLinkMis("N");
+            wrkMast.setBarcode(locMast.getBarcode());
+            wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
+            wrkMast.setAppeTime(now);
+            wrkMast.setModiUser(userId);
+            wrkMast.setModiTime(now);
+            if (!wrkMastService.insert(wrkMast)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + taskDto.getLocNo());
+            }
+            // 鐢熸垚宸ヤ綔妗f槑缁�
+            for (LocDto locDto : taskDto.getLocDtos()) {
+                if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
+                    continue;
+                }
 //            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
-            OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
-                    , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
+                OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
+                        , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
 //            if (orderDetl == null) {
 ////                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
 //                orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), null);
 //
 //            }
-            WrkDetl wrkDetl = new WrkDetl();
-            wrkDetl.sync(orderDetl);
-            wrkDetl.setZpallet(wrkMast.getBarcode());
-            wrkDetl.setIoTime(now);
-            wrkDetl.setWrkNo(workNo);
-            wrkDetl.setBatch(locDto.getBatch());
-            wrkDetl.setOrderNo(locDto.getOrderNo());
-            wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
-            wrkDetl.setAppeTime(now);
-            wrkDetl.setAppeUser(userId);
-            wrkDetl.setModiTime(now);
-            wrkDetl.setModiUser(userId);
-            if (!wrkDetlService.insert(wrkDetl)) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-            }
+                WrkDetl wrkDetl = new WrkDetl();
+                wrkDetl.sync(orderDetl);
+                wrkDetl.setZpallet(wrkMast.getBarcode());
+                wrkDetl.setIoTime(now);
+                wrkDetl.setWrkNo(workNo);
+                wrkDetl.setBatch(locDto.getBatch());
+                wrkDetl.setOrderNo(locDto.getOrderNo());
+                wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
+                wrkDetl.setAppeTime(now);
+                wrkDetl.setAppeUser(userId);
+                wrkDetl.setModiTime(now);
+                wrkDetl.setModiUser(userId);
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                }
 //            // 淇敼璁㈠崟鏄庣粏
 //            if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
 //                throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
 //            }
 //            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
-            OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
-                    orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
-                    orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
-                    , locDto.getAnfme());
-            OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
-        }
-        // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
-        locMast = locMastService.selectById(taskDto.getLocNo());
-        if (locMast.getLocSts().equals("F")) {
-            locMast.setLocSts(ioType == 101 ? "R" : "P");
-            locMast.setModiUser(userId);
-            locMast.setModiTime(now);
-            if (!locMastService.updateById(locMast)) {
-                throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+                OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
+                        orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
+                        orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
+                        , locDto.getAnfme());
+                OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
             }
-        } else {
-            throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+            locMast = locMastService.selectById(taskDto.getLocNo());
+            if (locMast.getLocSts().equals("F")) {
+                locMast.setLocSts(ioType == 101 ? "R" : "P");
+                locMast.setModiUser(userId);
+                locMast.setModiTime(now);
+                if (!locMastService.updateById(locMast)) {
+                    throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+                }
+            } else {
+                throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+            }
         }
+
     }
 
     @Override
@@ -1416,4 +1454,127 @@
         }
     }
 
+    /**
+     * 鐢熸垚鍑哄簱鍖归厤鐨勫伐浣滅珯鍏ュ簱浠诲姟
+     *
+     * @param staNo
+     * @param taskDto
+     * @param deviceNo
+     * @param userId
+     * @author Ryan
+     * @date 2026/1/9 17:39
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void genInStock(BasDevp staNo, TaskDto taskDto, String deviceNo, Long userId) {
+        if (Objects.isNull(deviceNo)) {
+            throw new CoolException("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
+                .eq("status", 1)
+                .eq("dev_no", deviceNo));
+        if (Objects.isNull(basDevice)) {
+            throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
+        }
+        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
+        if (Objects.isNull(binds) || binds.isEmpty()) {
+            throw new CoolException("鍙版満鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
+        }
+        Set<String> locs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet());
+
+        LocMast locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
+                .in("loc_no", locs)
+                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+                .eq("dev_no", basDevice.getDevNo())
+                .orderAsc(Arrays.asList("loc_no"))
+                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+        if (Objects.isNull(locMasts)) {
+            throw new CoolException("褰撳墠鏈哄彴锛屾棤鍙敤宸ヤ綔鍙帮紒锛�");
+        }
+
+
+
+
+
+        staNos =  staDescService.queryOutStaNosByLocNo(locMasts.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
+
+
+        WrkMast wrkMast = new WrkMast();
+        StartupDto dto = commonService.getLocNo(1, sourceStaNo.getDevNo(), findLocNoAttributeVo, locTypeDto);
+        int workNo = dto.getWorkNo();
+        // 鐢熸垚宸ヤ綔妗�
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setCrnNo(dto.getCrnNo());
+        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
+        wrkMast.setStaNo(dto.getStaNo() + "");
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setBarcode(pakin.getZpallet()); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setModiUser(userId);
+        wrkMast.setAppeUser(userId);
+        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鏇存柊婧愮珯鐐逛俊鎭�
+        sourceStaNo.setWrkNo(workNo);
+        sourceStaNo.setModiTime(now);
+        if (!basDevpService.updateById(sourceStaNo)) {
+            throw new CoolException("鏇存柊婧愮珯澶辫触");
+        }
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMast.getLocSts().equals("O")) {
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+        }
+
+        // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ===>> Y
+        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
+                .eq("zpallet", pakin.getZpallet());
+        WaitPakin setParam = new WaitPakin();
+        setParam.setLocNo(dto.getLocNo());
+        setParam.setIoStatus("Y");
+        setParam.setModiTime(now);
+        if (!waitPakinService.update(setParam, wrapper)) {
+            throw new CoolException("鏇存柊閫氱煡妗eけ璐�");
+        }
+    }
+
+    // 鐢熸垚宸ヤ綔妗f槑缁�
+        waitPakins.forEach(waitPakin ->
+
+    {
+        WrkDetl wrkDetl = new WrkDetl();
+        wrkDetl.sync(waitPakin);
+        wrkDetl.setWrkNo(wrkMast.getWrkNo());
+        wrkDetl.setIoTime(wrkMast.getIoTime());
+        double v = Math.round(waitPakin.getAnfme() * waitPakin.getVolume() * 100) / 100.0;
+        wrkDetl.setAnfme(v);
+        wrkDetl.setAppeTime(now);
+        wrkDetl.setModiTime(now);
+        if (!wrkDetlService.insert(wrkDetl)) {
+            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+        }
+    });
+}
+
 }

--
Gitblit v1.9.1