From 1068673dcf41cdf7a7a06a26aaeb5652d734eb2d Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期四, 27 十一月 2025 09:36:08 +0800
Subject: [PATCH] 添加是否允许超收判断 出库上报明细问题修复

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java    |   11 +-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java         |   31 +++++--
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java |   15 +++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java   |  153 +++++++++++++++++--------------------
 4 files changed, 110 insertions(+), 100 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 52a5c8c..d8b524c 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
@@ -280,7 +280,7 @@
             if (Objects.isNull(orderItem)) {
                 throw new CoolException("鏁版嵁閿欒锛屾嫞鏂欎笉鍦ㄥ崟鎹渶姹備腑锛侊紒");
             }
-
+            //taskItems涓烘嫞璐ф槑缁嗭紝浣滃弬鏁颁笂鎶�
             Double summed = items.stream().mapToDouble(TaskItem::getAnfme).sum();
             //鍔犱笂鍘嗗彶鎷f枡鏁伴噺
             Double pickQty = Math.round((orderItem.getQty() + summed) * 100) / 100.0;
@@ -326,6 +326,14 @@
                 TaskItem item = taskItemService.getById(taskItem.getId());
                 //鍒ゆ柇鏄惁鍏佽瓒呮敹锛屼笉鍏佽瓒呮敹娣诲姞鎷掓敹鍒ゆ柇
                 if (!Objects.isNull(config)) {
+                    LocItemWorking serviceOne = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getFieldsIndex, item.getFieldsIndex()));
+                    if (Objects.isNull(serviceOne)) {
+                        throw new CoolException("缂撳瓨鏁版嵁涓㈠け锛侊紒");
+                    }
+                    //涓嶇鏄惁鍏佽瓒呮敹锛岄兘闇�鍒ゆ柇鏄惁瓒呭嚭搴撳瓨鑼冨洿
+                    if (taskItem.getAnfme().compareTo(serviceOne.getAnfme()) > 0) {
+                        throw new CoolException("鎷h揣鏁伴噺瓒呭嚭褰撳墠绁ㄥ彿搴撳瓨鏁伴噺锛侊紒");
+                    }
                     if (!Boolean.parseBoolean(config.getVal())) {
                         if (item.getAnfme().compareTo(item.getQty() + taskItem.getAnfme()) < 0.0) {
                             throw new CoolException("鍓嶅綋鐗╂枡宸茶秴鍑哄彲鎷h寖鍥达紝璇锋牳瀵瑰悗鍐嶆搷浣滐紒锛�");
@@ -338,8 +346,9 @@
                     throw new CoolException("鐘舵�佸畬鎴愬け璐ワ紒锛�");
                 }
                 StockItem stockItem = new StockItem();
-                BeanUtils.copyProperties(taskItem, stockItem);
-                stockItem.setStockId(stock.getId()).setStockCode(stock.getCode()).setSourceItemId(orderItem.getId());
+                BeanUtils.copyProperties(item, stockItem);
+                //taskItem涓轰笂鎶ユ暟鎹�
+                stockItem.setStockId(stock.getId()).setAnfme(taskItem.getAnfme()).setStockCode(stock.getCode()).setSourceItemId(orderItem.getId());
                 stockItems.add(stockItem);
             });
             if (!stockItemService.saveBatch(stockItems)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
index 4db0ee7..4f31915 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
@@ -382,94 +382,83 @@
                     throw new RuntimeException(e);
                 }
             } else if (order.getType().equals(OrderType.ORDER_OUT.type)){
-                List<Stock> stocks = stockService.list(new LambdaQueryWrapper<Stock>().eq(Stock::getSourceCode, order.getCode()));
-                if (stocks.isEmpty()) {
-                    throw new CoolException("鍑哄韩姝峰彶涓嶅瓨鍦紒锛�");
+                List<StockItem> stockItems = stockItemService.list(new LambdaQueryWrapper<StockItem>().eq(StockItem::getSourceItemId, orderItem.getId()));
+                if (stockItems.isEmpty()) {
+                    return;
                 }
                 String finalNickName = nickName;
-                stocks.forEach(stock -> {
-                    //绛涢�夊綋鍓嶅敮涓�瀛楁鎵�鏈夊嚭鍏ュ簱淇℃伅
-                    List<StockItem> stockItems = stockItemService.list(new LambdaQueryWrapper<StockItem>()
-                            .eq(StockItem::getStockId, stock.getId()));
-                    if (stockItems.isEmpty()) {
-                        throw new CoolException("鍑哄韩鍠槑绱颁笉瀛樺湪锛侊紒");
-                    }
-                    //鑾峰彇搴撳瓨涓鍗曞簱浣�
-//                Set<Long> longSet = stockItems.stream().map(StockItem::getStockId).collect(Collectors.toSet());
-                    stockItems.forEach(items -> {
-                        List<ReportDataParam> dataParams = new ArrayList<>();
-                        //鑾峰彇绱㈠紩鍐呭
-                        Map<String, String> fields = FieldsUtils.getFields(items.getFieldsIndex());
-                        //璁剧疆閫氱敤鍙傛暟
-                        param.setWMSNO(order.getCode())
-                                .setPONO(order.getPoCode())
-                                .setOrderNO(order.getPoCode())
-                                .setOrderDate(order.getCreateTime())
-                                .setItemCode(items.getMatnrCode())
-                                .setEditUser(finalNickName)
-                                .setEditDate(order.getUpdateTime())
-                                .setGoodsNO(fields.get("crushNo"))
-                                .setMemoDtl(order.getMemo());
-
-                        if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) {
-                            //閲囪喘鍏ュ簱鍗�
-                            params.setOrderType("PO_Instock").setAction("Update");
-                            //鑾峰彇鎸囧畾鏌ヨ瀛楁CrushNo 绁ㄥ彿
-                            param.setInQty(items.getQty());
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) {
-                            //閲囪喘閫�璐�
-                            params.setOrderType("PR_Outstock").setAction("Update");
-                            param.setOutQty(items.getQty());
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER_IN.type)) {
-                            //璋冩嫈鍏ュ簱鍗�
-                            params.setOrderType("Mv_Instock").setAction("Update");
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) {
-                            //鐢熶骇鍏ュ簱鍗�
+                stockItems.forEach(stockItem -> {
+                    List<ReportDataParam> dataParams = new ArrayList<>();
+                    //鑾峰彇绱㈠紩鍐呭
+                    Map<String, String> fields = FieldsUtils.getFields(stockItem.getFieldsIndex());
+                    //璁剧疆閫氱敤鍙傛暟
+                    param.setWMSNO(order.getCode())
+                            .setPONO(order.getPoCode())
+                            .setOrderNO(order.getPoCode())
+                            .setOrderDate(order.getCreateTime())
+                            .setItemCode(stockItem.getMatnrCode())
+                            .setEditUser(finalNickName)
+                            .setEditDate(order.getUpdateTime())
+                            .setGoodsNO(fields.get("crushNo"))
+                            .setMemoDtl(order.getMemo());
+                    if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) {
+                        //閲囪喘鍏ュ簱鍗�
+                        params.setOrderType("PO_Instock").setAction("Update");
+                        //鑾峰彇鎸囧畾鏌ヨ瀛楁CrushNo 绁ㄥ彿
+                        param.setInQty(stockItem.getAnfme());
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) {
+                        //閲囪喘閫�璐�
+                        params.setOrderType("PR_Outstock").setAction("Update");
+                        param.setOutQty(stockItem.getAnfme());
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER_IN.type)) {
+                        //璋冩嫈鍏ュ簱鍗�
+                        params.setOrderType("Mv_Instock").setAction("Update");
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) {
+                        //鐢熶骇鍏ュ簱鍗�
 //                      params.setOrderType("WO_Outstock").setAction("Update");
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) {
-                            //鐢熶骇閫�鏂�
-                            params.setOrderType("WR_Instock").setAction("Update");
-                            param.setInQty(items.getQty());
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) {
-                            //鐢熶骇棰嗘枡
-                            params.setOrderType("WO_Outstock").setAction("Update");
-                            param.setOutQty(items.getQty());
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) {
-                            //鐢熶骇琛ユ枡
-                            params.setOrderType("WR_Instock_BL").setAction("Update");
-                            param.setOutQty(items.getQty());
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) {
-                            params.setOrderType("WO_Outstock_WR").setAction("Update");
-                            param.setOutQty(items.getQty());
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) {
-                            //鍏跺畠鍏ュ簱鍗�/鎵嬪姩鍏ュ簱鍗�
-                            params.setOrderType("In_Instock").setAction("Update");
-                            param.setInQty(items.getQty());
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) {
+                        //鐢熶骇閫�鏂�
+                        params.setOrderType("WR_Instock").setAction("Update");
+                        param.setInQty(stockItem.getAnfme());
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) {
+                        //鐢熶骇棰嗘枡
+                        params.setOrderType("WO_Outstock").setAction("Update");
+                        param.setOutQty(stockItem.getAnfme());
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) {
+                        //鐢熶骇琛ユ枡
+                        params.setOrderType("WR_Instock_BL").setAction("Update");
+                        param.setOutQty(stockItem.getAnfme());
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) {
+                        params.setOrderType("WO_Outstock_WR").setAction("Update");
+                        param.setOutQty(stockItem.getAnfme());
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) {
+                        //鍏跺畠鍏ュ簱鍗�/鎵嬪姩鍏ュ簱鍗�
+                        params.setOrderType("In_Instock").setAction("Update");
+                        param.setInQty(stockItem.getAnfme());
 
-                        } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) {
-                            //鍏跺畠鍑哄簱鍗�/鎵嬪姩鍑哄簱鍗�
-                            params.setOrderType("Io_Outstock").setAction("Update");
-                            param.setOutQty(items.getQty());
-                        }
-                        dataParams.add(param);
+                    } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) {
+                        //鍏跺畠鍑哄簱鍗�/鎵嬪姩鍑哄簱鍗�
+                        params.setOrderType("Io_Outstock").setAction("Update");
+                        param.setOutQty(stockItem.getAnfme());
+                    }
+                    dataParams.add(param);
 
-                        params.setData(dataParams);
-                        try {
-                            R reported = uploadReportOrders(params);
-                            if (Integer.valueOf(reported.get("code").toString()) == 200) {
-                                order.setReportOnce(5);
-                                asnOrderService.updateById(order);
-                            }
-                        } catch (Exception e) {
-                            log.error("<UNK>", e);
+                    params.setData(dataParams);
+                    try {
+                        R reported = uploadReportOrders(params);
+                        if (Integer.valueOf(reported.get("code").toString()) == 200) {
+                            order.setReportOnce(5);
+                            asnOrderService.updateById(order);
                         }
-                        try {
-                            //浼戠湢3绉�
-                            Thread.sleep(3000);
-                        } catch (InterruptedException e) {
-                            throw new RuntimeException(e);
-                        }
-                    });
+                    } catch (Exception e) {
+                        log.error("<UNK>", e);
+                    }
+                    try {
+                        //浼戠湢3绉�
+                        Thread.sleep(3000);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
                 });
             }
         });
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index b0239c1..db94bf4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -611,19 +611,30 @@
                 if (wkOrders.isEmpty()) {
                     throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
                 }
