package com.aucma.dms.domain;

import com.aucma.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 维修工单对象 dms_repair_work_order
 *
 * @author Cascade AI
 * @date 2025-01-10
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class DmsRepairWorkOrder extends DmsBaseEntity {
    
    private static final long serialVersionUID = 1L;

    /** 维修工单ID */
    private Long workOrderId;

    /** 工单编号 */
    @Excel(name = "工单编号")
    private String workOrderCode;

    /** 关联故障报修ID */
    @Excel(name = "关联故障报修ID")
    private Long faultInstanceId;

    /** 设备ID */
    @Excel(name = "设备ID")
    private Long deviceId;

    /** 设备编码 */
    @Excel(name = "设备编码")
    private String deviceCode;

    /** 设备名称 */
    @Excel(name = "设备名称")
    private String deviceName;

    /** 故障类型 */
    @Excel(name = "故障类型", dictType = "dms_fault_type")
    private String faultType;

    /** 故障描述 */
    @Excel(name = "故障描述")
    private String faultDescription;

    /** 维修类型：1-预防性维修 2-故障维修 3-改进性维修 */
    @Excel(name = "维修类型", dictType = "dms_repair_type")
    private String repairType;

    /** 工单状态：0-待派工 1-已派工 2-维修中 3-已完成 4-已关闭 */
    @Excel(name = "工单状态", dictType = "dms_work_order_status")
    private String orderStatus;

    /** 优先级：1-紧急 2-高 3-中 4-低 */
    @Excel(name = "优先级", dictType = "dms_priority")
    private String priority;

    /** 计划开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date planStartTime;

    /** 计划完成时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date planEndTime;

    /** 实际开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "实际开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date actualStartTime;

    /** 实际完成时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "实际完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date actualEndTime;

    /** 执行人ID */
    @Excel(name = "执行人ID")
    private Long executorId;

    /** 执行人姓名 */
    @Excel(name = "执行人")
    private String executorName;

    /** 维修工时（小时） */
    @Excel(name = "维修工时")
    private BigDecimal repairHours;

    /** 预算费用 */
    @Excel(name = "预算费用")
    private BigDecimal budgetCost;

    /** 实际费用 */
    @Excel(name = "实际费用")
    private BigDecimal actualCost;

    /** 维修结果：1-成功 2-失败 3-部分完成 */
    @Excel(name = "维修结果", dictType = "dms_repair_result")
    private String repairResult;

    /** 维修说明 */
    @Excel(name = "维修说明")
    private String repairNotes;

    /** 审批状态：0-待审批 1-审批中 2-已通过 3-已驳回 */
    @Excel(name = "审批状态", dictType = "approve_status")
    private String approveStatus;

    /** 审批人 */
    @Excel(name = "审批人")
    private String approver;

    /** 审批时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date approveTime;

    /** 审批意见 */
    private String approveRemark;

    /** 是否需要停机：0-否 1-是 */
    @Excel(name = "是否需要停机", readConverterExp = "0=否,1=是")
    private String needShutdown;

    /** 停机时长（分钟） */
    @Excel(name = "停机时长")
    private Integer shutdownDuration;

    /** 是否标识：1-是 0-否 */
    @Excel(name = "是否标识", readConverterExp = "1=是,0=否")
    private String isFlag;

    // ========== 关联子表数据 ==========

    /** 维修工程列表 */
    private List<DmsRepairProject> repairProjects;

    /** 维修材料列表 */
    private List<DmsRepairMaterial> repairMaterials;

    /** 附件列表 */
    private List<DmsInstanceFile> attachments;

    // ========== 非数据库字段 ==========

    /** 工程数量 */
    private Integer projectCount;

    /** 材料数量 */
    private Integer materialCount;
}
