package com.zt.plat.module.qms.business.bus.controller.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import jakarta.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;

@Schema(description = "管理后台 - 委检登记业务新增/修改 Request VO")
@Data
public class BusinessSampleEntrustRegistrationSaveReqVO {

    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23276")
    private Long id;

    @Schema(description = "委托ID", example = "8978")
    private Long entrustId;

    @Schema(description = "委托单号", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "委托单号不能为空")
    private String entrustNumber;

    @Schema(description = "委托单位/送样单位", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "委托单位/送样单位不能为空")
    private String entrustUnit;

    @Schema(description = "委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托", requiredMode = Schema.RequiredMode.REQUIRED, example = "6609")
    @NotNull(message = "委托来源,西南铜委托、商检委托、内部委托、抽查委托、内审委托、生产委托不能为空")
    private Long configEntrustSourceId;

    @Schema(description = "样品数量", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "样品数量不能为空")
    private Integer sampleQuantity;

    @Schema(description = "任务数量")
    private Integer taskQuantity;

    @Schema(description = "已完成任务数量")
    private Integer taskFinishedQuantity;

    @Schema(description = "余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "余样要求,【字典】【jy_sample_entrust_remaine_requirement】余样返回、放弃不能为空")
    private String remaineSampleRequirement;

    @Schema(description = "创建方式,手动创建-manual、外部系统创建-interface")
    private String createWay;

    @Schema(description = "委托类型,委托登记-entrust_registration、检验委托-entrust_inspection", example = "2")
    private String entrustType;

    @Schema(description = "委托时间")
    private LocalDateTime entrustTime;

    @Schema(description = "送样人", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "送样人不能为空")
    private String sampleSender;

    @Schema(description = "送样日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "送样日期不能为空")
    private LocalDateTime sampleSendDate;

    @Schema(description = "收样人", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "收样人不能为空")
    private String sampleReceiver;

    @Schema(description = "收样日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "收样日期不能为空")
    private LocalDateTime sampleReceiveDate;

    @Schema(description = "样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @NotEmpty(message = "样品状态,【字典】【jy_sample_entrust_status】块状、粉末、颗粒、液体不能为空")
    private String sampleStatus;

    @Schema(description = "扩展信息数据集ID,T_DAT_COLT_FLD", requiredMode = Schema.RequiredMode.REQUIRED, example = "9517")
    @NotNull(message = "扩展信息数据集ID,T_DAT_COLT_FLD不能为空")
    private Long externalInfomationDataCollectionId;

    @Schema(description = "扩展信息")
    private String externalInfomation;

    @Schema(description = "委托单模板ID", example = "13752")
    private Long configReportTemplateId;

    @Schema(description = "委托单模板key")
    private String configReportTemplateKey;

    @Schema(description = "电话")
    private String tel;

    @Schema(description = "传真")
    private String fax;

    @Schema(description = "通讯地址")
    private String address;

    @Schema(description = "邮编")
    private String postal;

    @Schema(description = "E-mail")
    private String email;

    @Schema(description = "委托检测类别,【字典】【jy_sample_entrust_category】一般委托、仲裁委托")
    private String entrustCategory;

    @Schema(description = "样品类别(装港/卸港),【字典】【jy_sample_entrust_category】装港样、卸港样")
    private String sampleCategory;

    @Schema(description = "样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "样品来源,【字典】【jy_sample_entrust_origin】送样、邮寄、现场取样不能为空")
    private String sampleOrigin;

    @Schema(description = "保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "保密要求,【字典】【jy_sample_entrust_secrecy_requirement】要求对样品和文件保密、无保密要求不能为空")
    private String secrecyRequire;

    @Schema(description = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "检测方法,【字典】【jy_sample_entrust_assay_method】国标、行标、客户要求、检测方依据样品选择不能为空")
    private String assayMethod;

    @Schema(description = "是否物料检测标准登记,0-否，1-是")
    private Integer isMaterialAssayStandard;

    @Schema(description = "登记状态,in_progress-登记中、submit-已提交", example = "1")
    private String registrationStatus;

    @Schema(description = "数据校验状态,success-数据校验成功、fail-数据校验失败", example = "2")
    private String dataCheckStatus;

    @Schema(description = "检验状态,unchecked-未检验；checked-已检验", example = "2")
    private String assayStatus;

    @Schema(description = "数据回报状态,unreturned-未回报；returned-已回报", example = "1")
    private String dataStatus;

    @Schema(description = "报告IDs", example = "26875")
    private String documentMainId;

    @Schema(description = "报告发送方式,【字典】【jy_sample_entrust_send_way】自取、邮寄、电话、传真、E-mail")
    private String documentSendWay;

    @Schema(description = "报告发送人")
    private String documentPublisher;

    @Schema(description = "报告发送日期")
    private LocalDateTime documentPublisherDate;

    @Schema(description = "报告接收人")
    private String documentReceiver;

    @Schema(description = "报告接收日期")
    private LocalDateTime documentReceiveDate;

    @Schema(description = "所属部门")
    private String systemDepartmentCode;

    @Schema(description = "乐观锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "13676")
    private Integer updateCount;

    @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "备注不能为空")
    private String remark;

}