Jelajahi Sumber

对接erp-获取订单信息

xdd 2 bulan lalu
induk
melakukan
c7d09e1b19

+ 10 - 1
fs-service-system/pom.xml

@@ -208,6 +208,15 @@
             <groupId>com.github.ben-manes.caffeine</groupId>
             <artifactId>caffeine</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>${org.mapstruct.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct-processor</artifactId>
+            <version>${org.mapstruct.version}</version>
+        </dependency>
     </dependencies>
 </project>

+ 133 - 0
fs-service-system/src/main/java/com/fs/erp/converter/ErpWdtToErpOrderMapper.java

@@ -0,0 +1,133 @@
+package com.fs.erp.converter;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.fs.erp.domain.ErpDeliverys;
+import com.fs.erp.domain.ErpOrderQuery;
+import com.fs.erp.dto.ErpOrderQueryResponse;
+import com.fs.erp.dto.wdt.ErpWdtTradeDTO;
+import com.fs.erp.dto.wdt.ErpWdtTradeInfo;
+import com.fs.erp.dto.wdt.ErpWdtTradeQueryResponse;
+import org.mapstruct.*;
+import org.mapstruct.factory.Mappers;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * ERP 订单查询 DTO 映射器.
+ * <p>
+ * 负责将 网店通(WDT)的订单查询响应 DTO 结构 {@link ErpWdtTradeQueryResponseDTO} 映射到
+ * 内部 ERP 订单查询响应 DTO 结构 {@link ErpOrderQueryResponse}。
+ * </p>
+ * <p>
+ * 主要映射逻辑包括:
+ * <ul>
+ *     <li>顶层响应状态和消息的映射。</li>
+ *     <li>将 WDT 订单列表 {@code trades} 映射到内部订单列表 {@code orders}。</li>
+ *     <li>将单个 WDT 订单 {@link ErpWdtTradeDTO} 映射到内部订单 {@link ErpOrderQuery}。</li>
+ *     <li>根据 WDT 订单状态推导内部订单的布尔状态字段(如:approve, cancle)。</li>
+ *     <li>处理数值类型转换(如:BigDecimal 到 Integer/Double)。</li>
+ *     <li>处理日期字符串到 Date 对象的转换。</li>
+ *     <li>将 WDT 订单的物流信息映射到一个包含单个元素的内部发货列表 {@code deliverys}。</li>
+ * </ul>
+ *
+ * @author xdd
+ * @since 2025-02-27
+ */
+@Mapper
+public interface ErpWdtToErpOrderMapper {
+
+    /**
+     * Mapper 实例,用于非 Spring 环境。
+     */
+    ErpWdtToErpOrderMapper INSTANCE = Mappers.getMapper(ErpWdtToErpOrderMapper.class);
+
+    /**
+     * 将网店通订单查询响应 DTO 映射到内部 ERP 订单查询响应 DTO。
+     *
+     * @param source 源对象,网店通订单查询响应 DTO ({@link ErpWdtTradeQueryResponse})。
+     * @return 目标对象,内部 ERP 订单查询响应 DTO ({@link ErpOrderQueryResponse})。
+     *         如果源对象为 null,则返回 null。
+     */
+
+    default ErpOrderQueryResponse toErpOrderQueryResponse(ErpWdtTradeQueryResponse source){
+        ErpOrderQueryResponse response = new ErpOrderQueryResponse();
+        List<ErpOrderQuery> erpOrderQueryList = new ArrayList<>();
+        if(CollectionUtil.isNotEmpty(source.getTradeList())){
+            List<ErpWdtTradeInfo> trades = source.getTradeList();
+            for (ErpWdtTradeInfo trade : trades) {
+                ErpOrderQuery erpOrderQuery = toErpOrderQuery(trade);
+                erpOrderQueryList.add(erpOrderQuery);
+            }
+        }
+        response.setOrders(erpOrderQueryList);
+        return response;
+    }
+
+    /**
+     * 将单个网店通订单 DTO 映射到内部 ERP 订单查询 DTO。
+     *
+     * @param source 源对象,单个网店通订单 DTO ({@link ErpWdtTradeDTO})。
+     * @return 目标对象,内部 ERP 订单查询 DTO ({@link ErpOrderQuery})。
+     *         如果源对象为 null,则返回 null。
+     */
+    default ErpOrderQuery toErpOrderQuery(ErpWdtTradeInfo source){
+        ErpOrderQuery erpOrderQuery = new ErpOrderQuery();
+        // 订单号
+        if(source.getSrcTids() != null) {
+            erpOrderQuery.setCode(source.getSrcTids());
+        }
+        // 商品数量
+        if(source.getGoodsCount() != null) {
+            erpOrderQuery.setQty(source.getGoodsCount().intValue());
+        }
+        // 商品金额
+        if(source.getGoodsAmount() != null){
+            erpOrderQuery.setAmount(source.getGoodsAmount().doubleValue());
+        }
+        // 支付金额
+        if(source.getPaid() != null){
+            erpOrderQuery.setPayment(source.getPaid().doubleValue());
+        }
+        // 快递编号
+        if(source.getLogisticsCode() != null){
+            erpOrderQuery.setExpress_code(source.getLogisticsCode());
+        }
+        // 快递名称
+        if(source.getLogisticsName() != null) {
+            erpOrderQuery.setExpress_name(source.getLogisticsName());
+        }
+
+        // 收货人
+        if(source.getReceiverName() != null) {
+            erpOrderQuery.setReceiver_name(source.getReceiverName());
+        }
+
+        // 电话
+        if(source.getReceiverMobile() != null) {
+            erpOrderQuery.setReceiver_mobile(source.getReceiverMobile());
+        }
+
+        //地址
+        if(source.getReceiverAddress() != null) {
+            erpOrderQuery.setReceiver_address(source.getReceiverAddress());
+        }
+
+        // 运单号
+        if(source.getLogisticsNo() != null){
+            erpOrderQuery.setExpress_code(source.getLogisticsNo());
+        }
+
+        ErpDeliverys erpDeliverys = new ErpDeliverys();
+        erpDeliverys.setExpress_code(source.getLogisticsCode());
+        erpDeliverys.setExpress_name(source.getLogisticsName());
+        erpDeliverys.setMail_no(source.getLogisticsNo());
+
+        erpOrderQuery.setDeliverys(new ArrayList<>(Collections.singletonList(erpDeliverys)));
+        return erpOrderQuery;
+    }
+
+
+}

+ 1 - 1
fs-service-system/src/main/java/com/fs/erp/dto/sdk/wangdian/api/WdtClient.java

@@ -35,7 +35,7 @@ public class WdtClient {
 	@Value("${fsConfig.erpWdBaseUrl}")
 	private static String baseUrl;
 
-	private static WdtClient wdtClient;
+	private static volatile WdtClient wdtClient;
 
 
 	private int connectTimeout = 3000;//3秒

+ 80 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtDiscountListDTO.java

@@ -0,0 +1,80 @@
+package com.fs.erp.dto.wdt;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.fasterxml.jackson.annotation.JsonFormat; // 需要引入Jackson库
+
+/**
+ * ERP WDT 优惠明细DTO,用于封装订单或子订单中的优惠项信息。
+ *
+ * @author xdd
+ * @date 2025-02-27
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtDiscountListDTO {
+
+    /**
+     * 平台id
+     */
+    private Integer platformId;
+
+    /**
+     * 原始单号 (关联主订单)
+     */
+    private String tid;
+
+    /**
+     * 原始子订单编号 (如果优惠关联特定子单)
+     */
+    private String oid;
+
+    /**
+     * 明细主键, 自动增量
+     */
+    private Long recId; // btigin 视为 bigint
+
+    /**
+     * 优惠类别
+     */
+    private String type;
+
+    /**
+     * 是否优惠券
+     * 0: 否, 1: 是 (tinyint 常用表示方式)
+     */
+    private Integer isBonus;
+
+    /**
+     * 创建时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date created;
+
+    /**
+     * 优惠名称
+     */
+    private String name;
+
+    /**
+     * 优惠详情
+     */
+    private String detail;
+
+    /**
+     * 优惠金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 平台唯一标识 (例如优惠券码、活动ID等)
+     */
+    private String sn;
+}

+ 489 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtGoodsInfo.java

@@ -0,0 +1,489 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+// import java.time.LocalDateTime; // 如果需要反序列化为日期时间对象
+
+/**
+ * ERP 旺店通 订单货品明细 DTO.
+ * 代表订单中单个货品的详细信息。
+ *
+ * @author xdd
+ * @version 1.0
+ * @since 2025-02-27
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtGoodsInfo {
+
+    /**
+     * erp子订单主键
+     */
+    @JsonProperty("rec_id")
+    @NotNull // 必须
+    private Integer recId;
+
+    /**
+     * erp订单主键
+     */
+    @JsonProperty("trade_id")
+    @NotNull // 必须
+    private Integer tradeId;
+
+    /**
+     * erp内商品主键
+     */
+    @JsonProperty("spec_id")
+    @NotNull // 必须
+    private Integer specId;
+
+    /**
+     * 平台ID
+     */
+    @JsonProperty("platform_id")
+    @NotNull // 必须
+    private Integer platformId;
+
+    /**
+     * 原始子订单号
+     */
+    @JsonProperty("src_oid")
+    @NotNull // 必须
+    private String srcOid;
+
+    /**
+     * 平台货品ID
+     */
+    @JsonProperty("platform_goods_id")
+    @NotNull // 必须
+    private String platformGoodsId;
+
+    /**
+     * 平台商品ID
+     */
+    @JsonProperty("platform_spec_id")
+    @NotNull // 必须
+    private String platformSpecId;
+
+    /**
+     * 组合装ID,如果货品是由组合装拆分的,这里组合装ID
+     */
+    @JsonProperty("suite_id")
+    @NotNull // 必须
+    private Integer suiteId;
+
+    /**
+     * 区分子单拆分的唯一性标记,子单拆分时,单品明细都一致,用来区分子单的唯一性
+     */
+    @JsonProperty("flag")
+    @NotNull // 必须
+    private Integer flag;
+
+    /**
+     * 原始订单号
+     */
+    @JsonProperty("src_tid")
+    @NotNull // 必须
+    private String srcTid;
+
+    /**
+     * 是否是赠品 0非赠品 1自动赠送 2手工赠送 3回购自动送赠品  4前N有礼送赠品 6天猫优仓赠品 7淘宝CRM会员送赠
+     */
+    @JsonProperty("gift_type")
+    @NotNull // 必须
+    private Integer giftType;
+
+    /**
+     * 退款状态 0无退款,1取消退款,2已申请退款,3等待退货,4等待收货,5退款成功 6已关闭
+     */
+    @JsonProperty("refund_status")
+    @NotNull // 必须
+    private Integer refundStatus;
+
+    /**
+     * 担保方式 1担保 2非担保 3在线非担保
+     */
+    @JsonProperty("guarantee_mode")
+    @NotNull // 必须
+    private Integer guaranteeMode;
+
+    /**
+     * 发货条件 1款到发货 2货到付款(包含部分货到付款) 3分期付款
+     */
+    @JsonProperty("delivery_term")
+    @NotNull // 必须
+    private Integer deliveryTerm;
+
+    /**
+     * 关联发货
+     */
+    @JsonProperty("bind_oid")
+    @NotNull // 必须
+    private String bindOid;
+
+    /**
+     * 货品数量
+     */
+    @JsonProperty("num")
+    @NotNull // 必须
+    private BigDecimal num;
+
+    /**
+     * 销售单价,手工新建时使用货品属性中的“零售价”
+     */
+    @JsonProperty("price")
+    @NotNull // 必须
+    private BigDecimal price;
+
+    /**
+     * 实发数量,此数量为发货数量,删除操作等于将此值设置为0
+     */
+    @JsonProperty("actual_num")
+    @NotNull // 必须
+    private BigDecimal actualNum;
+
+    /**
+     * 无实际含义
+     */
+    @JsonProperty("refund_num")
+    @NotNull // 必须
+    private BigDecimal refundNum;
+
+    /**
+     * 成交价,原始单折扣及分摊之后的价格
+     */
+    @JsonProperty("order_price")
+    @NotNull // 必须
+    private BigDecimal orderPrice;
+
+    /**
+     * 进入ERP后再次调整的价格,默认值与order_price一致
+     */
+    @JsonProperty("share_price")
+    @NotNull // 必须
+    private BigDecimal sharePrice;
+
+    /**
+     * 手工调整价,正数为加价,负数为减价
+     */
+    @JsonProperty("adjust")
+    @NotNull // 必须
+    private BigDecimal adjust;
+
+    /**
+     * 总折扣金额
+     */
+    @JsonProperty("discount")
+    @NotNull // 必须
+    private BigDecimal discount;
+
+    /**
+     * 分摊后合计应收=share_price * num , share_price 是根据share_amount反推的,因此share_price可能有精度损失
+     */
+    @JsonProperty("share_amount")
+    @NotNull // 必须
+    private BigDecimal shareAmount;
+
+    /**
+     * 分摊邮费
+     */
+    @JsonProperty("share_post")
+    @NotNull // 必须
+    private BigDecimal sharePost;
+
+    /**
+     * 已支付金额
+     */
+    @JsonProperty("paid")
+    @NotNull // 必须
+    private BigDecimal paid;
+
+    /**
+     * 货品名称
+     */
+    @JsonProperty("goods_name")
+    @NotNull // 必须
+    private String goodsName;
+
+    /**
+     * 分类名称
+     */
+    @JsonProperty("class_name")
+    @NotNull // 必须
+    private String className;
+
+    /**
+     * 自定义属性2
+     */
+    @JsonProperty("prop2")
+    @NotNull // 必须
+    private String prop2;
+
+    /**
+     * 分销商id
+     */
+    @JsonProperty("tc_order_id")
+    @NotNull // 必须
+    private String tcOrderId;
+
+    /**
+     * 主条码
+     */
+    @JsonProperty("barcode")
+    @NotNull // 必须
+    private String barcode;
+
+    /**
+     * 货品id
+     */
+    @JsonProperty("goods_id")
+    @NotNull // 必须
+    private Integer goodsId;
+
+    /**
+     * 货品编号,代表货品(spu)所有属性的唯一编号,用于系统货品区分
+     */
+    @JsonProperty("goods_no")
+    @NotNull // 必须
+    private String goodsNo;
+
+    /**
+     * 规格名
+     */
+    @JsonProperty("spec_name")
+    @NotNull // 必须
+    private String specName;
+
+    /**
+     * 商家编码,代表单品(sku)所有属性的唯一编码,用于系统单品区分
+     */
+    @JsonProperty("spec_no")
+    @NotNull // 必须
+    private String specNo;
+
+    /**
+     * 规格码
+     */
+    @JsonProperty("spec_code")
+    @NotNull // 必须
+    private String specCode;
+
+    /**
+     * 组合装编码,代表组合装商品所有属性的唯一编码,用于系统组合装商品的区分
+     */
+    @JsonProperty("suite_no")
+    @NotNull // 必须
+    private String suiteNo;
+
+    /**
+     * 如果是组合装拆分的,此为组合装名称
+     */
+    @JsonProperty("suite_name")
+    @NotNull // 必须
+    private String suiteName;
+
+    /**
+     * 组合装数量
+     */
+    @JsonProperty("suite_num")
+    @NotNull // 必须
+    private BigDecimal suiteNum;
+
+    /**
+     * 组合装分摊后总价
+     */
+    @JsonProperty("suite_amount")
+    @NotNull // 必须
+    private BigDecimal suiteAmount;
+
+    /**
+     * 组合装优惠
+     */
+    @JsonProperty("suite_discount")
+    @NotNull // 必须
+    private BigDecimal suiteDiscount;
+
+    /**
+     * share_amount备份值,退款恢复使用,!可回收 目前会存放分销订单发货回传的分销价
+     */
+    @JsonProperty("share_amount2")
+    @NotNull // 必须
+    private BigDecimal shareAmount2;
+
+    /**
+     * 是否打印组合装 0:组合装明细/1:组合装以及明细/2:组合装
+     */
+    @JsonProperty("is_print_suite")
+    @NotNull // 必须
+    private Integer isPrintSuite;
+
+    /**
+     * 是否允许0成本
+     */
+    @JsonProperty("is_zero_cost")
+    @NotNull // 必须
+    private Integer isZeroCost; // tinyint(1)
+
+    /**
+     * 库存保留情况 0未保留(取消的订单或完成)1无库存记录 2未付款 3已保留待审核 4待发货 5预订单库存
+     */
+    @JsonProperty("stock_reserved")
+    @NotNull // 必须
+    private Integer stockReserved;
+
+    /**
+     * 平台已发货
+     */
+    @JsonProperty("is_consigned")
+    @NotNull // 必须
+    private Integer isConsigned;
+
+    /**
+     * 线上订单,标记是否打款
+     */
+    @JsonProperty("is_received")
+    @NotNull // 必须
+    private Integer isReceived;
+
+    /**
+     * 是否主子订单,为发货算法使用
+     */
+    @JsonProperty("is_master")
+    @NotNull // 必须
+    private Integer isMaster; // tinyint(1)
+
+    /**
+     * 平台货品名称
+     */
+    @JsonProperty("api_goods_name")
+    @NotNull // 必须
+    private String apiGoodsName;
+
+    /**
+     * 平台规格名称
+     */
+    @JsonProperty("api_spec_name")
+    @NotNull // 必须
+    private String apiSpecName;
+
+    /**
+     * 预估单个货品重量(单位:kg)
+     */
+    @JsonProperty("weight")
+    @NotNull // 必须
+    private BigDecimal weight;
+
+    /**
+     * 佣金
+     */
+    @JsonProperty("commission")
+    @NotNull // 必须
+    private BigDecimal commission;
+
+    /**
+     * 货品类别 1销售商品 2原材料 3包装 4周转材料5虚拟商品 0其它
+     */
+    @JsonProperty("goods_type")
+    @NotNull // 必须
+    private Integer goodsType;
+
+    /**
+     * 大件类型 0非大件 1普通大件 2独立大件
+     */
+    @JsonProperty("large_type")
+    @NotNull // 必须
+    private Integer largeType; // tinyint(1)
+
+    /**
+     * 发票类别,0 不需要,1普通发票,2增值税发票
+     */
+    @JsonProperty("invoice_type")
+    @NotNull // 必须
+    private Integer invoiceType;
+
+    /**
+     * 发票内容
+     */
+    @JsonProperty("invoice_content")
+    @NotNull // 必须
+    private String invoiceContent;
+
+    /**
+     * 订单内部来源1手机,2聚划算,4服务子订单,8家装,16二次付款,32开具电子发票,128指定批次,2048当日达,4096次日达,8192预计时效,262144天猫直送/唯品仓中仓,524288‘3PL时效/jitx’,2097152区域零售,4194304预售单,8388608周期购,16777216 同城购(淘宝),268435456 物流升级,536870912 抖店抽奖订单
+     */
+    @JsonProperty("from_mask")
+    @NotNull // 必须
+    private Integer fromMask;
+
+    /**
+     * 类目id
+     */
+    @JsonProperty("cid")
+    @NotNull // 必须
+    private Integer cid;
+
+    /**
+     * 货品明细备注
+     */
+    @JsonProperty("remark")
+    @NotNull // 必须
+    private String remark;
+
+    /**
+     * 最后修改时间 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("modified")
+    @NotNull // 必须
+    private String modified; // 或者 LocalDateTime modified;
+
+    /**
+     * 创建时间 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("created")
+    @NotNull // 必须
+    private String created; // 或者 LocalDateTime created;
+
+    /**
+     * 税率(根据条件使用订单中或单品中税率)
+     */
+    @JsonProperty("tax_rate")
+    private BigDecimal taxRate; // 可选
+
+    /**
+     * 基本单位ID
+     */
+    @JsonProperty("base_unit_id")
+    private Integer baseUnitId; // 可选
+
+    /**
+     * 基本单位名称
+     */
+    @JsonProperty("unit_name")
+    private String unitName; // 可选
+
+    /**
+     * 交易流水单号 (请求参数src传为1时返回)
+     */
+    @JsonProperty("pay_id")
+    private String payId; // 可选
+
+    /**
+     * 子单付款状态 0(未付款),1(部分付款),2(已付款) (请求参数src传为1时返回)
+     */
+    @JsonProperty("pay_status")
+    private Integer payStatus; // 可选
+
+    /**
+     * 子单付款时间 时间格式:yyyy-MM-dd HH:mm:ss (请求参数src传为1时返回)
+     */
+    @JsonProperty("pay_time")
+    private String payTime; // 可选, 或者 LocalDateTime payTime;
+}

