package com.maintain.business.domain.vo;

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

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.maintain.common.annotation.ExcelDictFormat;
import com.maintain.common.convert.ExcelDictConvert;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 报修单视图对象 erp_repair_form
 *
 * @author liushuai
 * @date 2025-04-01
 */
@Data
@ExcelIgnoreUnannotated
public class ErpRepairFormVo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private Long id;

    /**
     * 车辆ID
     */
    private Long carId;

    /**
     * 车型ID
     */
    private Long vehicleModelId;

    /**
     * 客户ID
     */
    private Long clientId;

    /**
     * 客户名称
     */
    private String clientName;

    /**
     * 报修单号
     */
    @ExcelProperty(value = "报修单号")
    private String repairNumber;

    /**
     * 报修单类型（1修理 2维护 3修理与维护）
     */
    @ExcelProperty(value = "报修单类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "baoxiudanleixing")
    private Integer repairType;

    /**
     * 是否返修（0否  1是）
     */
    @ExcelProperty(value = "是否返修", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "sys_is_enable")
    private Integer isRebuild;

    /**
     * 报修原因
     */
    @ExcelProperty(value = "报修原因")
    private String repairCause;

    /**
     * 公里数
     */
    @ExcelProperty(value = "公里数")
    private BigDecimal vehicleKilometers;

    /**
     * 旧件带走（0不带 1带走）
     */
    @ExcelProperty(value = "旧件是否带走", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "sys_is_enable")
    private Integer isOldPart;

    /**
     * 发现是否维修（0否 1是）
     */
    @ExcelProperty(value = "发现异常是否维修", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "sys_is_enable")
    private Integer isFindMaintain;

    /**
     * 是否自备部件（0否 1是）
     */
    @ExcelProperty(value = "是否自备部件", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "sys_is_enable")
    private Integer isByoPart;

    /**
     * 自备材料备注
     */
    @ExcelProperty(value = "自备材料备注")
    @ColumnWidth(20)
    private String byoPartRemark;

    /**
     * 自备部件照片
     */
    private String byoPartUrl;

    /**
     * 仪表盘照片
     */
    private String dashboardUrl;

    /**
     * 车身状况照片
     */
    private String bodyConditionUrl;

    /**
     * 是否拖车（0否 1是）
     */
    @ExcelProperty(value = "是否自备部件", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "sys_is_enable")
    private String isTrailer;

    /**
     * 拖车单据编号
     */
    private String trailerDocumentNumber;

    /**
     * 拖车公司
     */
    @ExcelProperty(value = "拖车公司")
    private String trailerCompany;

    /**
     * 拖车车牌号
     */
    @ExcelProperty(value = "拖车车牌号")
    private String trailerPlateNumber;

    /**
     * 拖车司机
     */
    @ExcelProperty(value = "拖车司机")
    private String trailerDriver;

    /**
     * 拖车联系电话
     */
    @ExcelProperty(value = "拖车联系电话")
    private String trailerPhone;

    /**
     * 拖车公里
     */
    @ExcelProperty(value = "拖车公里")
    private BigDecimal trailerVehicleKilometers;

    /**
     * 拖车费用
     */
    @ExcelProperty(value = "拖车费用")
    private BigDecimal trailerMoney;

    /**
     * 拖车开始时间
     */
    @ExcelProperty(value = "拖车开始时间")
    @ColumnWidth(20)
    private Date trailerStartTime;

    /**
     * 拖车结束时间
     */
    @ExcelProperty(value = "拖车结束时间")
    @ColumnWidth(20)
    private Date trailerEndTime;

    /**
     * 拖车备注
     */
    @ExcelProperty(value = "拖车备注")
    @ColumnWidth(20)
    private String trailerRemark;

    /**
     * 救援地点
     */
    @ExcelProperty(value = "救援地点")
    @ColumnWidth(30)
    private String rescueLocation;

    /**
     * 目的地点
     */
    @ExcelProperty(value = "目的地点")
    @ColumnWidth(30)
    private String destinationLocation;

    /**
     * 承修公司
     */
    private String repairerCompany;

    /**
     * 承修部门ID
     */
    private Long repairerDeptId;

    /**
     * 承修部门名称
     */
    @ExcelProperty(value = "承修部门名称")
    private String repairerDeptName;

    /**
     * 承修班组ID
     */
    private Long repairerGroupId;

    /**
     * 承修班组名称
     */
    @ExcelProperty(value = "承修班组名称")
    private String repairerGroupName;

    /**
     * 故障项目
     */
    @ExcelProperty(value = "故障项目")
    private String malfunctionItem;

    /**
     * 检验项目
     */
    @ExcelProperty(value = "检验项目")
    private String examineItem;

    /**
     * 状态（1维修中 2维修结束 3作废）
     */
    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "repair_form_state")
    private Integer state;

    /**
     * 结算状态（1待结算 2待确认 3已确认）
     */
    @ExcelProperty(value = "结算状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "repair_form_settlement_state")
    private Integer settlementState;

    /**
     * 维修结束时间
     */
    private Date maintainEndTime;

    /**
     * 是否交车（0否 1是 默认0）
     */
    @ExcelProperty(value = "是否交车", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "repair_form_is_delivery")
    private Integer isDelivery;

    /**
     * 交车时间
     */
    @ExcelProperty(value = "交车时间")
    @ColumnWidth(20)
    private Date deliveryTime;

    /**
     * 结算时间
     */
    @ExcelProperty(value = "结算时间")
    @ColumnWidth(20)
    private Date settlementTime;

    /**
     * 创建人
     */
    private String createBy;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 汇总工时
     */
    private BigDecimal totalActualTime;

    /**
     * 汇总工时费用
     */
    private BigDecimal totalActualTimeMoney;

    /**
     * 汇总材料费用
     */
    private BigDecimal totalMaterialMoney;

    /**
     * 汇总费用(拖车+工时+材料)
     */
    private BigDecimal totalMoney;

    /**
     * 客户
     */
    private ErpClientVo client;

    /**
     * 客户车辆
     */
    private ErpCarVo car;

    /**
     * 客户车型
     */
    private ErpVehicleModelVo vehicleModelVo;

    /**
     * 维修项目列表/竣工列表
     */
    private List<ErpRepairFormProjectVo> projectVoList;

    /**
     * 维修材料列表
     */
    private List<ErpMaterialPickingVo> materialVoList;

    /**
     * 报修单-交车
     */
    private ErpRepairFormDeliveryVo deliveryVo;

    /**
     * 报修单-理赔列表
     */
    private List<ErpRepairFormClaimVo> claimVoList;



}
