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