package com.jiayue.ipfcst.common.data.entity;

import com.jiayue.ipfcst.common.data.abst.equipmentstatus.AbstractEquipmentStatusData;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.validation.constraints.Digits;
import java.math.BigDecimal;

/**
 * 场站功率状态抽象实体
 *
 * @author zzy
 * @version 1.0
 * @since 2019/8/2 9:34
 */
@Entity
@Data
public class PowerStationStatusData extends AbstractEquipmentStatusData {

	private static final long serialVersionUID = 1L;

	/**
	 * 时间
	 */
  /*  @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column
    private Date time;*/
	/**
	 * 人工判断是否限电
	 * 0  以系统判断结果为准
	 * 1 限电
	 * 2 不限电
	 */
	@Column
	Integer isRationingByManualControl;
	/**
	 * 系统自动判断是否限电
	 */
	@Column
	Boolean isRationingByAutoControl;
	/**
	 * 实际功率（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal realValue = new BigDecimal(-99);
	/**
	 * 可用功率（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal ableValue = new BigDecimal(-99);
	/**
	 * 理论功率（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal theoryValue = new BigDecimal(-99);
	/**
	 * 样板机参照功率（MW）  理论
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal referencePowerBySample = new BigDecimal(-99);
	/**
	 * 测风/光法 参照功率（MW） 理论
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal referencePowerByMeasuring = new BigDecimal(-99);

	/**
	 * 机头风速法参照功率（MW） 理论
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal referencePowerByHubSpeed = new BigDecimal(-99);
	/**
	 * 样板机法功率（MW） 可用
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal ablePowerBySample = new BigDecimal(-99);
	/**
	 * 测风/光法 （MW） 可用
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal ablePowerByMeasuring = new BigDecimal(-99);


	/**
	 * 机头风速法参照功率（MW） 可用
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal ablePowerByHubSpeed = new BigDecimal(-99);
	/**
	 * 样板机法的异常值
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal abnormalOfSample = new BigDecimal(-99);
	/**
	 * 测风光法的异常值
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal abnormalOfMeasuring = new BigDecimal(-99);


	/**
	 * 机头风速光法的异常值
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal abnormalOfHubSpeed = new BigDecimal(-99);
	/**
	 * 开机容量（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal openCapacity = new BigDecimal(-99);
	/**
	 * 装机容量（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal capacity = new BigDecimal(-99);
	/**
	 * 站内受阻功率（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal onSiteObstructed = new BigDecimal(-99);
	/**
	 * 日发电量（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal dailyOutPut = new BigDecimal(-99);
	/**
	 * 日上网电量（MW）
	 * Power Grid  电网
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal dailyGridOutPut = new BigDecimal(-99);
	/**
	 * 站外受阻功率（MW）
	 */
	@Digits(integer = 10, fraction = 2)
	@Column
	private BigDecimal offSiteObstructed = new BigDecimal(-99);


	/**
	 * 并网设备数（个）
	 */
	@Column
	private Integer onGridNum;

	public void setAbleValue(BigDecimal ableValue) {
		if (ableValue == null) {
			this.ableValue = null;
			return;
		}
		if (this.openCapacity == null || this.openCapacity.compareTo(BigDecimal.valueOf(-99)) == 0) {
			this.ableValue = ableValue;
		} else {
			if (this.openCapacity.compareTo(ableValue) < 0) {
				this.ableValue = this.openCapacity;
			} else {
				this.ableValue = ableValue;
			}
		}
		if (this.capacity == null || this.capacity.compareTo(BigDecimal.valueOf(-99)) == 0) {
			this.ableValue = ableValue;
		} else {
			if (this.capacity.compareTo(ableValue) < 0) {
				this.ableValue = this.capacity;
			} else {
				this.ableValue = ableValue;
			}
		}
	}

	public void setTheoryValue(BigDecimal theoryValue) {
		if (theoryValue == null) {
			this.theoryValue = null;
			return;
		}
		if (this.capacity.compareTo(BigDecimal.valueOf(-99)) == 0) {
			this.theoryValue = theoryValue;
		} else {
			if (this.capacity.compareTo(theoryValue) < 0) {
				this.theoryValue = this.capacity;
			} else {
				this.theoryValue = theoryValue;
			}
		}
	}

}
