From e711c834aec2293c53b07efe53e81e3573c289b6 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期三, 01 四月 2026 11:42:44 +0800
Subject: [PATCH] lsh#

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java |  178 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 115 insertions(+), 63 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 3a435cf..6d3f168 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
@@ -30,6 +30,7 @@
 import com.vincent.rsf.server.manager.mapper.LocItemMapper;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.manager.service.impl.LocServiceImpl;
+import com.vincent.rsf.server.manager.utils.WarehouseLocationRetrievalUtil;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.manager.enums.LocStsType;
 import com.vincent.rsf.server.system.entity.*;
@@ -130,7 +131,7 @@
     public InTaskMsgDto createInTask(TaskInParam param) {
 
         // 楠岃瘉璁惧绔欑偣
-        DeviceSite deviceSite = validateDeviceSite(param);
+//        DeviceSite deviceSite = validateDeviceSite(param);
 
         // 楠岃瘉缁勬嫋鐘舵��
         WaitPakin waitPakin = validateWaitPakin(param.getBarcode());
@@ -148,7 +149,7 @@
 
         // 鍒涘缓骞朵繚瀛樹换鍔�
         Task task = createTask(ruleCode, locNo.getLocNo(), waitPakin.getBarcode(),
-                deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), param.getUser());
+                null, param.getSourceStaNo().toString(), param.getUser());
 
         // 鏇存柊搴撲綅鐘舵��
         updateLocStatus(task.getTargLoc(), waitPakin.getBarcode());
@@ -171,16 +172,16 @@
     /**
      * 楠岃瘉璁惧绔欑偣
      */
