From 9c7e5bc10f242b71f3d94e2c700cb7de79feda17 Mon Sep 17 00:00:00 2001
From: yxFwq <1>
Date: 星期二, 25 二月 2025 08:45:14 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  637 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 622 insertions(+), 15 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 fd6c732..7db3935 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -8,11 +8,9 @@
 import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.EmptyPlateOutParam;
-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.entity.param.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.OutboundAllocationUtil;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
 import com.zy.common.model.enums.IoWorkType;
@@ -41,10 +39,16 @@
     // 搴撲綅鎺掑彿鍒嗛厤榛樿绫诲埆
     private static final int DEFAULT_ROW_NO_TYPE = 1;
 
+    public static final List<Integer> OVER_TORN_STA_NO_LIST = new ArrayList<Integer>() {{
+        add(126);add(131);add(310);add(312);
+    }};
+
     @Autowired
     private MatService matService;
     @Autowired
     private WrkMastService wrkMastService;
+    @Autowired
+    private DocTypeService docTypeService;
     @Autowired
     private WrkDetlService wrkDetlService;
     @Autowired
@@ -91,7 +95,7 @@
         // 妫�绱㈠簱浣�
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
 //        List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), null, locTypeDto, 0);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), param.getList().get(0).getMatnr(),null,null, locTypeDto);
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
@@ -161,12 +165,28 @@
         BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
         // 鑾峰彇搴撲綅鏄庣粏
         List<LocDetlDto> locDetlDtos = new ArrayList<>();
+        List<String> locNoList = new ArrayList<>();
         for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
+            if (!locNoList.contains(paramLocDetl.getLocNo())){
+                locNoList.add(paramLocDetl.getLocNo());
+            }
             if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                 LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
-                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
+                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount(), param.getOrderNo() , paramLocDetl.getPio()));
             }
         }
+
+        List<String> locNoOtherListOne = new ArrayList<>();
+        for (String locNo :locNoList) {
+            //灏忔枡绠变即鐢熷嚭搴�
+            if (Utils.getRow(locNo) <= 8) {
+                String locNoOther = staNoOther(locNo);
+                if (!locNoList.contains(locNoOther)) {
+                    locNoOtherListOne.add(locNoOther);
+                }
+            }
+        }
+
         if (!locDetlDtos.isEmpty()) {
             LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
             if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") ){
@@ -178,7 +198,309 @@
         } else {
             throw new CoolException("搴撳瓨涓嶅瓨鍦�");
         }
