feiyu02
2021-12-02 74ffc8ebf3a25d2e3cee758954ce6efc163cb864
1. 用电量日分析
已修改4个文件
已添加1个文件
166 ■■■■■ 文件已修改
src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt
@@ -6,6 +6,7 @@
import com.flightfeather.uav.lightshare.bean.ElectricDailyInfo
import java.time.LocalDateTime
import java.time.ZoneId
import kotlin.math.round
/**
 * ç”¨ç”µé‡æ—¥åˆ†æž
@@ -39,24 +40,30 @@
            if (dataMap[it.mvStatCode]?.containsKey(day) != true) dataMap[it.mvStatCode]?.put(day, mutableListOf())
            val dayList = dataMap[it.mvStatCode]?.get(day)!!
            dayList.add(it)
            // æ•°æ®å¯¹åº”状态
            val device = deviceMap[it.mvStatCode]
            val status = getStatus(it, device)
            // 2.1 æ ¹æ®æ•°æ®åˆ‡æ¢å½“前设备类型
            if (!dailyInfoMap.containsKey(day)) dailyInfoMap[day] = ElectricDailyInfo()
            val dayResult = dailyInfoMap[day]!!
            dayResult.day = day
            dayResult.changeType(deviceMap[it.mvStatCode])
            dayResult.changeType(device)
            // 2.2 æ¯æ—¥èŽ·å–çš„é¦–ä¸ªæ•°æ®ï¼Œå³ä¸ºå½“æ—¥è¯¥è®¾å¤‡å¼€å¯æ—¶é—´
            if (dayList.size == 1) dayResult.setStartTime(it.mvDataTime)
            // 2.3 æ¯ä¸ªæ•°æ®ä¸ºåˆ†é’Ÿå‡å€¼ï¼Œæ€»æ•°ä»£è¡¨å¼€å¯æ—¶é•¿
            dayResult.addRunTime(1)
            // 2.4 ç»Ÿè®¡å½“日设备运行时段(小时)
            // 2.3 æ¯æ—¥èŽ·å–çš„é¦–ä¸ªä¸ºè¿è¡ŒçŠ¶æ€çš„æ•°æ®ï¼Œå³ä¸ºå½“æ—¥è¯¥è®¾å¤‡æ­£å¼è¿è¡Œå¼€å§‹æ—¶é—´
            dayResult.setRunningTime(status, it)
            // 2.4 æ¯ä¸ªæ•°æ®ä¸ºåˆ†é’Ÿå‡å€¼ï¼Œæ€»æ•°ä»£è¡¨å¼€å¯æ—¶é•¿
            dayResult.addRunTime(status)
            // 2.5 ç»Ÿè®¡å½“日设备运行时段(小时)
            val hour = LocalDateTime.ofInstant(it.mvDataTime.toInstant(), ZoneId.systemDefault()).hour
            dayResult.addRunPeriod(hour)
        }
        // 2.5 ç»Ÿè®¡å„台设备每日结束时间及分析结果
        // 2.6 ç»Ÿè®¡å„台设备每日结束时间及分析结果
        dataMap.forEach { (dCode, dayMap) ->
            dayMap.forEach { (day, list) ->
                dailyInfoMap[day]?.apply {
                    changeType(deviceMap[dCode])
                    setEndTime(list.last().mvDataTime)
                }
@@ -66,4 +73,39 @@
        return result
    }
    /**
     * èŽ·å–è®¾å¤‡å½“å‰è¿è¡ŒçŠ¶æ€
     * @param e è®¾å¤‡ç”¨ç”µé‡ç›‘测数据
     * @param d ä¼ä¸šè®¾å¤‡ä¿¡æ¯
     * @return æ•°æ®å¯¹åº”结果信息:<状态编号,状态描述,电流均值>
     */
    fun getStatus(e: ElectricMinuteValue?, d: CompanyDevice?): Triple<String, String, Double> {
        var values = mutableListOf<Int>().apply {
            d?.cdLimits?.split(";")?.forEach {
                it.toIntOrNull()?.let { i -> add(i) }
            }
        }
        var status = d?.cdStatus?.split(";") ?: emptyList()
        var statusNames = d?.cdStatusName?.split(";") ?: emptyList()
        if (values.isEmpty()) values = mutableListOf(1, 100)
        if (status.isEmpty()) status = listOf("0", "2", "3")
        if (statusNames.isEmpty()) statusNames = listOf("待机", "运行", "超负荷")
        if (e == null) {
            return Triple(status.first(), statusNames.first(), .0)
        }
        val electricityList = mutableListOf<Double>()
        electricityList.add(e.mvElectricityA)
        electricityList.add(e.mvElectricityB)
        electricityList.add(e.mvElectricityC)
        val avg = round(electricityList.average() * 100) / 100
        for (i in values.indices) {
            if (avg < values[i]) {
                return Triple(status[i], statusNames[i], avg)
            }
        }
        return Triple(status.last(), statusNames.last(), avg)
    }
}
src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt
@@ -1,6 +1,9 @@
package com.flightfeather.uav.lightshare.bean
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.*
@@ -17,8 +20,7 @@
    private var plSTime: Date? = null    // å¼€å¯æ—¶é—´
    private var plRTime: Date? = null    // æ­£å¼è¿è¡Œæ—¶é—´
    private var plETime: Date? = null    // å…³é—­æ—¶é—´
    // FIXME: 2021/12/1 ï¼ˆçŠ¶æ€ä¸ºè¿è¡Œã€é«˜è´Ÿè·çš„æ—¶é•¿ï¼‰
    private var plRunTime: Int = 0    // è¿è¡Œæ—¶é•¿ï¼ˆåˆ†é’Ÿï¼‰
    private var plRunTime: Int = 0    // è¿è¡Œæ—¶é•¿ï¼ˆåˆ†é’Ÿï¼‰ï¼ˆçŠ¶æ€ä¸ºè¿è¡Œã€é«˜è´Ÿè·çš„æ—¶é•¿ï¼‰
    private var plRunPeriod = mutableListOf<Int>()// è¿è¡Œæ—¶æ®µï¼ˆå°æ—¶ï¼‰
    /***********净化设备Purify, pf********************/
    private var pfDCode: String? = null
