package com.flightfeather.uav.lightshare.bean
|
|
import com.flightfeather.uav.common.utils.DateUtil
|
import com.flightfeather.uav.dataprocess.ElectricDailyAnalysis
|
import com.flightfeather.uav.domain.entity.CompanyDevice
|
import com.flightfeather.uav.domain.entity.ElectricMinuteValue
|
import com.flightfeather.uav.lightshare.eunm.ElectricityStatus
|
import com.flightfeather.uav.lightshare.eunm.ElectricityType
|
import java.util.*
|
import kotlin.math.round
|
|
/**
|
* 用电量日分析结果
|
* Date 2021/12/1 15:23
|
* Created by feiyu
|
*/
|
class ElectricDailyInfo {
|
var day = ""
|
var dayIndex = 0
|
|
/***********产线设备ProductionLine, pl************/
|
var plDCode: String? = null // 设备编号
|
private var plSTime: Date? = null // 开启时间
|
private var plRTime: Date? = null // 正式运行时间
|
private var plETime: Date? = null // 关闭时间
|
var plRunTime: Int = 0 // 运行时长(分钟)(状态为运行、高负荷的时长)
|
private var plRunPeriod = mutableListOf<Int>()// 运行时段(小时)
|
var plPower = .0 // 用电量(千瓦时)
|
/***********净化设备Purify, pf********************/
|
var pfDCode: String? = null
|
private var pfSTime: Date? = null
|
private var pfRTime: Date? = null
|
private var pfETime: Date? = null
|
var pfRunTime: Int = 0
|
private var pfRunPeriod = mutableListOf<Int>()
|
var pfPower = .0
|
|
var plRTimeStr: String? = null
|
var plETimeStr: String? = null
|
var pfRTimeStr: String? = null
|
var pfETimeStr: String? = null
|
var rTimeDiff:Int? = 0 //正式运行时间差
|
var sResult:Boolean = false //设备开启是否合规
|
var eTimeDiff: Int? = 0 //关闭时间差
|
var eResult: Boolean = false //设备关闭是否合规
|
var runningTimeDiff = 0 //运行时长差
|
var rResult:Boolean = false //运行过程是否合规
|
var dailyResult: String = ""// 当日分析结果描述
|
|
// 当前设备类型,用于插入数据时决定赋值字段
|
private var deviceType: ElectricityType = ElectricityType.ProductionLine
|
|
fun changeType(d: CompanyDevice?) {
|
deviceType = when (d?.cdType) {
|
ElectricityType.ProductionLine.value -> {
|
plDCode = d.cdDeviceCode
|
ElectricityType.ProductionLine
|
}
|
ElectricityType.Purify.value -> {
|
pfDCode = d.cdDeviceCode
|
ElectricityType.Purify
|
}
|
else -> ElectricityType.UnKnow
|
}
|
}
|
|
fun setStartTime(date: Date) {
|
when (deviceType) {
|
ElectricityType.ProductionLine -> plSTime = date
|
ElectricityType.Purify -> pfSTime = date
|
else -> Unit
|
}
|
}
|
|
private var lastPlStatus = -2 // 上个时间点的产线设备状态
|
private var plTag = false // true:当日最后一分钟的数据依旧是运行状态,未关闭产线设备
|
private var lastPfStatus = -2 // 上个时间点的净化设备状态
|
private var pfTag = false
|
fun setEndTime(s: Triple<String, String, Double>, e:ElectricMinuteValue?) {
|
val hourMinute = DateUtil.instance.dateToString(e?.mvDataTime, DateUtil.DateStyle.HH_MM)
|
when (deviceType) {
|
ElectricityType.ProductionLine -> {
|
if (lastPlStatus == -1) {
|
return
|
} else if (lastPlStatus <= ElectricityStatus.A.value) {
|
lastPlStatus = s.first.toInt()
|
} else if (lastPlStatus >= ElectricityStatus.B.value) {
|
if (s.first.toInt() <= ElectricityStatus.A.value) {
|
plETime = e?.mvDataTime
|
lastPlStatus = -1
|
} else {
|
if (hourMinute == "23:59") plTag = true
|
lastPlStatus = s.first.toInt()
|
}
|
}
|
}
|
ElectricityType.Purify -> {
|
if (lastPfStatus == -1) {
|
return
|
} else if (lastPfStatus <= ElectricityStatus.A.value) {
|
lastPfStatus = s.first.toInt()
|
} else if (lastPfStatus >= ElectricityStatus.B.value) {
|
if (s.first.toInt() <= ElectricityStatus.A.value) {
|
pfETime = e?.mvDataTime
|
lastPfStatus = -1
|
} else {
|
if (hourMinute == "23:59") pfTag = true
|
lastPfStatus = s.first.toInt()
|
}
|
}
|
}
|
else -> Unit
|
}
|
}
|
|
/**
|
* 如果设备关闭时是直接从运行状态断电,则在此处将最后一个数据的时间记为关闭时间
|
*/
|
fun setEndTime2(date: Date) {
|
when (deviceType) {
|
ElectricityType.ProductionLine -> {
|
if (plETime == null && !plTag) {
|
plETime = date
|
}
|
}
|
ElectricityType.Purify -> {
|
if (pfETime == null && !pfTag) {
|
pfETime = date
|
}
|
}
|
else -> Unit
|
}
|
}
|
|
/**
|
* 设置正式运行时间
|
*/
|
fun setRunningTime(s: Triple<String, String, Double>, e:ElectricMinuteValue?) {
|
when (deviceType) {
|
ElectricityType.ProductionLine -> {
|
if (plRTime == null) {
|
if (s.first.toInt() >= ElectricityStatus.C.value) {
|
plRTime = e?.mvDataTime
|
}
|
}
|
}
|
ElectricityType.Purify -> {
|
if (pfRTime == null) {
|
if (s.first.toInt() >= ElectricityStatus.C.value) {
|
pfRTime = e?.mvDataTime
|
}
|
}
|
}
|
else -> Unit
|
}
|
}
|
|
/**
|
* 增加运行时长
|
*/
|
fun addRunTime(s: Triple<String, String, Double>) {
|
if (s.first.toInt() >= ElectricityStatus.C.value) {
|
when (deviceType) {
|
ElectricityType.ProductionLine -> plRunTime++
|
ElectricityType.Purify -> pfRunTime++
|
else -> Unit
|
}
|
}
|
}
|
|
/**
|
* 添加运行时段(小时)
|
*/
|
fun addRunPeriod(hour: Int) {
|
when (deviceType) {
|
ElectricityType.ProductionLine -> if (!plRunPeriod.contains(hour)) plRunPeriod += hour
|
ElectricityType.Purify -> if (!pfRunPeriod.contains(hour)) pfRunPeriod += hour
|
else -> Unit
|
}
|
}
|
|
/**
|
* 累计用电量
|
*/
|
fun addPower(e: ElectricMinuteValue?) {
|
e?.let {
|
val avgElectric = (it.mvElectricityA + it.mvElectricityB + it.mvElectricityC) / 3
|
val power = avgElectric * 1 / 60
|
when (deviceType) {
|
ElectricityType.ProductionLine -> plPower += power
|
ElectricityType.Purify -> pfPower += power
|
else -> Unit
|
}
|
}
|
}
|
|
/**
|
* 统计得出当日分析结果
|
*/
|
fun getResult() {
|
// 用电量
|
plPower = round(plPower * 100) / 100
|
pfPower = round(pfPower * 100) / 100
|
|
// 开关时间格式化
|
plRTimeStr = DateUtil.instance.dateToString(plRTime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)
|
plETimeStr = DateUtil.instance.dateToString(plETime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)
|
pfRTimeStr = DateUtil.instance.dateToString(pfRTime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)
|
pfETimeStr = DateUtil.instance.dateToString(pfETime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)
|
|
// 1. 设备正式运行时间差 =》开启是否合规
|
if (pfRTime != null && plRTime != null) {
|
rTimeDiff = ((pfRTime!!.time - plRTime!!.time) / 1000 / 60).toInt()
|
sResult = rTimeDiff == null || rTimeDiff!! < 0
|
}
|
// 2,设备关闭时间差 =》关闭是否合规
|
if (pfETime != null && plETime != null) {
|
eTimeDiff = ((pfETime!!.time - plETime!!.time) / 1000 / 60).toInt()
|
eResult = eTimeDiff == null || eTimeDiff!! > 0
|
} else {
|
// 当关闭时间存在null时,说明当日并没有关闭设备,关闭合规
|
eTimeDiff = null
|
eResult = true
|
}
|
// 3. 运行时长差 =》运行过程是否合规
|
runningTimeDiff = pfRunTime - plRunTime
|
rResult = runningTimeDiff > 0
|
|
// TODO: 2021/12/1 5. 多日摘要统计,运行天数、合规天数等
|
}
|
}
|