+
+
+        for (String locNo:locNoOtherListOne){
+            // 鑾峰彇宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
+
+            //浼寸敓鍏ュ簱宸ヤ綔鍙�
+            int workNoRu = commonService.getWorkNo(0);
+
+            // 鑾峰彇搴撲綅
+            LocMast locMast = locMastService.selectById(locNo);
+            if (Cools.isEmpty(locMast)) {
+                throw new CoolException(locNo+"搴撲綅涓嶅瓨鍦�");
+            }
+            if (locMast.getLocSts().equals("D")){
+                // 鑾峰彇婧愮珯
+                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                        .eq("type_no", 110)
+                        .eq("stn_no", param.getOutSite())
+                        .eq("crn_no", locMast.getCrnNo());
+                StaDesc staDesc = staDescService.selectOne(wrapper);
+                Integer sourceStaNo = staDesc.getCrnStn();
+                if (Cools.isEmpty(sourceStaNo)) {
+                    throw new CoolException("妫�绱㈡簮绔欏け璐�");
+                }
+                Date now = new Date();
+                // 淇濆瓨宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(now);
+                wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
+                wrkMast.setIoPri(10D);
+                wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
+                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 鐩爣绔�  鍫嗗灈鏈哄叆搴撳彛
+                wrkMast.setCrnNo(locMast.getCrnNo());
+                wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
+                wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+                wrkMast.setPicking("N"); // 鎷f枡
+                wrkMast.setExitMk("N"); // 閫�鍑�
+                wrkMast.setEmptyMk("Y"); // 绌烘澘
+                wrkMast.setLinkMis("N");
+                wrkMast.setAppeUser(userId);
+                wrkMast.setAppeTime(now);
+                wrkMast.setModiUser(userId);
+                wrkMast.setModiTime(now);
+                wrkMast.setWorkNoOther(workNoRu);
+                boolean res = wrkMastService.insert(wrkMast);
+                if (!res) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
+                if (locMast.getLocSts().equals("D")){
+                    locMast.setLocSts("R");
+                    locMast.setModiUser(userId);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+                        throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+                    }
+                }
+
+                // 鐢熸垚宸ヤ綔妗�
+                WrkMast wrkMastRu = new WrkMast();
+                wrkMastRu.setWrkNo(workNoRu);
+                wrkMastRu.setIoTime(new Date());
+                wrkMastRu.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+                wrkMastRu.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
+                wrkMastRu.setIoPri(13D); // 浼樺厛绾�
+                wrkMastRu.setCrnNo(wrkMast.getCrnNo());
+                wrkMastRu.setSourceStaNo(wrkMast.getSourceStaNo());
+                wrkMastRu.setStaNo(wrkMast.getStaNo());
+//        wrkMast.setLocNo(dto.getLocNo());
+                wrkMastRu.setFullPlt("N"); // 婊℃澘
+                wrkMastRu.setPicking("N"); // 鎷f枡
+                wrkMastRu.setExitMk("N"); // 閫�鍑�
+                wrkMastRu.setEmptyMk("Y"); // 绌烘澘
+                wrkMastRu.setLinkMis("Y");
+                wrkMastRu.setCtnType(wrkMast.getCtnType()); // 瀹瑰櫒绫诲瀷
+                // 鎿嶄綔浜哄憳鏁版嵁
+                wrkMastRu.setAppeTime(new Date());
+                wrkMastRu.setModiTime(new Date());
+                boolean resOther = wrkMastService.insert(wrkMastRu);
+                if (!resOther) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+            }else if (locMast.getLocSts().equals("F")){
+                // 鑾峰彇婧愮珯
+                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                        .eq("type_no", 101)
+                        .eq("stn_no", param.getOutSite())
+                        .eq("crn_no", locMast.getCrnNo());
+                StaDesc staDesc = staDescService.selectOne(wrapper);
+                Integer sourceStaNo = staDesc.getCrnStn();
+                if (Cools.isEmpty(sourceStaNo)) {
+                    throw new CoolException("妫�绱㈡簮绔欏け璐�");
+                }
+
+                Date now = new Date();
+                List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo));
+
+// 淇濆瓨宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(now);
+                wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                wrkMast.setIoType(101); // 鍏ュ嚭搴撶姸鎬侊細 101.婊℃澘鍑哄簱
+                wrkMast.setIoPri(13D);
+                wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
+                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 鐩爣绔�  鍫嗗灈鏈哄叆搴撳彛
+                wrkMast.setCrnNo(locMast.getCrnNo());
+                wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
+                wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+                wrkMast.setPicking("N"); // 鎷f枡
+                wrkMast.setExitMk("N"); // 閫�鍑�
+                wrkMast.setEmptyMk("N"); // 绌烘澘
+                wrkMast.setLinkMis("N");
+                wrkMast.setAppeUser(userId);
+                wrkMast.setAppeTime(now);
+                wrkMast.setModiUser(userId);
+                wrkMast.setModiTime(now);
+                wrkMast.setWorkNoOther(workNoRu);
+                boolean res = wrkMastService.insert(wrkMast);
+                if (!res) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+
+                // 鏇存柊搴撲綅鐘舵�� F.婊℃澘 -> R.鍑哄簱棰勭害
+                if (locMast.getLocSts().equals("F")){
+                    locMast.setLocSts("R");
+                    locMast.setModiUser(userId);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+                        throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+                    }
+                }
+
+
+
+                List<WaitPakin> waitPakins = new ArrayList<>();
+                for (LocDetl locDetl:locDetlList){
+                    Mat mat = matService.selectByMatnr(locDetl.getMatnr());
+                    if (Cools.isEmpty(mat)) {
+                        throw new CoolException("瑙勬牸娣诲姞澶辫触锛岃鑱旂郴绠$悊鍛�");
+                    }
+                    WaitPakin waitPakin = new WaitPakin();
+                    waitPakin.sync(locDetl);
+                    waitPakin.setBatch(locDetl.getBatch());       //鏈ㄧ缂栫爜  //鎵规  鍞竴鍊�  绠卞彿
+                    waitPakin.setModel(locDetl.getModel());       //MES宸ヤ綔鍙�  鍞竴鍊�
+                    waitPakin.setIoStatus("Y");     // 鍏ュ嚭鐘舵��
+                    waitPakin.setAnfme(locDetl.getAnfme());  // 鏁伴噺
+                    waitPakin.setStatus("Y");    // 鐘舵��
+                    waitPakin.setAppeUser(userId);
+                    waitPakin.setAppeTime(now);
+                    waitPakin.setModiUser(userId);
+                    waitPakin.setModiTime(now);
+                    waitPakin.setLocNo(null);
+                    if (!waitPakinService.insert(waitPakin)) {
+                        throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+                    }
+                    waitPakins.add(waitPakin);
+                }
+                // 鐢熸垚宸ヤ綔妗�
+                WrkMast wrkMastRu = new WrkMast();
+                wrkMastRu.setWrkNo(workNoRu);
+                wrkMastRu.setIoTime(new Date());
+                wrkMastRu.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+                wrkMastRu.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+                wrkMastRu.setIoPri(13D); // 浼樺厛绾�
+                wrkMastRu.setSourceStaNo(sourceStaNo); // 婧愮珯
+                wrkMastRu.setStaNo(crnStaRu(locMast.getCrnNo())); // 鐩爣绔�  鍫嗗灈鏈哄叆搴撳彛
+                wrkMastRu.setCrnNo(locMast.getCrnNo());
+                wrkMastRu.setBarcode(locMast.getBarcode()); // 鎵樼洏鐮�
+                wrkMastRu.setFullPlt("Y"); // 婊℃澘锛歒
+                wrkMastRu.setPicking("N"); // 鎷f枡
+                wrkMastRu.setExitMk("N"); // 閫�鍑�
+                wrkMastRu.setEmptyMk("N"); // 绌烘澘
+                wrkMastRu.setLinkMis("Y");
+                // 鎿嶄綔浜哄憳鏁版嵁
+                wrkMastRu.setAppeTime(now);
+                wrkMastRu.setModiTime(now);
+                boolean resOther = wrkMastService.insert(wrkMastRu);
+                if (!resOther) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                // 鐢熸垚宸ヤ綔妗f槑缁�
+                waitPakins.forEach(waitPakin -> {
+                    WrkDetl wrkDetl = new WrkDetl();
+                    wrkDetl.sync(waitPakin);
+                    wrkDetl.setWrkNo(wrkMastRu.getWrkNo());
+                    wrkDetl.setIoTime(wrkMastRu.getIoTime());
+                    wrkDetl.setAppeTime(now);
+                    wrkDetl.setModiTime(now);
+                    if (!wrkDetlService.insert(wrkDetl)) {
+                        throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+                    }
+                });
+
+            }else {
+                throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篋鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
+            }
+        }
     }
