From ed4d6474cd902bab8fa99cd00361b42bbfe55ebd Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期四, 13 十一月 2025 22:23:44 +0800
Subject: [PATCH] #新增 1. 单据上报功能优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java |  402 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 321 insertions(+), 81 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 e9cee6b..a44c07c 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
@@ -6,16 +6,32 @@
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto;
 import com.vincent.rsf.server.api.entity.params.ContainerWaveParam;
+import com.vincent.rsf.server.api.entity.params.WavePickItemsParams;
 import com.vincent.rsf.server.api.service.PdaOutStockService;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.AsnExceStatus;
 import com.vincent.rsf.server.manager.enums.TaskStsType;
 import com.vincent.rsf.server.manager.service.*;
+import com.vincent.rsf.server.manager.service.impl.StockItemServiceImpl;
+import com.vincent.rsf.server.manager.service.impl.StockServiceImpl;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
+import com.vincent.rsf.server.system.entity.Fields;
+import com.vincent.rsf.server.system.entity.FieldsItem;
+import com.vincent.rsf.server.system.service.FieldsItemService;
+import com.vincent.rsf.server.system.service.FieldsService;
+import com.vincent.rsf.server.system.service.impl.FieldsItemServiceImpl;
+import com.vincent.rsf.server.system.service.impl.FieldsServiceImpl;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import com.vincent.rsf.server.system.utils.SystemAuthUtils;
 import lombok.Synchronized;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -37,6 +53,14 @@
     private AsnOrderItemService asnOrderItemService;
     @Autowired
     private WaveOrderRelaService waveOrderRelaService;
+    @Autowired
+    private FieldsItemService fieldsItemService;
+    @Autowired
+    private FieldsService fieldsService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private StockItemServiceImpl stockItemService;
 
     @Override
     public R getOutStockTaskItem(String barcode) {
@@ -93,7 +117,6 @@
     @Override
     public R getContainerWaveList(Map<String, String> map) {
         String barcode = map.get("barcode");
-
         if (Cools.isEmpty(barcode)) {
             throw new CoolException("鍙傛暟鏈夎");
         }
@@ -104,46 +127,238 @@
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
-        ArrayList<ContainerWaveDto> containerWaveDtos = new ArrayList<>();
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
-        for (TaskItem taskItem : taskItems) {
-            ContainerWaveDto containerWaveDto = new ContainerWaveDto();
-            containerWaveDto.setTaskItem(taskItem);
-            Wave wave = waveService.getById(taskItem.getSourceId());
-            if (null == wave) {
-                throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
-            }
-            List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>().eq(WaveOrderRela::getWaveId, wave.getId()));
-            if (Cools.isEmpty(waveOrderRelas)) {
-                throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
-            }
-            Set<Long> ids = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
-            ArrayList<WkOrderItem> list = new ArrayList<>();
-            List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, ids));
-            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())
-                );
-                if (null != orderItem) {
-                    list.addAll(orderItem);
-                }
-            }
-            containerWaveDto.setWkOrderItems(list);
-            containerWaveDtos.add(containerWaveDto);
+        Set<Long> longSet = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet());
+        List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
+                .in(WaveOrderRela::getWaveId, longSet));
+        if (Cools.isEmpty(waveOrderRelas)) {
+            throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
         }
+        Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
+        List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds);
+        if (wkOrders.isEmpty()) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+        }
+        Set<String> codes = taskItems.stream().map(TaskItem::getMatnrCode).collect(Collectors.toSet());
+        List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
+                .in(WkOrderItem::getMatnrCode, codes)
+                .in(WkOrderItem::getOrderId, orderIds));
 
-        return R.ok(containerWaveDtos);
+        return R.ok("鏌ヨ鎴愬姛").add(orderItems);
+
+//        ArrayList<ContainerWaveDto> containerWaveDtos = new ArrayList<>();
+////        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+//        for (TaskItem taskItem : taskItems) {
+//            ContainerWaveDto containerWaveDto = new ContainerWaveDto();
+//            containerWaveDto.setTaskItem(taskItem);
+//            Wave wave = waveService.getById(taskItem.getSourceId());
+//            if (null == wave) {
+//                throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+//            }
+//            List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
+//                    .eq(WaveOrderRela::getWaveId, wave.getId()));
+//            if (Cools.isEmpty(waveOrderRelas)) {
+//                throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
+//            }
+//            Set<Long> ids = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
+//            ArrayList<WkOrderItem> list = new ArrayList<>();
+//            List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, ids));
+//            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()));
+//                if (null != orderItem) {
+//                    list.addAll(orderItem);
+//                }
+//            }
+//            containerWaveDto.setWkOrderItems(list);
+//            containerWaveDtos.add(containerWaveDto);
+//        }
+//        return R.ok("鏌ヨ鎴愬姛").add(wkOrders);
     }
 
