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