+ 256 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtGoodsListDTO.java

@@ -0,0 +1,256 @@
+package com.fs.erp.dto.wdt;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.fasterxml.jackson.annotation.JsonFormat; // 需要引入Jackson库
+
+/**
+ * ERP WDT 货品明细DTO,用于封装订单中的单个货品项信息。
+ *
+ * @author xdd
+ * @date 2025-02-27
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtGoodsListDTO {
+
+    /**
+     * 平台id
+     */
+    private Integer platformId;
+
+    /**
+     * 原始单号 (关联主订单)
+     */
+    private String tid;
+
+    /**
+     * 平台订单货品表主键, 子订单唯一标识
+     * 同一个sid下通过本接口新增订单的oid要保证唯一
+     */
+    private String oid;
+
+    /**
+     * 状态
+     * 10:未确认 20:待尾款 30:待发货 40:部分发货 50:已发货 60:已签收 70:已完成 80:已退款 90:已关闭
+     */
+    private Integer status;
+
+    /**
+     * 系统状态
+     * 10:待递交 15:部分递交 20:已递交 30:部分发货 40:已发货 50:部分结算 60:已完成 70:已取消
+     */
+    private Integer processStatus;
+
+    /**
+     * 退款状态
+     * 0:无退款 1:取消退款 2:已申请退款 3:等待退货 4:等待收货 5:退款成功
+     */
+    private Integer refundStatus;
+
+    /**
+     * 子订单类型
+     * 0:正常货品 1:虚拟货品 2:服务
+     */
+    private Integer orderType;
+
+    /**
+     * 平台货品ID
+     */
+    private String goodsId;
+
+    /**
+     * 平台规格ID
+     */
+    private String specId;
+
+    /**
+     * 平台货品编码
+     */
+    private String goodsNo;
+
+    /**
+     * 平台规格编码
+     */
+    private String specNo;
+
+    /**
+     * 平台货品名称
+     */
+    private String goodsName;
+
+    /**
+     * 平台规格名称
+     */
+    private String specName;
+
+    /**
+     * 数量
+     */
+    private BigDecimal num;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 调整金额
+     */
+    private BigDecimal adjustAmount;
+
+    /**
+     * 优惠金额
+     */
+    private BigDecimal discount;
+
+    /**
+     * 总价 (price * num + adjust_amount)
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 分摊优惠
+     */
+    private BigDecimal shareDiscount;
+
+    /**
+     * 分摊后总价 (total_amount - share_discount)
+     */
+    private BigDecimal shareAmount;
+
+    /**
+     * 分摊邮资
+     */
+    private BigDecimal sharePost;
+
+    /**
+     * 已付金额 (可能指该子订单对应的已付部分)
+     */
+    private BigDecimal paid;
+
+    /**
+     * 发票类别
+     * 0:不需要 1:普通发票 2:普通增值发票 3:专用增值发票
+     */
+    private Integer invoiceType;
+
+    /**
+     * 发票内容
+     */
+    private String invoiceContent;
+
+    /**
+     * 关联子订单 (例如捆绑销售的主商品oid)
+     */
+    private String bindOid;
+
+    /**
+     * 退款单编号
+     */
+    private String refundId;
+
+    /**
+     * 退款金额 (针对此子订单的退款)
+     */
+    private BigDecimal refundAmount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 物流单号 (代发场景)
+     */
+    private String daifaLogisticsNo;
+
+    /**
+     * 物流类型 (代发场景)
+     */
+    private Integer daifaLogisticsType; // smallint 用 Integer
+
+    /**
+     * 发货时间 (代发场景)
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date daifaConsignTime;
+
+    /**
+     * 订单完成时间 (代发场景)
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date daifaEndTime;
+
+    /**
+     * 修改时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date modified;
+
+    /**
+     * 创建时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date created;
+
+    /**
+     * 子单完成时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    /**
+     * 自动增量id
+     */
+    private Long recId;
+
+    /**
+     * 处理退款状态 (默认为'0')
+     * 1:待审核 2:已同意 3:已拒绝 4:待收货 5:已完成 6:已关闭
+     */
+    private Integer processRefundStatus;
+
+    /**
+     * 平台规格码 (默认为'')
+     */
+    private String specCode;
+
+    /**
+     * 佣金 (默认为'0.0000')
+     */
+    private BigDecimal commission;
+
+    /**
+     * 出库单号? (字段名stockout_no,描述是end_time,记录结束时间,这里按字段名推测,默认为'')
+     * 注意:描述与字段名似乎不符,按字段名 stockout_no 解释为出库单号
+     */
+    private String stockoutNo;
+
+    /**
+     * 物流单号 (发货后,默认为'')
+     */
+    private String logisticsNo;
+
+    /**
+     * 子单是否自动流转到wms (默认为'0')
+     * 0: 否, 1: 是
+     */
+    private Integer isAutoWms;
+
+    /**
+     * 类目id
+     */
+    private Integer cid;
+}

