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;
}
