package com.bocloud.ims.entity.resource;

import com.bocloud.common.utils.DateDeserializer;
import com.bocloud.common.utils.DateSerializer;
import com.bocloud.entity.annotations.*;
import com.bocloud.entity.bean.Generic;
import com.bocloud.entity.meta.PKStrategy;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
 * @author: yangzhenrong
 * @Date: 2021/3/4 17:18
 * @Description: 阿里云实例账单原始数据
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@Table("ali_cost")
public class AliCost extends Generic {
	@PK(value = PKStrategy.AUTO)
	private Long id;
	@Column("period")
	private String period;// 周期，MONTHLY、DAILY
	@Column("period_time")
	private String periodTime;// 统计时间
	@Column("vendor_id")
	private Long vendorId;
	@Column("region")
	private String region;// 地域。
	@Column("zone")
	private String zone;// 可用区。

	@Column("instance_id")
	private String instanceId;// 实例ID。
	@Column("nick_name")
	private String nickName;// 实例昵称
	@Column("instance_config")
	private String instanceConfig;// 实例详细配置。
	@Column("instance_spec")
	private String instanceSpec;// 实例规格。
	@Column("internet_ip")
	private String internetIp;// 公网IP。
	@Column("intranet_ip")
	private String intranetIp;// 内网IP。
	@Column("tag")
	private String tag;// 标签。
	@Column("resource_group")
	private String resourceGroup;// 资源组。

	@Column("product_code")
	private String productCode;// 产品代码。
	@Column("product_type")
	private String productType;// 产品类型。
	@Column("product_name")
	private String productName;// 产品名称。
	@Column("product_detail")
	private String productDetail;// 产品明细。

	@Column("billing_date")
	private String billingDate;// 账单日期，仅当Granularity为DAILY时有值，格式为YYYY-MM-DD。
	@Column("billing_type")
	private String billingType;// 计费方式。
	@Column("billing_item")
	private String billingItem;// 计费项。仅当IsBillingItem=true有值。
	@Column("list_price")
	private String listPrice;// 单价, 仅当isBillingItem为true时有效。
	@Column("list_price_unit")
	private String listPriceUnit;// 单价单位, 仅当isBillingItem为true时有效。
	@Column("usages")
	private String usages;// 用量, 仅当isBillingItem为true时有效。
	@Column("usage_unit")
	private String usageUnit;// 用量单位, 仅当isBillingItem为true时有效。

	@Column("pretax_gross_amount")
	private Float pretaxGrossAmount;// 原始金额。
	@Column("invoice_discount")
	private Float invoiceDiscount;// 优惠金额。
	@Column("pretax_amount")
	private Float pretaxAmount;// 应付金额

	@Column("deducted_by_cash_coupons")
	private Float deductedByCashCoupons;// 代金券抵扣。
	@Column("deducted_by_coupons")
	private Float deductedByCoupons;// 优惠券优惠金额。
	@Column("deducted_by_prepaid_card")
	private Float deductedByPrepaidCard;// 储值卡抵扣。
	@Column("deducted_by_resource_package")
	private String deductedByResourcePackage;// 资源包抵扣。
	@Column("payment_amount")
	private Float paymentAmount;// 现金支付
	@Column("outstanding_amount")
	private Float outstandingAmount;// 未结清金额
	@Column("currency")
	private String currency;// 币种，取值：CNY。 USD。 JPY。
	@Column("cost_unit")
	private String costUnit;// 财务单元。
	@Column("owner_id")
	private String ownerId;// 子账号AccountID（多账号代付场景）

	@Column("subscription_type")
	private String subscriptionType;// 订阅类型，取值： Subscription：预付费。 PayAsYouGo：后付费。
	@Column("item")
	private String item;// 账单类型： SubscriptionOrder (预付订单)。 PayAsYouGoBill (后付账单)。 Refund (退款)。
						// Adjustment (调账)。
	@Column("service_period")
	private String servicePeriod;// 服务周期。
	@Column("service_period_unit")
	private String servicePeriodUnit;// 服务周期单位

	@IgnoreUpdate
	@Column("creator_id")
	private Long creatorId;
	@Column("mender_id")
	private Long menderId;
	@IgnoreUpdate
	@Column(value = "gmt_create", nullable = false)
	@JsonSerialize(using = DateSerializer.class)
	@JsonDeserialize(using = DateDeserializer.class)
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date gmtCreate;
	@Column("gmt_modify")
	@JsonSerialize(using = DateSerializer.class)
	@JsonDeserialize(using = DateDeserializer.class)
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date gmtModify;
	@IgnoreAll
	private String vendorName;

}
