package com.sckw.transport.model.param;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * @author lfdc
 * @description 物流托运bo
 * @date 2023-07-06 14:07:50
 */

@Data
@Accessors(chain = true)
public class LogisticsConsignmentParam {
    /**
     *总量
     */
    @Digits(integer = 10,fraction = 2,message = "总量格式不正确")
    @DecimalMin(value = "0.00",message = "分配总量量不能小于{value}")
    private BigDecimal amount;
    /**
     * 分配承运量
     */
    @Digits(integer = 10,fraction = 2,message = "分配承运量格式不正确")
    @DecimalMin(value = "0.00",message = "分配承运量不能小于{value}")
    private BigDecimal carryingCapacity;
    /**
     * 分配承运量使用的单位（吨、方、箱、件）)
     */
    @NotNull(message = "分配承运量单位不能为空")
    private String carryingCapacityUnit;

    /**
     * 托运单位
     */
    @NotNull(message = "托运单位名称不能为空")
    private String checkCompany;
    /**
     * 托运单位id
     */
    @NotNull(message = "托运单位id不能为空")
    private String checkCompanyId;

    /**
     * 联系电话
     */
    @NotNull(message = "托运联系电话不能为空")
    private String checkContactPhone;
    /**
     * 联系人
     */
    @NotNull(message = "托运联系人不能为空")
    private String checkContacts;
    /**
     * 托运联系人id
     */
    @NotNull(message = "托运联系人不能为空")
    private String checkContactsId;

    /**
     * 合理损耗
     */
//    @NotNull(message = "合理损耗不能为空")
//    @DecimalMin(value = "0.00",message = "必须为大于0的正整数")
    @Digits(integer = 5, fraction = 2, message = "合理损耗超长")
    private BigDecimal loss;
    /**
     * 合理损耗单位
     */
    private String lossUnit;

    /**
     * 商品价值（扣亏货值）
     */
//    @NotNull(message = "扣亏货值不能为空")
//    @DecimalMin(value = "0.00",message = "必须为大于0的正整数")
    private BigDecimal goodsPrice;
    /**
     * 商品价值（扣亏货值）单位
     */
    private String goodsPriceUnit;
    /**
     * 承运单位
     */
    @NotBlank(message = "承运单位不能为空")
    private String consignCompany;

    /**
     * 承运单位ID
     */
    @NotBlank(message = "承运单位ID不能为空")
    private String consignCompanyId;

    /**
     * 联系电话
     */
    @NotNull(message = "承运联系电话不能为空")
    private String consignContactPhone;
    /**
     * 联系人
     */
    @NotNull(message = "承运联系人不能为空")
    private String consignContacts;

    /**
     * 承运联系人id
     */
    @NotNull(message = "承运联系人id不能为空")
    private String consignContactsId;

    /**
     * 结算周期(周结、月结、季结)
     */
//    @NotNull(message = "结算周期不能为空")
    @Digits(integer = 5, fraction = 0, message = "合理损耗超长")
    private Long settlementCycle;

    /**
     * 合同id
     */
    @NotNull(message = "合同id不能为空")
    private String contractId;
    /**
     * 合同编号
     */
    @NotNull(message = "合同编号不能为空")
    private String contractNo;

    /**
     * 合同名称
     */
    @NotNull(message = "合同名称不能为空")
    private String contractName;

    /**
     * 支付方式
     */
    @NotNull(message = "支付方式不能为空")
    private String payment;

    /**
     * 签约方式
     */
    @NotNull(message = "签约方式不能为空")
    private String signingWay;

    /**
     * 货物名称
     */
    @NotNull(message = "货物名称不能为空")
    private String goodsName;

    /**
     * 货物id
     */
    @NotNull(message = "货物id不能为空")
    private String goodsId;

    /**
     * skuId
     */
    private String skuId;
    /**
     * 是否全量
     */
    @NotNull(message = "是否全量不能为空")
    private Boolean isFullDose;
    /**
     * 订单id-分包时要使用
     */
    @JsonProperty("lOrderId")
    private String lOrderId;
    /**
     * 订单编号-分包时要使用
     */
    @JsonProperty("lOrderNo")
    private String lOrderNo;
    /**
     * 贸易订单id
     */
    @JsonProperty("tOrderId")
    @NotNull(message = "贸易订单id不能为空")
    private String tOrderId;
    /**
     * 贸易订单编号
     */
    @JsonProperty("tOrderNo")
    @NotNull(message = "贸易订单编号不能为空")
    private String tOrderNo;
    /**
     * 运价
     */
    @NotNull(message = "运价不能为空")
    @DecimalMin(value = "0.00",message = "运价必须为大于0的正整数")
    @Digits(integer = 6,fraction = 2,message = "运价格式填写错误")
    private BigDecimal price;
    /**
     * 运价方式
     */
    @NotNull(message = "运价方式不能为空")
    private String priceType;
    /**
     * 计划卸货时间
     */
    @NotNull(message = "计划卸货时间不能为空")
    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDate receiveGoodsDateTime;
    /**
     * 计划发货时间
     */
    @NotNull(message = "计划发货时间不能为空")
    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDate shipmentsDateTime;
    /**
     * 税率
     */
    @NotNull(message = "税率不能为空")
    private Long taxRate;
//    /**
//     * 税率类型
//     */
//    @NotNull(message = "税率类型不能为空")
//    private String taxRateType;
    /**
     * 备注
     */
    @Length(max = 100,message = "单据编号长度错误最大长度:{max}")
    private String remark;
    /**
     * 计费方式
     */
    @NotNull(message = "计费方式不能为空")
    private String billingMode;

}
