package cn.com.ty.lift.business.emergency.dto;

import cn.com.ty.lift.business.emergency.entity.ErRecordCost;
import cn.com.ty.lift.common.model.PageRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 *     根据条件分页查询急修单，条件封装model
 * </p>
 * @author wcz
 * @since  2019/12/5
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class RepairRequest extends PageRequest {

    /**
     * 主键id
     */
    @Min(value = 1, message = "急修ID有误")
    private Long id;

    @NotEmpty(message = "急修ID列表有误")
    private List<Long> ids;
    /**
     * 维保公司id
     */
    @Min(value = 1,message = "维保公司ID有误")
    private Long mtCompanyId;

    /**
     * 电梯id
     */
    @Min(value = 1,message = "电梯ID有误")
    private Long liftId;

    /**
     * 区域id
     */
    @Min(value = 1,message = "区域ID有误")
    private Long regionId;

    /**
     * 项目id
     */
    @Min(value = 1,message = "项目ID有误")
    private Long projectId;

    /**
     * 维保工id
     */
    @Min(value = 1,message = "维保工ID有误")
    private Long workerId;

    /**
     * 报修开始时间
     */
    private LocalDate repairBegin;

    /**
     * 报修结束时间
     */
    private LocalDate repairEnd;
    /**
     * 急修单状态
     */
    @NotNull(message = "急修状态不能为空")
    private Integer status;

    /**
     * 电梯注册代码，多条件字段模糊匹配
     */
    private String info;

    /**
     * 故障来源
     */
    private Integer source;

    /**
     * 接单时间 app端维保工确认
     */
    @NotNull(message = "缺少接单时间")
//    @PastOrPresent(message = "接单时间不能早于标准北京时间")
    private LocalDateTime takingTime;

    /**
     *
     * 到达时间 app端维保工打卡
     */
    @NotNull(message = "缺少到达时间")
//    @PastOrPresent(message = "到达时间不能早于标准北京时间")
    private LocalDateTime arriveTime;

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

    /**
     * 位置信息
     */
    @NotBlank(message = "缺少位置信息")
    private String position;

    /**
     *
     */
    @Min(value = 1, message = "当前用户ID有误")
    private Long userId;

    /**
     * 电梯类型
     */
    @NotNull(message = "电梯类型有误")
    private Integer liftCategory;

    /**
     * 急修关闭原因
     */
    @NotBlank(message = "缺少急修关闭原因")
    private String closeReason;

    /**
     * 急修收费项id
     */
    @Min(value = 1,message = "急修收费项ID有误")
    private Long erCostItemId;
    /**
     * 急修项列表
     */
    @NotEmpty(message = "缺少急修收费列表")
    private List<ErRecordCost> erRecordCosts;

    /**
     * 安全确认
     */
    @NotBlank(message = "缺少安全确认")
    private String safetyConfirm;

    /**
     * 故障部位
     */
    @NotBlank(message = "缺少故障部位")
    private String faultPart;
    /**
     * 故障原因
     */
    @NotBlank(message = "缺少故障原因")
    private String faultReason;
    /**
     * 故障处理
     */
    @NotBlank(message = "缺少故障处理")
    private String faultHandle;
    /**
     * 故障性质
     */
    @NotBlank(message = "缺少故障性质")
    private String faultNature;
    /**
     * 故障责任
     */
    @NotBlank(message = "缺少故障责任")
    private String faultDuty;

    /**
     * 恢复时间
     */
    @NotNull(message = "缺少恢复时间")
//    @PastOrPresent(message = "恢复时间不得早于标准北京时间")
    private LocalDateTime recoveryDate;

    /**
     * 主要急修人签名 完成急修单添加
     */
    @NotBlank(message = "缺少主要急修人签名")
    private String mainSign;
    /**
     * 次要急修人签名
     */
    @NotBlank(message = "缺少次要急修人签名")
    private String secondSign;

    /**
     * 现场描述
     */
    @NotBlank(message = "缺少现场描述")
    private String fieldDescription;
    /**
     * 急修图片地址
     */
    @NotEmpty(message = "缺少急修图片")
    private List<String> erRecordImg;

    /**
     * 当前用户角色code
     */
    private String currentRoleCode;
}