+ 394 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtTradeDTO.java

@@ -0,0 +1,394 @@
+package com.fs.erp.dto.wdt;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.fasterxml.jackson.annotation.JsonFormat; // 需要引入Jackson库
+
+/**
+ * ERP WDT 交易订单信息DTO,用于封装从API获取的订单详情数据。
+ * 包含订单的基本信息、支付信息、物流信息、买家信息、金额信息以及关联的货品和优惠明细。
+ *
+ * @author xdd
+ * @date 2025-02-27
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtTradeDTO {
+
+    /**
+     * 平台id 响应值为代表平台的ID数字
+     * @see <a href="这里应替换为实际的平台ID说明链接">平台ID说明</a>
+     */
+    private Integer platformId;
+
+    /**
+     * 店铺编号
+     */
+    private String shopNo;
+
+    /**
+     * 原始单号
+     */
+    private String tid;
+
+    /**
+     * 平台状态
+     * 10:未确认 20:待尾款 30:待发货 40:部分发货 50:已发货 60:已签收 70:已完成 80:已退款 90:已关闭(付款前取消)
+     */
+    private Integer tradeStatus;
+
+    /**
+     * 担保方式
+     * 1:担保交易 2:非担保交易 3:非担保在线交易
+     */
+    private Integer guaranteeMode;
+
+    /**
+     * 支付状态
+     * 0:未付款 1:部分付款 2:已付款
+     */
+    private Integer payStatus;
+
+    /**
+     * 发货条件
+     * 1:款到发货 2:货到付款 3:分期付款 4:挂账单
+     */
+    private Integer deliveryTerm;
+
+    /**
+     * 支付方式
+     * 1:在线转账 2:现金 3:银行转账 4:邮局汇款 5:预付款 6:刷卡 7:支付宝 8:微信支付
+     */
+    private Integer payMethod;
+
+    /**
+     * 退款状态
+     * 0:无退款 1:申请退款 2:部分退款 3:全部退款
+     */
+    private Integer refundStatus;
+
+    /**
+     * 系统状态
+     * 10:待递交 15:部分递交 20:已递交 30:部分发货 40:已发货 50:部分结算 60:已完成 70:已取消
+     */
+    private Integer processStatus;
+
+    /**
+     * 下单时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date tradeTime;
+
+    /**
+     * 支付时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date payTime;
+
+    /**
+     * 买家留言
+     */
+    private String buyerMessage;
+
+    /**
+     * 客服备注
+     */
+    private String remark;
+
+    /**
+     * 货款
+     */
+    private BigDecimal goodsAmount;
+
+    /**
+     * 邮费
+     */
+    private BigDecimal postAmount;
+
+    /**
+     * 其他费用
+     */
+    private BigDecimal otherAmount;
+
+    /**
+     * 优惠
+     */
+    private BigDecimal discount;
+
+    /**
+     * 已付金额
+     */
+    private BigDecimal paid;
+
+    /**
+     * 平台费用
+     */
+    private BigDecimal platformCost;
+
+    /**
+     * 已收金额
+     */
+    private BigDecimal received;
+
+    /**
+     * 应收金额
+     */
+    private BigDecimal receivable;
+
+    /**
+     * 款到发货金额
+     */
+    private BigDecimal dapAmount;
+
+    /**
+     * 货到付款金额
+     */
+    private BigDecimal codAmount;
+
+    /**
+     * 退款金额
+     */
+    private BigDecimal refundAmount;
+
+    /**
+     * 物流方式
+     * -1表示自由选择
+     */
+    private Integer logisticsType;
+
+    /**
+     * 发票类别
+     * 0:不需要 1:普通发票 2:普通增值发票 3:专用增值发票
+     */
+    private Integer invoiceType;
+
+    /**
+     * 发票抬头
+     */
+    private String invoiceTitle;
+
+    /**
+     * 发票内容
+     */
+    private String invoiceContent;
+
+    /**
+     * 结束时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    /**
+     * 分销方式
+     * 0:非分销订单 1:转供销 2:代销 3:经销
+     */
+    private Integer fenxiaoType;
+
+    /**
+     * 订单来源
+     * 1:API抓单 2:手工建单 3:excel导入 4:现款销售 5:外部推送
+     */
+    private Integer tradeFrom;
+
+    /**
+     * 修改时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date modified;
+
+    /**
+     * 创建时间
+     * 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date created;
+
+    /**
+     * 订单标记位 (按位表示不同状态)
+     * 1:使用智选物流 2:航空禁运 4:预订单自动转审核失败 8:预占用待发货库存 16:订单货品指定批次
+     * 32:自动流转仓库 64:部分发货 128:全部发货 256:已发过签收消息 512:大单锁定仓库 1024:人工转入预订单
+     * 2048:因配置先占用待发货库存 4096:顺丰前置发货 8192:订单批量合并后标记 16384:达到原始单最大合并限制
+     * 32768:物流升级原始单指定物流订单 65536:BIC订单标记 131072:标记货品指定物流
+     * 3554432:前N有礼订单 67108864:预售下沉
+     */
+    private String tradeMask; // 使用String类型存储可能包含多个标记位的组合值
+
+    /**
+     * 买家ID (返回为空)
+     */
+    private String openid;
+
+    /**
+     * 币种
+     */
+    private String currency;
+
+    /**
+     * 积分
+     */
+    private Integer score;
+
+    /**
+     * 交货时间 (默认为'')
+     * 如:周一至周五,预计送货时间,最晚揽收时间 (周期购使用)
+     */
+    private String toDeliverTime;
+
+    /**
+     * 分期付款金额 (默认为'0.0000')
+     */
+    private BigDecimal piAmount;
+
+    /**
+     * 自动增量id
+     */
+    private Long recId;
+
+    /**
+     * 店铺id (默认为'0')
+     */
+    private Integer shopId;
+
+    /**
+     * 子订单个数
+     */
+    private Integer orderCount;
+
+    /**
+     * 货品总数量,用于递交时检验
+     */
+    private BigDecimal goodsCount;
+
+    /**
+     * 客户网名
+     */
+    private String buyerNick;
+
+    /**
+     * 买家姓名(仅返回自有平台、线下平台订单)
+     */
+    private String buyerName;
+
+    /**
+     * 买家区域 (默认为'')
+     */
+    private String buyerArea;
+
+    /**
+     * 客户编号
+     */
+    private String customerNo;
+
+    /**
+     * 收件人姓名(仅返回自有平台、线下平台订单)
+     */
+    private String receiverName;
+
+    /**
+     * 收件人国家 (默认为'0')
+     * @see <a href="这里应替换为实际的国家代码说明链接">国家代码说明</a>
+     */
+    private Integer receiverCountry;
+
+    /**
+     * 收件人省份ID,按照城市代码表中对应城市代码进行返回
+     * @see <a href="这里应替换为实际的城市代码表链接">城市代码表</a>
+     */
+    private Integer receiverProvince;
+
+    /**
+     * 收件人城市ID,按照城市代码表中对应城市代码进行返回
+     * @see <a href="这里应替换为实际的城市代码表链接">城市代码表</a>
+     */
+    private Integer receiverCity;
+
+    /**
+     * 收件人地区ID,按照城市代码表中对应城市代码进行返回
+     * @see <a href="这里应替换为实际的城市代码表链接">城市代码表</a>
+     */
+    private Integer receiverDistrict;
+
+    /**
+     * 收件人手机(仅返回自有平台、线下平台订单)
+     */
+    private String receiverMobile;
+
+    /**
+     * 收件人电话(仅返回自有平台、线下平台订单)
+     */
+    private String receiverTelno;
+
+    /**
+     * 收件人省份名称(仅返回自有平台、线下平台订单)
+     */
+    private String receiverProvinceName;
+
+    /**
+     * 收件人城市名称(仅返回自有平台、线下平台订单)
+     */
+    private String receiverCityName;
+
+    /**
+     * 收件人区县名称(仅返回自有平台、线下平台订单)
+     */
+    private String receiverDistrictName;
+
+    /**
+     * 收件人省市区地址(仅返回自有平台、线下平台订单)
+     */
+    private String receiverArea;
+
+    /**
+     * 收件人详细地址(仅返回自有平台、线下平台订单)
+     */
+    private String receiverAddress;
+
+    /**
+     * 标旗
+     */
+    private String remarkFlag;
+
+    /**
+     * 平台支付订单id,如支付宝的订单号
+     */
+    private String payId;
+
+    /**
+     * 应对消费者开票金额
+     */
+    private BigDecimal invoiceConsumerAmount;
+
+    /**
+     * 应对平台开票金额
+     */
+    private BigDecimal invoicePlatformAmount;
+
+    /**
+     * 主单是否自动流转到wms (默认为'0')
+     * 0: 否, 1: 是
+     */
+    private Integer isAutoWms;
+
+    /**
+     * 货品明细列表
+     * 业务数据的二级节点
+     */
+    private List<ErpWdtGoodsListDTO> goodsList;
+
+    /**
+     * 优惠明细列表
+     * 业务数据的二级节点
+     */
+    private List<ErpWdtDiscountListDTO> discountList;
+}

