package com.sckw.usual.entity;

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import lombok.Data;

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 zk
 * date 2023/9/18 0018
 */
@Data
public class KwOrderTreeVo implements Serializable {

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

    /**
     * 企业id
     */
    private Long entId;

    /**
     * 物流订单类型（1 贸易订单生成物流订单、2 自建物流订单）
     */
    private String type;

    /**
     * 交易订单id（kwo_trade_order）
     */
    private Long tOrderId;

    /**
     * 交易订单编号（kwo_trade_order）
     */
    private String tOrderNo;

    /**
     * 物流订单编号
     */
    private String lOrderNo;

    /**
     * 分包上级物流订单id
     */
    private Long pid;

    /**
     * 分包所有物流订单id
     */
    private String pids;

    /**
     * 当前单据所属等级
     */
    private String level;

    /**
     * 结算周期(周结、月结、季结)
     */
    private Long settlementCycle;
    /**
     * 计费方式
     */
    private String billingMode;

    /**
     * 运价
     */
    private BigDecimal price;

    /**
     * 运价方式(元/吨、元/车）
     */
    @Min(value = 0,message = "运价方式类型不能大于等于{value}")
    @Max(value = 4,message = "运价方式类型不能大于等于{value}")
    private Long priceType;

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

    /**
     * 单位（吨、方、箱、件）
     */
    private String unit;

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

    /**
     * 合理损耗单位(‰/kG)
     */
    private String lossUnit;

    /**
     * 商品价值（扣亏货值）
     */
    private BigDecimal goodsPrice;

    /**
     * 商品价值（扣亏货值）单位
     */
    private String goodsPriceUnit;

    /**
     * 计划开始日期
     */
    private LocalDateTime startTime;

    /**
     * 计划结束日期
     */
    private LocalDateTime endTime;

    /**
     * 分包量
     */
    private BigDecimal subcontractAmount;

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

    /**
     * 卸货量
     */
    private BigDecimal unloadAmount;

    /**
     * 装货量
     */
    private BigDecimal loadAmount;

    /**
     * 忽略剩余量
     */
    private BigDecimal ignoreAmount;

    /**
     * 亏吨量(装货量-卸货量)
     */
    private BigDecimal deficitAmount;

    /**
     * 亏吨扣款
     */
    private BigDecimal deficitPrice;

    /**
     * 卸货-履约量（自己+下游承运总卸货量）
     */
    private BigDecimal totalUnloadAmount;

    /**
     * 装货-履约量（自己+下游承运总装货量）
     */
    private BigDecimal totalLoadAmount;

    /**
     * 实际开始时间（装货）
     */
    private Date loadTime;

    /**
     * 实际结束时间（卸货）
     */
    private Date unloadTime;

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

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

    /**
     * 用户状态（0正常、1已锁）
     */
    private Integer status;

    private List<KwOrderTreeVo> children;
}
