package org.springblade.thirdparty.ocr.pojo.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.NullSerializer;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.core.tool.utils.DateUtil;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *  车辆运输凭证
 * @author bfhuange
 * @date 2024/11/6
 */
@Data
@Schema(description = "车辆运输凭证识别结果")
public class TransportCertificateVO implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 车头车牌号
     */
    @Schema(description = "车头车牌号")
    private String carFrontPlateNo;
    /**
     * 车尾车牌号
     */
    @Schema(description = "车尾车牌号")
    private String carBackPlateNo;
    /**
     * 行驶证上的车牌号
     */
    @Schema(description = "行驶证上的车牌号")
    private String drivingPlateNo;
    /**
     * 行驶证车牌号
     */
    @Schema(description = "行驶证车牌号")
    private String vehicleLicensePlateNo;
    /**
     * 行驶证车辆类型
     */
    @Schema(description = "行驶证车辆类型")
    private String vehicleLicenseVehicleType;
    /**
     * 行驶证所有人
     */
    @Schema(description = "行驶证所有人")
    private String vehicleLicenseOwnerName;
    /**
     * 行驶证使用性质
     */
    @Schema(description = "行驶证使用性质")
    private String vehicleLicenseUseCharacter;
    /**
     * 行驶证品牌型号
     */
    @Schema(description = "行驶证品牌型号")
    private String vehicleLicenseModel;
    /**
     * 行驶证车辆识别代号
     */
    @Schema(description = "行驶证车辆识别代号")
    private String vehicleLicenseVin;
    /**
     * 行驶证发动机号码
     */
    @Schema(description = "行驶证发动机号码")
    private String vehicleLicenseEngineNo;
    /**
     * 行驶证注册日期
     */
    @JsonFormat(pattern = DateUtil.PATTERN_DATE,timezone = "GMT+8")
    @Schema(description = "行驶证注册日期")
    private Date vehicleLicenseRegisterDate;
    /**
     * 行驶证发证日期
     */
    @JsonFormat(pattern = DateUtil.PATTERN_DATE,timezone = "GMT+8")
    @Schema(description = "行驶证发证日期")
    private Date vehicleLicenseIssueDate;
    /**
     * 行驶证住址
     */
    @Schema(description = "行驶证住址")
    private String vehicleLicenseAddress;
    /**
     * 行驶证档案编号
     */
    @Schema(description = "行驶证档案编号")
    private String vehicleLicenseFileNo;
    /**
     * 行驶证检验有效期
     */
    @JsonFormat(pattern = DateUtil.PATTERN_DATE,timezone = "GMT+8")
    @Schema(description = "行驶证检验有效期")
    private Date vehicleLicenseInspectionValidDate;
    /**
     *  驾驶证有效期限(终⽌时间)
     */
    @JsonFormat(pattern = DateUtil.PATTERN_DATE,timezone = "GMT+8")
    @Schema(description = "驾驶证有效期限(终⽌时间)")
    private Date driverLicenseValidDateEnd;
    /**
     *  驾驶证姓名
     */
    @Schema(description = "驾驶证姓名")
    private String driverLicenseName;
    /**
     *  驾驶证证号
     */
    @Schema(description = "驾驶证证号")
    private String driverLicenseIdNo;
    /**
     *  驾驶证档案编号
     */
    @Schema(description = "驾驶证档案编号")
    private String driverLicenseFileNo;
    /**
     *  准驾车型
     */
    @Schema(description = "准驾车型")
    private String driverLicenseType;
    /**
     *  驾驶证有效期限(起始时间)
     */
    @JsonFormat(pattern = DateUtil.PATTERN_DATE,timezone = "GMT+8")
    @Schema(description = "驾驶证有效期限(起始时间)")
    private Date driverLicenseValidDateStart;
    /**
     * 磅单车牌号
     */
    @Schema(description = "磅单车牌号")
    private String poundPlateNo;
    /**
     *  磅单供货日期
     */
    @JsonFormat(pattern = DateUtil.PATTERN_DATE,timezone = "GMT+8")
    @Schema(description = "磅单供货日期")
    private Date supplyMaterialDate;
    /**
     * 货物名称
     */
    @Schema(description = "货物名称")
    private String productName;
    /**
     * 规格料型
     */
    @Schema(description = "规格料型")
    private String specificationMaterial;
    /**
     *  单位
     */
    @Schema(description = "单位")
    private String unitMeasure;
    /**
     *  ⽑重
     */
    @JsonSerialize(using = ToStringSerializer.class, nullsUsing = NullSerializer.class)
    @Schema(description = "⽑重")
    private BigDecimal grossWeight;
    /**
     *  ⽪重
     */
    @JsonSerialize(using = ToStringSerializer.class, nullsUsing = NullSerializer.class)
    @Schema(description = "⽪重")
    private BigDecimal skinWeight;
    /**
     *  净重
     */
    @JsonSerialize(using = ToStringSerializer.class, nullsUsing = NullSerializer.class)
    @Schema(description = "净重")
    private BigDecimal netWeight;
    /**
     *  扣重
     */
    @JsonSerialize(using = ToStringSerializer.class, nullsUsing = NullSerializer.class)
    @Schema(description = "扣重")
    private BigDecimal miscellaneousWeight;
    /**
     *  实际净重
     */
    @JsonSerialize(using = ToStringSerializer.class, nullsUsing = NullSerializer.class)
    @Schema(description = "实际净重")
    private BigDecimal realityWeight;
    /**
     * 磅单附件索引，只取一个，其余的丢弃
     */
    @Schema(description = "磅单附件索引，只取一个，其余的丢弃")
    private List<Integer> poundIndexes = new ArrayList<>();
    /**
     * 驾驶证附件索引，只取一个，其余的丢弃
     */
    @Schema(description = "驾驶证附件索引，只取一个，其余的丢弃")
    private List<Integer> driverLicenseIndexes = new ArrayList<>();
    /**
     * 行驶证附件索引，只取一个，其余的丢弃
     */
    @Schema(description = "行驶证附件索引，只取一个，其余的丢弃")
    private List<Integer> vehicleLicenseIndexes = new ArrayList<>();
    /**
     * 车头附件索引，只取一个，其余的丢弃
     */
    @Schema(description = "车头附件索引，只取一个，其余的丢弃")
    private List<Integer> carFrontIndexes = new ArrayList<>();
    /**
     * 车尾附件索引，只取一个，其余的丢弃
     */
    @Schema(description = "车尾附件索引，只取一个，其余的丢弃")
    private List<Integer> carBackIndexes = new ArrayList<>();
    /**
     * 其他附件索引
     */
    @Schema(description = "其他附件索引")
    private List<Integer> otherIndexes = new ArrayList<>();
}