+ 910 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtTradeInfo.java

@@ -0,0 +1,910 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+// import java.time.LocalDateTime; // 如果需要反序列化为日期时间对象
+
+/**
+ * ERP 旺店通 订单信息 DTO.
+ * 代表单个订单的详细信息。
+ *
+ * @author xdd
+ * @version 1.0
+ * @since 2025-02-27
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtTradeInfo {
+
+    /**
+     * erp订单表的主键
+     */
+    @JsonProperty("trade_id")
+    @NotNull // 必须
+    private Integer tradeId;
+
+    /**
+     * 订单编号,系统订单编号,默认单号为JY开头,ERP内支持自定义订单编号生成规则(设置路径:设置——编码设置)
+     */
+    @JsonProperty("trade_no")
+    @NotNull // 必须
+    private String tradeNo;
+
+    /**
+     * 平台ID,响应值为代表平台的ID数字,ID对应的平台名称单击这里
+     */
+    @JsonProperty("platform_id")
+    @NotNull // 必须
+    private Integer platformId;
+
+    /**
+     * 店铺平台ID,响应值为代表平台的ID数字,ID对应的平台名称单击这里
+     */
+    @JsonProperty("shop_platform_id")
+    @NotNull // 必须
+    private Integer shopPlatformId;
+
+    /**
+     * 店铺编号,代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置)
+     */
+    @JsonProperty("shop_no")
+    @NotNull // 必须
+    private String shopNo;
+
+    /**
+     * 店铺名称
+     */
+    @JsonProperty("shop_name")
+    @NotNull // 必须
+    private String shopName;
+
+    /**
+     * 店铺备注
+     */
+    @JsonProperty("shop_remark")
+    @NotNull // 必须
+    private String shopRemark;
+
+    /**
+     * 仓库类型(0不限 1普通仓库 2自动流传外部 3京东仓储 4科捷 5百世物流 6SKU360 7通天晓 8中联网仓 9顺丰仓储 10网仓2号 11奇门仓储 12旺店通仓储 13心怡仓储 14力威仓储 15京东沧海 16云集仓储 17POS 18虎符 20外部链路型 22抖店云仓 126分销委外仓 127其它)
+     */
+    @JsonProperty("warehouse_type")
+    @NotNull // 必须
+    private Integer warehouseType;
+
+    /**
+     * 仓库编号,代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置)(根据编号可查询仓库名称)
+     */
+    @JsonProperty("warehouse_no")
+    @NotNull // 必须
+    private String warehouseNo;
+
+    /**
+     * 原始单号,商城或电商平台的订单编号,合并订单的多个订单编号有逗号隔开
+     */
+    @JsonProperty("src_tids")
+    @NotNull // 必须
+    private String srcTids;
+
+    /**
+     * 订单状态 5已取消 10待付款 12待尾款 13待选仓 15等未付16延时审核 19预订单前处理 20前处理(赠品,合并,拆分)21委外前处理22抢单前处理 25预订单 27待抢单 30待客审 35待财审 40待递交仓库 45递交仓库中 50已递交仓库 53未确认 55已确认(已审核)90发货中  95已发货 105部分打款 110已完成 113异常发货
+     */
+    @JsonProperty("trade_status")
+    @NotNull // 必须
+    private Integer tradeStatus;
+
+    /**
+     * 发货状态,出库状态:0表示无出库状态,1验货 2称重 4出库 8物流同步16分拣 32档口  64拣货 128供销回传成功  256供销回传失败(注意:如果是3,则表示完成了验货和称重“1+2”,如果是15,则表示四个过程都完成了“1+2+4+8”,其他数字以此类推)
+     */
+    @JsonProperty("consign_status")
+    @NotNull // 必须
+    private Integer consignStatus;
+
+    /**
+     * 订单类型 1网店销售 2线下零售 3售后换货 4批发业务 5保修换新 6保修完成 7订单补发 8供销补发   101自定义类型1 102自定义类型2 103自定义类型3 104自定义类型4 105自定义类型5 106自定义类型6 107自定义属性7 108自定义属性8
+     */
+    @JsonProperty("trade_type")
+    @NotNull // 必须
+    private Integer tradeType;
+
+    /**
+     * 发货条件 1款到发货 2货到付款(包含部分货到付款),4挂账
+     */
+    @JsonProperty("delivery_term")
+    @NotNull // 必须
+    private Integer deliveryTerm;
+
+    /**
+     * 冻结原因
+     */
+    @JsonProperty("freeze_reason")
+    @NotNull // 必须
+    private Integer freezeReason;
+
+    /**
+     * 退款状态 0无退款 1申请退款 2部分退款 3全部退款 4未付款关闭或手工关闭
+     */
+    @JsonProperty("refund_status")
+    @NotNull // 必须
+    private Integer refundStatus;
+
+    /**
+     * 分销类别 0非分销订单 1转供销 2代销 3经销
+     */
+    @JsonProperty("fenxiao_type")
+    @NotNull // 必须
+    private Integer fenxiaoType;
+
+    /**
+     * 分销商信息,不同平台单据分销商会存不同格式情况,具体以返回信息为准
+     */
+    @JsonProperty("fenxiao_nick")
+    @NotNull // 必须
+    private String fenxiaoNick;
+
+    /**
+     * 下单时间 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("trade_time")
+    @NotNull // 必须
+    private String tradeTime; // 或者 LocalDateTime tradeTime; 并配置Jackson
+
+    /**
+     * 付款时间 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("pay_time")
+    @NotNull // 必须
+    private String payTime; // 或者 LocalDateTime payTime; 并配置Jackson
+
+    /**
+     * 客户名称
+     */
+    @JsonProperty("customer_name")
+    @NotNull // 必须
+    private String customerName;
+
+    /**
+     * 客户编码
+     */
+    @JsonProperty("customer_no")
+    @NotNull // 必须
+    private String customerNo;
+
+    /**
+     * 买家付款账号
+     */
+    @JsonProperty("pay_account")
+    @NotNull // 必须
+    private String payAccount;
+
+    /**
+     * 客户网名
+     */
+    @JsonProperty("buyer_nick")
+    @NotNull // 必须
+    private String buyerNick;
+
+    /**
+     * 收件人
+     */
+    @JsonProperty("receiver_name")
+    @NotNull // 必须
+    private String receiverName;
+
+    /**
+     * 收件人的省份,按照城市代码表中对应城市代码进行返回
+     */
+    @JsonProperty("receiver_province")
+    @NotNull // 必须
+    private Integer receiverProvince;
+
+    /**
+     * 收件人的城市,按照城市代码表中对应城市代码进行返回
+     */
+    @JsonProperty("receiver_city")
+    @NotNull // 必须
+    private Integer receiverCity;
+
+    /**
+     * 收件人的地区,按照城市代码表中对应城市代码进行返回
+     */
+    @JsonProperty("receiver_district")
+    @NotNull // 必须
+    private Integer receiverDistrict;
+
+    /**
+     * 地址
+     */
+    @JsonProperty("receiver_address")
+    @NotNull // 必须
+    private String receiverAddress;
+
+    /**
+     * 手机
+     */
+    @JsonProperty("receiver_mobile")
+    @NotNull // 必须
+    private String receiverMobile;
+
+    /**
+     * 电话
+     */
+    @JsonProperty("receiver_telno")
+    @NotNull // 必须
+    private String receiverTelno;
+
+    /**
+     * 收件人邮编
+     */
+    @JsonProperty("receiver_zip")
+    @NotNull // 必须
+    private String receiverZip;
+
+    /**
+     * 省市县空格分隔
+     */
+    @JsonProperty("receiver_area")
+    @NotNull // 必须
+    private String receiverArea;
+
+    /**
+     * 收件人区域
+     */
+    @JsonProperty("receiver_ring")
+    @NotNull // 必须
+    private String receiverRing;
+
+    /**
+     * 大头笔
+     */
+    @JsonProperty("receiver_dtb")
+    @NotNull // 必须
+    private String receiverDtb;
+
+    /**
+     * 派送时间 如周一至周五,上午
+     */
+    @JsonProperty("to_deliver_time")
+    @NotNull // 必须
+    private String toDeliverTime;
+
+    /**
+     * 异常订单(bit位), 2地址变化 8仓库变化 16客服备注变化 128拦截赠品 64退款 2048买家留言发生变更
+     */
+    @JsonProperty("bad_reason")
+    @NotNull // 必须
+    private Integer badReason;
+
+    /**
+     * 物流公司ID(系统自增主键id)
+     */
+    @JsonProperty("logistics_id")
+    @NotNull // 必须
+    private Integer logisticsId;
+
+    /**
+     * 物流公司名称
+     */
+    @JsonProperty("logistics_name")
+    @NotNull // 必须
+    private String logisticsName;
+
+    /**
+     * 物流公司编号,代表物流所有属性的唯一编码,用于物流区分,ERP内支持自定义(ERP物流界面设置)
+     */
+    @JsonProperty("logistics_code")
+    @NotNull // 必须
+    private String logisticsCode;
+
+    /**
+     * 物流方式,响应值为代表物流方式的数字,数字对应的物流方式名称单击这里
+     */
+    @JsonProperty("logistics_type")
+    @NotNull // 必须
+    private Integer logisticsType;
+
+    /**
+     * 物流单号
+     */
+    @JsonProperty("logistics_no")
+    @NotNull // 必须
+    private String logisticsNo;
+
+    /**
+     * 店铺id,店铺列表主键
+     */
+    @JsonProperty("shop_id")
+    @NotNull // 必须
+    private Integer shopId;
+
+    /**
+     * 仓库ID
+     */
+    @JsonProperty("warehouse_id")
+    @NotNull // 必须
+    private Integer warehouseId;
+
+    /**
+     * 审核步骤,用于多级审核,特殊值:-100根据预售策略自动转入特殊单,-101人工转入
+     */
+    @JsonProperty("check_step")
+    @NotNull // 必须
+    private Integer checkStep;
+
+    /**
+     * 未合并标记,1有未付款订单,2有同名未合并订单
+     */
+    @JsonProperty("unmerge_mask")
+    @NotNull // 必须
+    private Integer unmergeMask;
+
+    /**
+     * 延迟处理,延时此进一步处理,等未付或延时审核 激活时间 秒级时间戳格式返回
+     */
+    @JsonProperty("delay_to_time")
+    @NotNull // 必须
+    private String delayToTime; // 通常是 Long 类型的时间戳,但描述是 varchar,保持 String
+
+    /**
+     * 客户类型 0普通客户1经销商
+     */
+    @JsonProperty("customer_type")
+    @NotNull // 必须
+    private Integer customerType;
+
+    /**
+     * 买家ID
+     */
+    @JsonProperty("customer_id")
+    @NotNull // 必须
+    private String customerId; // 描述是 varchar(11)
+
+    /**
+     * 收件人国家
+     */
+    @JsonProperty("receiver_country")
+    @NotNull // 必须
+    private Integer receiverCountry;
+
+    /**
+     * 预配送时间,配送中心,未使用
+     */
+    @JsonProperty("pre_charge_time")
+    @NotNull // 必须
+    private String preChargeTime;
+
+    /**
+     * 是否京配(为1时,只能发京邦达)
+     */
+    @JsonProperty("is_prev_notify")
+    @NotNull // 必须
+    private Integer isPrevNotify;
+
+    /**
+     * 便签条数
+     */
+    @JsonProperty("note_count")
+    @NotNull // 必须
+    private Integer noteCount;
+
+    /**
+     * 买家留言条数
+     */
+    @JsonProperty("buyer_message_count")
+    @NotNull // 必须
+    private Integer buyerMessageCount;
+
+    /**
+     * 客服备注条数
+     */
+    @JsonProperty("cs_remark_count")
+    @NotNull // 必须
+    private Integer csRemarkCount;
+
+    /**
+     * 客服备注变化 0,未变化1平台变化,2手工修改,4发票手工修改
+     */
+    @JsonProperty("cs_remark_change_count")
+    @NotNull // 必须
+    private Integer csRemarkChangeCount;
+
+    /**
+     * 优惠变化金额,更新货品和数量
+     */
+    @JsonProperty("discount_change")
+    @NotNull // 必须
+    private BigDecimal discountChange;
+
+    /**
+     * 客户使用的预存款
+     */
+    @JsonProperty("trade_prepay")
+    @NotNull // 必须
+    private BigDecimal tradePrepay;
+
+    /**
+     * 分期付款金额
+     */
+    @JsonProperty("pi_amount")
+    @NotNull // 必须
+    private BigDecimal piAmount;
+
+    /**
+     * 其它成本(目前用作记录货到付款单据的物流佣金)
+     */
+    @JsonProperty("other_cost")
+    @NotNull // 必须
+    private BigDecimal otherCost;
+
+    /**
+     * 体积(单位:cm³)
+     */
+    @JsonProperty("volume")
+    @NotNull // 必须
+    private BigDecimal volume;
+
+    /**
+     * 销售积分,未使用
+     */
+    @JsonProperty("sales_score")
+    @NotNull // 必须
+    private String salesScore; // varchar(11)
+
+    /**
+     * 背景色标记id
+     */
+    @JsonProperty("flag_id")
+    @NotNull // 必须
+    private Integer flagId;
+
+    /**
+     * 不可合并拆分
+     */
+    @JsonProperty("is_sealed")
+    @NotNull // 必须
+    private Integer isSealed; // tinyint(1)
+
+    /**
+     * 赠品标记1已处理过赠品,但没有匹配任何策略2自动赠送4手工赠送6即有自动也有手工
+     */
+    @JsonProperty("gift_mask")
+    @NotNull // 必须
+    private Integer giftMask;
+
+    /**
+     * 拆分订单,原单ID,用于避免自动合并,大件拆分为(原订单的id值),自动拆分为负值(原订单的-id值)
+     */
+    @JsonProperty("split_from_trade_id")
+    @NotNull // 必须
+    private String splitFromTradeId; // varchar(11)
+
+    /**
+     * 物流单模板ID,未使用
+     */
+    @JsonProperty("logistics_template_id")
+    @NotNull // 必须
+    private String logisticsTemplateId; // varchar(11)
+
+    /**
+     * 发货单模板id,未使用
+     */
+    @JsonProperty("sendbill_template_id")
+    @NotNull // 必须
+    private String sendbillTemplateId; // varchar(11)
+
+    /**
+     * 驳回原因
+     */
+    @JsonProperty("revert_reason")
+    @NotNull // 必须
+    private Integer revertReason;
+
+    /**
+     * 取消原因
+     */
+    @JsonProperty("cancel_reason")
+    @NotNull // 必须
+    private Integer cancelReason;
+
+    /**
+     * 催未付款订单消息发送标记
+     */
+    @JsonProperty("is_unpayment_sms")
+    @NotNull // 必须
+    private Integer isUnpaymentSms; // tinyint(1)
+
+    /**
+     * 包装id
+     */
+    @JsonProperty("package_id")
+    @NotNull // 必须
+    private String packageId; // varchar(11)
+
+    /**
+     * 订单标记位 1使用智选物流 2 航空禁运 4 预订单自动转审核失败 8 预占用待发货库存 16 订单货品指定批次 32 自动流转仓库 64 部分发货 128 全部发货 256 已发过签收消息 512 大单锁定仓库 1024 人工转入预订单 2048因配置先占用待发货库存 4096 顺丰前置发货 8192订单批量合并后标记 16384 达到原始单最大合并限制 32768 物流升级原始单指定物流订单 65536 BIC订单标记 131072 标记货品指定物流 3554432前N有礼订单 67108864预售下沉
+     */
+    @JsonProperty("trade_mask")
+    @NotNull // 必须
+    private String tradeMask; // varchar(11),虽然是位标记,但类型是varchar
+
+    /**
+     * 保留
+     */
+    @JsonProperty("reserve")
+    @NotNull // 必须
+    private String reserve;
+
+    /**
+     * 大件类型,包含大件类型,1普通套件2独立套件3分组单发,未使用-1非单发件 取子单中的最大值
+     */
+    @JsonProperty("large_type")
+    @NotNull // 必须
+    private Integer largeType;
+
+    /**
+     * 买家留言
+     */
+    @JsonProperty("buyer_message")
+    @NotNull // 必须
+    private String buyerMessage;
+
+    /**
+     * 客服备注
+     */
+    @JsonProperty("cs_remark")
+    @NotNull // 必须
+    private String csRemark;
+
+    /**
+     * 标旗 0至5对应的标旗颜色依次为灰(无标旗)、红、黄、绿、蓝、紫
+     */
+    @JsonProperty("remark_flag")
+    @NotNull // 必须
+    private String remarkFlag;
+
+    /**
+     * 打印备注
+     */
+    @JsonProperty("print_remark")
+    @NotNull // 必须
+    private String printRemark;
+
+    /**
+     * 货品种类数
+     */
+    @JsonProperty("goods_type_count")
+    @NotNull // 必须
+    private Integer goodsTypeCount;
+
+    /**
+     * 货品总数
+     */
+    @JsonProperty("goods_count")
+    @NotNull // 必须
+    private BigDecimal goodsCount;
+
+    /**
+     * 货品总额(未扣除优惠),sum(share_amount+discount)所得
+     */
+    @JsonProperty("goods_amount")
+    @NotNull // 必须
+    private BigDecimal goodsAmount;
+
+    /**
+     * 邮费
+     */
+    @JsonProperty("post_amount")
+    @NotNull // 必须
+    private BigDecimal postAmount;
+
+    /**
+     * 其它费用,其它从买家的收费(非订单支付金额以及服务费),从原始订单列表继承
+     */
+    @JsonProperty("other_amount")
+    @NotNull // 必须
+    private BigDecimal otherAmount;
+
+    /**
+     * 订单优惠,系统子订单“优惠”求合所得
+     */
+    @JsonProperty("discount")
+    @NotNull // 必须
+    private BigDecimal discount;
+
+    /**
+     * 应收金额,系统订单的(“货品总额”+“邮资”-“折扣”)所得
+     */
+    @JsonProperty("receivable")
+    @NotNull // 必须
+    private BigDecimal receivable;
+
+    /**
+     * 款到发货金额,paid>=dap_amount才可发货
+     */
+    @JsonProperty("dap_amount")
+    @NotNull // 必须
+    private BigDecimal dapAmount;
+
+    /**
+     * COD金额,货到付款订单金额,系统子订单的(“分摊后总价”+“分摊邮费”-“已付”)再求和
+     */
+    @JsonProperty("cod_amount")
+    @NotNull // 必须
+    private BigDecimal codAmount;
+
+    /**
+     * 买家COD费用,货到付款非订单金额,从原始订单继承
+     */
+    @JsonProperty("ext_cod_fee")
+    @NotNull // 必须
+    private BigDecimal extCodFee;
+
+    /**
+     * 货款预估成本
+     */
+    @JsonProperty("goods_cost")
+    @NotNull // 必须
+    private BigDecimal goodsCost;
+
+    /**
+     * 预估邮费成本
+     */
+    @JsonProperty("post_cost")
+    @NotNull // 必须
+    private BigDecimal postCost;
+
+    /**
+     * 已付金额,系统子订单“已付”求合所得
+     */
+    @JsonProperty("paid")
+    @NotNull // 必须
+    private BigDecimal paid;
+
+    /**
+     * 预估重量(单位:kg)
+     */
+    @JsonProperty("weight")
+    @NotNull // 必须
+    private BigDecimal weight;
+
+    /**
+     * 预估毛利
+     */
+    @JsonProperty("profit")
+    @NotNull // 必须
+    private BigDecimal profit;
+
+    /**
+     * 税额
+     */
+    @JsonProperty("tax")
+    @NotNull // 必须
+    private BigDecimal tax;
+
+    /**
+     * 税率
+     */
+    @JsonProperty("tax_rate")
+    @NotNull // 必须
+    private BigDecimal taxRate;
+
+    /**
+     * 佣金
+     */
+    @JsonProperty("commission")
+    @NotNull // 必须
+    private BigDecimal commission;
+
+    /**
+     * 发票类别 0 不需要,1普通发票,2增值普通税发票,3增值专用税发票
+     */
+    @JsonProperty("invoice_type")
+    @NotNull // 必须
+    private Integer invoiceType;
+
+    /**
+     * 发票抬头
+     */
+    @JsonProperty("invoice_title")
+    @NotNull // 必须
+    private String invoiceTitle;
+
+    /**
+     * 发票内容
+     */
+    @JsonProperty("invoice_content")
+    @NotNull // 必须
+    private String invoiceContent;
+
+    /**
+     * 业务员ID
+     */
+    @JsonProperty("salesman_id")
+    @NotNull // 必须
+    private Integer salesmanId;
+
+    /**
+     * 审核员工ID
+     */
+    @JsonProperty("checker_id")
+    @NotNull // 必须
+    private Integer checkerId;
+
+    /**
+     * 业务员姓名
+     */
+    @JsonProperty("fullname")
+    @NotNull // 必须
+    private String fullname;
+
+    /**
+     * 审核员工姓名
+     */
+    @JsonProperty("checker_name")
+    @NotNull // 必须
+    private String checkerName;
+
+    /**
+     * 财审操作员ID
+     */
+    @JsonProperty("fchecker_id")
+    @NotNull // 必须
+    private Integer fcheckerId;
+
+    /**
+     * 签出员工id
+     */
+    @JsonProperty("checkouter_id")
+    @NotNull // 必须
+    private Integer checkouterId;
+
+    /**
+     * 出库单号,内部或外部仓库的订单号
+     */
+    @JsonProperty("stockout_no")
+    @NotNull // 必须
+    private String stockoutNo;
+
+    /**
+     * 背景色标记名称
+     */
+    @JsonProperty("flag_name")
+    @NotNull // 必须
+    private String flagName;
+
+    /**
+     * 订单来源 1API抓单,2手工建单 3excel导入 4现款销售
+     */
+    @JsonProperty("trade_from")
+    @NotNull // 必须
+    private Integer tradeFrom;
+
+    /**
+     * 货品商家编码
+     */
+    @JsonProperty("single_spec_no")
+    @NotNull // 必须
+    private String singleSpecNo;
+
+    /**
+     * 原始货品数量
+     */
+    @JsonProperty("raw_goods_count")
+    @NotNull // 必须
+    private BigDecimal rawGoodsCount;
+
+    /**
+     * 原始货品种类数
+     */
+    @JsonProperty("raw_goods_type_count")
+    @NotNull // 必须
+    private Integer rawGoodsTypeCount;
+
+    /**
+     * 币种
+     */
+    @JsonProperty("currency")
+    @NotNull // 必须
+    private String currency;
+
+    /**
+     * 已拆分包裹数
+     */
+    @JsonProperty("split_package_num")
+    @NotNull // 必须
+    private Integer splitPackageNum;
+
+    /**
+     * 发票ID,0表示未开发票,>0表示已开发票
+     */
+    @JsonProperty("invoice_id")
+    @NotNull // 必须
+    private Integer invoiceId;
+
+    /**
+     * 订单每修改一次,版本号做一次变更
+     */
+    @JsonProperty("version_id")
+    @NotNull // 必须
+    private Integer versionId;
+
+    /**
+     * 最后修改时间 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("modified")
+    @NotNull // 必须
+    private String modified; // 或者 LocalDateTime modified;
+
+    /**
+     * 系统单生成时间 时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("created")
+    @NotNull // 必须
+    private String created; // 或者 LocalDateTime created;
+
+    /**
+     * 证件类别
+     */
+    @JsonProperty("id_card_type")
+    @NotNull // 必须
+    private Integer idCardType;
+
+    /**
+     * 证件号码,仅返回自有平台、线下平台订单
+     */
+    @JsonProperty("id_card")
+    @NotNull // 必须
+    private String idCard;
+
+    /**
+     * 财审人名称
+     */
+    @JsonProperty("fchecker_name")
+    @NotNull // 必须
+    private String fcheckerName;
+
+    /**
+     * 签出人名称
+     */
+    @JsonProperty("checkouter_name")
+    @NotNull // 必须
+    private String checkouterName;
+
+    /**
+     * 冻结原因名称
+     */
+    @JsonProperty("freeze_reason_info")
+    @NotNull // 必须
+    private String freezeReasonInfo;
+
+    /**
+     * 分销原始单号
+     */
+    @JsonProperty("fenxiao_tid")
+    @NotNull // 必须
+    private String fenxiaoTid;
+
+    /**
+     * 订单标签/异常id,具体标签/异常名称查询,需使用查询标签/异常名称接口
+     */
+    @JsonProperty("tags")
+    @NotNull // 必须
+    private String tags;
+
+    /**
+     * 货品列表节点,响应参数的2级数据节点,包含系统订单货品明细所有属性信息的数据节点
+     */
+    @JsonProperty("goods_list")
+    @NotNull // 必须
+    private List<ErpWdtGoodsInfo> goodsList;
+
+}