+    @Override
+    @Transactional
+    public void startupFullTakeStoreOrder(StockOutParam param, Long userId) {
+        if (Cools.isEmpty(param) || Cools.isEmpty(param.getLocDetls())){
+            throw new CoolException("鍙傛暟涓虹┖");
+        }
+        if (Cools.isEmpty(param.getOrderNo())){
+            throw new CoolException("璁㈠崟鍙峰弬鏁颁负绌�");
+        }
+        DocType docType = docTypeService.selectOrAdd("鎵嬪姩鍑哄簱鍗�", Boolean.FALSE);
+        Order order = orderService.selectByNo(param.getOrderNo());
+        if (Cools.isEmpty(order)){
+            Date now = new Date();
+            order = new Order(
+                    String.valueOf(snowflakeIdWorker.nextId()),    // 缂栧彿[闈炵┖]
+                    param.getOrderNo(),    // 璁㈠崟缂栧彿
+                    DateUtils.convert(now),    // 鍗曟嵁鏃ユ湡
+                    docType.getDocId(),    // 鍗曟嵁绫诲瀷
+                    null,    // 椤圭洰缂栧彿
+                    null,    //
+                    null,    // 璋冩嫧椤圭洰缂栧彿
+                    null,    // 鍒濆绁ㄦ嵁鍙�
+                    null,    // 绁ㄦ嵁鍙�
+                    null,    // 瀹㈡埛缂栧彿
+                    null,    // 瀹㈡埛
+                    null,    // 鑱旂郴鏂瑰紡
+                    null,    // 鎿嶄綔浜哄憳
+                    null,    // 鍚堣閲戦
+                    null,    // 浼樻儬鐜�
+                    null,    // 浼樻儬閲戦
+                    null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+                    null,    // 瀹炰粯閲戦
+                    null,    // 浠樻绫诲瀷
+                    null,    // 涓氬姟鍛�
+                    null,    // 缁撶畻澶╂暟
+                    null,    // 閭垂鏀粯绫诲瀷
+                    null,    // 閭垂
+                    null,    // 浠樻鏃堕棿
+                    null,    // 鍙戣揣鏃堕棿
+                    null,    // 鐗╂祦鍚嶇О
+                    null,    // 鐗╂祦鍗曞彿
+//                    2L,    // 璁㈠崟鐘舵��
+                    1L,    // 璁㈠崟鐘舵��
+                    1,    // 鐘舵��
+                    userId,    // 娣诲姞浜哄憳
+                    now,    // 娣诲姞鏃堕棿
+                    userId,    // 淇敼浜哄憳
+                    now,    // 淇敼鏃堕棿
+                    null    // 澶囨敞
+            );
+            if (!orderService.insert(order)) {
+                throw new CoolException("淇濆瓨璁㈠崟涓绘。澶辫触");
+            }
+            // 鍗曟嵁鏄庣粏妗�
+            List<DetlDto> list = new ArrayList<>();
+            List<StockOutParam.LocDetl> locDetls = param.getLocDetls();
+            int i=0;
+            for (StockOutParam.LocDetl locDetl : locDetls) {
+                i++;
+                Mat mat = matService.selectByMatnr(locDetl.getMatnr());
+                if (Cools.isEmpty(mat)) {
+                    throw new CoolException(locDetl.getMatnr() + "鐗╂枡缂栫爜妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧");
+                }
+                OrderDetl orderDetl = new OrderDetl();
+                orderDetl.sync(mat);
+                orderDetl.setSuppCode(String.valueOf(i));  // 琛屽彿
+                orderDetl.setManu(locDetl.getLocNo());  //搴撲綅鍙�
+                orderDetl.setBatch(locDetl.getBatch()); //鏈ㄧ缂栫爜
+                orderDetl.setAnfme(locDetl.getAnfme());//鍑哄簱鏁伴噺
+                orderDetl.setModel(locDetl.getModel());//鎵规
+                orderDetl.setSpecs(locDetl.getSpecs());//瑙勬牸
+                orderDetl.setBrand(locDetl.getBrand());//鏈ㄧ绫诲瀷
+                orderDetl.setBarcode(locDetl.getZpallet());//鏈ㄧ绫诲瀷
+                orderDetl.setWeight(locDetl.getWeight());
+//                orderDetl.setWorkQty(locDetl.getAnfme());
+                orderDetl.setWorkQty(0.0);
+                orderDetl.setOrderId(order.getId());
+                orderDetl.setOrderNo(order.getOrderNo());
+                orderDetl.setOrigin(locDetl.getOrigin());
+                orderDetl.setCreateBy(userId);
+                orderDetl.setCreateTime(now);
+                orderDetl.setUpdateBy(userId);
+                orderDetl.setUpdateTime(now);
+                orderDetl.setStatus(1);
+                orderDetl.setQty(0.0D);
+                if (!orderDetlService.insert(orderDetl)) {
+                    throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
+                }
+            }
+
+//            List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassification(param);
+//            for (StockOutParam stockOutParam : stockOutParams){
+//                startupFullTakeStore(stockOutParam,userId);
+//            }
+
+        } else {
+            throw new CoolException("璁㈠崟鍙烽噸澶嶏紝璁㈠崟"+param.getOrderNo()+"宸插瓨鍦紒锛侊紒");
+        }
+
+    }
+
 
     @Override
     @Transactional
