package org.ta.pddserver.model.pddjy.request;

import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

@Data
public class PddServiceConsoFirstBizActionNotifyRequest implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 服务商code（必填）
     */
    private String providerCode;

    /**
     * 集运单号（必填）
     */
    private String logisticsOrderCode;

    /**
     * 实操动作（必填）
     * <p>warehouse_sign：仓库签收；warehouse_reject_sign：仓库拒签；destroy：包裹销毁</p>
     */
    private String bizAction;

    /**
     * 实操描述（必填）
     */
    private String bizActionDesc;

    /**
     * 实操时间（必填，格式：yyyy-MM-dd HH:mm:ss）
     */
    private String executeTime;

    /**
     * 时区（非必填，默认北京时区：UTC+8）
     */
    private String timeZone;

    /**
     * 运单号（必填）
     */
    private String mailNo;

    /**
     * 快递公司编码（必填）
     */
    private String expressCode;

    /**
     * 包裹信息（非必填，拒签原因为超大超重时必传）
     */
    private PackageInfo packageInfo;

    /**
     * 二级拒签原因（必填，当拒签原因为海关违禁品或运输品类限制时需回传）
     * <p>1-含活性物质；2-管控品；3-危险品；4-超量品；5-食品-包装/存储/保质期不符合要求；6-侵权仿牌；99-其它</p>
     */
    private Integer subCode;

    /**
     * 实操结果信息（必填）
     */
    private Result result;


    /**
     * 包裹信息
     */
    @Data
    public static class PackageInfo {
        /**
         * 包裹长度（必填，单位：厘米）
         */
        private Long length;

        /**
         * 包裹宽度（必填，单位：厘米）
         */
        private Long width;

        /**
         * 包裹高度（必填，单位：厘米）
         */
        private Long height;

        /**
         * 实重重量（必填，单位：克）
         */
        private Long actualWeight;

        /**
         * 计费重量（非必填，单位：克）
         */
        private Long weight;

        /**
         * 抛比系数（非必填）
         */
        private Integer vwFactor;
    }


    /**
     * 实操结果信息
     */
    @Data
    public static class Result {
        /**
         * 实操结果code（必填）
         * <p>bizAction为warehouse_sign、destroy时填0；为warehouse_reject_sign时填非零错误码</p>
         */
        private Integer code;

        /**
         * 实操结果描述（非必填，code不等于0时必填）
         */
        private String desc;

        /**
         * 结果信息描述（非必填，code不等于0时必填）
         */
        private String remark;
    }


}
