package com.ltgk.boat.domain.dto;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ltgk.common.core.page.BasePage;
import com.ltgk.common.validation.groups.Update;
import com.ltgk.crew.domain.entity.DsCrewOutCheck;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 渔船出港信息数据传输对象
 *
 * @author Qi ChengBin
 * @date 2024-12-19
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "渔船出港信息数据传输对象", description = "渔船出港信息数据传输对象")
public class DsOutPortDTO extends BasePage {

    @ApiModelProperty(value = "主键")
    @NotBlank(message = "渔船出港信息主键不能为空！", groups = {Update.class})
    @JsonProperty("id")
    private String id;

    @JsonProperty("portId")
    @ApiModelProperty(value = "所属渔港id")
    private String portId;

    @JsonProperty("portName")
    @ApiModelProperty(value = "所属渔港名称")
    private String portName;

    @JsonProperty("boatId")
    @ApiModelProperty(value = "船舶id")
    private String boatId;

    @JsonProperty("boatName")
    @ApiModelProperty(value = "船名号")
    private String boatName;

    @JsonProperty("areaCode")
    @ApiModelProperty(value = "行政区域编码")
    private String areaCode;

    @JsonProperty("areaName")
    @ApiModelProperty(value = "行政区域名称")
    private String areaName;

    @JsonProperty("createBy")
    @ApiModelProperty(value = "创建者")
    private String createBy;

    @JsonProperty("createAt")
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createAt;

    @JsonProperty("updateBy")
    @ApiModelProperty(value = "更新者")
    private String updateBy;

    @JsonProperty("updateAt")
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateAt;

    @JsonProperty("remark")
    @ApiModelProperty(value = "备注")
    private String remark;

    @JsonProperty("registerName")
    @ApiModelProperty(value = "登记人员姓名")
    private String registerName;

    @JsonProperty("registerPhone")
    @ApiModelProperty(value = "登记人员手机号")
    private String registerPhone;

    @JsonProperty("registerUnit")
    @ApiModelProperty(value = "登记人员单位")
    private String registerUnit;

    @JsonProperty("registerType")
    @ApiModelProperty(value = "登记人员类型")
    private String registerType;