-    private DeviceSite validateDeviceSite(TaskInParam param) {
-        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
-                .eq(DeviceSite::getSite, param.getSourceStaNo())
-                .eq(DeviceSite::getType, param.getIoType()));
-
-        if (Objects.isNull(deviceSite)) {
-            throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
-        }
-        return deviceSite;
-    }
+//    private DeviceSite validateDeviceSite(TaskInParam param) {
+//        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+//                .eq(DeviceSite::getSite, param.getSourceStaNo())
+//                .eq(DeviceSite::getType, param.getIoType()));
+//
+//        if (Objects.isNull(deviceSite)) {
+//            throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
+//        }
+//        return deviceSite;
+//    }
 
     /**
      * 楠岃瘉缁勬嫋鐘舵��
@@ -393,6 +394,42 @@
 //        return locNo;
 //    }
     @Override
+    public InTaskMsgDto getLocNoArea(TaskInParam param) throws Exception {
+        String matnr = null;
+        String batch = null;
+        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
+        if (Cools.isEmpty(waitPakins) && param.getIoType().equals(TaskType.TASK_TYPE_IN.type)) {
+            throw new CoolException("鏈壘鍒扮粍鎵樹俊鎭紝璇风粍鎵�");
+        } else if (!Cools.isEmpty(waitPakins)) {
+            matnr = waitPakins.get(0).getCode();
+            batch = waitPakins.get(0).getCode();
+        }
+
+        DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(param.getSourceStaNo()));
+        if (Cools.isEmpty(deviceBind)) {
+            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
+        }
+        WarehouseAreas warehouseArea = warehouseAreasService.getById(deviceBind.getTypeId());
+        if (Cools.isEmpty(warehouseArea)) {
+            throw new CoolException("鏈壘鍒版墍灞炲簱鍖轰俊鎭�");
+        }
+        LocTypeDto locTypeDto = new LocTypeDto(param);
+        InTaskMsgDto dto = null;
+        //鏍规嵁绔嬪簱绫诲瀷鑾峰彇鑾峰彇搴撲綅
+        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;
+    }
+
+    @Override
     public InTaskMsgDto getLocNo(TaskInParam param) throws Exception {
         String matnr = null;
         String batch = null;
@@ -403,13 +440,13 @@
             matnr = waitPakins.get(0).getCode();
             batch = waitPakins.get(0).getCode();
         }
-        List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
-                .eq(DeviceSite::getSite, param.getSourceStaNo())
-                .eq(DeviceSite::getType, param.getIoType())
-        );
-        if (Cools.isEmpty(deviceSites)) {
-            throw new CoolException("鏈壘鍒扮珯鐐硅矾寰勪俊鎭�");
-        }
+//        List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
+//                .eq(DeviceSite::getSite, param.getSourceStaNo())
+//                .eq(DeviceSite::getType, param.getIoType())
+//        );
+//        if (Cools.isEmpty(deviceSites)) {
+//            throw new CoolException("鏈壘鍒扮珯鐐硅矾寰勪俊鎭�");
+//        }
         DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(param.getSourceStaNo()));
         if (Cools.isEmpty(deviceBind)) {
             throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
@@ -730,40 +767,22 @@
             }
         }
 
-//        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
-//        if (ioType == 10 && deviceBind.getEmptySimilar().equals("1")) {
-//            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-//                    .eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow).eq("whs_type", rowLastnoType.getType().longValue()));
-//            if (!locMasts.isEmpty()) {
-//                for (LocMast loc : locMasts) {
-//                    if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
-//                        continue;
-//                    }
-//                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
-//                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-//                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-//                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-//                        if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
-//                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-//                                locMast = shallowLoc;
-//                                crnNo = locMast.getCrnNo();
-//                                break;
-//                            }
-//                        }
-//                    }
-//                }
-//            }
-//        }
-        //鏌ユ壘璺緞
-        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
-                .eq(DeviceSite::getType, ioType)
-                .eq(DeviceSite::getSite, sourceStaNo)
-                .eq(DeviceSite::getChannel, channel).last("limit 1")
-        );
-        if (Cools.isEmpty(deviceSite)) {
-            channel = 0;
-        } else {
-            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
+
+
+        if (loc != null) {
+            //鏌ユ壘璺緞
+            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
+//            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+//                    .eq(DeviceSite::getType, ioType)
+//                    .eq(DeviceSite::getSite, sourceStaNo)
+//                    .eq(DeviceSite::getChannel, channel).last("limit 1")
+//            );
+            if (!available) {
+                channel = 0;
+                loc = null;
+            } else {
+                inTaskMsgDto.setStaNo(sourceStaNo);
+            }
         }
 
         //鏇存柊褰撳墠鎺�
@@ -891,6 +910,23 @@
                 }
             }
         }
+
+        if (loc != null) {
+            //鏌ユ壘璺緞
+            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
+//            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+//                    .eq(DeviceSite::getType, ioType)
+//                    .eq(DeviceSite::getSite, sourceStaNo)
+//                    .eq(DeviceSite::getChannel, channel).last("limit 1")
+//            );
+            if (!available) {
+                channel = 0;
+                loc = null;
+            } else {
+                inTaskMsgDto.setStaNo(sourceStaNo);
+            }
+        }
+
         //鏌ヨ褰撳墠搴撲綅绫诲瀷绌哄簱浣� 灏忎簬5涓垯locmast = null
         List<Loc> locTypeLocMasts = locService.list(new LambdaQueryWrapper<Loc>()
                 .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
@@ -954,18 +990,34 @@
             loc = loc2;
             break;
         }
+
         //鏌ユ壘璺緞
-        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
-                .eq(DeviceSite::getType, ioType)
-                .eq(DeviceSite::getSite, sourceStaNo)
-                .eq(!Objects.isNull(loc.getDeviceNo()), DeviceSite::getDeviceCode, loc.getDeviceNo())
-        );
-        if (Cools.isEmpty(deviceSite)) {
-            deviceNo = 0;
-            loc = null;
-        } else {
-            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
+        if (loc != null) {
+            //鏌ユ壘璺緞
+            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
+//            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+//                    .eq(DeviceSite::getType, ioType)
+//                    .eq(DeviceSite::getSite, sourceStaNo)
+//                    .eq(DeviceSite::getChannel, channel).last("limit 1")
+//            );
+            if (!available) {
+                deviceNo = 0;
+                loc = null;
+            } else {
+                inTaskMsgDto.setStaNo(sourceStaNo);
+            }
         }
+//        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+//                .eq(DeviceSite::getType, ioType)
+//                .eq(DeviceSite::getSite, sourceStaNo)
+//                .eq(!Objects.isNull(loc.getDeviceNo()), DeviceSite::getDeviceCode, loc.getDeviceNo())
+//        );
+//        if (Cools.isEmpty(deviceSite)) {
+//            deviceNo = 0;
+//            loc = null;
+//        } else {
+//            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
+//        }
         // 閫掑綊鏌ヨ
         if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊

--
Gitblit v1.9.1