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

import cn.com.ty.lift.business.common.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.PastOrPresent;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 实体类 - 表：maintenance_record
 * @author bieao
 * @since 2019-12-12 11:27:30
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class MaintenanceRecord extends BaseEntity {

	/**
	 * 保养记录ID
	 */
	@TableId(value = "id",type = IdType.ID_WORKER)
	private Long id;

	/**
	 * 维保计划ID
	 */
	@NotNull(message = "维保计划不能为空")
    @Range(min = 1,message = "维保计划有误")
	private Long mtPlanId;

	/**
	 * 电梯ID
	 */
    @NotNull(message = "电梯不能为空")
    @Range(min = 1,message = "电梯有误")
	private Long liftId;

	/**
	 * 项目ID
	 */
    @NotNull(message = "项目不能为空")
    @Range(min = 1,message = "项目有误")
	private Long projectId;

	/**
	 * 维保公司ID
	 */
    @Range(min = 1,message = "维保公司有误")
	private Long mtCompanyId;

	/**
	 * 维保工ID
	 */
    @NotNull(message = "维保工不能为空")
    @Range(min = 1,message = "维保工有误")
	private Long workerId;

	/**
	 * 编号,电梯编号+4位流水号'
	 */
	private String code;

	/**
	 * 电梯类型 1直梯，2扶梯
	 */
	@Range(min = 1,max = 2,message = "电梯类型有误")
	private Integer liftType;

	/**
	 * 保养类型 1.半月，2.季度，3.半年，4.全年
	 */
    @Range(min = 1,max = 4,message = "保养类型有误")
	private Integer type;

	/**
	 * 计划保养时间
	 */
	private LocalDate planDate;

	/**
	 * 实际保养时间
	 */
	@NotNull(message = "缺少实际保养时间")
	@PastOrPresent(message = "保养时间不能早于当前时间")
	private LocalDateTime workDate;

	/**
	 * 停梯时间
	 */
	@NotNull(message = "缺少停梯时间")
	@PastOrPresent(message = "停梯时间不能早于当前时间")
	private LocalDateTime stopDate;

	/**
	 * 恢复时间
	 */
	@NotNull(message = "缺少恢复时间")
	@PastOrPresent(message = "恢复时间不能早于当前时间")
	private LocalDateTime recoveryDate;

	/**
	 * 保养建议
	 */
	private String maintenanceAdvice;

	/**
	 * 维保项id:0/1/2, 0:无需保养，1：已保养，2：需要更换
	 * 保养项目  用键值对的方式存储，如(1:0,2:1,3:1...)
	 */
	private String maintenanceOption;

	/**
	 * 签到位置
	 */
	private String position;

	/**
	 * 状态 -1：待审核，0：待处理，1：已签到，保养中，2：完成保养，待评价。
	 * -3：没有维保记录（可以补录）null -> -3
	 * -2：已补录工单，（没有维保项，可以继续填写）
	 * -1：待审核（通过app端添加的），通过后台添加的，直接 ->2
	 */
	private String status;

	/**
	 * 是否正常 0：正常 1：提前 2：延期
	 */
	@Range(max = 2,message = "请指定记录是否正常")
	private Integer isRegular;

	/**
	 * 维保人员1
	 */
	private Long workerId1;

	/**
	 * 是否补录 0：正常 1：补录
	 */
	@Range(max = 1,message = "请指定是否补录")
	private Integer isRepair;

	/**
	 * 补录原因
	 */
	private String repairReason;

	/**
	 * 维保工签名1
	 */
	@NotEmpty(message = "维保工签名1不能为空")
	private String signatureImg1;

	/**
	 * 维保工签名2
	 */
	private String signatureImg2;

	/**
	 * 零配件
	 */
	private String sparepart;

	/**
	 * 配件费
	 */
	private BigDecimal partsCost;

	/**
	 * 工时费
	 */
	private BigDecimal manCost;

	/**
	 * 安全确认
	 */
	private String safetyConfirm;
	/**
	 * 是否已经评价 0:未评价，1：已评价
	 */
	@Range(max = 1,message = "评价状态有误")
	private Integer hasEvaluate;
	/**
	 * 维保收费项
	 */
	@TableField(exist = false)
	private List<MtRecordCost> mtRecordCosts;
}