package com.prolog.rdc.tms.model.dto.carrier.settlement;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.prolog.rdc.tms.model.dto.common.BmsBaseDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

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

/**
 * @author hongbo.pan
 * @date 2023/6/25
 */
@Data
public class CarrierSettlementFeeDetailDTO extends BmsBaseDTO {

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

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

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

    @ApiModelProperty(value = "费用编码")
    private String expenseCode;

    @ApiModelProperty(value = "费用名称")
    private String expenseName;

    @ApiModelProperty(value = "费用类别")
    private Integer expenseType;

    @ApiModelProperty(value = "费用类别")
    private String expenseTypeName;

    @ApiModelProperty(value = "费用科目编码")
    private String expenseAccountCode;

    @ApiModelProperty(value = "费用科目名称")
    private String expenseAccountName;

    @ApiModelProperty(value = "金额")
    private BigDecimal amount;

    @ApiModelProperty(value = "税点")
    private String taxPoint;

    @ApiModelProperty(value = "含税金额")
    private BigDecimal taxAmt;

    @ApiModelProperty(value = "1:税前，0：税后")
    private Integer isPreTax;

    @ApiModelProperty(value = "无税金额")
    private BigDecimal noTaxAmt;

    @ApiModelProperty(value = "税额")
    private BigDecimal tax;

    @ApiModelProperty(value = "费用说明")
    private String memo;

    @ApiModelProperty(value = "费用单号")
    private String expenseNo;

    @ApiModelProperty(value = "费用状态 EXPENSE_STATUS 0：新增 1：审核中 2:正常")
    private Integer expenseStatus;

    @ApiModelProperty(value = "费用来源 1:价格表生成，2：手工录入")
    private Integer billingSource;

    @ApiModelProperty(value = "费用状态 0：新增，1：计费成功")
    private Integer billingStatus;

    @ApiModelProperty(value = "计费时间")
    private Date billingDate;

    @ApiModelProperty(value = "计费合同")
    private String billingContract;

    @ApiModelProperty(value = "计费价格表")
    private String billingPrice;

    @ApiModelProperty(value = "计费类型 EXPENSE_CLASSIFY")
    private String billingType;

    @ApiModelProperty(value = "计费失败原因")
    private String billingFailReason;

    @ApiModelProperty(value = "运单号")
    private String billNo;

    @ApiModelProperty(value = "派车单/运单 主键ID")
    private Long billId;

    @ApiModelProperty(value = "单据类型  运单/派车单 10 运单, 20 派车单")
    private Integer billType;

    @ApiModelProperty(value = "货主ID")
    private Long cargoOwnerId;

    @ApiModelProperty(value = "货主编码")
    private String cargoOwnerCode;

    @ApiModelProperty(value = "货主名称")
    private String cargoOwnerName;

    @ApiModelProperty(value = "订单ID")
    private String orderId;

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

    @ApiModelProperty(value = "结算公司")
    private String settlementCompany;

    @ApiModelProperty(value = "结算公司id")
    private String settlementCompanyId;

    @ApiModelProperty(value = "结算公司编码")
    private String settlementCompanyCode;

    @ApiModelProperty(value = "结算部门")
    private String settlementDepartment;

    @ApiModelProperty(value = "结算部门ID")
    private String settlementDepartmentId;

    @ApiModelProperty(value = "结算部门编码")
    private String settlementDepartmentCode;

    @ApiModelProperty(value = "支出总价 类型为支出的含税金额")
    private BigDecimal payAmount;

    @ApiModelProperty(value = "合同支出总价 类型为收入的来源是价格表生成 含税金额")
    private BigDecimal contractPayAmount;

    @ApiModelProperty(value = "同步状态")
    private Integer synchronousStatus;

