package com.maintain.business.domain.bo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.maintain.common.annotation.ExcelDictFormat;
import com.maintain.common.convert.ExcelDictConvert;
import com.maintain.common.core.validate.AddGroup;
import com.maintain.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

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

import com.fasterxml.jackson.annotation.JsonFormat;
import com.maintain.common.core.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 报修单业务对象 erp_repair_form
 *
 * @author liushuai
 * @date 2025-04-01
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class ErpRepairFormBo extends BaseEntity {

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

    /**
     * 车辆ID
     */
    @NotNull(message = "车辆不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long carId;

    /**
     * 车牌号
     */
    private String plateNumber;

    /**
     * 车型ID
     */
    @NotNull(message = "车型不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long vehicleModelId;

    /**
     * 客户ID
     */
    @NotNull(message = "客户不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long clientId;

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

    /**
     * 客户联系人
     */
    private String contact;

    /**
     * 联系电话
     */
    private String phone;

    /**
     * 客户类型
     */
    private Integer clientType;

    /**
     * 创建开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    /**
     * 创建结束时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;

    /**
     * 报修单号
     */
    private String repairNumber;

    /**
     * 报修单类型（1修理 2维护 3修理与维护）
     */
    @NotNull(message = "报修单类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer repairType;

    /**
     * 是否返修（0否  1是）
     */
    @NotNull(message = "是否返修不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer isRebuild;

    /**
     * 报修原因
     */
    private String repairCause;

    /**
     * 公里数
     */
    @NotNull(message = "公里数不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal vehicleKilometers;

    /**
     * 旧件带走（0不带 1带走）
     */
    @NotNull(message = "旧件带走不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer isOldPart;

    /**
     * 发现是否维修（0否 1是）
     */
    private Integer isFindMaintain;

    /**
     * 是否自备部件（0否 1是）
     */
    @NotNull(message = "是否自备部件不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer isByoPart;

    /**
     * 自备部件备注
     */
    private String byoPartRemark;

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

    /**
     * 仪表盘照片
     */
    @NotBlank(message = "仪表盘照片不能为空", groups = { AddGroup.class, EditGroup.class })
    private String dashboardUrl;

    /**
     * 车身状况照片
     */
    @NotBlank(message = "车身状况照片不能为空", groups = { AddGroup.class, EditGroup.class })
    private String bodyConditionUrl;

    /**
     * 是否拖车（0否 1是）
     */
    @NotNull(message = "是否拖车不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isTrailer;

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

    /**
     * 拖车公司
     */
    private String trailerCompany;

    /**
     * 拖车车牌号
     */
    private String trailerPlateNumber;

    /**
     * 拖车司机
     */
    private String trailerDriver;

    /**
     * 拖车联系电话
     */
    private String trailerPhone;

    /**
     * 拖车公里
     */
    private BigDecimal trailerVehicleKilometers;

    /**
     * 拖车费用
     */
    private BigDecimal trailerMoney;

    /**
     * 拖车开始时间
     */
    private Date trailerStartTime;

    /**
     * 拖车结束时间
     */
    private Date trailerEndTime;

    /**
     * 拖车备注
     */
    private String trailerRemark;

    /**
     * 救援地点
     */
    private String rescueLocation;

    /**
     * 目的地点
     */
    private String destinationLocation;

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

    /**
     * 承修部门ID
     */
    @NotNull(message = "承修部门ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long repairerDeptId;

    /**
     * 承修班组ID
     */
    @NotNull(message = "承修班组ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long repairerGroupId;

    /**
     * 故障项目
     */
    @NotBlank(message = "故障项目不能为空", groups = { AddGroup.class, EditGroup.class })
    private String malfunctionItem;

    /**
     * 检验项目
     */
    @NotBlank(message = "检验项目不能为空", groups = { AddGroup.class, EditGroup.class })
    private String examineItem;

    /**
     * 状态（1维修中 2维修结束 3作废 4待结算 5已结算）
     */
    private Long state;

    /**
     * 状态列表（1维修中 2维修结束 3作废）
     */
    private List<Integer> stateList;

    /**
     * 结算状态（1待结算 2待确认 3已确认）
     */
    private Integer settlementState;

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

    /**
     * 是否交工（0否 1是 默认0）
     */
    private Integer isDelivery;

    /**
     * 交工时间
     */
    private Date deliveryTime;

    /**
     * 交工开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date deliveryStartTime;

    /**
     * 交工结束时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date deliveryEndTime;

    /**
     * 结算时间
     */
    private Date settlementTime;


}
