From 2938aa734a2cf0baf93fdced92ea21e37f187365 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 10 六月 2025 11:05:39 +0800
Subject: [PATCH] 出库单下发执行生成任务明细

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java |   84 ++++++++++++++++++++++++++++--------------
 1 files changed, 56 insertions(+), 28 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index 8d97ef5..971f036 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -144,7 +144,7 @@
     private WaitPakin validateWaitPakin(String barcode) {
         WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                 .eq(WaitPakin::getBarcode, barcode)
-                .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val)));
+                .eq(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
 
         if (Cools.isEmpty(waitPakin)) {
             throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�");
@@ -172,7 +172,7 @@
         task.setTaskCode(ruleCode)
                 .setTaskStatus(TaskStsType.GENERATE_IN.id)
                 .setTaskType(TaskType.TASK_TYPE_IN.type)
-                .setWarehType(WarehType.WAREHOUSE_TYPE_CRN.id)
+                .setWarehType(WarehType.WAREHOUSE_TYPE_CRN.val)
                 .setTargLoc(targetLoc)
                 .setBarcode(barcode)
                 .setTargSite(targetSite)
@@ -194,7 +194,6 @@
                 .eq(Loc::getCode, locCode)
                 .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type)
                 .set(Loc::getBarcode, barcode));
-
         if (!updated) {
             throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒");
         }
@@ -204,9 +203,7 @@
      * 鑾峰彇骞堕獙璇佺粍鎷栨槑缁�
      */
     private List<WaitPakinItem> getWaitPakinItems(Long pakinId) {
-        List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(
-                new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, pakinId));
-
+        List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, pakinId));
         if (waitPakinItems.isEmpty()) {
             throw new CoolException("鏁版嵁閿欒锛氱粍鎷栨槑缁嗕笉瀛樺湪");
         }
@@ -334,7 +331,7 @@
 //        return locNo;
 //    }
     @Override
-    public InTaskMsgDto getLocNo(TaskInParam param) throws Exception{
+    public InTaskMsgDto getLocNo(TaskInParam param) throws Exception {
         String matnr = null;
         String batch = null;
         List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
@@ -361,23 +358,21 @@
         }
         LocTypeDto locTypeDto = new LocTypeDto(param);
         InTaskMsgDto dto = null;
-        switch (warehouseArea.getType()) {
-            case "CRN": //鍫嗗灈鏈�
-                dto = getLocNoCrn(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
-                break;
-            case "SXC": //鍥涘悜搴�
-                break;
-            case "CTU": //ctu
-                dto = getLocNoCtu(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
-                break;
-            default:
-                dto = getLocNoCtu(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
-                break;
+        //鏍规嵁绔嬪簱绫诲瀷鑾峰彇鑾峰彇搴撲綅
+        if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_CRN.val)) {
+            //鍫嗗灈鏈�
+            dto = getLocNoCrn(param.getOrgLoc(),deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
+
+        } else if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_FOUR_DIRECTIONS.val)) {
+            //鍥涘悜搴�
+        }  else {
+            //CTU 搴撲互鍙婂叾瀹�
+            dto = getLocNoCtu(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
         }
         return dto;
     }
 
-    private InTaskMsgDto getLocNoCrn(DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
+    private InTaskMsgDto getLocNoCrn(String orgLoc,DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
         if (Cools.isEmpty(matnr)) {  //鐗╂枡鍙�
             matnr = "";
         }
@@ -414,15 +409,15 @@
             throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
         }
         //鍏ュ簱闈犺繎鎽嗘斁
-        if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) {
+        if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr) && Cools.isEmpty(orgLoc)) {
             if (nearRow != curRow) {
                 List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr));
                 for (LocItem locItem : locItems) {
                     Loc loc1 = locService.getById(locItem.getLocId());
-                    if (LocUtils.isShallowLoc(slaveProperties, loc1.getCode())) {
+                    if (LocUtils.isShallowLoc(loc1.getCode())) {
                         continue;
                     }
-                    String shallowLocNo = LocUtils.getShallowLoc(slaveProperties, loc1.getCode());
+                    String shallowLocNo = LocUtils.getShallowLoc(loc1.getCode());
                     // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
                     Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo));
                     if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
@@ -430,7 +425,6 @@
                             loc = shallowLoc;
                             channel = shallowLoc.getChannel();
                             break;
-
                         }
                     }
                 }
@@ -490,11 +484,15 @@
                     .orderByAsc(Loc::getLev)
                     .orderByAsc(Loc::getCol)
             );
+            Loc orgMoveLoc = null;
+            if (!Cools.isEmpty(orgLoc)) {
+                orgMoveLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, orgLoc));
+            }
             for (Loc locMast1 : locMasts) {
                 if (!LocUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                     continue;
                 }
-                String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode());
+                String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
                 if ((ioType == 1 && deviceBind.getBeSimilar().equals("1"))) {
                     //鐩镐技鐗╂枡鎵撳紑锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾病璐у氨鏀炬繁搴撲綅锛屾湁璐у氨涓嶆搷浣�
                     Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
@@ -502,7 +500,13 @@
                             .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
                             .eq(Loc::getAreaId, area)
                     );
+
                     if (!Cools.isEmpty(locMast2)) {
+                        if (null != orgMoveLoc){
+                            if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+                                break;
+                            }
+                        }
                         loc = locMast2;
                         break;
                     }
@@ -513,7 +517,13 @@
                             .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_F.type)
                             .eq(Loc::getAreaId, area)
                     );
+
                     if (!Cools.isEmpty(locMast2)) {
+                        if (null != orgMoveLoc){
+                            if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+                                break;
+                            }
+                        }
                         loc = locMast1;
                         break;
                     } else {
@@ -522,7 +532,13 @@
                                 .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
                                 .eq(Loc::getAreaId, area)
                         );
+
                         if (!Cools.isEmpty(locMast2)) {
+                            if (null != orgMoveLoc){
+                                if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+                                    break;
+                                }
+                            }
                             loc = locMast2;
                             break;
                         }
@@ -535,13 +551,19 @@
                         continue;
                     }
                     if (deviceBind.getBeSimilar().equals("1")) {
-                        String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode());
+                        String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
                         Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
                                 .eq(Loc::getCode, shallowLoc)
                                 .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
                                 .eq(Loc::getAreaId, area)
                         );
+
                         if (!Cools.isEmpty(locMast2)) {
+                            if (null != orgMoveLoc){
+                                if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+                                    break;
+                                }
+                            }
                             loc = locMast2;
                             break;
                         } else {
@@ -550,7 +572,13 @@
                                     .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_D.type)
                                     .eq(Loc::getAreaId, area)
                             );
+
                             if (!Cools.isEmpty(locMast2)) {
+                                if (null != orgMoveLoc){
+                                    if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+                                        break;
+                                    }
+                                }
                                 loc = locMast1;
                                 break;
                             }
@@ -579,14 +607,14 @@
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
             if (times < rowCount * 2) {
                 times = times + 1;
-                return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
+                return getLocNoCrn(orgLoc,deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
 
             }
             // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
             if (locTypeDto.getLocType1() < 3) {
                 int i = locTypeDto.getLocType1() + 1;
                 locTypeDto.setLocType1(i);
-                return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
+                return getLocNoCrn(orgLoc,deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
             }
             throw new CoolException("娌℃湁绌哄簱浣�");
         }

--
Gitblit v1.9.1