@@ -206,7 +528,8 @@
         for (OutLocDto dto : dtos) {
             // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱
             if (ioWorkType == null) {
-                ioType = dto.isAll() ? 101 : 103;
+//                ioType = dto.isAll() ? 101 : 103;
+                ioType = 101;
             } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) {
                 ioType = 107;
             }
@@ -230,7 +553,7 @@
             wrkMast.setIoTime(now);
             wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
             wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
-            wrkMast.setIoPri(13D); // 浼樺厛绾э細13
+            wrkMast.setIoPri(dto.getLocDetlDtos().get(0).getPio()); // 浼樺厛绾э細13
             wrkMast.setCrnNo(locMast.getCrnNo());
             wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
             wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
@@ -240,6 +563,10 @@
             wrkMast.setExitMk("N"); // 閫�鍑�
             wrkMast.setEmptyMk("N"); // 绌烘澘
             wrkMast.setLinkMis("N");
+            wrkMast.setSheetNo("0");
+            if (!OVER_TORN_STA_NO_LIST.contains(staDesc.getStnNo())){
+                wrkMast.setSheetNo("2");
+            }
             wrkMast.setBarcode(locMast.getBarcode());
             wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
             wrkMast.setAppeTime(now);
@@ -253,7 +580,7 @@
                 if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
                 WrkDetl wrkDetl = new WrkDetl();
                 wrkDetl.sync(detlDto.getLocDetl());
