From 225018d0b2e66c2066c83dfbc0d6701593ddac9a Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 05 三月 2026 10:02:39 +0800
Subject: [PATCH] #备货

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java |  328 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 278 insertions(+), 50 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
index 69e3f30..8de9724 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -1,5 +1,6 @@
 package com.vincent.rsf.server.api.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
@@ -7,12 +8,16 @@
 import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto;
 import com.vincent.rsf.server.api.entity.params.CallForEmptyContainersParam;
 import com.vincent.rsf.server.api.entity.params.ContainerWaveParam;
+import com.vincent.rsf.server.api.entity.params.PdaGeneralParam;
 import com.vincent.rsf.server.api.service.PdaOutStockService;
+import com.vincent.rsf.server.common.constant.Constants;
+import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
 import com.vincent.rsf.server.manager.entity.*;
-import com.vincent.rsf.server.manager.enums.AsnExceStatus;
-import com.vincent.rsf.server.manager.enums.StationTypeEnum;
-import com.vincent.rsf.server.manager.enums.TaskStsType;
+import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.service.*;
+import com.vincent.rsf.server.manager.service.impl.BasContainerServiceImpl;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import lombok.Synchronized;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,20 +46,30 @@
     private WaveOrderRelaService waveOrderRelaService;
     @Autowired
     private BasStationService basStationService;
+    @Autowired
+    private LocService locService;
+    @Autowired
+    private BasContainerServiceImpl basContainerService;
+    @Autowired
+    private LocItemService locItemService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private WaitPakinItemService waitPakinItemService;
 
     @Override
     public R getOutStockTaskItem(String barcode) {
         LambdaQueryWrapper<Task> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
-        Task task = taskService.getOne(lambdaQueryWrapper);
+        Task task = taskService.getOne(lambdaQueryWrapper.last("limit 1"));
         if (null == task) {
             return R.error("鏈煡璇㈠埌鐩稿叧浠诲姟");
         }
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (null == taskItems || taskItems.size() <= 0) {
             return R.error("浠诲姟鍑洪敊锛屾湭鏌ヨ鍒扮浉鍏充换鍔℃槑缁�");
         }
-
 
         return R.ok(taskItems);
     }
