package com.bocloud.cmp.model.common;

import com.bocloud.common.utils.DateDeserializer;
import com.bocloud.common.utils.DateSerializer;
import com.bocloud.nms.enums.ChargeCommon;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * 订单
 *
 * @author wangyu
 * @version 1.0
 * @since 2020年3月10日
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ServiceOrder {

    /**
     * id
     */
    private Long id;
    /**
     * 订单编号
     */
    private String sn;
    /**
     * 收费模式：PostCharge,PreCharge
     */

    private ChargeCommon.ChargeMode chargeMode;
    /**
     * 是否接受SLA
     */

    private Boolean slaAgreed;
    /**
     * 资源状态:creating,ready,failed,exception
     */

    private ChargeCommon.ResourceStatus resourceStatus;
    /**
     * 订单状态：unpay[未支付],paid【已支付】,canceld【已取消】
     */

    private ChargeCommon.OrderStatus orderStatus;

    /**
     * 订单类型
     */

    private ChargeCommon.Type type;
    /**
     * 用户ID
     */

    private Long userId;

    /**
     * 业务ID
     */

    private Long businessId;
    /**
     * 项目ID
     */

    private Long projectId;
    /**
     * 租户ID
     */

    private Long tenantId;
    /**
     * 优惠券ID
     */

    private Long couponId;
    /**
     * 是否删除
     */

    private Boolean deleted;
    /**
     * 创建时间
     */
    @JsonSerialize(using = DateSerializer.class)
    @JsonDeserialize(using = DateDeserializer.class)
    private Date gmtCreate;
    /**
     * 修改时间
     */
    @JsonSerialize(using = DateSerializer.class)
    @JsonDeserialize(using = DateDeserializer.class)
    private Date gmtModify;
    /**
     * 订单备注
     */

    private String remarks;
    /**
     * 异常信息：如资源创建异常，超时未支付等消息
     */

    private String message;
    /**
     * 申请参数
     */

    private String applyParam;
    /**
     * 服务编码
     */

    private String serviceCode;
    /**
     * 关联的云平台id
     */

    private Long vendorId;
    /**
     * 是否自动续订
     */

    private Boolean autoRenew;
    /**
     * 平台名称
     */

    private String vendorName;

    /**
     * 用户名称
     */

    private String userName;
    /**
     * 租户名称
     */

    private String tenantName;
    /**
     * 优惠券名称
     */

    private String couponName;
    /**
     * 订单总金额
     */

    private BigDecimal money;
    /**
     * 订单明细
     */

    private List<OrderItem> items;
    /**
     * 服务名称
     */

    private String serviceName;

    private String projectName;
}