+ 128 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtTradeQueryRequest.java

@@ -0,0 +1,128 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Max; // 假设使用 JSR-303/380 验证
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+/**
+ * ERP 旺店通 订单查询请求 DTO.
+ * 用于封装调用旺店通ERP查询订单接口时的业务请求参数。
+ *
+ * @author xdd
+ * @version 1.0
+ * @since 2025-02-27
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtTradeQueryRequest {
+
+    /**
+     * 订单状态 如果不传该字段则查询所有订单
+     * (传该字段:5已取消 10待付款 12待尾款 13待选仓 15等未付16延时审核 19预订单前处理 20前处理(赠品,合并,拆分)21委外前处理22抢单前处理 25预订单 27待抢单 30待客审 35待财审 40待递交仓库 45递交仓库中 50已递交仓库 53未确认 55已确认(已审核) 95已发货 105部分打款 110已完成 113异常发货)
+     */
+    @JsonProperty("status")
+    private Integer status;
+
+    /**
+     * 开始时间,按最后修改时间增量获取数据, start_time作为开始时间,时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("start_time")
+    @NotNull // 必须
+    private String startTime;
+
+    /**
+     * 结束时间,按最后修改时间增量获取数据, end_time作为结束时间,时间格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("end_time")
+    @NotNull // 必须
+    private String endTime;
+
+    /**
+     * 分页大小,每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40
+     */
+    @JsonProperty("page_size")
+    @Min(value = 1, message = "分页大小最小为1")
+    @Max(value = 100, message = "分页大小最大为100")
+    private Integer pageSize;
+
+    /**
+     * 页号,不传值默认从0页开始
+     */
+    @JsonProperty("page_no")
+    @Min(value = 0, message = "页号最小为0")
+    private Integer pageNo;
+
+    /**
+     * 原始单号,如果使用原始单号,其余参数不起效。其余参数可以不传
+     */
+    @JsonProperty("src_tid")
+    @Size(max = 40, message = "原始单号长度不能超过40")
+    private String srcTid;
+
+    /**
+     * 订单编号,系统订单编号,默认单号为JY开头,ERP内支持自定义(设置路径:设置——编码设置)如果使用订单编号,其余参数不起效,其余参数可以不传
+     */
+    @JsonProperty("trade_no")
+    @Size(max = 40, message = "订单编号长度不能超过40")
+    private String tradeNo;
+
+    /**
+     * 店铺编号,代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息
+     */
+    @JsonProperty("shop_no")
+    @Size(max = 40, message = "店铺编号长度不能超过40")
+    private String shopNo;
+
+    /**
+     * 仓库编号,代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编码)
+     */
+    @JsonProperty("warehouse_no")
+    @Size(max = 40, message = "仓库编号长度不能超过40")
+    private String warehouseNo;
+
+    /**
+     * 使用税率 0 使用订单中的税率 1 使用单品中的税率(默认0)
+     */
+    @JsonProperty("goodstax")
+    private Integer goodsTax; // 注意:字段名改为 goodsTax 以符合 Java 命名规范
+
+    /**
+     * 物流单号限制 0 没有任何限制(默认值) 1 物流单号不为空才返回 2 只返回物流单号为空的
+     */
+    @JsonProperty("has_logistics_no")
+    private Integer hasLogisticsNo;
+
+    /**
+     * 是否模糊查询 0精确 1模糊  默认为0 (仅在原始单号src_tid查询时生效)
+     */
+    @JsonProperty("is_fuzzy")
+    private Integer isFuzzy;
+
+    /**
+     * 是否返回交易流水号、付款状态、付款时间 1 (返回 ),0 (不返回)(不传默认值0)
+     */
+    @JsonProperty("src")
+    private Integer srcFlag; // 避免与 srcTid 混淆,改名为 srcFlag
+
+    /**
+     * 物流单号,如果使用物流单号,其余参数不起效。其余参数可以不传
+     */
+    @JsonProperty("logistics_no")
+    @Size(max = 40, message = "物流单号长度不能超过40")
+    private String logisticsNo;
+
+    /**
+     * 店铺编号(批量),批量指定店铺获取(多个店铺编号之间用英文逗号隔开,最多指定20个店铺)
+     */
+    @JsonProperty("shop_nos")
+    private String shopNos;
+}