@@ -63,14 +78,15 @@
     public R saveOutTaskSts(String barcode) {
         LambdaQueryWrapper<Task> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
-        Task task = taskService.getOne(lambdaQueryWrapper);
+        Task task = taskService.getOne(lambdaQueryWrapper.last("limit 1"));
         if (null == task) {
             throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource));
         maps.keySet().forEach(key -> {
             WkOrderItem orderItem = asnOrderItemService.getById(key);
@@ -84,6 +100,189 @@
         }
 
         return R.ok("纭鎴愬姛");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R containerRebinding(PdaGeneralParam param, Long userId) {
+        if (Cools.isEmpty(param.getContainerNo())) {
+            throw new CoolException("鏃犲鍣ㄥ彿");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.getContainerNo()));
+        if (null == task) {
+            throw new CoolException("鏈壘鍒颁换鍔�");
+        }
+        if (!task.getResource().equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)) {
+            throw new CoolException("褰撳墠鎵樼洏涓嶆槸澶囪揣鍑哄簱浠诲姟");
+        }
+        if (Cools.isEmpty(param.getTaskItemList())) {
+            throw new CoolException("浠诲姟鏄庣粏涓虹┖");
+        }
+
+        WaitPakin waitPakin = waitPakinService
+                .getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getNewContainerNo()));
+        if (Cools.isEmpty(waitPakin)) {
+            WaitPakin waitPakin1 = new WaitPakin();
+            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
+            if (StringUtils.isBlank(ruleCode)) {
+                throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+            }
+            waitPakin1.setCode(ruleCode)
+                    .setIoStatus(PakinIOStatus.PAKIN_IO_STATUS_HOLD.val)
+                    .setAnfme(param.getTaskItemList().stream()
+                            .map(TaskItem::getInputQty)
+                            .filter(Objects::nonNull)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add)
+                            .doubleValue())
+                    .setUpdateBy(userId)
+                    .setCreateBy(userId)
+                    .setBarcode(param.getNewContainerNo());
+            if (!waitPakinService.save(waitPakin1)) {
+                throw new CoolException("缁勬墭涓诲崟淇濆瓨澶辫触锛侊紒");
+            }
+            List<WaitPakinItem> items = new ArrayList<>();
+            for (TaskItem taskItem : param.getTaskItemList()) {
+                WaitPakinItem pakinItem = new WaitPakinItem();
+                pakinItem.setAnfme(taskItem.getInputQty().doubleValue())
+                        .setPakinId(waitPakin1.getId())
+                        .setSource(taskItem.getId())
+                        .setAsnId(taskItem.getSourceId())
+                        .setAsnCode(taskItem.getSourceCode())
+                        .setAsnItemId(taskItem.getSource())
+                        .setIsptResult(taskItem.getIsptResult())
+                        .setPlatItemId(taskItem.getPlatItemId())
+                        .setPlatOrderCode(taskItem.getPlatOrderCode())
+                        .setPlatWorkCode(taskItem.getPlatWorkCode())
+                        .setProjectCode(taskItem.getProjectCode())
+                        .setBatch(taskItem.getSplrBatch())
+                        .setUnit(taskItem.getUnit())
+                        .setFieldsIndex(taskItem.getFieldsIndex())
+                        .setMatnrId(taskItem.getMatnrId())
+                        .setMaktx(taskItem.getMaktx())
+                        .setUpdateBy(userId)
+                        .setCreateBy(userId)
+                        .setMatnrCode(taskItem.getMatnrCode());
+                WkOrder order = asnOrderService.getById(taskItem.getSourceId());
+                if (!Objects.isNull(order)) {
+                    pakinItem.setType(null == order.getType() ? null : order.getType())
+                            .setWkType(null == order.getWkType() ? null : Short.parseShort(order.getWkType()));
+                }
+                items.add(pakinItem);
+            }
+            if (!waitPakinItemService.saveBatch(items)) {
+                throw new CoolException("缁勬墭鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        } else {
+            double sum = param.getTaskItemList().stream()
+                    .map(TaskItem::getInputQty)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add)
+                    .doubleValue();
+            waitPakin
+                    .setAnfme(waitPakin.getAnfme() + sum)
+                    .setUpdateBy(userId)
+                    .setCreateBy(userId);
+            if (!waitPakinService.updateById(waitPakin)) {
+                throw new CoolException("缁勬墭涓诲崟淇濆瓨澶辫触锛侊紒");
+            }
+            List<WaitPakinItem> existPakinItems = waitPakinItemService
+                    .list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId()));
+            List<WaitPakinItem> items = new ArrayList<>();
+            for (TaskItem taskItem : param.getTaskItemList()) {
+                Optional<WaitPakinItem> optionalItem = existPakinItems.stream()
+                        .filter(e -> Objects.equals(e.getMatnrCode(), taskItem.getMatnrCode())
+                                && Objects.equals(e.getBatch(), taskItem.getSplrBatch())
+                                && Objects.equals(e.getPlatWorkCode(), taskItem.getPlatWorkCode())
+                                && Objects.equals(e.getPlatItemId(), taskItem.getPlatItemId())
+                        )
+                        .findFirst();
+
+                if (optionalItem.isPresent()) {
+                    WaitPakinItem existItem = optionalItem.get();
+                    existItem.setAnfme(existItem.getAnfme() + taskItem.getInputQty().doubleValue())
+                            .setUpdateBy(userId);
+                    if (!items.contains(existItem)) {
+                        items.add(existItem);
+                    }
+                } else {
+                    WaitPakinItem pakinItem = new WaitPakinItem();
+                    pakinItem.setAnfme(taskItem.getInputQty().doubleValue())
+                            .setPakinId(waitPakin.getId())
+                            .setSource(taskItem.getId())
+                            .setAsnId(taskItem.getSourceId())
+                            .setAsnCode(taskItem.getSourceCode())
+                            .setAsnItemId(taskItem.getSource())
+                            .setIsptResult(taskItem.getIsptResult())
+                            .setPlatItemId(taskItem.getPlatItemId())
+                            .setPlatOrderCode(taskItem.getPlatOrderCode())
+                            .setPlatWorkCode(taskItem.getPlatWorkCode())
+                            .setProjectCode(taskItem.getProjectCode())
+                            .setBatch(taskItem.getSplrBatch())
+                            .setUnit(taskItem.getUnit())
+                            .setFieldsIndex(taskItem.getFieldsIndex())
+                            .setMatnrId(taskItem.getMatnrId())
+                            .setMaktx(taskItem.getMaktx())
+                            .setUpdateBy(userId)
+                            .setCreateBy(userId)
+                            .setMatnrCode(taskItem.getMatnrCode());
+                    WkOrder order = asnOrderService.getById(taskItem.getSourceId());
+                    if (!Objects.isNull(order)) {
+                        pakinItem.setType(null == order.getType() ? null : order.getType())
+                                .setWkType(null == order.getWkType() ? null : Short.parseShort(order.getWkType()));
+                    }
+                    items.add(pakinItem);
+                    existPakinItems.add(pakinItem);
+                }
+            }
+            if (!waitPakinItemService.saveOrUpdateBatch(items)) {
+                throw new CoolException("缁勬墭鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        }
+
+        Map<Long, BigDecimal> taskItemInputQtyMap = param.getTaskItemList().stream()
+                .filter(Objects::nonNull)
+                .filter(e -> !Objects.isNull(e.getId()))
+                .collect(Collectors.toMap(TaskItem::getId,
+                        e -> Objects.isNull(e.getInputQty()) ? BigDecimal.ZERO : e.getInputQty(),
+                        BigDecimal::add));
+        if (taskItemInputQtyMap.isEmpty()) {
+            throw new CoolException("浠诲姟鏄庣粏鍙傛暟閿欒");
+        }
+        List<TaskItem> toUpdateTaskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
+                .eq(TaskItem::getTaskId, task.getId())
+                .in(TaskItem::getId, taskItemInputQtyMap.keySet()));
+        if (Cools.isEmpty(toUpdateTaskItems) || toUpdateTaskItems.size() != taskItemInputQtyMap.size()) {
+            throw new CoolException("鏈壘鍒板搴斾换鍔℃槑缁�");
+        }
+        toUpdateTaskItems.forEach(item -> {
+            double currentWorkQty = Objects.isNull(item.getWorkQty()) ? 0D : item.getWorkQty();
+            BigDecimal inputQty = taskItemInputQtyMap.getOrDefault(item.getId(), BigDecimal.ZERO);
+            item.setWorkQty(BigDecimal.valueOf(currentWorkQty).add(inputQty).doubleValue())
+                    .setUpdateBy(userId);
+        });
+        if (!taskItemService.updateBatchById(toUpdateTaskItems)) {
+            throw new CoolException("浠诲姟鏄庣粏鏇存柊澶辫触");
+        }
+
+        return R.ok();
+    }
+
+    @Override
+    public R taskItemList(PdaGeneralParam param, Long loginUserId) {
+        if (Cools.isEmpty(param.getContainerNo())) {
+            throw new CoolException("鏃犲鍣ㄥ彿");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.getContainerNo()));
+        if (null == task) {
+            throw new CoolException("鏈壘鍒颁换鍔�");
+        }
+        if (!task.getResource().equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)) {
+            throw new CoolException("褰撳墠鎵樼洏涓嶆槸澶囪揣鍑哄簱浠诲姟");
+        }
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+
+        return R.ok(taskItems);
     }
 
     @Override