@@ -28,8 +30,12 @@
    private var pfRunTime: Int = 0
    private var pfRunPeriod = mutableListOf<Int>()
    // TODO: 2021/12/1 æ­£å¼è¿è¡Œæ—¶é—´å·®
    // TODO: 2021/12/1 å…³é—­æ—¶é—´å·®
    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 = ""// å½“日分析结果描述
    // å½“前设备类型,用于插入数据时决定赋值字段
@@ -65,18 +71,39 @@
        }
    }
    fun setRunningTime(date: Date) {
    /**
     * è®¾ç½®æ­£å¼è¿è¡Œæ—¶é—´
     */
    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
            }
        }
    }
@@ -95,11 +122,17 @@
     * ç»Ÿè®¡å¾—出当日分析结果
     */
    fun getResult() {
        // 1. è®¾å¤‡å¼€å¯å…³é—­æ˜¯å¦åˆè§„
        // TODO: 2021/12/1 1. è®¾å¤‡æ­£å¼è¿è¡Œæ—¶é—´å·® =》开启是否合规
        if (pfRTime != null && plRTime != null) {
            rTimeDiff = ((pfRTime!!.time - plRTime!!.time) / 1000 / 60).toInt()
            sResult = rTimeDiff > 0
        }
        // TODO: 2021/12/1 2,设备关闭时间差 =》关闭是否合规
        if (pfETime != null && plETime != null) {
            eTimeDiff = ((pfETime!!.time - plETime!!.time) / 1000 / 60).toInt()
        }
        // TODO: 2021/12/1 3. è¿è¡Œæ—¶é•¿å·® =》运行过程是否合规
        runningTimeDiff = pfRunTime - plRunTime
        // TODO: 2021/12/1 4. ç»¼åˆåˆ¤æ–­ç»“æžœ
        // TODO: 2021/12/1 5. å¤šæ—¥æ‘˜è¦ç»Ÿè®¡ï¼Œè¿è¡Œå¤©æ•°ã€åˆè§„天数等
src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.flightfeather.uav.lightshare.eunm
/**
 * @author riku
 * Date: 2021/12/2
 * ç”¨ç”µé‡ç›‘测的设备的运行状态
 */
enum class ElectricityStatus(val value: Int, val des: String) {
    A(0, "待机"),
    B(1, "低负荷运行或预热"),
    C(2, "运行"),
    D(3, "超负荷"),
}
src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt
@@ -2,7 +2,8 @@
/**
 * @author riku
 * Date: 2019/9/26
 * Date: 2021/11/26
 * ç”¨ç”µé‡ç›‘测对应的企业设备类型
 */
enum class ElectricityType(val value: Int){
    //产线设备
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt
@@ -200,7 +200,7 @@
                        d1eA = d?.mvElectricityA ?: .0
                        d1eB = d?.mvElectricityB ?: .0
                        d1eC = d?.mvElectricityC ?: .0
                        val s = getStatus(d, d1)
                        val s = ElectricDailyAnalysis.getStatus(d, d1)
                        d1Status = s.first
                        d1StatusName = s.second
                        d1Avg = s.third
@@ -238,7 +238,7 @@
                        d2eA = d?.mvElectricityA ?: .0
                        d2eB = d?.mvElectricityB ?: .0
                        d2eC = d?.mvElectricityC ?: .0
                        val s = getStatus(d, d2)
                        val s = ElectricDailyAnalysis.getStatus(d, d2)
                        d2Status = s.first
                        d2StatusName = s.second
                        d2Avg = s.third
@@ -274,41 +274,6 @@
        }
        return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result)
    }
    /**
     * èŽ·å–è®¾å¤‡å½“å‰è¿è¡ŒçŠ¶æ€
     * @param e è®¾å¤‡ç”¨ç”µé‡ç›‘测数据
     * @param d ä¼ä¸šè®¾å¤‡ä¿¡æ¯
     * @return æ•°æ®å¯¹åº”结果信息:<状态编号,状态描述,电流均值>
     */
    private fun getStatus(e: ElectricMinuteValue?, d: CompanyDevice?): Triple<String, String, Double> {
        var values = mutableListOf<Int>().apply {
            d?.cdLimits?.split(";")?.forEach {
                it.toIntOrNull()?.let { i -> add(i) }
            }
        }
        var status = d?.cdStatus?.split(";") ?: emptyList()
        var statusNames = d?.cdStatusName?.split(";") ?: emptyList()
        if (values.isEmpty()) values = mutableListOf(1, 100)
        if (status.isEmpty()) status = listOf("0", "2", "3")
        if (statusNames.isEmpty()) statusNames = listOf("待机", "运行", "超负荷")
        if (e == null) {
            return Triple(status.first(), statusNames.first(), .0)
        }
        val electricityList = mutableListOf<Double>()
        electricityList.add(e.mvElectricityA)
        electricityList.add(e.mvElectricityB)
        electricityList.add(e.mvElectricityC)
        val avg = round(electricityList.average() * 100) / 100
        for (i in values.indices) {
            if (avg < values[i]) {
                return Triple(status[i], statusNames[i], avg)
            }
        }
        return Triple(status.last(), statusNames.last(), avg)
    }
    override fun dailyStatistics(cId: String, startTime: String?, endTime: String?): BaseResponse<List<ElectricDailyInfo>> {