package cn.com.ty.lift.business.contract.dao.entity;

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

import cn.com.ty.lift.business.common.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.*;

/**
 * 实体类 - 表：contracts
 *
 * @author bieao
 * @since 2019-12-06 16:35:47
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class Contracts extends BaseEntity {
    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.ID_WORKER)
    private Long id;

    /**
     * 项目ID
     */
    private Long projectId;

    /**
     * 公司ID
     */
    private Long mtCompanyId;

    /**
     * 合同自定义编号
     */
    private String code;

    /**
     * 合同来源（1 : 商保新增 ；2 : 免保转签；3 : 续签；4 : 免保）
     */
    private Integer source;

    /**
     * 付款说明
     */
    private String payMode;

    /**
     * 台量
     */
    @NotNull(message = "台量不能为空")
    @Min(value = 1, message = "台量最小值为1")
    private Integer liftNum;

    /**
     * 金额
     */
    @NotNull(message = "金额不能为空")
    @DecimalMin(value = "0.00", message = "金额不能小于0")
    private BigDecimal moneys;

    /**
     * 应收金额总计
     */
    private BigDecimal planMoneyTotal;

    /**
     * 实收金额总计
     */
    private BigDecimal workMoneyTotal;

    /**
     * 开票金额总计
     */
    private BigDecimal invoiceMoneyTotal;

    /**
     * 合同类型（1 : 半包；2：大包；3：清包；4：全包；5：大修）
     */
    @Min(value = 1, message = "合同类型最小值为1")
    @Max(value = 5, message = "合同类型最大值为5")
    private Integer type;

    /**
     * 合同状态（1 未开始；2 执行中；3 已结束；4 款未结清）
     */
    private Integer status;

    /**
     * 是否复核（0：未复核；1：已复核）
     */
    private Integer isCheck;

    /**
     * 签约时间
     */
    @NotNull(message = "签约时间不能为空")
    private LocalDate givenDate;

    /**
     * 签约人
     */
    @NotEmpty(message = "签约人不能为空")
    private String givenUser;

    /**
     * 开始时间
     */
    @NotNull(message = "开始时间不能为空")
    private LocalDate starDate;

    /**
     * 结束时间
     */
    @NotNull(message = "结束时间不能为空")
    private LocalDate endDate;

    /**
     * 签约合同编号
     */
    private Long nextId;

    /**
     * 合同附件
     */
    private String accessoryUrl;

    /**
     * 提前结束原因
     */
    private String endReason;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 上一个合同编号
     */
    private String previousId;
}