package com.sckw.usual.entity.req;

import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.Valid;
import jakarta.validation.constraints.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * @desc: 分包托运
 * @author: lt
 * @date: 2024/4/7 10:38
 */
@Getter
@Setter
@Accessors(chain = true)
public class KwOrderSubConsignReq implements Serializable {

    private static final long serialVersionUID = 1L;


    /*
    订单id(分包时使用)
     */
    private String orderId;

    /*
    订单来源
     */
    private Integer orderSource;

    /*
    托运企业id
     */
    @NotNull(message = "托运企业id不能是空")
    private Long tyCompanyId;

    /**
     * 托运企业
     */
    @NotBlank(message = "托运企业不能是空")
    private String tyCompany;

    /**
     * 托运联系方式
     */
    private String tyPhone;

    @NotNull(message = "发货企业id不能是空")
    private Long fhCompanyId;

    /**
     * 发货企业
     */
    @NotBlank(message = "发货企业不能是空")
    private String fhCompany;

    /**
     * fh_phone
     */
    private String fhPhone;

    /*
    承运物流公司id
     */
    @NotNull(message = "承运企业id不能是空")
    private Long cyCompanyId;

    /**
     * 承运物流有限公司
     */
    @NotBlank(message = "承运物流公司不能是空")
    private String cyCompany;

    /**
     * 承运联系方式
     */
    private String cyPhone;

    /*
    收货企业id
     */
    @NotNull(message = "收货企业id不能是空")
    private Long shCompanyId;

    /**
     * 收货企业
     */
    private String shCompany;

    /**
     * 收货联系方式
     */
    private String shPhone;

    /*
    货物单位
     */
    private String goodsUnit;

    /*
    装卸类型
     */
    private Integer typeHandling;

    /*
    前置订单号
     */
    @NotBlank(message = "前置订单号不能是是空")
    private String pid;

    /*
    已委托量
     */
    private BigDecimal entrustAmount;

    /*
   运价
    */
    private BigDecimal price;

    /*
    运价方式(元/吨、元/车）
     */
    private Long priceType;

    /*
    计费方式
     */
    private String billingMode;

    /*
    合理损耗单位
     */
    private BigDecimal loss;

    /*
    商品价值（扣亏货值）((实装-实卸)-合理损耗)如果为负数，则为零
     */
    private BigDecimal goodsPrice;

    /**
     * 计划发货日期
     */
    @NotNull(message = "计划发货日期不能为空")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime shipmentsDateTime;

    /**
     * 计划卸货日期
     */
    @NotNull(message = "计划卸货日期不能为空")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime receiveGoodsDateTime;

    /**
     * 分配承运量
     */
    @Digits(integer = 10,fraction = 2,message = "分配承运量填写错误")
    @DecimalMin(value = "0.00",message = "委托量不能小于{value}")
    private BigDecimal carryingCapacity;

    /**
     * 付款方式(预付款、线下支付、第三方支付）
     */
    private Long payment;

    /**
     * 发票税率（%）
     */
    private BigDecimal taxRate;


    private String carryingCapacityUnit;

    /*
    备注
     */
    private String remark;

    /**
     * 是否全量
     */
    @NotNull(message = "是否全量不能为空")
    private Boolean isFullDose;

    /**
     * 已委托量
     */
    @Digits(integer = 10,fraction = 2,message = "委托量格式不正确")
    @DecimalMin(value = "0.00",message = "委托量不能小于{value}")
    private BigDecimal amount;

    /*
    剩余代运量
     */
    private Double remainNum;

    /**
     * status
     */
    private Integer status;

    /**
     * create_by
     */
    private String createBy;

    /**
     * update_by
     */
    private String updateBy;

    /**
     * 装货地址
     */
    @NotEmpty(message = "装货地址信息必选")
    @Size(min = 1, message = "装货地址信息至少需要一个元素")
    @Valid
    List<kwOrderUsualLandTransportAddressReq> loadAddressList;

    /**
     * 卸货地址
     */
    @NotEmpty(message = "卸货地址信息必选")
    @Size(min = 1, message = "卸货地址信息至少需要一个元素")
    @Valid
    List<kwOrderUsualLandTransportAddressReq> unLoadAddressList;

    /*
    货物信息
     */
    @Valid
    kwOrderUsualLandTransportGoodsReq goodsReq;

    /*
    履约信息
     */
    @Valid
    KwOrderUsualTransportPerReq perReq;

    /*
    扣亏货信息
     */
    @Valid
    KwOrderUsualLandTransportDefGoodsReq defGoods;

    /*
    更多信息
     */
    @Valid
    KwOrderUsualLandTransportMoreReq orderMore;
}
