From 3d8242c78bde80d129aff622c20e0e2412aaf6c4 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期三, 14 一月 2026 09:53:35 +0800
Subject: [PATCH] 出库流程优化

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  469 +++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 298 insertions(+), 171 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 72ff28f..8ecbbfc 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -24,7 +24,10 @@
 import com.zy.common.properties.SlaveProperties;
 import com.zy.common.service.CommonService;
 import com.zy.common.web.WcsController;
+import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -415,118 +418,173 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
         String wrkCode = null;
-        //TODO 濡傛灉鏈哄彴鍙蜂笉涓虹┖锛屽垽鏂綋鍓嶆満鍙颁笌褰撳墠鍑哄簱搴撲綅鏄惁鍦ㄥ悓涓�搴撳尯鎴栧悓涓�鍙板爢鍨涙満锛堢浉鍚岀珯鐐癸級
-        //TODO 1. 濡傛灉鏄悓涓�鍙板爢鍨涙満锛岀敓鎴愮Щ搴擄紙鍑哄簱锛変换鍔�  2. 濡傛灉涓嶆槸锛岀敓鎴愬嚭搴撲换鍔★紝鍐嶇敓鎴愬叆搴撲换鍔�
         if (!Objects.isNull(deviceNo)) {
-            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());
+            wrkCode = workNo + "-1";
+            ioType = 101;
+            generateOutStock(taskDto, userId, workNo, wrkCode, now, ioType, locMast, staDesc, deviceNo);
+        } else {
+            generateOutStock(taskDto, userId, workNo, wrkCode, now, ioType, locMast, staDesc, null);
+        }
+    }
 
-            LocMast mast = locMastService.selectOne(new EntityWrapper<LocMast>()
-                    .in("loc_no", locs)
+    /**
+     * 鐢熸垚鍑哄簱浠诲姟
+     *
+     * @param taskDto
+     * @param userId
+     * @param workNo
+     * @param wrkCode
+     * @param now
+     * @param ioType
+     * @param locMast
+     * @param staDesc
+     * @author Ryan
+     * @date 2026/1/9 20:16
+     */
+    private void generateOutStock(TaskDto taskDto, Long userId, int workNo, String wrkCode, Date now, int ioType, LocMast locMast, StaDesc staDesc, String deviceNo) {
+        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())
+                .eq("is_default", 1));
+
+        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)
+                .orderAsc(Arrays.asList("loc_no"))
+                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+        if (Objects.isNull(locMasts)) {
+            binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>()
+                    .eq("dev_no", basDevice.getDevNo()));
+
+            Set<String> nlocs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet());
+
+            locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
+                    .in("loc_no", nlocs)
                     .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 (Objects.isNull(locMasts)) {
+                throw new CoolException("鏆傛棤鍙敤宸ヤ綔浣嶏紒锛�");
             }
-            //鐩稿悓琛ㄧず鍦ㄥ悓涓�涓贩閬�
-            if (mast.getCrnNo().equals(locMast.getCrnNo())) {
+        }
 
-            } else {
-                wrkCode = wrkCode + "-1";
-
+        List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locMasts.getLocNo(), 1);
+        //TODO 1. 鑾峰彇鍏ュ簱绔欑偣锛� 鐩爣搴撲綅  3. 灏嗗嚭搴撴槑缁嗘坊鍔犺嚦鍏ュ簱鏄庣粏
+        Integer staNo = staNos.stream().findFirst().get();
+        // 鐢熸垚宸ヤ綔妗�
+        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.setStaNo(staNo + ""); // 鐩爣绔�
+        wrkMast.setLocNo(locMasts.getLocNo());
+        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;
             }
-        } 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.setBrand(orderDetl.getBrand());
+            wrkDetl.setModel(orderDetl.getModel());
+            wrkDetl.setUnit(orderDetl.getUnit());
+            wrkDetl.setStandby1(locDto.getStandby1());
+            wrkDetl.setBatch(locDto.getBatch());
+            wrkDetl.setOrderNo(locDto.getOrderNo());
+//            wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
+            LocDetl locDel = locDetlService.selectOne(new EntityWrapper<LocDetl>()
+                    .eq("loc_no", locDto.getLocNo())
+                    .eq("batch", locDto.getBatch())
+                    .eq(!Objects.isNull(locDto.getBarcode()), "barcode", locDto.getBarcode())
+                    .eq("matnr", locDto.getMatnr()));
+            if (Objects.isNull(locDel)) {
+                throw new CoolException("鏁版嵁閿欒锛屽簱瀛樻槑缁嗕笉瀛樺湪锛侊紒");
+            }
+            wrkDetl.setAnfme(locDel.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());
-                }
-            } else {
-                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);
         }
 
