package com.fs.erp.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 订单查询请求参数DTO
 *
 * @author xdd
 * @date 2025-02-27
 * @version 1.0
 * @description 订单查询相关参数封装对象
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrderQueryRequestDTO implements Serializable {

    private static final long serialVersionUID = -1L;

    /**
     * 店铺编号
     */
    private Integer shopId;

    /**
     * 是否线下店铺
     * shop_id为0且is_offline_shop为true查询线下店铺单据
     */
    private Boolean isOfflineShop;

    /**
     * 线上单号列表
     * 与时间条件、内部单号不能同时为空，最大限制20条
     */
    private List<String> soIds;

    /**
     * 起始时间
     * 和结束时间必须同时存在，时间间隔不能超过七天
     * 与线上单号、内部单号不能同时为空
     */
    private String modifiedBegin;

    /**
     * 结束时间
     * 和起始时间必须同时存在，时间间隔不能超过七天
     * 与线上单号、内部单号不能同时为空
     */
    private String modifiedEnd;

    /**
     * 日期类型
     * 0:修改时间modified
     * 2:订单日期order_date
     * 3:发货时间send_date
     * 非必填,默认0
     */
    private Integer dateType;

    /**
     * 订单状态
     * 待付款：WaitPay
     * 发货中：Delivering
     * 被合并：Merged
     * 异常：Question
     * 被拆分：Split
     * 等供销商|外仓发货：WaitOuterSent
     * 已付款待审核：WaitConfirm
     * 已客审待财审：WaitFConfirm
     * 已发货：Sent
     * 取消：Cancelled
     */
    private String status;

    /**
     * 第几页,从1开始
     */
    private Integer pageIndex;

    /**
     * 每页条数,最大100条
     */
    private Integer pageSize;

    /**
     * ts时间戳
     * sql server中的行版本号,该字段查询防止分页过程中漏单
     * 查询条件值是大于等于的关系
     */
    private Integer startTs;

    /**
     * 是否查询总条数
     * 默认true,如果使用start_ts查询,该值传false否则影响查询效率
     */
    private Boolean isGetTotal;

    /**
     * 内部订单号列表
     * 商家维度下订单信息的唯一值
     * 与时间条件、线上单号不能同时为空
     */
    private List<Long> oIds;

    /**
     * 是否查询跨境财务信息
     */
    private Boolean isGetCbfinance;

    /**
     * 订单自定义查询字段列表
     * 可选值:volume(体积),package(包材),outer_drp_co_id(货主分销),
     * cus_id(货通客户id),oaid(oaid)
     */
    private List<String> orderFlds;

    /**
     * 订单明细自定义查询字段列表
     * 可选值:src_combine_sku_id(原组合商品编码),referrer_name(主播名称),
     * presale_date(预售时间),drp_price(采购价),item_plan_delivery_date(最晚发货时间)
     */
    private List<String> orderItemFlds;

    /**
     * 订单类型列表
     * 如:"普通订单","普通订单,供销Plus"
     */
    private List<String> orderTypes;

}
