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