@@ -101,7 +300,7 @@
         if (Cools.isEmpty(barcode)) {
             throw new CoolException("鍙傛暟鏈夎");
         }
-        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, barcode));
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, barcode).last("limit 1"));
         if (null == task) {
             throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
         }
@@ -109,7 +308,8 @@
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
         ArrayList<ContainerWaveDto> containerWaveDtos = new ArrayList<>();
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        List<TaskItem> taskItems = taskItemService
+                .list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         for (TaskItem taskItem : taskItems) {
             ContainerWaveDto containerWaveDto = new ContainerWaveDto();
             containerWaveDto.setTaskItem(taskItem);
@@ -117,7 +317,8 @@
             if (null == wave) {
                 throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
             }
-            List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>().eq(WaveOrderRela::getWaveId, wave.getId()));
+            List<WaveOrderRela> waveOrderRelas = waveOrderRelaService
+                    .list(new LambdaQueryWrapper<WaveOrderRela>().eq(WaveOrderRela::getWaveId, wave.getId()));
             if (Cools.isEmpty(waveOrderRelas)) {
                 throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
             }
@@ -127,8 +328,10 @@
             for (WkOrder wkOrder : wkOrderList) {
                 List<WkOrderItem> orderItem = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                         .eq(WkOrderItem::getOrderId, wkOrder.getId())
-                        .eq(StringUtils.isNotEmpty(taskItem.getMatnrCode()), WkOrderItem::getMatnrCode, taskItem.getMatnrCode())
-//                        .eq(StringUtils.isNotEmpty(taskItem.getBatch()), WkOrderItem::getSplrBatch, taskItem.getBatch())
+                        .eq(StringUtils.isNotEmpty(taskItem.getMatnrCode()), WkOrderItem::getMatnrCode,
+                                taskItem.getMatnrCode())
+                // .eq(StringUtils.isNotEmpty(taskItem.getBatch()), WkOrderItem::getSplrBatch,
+                // taskItem.getBatch())
                 );
                 if (null != orderItem) {
                     list.addAll(orderItem);
@@ -148,7 +351,8 @@
         if (null == containerWaveParam || containerWaveParam.getContainerWaveDtos().size() <= 0) {
             return R.error("鍙傛暟閿欒");
         }
-        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, containerWaveParam.getContainer()));
+        Task task = taskService.getOne(
+                new LambdaQueryWrapper<Task>().eq(Task::getBarcode, containerWaveParam.getContainer()).last("limit 1"));
         if (null == task) {
             return R.error("鏈壘鍒版墭鐩樺搴旂殑浠诲姟");
         }
