From 00a44859a673b388e1dca5f54c4ecaffc5fee30e Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期四, 19 三月 2026 10:21:08 +0800
Subject: [PATCH] lsh#0:新增、更新、解禁(只要调用了更新,就代表非禁用了)  1:禁用

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

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index cd0ab43..2f739e4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -18,8 +18,8 @@
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.controller.dto.LocStockDto;
-import com.vincent.rsf.server.manager.controller.params.PakinItem;
-import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
+import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto;
+import com.vincent.rsf.server.manager.controller.params.*;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.service.*;
@@ -112,6 +112,8 @@
     private WarehouseAreasItemServiceImpl warehouseAreasItemService;
     @Autowired
     private LocItemService locItemService;
+    @Autowired
+    private OutStockService outStockService;
 
 
     /**
@@ -205,7 +207,6 @@
     @Override
     @Transactional(timeout = 60, rollbackFor = Exception.class)
     public void syncMatnrs(List<BaseMatParms> matnrs) {
-        List<Matnr> syncMatnrs = new ArrayList<>();
         if (!matnrs.isEmpty()) {
             matnrs.forEach(matnr -> {
                 Matnr mat = new Matnr();
@@ -215,17 +216,28 @@
                 BeanUtils.copyProperties(matnr, mat);
                 mat.setCode(matnr.getMatnr()).setName(matnr.getMaktx());
                 if (!Objects.isNull(matnr.getGroupName())) {
-                    MatnrGroup matnrGroup = matnrGroupService.getOne(new LambdaQueryWrapper<MatnrGroup>().eq(MatnrGroup::getName, matnr.getGroupName()), false);
-                    if (Objects.isNull(matnrGroup)) {
+                    MatnrGroup matnrGroup = matnrGroupService.getOne(new LambdaQueryWrapper<MatnrGroup>().eq(MatnrGroup::getName, matnr.getGroupName()).last("limit 1"), false);
+                    if (!Objects.isNull(matnrGroup)) {
                         mat.setGroupCode(matnrGroup.getCode()).setGroupId(matnrGroup.getId());
                     }
                 }
-                syncMatnrs.add(mat);
-            });
+                Matnr exist = matnrService.getOne(new LambdaQueryWrapper<Matnr>()
+                        .eq(Matnr::getCode, matnr.getMatnr())
+                        .last("limit 1"));
 
-            if (!matnrService.saveOrUpdateBatch(syncMatnrs)) {
-                throw new CoolException("鐗╂枡淇℃伅淇濆瓨鎴愬姛锛侊紒");
-            }
+                mat.setStatus(Objects.isNull(matnr.getOperateType()) ? 1 : (matnr.getOperateType() == 1 ? 0 : 1));
+                if (!Objects.isNull(exist)) {
+                    mat.setId(exist.getId());
+                    if (!matnrService.saveOrUpdate(mat)) {
+                        throw new CoolException("鐗╂枡淇℃伅鏇存柊澶辫触锛侊紒");
+                    }
+                } else {
+                    mat.setId(null);
+                    if (!matnrService.save(mat)) {
+                        throw new CoolException("鐗╂枡淇℃伅淇濆瓨澶辫触锛侊紒");
+                    }
+                }
+            });
         }
     }
 
@@ -238,14 +250,14 @@
     @Override
     public R queryOrderStatus(QueryOrderParam queryParams) {
         WkOrder wkOrders = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
-                .eq(WkOrder::getPoCode, queryParams.getOrderNo()));
+                .eq(WkOrder::getPoCode, queryParams.getOrderNo()).last("limit 1"));
         if (Objects.isNull(wkOrders)) {
             Map<String, Object> map = new HashMap<>();
             map.put("exceStatus", "-1");
             return R.ok("鍗曟嵁涓嶅瓨鍦� 锛侊紒").add(map);
         }
 
-        AsnOrderLog orderLog = asnOrderLogService.getOne(new LambdaQueryWrapper<AsnOrderLog>().eq(AsnOrderLog::getCode, queryParams.getOrderNo()));
+        AsnOrderLog orderLog = asnOrderLogService.getOne(new LambdaQueryWrapper<AsnOrderLog>().eq(AsnOrderLog::getCode, queryParams.getOrderNo()).last("limit 1"));
         if (!Objects.isNull(orderLog)) {
             Map<String, Object> map = new HashMap<>();
             map.put("exceStatus", "4");
@@ -305,7 +317,8 @@
     @Override
     @Transactional(timeout = 60, rollbackFor = Exception.class)
     public R syncMatGroups(List<SyncMatGroupsParams> matGroupsParams) {
-        List<MatnrGroup> syncMatGroups = new ArrayList<>();
+        final int[] insertCount = {0};
+        final int[] updateCount = {0};
         matGroupsParams.forEach(matGroupsParam -> {
             MatnrGroup matnrGroup = new MatnrGroup();
             BeanUtils.copyProperties(matGroupsParam, matnrGroup);
@@ -318,12 +331,36 @@
             if (Objects.isNull(matGroupsParam.getParCode())) {
                 throw new CoolException("涓婄骇鐗╂枡鍒嗙粍缂栫爜涓嶈兘涓虹┖锛侊紒");
             }
-            syncMatGroups.add(matnrGroup);
+
+            // 骞傜瓑鍚屾锛氫紭鍏堟寜缂栫爜鍖归厤锛屾壘涓嶅埌鍐嶆寜鍚嶇О鍖归厤
+            MatnrGroup one = matnrGroupService.getOne(new LambdaQueryWrapper<MatnrGroup>()
+                    .eq(MatnrGroup::getCode, matGroupsParam.getCode())
+                    .last("limit 1"));
+            if (Objects.isNull(one)) {
+                one = matnrGroupService.getOne(new LambdaQueryWrapper<MatnrGroup>()
+                        .eq(MatnrGroup::getName, matGroupsParam.getName())
+                        .last("limit 1"));
+            }
+
+            if (!Objects.isNull(one)) {
+                matnrGroup.setId(one.getId());
+                if (!matnrGroupService.saveOrUpdate(matnrGroup)) {
+                    throw new CoolException("鐗╂枡鍒嗙粍鏇存柊澶辫触锛侊紒");
+                }
+                updateCount[0]++;
+            } else {
+                matnrGroup.setId(null);
+                if (!matnrGroupService.save(matnrGroup)) {
+                    throw new CoolException("鐗╂枡鍒嗙粍淇濆瓨澶辫触锛侊紒");
+                }
+                insertCount[0]++;
+            }
         });
-        if (!matnrGroupService.saveBatch(syncMatGroups)) {
-            throw new CoolException("鐗╂枡鍒嗙粍淇濆瓨澶辫触锛侊紒");
-        }
-        return R.ok();
+        Map<String, Object> result = new HashMap<>();
+        result.put("total", matGroupsParams.size());
+        result.put("insertCount", insertCount[0]);
+        result.put("updateCount", updateCount[0]);
+        return R.ok(result);
     }
 
     /**
@@ -335,23 +372,45 @@
     @Override
     @Transactional(timeout = 60, rollbackFor = Exception.class)
     public R syncWarehouseAreas(List<LocAreasParams> areasParams) {
+        final int[] insertCount = {0};
+        final int[] updateCount = {0};
         areasParams.forEach(param -> {
             WarehouseAreas locArea = new WarehouseAreas();
             BeanUtils.copyProperties(param, locArea);
-            WarehouseAreas warehouseAreas = warehouseAreasService
-                    .getOne(new LambdaQueryWrapper<WarehouseAreas>()
-                            .eq(WarehouseAreas::getName, param.getName()));
+            // 骞傜瓑鍚屾锛氫紭鍏堟寜缂栫爜鍖归厤锛屾壘涓嶅埌鍐嶆寜鍚嶇О鍖归厤
+            WarehouseAreas warehouseAreas = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>()
+                    .eq(WarehouseAreas::getCode, param.getCode())
+                    .last("limit 1"));
+            if (Objects.isNull(warehouseAreas)) {
+                warehouseAreas = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>()
+                        .eq(WarehouseAreas::getName, param.getName())
+                        .last("limit 1"));
+            }
             if (!Objects.isNull(warehouseAreas)) {
                 locArea.setWarehouseId(warehouseAreas.getId());
             }
             locArea.setName(param.getName())
-                    .setCode(param.getCode())
-                    .setId(null);
-            if (!warehouseAreasService.save(locArea)) {
-                throw new CoolException("搴撳尯淇濆瓨澶辫触锛侊紒");
+                    .setCode(param.getCode());
+
+            if (!Objects.isNull(warehouseAreas)) {
+                locArea.setId(warehouseAreas.getId());
+                if (!warehouseAreasService.saveOrUpdate(locArea)) {
+                    throw new CoolException("搴撳尯鏇存柊澶辫触锛侊紒");
+                }
+                updateCount[0]++;
+            } else {
+                locArea.setId(null);
+                if (!warehouseAreasService.save(locArea)) {
+                    throw new CoolException("搴撳尯淇濆瓨澶辫触锛侊紒");
+                }
+                insertCount[0]++;
             }
         });
-        return R.ok();
+        Map<String, Object> result = new HashMap<>();
+        result.put("total", areasParams.size());
+        result.put("insertCount", insertCount[0]);
+        result.put("updateCount", updateCount[0]);
+        return R.ok(result);
     }
 
     /**
@@ -363,15 +422,35 @@
     @Override
     @Transactional(timeout = 60, rollbackFor = Exception.class)
     public R syncWarehouse(List<WarehouseParams> warehouses) {
+        final int[] insertCount = {0};
+        final int[] updateCount = {0};
         warehouses.forEach(warehouse -> {
             Warehouse ware = new Warehouse();
             BeanUtils.copyProperties(warehouse, ware);
-            ware.setId(null);
-            if (!warehouseService.save(ware)) {
-                throw new CoolException("浠撳簱鍚屾淇濆瓨澶辫触锛侊紒");
+            // 骞傜瓑鍚屾锛氭寜浠撳簱鍚嶇О鍖归厤
+            Warehouse one = warehouseService.getOne(new LambdaQueryWrapper<Warehouse>()
+                    .eq(Warehouse::getName, warehouse.getName())
+                    .last("limit 1"));
+            ware.setStatus(Objects.isNull(warehouse.getOperateType()) ? 1 : (warehouse.getOperateType() == 1 ? 0 : 1));
+            if (!Objects.isNull(one)) {
+                ware.setId(one.getId());
+                if (!warehouseService.saveOrUpdate(ware)) {
+                    throw new CoolException("浠撳簱鍚屾鏇存柊澶辫触锛侊紒");
+                }
+                updateCount[0]++;
+            } else {
+                ware.setId(null);
+                if (!warehouseService.save(ware)) {
+                    throw new CoolException("浠撳簱鍚屾淇濆瓨澶辫触锛侊紒");
+                }
+                insertCount[0]++;
             }
         });
-        return R.ok();
+        Map<String, Object> result = new HashMap<>();
+        result.put("total", warehouses.size());
+        result.put("insertCount", insertCount[0]);
+        result.put("updateCount", updateCount[0]);
+        return R.ok(result);
     }
 
     /**
@@ -386,20 +465,37 @@
         companyParams.forEach(param -> {
             Companys companys = new Companys();
             BeanUtils.copyProperties(param, companys);
-            if (Objects.isNull(companys.getCode())) {
+            if (Objects.isNull(companys.getCode()) || StringUtils.isBlank(companys.getCode())) {
                 throw new CoolException("浼佷笟缂栫爜涓嶈兘涓虹┖锛侊紒");
             }
-            Companys one = companysService.getOne(new LambdaQueryWrapper<Companys>().eq(Companys::getName, param.getName()));
-            if (Objects.isNull(one)) {
-                String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_COMPANYS_CODE, null);
-                companys.setCode(ruleCode);
-            } else {
-                throw new CoolException(one.getName() + "锛屼紒涓氬悕閲嶅锛侊紒");
+            if (Objects.isNull(companys.getName()) || StringUtils.isBlank(companys.getName())) {
+                throw new CoolException("浼佷笟鍚嶇О涓嶈兘涓虹┖锛侊紒");
             }
-            companys.setType(CompanysType.getCustomVal(param.getType()))
-                    .setId(null);
-            if (!companysService.save(companys)) {
-                throw new CoolException("浼佷笟淇濆瓨澶辫触锛侊紒");
+
+            // 骞傜瓑鍚屾锛氫紭鍏堟寜缂栫爜鍖归厤锛屾壘涓嶅埌鍐嶆寜鍚嶇О鍖归厤
+            Companys one = companysService.getOne(new LambdaQueryWrapper<Companys>()
+                    .eq(Companys::getCode, param.getCode())
+                    .last("limit 1"));
+            if (Objects.isNull(one)) {
+                one = companysService.getOne(new LambdaQueryWrapper<Companys>()
+                        .eq(Companys::getName, param.getName())
+                        .last("limit 1"));
+            }
+
+            companys.setType(CompanysType.getCustomVal(param.getType()));
+            companys.setStatus(Objects.isNull(param.getOperateType()) ? 1 : (param.getOperateType() == 1 ? 0 : 1));
+            if (!Objects.isNull(one)) {
+                companys.setId(one.getId());
+                // 宸插瓨鍦ㄥ垯鏇存柊锛屼笉閲嶅鎶ラ敊
+                if (!companysService.saveOrUpdate(companys)) {
+                    throw new CoolException("浼佷笟鏇存柊澶辫触锛侊紒");
+                }
+            } else {
+                companys.setId(null);
+                // 鏂板鏃朵繚鐣橢RP浼犲叆缂栫爜锛屼笉鍐嶈鐩栫敓鎴�
+                if (!companysService.save(companys)) {
+                    throw new CoolException("浼佷笟淇濆瓨澶辫触锛侊紒");
+                }
             }
         });
         return R.ok();
@@ -416,6 +512,9 @@
     public R syncCheckOrder(List<SyncOrderParams> syncOrders, Long loginUserId) {
         if (!syncOrders.isEmpty()) {
             syncOrders.forEach(syncOrder -> {
+                if (!syncOrder.getWkType().matches("\\d+")){
+                    syncOrder.setWkType(OrderWorkType.getOrderTypeUpdate(syncOrder.getWkType()));
+                }
                 WkOrder wkOrder = new WkOrder(syncOrder);
                 DictData one = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_BUSINESS_TYPE)
                         .eq(DictData::getValue, syncOrder.getWkType()), false);
@@ -523,22 +622,48 @@
                     throw new CoolException("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒");
                 }
 
-                // 绔嬪嵆瑙﹀彂寮傛浠诲姟锛屼笉绛夊緟缁撴灉
-                if (!Cools.isEmpty(palletId.get()) && StringUtils.isNotBlank(syncOrder.getOrderNo()) && !Cools.isEmpty(syncOrder.getStationId())) {
-                    //缁勬墭
-                    WaitPakinParam pakinParam = new WaitPakinParam();
-                    pakinParam.setBarcode(palletId.get());
-                    pakinParam.setStaNo(syncOrder.getStationId());
+                if (!rule.equals(SerialRuleCode.SYS_OUT_STOCK_CODE)){
+                    // 鍏ュ簱锛氳仈鍔ㄧ粍鎵�
+                    // 绔嬪嵆瑙﹀彂寮傛浠诲姟锛屼笉绛夊緟缁撴灉
+                    if (!Cools.isEmpty(palletId.get()) && StringUtils.isNotBlank(syncOrder.getOrderNo()) && !Cools.isEmpty(syncOrder.getStationId())) {
+                        //缁勬墭
+                        WaitPakinParam pakinParam = new WaitPakinParam();
+                        pakinParam.setBarcode(palletId.get());
+                        pakinParam.setStaNo(syncOrder.getStationId());
 
-                    boolean itemsCheck = waitPakinService.mergeItemsCheck(pakinParam, loginUserId);
-                    if (itemsCheck) {
-                        CompletableFuture.runAsync(() -> {
-                            try {
-                                asyncMergeItemsWcs(pakinParam, syncOrder.getOrderNo(), loginUserId);
-                            } catch (Exception e) {
-                                log.warn("璁㈠崟 {} 寮�濮嬭嚜鍔ㄧ粍鎵�", syncOrder.getOrderNo());
-                            }
-                        });
+                        boolean itemsCheck = waitPakinService.mergeItemsCheck(pakinParam, loginUserId);
+                        if (itemsCheck) {
+                            CompletableFuture.runAsync(() -> {
+                                try {
+                                    asyncMergeItemsWcs(pakinParam, syncOrder.getOrderNo(), loginUserId);
+                                } catch (Exception e) {
+                                    log.warn("璁㈠崟 {} 寮�濮嬭嚜鍔ㄧ粍鎵�", syncOrder.getOrderNo());
+                                }
+                            });
+                        }
+                    }
+                } else {
+                    // 鍑哄簱锛氭寚瀹氬嚭搴�
+                    // 绔嬪嵆瑙﹀彂寮傛浠诲姟锛屼笉绛夊緟缁撴灉
+                    if (!Cools.isEmpty(palletId.get()) && StringUtils.isNotBlank(syncOrder.getOrderNo()) && !Cools.isEmpty(syncOrder.getStationId())) {
+                        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, palletId.get()));
+                        if (!Cools.isEmpty(loc) && loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
+//                            outStockService.getOrderOutTaskItem(orderOutTaskParam,param.getOrderItemId());
+                            //鍑哄簱
+//                        boolean itemsCheck = waitPakinService.mergeItemsCheck(pakinParam, loginUserId);
+//                            if (true) {
+                            CompletableFuture.runAsync(() -> {
+                                try {
+                                    asyncOutboundExecutionWcs(syncOrder.getStationId(), wkOrder.getId(), loginUserId,loc.getCode());
+                                } catch (Exception e) {
+                                    log.warn("璁㈠崟 {} 寮�濮嬭嚜鍔ㄥ嚭搴�", syncOrder.getOrderNo());
+                                }
+                            });
+//                            }
+                        } else {
+                            log.warn("璁㈠崟 {} 鑷姩鍑哄簱澶辫触锛侊紒鏈煡璇㈠埌鎸囧畾搴撳瓨锛侊紒", syncOrder.getOrderNo());
+                            throw new CoolException("鑷姩鍑哄簱澶辫触锛侊紒鏈煡璇㈠埌鎸囧畾搴撳瓨锛侊紒");
+                        }
                     }
                 }
             });
@@ -577,6 +702,56 @@
             log.info("璁㈠崟 {} 鑷姩缁勬墭瀹屾垚锛屽叡澶勭悊 {} 涓」鐩�", orderNo, param.getItems().size());
         } catch (Exception e) {
             log.error("璁㈠崟 {} 鑷姩缁勬墭澶辫触: {}", orderNo, e.getMessage(), e);
+        }
+    }
+
+    @Async
+    public void asyncOutboundExecutionWcs(String stationId ,Long orderId, Long loginUserId,String locCode) {
+        try {
+            int i = 0;
+            while (true) {
+                i++;
+                if (i > 5) return;
+                Thread.sleep(3000);
+                WkOrder byId = asnOrderService.getById(orderId);
+                if (Cools.isEmpty(byId)) {
+                    continue;
+                }
+                break;
+            }
+
+            GenWaveParams genWaveParams = new GenWaveParams();
+            List<Long> ids = new ArrayList<>();
+            ids.add(orderId);
+            genWaveParams.setIds(ids);
+            genWaveParams.setWaveRuleId(16L);
+//            OrderOutTaskParam orderOutTaskParam = new OrderOutTaskParam();
+//            orderOutTaskParam.setOrderId(orderId);
+//            orderOutTaskParam.setWaveId(16L);
+//            List<OrderOutItemDto> orderOutTaskItemAuto = outStockService.getOrderOutTaskItemAuto(orderOutTaskParam);
+//
+//            List<OutStockToTaskParams> tasks = new ArrayList<>();
+//            for (OrderOutItemDto orderOutItemDto : orderOutTaskItemAuto){
+//                for (LocItem locItem : orderOutItemDto.getLocItemList()) {
+//                    OutStockToTaskParams outStockToTaskParams = new OutStockToTaskParams(orderOutItemDto,locItem);
+//                    outStockToTaskParams.setId(locItem.getId());
+//                    outStockToTaskParams.setOutQty(locItem.getOutQty());
+//                    outStockToTaskParams.setLocCode(locItem.getLocCode());
+//                    outStockToTaskParams.setBarcode(locItem.getBarcode());
+//                    outStockToTaskParams.setSiteNo(stationId);
+//                    tasks.add(outStockToTaskParams);
+//                }
+//            }
+//            if (tasks.isEmpty()){
+//                log.warn("璁㈠崟ID {} 娌℃湁鎵惧埌鍙嚭搴撴槑缁嗭紝璺宠繃鑷姩鍑哄簱", orderId);
+//                return;
+//            }
+//            outStockService.genOutStockTask(tasks, loginUserId, orderId);
+            R r = outStockService.generateWavesOrderAuto(genWaveParams, stationId,locCode);
+
+            log.info("璁㈠崟ID {} 鑷姩杞尝娆�", orderId);
+        } catch (Exception e) {
+            log.error("璁㈠崟ID {} 鑷姩杞尝娆�: {}", orderId, e.getMessage(), e);
         }
     }
 
@@ -1060,6 +1235,32 @@
                 }
             }
 
+            // 浠撳簱缂栫爜杩囨护
+            if (StringUtils.isNotBlank(condition.getWareHouseAreaId())) {
+                String wareHouseAreaId = condition.getWareHouseAreaId();
+                LambdaQueryWrapper<WarehouseAreas> whWrapper = new LambdaQueryWrapper<>();
+                whWrapper.eq(WarehouseAreas::getCode, wareHouseAreaId);
+                // 璋冪敤WarehouseService鏌ヨ浠撳簱淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
+                List<WarehouseAreas> warehouses = warehouseAreasService.list(whWrapper);
+                if (!warehouses.isEmpty()) {
+                    Long targetWarehouseId = warehouses.get(0).getId();
+                    // 杩囨护搴撲綅锛屽彧淇濈暀鐩爣浠撳簱鐨勫簱浣�
+                    locMap = locMap.entrySet().stream()
+                            .filter(entry -> Objects.equals(entry.getValue().getAreaId(), targetWarehouseId))
+                            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+                    // 杩囨护locItems锛屽彧淇濈暀鐩爣浠撳簱鐨�
+                    Set<Long> validLocIds = locMap.keySet();
+                    locItems = locItems.stream()
+                            .filter(item -> item.getLocId() != null && validLocIds.contains(item.getLocId()))
+                            .collect(Collectors.toList());
+
+                    List<Long> warehouseAreaIds = Collections.singletonList(targetWarehouseId);
+                } else {
+                    return R.ok().add(new ArrayList<>());
+                }
+            }
+
             // 璋冪敤WarehouseService鏌ヨ浠撳簱淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
             Map<Long, Warehouse> warehouseMap = new HashMap<>();
             if (!warehouseIds.isEmpty()) {
@@ -1383,3 +1584,4 @@
         }
     }
 }
+

--
Gitblit v1.9.1