+ 52 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtTradeQueryResponse.java

@@ -0,0 +1,52 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * ERP 旺店通 订单查询响应 DTO.
+ * 包含查询结果的元数据以及订单列表信息。
+ *
+ * @author xdd
+ * @version 1.0
+ * @since 2025-02-27
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtTradeQueryResponse {
+
+    /**
+     * 错误码,状态码:0表示成功,其他表示失败
+     */
+    @JsonProperty("code")
+    @NotNull // 必须
+    private Integer code;
+
+    /**
+     * 错误描述
+     */
+    @JsonProperty("message")
+    @NotNull // 必须
+    private String message;
+
+    /**
+     * 数据条数,只有,page_no = 0 时才返回的符合条件的数据总条数,用来分页
+     */
+    @JsonProperty("total_count")
+    private Integer totalCount;
+
+    /**
+     * 订单列表节点,响应参数的1级数据节点,包含当前页的订单及其明细的数据节点
+     */
+    @JsonProperty("trade_list")
+    private List<ErpWdtTradeInfo> tradeList;
+}
+

+ 31 - 11
fs-service-system/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java

@@ -4,17 +4,16 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.PropertyNamingStrategy;
+import com.alibaba.fastjson.parser.ParserConfig;
 import com.alibaba.fastjson.serializer.SerializeConfig;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fs.erp.converter.ErpWdtToErpOrderMapper;
 import com.fs.erp.domain.ErpOrder;
 import com.fs.erp.domain.ErpRefundOrder;
 import com.fs.erp.dto.*;
 import com.fs.erp.dto.sdk.wangdian.api.WdtClient;
 import com.fs.erp.dto.sdk.wangdian.enums.*;
