From 74ffc8ebf3a25d2e3cee758954ce6efc163cb864 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期四, 02 十二月 2021 16:11:57 +0800 Subject: [PATCH] 1. 用电量日分析 --- src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt | 59 +++++++++++++++---- src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt | 13 ++++ src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt | 3 src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt | 52 +++++++++++++++- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt | 39 ------------ 5 files changed, 110 insertions(+), 56 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt b/src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt index aca6e91..8c1d2e7 100644 --- a/src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt +++ b/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 姣忎釜鏁版嵁涓哄垎閽熷潎鍊硷紝鎬绘暟浠h〃寮�鍚椂闀� - dayResult.addRunTime(1) - // 2.4 缁熻褰撴棩璁惧杩愯鏃舵锛堝皬鏃讹級 + // 2.3 姣忔棩鑾峰彇鐨勯涓负杩愯鐘舵�佺殑鏁版嵁锛屽嵆涓哄綋鏃ヨ璁惧姝e紡杩愯寮�濮嬫椂闂� + dayResult.setRunningTime(status, it) + // 2.4 姣忎釜鏁版嵁涓哄垎閽熷潎鍊硷紝鎬绘暟浠h〃寮�鍚椂闀� + 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) + } } \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt index d7f2802..91977a5 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt +++ b/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 // 姝e紡杩愯鏃堕棿 private var plETime: Date? = null // 鍏抽棴鏃堕棿 - // FIXME: 2021/12/1 锛堢姸鎬佷负杩愯銆侀珮璐熻嵎鐨勬椂闀匡級 - private var plRunTime: Int = 0 // 杩愯鏃堕暱锛堝垎閽燂級 + private var plRunTime: Int = 0 // 杩愯鏃堕暱锛堝垎閽燂級锛堢姸鎬佷负杩愯銆侀珮璐熻嵎鐨勬椂闀匡級 private var plRunPeriod = mutableListOf<Int>()// 杩愯鏃舵锛堝皬鏃讹級 /***********鍑�鍖栬澶嘝urify, pf********************/ private var pfDCode: String? = null @@ -28,8 +30,12 @@ private var pfRunTime: Int = 0 private var pfRunPeriod = mutableListOf<Int>() - // TODO: 2021/12/1 姝e紡杩愯鏃堕棿宸� - // TODO: 2021/12/1 鍏抽棴鏃堕棿宸� + private var rTimeDiff:Int = 0 //姝e紡杩愯鏃堕棿宸� + 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) { - + /** + * 璁剧疆姝e紡杩愯鏃堕棿 + */ + 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. 璁惧姝e紡杩愯鏃堕棿宸� =銆嬪紑鍚槸鍚﹀悎瑙� + 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. 澶氭棩鎽樿缁熻锛岃繍琛屽ぉ鏁般�佸悎瑙勫ぉ鏁扮瓑 diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt new file mode 100644 index 0000000..939508f --- /dev/null +++ b/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, "瓒呰礋鑽�"), +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt index 1cdb0b4..c94d46b 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt +++ b/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){ //浜х嚎璁惧 diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt index d055539..f443876 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt +++ b/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>> { -- Gitblit v1.9.3