From 9f43ee66e8fa2e0d02945f4bdd40d9c3a53a4bd7 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期六, 24 一月 2026 13:41:13 +0800
Subject: [PATCH] lsh#
---
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java | 273 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 263 insertions(+), 10 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java
index ae5afc5..22f2bb7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java
@@ -1,12 +1,16 @@
package com.vincent.rsf.server.api.controller.erp.params;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.vincent.rsf.framework.common.Cools;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@@ -18,25 +22,274 @@
private static final long serialVersionUID = 1L;
- @ApiModelProperty("涓氬姟绫诲瀷")
+ /**
+ * 涓氬姟绫诲瀷鏋氫妇
+ */
+ public interface BusinessType {
+ // 鍏ュ簱鍗曟嵁
+ String PUR_RECEIVE_BILL = "PUR_ReceiveBill"; // 鏀舵枡閫氱煡鍗�
+ String STK_IN_STOCK = "STK_InStock"; // 閲囪喘鍏ュ簱鍗�
+ String PUR_MRAPP = "PUR_MRAPP"; // 閫�鏂欑敵璇峰崟
+ String PUR_MRB = "PUR_MRB"; // 閲囪喘閫�鏂欏崟
+ String SAL_RETURNNOTICE = "SAL_RETURNNOTICE"; // 閫�璐ч�氱煡鍗�
+ String SAL_RETURNSTOCK = "SAL_RETURNSTOCK"; // 閿�鍞��璐у崟
+ String PRD_RETURN_MTRL = "PRD_ReturnMtrl"; // 鐢熶骇閫�鏂欏崟 //鎺ラ┏
+ String PRD_INSTOCK = "PRD_INSTOCK"; // 鐢熶骇鍏ュ簱鍗� //鎺ラ┏
+ String PRD_MORPT = "PRD_MORPT"; // 鐢熶骇姹囨姤鍗�
+ String STK_MISCELLANEOUS = "STK_MISCELLANEOUS"; // 鍏朵粬鍏ュ簱鍗�
+ // 鍑哄簱鍗曟嵁
+ String SAL_DELIVERYNOTICE = "SAL_DELIVERYNOTICE"; // 鍙戣揣閫氱煡鍗�
+ String SAL_OUTSTOCK = "SAL_OUTSTOCK"; // 閿�鍞嚭搴撳崟
+ String STK_OUTSTOCK_APPLY = "STK_OutStockApply"; // 鍑哄簱鐢宠鍗�
+ String PRD_PICK_MTRL = "PRD_PickMtrl"; // 鐢熶骇棰嗘枡鍗� //鎺ラ┏
+ String PRD_FEED_MTRL = "PRD_FeedMtrl"; // 鐢熶骇琛ユ枡鍗� //鎺ラ┏
+ String STK_MIS_DELIVERY = "STK_MisDelivery"; // 鍏朵粬鍑哄簱鍗�
+ // 璋冩嫧鍗曟嵁
+ String STK_TRANSFER_APPLY = "STK_TRANSFERAPPLY"; // 璋冩嫧鐢宠鍗�
+ String STK_TRANSFER_DIRECT = "STK_TransferDirect"; // 鐩存帴璋冩嫧鍗�
+ }
+
+ /**
+ * 鍗曟嵁绫诲瀷鏋氫妇
+ */
+ public interface OrderType {
+ String OUT_STOCK = "1"; // 鍑哄簱鍗�
+ String IN_STOCK = "2"; // 鍏ュ簱鍗�
+ String TRANSFER = "3"; // 璋冩嫧鍗�
+ }
+
+ @NotBlank(message = "涓氬姟绫诲瀷涓嶈兘涓虹┖")
+ @Pattern(regexp = "^(PUR_ReceiveBill|STK_InStock|PUR_MRAPP|PUR_MRB|SAL_RETURNNOTICE|SAL_RETURNSTOCK|"
+ + "PRD_ReturnMtrl|PRD_INSTOCK|PRD_MORPT|STK_MISCELLANEOUS|SAL_DELIVERYNOTICE|SAL_OUTSTOCK|"
+ + "STK_OutStockApply|PRD_PickMtrl|PRD_FeedMtrl|STK_MisDelivery|STK_TRANSFERAPPLY|STK_TransferDirect)$",
+ message = "涓氬姟绫诲瀷鏍煎紡涓嶆纭�")
+ @ApiModelProperty(value = "涓氬姟绫诲瀷", required = true, example = "STK_InStock")
private String wkType;
- @ApiModelProperty("鍗曟嵁绫诲瀷")
+ @NotBlank(message = "鍗曟嵁绫诲瀷涓嶈兘涓虹┖")
+ @Pattern(regexp = "^[123]$", message = "鍗曟嵁绫诲瀷鍙兘鏄�1(鍑哄簱鍗�)銆�2(鍏ュ簱鍗�)鎴�3(璋冩嫧鍗�)")
+ @ApiModelProperty(value = "鍗曟嵁绫诲瀷: 1-鍑哄簱鍗�, 2-鍏ュ簱鍗�, 3-璋冩嫧鍗�", required = true, example = "2")
private String type;
- @ApiModelProperty("鍗曞彿")
+ @NotBlank(message = "鍗曞彿涓嶈兘涓虹┖")
+ @Size(max = 50, message = "鍗曞彿闀垮害涓嶈兘瓒呰繃50涓瓧绗�")
+ @ApiModelProperty(value = "鍗曞彿", required = true, example = "PO202401010001")
private String orderNo;
- @ApiModelProperty("璁㈠崟ID")
+ @NotNull(message = "鍗曟嵁鍐呯爜涓嶈兘涓虹┖")
+ @Positive(message = "鍗曟嵁鍐呯爜蹇呴』鏄鏁存暟")
+ @ApiModelProperty(value = "鍗曟嵁鍐呯爜锛屽敮涓�鏍囪瘑", required = true, example = "100001")
+ private Long orderInternalCode;
+
+// @NotNull(message = "璁㈠崟ID涓嶈兘涓虹┖")
+// @Positive(message = "璁㈠崟ID蹇呴』鏄鏁存暟")
+// @ApiModelProperty(value = "璁㈠崟ID", required = true, example = "200001")
private Long orderId;
- @ApiModelProperty("鏁伴噺")
+// @NotNull(message = "鏁伴噺涓嶈兘涓虹┖")
+// @DecimalMin(value = "0.0", inclusive = false, message = "鏁伴噺蹇呴』澶т簬0")
+// @ApiModelProperty(value = "鏁伴噺", required = true, example = "100.5")
private Double anfme;
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:ss:mm")
- @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
+ @ApiModelProperty(value = "瀹㈡埛缂栫爜", example = "CUST001")
+ private String customerId;
+
+ @ApiModelProperty(value = "瀹㈡埛鍚嶇О", example = "XX绉戞妧鏈夐檺鍏徃")
+ private String customerName;
+
+ @ApiModelProperty(value = "渚涘簲鍟嗙紪鐮�", example = "SUP001")
+ private String supplierId;
+
+ @ApiModelProperty(value = "渚涘簲鍟嗗悕绉�", example = "XX渚涘簲鍟�")
+ private String supplierName;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @ApiModelProperty(value = "鍒拌揪鏃堕棿", example = "2024-01-01 10:00:00")
private Date arrTime;
- @ApiModelProperty("鍗曟嵁鏄庣粏淇℃伅")
- private List<SyncOrdersItem> ordersItems;
-}
+ @NotNull(message = "鍒涘缓鏃ユ湡涓嶈兘涓虹┖")
+ @Positive(message = "鍒涘缓鏃ユ湡蹇呴』鏄鏁存暟")
+ @ApiModelProperty(value = "鍒涘缓鏃ユ湡锛屾椂闂存埑锛岀簿纭埌绉�", required = true, example = "1704067200")
+ private Long createTime;
+
+ @NotNull(message = "涓氬姟鏃ユ湡涓嶈兘涓虹┖")
+ @Positive(message = "涓氬姟鏃ユ湡蹇呴』鏄鏁存暟")
+ @ApiModelProperty(value = "涓氬姟鏃ユ湡锛屽璐︿娇鐢紝鏃堕棿鎴筹紝绮剧‘鍒扮", required = true, example = "1704067200")
+ private Long businessTime;
+
+ @Valid
+ @NotNull(message = "鍗曟嵁鏄庣粏淇℃伅涓嶈兘涓虹┖")
+ @Size(min = 1, message = "鑷冲皯闇�瑕佷竴涓槑缁嗛」")
+ @ApiModelProperty(value = "鍗曟嵁鏄庣粏淇℃伅", required = true)
+ private List<SyncOrdersItem> orderItems;
+
+ @ApiModelProperty(value = "鏀舵枡/鍙戣揣缁勭粐", example = "ORG001")
+ private String stockOrgId;
+
+ @ApiModelProperty(value = "鏀舵枡/鍙戣揣缁勭粐鍚嶇О", example = "鍙戣揣閮�")
+ private String stockOrgName;
+
+ @ApiModelProperty(value = "閲囪喘缁勭粐", example = "PUR001")
+ private String purchaseOrgId;
+
+ @ApiModelProperty(value = "閲囪喘缁勭粐鍚嶇О", example = "閲囪喘閮�")
+ private String purchaseOrgName;
+
+ @ApiModelProperty(value = "閲囪喘鍛�", example = "USER001")
+ private String purchaseUserId;
+
+ @ApiModelProperty(value = "閲囪喘鍛樺悕绉�", example = "寮犱笁")
+ private String purchaseUserName;
+
+ @ApiModelProperty(value = "鐢熶骇缁勭粐", example = "PRD001")
+ private String prdOrgId;
+
+ @ApiModelProperty(value = "鐢熶骇缁勭粐鍚嶇О", example = "鐢熶骇閮�")
+ private String prdOrgName;
+
+ @ApiModelProperty(value = "閿�鍞粍缁�", example = "SALE001")
+ private String saleOrgId;
+
+ @ApiModelProperty(value = "閿�鍞粍缁囧悕绉�", example = "閿�鍞儴")
+ private String saleOrgName;
+
+ @ApiModelProperty(value = "閿�鍞憳", example = "USER002")
+ private String saleUserId;
+
+ @ApiModelProperty(value = "閿�鍞憳鍚嶇О", example = "鏉庡洓")
+ private String saleUserName;
+
+ @ApiModelProperty(value = "搴撳瓨鏂瑰悜", example = "IN")
+ private String stockDirect;
+
+ @ApiModelProperty(value = "鍑哄叆搴撴帴椹崇珯鐐癸紝鍑哄簱鏃跺皢鐗╂枡鍑哄簱鍚庤繍杈撹嚦璇ョ珯鐐癸紝鍏ュ簱鏃朵粠璇ョ珯鐐瑰皢鐗╂枡杩愬洖搴撲腑", example = "STATION001")
+ private String stationId;
+
+ /**
+ * 鑾峰彇瀹為檯鍒拌揪鏃堕棿
+ * 浼樺厛浣跨敤 arrTime锛屽鏋滀负绌哄垯浠� createTime 杞崲
+ */
+ @JsonIgnore
+ public Date getActualArrTime() {
+ if (this.arrTime != null) {
+ return this.arrTime;
+ }
+ if (this.createTime != null) {
+ return new Date(this.createTime * 1000L);
+ }
+ return null;
+ }
+
+ /**
+ * 鑾峰彇瀹為檯涓氬姟鏃堕棿
+ */
+ @JsonIgnore
+ public Date getActualBusinessTime() {
+ if (this.businessTime != null) {
+ return new Date(this.businessTime * 1000L);
+ }
+ return null;
+ }
+
+ /**
+ * 鑾峰彇瀹為檯鍒涘缓鏃堕棿
+ */
+ @JsonIgnore
+ public Date getActualCreateTime() {
+ if (this.createTime != null) {
+ return new Date(this.createTime * 1000L);
+ }
+ return null;
+ }
+
+ /**
+ * 鏄惁鍏ュ簱鍗�
+ */
+ @JsonIgnore
+ public boolean isInStockOrder() {
+ return OrderType.IN_STOCK.equals(this.type);
+ }
+
+ /**
+ * 鏄惁鍑哄簱鍗�
+ */
+ @JsonIgnore
+ public boolean isOutStockOrder() {
+ return OrderType.OUT_STOCK.equals(this.type);
+ }
+
+ /**
+ * 鏄惁璋冩嫧鍗�
+ */
+ @JsonIgnore
+ public boolean isTransferOrder() {
+ return OrderType.TRANSFER.equals(this.type);
+ }
+
+ /**
+ * 涓氬姟楠岃瘉
+ */
+ public void validateBusiness() {
+// if (isOutStockOrder() && Cools.isEmpty(customerId)) {
+// throw new IllegalArgumentException("鍑哄簱鍗曞繀椤绘寚瀹氬鎴�");
+// }
+//
+// if (isInStockOrder() && Cools.isEmpty(supplierId)) {
+// throw new IllegalArgumentException("鍏ュ簱鍗曞繀椤绘寚瀹氫緵搴斿晢");
+// }
+
+// if (Cools.isEmpty(stationId) && !isTransferOrder()) {
+// throw new IllegalArgumentException("蹇呴』鎸囧畾鎺ラ┏绔欑偣");
+// }
+
+ // 楠岃瘉鏄庣粏鎬绘暟涓庝富鍗曟暟閲忔槸鍚︿竴鑷�
+// if (orderItems != null && anfme != null) {
+// double itemsTotal = orderItems.stream()
+// .mapToDouble(item -> item.getAnfme() != null ? item.getAnfme() : 0.0)
+// .sum();
+//
+// if (Math.abs(itemsTotal - anfme) > 0.001) {
+// throw new IllegalArgumentException(String.format(
+// "涓诲崟鏁伴噺(%.3f)涓庢槑缁嗘�绘暟(%.3f)涓嶄竴鑷�", anfme, itemsTotal));
+// }
+// }
+ }
+
+ /**
+ * 璁$畻鏄庣粏鎬绘暟閲�
+ */
+ @JsonIgnore
+ public Double calculateItemsTotal() {
+ if (orderItems == null || orderItems.isEmpty()) {
+ return 0.0;
+ }
+
+ return orderItems.stream()
+ .mapToDouble(item -> item.getAnfme() != null ? item.getAnfme() : 0.0)
+ .sum();
+ }
+
+ /**
+ * 鑾峰彇鍗曟嵁鎽樿
+ */
+ @JsonIgnore
+ public String getSummary() {
+ return String.format("鍗曟嵁[%s] 绫诲瀷[%s] 涓氬姟绫诲瀷[%s] 鍗曟嵁鍐呯爜[%s]",
+ orderNo, type, wkType, orderInternalCode);
+ }
+
+ /**
+ * 鏄惁鏈夋晥鍗曟嵁
+ */
+ @JsonIgnore
+ public boolean isValid() {
+ return !Cools.isEmpty(orderNo) &&
+ orderInternalCode != null && !Cools.isEmpty(orderInternalCode) &&
+ type != null && !Cools.isEmpty(type) &&
+ wkType != null && !Cools.isEmpty(wkType) &&
+ createTime != null && !Cools.isEmpty(createTime) &&
+ businessTime != null && !Cools.isEmpty(businessTime) &&
+ orderItems != null && !orderItems.isEmpty();
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.1