| | |
| | | package com.flightfeather.uav.lightshare.bean |
| | | |
| | | import com.flightfeather.uav.common.utils.DateUtil |
| | | 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 |
| | | |
| | | /** |
| | | * 用电量日分析结果 |
| | |
| | | * Created by feiyu |
| | | */ |
| | | class ElectricDailyInfo { |
| | | var day: String = "" |
| | | var day = "" |
| | | var dayIndex = 0 |
| | | |
| | | /***********产线设备ProductionLine, pl************/ |
| | | private var plDCode: String? = null // 设备编号 |
| | | var plDCode: String? = null // 设备编号 |
| | | private var plSTime: Date? = null // 开启时间 |
| | | private var plRTime: Date? = null // 正式运行时间 |
| | | private var plETime: Date? = null // 关闭时间 |
| | | private var plRunTime: Int = 0 // 运行时长(分钟) |
| | | var plRunTime: Int = 0 // 运行时长(分钟)(状态为运行、高负荷的时长) |
| | | private var plRunPeriod = mutableListOf<Int>()// 运行时段(小时) |
| | | var plPower = .0 // 用电量(千瓦时) |
| | | /***********净化设备Purify, pf********************/ |
| | | private var pfDCode: String? = null |
| | | var pfDCode: String? = null |
| | | private var pfSTime: Date? = null |
| | | private var pfRTime: Date? = null |
| | | private var pfETime: Date? = null |
| | | private var pfRunTime: Int = 0 |
| | | var pfRunTime: Int = 0 |
| | | private var pfRunPeriod = mutableListOf<Int>() |
| | | var pfPower = .0 |
| | | |
| | | private var dailyResult: String = ""// 当日分析结果描述 |
| | | 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 setEndTime(date: Date) { |
| | | 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 -> plETime = date |
| | | ElectricityType.Purify -> pfETime = date |
| | | 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(min: Int) { |
| | | when (deviceType) { |
| | | ElectricityType.ProductionLine -> plRunTime += min |
| | | ElectricityType.Purify -> pfRunTime += min |
| | | 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 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() { |
| | | // 1. 设备开启关闭是否合规 |
| | | // val timeDiff = |
| | | // 用电量 |
| | | 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. 多日摘要统计,运行天数、合规天数等 |
| | | } |
| | | } |