    @JsonProperty("outTime")
    @ApiModelProperty(value = "出港时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date outTime;

    @JsonProperty("boatMaterial")
    @ApiModelProperty(value = "船舶材质")
    private String boatMaterial;

    @JsonProperty("length")
    @ApiModelProperty(value = "船舶长度")
    private BigDecimal length;

    @JsonProperty("mainPower")
    @ApiModelProperty(value = "船舶功率")
    private BigDecimal mainPower;

    @JsonProperty("examineCode")
    @ApiModelProperty(value = "检验国籍证书")
    private String examineCode;

    @JsonProperty("nationalityCode")
    @ApiModelProperty(value = "国籍证书")
    private String nationalityCode;

    @JsonProperty("aisNumber")
    @ApiModelProperty(value = "ais号")
    private String aisNumber;

    @JsonProperty("bdId")
    @ApiModelProperty(value = "北斗id")
    private String bdId;

    @JsonProperty("status")
    @ApiModelProperty(value = "状态:0=未审核，1=审核通过，2=拒绝")
    private Integer status;

    @JsonProperty("lifeRaftsNum")
    @ApiModelProperty(value = "救生筏数量")
    private Integer lifeRaftsNum;

    @JsonProperty("fireExtinguishersNum")
    @ApiModelProperty(value = "灭火器数量")
    private Integer fireExtinguishersNum;

    @JsonProperty("lifeJacketsNum")
    @ApiModelProperty(value = "救生衣数量")
    private Integer lifeJacketsNum;

    @JsonProperty("lifebuoysNum")
    @ApiModelProperty(value = "救生圈数量")
    private Integer lifebuoysNum;

    @JsonProperty("captionSign")
    @ApiModelProperty(value = "船长签名")
    private String captionSign;

    @JsonProperty("personnelSign")
    @ApiModelProperty(value = "港务人员签名")
    private String personnelSign;

    @JsonProperty("reviewDesc")
    @ApiModelProperty(value = "核验说明")
    private String reviewDesc;

    @JsonProperty("isAbnormal")
    @ApiModelProperty(value = "是否异常")
    private String isAbnormal;

    @JsonProperty("isLocal")
    @ApiModelProperty(value = "是否本地")
    private Integer isLocal = 0;

    @JsonProperty("reviewUserId")
    @ApiModelProperty(value = "审核人id")
    private String reviewUserId;

    @JsonProperty("reviewTime")
    @ApiModelProperty(value = "审核时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date reviewTime;

    @JsonProperty("reviewUserName")
    @ApiModelProperty(value = "审核人")
    private String reviewUserName;

    @ApiModelProperty(value = "船员ids")
    @JsonProperty("crewIds")
    private String crewIds;

    @ApiModelProperty(value = "持证情况 1齐全 0无")
    @JsonProperty("holdCertificate")
    private Integer holdCertificate;

    @ApiModelProperty(value = "持证情况照片")
    @JsonProperty("holdCertificateUrl")
    private String holdCertificateUrl;

    @ApiModelProperty(value = "渔船标识 1清楚 0不清楚")
    @JsonProperty("shipFlag")
    private Integer shipFlag;

    @ApiModelProperty(value = "渔船标识照片")
    @JsonProperty("shipFlagUrl")
    private String shipFlagUrl;

    @ApiModelProperty(value = "安防设施 1合格 0不合格")
    @JsonProperty("securityMeasures")
    private Integer securityMeasures;

    @ApiModelProperty(value = "网具标准 1合格 0不合格")
    @JsonProperty("standard")
    private Integer standard;

    @ApiModelProperty(value = "北斗设备状况 1开机 2关机 0无")
    @JsonProperty("bdStatus")
    private Integer bdStatus;

    @ApiModelProperty(value = "北斗设备状况照片")
    @JsonProperty("bdStatusUrl")
    private String bdStatusUrl;

    @ApiModelProperty(value = "ais设备状况 1开机 2关机 0无")
    @JsonProperty("aisStatus")
    private Integer aisStatus;

    @ApiModelProperty(value = "ais设备状况照片")
    @JsonProperty("aisStatusUrl")
    private String aisStatusUrl;

    @ApiModelProperty(value = "救生筏状况 1有 0无")
    @JsonProperty("lifeRaftsStatus")
    private Integer lifeRaftsStatus;

    @ApiModelProperty(value = "灭火器状况 1有 0无")
    @JsonProperty("fireExtinguishersStatus")
    private Integer fireExtinguishersStatus;

    @ApiModelProperty(value = "救生衣状况 1有 0无")
    @JsonProperty("lifeJacketsStatus")
    private Integer lifeJacketsStatus;

    @ApiModelProperty(value = "救生圈状况 1有 0无")
    @JsonProperty("lifebuoysStatus")
    private Integer lifebuoysStatus;

    @ApiModelProperty(value = "救生消防情况照片URL")
    @JsonProperty("lifesavingFirefightingUrl")
    private String lifesavingFirefightingUrl;

    @JsonProperty("ActualOutTime")
    @ApiModelProperty(value = "实际出港时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date ActualOutTime;

    @JsonProperty("planWorkArea")
    @ApiModelProperty(value = "计划作业渔区")
    private String planWorkArea;

    @ApiModelProperty(value = "渔船号灯号型：是否正常，1是0否")
    @JsonProperty("lampStatus")
    private Integer lampStatus;

    @ApiModelProperty(value = "渔船号灯号型照片")
    @JsonProperty("lampStatusUrl")
    private String lampStatusUrl;

    @ApiModelProperty(value = "渔船保险是否正常：1-是，0-否")
    @JsonProperty("boatInsuranceStatus")
    private Integer boatInsuranceStatus;

    @ApiModelProperty(value = "渔船保险照片")
    @JsonProperty("boatInsuranceStatusUrl")
    private String boatInsuranceStatusUrl;

    @ApiModelProperty(value = "渔船安全检查是否正常：1-是，0-否")
    @JsonProperty("boatSafeStatus")
    private Integer boatSafeStatus;

    @ApiModelProperty(value = "渔船安全检查照片")
    @JsonProperty("boatSafeStatusUrl")
    private String boatSafeStatusUrl;

    @ApiModelProperty(value = "渔船执法安全检查是否正常：1-是，0-否")
    @JsonProperty("boatLawEnforcementSafe")
    private Integer boatLawEnforcementSafe;

    @ApiModelProperty(value = "渔船执法安全检查照片")
    @JsonProperty("boatLawEnforcementSafeUrl")
    private String boatLawEnforcementSafeUrl;

    @ApiModelProperty(value = "检查照片url")
    @JsonProperty("checkUrl")
    private String checkUrl;

    @ApiModelProperty(value = "船籍-外地渔船使用")
    @JsonProperty("homePort")
    private String homePort;

    @ApiModelProperty(value = "船员数据-外地渔船使用")
    @JsonProperty("crewOutCheckList")
    private List<DsCrewOutCheck> crewOutCheckList;

    @ApiModelProperty(value = "出港凭证")
    @JsonProperty("outVoucher")
    @TableField("out_voucher")
    private String outVoucher;

    @ApiModelProperty(value = "船东名称")
    @JsonProperty("holderName")
    private String holderName;

    @ApiModelProperty(value = "船东电话")
    @JsonProperty("holderPhone")
    private String holderPhone;
}