+
+                Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
+
                 wkOrders.forEach(order -> {
-                    //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
-                    if (order.getAnfme().compareTo(order.getQty()) == 0) {
-                        order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-//                        if (order.getType().equals(OrderType.ORDER_IN)) {
-//                            order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val);
-//                        } else {
-//                            order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-//                        }
-                        if (!asnOrderService.updateById(order)) {
-                            throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+                    //鍒ゆ柇鏄惁鍏佽瓒呮敹锛屼笉鍏佽瓒呮敹娣诲姞鎷掓敹鍒ゆ柇
+                    if (!Objects.isNull(allowChang)) {
+                        if (!Boolean.parseBoolean(allowChang.getVal())) {
+                            if (order.getAnfme().compareTo(order.getQty()) == 0) {
+                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+                                if (!asnOrderService.updateById(order)) {
+                                    throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+                                }
+                            }
+                        } else {
+                            if (order.getAnfme().compareTo(order.getQty()) <= 0) {
+                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+                                if (!asnOrderService.updateById(order)) {
+                                    throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+                                }
+                            }
                         }
                     }
+                    //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+
                 });
                 //鍑哄簱鍗曚笂鎶CS淇敼搴撲綅鐘舵��
                 try {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 484ccf4..43a111b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -737,10 +737,10 @@
             LocItemWorking locWorking = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>()
                     .eq(LocItemWorking::getTaskId, taskItem.getTaskId())
                     .eq(LocItemWorking::getFieldsIndex, taskItem.getFieldsIndex())
-                    .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch())
+                    .eq(StringUtils.isNotEmpty(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch())
                     .eq(LocItemWorking::getMatnrId, taskItem.getMatnrId()));
             if (Objects.isNull(locWorking)) {
-                throw new CoolException("鏁版嵁閿欒锛屼綔涓氫腑搴撳瓨鏁版嵁涓㈠け锛侊紒");
+               continue;
             }
             if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
                 locWorking.setAnfme(taskItem.getAnfme());
@@ -1048,12 +1048,12 @@
 
         tempLocs.forEach(working -> {
             taskItems.forEach(taskItem -> {
-                if (taskItem.getId().equals(working.getMatnrId()) && taskItem.getFieldsIndex().equals(working.getFieldsIndex())) {
+                if (taskItem.getFieldsIndex().equals(working.getFieldsIndex())) {
                     Double minQty = taskItem.getAnfme();
                     if (!task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
-                        minQty = Math.round((working.getAnfme() - taskItem.getAnfme()) * 100) / 100.0;
+                        minQty = Math.round((working.getAnfme() - taskItem.getQty()) * 100) / 100.0;
                     }
-                    if (minQty.compareTo(0.0) > 0) {
+                    if (minQty.compareTo(0.0) >= 0) {
                         taskItem.setAnfme(minQty);
                         if (!taskItemService.updateById(taskItem)) {
                             throw new CoolException("浠诲姟鏄庣粏淇敼澶辫触锛侊紒");
@@ -1104,6 +1104,7 @@
                 LocItemWorking itemWorking = new LocItemWorking();
                 BeanUtils.copyProperties(taskItem, itemWorking);
                 itemWorking.setTaskId(task.getId())
+                        .setQty(0.0)
                         .setLocId(loc1.getId())
                         .setLocCode(loc1.getCode());
                 workings.add(itemWorking);

--
Gitblit v1.9.1