@@ -157,7 +361,7 @@
         }
 
         for (ContainerWaveDto containerWaveDto : containerWaveParam.getContainerWaveDtos()) {
-            //鍋氫竴娆℃牎楠岋紝鍒ゆ柇鍓嶇鎵�鏈夊嚭搴撴暟閲忔槸鍚﹁秴杩囨湰鎵樺嚭搴撴暟閲�
+            // 鍋氫竴娆℃牎楠岋紝鍒ゆ柇鍓嶇鎵�鏈夊嚭搴撴暟閲忔槸鍚﹁秴杩囨湰鎵樺嚭搴撴暟閲�
             double sum = containerWaveDto.getWkOrderItems().stream().mapToDouble(WkOrderItem::getDemandQty).sum();
             BigDecimal total = new BigDecimal(String.valueOf(sum));
             BigDecimal anfme = new BigDecimal(containerWaveDto.getTaskItem().getAnfme().toString());
@@ -169,7 +373,8 @@
                     continue;
                 }
                 WkOrderItem orderItem = asnOrderItemService.getById(oldOrderItem.getId());
-                BigDecimal num = new BigDecimal(orderItem.getWorkQty().toString()).subtract(new BigDecimal(orderItem.getQty().toString()));
+                BigDecimal num = new BigDecimal(orderItem.getWorkQty().toString())
+                        .subtract(new BigDecimal(orderItem.getQty().toString()));
                 BigDecimal orderDemandQty = new BigDecimal(oldOrderItem.getDemandQty().toString());
                 if (num.compareTo(orderDemandQty) < 0) {
                     throw new CoolException("鎾鏁伴噺澶т簬鍗曟嵁鍑哄簱鏁伴噺锛岃妫�鏌�");
@@ -186,7 +391,7 @@
                 if (!asnOrderItemService.updateById(orderItem)) {
                     throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触");
                 }
-                //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+                // 妫�鏌ュ崟鎹槸鍚﹀畬鎴�
                 Boolean orderChecked = checkOrderComplete(orderItem);
                 if (orderChecked) {
                     wkOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
@@ -195,18 +400,19 @@
                     }
                 }
             }
-            //妫�鏌ユ尝娆℃槸鍚﹀畬鎴�
-//            Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem());
-//            if (waveChecked){
-//                Wave wave = waveService.getById(containerWaveDto.getTaskItem().getSourceId());
-//                if (null == wave){
-//                    throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
-//                }
-//                wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val);
-//                if (!waveService.updateById(wave)){
-//                    throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
-//                }
-//            }
+            // 妫�鏌ユ尝娆℃槸鍚﹀畬鎴�
+            // Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem());
+            // if (waveChecked){
+            // Wave wave =
+            // waveService.getById(containerWaveDto.getTaskItem().getSourceId());
+            // if (null == wave){
+            // throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+            // }
+            // wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val);
+            // if (!waveService.updateById(wave)){
+            // throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
+            // }
+            // }
 
         }
 
