package com.jsowell.thirdparty.platform.domain;

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.*;

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

/**
 * 充电站充电订单信息
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ChargeOrderInfo {
    /**
     * 平台运营商ID
     * OperatorID
     * 充换电平台运营商ID
     * 是
     * 字符串
     * 9字符
     */
    @JSONField(name = "OperatorID")
    private String operatorID;

    /**
     * 设备所属方
     * IDEquipmentOwnerID
     * 场站属主的组织机构代码
     * 是
     * 字符串
     * 9字符
     */
    @JSONField(name = "EquipmentOwnerID")
    private String equipmentOwnerID;

    /**
     * 充电站
     * IDStationID
     * 运营商自定义的唯一编码
     * 是
     * 字符串
     * ≤64字符
     */
    @JSONField(name = "StationID")
    private String stationID;

    /**
     * 充电设备
     * IDEquipmentID
     * 充电设备唯一标识，运营商自定义，同一个OperatorID内唯一
     * 是
     * 字符串
     * ≤64字符
     */
    @JSONField(name = "EquipmentID")
    private String equipmentID;

    /**
     * 充电订单号
     * OrderNo
     * 格式“运营商ID+唯一编号”，不超过64个字符
     * 是
     * 字符串
     * ≤64字符
     */
    @JSONField(name = "OrderNo")
    private String orderNo;

    /**
     * 充电接口唯一标识
     * ConnectorID
     * 充电接口唯一标识，运营商自定义，同一个OperatorID内唯一
     * 是
     * 字符串
     * ≤64字符
     */
    @JSONField(name = "ConnectorID")
    private String connectorID;

    /**
     * 车牌号
     * LicensePlate
     * 否
     * 字符串
     * ≤20字符
     */
    @JSONField(name = "LicensePlate")
    private String licensePlate;

    /**
     * 车辆唯一识别码
     * VIN
     * 参照GB/T27930标准规定
     * 否
     * 字符串
     * ≤17个字符
     */
    @JSONField(name = "VIN")
    private String vin;

    /**
     * 充电开始
     * SOCStartSOC
     * 参数范围：0.0-100.0注：设备接口分类为2的，该字段为必填
     * 是
     * 浮点型
     * ≤6字符，保留小数点后1位
     */
    @JSONField(name = "StartSOC")
    private String startSOC;

    /**
     * 充电结束
     * SOCEndSOC
     * 参数范围：0.0-100.0注：设备接口分类为2的，该字段为必填
     * 是
     * 浮点型
     * ≤6字符，保留小数点后1位
     */
    @JSONField(name = "EndSOC")
    private String endSOC;

    /**
     * 本单开始充电时间
     * StartTime
     * yyyy-MM-ddHH:mm:ss
     * 是
     * 字符串
     * ≤24字符
     */
    @JSONField(name = "StartTime")
    private String startTime;

    /**
     * 结束充电时间
     * EndTime
     * yyyy-MM-ddHH:mm:ss
     * 是
     * 字符串
     * ≤24字符
     */
    @JSONField(name = "EndTime")
    private String endTime;

    /**
     * 累计充电量
     * TotalPower
     * 单位kWh
     * 是
     * 浮点数≤8字符，小数点后4位
     */
    @JSONField(name = "TotalPower")
    private BigDecimal totalPower;

    /**
     * 尖阶段电量
     * CuspElect
     * 单位kWh
     * 否
     * 浮点型
     * ≤8字符，小数点后4位
     */
    @JSONField(name = "CuspElect")
    private BigDecimal cuspElect;

    /**
     * 峰阶段电量
     * PeakElect
     * 单位kWh
     * 否
     * 浮点型
     * ≤8字符，小数点后4位
     */
    @JSONField(name = "PeakElect")
    private BigDecimal peakElect;

    /**
     * 平阶段电量
     * FlatElect
     * 单位kWh
     * 否
     * 浮点型
     * ≤8字符
     */
    @JSONField(name = "FlatElect")
    private BigDecimal flatElect;

    /**
     * 谷阶段电量
     * ValleyElect
     * 单位kWh
     * 否
     * 浮点型
     * ≤8字符，小数点后4位
     */
    @JSONField(name = "ValleyElect")
    private BigDecimal valleyElect;

    /**
     * 推送时间
     * PushTimeStamp
     * yyyy-MM-ddHH:mm:ss，充电设备推送给运营商平台时间
     * 是
     * 字符串
     * ≤24字符
     */
    @JSONField(name = "PushTimeStamp")
    private String pushTimeStamp;

    /**
     * 总电费
     * TotalElecMoney
     * 本单总电费，单位：元，小数点后4位
     * 是
     * 浮点数
     * ≤8字符，小数点后4位
     */
    @JSONField(name = "TotalElecMoney")
    private BigDecimal totalElecMoney;

    /**
     * 总服务费
     * TotalSeviceMoney
     * 本单总服务费，单位：元，小数点后4位
     * 是
     * 浮点数
     * ≤8字符，小数点后4位
     */
    @JSONField(name = "TotalSeviceMoney")
    private BigDecimal totalSeviceMoney;

    /**
     * 累计总金额
     * TotalMoney
     * 本单总金额，单位：元，小数点后4位
     * 是
     * 浮点数
     * ≤8字符，小数点后4位
     */
    @JSONField(name = "TotalMoney")
    private BigDecimal totalMoney;

    /**
     * 充电结束原因
     * StopReason
     * 0：用户手动停止充电1：客户归属地运营商平台停止充电2：BMS停止充电3：充电机设备故障4：连接器断开5~99：自定义
     * 是
     * 整型
     * ≤4字符
     */
    @JSONField(name = "StopReason")
    private Integer stopReason;

    /**
     * 充电结束原因描述
     * StopDesc
     * 充电结束原因为自定义时必填
     * 是
     * 字符串
     * ≤500字符
     */
    @JSONField(name = "StopDesc")
    private String stopDesc;

    /**
     * 时段数
     * SumPeriod
     * 此单跨越的分段计价的不同时段，范围：0～32
     * 否
     * 整型
     * ≤2字符
     */
    @JSONField(name = "SumPeriod")
    private Integer sumPeriod;

    /**
     * 充电明细信息列表
     * ChargeDetails
     * 详见充电明细信息（SupChargeDetails）
     * 否
     * SupChargeDetails数组
     */
    @JSONField(name = "ChargeDetails")
    private List<SupChargeDetails> chargeDetails;

}
