feiyu02
2021-12-30 88ae069fcf657c1790bb04b444e150c06f04e5f6
src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt
@@ -1,11 +1,13 @@
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
/**
 * 用电量日分析结果
@@ -13,30 +15,37 @@
 * 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 rTimeDiff:Int = 0 //正式运行时间差
    private var sResult:Boolean = false //设备开启是否合规
    private var eTimeDiff: Int = 0 //关闭时间差
    private var eResult: Boolean = false //设备关闭是否合规
    private var runningTimeDiff = 0 //运行时长差
    private var rResult:Boolean = false //运行过程是否合规
    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
@@ -63,10 +72,62 @@
        }
    }
    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
        }
    }
@@ -119,21 +180,51 @@
    }
    /**
     * 累计用电量
     */
    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() {
        // TODO: 2021/12/1 1. 设备正式运行时间差 =》开启是否合规
        // 用电量
        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 > 0
            sResult = rTimeDiff == null || rTimeDiff!! < 0
        }
        // TODO: 2021/12/1 2,设备关闭时间差 =》关闭是否合规
        // 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
        }
        // TODO: 2021/12/1 3. 运行时长差 =》运行过程是否合规
        // 3. 运行时长差 =》运行过程是否合规
        runningTimeDiff = pfRunTime - plRunTime
        // TODO: 2021/12/1 4. 综合判断结果
        rResult = runningTimeDiff > 0
        // TODO: 2021/12/1 5. 多日摘要统计,运行天数、合规天数等
    }