-                wrkDetl.setOrderNo(""); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙�
+                wrkDetl.setOrderNo(detlDto.getOrderNo()); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙�
                 wrkDetl.setWrkNo(workNo);
                 wrkDetl.setIoTime(now);
                 Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount();
@@ -371,7 +698,7 @@
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto, 0);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null,null,null, locTypeDto);
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
@@ -428,7 +755,17 @@
         if (Cools.isEmpty(param.getOutSite())) {
             throw new CoolException("绔欑偣涓嶅瓨鍦�");
         }
+        List<String> locNoOtherListOne = new ArrayList<>();
         for (String locNo : param.getLocNos()) {
+
+            //灏忔枡绠变即鐢熷嚭搴�
+            if (Utils.getRow(locNo)<=8){
+                String locNoOther = staNoOther(locNo);
+                if (!param.getLocNos().contains(locNoOther)){
+                    locNoOtherListOne.add(locNoOther);
+                }
+            }
+
             // 鑾峰彇宸ヤ綔鍙�
             int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
             // 鑾峰彇搴撲綅
@@ -456,7 +793,7 @@
             wrkMast.setIoTime(now);
             wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
             wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
-            wrkMast.setIoPri(10D);
+            wrkMast.setIoPri(12D);
             wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
             wrkMast.setStaNo(param.getOutSite()); // 鐩爣绔�
             wrkMast.setCrnNo(locMast.getCrnNo());
@@ -483,6 +820,252 @@
                     throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
                 }
             }
