From 6f8ded21b3243313d4cad6750c1206d112330207 Mon Sep 17 00:00:00 2001
From: zc <zyzc>
Date: 星期三, 29 十月 2025 16:20:48 +0800
Subject: [PATCH] 入出庫訂單完成狀態優化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java |  122 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 110 insertions(+), 12 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java
index 8adaa8a..0dc9485 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java
@@ -2,7 +2,12 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.controller.erp.params.ReportDataParam;
+import com.vincent.rsf.server.api.controller.erp.params.ReportParams;
+import com.vincent.rsf.server.api.service.ReportMsgService;
+import com.vincent.rsf.server.common.utils.FieldsUtils;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.AsnExceStatus;
 import com.vincent.rsf.server.manager.enums.OrderType;
@@ -10,16 +15,16 @@
 import com.vincent.rsf.server.manager.enums.POExceStatus;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.manager.service.impl.TransferOrderServiceImpl;
+import com.vincent.rsf.server.system.entity.User;
+import com.vincent.rsf.server.system.service.UserService;
+import com.vincent.rsf.server.system.service.impl.UserServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -48,6 +53,10 @@
     private TransferOrderService transferOrderService;
     @Autowired
     private TransferService transferService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private ReportMsgService reportMsgService;
 
     /**
      * @param
@@ -61,7 +70,8 @@
     public void InStockToLog() {
         List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>()
                 .eq(WkOrder::getType, OrderType.ORDER_IN.type)
-                .eq(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_EXCE.val));
+                .eq(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_EXCE.val)
+                .apply("anfme = qty"));
         if (wkOrders.isEmpty()) {
             return;
         }
@@ -85,8 +95,8 @@
     public void outStockComplete() {
         List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>()
                 .eq(WkOrder::getType, OrderType.ORDER_OUT.type)
-                .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val)
-                .apply("anfme = qty")
+                .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val)
+
         );
         if (wkOrders.isEmpty()) {
             return;
@@ -96,6 +106,91 @@
         } catch (Exception e) {
             throw new CoolException(e.getMessage());
         }
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/10/28
+     * @description: 涓婁紶宸插畬鎴愯鍗曡嚦ERP骞冲彴
+     * @version 1.0
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void reportOrders(List<WkOrder> orders) {
+        orders.forEach(order -> {
+            ReportParams params = new ReportParams();
+            List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()));
+            if (orderItems.isEmpty()) {
+                throw new CoolException("璁㈡嵁鏄庣粏涓嶅瓨鍦紒锛�");
+            }
+            List<ReportDataParam> reportData = new ArrayList<>();
+            orderItems.forEach(orderItem -> {
+                ReportDataParam param = new ReportDataParam();
+                User user = userService.getById(order.getUpdateBy());
+                String nickName = null;
+                if (!Objects.isNull(user)) {
+                    nickName = user.getNickname();
+                }
+
+                Map<String, String> fields = FieldsUtils.getFields(orderItem.getFieldsIndex());
+
+                //璁剧疆閫氱敤鍙傛暟
+                param.setWMSNO(order.getCode())
+                        .setPONO(order.getPoCode())
+                        .setOrderDate(order.getCreateTime())
+                        .setItemCode(orderItem.getMatnrCode())
+                        .setEditUser(nickName)
+                        .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(orderItem.getQty());
+                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) {
+                    //閲囪喘閫�璐�
+                    params.setOrderType("PR_Outstock").setAction("Update");
+                    param.setOutQty(orderItem.getQty());
+                } 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(orderItem.getQty());
+                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) {
+                    //鐢熶骇棰嗘枡
+                    params.setOrderType("WO_Outstock").setAction("Update");
+                    param.setOutQty(orderItem.getQty());
+
+                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) {
+                    //鐢熶骇琛ユ枡
+                    params.setOrderType("WR_Instock_BL").setAction("Update");
+                    param.setOutQty(orderItem.getQty());
+
+                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) {
+                    //鍏跺畠鍏ュ簱鍗�/鎵嬪姩鍏ュ簱鍗�
+                    params.setOrderType("In_Instock").setAction("Update");
+                    param.setInQty(orderItem.getQty());
+
+                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) {
+                    //鍏跺畠鍑哄簱鍗�/鎵嬪姩鍑哄簱鍗�
+                    params.setOrderType("Io_Outstock").setAction("Update");
+                    param.setOutQty(orderItem.getQty());
+                }
+                reportData.add(param);
+            });
+            params.setData(reportData);
+
+            R reported = reportMsgService.reportOrders(params);
+            if (reported.get("code").equals(200)) {
+               order.setNtyStatus(1);
+               if (!asnOrderService.updateById(order)) {
+                   throw new CoolException("涓婃姤鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+               }
+            }
+        });
     }
 
 
@@ -109,6 +204,9 @@
      */
     @Transactional(rollbackFor = Exception.class)
     public void moveOrderToLog(List<WkOrder> wkOrders, String type) {
+        //涓婃姤宸插畬鎴愯鍗曡嚦ERP銆丮ES绛変笁鏂圭郴缁�
+//        reportOrders(wkOrders);
+        //
         Set<Long> longSet = wkOrders.stream().map(WkOrder::getId).collect(Collectors.toSet());
         List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                 .in(WkOrderItem::getOrderId, longSet));
@@ -169,11 +267,11 @@
 //                        if (!this.asnOrderService.removeByIds(orderIds)) {
 //                            throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�");
 //                        }
-                          if (!transferService.update(new LambdaUpdateWrapper<Transfer>()
-                                  .eq(Transfer::getId, order.getPoId())
-                                  .set(Transfer::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val))) {
-                              throw new CoolException("璋冩嫈鍗曠姸鎬佷慨鏀瑰け璐ワ紒锛�");
-                          }
+                        if (!transferService.update(new LambdaUpdateWrapper<Transfer>()
+                                .eq(Transfer::getId, order.getPoId())
+                                .set(Transfer::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val))) {
+                            throw new CoolException("璋冩嫈鍗曠姸鎬佷慨鏀瑰け璐ワ紒锛�");
+                        }
                         return;
                     } else {
                         if (!Objects.isNull(order.getPoId())) {

--
Gitblit v1.9.1