package com.xinelu.applet.dto.nursingstationgoods;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.custominterface.Insert;
import com.xinelu.common.custominterface.Update;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author ljh
 * @version 1.0
 * Create by 2022/10/18 9:51
 * 商品订单(积分兑换与商品购买共用)
 */
@Data
public class GoodsOrderStationDTO implements Serializable {
    private static final long serialVersionUID = 8319587190064545742L;

    /**
     * 主键id
     */
    private Long goodsId;

    /**
     * 护理站id
     */
    private Long nurseStationId;

    /**
     * 商品属性id
     **/
    @NotNull(message = "商品属性信息不能为空", groups = {Insert.class, Update.class})
    public Long goodsAttributeId;

    /**
     * 商品属性明细表id
     **/
    @NotNull(message = "商品属性明细表信息不能为空", groups = {Insert.class, Update.class})
    public Long goodsAttributeDetailsId;

    /**
     * 会员id
     */
    @NotNull(message = "请添加购买人员信息！", groups = {Insert.class, Update.class})
    private Long patientId;

    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 订单状态，待付款：WAIT_PAY，已付款：PAY，已取消：CANCEL，待收货：WAIT_RECEIVED，已收货：RECEIVED，待退款：WAIT_REFUND，已退款：REFUNDED，待退货：WAIT_RETURNED，已退货：RETURNED
     */
    private String orderStatus;

    /**
     * 订单总金额
     */
    private BigDecimal totalPrice;

    /**
     * 收货人
     */
    @NotBlank(message = "收货人不能为空", groups = {Insert.class, Update.class})
    @Length(max = 20, message = "收货人不能超过20位", groups = {Insert.class, Update.class})
    private String receiver;

    /**
     * 收货地址
     */
    @NotBlank(message = "收货地址不能为空", groups = {Insert.class, Update.class})
    @Length(max = 100, message = "收货地址不能超过100位", groups = {Insert.class, Update.class})
    private String receiveAddress;

    /**
     * 联系电话
     */
    @NotBlank(message = "联系电话不能为空", groups = {Insert.class, Update.class})
    @Length(max = 11, message = "联系电话不能超过11位", groups = {Insert.class, Update.class})
    private String phone;

    /**
     * 下单时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date orderTime;

    /**
     * 下单方式，手机App：MOBILE_APP，微信小程序：WECHAT_APPLET，支付宝小程序：ALI_PAY_APPLET
     */
    @NotNull(message = "下单方式不能为空", groups = {Insert.class, Update.class})
    private String orderChannel;

    /**
     * 护理站：NURSE_STATION，商城：SHOPPING_MALL，健康咨询：HEALTH_CONSULTATION
     */
    @NotNull(message = "购买方式不能为空", groups = {Insert.class, Update.class})
    private String buySource;

    /**
     * 备注信息
     */
    @Length(max = 300, message = "备注信息不能超过300位", groups = {Insert.class, Update.class})
    private String remark;

    /**
     * 是否删除，0：否，1：是，，暂时未使用
     */
    private Integer delFlag;


    /**
     * 商品订单表id，，暂时未使用
     */
    private Long goodsOrderId;

    /**
     * 商品名称
     */
    @NotBlank(message = "商品名称不能为空", groups = {Insert.class, Update.class})
    @Length(max = 50, message = "商品名称不能超过50位", groups = {Insert.class, Update.class})
    private String goodsName;

    /**
     * 商品数量
     */
    @NotNull(message = "商品数量不能为空", groups = {Insert.class, Update.class})
    private Integer goodsCount;

    /**
     * 商品属性名称
     */
    @Length(max = 100, message = "商品属性名称不能超过100位", groups = {Insert.class, Update.class})
    private String goodsAttributeName;

    /**
     * 商品属性内容
     */
    private String goodsAttributeContent;

    /**
     * 商品单价（元）
     */
    private BigDecimal goodsPrice;

    /**
     * 订单编号，暂时未使用
     */
    private String goodOrderNo;

    /**
     * 应付总金额（元），暂时未使用
     */
    private BigDecimal goodTotalPrice;

    /**
     * 优惠金额（元）
     */
    private BigDecimal discountPrice;

    /**
     * 运费金额（元）
     */
    private BigDecimal transportPrice;

    /**
     * 赠送积分，暂未使用
     */
    private Integer giveIntegral;

    /**
     * 订单类型，积分兑换：INTEGRAL_EXCHANGE，直接购买：DIRECT_BUY，健康咨询：HEALTH_CONSULTATION
     */
    private String orderType;

    /**
     * 健康咨询人员表id，记录咨询订单中选择的医生，健康咨询订单使用
     */
    private Long hospitalPersonId;

    /**
     * 优惠券id
     */
    private Long couponId;

    /**
     * 积分抵扣数量，积分抵扣使用
     */
    private Integer integralDeductionCount;

    /**
     * 积分抵扣金额，积分抵扣使用
     */
    private BigDecimal integralDeductionPrice;

    /**
     * 商品度量单位
     */
    private String goodsUnit;

    /**
     * 优惠券使用门槛
     */
    private BigDecimal couponConsumePrice;

    /**
     * 优惠券名称
     */
    private String couponTitle;

    /**
     * 商品原始金额，即：商品数量 * 商品单价
     */
    @NotNull(message = "商品原始金额不能为空！", groups = {Insert.class, Update.class})
    private BigDecimal originalTotalPrice;

    /**
     * 积分兑换数值，积分兑换商品使用
     */
    private Integer integralExchangeSill;

    /**
     * 积分兑换商品数量，积分兑换商品使用
     */
    private Integer integralExchangeCount;
}