+        }
+
+        for (String locNo:locNoOtherListOne){
+            // 鑾峰彇宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
+
+            //浼寸敓鍏ュ簱宸ヤ綔鍙�
+            int workNoRu = commonService.getWorkNo(0);
+
+            // 鑾峰彇搴撲綅
+            LocMast locMast = locMastService.selectById(locNo);
+            if (Cools.isEmpty(locMast)) {
+                throw new CoolException(locNo+"搴撲綅涓嶅瓨鍦�");
+            }
+            if (locMast.getLocSts().equals("D")){
+                // 鑾峰彇婧愮珯
+                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                        .eq("type_no", 110)
+                        .eq("stn_no", param.getOutSite())
+                        .eq("crn_no", locMast.getCrnNo());
+                StaDesc staDesc = staDescService.selectOne(wrapper);
+                Integer sourceStaNo = staDesc.getCrnStn();
+                if (Cools.isEmpty(sourceStaNo)) {
+                    throw new CoolException("妫�绱㈡簮绔欏け璐�");
+                }
+                Date now = new Date();
+                // 淇濆瓨宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(now);
+                wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
+                wrkMast.setIoPri(10D);
+                wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
+                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 鐩爣绔�  鍫嗗灈鏈哄叆搴撳彛
+                wrkMast.setCrnNo(locMast.getCrnNo());
+                wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
+                wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+                wrkMast.setPicking("N"); // 鎷f枡
+                wrkMast.setExitMk("N"); // 閫�鍑�
+                wrkMast.setEmptyMk("Y"); // 绌烘澘
+                wrkMast.setLinkMis("N");
+                wrkMast.setAppeUser(userId);
+                wrkMast.setAppeTime(now);
+                wrkMast.setModiUser(userId);
+                wrkMast.setModiTime(now);
+                wrkMast.setWorkNoOther(workNoRu);
+                boolean res = wrkMastService.insert(wrkMast);
+                if (!res) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
+                if (locMast.getLocSts().equals("D")){
+                    locMast.setLocSts("R");
+                    locMast.setModiUser(userId);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+                        throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+                    }
+                }
+
+                // 鐢熸垚宸ヤ綔妗�
+                WrkMast wrkMastRu = new WrkMast();
+                wrkMastRu.setWrkNo(workNoRu);
+                wrkMastRu.setIoTime(new Date());
+                wrkMastRu.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+                wrkMastRu.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
+                wrkMastRu.setIoPri(13D); // 浼樺厛绾�
+                wrkMastRu.setCrnNo(wrkMast.getCrnNo());
+                wrkMastRu.setSourceStaNo(wrkMast.getSourceStaNo());
+                wrkMastRu.setStaNo(wrkMast.getStaNo());
+//        wrkMast.setLocNo(dto.getLocNo());
+                wrkMastRu.setFullPlt("N"); // 婊℃澘
+                wrkMastRu.setPicking("N"); // 鎷f枡
+                wrkMastRu.setExitMk("N"); // 閫�鍑�
+                wrkMastRu.setEmptyMk("Y"); // 绌烘澘
+                wrkMastRu.setLinkMis("Y");
+                wrkMastRu.setCtnType(wrkMast.getCtnType()); // 瀹瑰櫒绫诲瀷
+                // 鎿嶄綔浜哄憳鏁版嵁
+                wrkMastRu.setAppeTime(new Date());
+                wrkMastRu.setModiTime(new Date());
+                boolean resOther = wrkMastService.insert(wrkMastRu);
+                if (!resOther) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+            }else if (locMast.getLocSts().equals("F")){
+                // 鑾峰彇婧愮珯
+                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                        .eq("type_no", 110)
+                        .eq("stn_no", param.getOutSite())
+                        .eq("crn_no", locMast.getCrnNo());
+                StaDesc staDesc = staDescService.selectOne(wrapper);
+                Integer sourceStaNo = staDesc.getCrnStn();
+                if (Cools.isEmpty(sourceStaNo)) {
+                    throw new CoolException("妫�绱㈡簮绔欏け璐�");
+                }
+
+                Date now = new Date();
+                List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo));
+
+// 淇濆瓨宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(now);
+                wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                wrkMast.setIoType(101); // 鍏ュ嚭搴撶姸鎬侊細 101.婊℃澘鍑哄簱
+                wrkMast.setIoPri(13D);
+                wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
+                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 鐩爣绔�  鍫嗗灈鏈哄叆搴撳彛
+                wrkMast.setCrnNo(locMast.getCrnNo());
+                wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
+                wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+                wrkMast.setPicking("N"); // 鎷f枡
+                wrkMast.setExitMk("N"); // 閫�鍑�
+                wrkMast.setEmptyMk("N"); // 绌烘澘
+                wrkMast.setLinkMis("N");
+                wrkMast.setAppeUser(userId);
+                wrkMast.setAppeTime(now);
+                wrkMast.setModiUser(userId);
+                wrkMast.setModiTime(now);
+                wrkMast.setWorkNoOther(workNoRu);
+                boolean res = wrkMastService.insert(wrkMast);
+                if (!res) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+
+                // 鏇存柊搴撲綅鐘舵�� F.婊℃澘 -> R.鍑哄簱棰勭害
+                if (locMast.getLocSts().equals("F")){
+                    locMast.setLocSts("R");
+                    locMast.setModiUser(userId);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+                        throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+                    }
+                }
+
+
+
+                List<WaitPakin> waitPakins = new ArrayList<>();
+                for (LocDetl locDetl:locDetlList){
+                    Mat mat = matService.selectByMatnr(locDetl.getMatnr());
+                    if (Cools.isEmpty(mat)) {
+                        throw new CoolException("瑙勬牸娣诲姞澶辫触锛岃鑱旂郴绠$悊鍛�");
+                    }
+                    WaitPakin waitPakin = new WaitPakin();
+                    waitPakin.sync(locDetl);
+                    waitPakin.setBatch(locDetl.getBatch());       //鏈ㄧ缂栫爜  //鎵规  鍞竴鍊�  绠卞彿
+                    waitPakin.setModel(locDetl.getModel());       //鍗峰彿  鍞竴鍊�
+                    waitPakin.setIoStatus("Y");     // 鍏ュ嚭鐘舵��
+                    waitPakin.setAnfme(locDetl.getAnfme());  // 鏁伴噺
+                    waitPakin.setStatus("Y");    // 鐘舵��
+                    waitPakin.setAppeUser(userId);
+                    waitPakin.setAppeTime(now);
+                    waitPakin.setModiUser(userId);
+                    waitPakin.setModiTime(now);
+                    waitPakin.setLocNo(null);
+                    if (!waitPakinService.insert(waitPakin)) {
+                        throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+                    }
+                    waitPakins.add(waitPakin);
+                }
+                // 鐢熸垚宸ヤ綔妗�
+                WrkMast wrkMastRu = new WrkMast();
+                wrkMastRu.setWrkNo(workNoRu);
+                wrkMastRu.setIoTime(new Date());
+                wrkMastRu.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+                wrkMastRu.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+                wrkMastRu.setIoPri(13D); // 浼樺厛绾�
+                wrkMastRu.setSourceStaNo(sourceStaNo); // 婧愮珯
+                wrkMastRu.setStaNo(crnStaRu(locMast.getCrnNo())); // 鐩爣绔�  鍫嗗灈鏈哄叆搴撳彛
+                wrkMastRu.setCrnNo(locMast.getCrnNo());
+                wrkMastRu.setBarcode(locMast.getBarcode()); // 鎵樼洏鐮�
+                wrkMastRu.setFullPlt("Y"); // 婊℃澘锛歒
+                wrkMastRu.setPicking("N"); // 鎷f枡
+                wrkMastRu.setExitMk("N"); // 閫�鍑�
+                wrkMastRu.setEmptyMk("N"); // 绌烘澘
+                wrkMastRu.setLinkMis("Y");
+                // 鎿嶄綔浜哄憳鏁版嵁
+                wrkMastRu.setAppeTime(now);
+                wrkMastRu.setModiTime(now);
+                boolean resOther = wrkMastService.insert(wrkMastRu);
+                if (!resOther) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                // 鐢熸垚宸ヤ綔妗f槑缁�
+                waitPakins.forEach(waitPakin -> {
+                    WrkDetl wrkDetl = new WrkDetl();
+                    wrkDetl.sync(waitPakin);
+                    wrkDetl.setWrkNo(wrkMastRu.getWrkNo());
+                    wrkDetl.setIoTime(wrkMastRu.getIoTime());
+                    wrkDetl.setAppeTime(now);
+                    wrkDetl.setModiTime(now);
+                    if (!wrkDetlService.insert(wrkDetl)) {
+                        throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+                    }
+                });
+
+            }else {
+                throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篋鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
+            }
+        }
+    }
+
+    public Integer crnStaRu(Integer crnNo){
+        switch (crnNo){
+            case 1:
+                return 153;
+            case 2:
+                return 145;
+            default:
+                return null;
+        }
+    }
+
+    public String staNoOther(String locNo){
+        int row = Utils.getRow(locNo);
+        if (row%4==0 || row%4==1){
+            return getDeepLoc2(locNo,row);
+        }else {
+            return getDeepLoc(locNo,row);
+        }
+    }
+
+    /**
+     * 鑾峰彇 娴呭簱浣嶅搴旂殑娣卞簱浣嶅彿
+     */
+    public static String getDeepLoc(String shallowLoc,int row) {
+        if (row == 2 || row == 6) {
+            return Utils.zerofill(String.valueOf(row-1), 2) + shallowLoc.substring(2);
+        } else if (row == 3 || row == 7) {
+            return Utils.zerofill(String.valueOf(row+1), 2) + shallowLoc.substring(2);
+        }else {
+            return shallowLoc;
+        }
+    }
+
+    /**
+     * 鑾峰彇 娣卞簱浣嶅搴旂殑娴呭簱浣嶅彿
+     */
+    public static String getDeepLoc2(String shallowLoc,int row) {
+        if (row == 1 || row == 5) {
+            return Utils.zerofill(String.valueOf(row+1), 2) + shallowLoc.substring(2);
+        } else if (row == 4 || row == 8) {
+            return Utils.zerofill(String.valueOf(row-1), 2) + shallowLoc.substring(2);
+        }else {
+            return null;
         }
     }
 
