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

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

import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 *      临修记录
 * </p>
 *
 * @author wcz
 * @since 2019-12-04
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class EmergencyRepair extends BaseEntity {

    private static final long serialVersionUID = 1L;

    @TableId("id")
    @Null(message = "急修ID必须为空")
    private Long id;

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

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

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

    /**
     * 是否关人
     */
    @NotNull(message = "请确认是否关人")
    @Range(max = 1, message = "请确认是否关人")
    private Integer isTrapped;

    /**
     * 是否紧急（0 否；1 是）
     */
    @NotNull(message = "请确认是否紧急")
    @Range(max = 1, message = "请确认是否紧急")
    private Integer isCritical;

    /**
     * 报修故障描述
     */
    private String callerFaultDescription;

    /**
     * 报修来源（1 物业；2 维保；3 物联）
     */
    @NotNull(message = "请确认报修来源")
    @Range(min = 1, max = 3, message = "请确认报修来源")
    private Integer source;

    /**
     * 报修人ID ,2.0 报修人是指派人
     */
    private Long callerId;

    /**
     * 报修人名
     */
    @NotBlank(message = "报修人不能为空")
    @Pattern(regexp = ValuePool.PATTERN_NAME, message = "报修人只能包含中英文数字和·.。;&")
    private String callerName;
    /**
     * 报修人电话
     */
    @NotBlank(message = "报修人电话不能为空")
    @Pattern(regexp = ValuePool.PATTERN_TELEPHONE, message = "请输入有效的电话")
    private String callerTel;

    /**
     * 报修时间 手动填写
     */
    @NotNull(message = "报修时间不能为空")
    @PastOrPresent(message = "报修时间不能早于标当前时间")
    private LocalDateTime callerDate;

    /**
     * 停梯时间
     */
    @Null(message = "停梯时间必须为空")
    private LocalDateTime stopDate;

    /**
     * 派单时间 急修单创建时间
     */
    @Null(message = "派单时间必须为空")
    private LocalDateTime assignTime;

    /**
     * 接单时间 app端维保工确认
     */
    @Null(message = "接单时间必须为空")
    private LocalDateTime takingTime;

    /**
     * 到达时间 app端维保工打卡
     */
    @Null(message = "到达时间必须为空")
    private LocalDateTime arriveTime;
    /**
     * 恢复时间
     */
    @Null(message = "恢复时间必须为空")
    private LocalDateTime recoveryDate;

    /**
     * 更换配件
     */
    private String sparepart;

    /**
     * 工时费
     */
    private String charge;

    /**
     * 维修故障描述
     */
    private String workerFaultDescription;

    /**
     * 现场描述
     */
    private String fieldDescription;

    /**
     * 维修过程
     */
    private String repairProcedure;

    /**
     * 维修人ID(电梯负责人)
     */
    private Long workerId;

    /**
     * 维修人电话
     */
    private String workerTel;

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

    /**
     * 旧状态（0 待完成；1 已签到，待修理；2 已修理；3 待评价；4 完成）
     * 新状态（-1 暂停中，0 待修理；1 修理中；2 已完成 3 已关闭）
     * 待修理:派单之后 接单之前,修理中:接单到提交,已完成:提交之后
     */
    private Integer status;

    /**
     * creator_id 召修人就是发起人，是创建急修的人
     */

    /**
     * 已读时间
     */
    private LocalDateTime readTime;

    /**
     * 急修原因（0 其他；1 停电；2 故障）
     */
    @NotNull(message = "急修原因不能为空")
    @Range(min = 0, max = 2, message = "急修原因有误")
    private Integer repairReason;

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

    /**
     * 安全项
     */
    private String safetyConfirm;

    /**
     * 当前维修的维保工
     */
    @NotNull(message = "急修工不能为空")
    @Range(min = 1, message = "急修工ID有误")
    private Long workerId1;

    /**
     * 物联楼层
     */
    private Integer wlFloor;

    /**
     * 物联电梯门
     */
    private Integer wlLiftdoor;

    /**
     * 物联故障名称
     */
    private String wlFault;

    /**
     * 物联故障原因
     */
    private String wlFaultReason;

    /**
     * 物联故障处理
     */
    private String wlFaultHandle;

    /**
     * 物联运行描述
     */
    private Integer wlRunDirection;

    /**
     * 应收费用总和
     */
    private BigDecimal costTotal;
    /**
     * 已收费用总和
     */
    private BigDecimal payTotal;
    /**
     * 开票总和
     */
    private BigDecimal invoiceTotal;
    /**
     * 急修关闭原因
     */
    private String closeReason;

    /**
     * 故障部位
     */
    private String faultPart;
    /**
     * 故障原因
     */
    private String faultReason;
    /**
     * 故障处理
     */
    private String faultHandle;
    /**
     * 故障性质
     */
    private String faultNature;
    /**
     * 故障责任
     */
    private String faultDuty;
    /**
     * 主要急修人签名 完成急修单添加
     */
    private String mainSign;
    /**
     * 次要急修人签名
     */
    private String secondSign;

    /**
     * 是否已经评价 0:未评价，1：已评价
     */
    private Integer hasEvaluate;

    /**
     * 急修发起的端
     */
    @TableField(exist = false)
    private Integer mobileType;
}