    @ApiModelProperty(value = "同步状态")
    private String synchronousStatusName;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "同步时间")
    private Date synchronousDate;

    @ApiModelProperty(value = "同步失败原因")
    private String synchronousFailReason;

    @ApiModelProperty(value = "计费状态 1：计费成功，2：计费失败" )
    private Integer costStatus;

    @ApiModelProperty(value = "计费状态 1：计费成功，2：计费失败" )
    private String costStatusName;

    @ApiModelProperty(value = "计费失败原因")
    private String costFailReason;

    @ApiModelProperty(value = "核算状态 0:未核算，1：核算待提交，2：核算审批中，3:核算完成 ")
    private Integer settlementStatus;

    @ApiModelProperty(value = "核算状态 0:未核算，1：核算待提交，2：核算审批中，3:核算完成 ")
    private String settlementStatusName;

    @ApiModelProperty(value = "核算时间")
    private Date settlementDate;

    @ApiModelProperty(value = "运单状态")
    private Integer shipBillStatus;

    @ApiModelProperty(value = "运单状态")
    private String shipBillStatusName;

    @ApiModelProperty(value = "异常状态")
    private Integer abnormalStatus;

    @ApiModelProperty(value = "异常状态")
    private String abnormalStatusName;

    @ApiModelProperty(value = "承运商类型")
    private Integer carrierType;

    @ApiModelProperty(value = "承运商类型")
    private String carrierTypeName;

    @ApiModelProperty(value = "派车单主键ID")
    private Long loadingId;

    @ApiModelProperty(value = "调度单号")
    private String loadingBillNo;

    @ApiModelProperty(value = "承运商ID")
    private Long carrierId;

    @ApiModelProperty(value = "承运商编码")
    private String carrierCode;

    @ApiModelProperty(value = "承运商名称")
    private String carrierName;

    @ApiModelProperty(value = "司机ID")
    private Long driverId;

    @ApiModelProperty(value = "司机编号")
    private String driverCode;

    @ApiModelProperty(value = "司机名称")
    private String driverName;

    @ApiModelProperty(value = "司机手机号")
    private String driverPhoneNumber;

    @ApiModelProperty(value = "送货员姓名")
    private String deliveryName;

    @ApiModelProperty(value = "送货员电话")
    private String deliveryTel;

    @ApiModelProperty(value = "车辆ID")
    private Long vehicleId;

    @ApiModelProperty(value = "车辆编号")
    private String vehicleCode;

    @ApiModelProperty(value = "车牌号")
    private String vehicleName;

    @ApiModelProperty(value = "WMS单据ID")
    private String wmsOrderId;

    @ApiModelProperty(value = "WMS单据编号")
    private String wmsOrderNo;

    @ApiModelProperty(value = "订单类型")
    private Integer orderType;

    @ApiModelProperty(value = "订单类型")
    private String orderTypeName;

    @ApiModelProperty(value = "业务类型")
    private Integer orderBusinessType;

    @ApiModelProperty(value = "业务类型")
    private String orderBusinessTypeName;

    @ApiModelProperty(value = "配送方式")
    private Integer deliveryMethodType;

    @ApiModelProperty(value = "配送方式")
    private String deliveryMethodTypeName;

    @ApiModelProperty(value = "运输类型(运输模式)")
    private Integer transportType;

    @ApiModelProperty(value = "运输类型(运输模式)")
    private String transportTypeName;

    @ApiModelProperty(value = "温度要求")
    private Integer temperatureRequirement;

    @ApiModelProperty(value = "温度要求")
    private String temperatureRequirementName;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "下单时间")
    private Date orderDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "提交时间")
    private Date submitDate;

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

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "调度时间")
    private Date loadingDate;

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

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "启运日期")
    private Date startDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "送达日期")
    private Date deliveryDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "回单日期")
    private Date receiptDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "正本回单日期")
    private Date originalBackDate;

    @ApiModelProperty(value = "运输时效")
    private BigDecimal transportAging;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "完成日期")
    private Date completeDate;

    @ApiModelProperty(value = "发货方类型 数据字典SHIPPER_TYPE:1客户 2仓库 3供应商")
    private Integer shipperType;

    @ApiModelProperty(value = "发货方类型")
    private String shipperTypeName;

    @ApiModelProperty(value = "发货方单位ID")
    private Long shipperUnitId;

    @ApiModelProperty(value = "发货方单位编码")
    private String shipperUnitCode;

    @ApiModelProperty(value = "发货方单位名称")
    private String shipperUnitName;

    @ApiModelProperty(value = "发货方ID")
    private Long shipperId;

    @ApiModelProperty(value = "发货方编码")
    private String shipperCode;

    @ApiModelProperty(value = "发货方名称")
    private String shipperName;

    @ApiModelProperty(value = "发货方联系人")
    private String shipperContact;

    @ApiModelProperty(value = "发货方手机号")
    private String shipperPhoneNumber;

    @ApiModelProperty(value = "发货方座机号")
    private String shipperLandlineNumber;

    @ApiModelProperty(value = "发货方邮箱")
    private String shipperEmail;

    @ApiModelProperty(value = "发货方关联手机号")
    private String shipperRelatedPhoneNumber;

    @ApiModelProperty(value = "发货方省编码")
    private String shipperProvince;

    @ApiModelProperty(value = "发货方省名称")
    private String shipperProvinceName;

    @ApiModelProperty(value = "发货方市编码")
    private String shipperCity;

    @ApiModelProperty(value = "发货方市名称")
    private String shipperCityName;

    @ApiModelProperty(value = "发货方区/县编码")
    private String shipperDistrict;

    @ApiModelProperty(value = "发货方区/县名称")
    private String shipperDistrictName;

    @ApiModelProperty(value = "发货方详细地址")
    private String shipperAddress;

    @ApiModelProperty(value = "发货方经度")
    private BigDecimal shipperLongitude;

    @ApiModelProperty(value = "发货方纬度")
    private BigDecimal shipperLatitude;

    @ApiModelProperty(value = "发货方备注")
    private String shipperMemo;

    @ApiModelProperty(value = "始发地")
    private String shipperProvinceCityDistrict;

    @ApiModelProperty(value = "收货方类型 数据字典CONSIGNEE_TYPE:1客户 2仓库 3供应商")
    private Integer consigneeType;

    @ApiModelProperty(value = "收货方类型")
    private String consigneeTypeName;

    @ApiModelProperty(value = "收货方单位ID")
    private Long consigneeUnitId;

    @ApiModelProperty(value = "收货方单位编码")
    private String consigneeUnitCode;

    @ApiModelProperty(value = "收货方单位名称")
    private String consigneeUnitName;

    @ApiModelProperty(value = "收货方ID")
    private Long consigneeId;

    @ApiModelProperty(value = "收货方编码")
    private String consigneeCode;

    @ApiModelProperty(value = "收货方名称")
    private String consigneeName;

    @ApiModelProperty(value = "收货方联系人")
    private String consigneeContact;

    @ApiModelProperty(value = "收货方手机号")
    private String consigneePhoneNumber;

    @ApiModelProperty(value = "收货方座机号")
    private String consigneeLandlineNumber;

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

    @ApiModelProperty(value = "收货方关联手机号")
    private String consigneeRelatedPhoneNumber;

    @ApiModelProperty(value = "收货方省编码")
    private String consigneeProvince;

    @ApiModelProperty(value = "收货方省名称")
    private String consigneeProvinceName;

    @ApiModelProperty(value = "收货方市编码")
    private String consigneeCity;

    @ApiModelProperty(value = "收货方市名称")
    private String consigneeCityName;

    @ApiModelProperty(value = "收货方区/县编码")
    private String consigneeDistrict;

    @ApiModelProperty(value = "收货方区/县名称")
    private String consigneeDistrictName;

    @ApiModelProperty(value = "收货方详细地址")
    private String consigneeAddress;

    @ApiModelProperty(value = "收货方经度")
    private BigDecimal consigneeLongitude;

    @ApiModelProperty(value = "收货方纬度")
    private BigDecimal consigneeLatitude;

    @ApiModelProperty(value = "收货方备注")
    private String consigneeMemo;

    @ApiModelProperty(value = "目的地")
    private String consigneeProvinceCityDistrict;

    @ApiModelProperty(value = "回单图片 数据字典WHETHER:0否，1是")
    private Integer consigneeReturnOrderPicture;

    @ApiModelProperty(value = "总件数")
    private BigDecimal totalPayPcs;

    @ApiModelProperty(value = "总体积")
    private BigDecimal totalPayVolume;

    @ApiModelProperty(value = "总重量")
    private BigDecimal totalPayWeight;

    @ApiModelProperty(value = "包裹整件数")
    private BigDecimal packageWholePiece;

    @ApiModelProperty(value = "拼箱数")
    private BigDecimal packageLclPiece;

    @ApiModelProperty(value = "包裹总重量")
    private BigDecimal packageTotalWeight;

    @ApiModelProperty(value = "包裹总体积")
    private BigDecimal packageTotalVolume;

    @ApiModelProperty(value = "来源")
    private Integer source;

    @ApiModelProperty(value = "来源")
    private String sourceName;

    @ApiModelProperty(value = "导入批次号")
    private String importBatchNumber;

    @ApiModelProperty(value = "结算状态")
    private Integer checkStatus;

    @ApiModelProperty(value = "结算状态")
    private String checkStatusName;

}