+    /**
+     * @author Ryan
+     * @date 2025/11/13
+     * @description: 鑾峰彇娉㈡鎷h揣鏄庣粏
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R getWaveOrderItems(Map<String, Object> param) {
+        if (Objects.isNull(param)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(param.get("fieldsIndex"))) {
+            return R.error("绁ㄥ彿涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(param.get("barcode"))) {
+            return R.error("瀹瑰櫒鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(param.get("orderId"))) {
+            return R.error("璁㈠崟ID涓嶈兘涓虹┖锛侊紒");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.get("barcode").toString()));
+        if (Objects.isNull(task)) {
+            throw new CoolException("鏁版嵁閿欒锛屼换鍔℃。宸蹭笉瀛樺湪锛侊紒");
+        }
+        FieldsItem fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>()
+                .eq(FieldsItem::getValue, param.get("fieldsIndex").toString())
+                .last("limit 1"));
+        if (Objects.isNull(fieldsItem)) {
+            return R.error("鏁版嵁閿欒锛岀エ鍙蜂笉瀛樺湪锛侊紒");
+        }
+        TaskItem taskItem = taskItemService.getOne(new LambdaQueryWrapper<TaskItem>()
+                        .eq(TaskItem::getFieldsIndex, fieldsItem.getUuid())
+                .eq(TaskItem::getTaskId, task.getId()));
+        if (Objects.isNull(taskItem)) {
+            return R.error("鏁版嵁閿欒锛屼换鍔℃。鏄庣粏涓嶅瓨鍦紒锛�");
+        }
+//        Long orderId = Long.valueOf(param.get("orderId").toString());
+//        List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, orderId));
+//        if (orderItems.isEmpty()) {
+//            return R.error("鏁版嵁閿欒锛岃鍗曟暟鎹笉瀛樺湪锛侊紒");
+//        }
+        //鏍规嵁绱㈠紩鑾峰彇鍔ㄦ�佸瓧娈礦alue鍊�
+        Map<String, String> fields = new HashMap<>();
+        Fields fields1 = fieldsService.getById(fieldsItem.getFieldsId());
+        fields.put(fields1.getFields(), fieldsItem.getValue());
+        taskItem.setExtendFields(fields);
+
+        return R.ok().add(taskItem);
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/11/13
+     * @description: 娉㈡鏄庣粏鎷h揣
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R wavePickItems(WavePickItemsParams params) {
+        if (Objects.isNull(params.getBarcode())) {
+            return R.error("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(params.getOrderId())) {
+            return R.error("璁㈠崟ID涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getTaskItems()) || params.getTaskItems().isEmpty()) {
+            return R.error("鎷h揣鏄庣粏涓嶈兘涓虹┖锛�");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
+        if (null == task) {
+            return R.error("鏈壘鍒版墭鐩樺搴旂殑浠诲姟");
+        }
+        if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
+            return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
+        }
+        WkOrder order = asnOrderService.getById(params.getOrderId());
+        if (Objects.isNull(order)) {
+            return R.error("鍗曟嵁淇℃伅涓嶅瓨鍦紒锛�");
+        }
+        List<TaskItem> taskItems = params.getTaskItems();
+        Map<String, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getMatnrCode));
+        listMap.keySet().forEach(code -> {
+            List<TaskItem> items = listMap.get(code);
+            //涓�寮犲嚭搴撳崟锛岀浉鍚岀殑鍝佺涓嶄細鍑虹幇涓ゆ
+            WkOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
+                    .eq(WkOrderItem::getMatnrCode, code)
+                    .eq(WkOrderItem::getOrderId, order.getId()));
+            if (Objects.isNull(orderItem)) {
+                throw new CoolException("鏁版嵁閿欒锛屾嫞鏂欎笉鍦ㄥ崟鎹渶姹備腑锛侊紒");
+            }
+            Double summed = items.stream().mapToDouble(TaskItem::getAnfme).sum();
+            //鍔犱笂鍘嗗彶鎷f枡鏁伴噺
+            Double pickQty = Math.round((orderItem.getQty() + summed) * 10000) / 10000.0;
+            if (pickQty.compareTo(orderItem.getAnfme()) > 0.0) {
+                throw new CoolException("鎾鏁伴噺涓嶈兘瓒呭嚭璁㈠崟闇�姹傛暟閲�");
+            }
+            orderItem.setQty(pickQty);
+
+            if (!asnOrderItemService.updateById(orderItem)) {
+                throw new CoolException("鍑哄簱鍗曟槑缁嗘洿鏂板け璐ワ紒锛�");
+            }
+
+            Stock stock = new Stock();
+            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
+            if (StringUtils.isBlank(ruleCode)) {
+                throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
+            }
+            Double sum = taskItems.stream().mapToDouble(TaskItem::getAnfme).sum();
+            stock.setCode(ruleCode)
+                    .setUpdateBy(SystemAuthUtils.getLoginUserId())
+                    .setBarcode(task.getBarcode())
+                    .setLocCode(task.getOrgLoc())
+                    .setType(order.getType())
+                    .setWkType(Short.parseShort(order.getWkType()))
+                    .setSourceId(orderItem.getOrderId())
+                    .setSourceCode(orderItem.getOrderCode())
+                    .setUpdateTime(new Date())
+                    .setAnfme(sum);
+
+            if (!stockService.save(stock)) {
+                throw new CoolException("鍑哄叆搴撳巻鍙蹭繚瀛樺け璐ワ紒锛�");
+            }
+
+           List<StockItem> stockItems = new ArrayList<>();
+            items.forEach(taskItem -> {
+                taskItem.setQty(taskItem.getAnfme()).setOrderId(order.getId()).setOrderItemId(orderItem.getId());
+                if (!taskItemService.updateById(taskItem)) {
+                    throw new CoolException("鐘舵�佸畬鎴愬け璐ワ紒锛�");
+                }
+                StockItem stockItem = new StockItem();
+                BeanUtils.copyProperties(taskItem, stockItem);
+                stockItem.setStockId(stock.getId()).setStockCode(stock.getCode()).setSourceItemId(orderItem.getId());
+                stockItems.add(stockItem);
+            });
+            if (!stockItemService.saveBatch(stockItems)) {
+                throw new CoolException("鍑哄叆搴撳巻鍙叉槑缁嗕繚瀛樺け璐ワ紒锛�");
+            }
+        });
+
+        List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, params.getOrderId()));
+        double total = orderItems.stream().mapToDouble(WkOrderItem::getQty).sum();
+        double wkQty = orderItems.stream().mapToDouble(WkOrderItem::getWorkQty).sum();
+        order.setQty(total).setWorkQty(order.getWorkQty() - wkQty);
+        if (!asnOrderService.updateById(order)) {
+            throw new CoolException("璁㈠崟鏁伴噺鏇存柊澶辫触锛侊紒");
+        }
+        //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+        if (order.getAnfme().compareTo(order.getQty()) == 0) {
+            order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+            if (!asnOrderService.updateById(order)) {
+                throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+            }
+        }
+        return R.ok();
+    }
+
+
+    private void saveOrderToStock(Order order) {
+
+
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/11/5
+     * @description: 娉㈡鎷h揣
+     * @version 1.0
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Synchronized
     public R saveWavePick(ContainerWaveParam containerWaveParam, Long loginUserId) {
-        if (null == containerWaveParam || containerWaveParam.getContainerWaveDtos().size() <= 0) {
+        if (null == containerWaveParam ) {
             return R.error("鍙傛暟閿欒");
         }
+        List<WkOrderItem> orderItems = containerWaveParam.getContainerWaveDtos();
+        if (Objects.isNull(orderItems) || orderItems.isEmpty()) {
+            return R.error("鏁版嵁閿欒锛侊紒");
+        }
+
         Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, containerWaveParam.getContainer()));
         if (null == task) {
             return R.error("鏈壘鍒版墭鐩樺搴旂殑浠诲姟");
@@ -152,65 +367,90 @@
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
 
-        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());
-            if (!anfme.equals(total)) {
-                throw new CoolException("鎾鏁伴噺涓嶇瓑浜庡鍣ㄥ嚭搴撴暟閲忥紝璇锋鏌�");
-            }
-            for (WkOrderItem oldOrderItem : containerWaveDto.getWkOrderItems()) {
-                if (Double.compare(oldOrderItem.getDemandQty(), 0.0) == 0) {
-                    continue;
-                }
-                WkOrderItem orderItem = asnOrderItemService.getById(oldOrderItem.getId());
-                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("鎾鏁伴噺澶т簬鍗曟嵁鍑哄簱鏁伴噺锛岃妫�鏌�");
-                }
-                WkOrder wkOrder = asnOrderService.getById(orderItem.getOrderId());
-                if (Cools.isEmpty(wkOrder)) {
-                    throw new CoolException("鍑哄簱鍗曚富鍗曟湭鎵惧埌");
-                }
-                wkOrder.setQty(new BigDecimal(wkOrder.getQty().toString()).add(orderDemandQty).doubleValue());
-                if (!asnOrderService.updateById(wkOrder)) {
-                    throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
-                }
-                orderItem.setQty(new BigDecimal(orderItem.getQty().toString()).add(orderDemandQty).doubleValue());
-                if (!asnOrderItemService.updateById(orderItem)) {
-                    throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触");
-                }
-                //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
-                Boolean orderChecked = checkOrderComplete(orderItem);
-                if (orderChecked) {
-                    wkOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-                    if (!asnOrderService.updateById(wkOrder)) {
-                        throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
-                    }
-                }
-            }
-            //妫�鏌ユ尝娆℃槸鍚﹀畬鎴�
-//            Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem());
-//            if (waveChecked){
-//                Wave wave = waveService.getById(containerWaveDto.getTaskItem().getSourceId());
-//                if (null == wave){
-//                    throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        taskItems.forEach(taskItem -> {
+           if (!(taskItem.getQty().compareTo(taskItem.getAnfme()) == 0)) {
+               throw new CoolException("鏈夊崟鎹墿鏂欐湭鎷o紝璇锋嫞瀹屽悗鍐嶇‘璁わ紒锛�");
+           }
+        });
+
+//        orderItems.forEach(orderItem -> {
+//            try {
+//                taskService.saveOutStockItem(taskItems, orderItem, null, null, SystemAuthUtils.getLoginUserId());
+//            } catch (Exception e) {
+//                throw new RuntimeException(e);
+//            }
+//        });
+
+//        containerWaveParam.getOrderItems().forEach(orderItem -> {
+//
+//        });
+//        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());
+//            if (!anfme.equals(total)) {
+//                throw new CoolException("鎾鏁伴噺涓嶇瓑浜庡鍣ㄥ嚭搴撴暟閲忥紝璇锋鏌�");
+//            }
+//            for (WkOrderItem oldOrderItem : containerWaveDto.getWkOrderItems()) {
+//                if (Double.compare(oldOrderItem.getDemandQty(), 0.0) == 0) {
+//                    continue;
 //                }
-//                wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val);
-//                if (!waveService.updateById(wave)){
-//                    throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
+//                WkOrderItem orderItem = asnOrderItemService.getById(oldOrderItem.getId());
+//                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("鎾鏁伴噺澶т簬鍗曟嵁鍑哄簱鏁伴噺锛岃妫�鏌�");
+//                }
+//                WkOrder wkOrder = asnOrderService.getById(orderItem.getOrderId());
+//                if (Cools.isEmpty(wkOrder)) {
+//                    throw new CoolException("鍑哄簱鍗曚富鍗曟湭鎵惧埌");
+//                }
+//                wkOrder.setQty(new BigDecimal(wkOrder.getQty().toString()).add(orderDemandQty).doubleValue());
+//                if (!asnOrderService.updateById(wkOrder)) {
+//                    throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+//                }
+//
+//                if (Objects.isNull(oldOrderItem.getFieldsIndex())) {
+//                    throw new CoolException("绁ㄥ彿涓嶈兘涓虹┖锛侊紒");
+//                }
+//                //Fix 杩欓噷鍙拡瀵瑰笇鏃ラ」鐩殑绁ㄥ彿鍔熻兘锛岀エ鍙峰拰uuid涓轰竴瀵逛竴鐨勬儏鍐碉紝涓嶄細鍑虹幇閲嶅鐨勬儏鍐�
+//                FieldsItem fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>().eq(FieldsItem::getValue, oldOrderItem.getFieldsIndex()).last("limit 1"));
+//                if (!Objects.isNull(fieldsItem)) {
+//                    orderItem.setFieldsIndex(fieldsItem.getUuid());
+//                }
+//                orderItem.setQty(new BigDecimal(orderItem.getQty().toString()).add(orderDemandQty).doubleValue());
+//                if (!asnOrderItemService.updateById(orderItem)) {
+//                    throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触");
+//                }
+//                //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+//                Boolean orderChecked = checkOrderComplete(orderItem);
+//                if (orderChecked) {
+//                    wkOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+//                    if (!asnOrderService.updateById(wkOrder)) {
+//                        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("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
+////                }
+////            }
+//        }
 
         task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
         if (!taskService.updateById(task)) {
             throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐�");
         }
-
 
         return R.ok();
     }

--
Gitblit v1.9.1