+//        //TODO 鍒ゆ柇璁惧鍙凤紝鐢熸垚鍏ュ簱浠诲姟銆傛病鏈夋満鍙板彿锛岃鏄庢槸鏅�氬嚭搴撲换鍔�
+//        if (!Objects.isNull(deviceNo)) {
+//            genInStock(wrkMast, deviceNo, 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());
+            }
+        } else {
+            throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+        }
     }
 
     @Override
@@ -1272,25 +1330,26 @@
         if (Cools.isEmpty(wrkMast)) {
             throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
         }
+        Integer ioType = wrkMast.getIoType() - 50;
+        int wokNo = wrkMast.getWrkNo();
         // 鍏ュ嚭搴撶被鍨嬪垽鏂�
-        if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
-            throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�");
+        if (Objects.isNull(wrkMast.getWrkCode())) {
+            if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
+                throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�");
+            }
+            // 宸ヤ綔鐘舵�佸垽鏂�
+            if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
+                throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
+            }
+        } else {
+            if (wrkMast.getIoType() == 103) {
+                ioType = 1;
+            }
         }
-        // 宸ヤ綔鐘舵�佸垽鏂�
-        if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
-        }
-        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
-//            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
-//        }
-        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
-            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-        }
+
         // 鑾峰彇鐩爣绔�
         Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-                .eq("type_no", wrkMast.getIoType() - 50)
+                .eq("type_no", ioType)
                 .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
                 .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
         StaDesc staDesc = staDescService.selectOne(wrapper);
@@ -1301,11 +1360,14 @@
         // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
         Integer staNo = staDesc.getCrnStn();
         // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-        wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+        wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
         wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
         wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
         wrkMast.setStaNo(staNo + ""); // 鐩爣绔�
-        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+        //鍒ゆ柇鏄惁涓洪鏂欏嚭搴�
+        if (Objects.isNull(wrkMast.getWrkCode())) {
+            wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+        }
         wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
         wrkMast.setModiTime(now);
         wrkMast.setModiUser(userId);