-import com.fs.erp.dto.wdt.ErpWdtApiResponse;
-import com.fs.erp.dto.wdt.ErpWdtBusinessRequestParams;
-import com.fs.erp.dto.wdt.ErpWdtOrder;
-import com.fs.erp.dto.wdt.ErpWdtTrade;
+import com.fs.erp.dto.wdt.*;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.domain.FsStoreProduct;
@@ -150,7 +149,9 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
             ErpWdtApiResponse erpWdtApiResponse = JSON.parseObject(response, ErpWdtApiResponse.class);
             if(ObjectUtil.equal(0,erpWdtApiResponse.getCode())){
                 log.info("订单推送成功: {}", response);
-                return new ErpOrderResponse();
+                ErpOrderResponse erpOrderResponse = new ErpOrderResponse();
+                erpOrderResponse.setCode(order.getPlatform_code());
+                return erpOrderResponse;
             } else {
                 throw new RuntimeException(String.format("订单推送失败,原因: %s",erpWdtApiResponse.getMessage()));
             }
@@ -159,11 +160,7 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         }
         return new ErpOrderResponse();
     }
-    public static String convertToSnakeCase(Object obj) {
-        SerializeConfig config = new SerializeConfig();
-        config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
-        return JSON.toJSONString(obj, config);
-    }
+
     @Override
     public ErpOrderResponse refundOrder(ErpRefundOrder order) {
         return null;
@@ -176,11 +173,34 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
 
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
-        return null;
+        WdtClient client = WdtClient.getInstance();
+        Map<String,String> map = new HashMap<>();
+        map.put("tid",param.getCode());
+        try {
+            String execute = client.execute("sales_api_trade_query.php", map);
+            ParserConfig config = new ParserConfig();
+            config.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
+            ErpWdtTradeQueryResponse tradeQueryResponseDTO = JSON.parseObject(execute, ErpWdtTradeQueryResponse.class);
+            if(ObjectUtil.equal(0,tradeQueryResponseDTO.getCode())){
+                ErpOrderQueryResponse erpOrderQueryResponse = ErpWdtToErpOrderMapper.INSTANCE.toErpOrderQueryResponse(tradeQueryResponseDTO);
+                log.info("查询订单成功: {}", erpOrderQueryResponse);
+                return erpOrderQueryResponse;
+            } else {
+                throw new RuntimeException(String.format("查询订单失败, 原因: %s", tradeQueryResponseDTO.getMessage()));
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest param) {
         return null;
     }
+    public static String convertToSnakeCase(Object obj) {
+        SerializeConfig config = new SerializeConfig();
+        config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
+        return JSON.toJSONString(obj, config);
+    }
+
 }

+ 2 - 0
pom.xml

@@ -37,6 +37,8 @@
         <velocity.version>1.7</velocity.version>
         <jwt.version>0.9.1</jwt.version>
         <ijapy.version>2.7.8</ijapy.version>
+        <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
+        <lombok.version>1.18.16</lombok.version>
     </properties>
 
     <!-- 依赖声明 -->