package cn.iocoder.yudao.module.order.dto;

import cn.iocoder.yudao.module.order.vo.approval.OrderApprovalBackVO;
import cn.iocoder.yudao.module.order.vo.orderCargoControlPick.OrderCargoControlPickBackVO;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

@Data
@ApiModel(value = "控货订单放货详情返回值")
public class OrderCargoControlReleaseInfoDto {

    @ApiModelProperty(value = "id")
    private Long id;

    @ExcelProperty("订单id")
    @ApiModelProperty(value = "订单id")
    private Long orderId;

    @ApiModelProperty(value = "订单编号")
    private String orderNo;

    @ApiModelProperty(value = "提单号")
    private String tidanNo;

    @ApiModelProperty(value = "唛头")
    private String marks;


    @ApiModelProperty(value = "增值服务(多个使用','连接)：1 集运服务 2 海外仓")
    private String type;

    @ApiModelProperty(value = "货柜自编号")
    private String containerNumber;

    @ExcelProperty("是否控货")
    @ApiModelProperty(value = "是否控货")
    private Boolean isCargoControl;

    @ExcelProperty("0 控货中；1 已放完货；2 部分控货")
    @ApiModelProperty(value = "0 控货中；1 已放完货；2 部分控货")
    private Integer cargoControlStatus;

    @ApiModelProperty(value = "状态")
    private Integer status;

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

    @ApiModelProperty(value = "操作人")
    private String operator;

    @ApiModelProperty(value = "入仓数量")
    private Integer sumQuantity = 0;

    @ExcelProperty("入仓箱数")
    @ApiModelProperty(value = "入仓箱数")
    private Integer sumNum = 0;

    @ExcelProperty("入仓体积")
    @ApiModelProperty(value = "入仓体积")
    private BigDecimal sumVolume = BigDecimal.ZERO;

    @ExcelProperty("入仓重量")
    @ApiModelProperty(value = "入仓重量")
    private BigDecimal sumWeight = BigDecimal.ZERO;

    @ApiModelProperty(value = "收费重量")
    private BigDecimal chargeWeight = BigDecimal.ZERO;

    @ApiModelProperty(value = "收费体积")
    private BigDecimal chargeVolume = BigDecimal.ZERO;

    @ExcelProperty("已放货箱数")
    @ApiModelProperty(value = "已放货箱数")
    private Integer releaseNum = 0;

    @ExcelProperty("放货箱数")
    @ApiModelProperty(value = "放货箱数")
    private Integer pickNum = 0;

    @ExcelProperty("放货数量")
    @ApiModelProperty(value = "放货数量")
    private Integer pickQuantity = 0;

    @ExcelProperty("放货体积")
    @ApiModelProperty(value = "放货体积")
    private BigDecimal pickVolume = BigDecimal.ZERO;

    @ExcelProperty("放货重量")
    @ApiModelProperty(value = "放货重量")
    private BigDecimal pickWeight = BigDecimal.ZERO;

    @ExcelProperty("控货人名字")
    @ApiModelProperty(value = "控货人名字")
    private String name;


    @ExcelProperty("控货人名字(英文)")
    @ApiModelProperty(value = "控货人名字(英文)")
    private String nameEn;

    @ExcelProperty("控货人手机")
    @ApiModelProperty(value = "控货人手机")
    private String phone;

    @ApiModelProperty(value = "控人手机国家区号")
    private String dialCode;


    @ApiModelProperty(value = "收货人姓名")
    private String consigneeName;

    @ApiModelProperty(value = "收货人编号")
    private String consigneeNumber;

    @ApiModelProperty(value = "收货人Id")
    private Long consigneeId;

    @ApiModelProperty(value = "收货人姓名(英文)")
    private String consigneeNameEn;

    @ApiModelProperty(value = "收货人手机")
    private String consigneePhone;

    @ApiModelProperty(value = "收货人手机国家区号")
    private String consigneeCountryCode;

    @ApiModelProperty(value = "收货人邮箱")
    private String consigneeEmail;

    @ApiModelProperty(value = "发货人编号")
    private String consignerNumber;

    @ApiModelProperty(value = "发货人id")
    private Long consignerId;

    @ApiModelProperty(value = "运输方式")
    private Integer transportId;

    @ApiModelProperty(value = "卸柜/到仓时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private Date unloadTime;

    @ApiModelProperty(value = "放货日期")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private Date createTime;

    @ApiModelProperty(value = "复核日期")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private Date checkTime;

    @ApiModelProperty(value = "是否限制修改收货人")
    private Boolean isLimitUpdateConsignee;

    @ApiModelProperty(value = "放货锁定收货人到期时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private Date lockConsigneeTime;

    @ApiModelProperty(value = "放货锁定收货人天数")
    private Integer lockConsigneeDay;

    @ApiModelProperty(value = "放货详情记录列表")
    private List<OrderCargoControlPickBackVO> cargoControlPickBackVOList;

    @ApiModelProperty(value = "放货修改审批记录列表")
    private List<OrderApprovalBackVO> orderApprovalBackVOList;

    @ApiModelProperty(value = "始发地仓库中文名称")
    private String startTitleZh;

    @ApiModelProperty(value = "始发地仓库英文名称")
    private String startTitleEn;

    @ApiModelProperty(value = "始发地仓库法文名称")
    private String startTitleFr;

    @ApiModelProperty(value = "目的地城市中文名称")
    private String destCityTitleZh;

    @ApiModelProperty(value = "目的地城市英文名称")
    private String destCityTitleEn;

    @ApiModelProperty(value = "目的地城市法文名称")
    private String destCityTitleFr;

    @ApiModelProperty(value = "渠道名称")
    private String channelName;
}
