From 01eae19a4870033e879a3faa6749eece92926cab Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期五, 26 一月 2024 17:10:55 +0800 Subject: [PATCH] 1. 新增多项yml配置文件 2. 新增导入静安监测数据功能模块(未完成) --- src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt | 87 ++++++++++++++++++++++++++++++++++++++----- 1 files changed, 77 insertions(+), 10 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..e6e9ebc 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 /** * 鐢ㄧ數閲忔棩鍒嗘瀽 @@ -18,11 +19,11 @@ // 杩斿洖缁撴灉 val result = mutableListOf<ElectricDailyInfo>() // 姣忔棩缁熻淇℃伅 - val dailyInfoMap = mutableMapOf<String, ElectricDailyInfo>() + val dailyInfoMap = mutableMapOf<Int, ElectricDailyInfo>() // 1.鏁版嵁鍑嗗 val deviceMap = mutableMapOf<String, CompanyDevice>() - val dataMap = mutableMapOf<String, MutableMap<String, MutableList<ElectricMinuteValue>>>() + val dataMap = mutableMapOf<String, MutableMap<Int, MutableList<ElectricMinuteValue>>>() deviceList.forEach { // 鐩戞祴鏁版嵁 if (!dataMap.containsKey(it.cdDeviceCode)) { @@ -34,36 +35,102 @@ // 2.杞鏁版嵁锛岀粺璁℃瘡鏃ョ殑鍚勯」鐗瑰緛 dataList.forEach { // 鑾峰彇鏃ユ湡 - val day = DateUtil.instance.dateToString(it.mvDataTime, DateUtil.DateStyle.YYYY_MM_DD) ?: "" + val date = DateUtil.instance.dateToString(it.mvDataTime, DateUtil.DateStyle.YYYYMMDD) ?: "" + val day = date.toIntOrNull() ?: 0 // 姣忔棩瀵瑰簲涓�缁勬暟鎹� 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.day = DateUtil.instance.dateToString(it.mvDataTime, DateUtil.DateStyle.YYYY_MM_DD) ?: "" + dayResult.dayIndex = day + 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.6 绱鐢ㄧ數閲� + dayResult.addPower(it) + // 2.7 璁惧棣栨浠庤繍琛屽彉涓哄緟鏈烘垨鍏抽棴鐘舵�佹椂锛岃涓烘槸璁惧鐨勫叧闂椂闂� + dayResult.setEndTime(status, it) } - // 2.5 缁熻鍚勫彴璁惧姣忔棩缁撴潫鏃堕棿鍙婂垎鏋愮粨鏋� + // 2.6 缁熻鍚勫彴璁惧鍒嗘瀽缁撴灉 dataMap.forEach { (dCode, dayMap) -> dayMap.forEach { (day, list) -> dailyInfoMap[day]?.apply { changeType(deviceMap[dCode]) - setEndTime(list.last().mvDataTime) + setEndTime2(list.last().mvDataTime) + getResult() } } } dailyInfoMap.forEach { (_,v)-> result += v } + result.sortBy { it.dayIndex } + for (i in result.indices) { + if (i > 0) { + val last = result[i - 1] + val d = result[i] + + // 閽堝涓ょ璁惧锛屽綋鏄ㄥぉ鐨勮澶囨湭鍏抽棴锛屼笖浠婂ぉ鐨勫紑鍚椂闂翠负0鐐�0鍒嗗唴鏃讹紝璁や负璁惧璺ㄦ棩杩愯 + if (last.plETimeStr == null && d.plRTimeStr?.substring(11, 16) == "00:00") { + d.plRTimeStr = null + d.rTimeDiff = null + d.sResult = true + } + if (last.pfETimeStr == null && d.pfRTimeStr?.substring(11, 16) == "00:00") { + d.pfRTimeStr = null + d.rTimeDiff = null + d.sResult = true + } + } + } 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 -- Gitblit v1.9.3