@@ -560,7 +1143,7 @@
         for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
             if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                 LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
-                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
+                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount(),param.getOrderNo()));
             }
         }
         if (!locDetlDtos.isEmpty()) {
@@ -674,14 +1257,17 @@
         if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
             wrkMast.setWrkSts(4L);
         // 鍑哄簱
-        } else if (wrkMast.getWrkSts() > 10) {
+        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()!=202) {
             wrkMast.setWrkSts(14L);
+        }else if (wrkMast.getIoType()==202){
+            wrkMast.setWrkSts(57L);
         }
         Date now = new Date();
         wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
         wrkMast.setCrnEndTime(now);
         wrkMast.setModiTime(now);
         wrkMast.setModiUser(userId);
+        wrkMast.setSheetNo("2");
         // 瀹屾垚鎿嶄綔浜哄憳璁板綍
         wrkMast.setManuType("鎵嬪姩瀹屾垚");
         if (!wrkMastService.updateById(wrkMast)) {
@@ -818,6 +1404,23 @@
         if (Cools.isEmpty(wrkMast)){
             throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
         }
+        if (Cools.isEmpty(wrkMast.getLocNo()) && Cools.isEmpty(wrkMast.getSourceLocNo())){
+            int devCount = basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo()));
+            if (devCount!=0){
+                throw new CoolException("鍙栨秷澶辫触锛屽伐浣滃彿锛�"+wrkMast.getWrkNo()+"鍦ㄨ緭閫佺嚎涓婅繍琛屼腑锛侊紒锛�");
+            }
+            try{
+                wrkMastService.deleteById(wrkMast.getWrkNo());
+                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+                if (!wrkDetls.isEmpty()) {
+//                    wrkDetlService.deleteById(wrkMast.getWrkNo());
+                    wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                }
+            }catch (Exception e){
+                throw new CoolException("鍙栨秷澶辫触锛屽紓甯�"+e);
+            }
+            return;
+        }
         String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
         String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
         // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