@@ -214,7 +420,6 @@
         if (!taskService.updateById(task)) {
             throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐�");
         }
-
 
         return R.ok();
     }
@@ -231,7 +436,7 @@
         BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
                 .eq(BasStation::getStationName, containerWaveParam.getStaNo())
                 .orderByDesc(BasStation::getId)
-                .last("LIMIT 1"), false);
+                .last("LIMIT 1"));
 
         if (Objects.isNull(basStation)) {
             throw new CoolException(containerWaveParam.getStaNo() + "绔欑偣涓嶅瓨鍦紒锛�");
@@ -239,35 +444,58 @@
         if (!basStation.getUseStatus().equals("O")) {
             throw new CoolException("绔欑偣鐘舵�佷笉涓虹┖闂�");
         }
-        //瀹瑰櫒绫诲瀷鏌ヨ  璧风偣
-        if (basStation.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) {
-            //鍏夌數绔欑偣锛�
-            Long area = basStation.getArea();
-            //鏄惁闇�瑕佽浆闈炲厜鐢电珯鐐�
-            //绔嬪簱鍑哄簱==銆嬬粨鏉�
-            //AGV==銆嬬珛搴�==銆嬬粨鏉�
-        } else {
-            //闈炲厜鐢电珯鐐�
-            //鏄惁闇�瑕佽浆鍏夌數绔欑偣
-            //AGV==銆嬬粨鏉�
-            //绔嬪簱鍑哄簱==銆婣GV==銆嬬粨鏉�
 
+        List<Long> areaList = basStation.getCrossZoneArea();
+        if (Cools.isEmpty(areaList)) {
+            throw new CoolException("褰撳墠绔欑偣搴撳尯鏈厤缃�");
         }
 
+        BasContainer basContainer = basContainerService.getOne(new LambdaQueryWrapper<BasContainer>()
+                .in(BasContainer::getContainerType, containerWaveParam.getType(), false).last("limit 1"));
+        if (Cools.isEmpty(basContainer)) {
+            throw new CoolException("鏈煡璇㈠埌鐩稿叧瀹瑰櫒瑙勫垯");
+        }
+        String barcodeType = "barcode REGEXP '" + basContainer.getCodeType() + "'";
+        // 瀹瑰櫒绫诲瀷鏌ヨ 璧风偣
+        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
+                .apply(barcodeType)
+                .eq(Loc::getDeleted, 0)
+                .eq(Loc::getStatus, 1)
+                .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type)
+                .in(Loc::getAreaId, areaList)
+                .orderByDesc(Loc::getId)
+                .last("LIMIT 1"),
+                false);
+
+        if (Cools.isEmpty(loc)) {
+            throw new CoolException("鏈煡璇㈠埌绗﹀悎鏉′欢鐨勬墭鐩�");
+        }
+        // 鐢熸垚浠诲姟鍙傛暟
+        LocToTaskParams locToTaskParams = new LocToTaskParams();
+        locToTaskParams.setType(Constants.TASK_TYPE_OUT_STOCK_EMPTY)
+                .setSiteNo(basStation.getStationName())
+                .setOrgLoc(loc.getId().toString());
+        try {
+            locItemService.generateTaskEmpty(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val, locToTaskParams, loginUserId,
+                    containerWaveParam.getTaskNo());
+        } catch (Exception e) {
+            throw new CoolException(e.getMessage());
+        }
         return R.ok();
     }
 
-
-
-
     private Boolean checkWaveComplete(TaskItem taskItem) {
         Wave wave = waveService.getById(taskItem.getSourceId());
-        List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getWaveId, wave.getId()));
-        return wkOrderList.stream().allMatch(item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
+        List<WkOrder> wkOrderList = asnOrderService
+                .list(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getWaveId, wave.getId()));
+        return wkOrderList.stream().allMatch(
+                item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
     }
 
     private Boolean checkOrderComplete(WkOrderItem orderItem) {
-        List<WkOrderItem> wkOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderCode, orderItem.getOrderCode()));
-        return wkOrderItems.stream().allMatch(item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
+        List<WkOrderItem> wkOrderItems = asnOrderItemService
+                .list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderCode, orderItem.getOrderCode()));
+        return wkOrderItems.stream().allMatch(
+                item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString())));
     }
 }

--
Gitblit v1.9.1