package cn.gov.customs.wxjy.analyze.pojo;

import cn.gov.customs.wxjy.common.annotation.Excel;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDateTime;

/**
 * @description 法检报关单表头
 * @author wangqian
 * @since 2025/11/4 上午10:16
 */
@Getter
@Setter
public class Entry implements Serializable {
  // 报关单号，18位，4位关区代码+4位年份+入境(1)/出境(0)+9位序列号
  private String id;

  // 报关单号，18位，4位关区代码+4位年份+入境(1)/出境(0)+9位序列号
  private String entryId;
  /** 维护状态 */
  private String mainStatus;

  /** 通关模式 */
  private String passMode;

  // 运输方式 2：水运 3：铁路 4：公路 5：空运 6：邮件 9：其它
  private String trafMode;

  // 出入境标志 I：入境 E：出境
  private String ieFlag;

  // 进出境口岸：4位
  private String iePort;

  // 申报口岸：业务现场关区代码：4位
  private String declPort;

  // 所属海关：4位
  private String customsCode;

  // 货物运抵(进出口)时间
  private LocalDateTime ieDate;

  // 申报时间
  private LocalDateTime declDate;

  /** 是否提前申报标记 */
  private String declAdvanceFlag;

  /** 自动受理时间 */
  private LocalDateTime acceptDate;

  // 自动受理时间：对应ENTRY_WORKFLOW表STEP_ID='10000000'节点
  // TODO
  // 注：(用户建议)对于提前申报的单子，由于货物出入境日期晚于申报日期，自动受理时间会早于货物出入境日期，这种情况将自动受理时间重新赋值为货物出入境日期
  private LocalDateTime exInPortDate;

  // 境内收发货人代码
  private String consignScc;

  private String consignCode;

  // 境内收发货人名称
  private String consignName;

  /**
   * 境外收发货人代码
   */
  private String frnConsignCode;
  /**
   * 境外收发货人名称(中文)
   */
  private String frnConsignName;

  // 监管方式
  private String tradeMode;

  // 贸易国别代码
  private String tradeCountry;

  //货运量毛重
  private BigDecimal grossWt;

  //货运量净重
  private BigDecimal netWt;

  /** 货运值人民币 */
  private BigDecimal rmbPrice;

  /** 货运值美元 */
  private BigDecimal usdPrice;

  /** 集装箱数量 */
  private BigInteger container;

  // 报关模式（部分订单既是两步申报又是提前申报，做多两种模式所以该字段采用逗号存储，方便组合查询）：
  // 1：一般申报 2：两步申报3：提前申报
  private String declMode;

  // 报关单状态 1：未放行 2：已放行未结关3：已结关
  private String declStatus;

  // 现场接单时间：对应ENTRY_WORKFLOW表STEP_ID='30000000'节点(只要PROC_RESULT为G的)
  private LocalDateTime orderReceiveDate;

  /** 接单耗时即单证审核时长(秒) */
  private BigDecimal orderReceiveCost;

  // 单证放行时间：ENTRY_WORKFLOW '70000000'节点时间
  private LocalDateTime certRlsDate;

  // 担保放行时间：对应ENTRY_WORKFLOW表STEP_ID='81000000'节点
  private LocalDateTime preReleaseDate;

  // 申报单位代码
  private String agentCode;

  // 申报单位名称
  private String agentName;

  // 备注
  private String noteS;

  // 货主单位代码/h2018生产销售单位代码
  private String ownerCode;

  // 货主单位名称/h2018生产销售单位名称
  private String ownerName;

  // 转关数据发送时间
  private LocalDateTime examDate;

  // 转关数据核销时间
  private LocalDateTime checkDate;

  // 完整申报电子申报时间
  private LocalDateTime compEleDate;

  // 结关时间
  private LocalDateTime releaseDate;

  /** 海关通关时间(秒) */
  private BigDecimal cuCost;

  /** 总体通关时间(秒) */
  @Excel(name = "整体通关时间(秒)")
  private BigDecimal totalCost;

  /** 申报前准备时间(秒) */
  @Excel(name = "申报前准备时间(秒)")
  private BigDecimal beforeDeclCost;

  // 报关单是否专业审单（环节代码33000000不为9999标记）：1-是，其它-否
  private String profVerifyFlag;

  // 报关单是否新两步申报标记：1-是，其它-否
  private String newTwoStepFlag;

  //20250731新增业务
  //电子申报时间：对应ENTRY_WORKFLOW表STEP_ID='00000000'节点
  private LocalDateTime eleDeclDate;

  //排查处置/现场验估时间：对应ENTRY_WORKFLOW表STEP_ID='26000000'节点(只要PROC_RESULT为M的)
  private LocalDateTime assessStartDate;

  //验估处置完毕时间：对应ENTRY_WORKFLOW表STEP_ID='26000000'节点(只要PROC_RESULT为G的)
  private LocalDateTime assessEndDate;

  /** 退单时间 */
  private LocalDateTime refundDate;

  /** 是否退过单标记 */
  private String refundFlag;

  // 查验指令下达时间：来源CI_CHECK_MAN_WORK_HEAD(对接物流辅助系统进口理货时间和指令下达时间哪个晚哪个就是下发时间)
  private LocalDateTime manCreateTime;

  // 查验开始时间：来源CI_CHECK_MAN_WORK_HEAD
  private LocalDateTime manChkTimeStart;

  // 查验关区：4位
  private String checkCustomsCode;

  // 是否查验：1：是，0：否
  private String checkFlag;

  // 查验结束时间：来源CI_CHECK_MAN_WORK_HEAD
  private LocalDateTime manChkTimeEnd;

  // 处理结果
  private String manProcResult;

  // 处理意见
  private String manProcIdea;

  // 商品序号
  private BigDecimal gNo;

  //按综合处杨科要求在新组合查询功能新增根据商品名称模糊查询
  private String codeTs;

  /**
   * 检验检疫编码
   */
  private String iqCode;

  //按综合处杨科要求在新组合查询功能新增根据商品名称模糊查询    wq
  private String gName;

  private String gModel;

  //第一（法定）数量
  private BigDecimal qty1;

  // 货运值人民币
  private BigDecimal rmbPriceList;

  // 货运值美元
  private BigDecimal usdPriceList;

  //六位商品编码  2024-10-16
  private String codeTsShort;

  //每项商品需要监管证件
  private String gCertFlag;

  /**
   * UN编码
   */
  private String ungid;

  /**
   * 非危险化学品
   */
  private String ungFlag;
  /**
   * 危包规格
   */
  private String ungModel;
  /**
   * 危包类别
   */
  private String ungClassify;

  /**
   * 危险货物名称
   */
  private String ungGName;
  /**
   * 货物属性代码
   */
  private String productCharCode;

  /**
   * 危险品类型（1、危化品；2、危险货物；3、危化品兼危险货物）
   */
  private String goodsType;
}