@@ -838,7 +1441,7 @@
                 locMastService.updateById(locMast);
             }
         // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
+        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14 && wrkMast.getIoType()!=202) {
             locNo = wrkMast.getSourceLocNo();
             // 鍑哄簱 ===>> F.鍦ㄥ簱
             if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
@@ -859,6 +1462,7 @@
                 locMast.setModiUser(userId);
                 locMastService.updateById(locMast);
             }
+        } else if (wrkMast.getIoType()==202 || wrkMast.getIoType()==212){
         } else {
             throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
         }
@@ -945,6 +1549,9 @@
             }
             // 鍒犻櫎宸ヤ綔妗f槑缁�
             boolean wrkDetlRes = wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
+        }
+        if (wrkMast.getIoType()==202 || wrkMast.getIoType()==212){
+            return;
         }
 
         // 淇敼搴撲綅鐘舵��
@@ -1132,7 +1739,7 @@
         }
         List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", param.getLocDetls().get(0).getMatnr()));
         if (Cools.isEmpty(locDetls) || locDetls.size()<1){
-            throw new CoolException("寰呬慨鏀瑰晢鍝佹棤搴撳瓨锛屾棤闇�淇敼锛�  鍝佸彿锛�"+param.getLocDetls().get(0).getMatnr());
+            throw new CoolException("寰呬慨鏀瑰晢鍝佹棤搴撳瓨锛屾棤闇�淇敼锛�  瑙勬牸锛�"+param.getLocDetls().get(0).getMatnr());
         }
         try {
             locDetlService.updateMatTurn(param.getLocDetls().get(0).getMatnr(),mat.getMatnr());

--
Gitblit v1.9.1