From 6e2dd9a7b6f87d39bdc682e164403be6a7e1ec0f Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 28 十月 2025 10:22:40 +0800
Subject: [PATCH] 新增已完成订单上传接口

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java |    8 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/constant/RcsConstant.java           |    5 +
 rsf-server/src/main/resources/application-prod.yml                                             |   18 +++-
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java     |   36 ++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java     |  115 ++++++++++++++++++++++++++--
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java               |    1 
 6 files changed, 167 insertions(+), 16 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java
index ef75ae3..798e1aa 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java
@@ -1,9 +1,11 @@
 package com.vincent.rsf.server.api.controller.erp.params;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -19,7 +21,9 @@
     private String PONO;
 
     @ApiModelProperty("鍏ュ簱鏃ユ湡")
-    private String OrderDate;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date OrderDate;
 
     @ApiModelProperty("閲囪喘閫�璐у崟鍙�/鐢熶骇鍗曞彿/")
     private String OrderNO;
@@ -49,6 +53,8 @@
     private String EditUser;
 
     @ApiModelProperty("缂栬緫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date EditDate;
 
     @ApiModelProperty("澶囨敞璇存槑")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/constant/RcsConstant.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/constant/RcsConstant.java
index a69d637..17b9672 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/constant/RcsConstant.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/constant/RcsConstant.java
@@ -2,7 +2,12 @@
 
 public class RcsConstant {
 
+    //涓嬪彂浠诲姟鑷砇CS
     public static String pubTask = "/rsf-open-api/rcs/pub/task";
 
+    //鍚屾RCS搴撲綅淇℃伅
     public static String syncLocs = "/rsf-open-api/rcs/sync/locs";
+
+    //涓婃姤璁㈠崟淇℃伅
+    public static String REPORT_ORDERS = "/rsf-open-api/report/complete/orders";
 }
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 4ce9ebf..6552326 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
@@ -4,11 +4,17 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.cfg.CoercionAction;
+import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
 import com.vincent.rsf.common.domain.CommonReponse;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.config.RemotesInfoProperties;
 import com.vincent.rsf.server.api.controller.erp.params.ReportParams;
+import com.vincent.rsf.server.api.entity.CommonResponse;
+import com.vincent.rsf.server.api.entity.constant.RcsConstant;
 import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
 import com.vincent.rsf.server.api.entity.params.ErpInspectItem;
 import com.vincent.rsf.server.api.entity.params.ErpInspectParams;
@@ -178,6 +184,34 @@
      */
     @Override
     public R reportOrders(ReportParams params) {
-        return null;
+        if (Objects.isNull(params)) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        /**WMS鍩虹閰嶇疆閾炬帴*/
+        String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.REPORT_ORDERS;
+        log.info("涓婃姤宸插畬鎴愯鍗曪細{}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, JSONObject.toJSONString(params));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+
+        HttpEntity httpEntity = new HttpEntity(params, headers);
+        ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class);
+        log.info("涓婃姤宸插畬鎴愯鍗曪紝杩斿洖缁撴灉锛� {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            throw new CoolException("淇敼澶辫触锛侊紒");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults().setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+                    return R.ok().add(result.getData());
+                } else {
+                    throw new CoolException("淇敼澶辫触锛侊紒");
+                }
+            } catch (JsonProcessingException e) {
+                throw new CoolException(e.getMessage());
+            }
+        }
     }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
index fe65c73..6cc5715 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
@@ -18,6 +18,7 @@
     ORDER_WORK_TYPE_STOCK_REVISE("7", "搴撳瓨璋冩暣鍗�"),
     ORDER_WORK_TYPE_SUPPLIER("11", "閿�鍞嚭搴撳崟"),
     ORDER_WORK_TYPE_RETURN_ORDER("12", "棰嗘枡鍑哄簱鍗�"),
+    ORDER_WORK_TYPE_PROD_ADDITION("18", "鐢熶骇琛ユ枡"),
     ORDER_WORK_TYPE_PURCHASE_RETURN("13", "閲囪喘閫�鍥炲嚭搴撳崟"),
     ORDER_WORK_TYPE_STOCK_OUT("15", "搴撳瓨鍑哄簱"),
     ORDER_WORK_TYPE_STOCK_CHECK("16", "鐩樼偣鍑哄簱"),
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..ec5cd67 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
@@ -98,6 +107,91 @@
         }
     }
 
+    /**
+     * @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("涓婃姤鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+               }
+            }
+        });
+    }
+
 
     /**
      * @param
@@ -109,6 +203,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 +266,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())) {
diff --git a/rsf-server/src/main/resources/application-prod.yml b/rsf-server/src/main/resources/application-prod.yml
index 8d37532..4730027 100644
--- a/rsf-server/src/main/resources/application-prod.yml
+++ b/rsf-server/src/main/resources/application-prod.yml
@@ -64,11 +64,6 @@
   timeout: 5000
   index: 11
 
-stock:
-  flagAvailable: true
-
-
-
   #骞冲彴鎺ュ彛淇℃伅閰嶇疆(濡傦細ERP, QMS, WCS绛�)
   platform:
     #浼佷笟ERP骞冲彴
@@ -88,3 +83,16 @@
       host: http://127.0.0.1
       #绔彛
       port: 8081
+
+#浠撳簱鍔熻兘鍙傛暟閰嶇疆
+stock:
+  #鏄惁鍏佽鎵撳嵃璐х墿鏍囩锛� 榛樿鍏佽鎵撳嵃锛屼篃鍙敱渚涘簲鍟嗘彁渚涙爣绛�
+  flagPrinter: false
+  #鏄惁鑷姩鐢熸垚ASN鍗曪紙榛樿锛氭槸锛夛紝涓恒�庡惁銆忓垯寮�鍚疨O鍗曟墜鍔ㄧ敓鎴怉SN鍗曞姛鑳�
+  flagAutoAsn: false
+  #璐ㄦ鍔熻兘 鏄惁鏍¢獙涓婃灦锛堥粯璁わ細鏄級锛屾槸鍚︽牎楠屾敹璐э紙榛樿锛氬惁锛�
+  inspect:
+    #鍒ゆ柇鏄悗妫�楠屽悎鏍煎悗锛屾墠鍏佽涓婃灦
+    flagAvailable: true
+    #鍒ゆ柇鏄惁鏍¢獙鍚堟牸鍚庯紝鎵嶅厑璁告敹璐�
+    flagReceiving: false
\ No newline at end of file

--
Gitblit v1.9.1