@@ -1321,6 +1383,85 @@
             throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
         }
     }
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void backLocOperation(String workNo, Long userId) {
+        WrkMast wrkMast = wrkMastService.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)) {
+            throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
+        }
+        Integer ioType = wrkMast.getIoType() - 50;
+        Integer wokNo;
+        // 鍏ュ嚭搴撶被鍨嬪垽鏂�
+        if (wrkMast.getIoType() == 103) {
+            ioType = 1;
+        } else if (wrkMast.getIoType() == 101) {
+            ioType = 10;
+        }
+        wokNo = commonService.getWorkNo(0);
+
+        // 鑾峰彇鐩爣绔�
+        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                .eq("type_no", ioType)
+                .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();
+        WrkMast mast = new WrkMast();
+        BeanUtils.copyProperties(wrkMast, mast);
+        mast.setWrkNo(wokNo);
+        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+        mast.setIoType(ioType); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+        mast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+        mast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+        mast.setStaNo(staNo + ""); // 鐩爣绔�
+        //鍒ゆ柇鏄惁涓洪鏂欏嚭搴�
+        if (Objects.isNull(mast.getWrkCode())) {
+            mast.setLocNo(mast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+        }
+//        mast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+        mast.setModiTime(now);
+        mast.setModiUser(userId);
+        if (!wrkMastService.insert(mast)) {
+            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+        }
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+        if (Cools.isEmpty(wrkDetls)) {
+            throw new CoolException("鏁版嵁閿欒锛屼换鍔℃。鏄庣粏涓嶅瓨鍦� 锛侊紒");
+        }
+        wrkDetls.forEach(wrkDetl -> {
+            WrkDetl wrkDetl1 = new WrkDetl();
+            BeanUtils.copyProperties(wrkDetl, wrkDetl1);
+            wrkDetl1.setWrkNo(wokNo);
+            if (!wrkDetlService.insert(wrkDetl1)) {
+                throw new CoolException("浠诲姟妗f槑缁嗕繚瀛樺け璐ワ紒锛�");
+            }
+        });
+
+        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+        locMast.setLocSts("Q");
+        locMast.setModiTime(now);
+        locMast.setModiUser(userId);
+        if (!locMastService.updateById(locMast)) {
+            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+        }
+
+        wrkMast.setWrkCode(null);
+
+        if (!wrkMastService.updateById(wrkMast)) {
+            throw new CoolException("浠诲姟妗f洿鏂板け璐ワ紒锛�");
+        }
+
+    }
+
 
     @Override
     public StartupDto createWaitPainWrkMastStart(List<WaitPakin> list, Long userId) {
@@ -1457,16 +1598,15 @@
     /**
      * 鐢熸垚鍑哄簱鍖归厤鐨勫伐浣滅珯鍏ュ簱浠诲姟
      *
-     * @param staNo
-     * @param taskDto
+     * @param outMast
+     * @param deviceNo
      * @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) {
+    public void genInStock(WrkMast outMast, String deviceNo, Long userId) {
         if (Objects.isNull(deviceNo)) {
             throw new CoolException("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
         }
@@ -1478,42 +1618,48 @@
         }
         List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
         if (Objects.isNull(binds) || binds.isEmpty()) {
-            throw new CoolException("鍙版満鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
+            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("褰撳墠鏈哄彴锛屾棤鍙敤宸ヤ綔鍙帮紒锛�");
         }
+        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(1));
+        List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locMasts.getLocNo(), 1);
+        //TODO 1. 鑾峰彇鍏ュ簱绔欑偣锛� 鐩爣搴撲綅  3. 灏嗗嚭搴撴槑缁嗘坊鍔犺嚦鍏ュ簱鏄庣粏
+        Integer staNo = staNos.stream().findFirst().get();
 
-
-
-
-
-        staNos =  staDescService.queryOutStaNosByLocNo(locMasts.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
-
-
+        if (Objects.isNull(outMast.getWrkCode())) {
+            throw new CoolException("鏁版嵁閿欒锛屼笂绾т换鍔$紪鐮佷负绌猴紒锛�");
+        }
+        String wrkCode;
+        int indexOf = outMast.getWrkCode().indexOf("-");
+        if (indexOf != -1) {
+            String substring = outMast.getWrkCode().substring(0, indexOf);
+            wrkCode = substring + "-2";
+        } else {
+            throw new CoolException("鏁版嵁閿欒锛屼笂绾т换鍔$紪鐮侀敊璇紒锛�");
+        }
         WrkMast wrkMast = new WrkMast();
-        StartupDto dto = commonService.getLocNo(1, sourceStaNo.getDevNo(), findLocNoAttributeVo, locTypeDto);
-        int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
         wrkMast.setWrkNo(workNo);
+        wrkMast.setWrkCode(wrkCode);
         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.setCrnNo(locMasts.getCrnNo());
+        wrkMast.setSourceStaNo(outMast.getStaNo());
+//        wrkMast.setStaNo(staNo + "");
+        wrkMast.setLocNo(locMasts.getLocNo());
         wrkMast.setIoPri(13D); // 浼樺厛绾�
-        wrkMast.setBarcode(pakin.getZpallet()); // 鎵樼洏鐮�
+        wrkMast.setBarcode(outMast.getBarcode()); // 鎵樼洏鐮�
         wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
         wrkMast.setPicking("N"); // 鎷f枡
         wrkMast.setExitMk("N"); // 閫�鍑�
@@ -1521,60 +1667,41 @@
         wrkMast.setLinkMis("Y");
         wrkMast.setModiUser(userId);
         wrkMast.setAppeUser(userId);
-        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+        wrkMast.setCtnType(locMasts.getCtnType()); // 瀹瑰櫒绫诲瀷
         // 鎿嶄綔浜哄憳鏁版嵁
-        wrkMast.setAppeTime(now);
-        wrkMast.setModiTime(now);
+        wrkMast.setAppeTime(new Date());
+        wrkMast.setModiTime(new Date());
         boolean res = wrkMastService.insert(wrkMast);
         if (!res) {
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
         // 鏇存柊婧愮珯鐐逛俊鎭�
-        sourceStaNo.setWrkNo(workNo);
-        sourceStaNo.setModiTime(now);
-        if (!basDevpService.updateById(sourceStaNo)) {
-            throw new CoolException("鏇存柊婧愮珯澶辫触");
-        }
+//        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)) {
+//        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMasts.getLocSts().equals("O")) {
+            locMasts.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMasts.setModiTime(new Date());
+            if (!locMastService.updateById(locMasts)) {
                 throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
             }
         } else {
-            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+            throw new CoolException(locMasts.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け璐�");
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", outMast.getWrkNo()));
+        if (Objects.isNull(wrkDetls) || wrkDetls.isEmpty()) {
+            throw new CoolException("浠诲姟鏄庣粏涓虹┖锛侊紒");
         }
+        wrkDetls.forEach(wrkDetl -> {
+            WrkDetl detl = new WrkDetl();
+            BeanUtils.copyProperties(wrkDetl, detl);
+            detl.setWrkNo(wrkMast.getWrkNo());
+            if (!wrkDetlService.insert(detl)) {
+                throw new CoolException("浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        });
     }
-
-    // 鐢熸垚宸ヤ綔妗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