From d04e699fcd11aa715439d8ab87827a3984450ccd Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期一, 22 十一月 2021 17:39:13 +0800 Subject: [PATCH] 1. 用电量数据平滑处理缺失的分钟值 --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt | 129 ++++++++++++++++++++++++++++++------------ 1 files changed, 91 insertions(+), 38 deletions(-) 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 c6f3e68..01496d2 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 @@ -20,6 +20,7 @@ import java.time.LocalDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter +import kotlin.math.round @Service class ElectricityServiceImpl( @@ -178,53 +179,105 @@ null } - var lsT = LocalDateTime.ofInstant(sT?.toInstant(), ZoneId.systemDefault()).withSecond(0) - val leT = LocalDateTime.ofInstant(eT?.toInstant(), ZoneId.systemDefault()).withSecond(0) + if (sT == null || eT == null) { + return BaseResponse(true, data = result) + } - if (sT != null && eT != null) { - while (!lsT.isAfter(leT)) { - val vo = ElectricVo(lsT.format(dateFormatter2)) - if (dataList1.isNotEmpty()) { - val d = dataList1[0] - val t = LocalDateTime.ofInstant(d?.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) - if (lsT.isEqual(t)) { + var lsT = LocalDateTime.ofInstant(sT.toInstant(), ZoneId.systemDefault()).withSecond(0) + val leT = LocalDateTime.ofInstant(eT.toInstant(), ZoneId.systemDefault()).withSecond(0) + + // 鏍规嵁涓ゅ彴璁惧鐨勬渶闀胯捣濮嬫椂闂达紝璁$畻鍏朵腑姣忎竴鍒嗛挓鐨勫搴斿潎鍊� + while (!lsT.isAfter(leT)) { + // 涓ゅ彴璁惧鐨勬暟鎹牴鎹椂闂村悎骞朵负涓�涓粨鏋勪綋 + val vo = ElectricVo(lsT.format(dateFormatter2)) + + // FIXME: 2021/11/22 姝ゅ鐢变簬鍓嶇璁惧鐨勯噰鏍锋椂闂翠笉鏍囧噯 锛岄噰鏍峰懆鏈熷苟涓嶆槸涓ユ牸鐨�1鍒嗛挓锛屽鑷撮噰鏍锋椂闂存湁鏃朵細缂哄皯1鍒嗛挓鐨勬暟鎹� + // FIXME: 2021/11/22 鍥犳锛屽綋鏌愪竴鍒嗛挓璇ヨ澶囨暟鎹疆绌烘椂锛岄噰鐢ㄥ墠涓�涓暟鎹綔涓哄~鍏� + if (dataList1.isNotEmpty()) { + val d = dataList1[0] + val t = LocalDateTime.ofInstant(d?.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) + if (lsT.isEqual(t)) { + vo.apply { + d1eA = d?.mvElectricityA ?: .0 + d1eB = d?.mvElectricityB ?: .0 + d1eC = d?.mvElectricityC ?: .0 + val s = getStatus(d, d1) + d1Status = s.first + d1StatusName = s.second + d1Avg = s.third + } + dataList1.removeAt(0) + } else { + result.lastOrNull()?.let { vo.apply { - d1eA = d?.mvElectricityA ?: .0 - d1eB = d?.mvElectricityB ?: .0 - d1eC = d?.mvElectricityC ?: .0 - val s = getStatus(d, d1) - d1Status = s.first - d1StatusName = s.second + d1eA = it.d1eA + d1eB = it.d1eB + d1eC = it.d1eC + d1Status = it.d1Status + d1StatusName = it.d1StatusName + d1Avg = it.d1Avg } - dataList1.removeAt(0) } } - if (dataList2.isNotEmpty()) { - val d = dataList2[0] - val t = LocalDateTime.ofInstant(d?.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) - if (lsT.isEqual(t)) { - vo.apply { - d2eA = d?.mvElectricityA ?: .0 - d2eB = d?.mvElectricityB ?: .0 - d2eC = d?.mvElectricityC ?: .0 - val s = getStatus(d, d2) - d2Status = s.first - d2StatusName = s.second - } - dataList2.removeAt(0) + } else { + result.lastOrNull()?.let { + vo.apply { + d1eA = it.d1eA + d1eB = it.d1eB + d1eC = it.d1eC + d1Status = it.d1Status + d1StatusName = it.d1StatusName + d1Avg = it.d1Avg } } - result.add(vo) - - lsT = lsT.plusMinutes(1) } + if (dataList2.isNotEmpty()) { + val d = dataList2[0] + val t = LocalDateTime.ofInstant(d?.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) + if (lsT.isEqual(t)) { + vo.apply { + d2eA = d?.mvElectricityA ?: .0 + d2eB = d?.mvElectricityB ?: .0 + d2eC = d?.mvElectricityC ?: .0 + val s = getStatus(d, d2) + d2Status = s.first + d2StatusName = s.second + d2Avg = s.third + } + dataList2.removeAt(0) + } else { + result.lastOrNull()?.let { + vo.apply { + d2eA = it.d2eA + d2eB = it.d2eB + d2eC = it.d2eC + d2Status = it.d2Status + d2StatusName = it.d2StatusName + d2Avg = it.d2Avg + } + } + } + } else { + result.lastOrNull()?.let { + vo.apply { + d2eA = it.d2eA + d2eB = it.d2eB + d2eC = it.d2eC + d2Status = it.d2Status + d2StatusName = it.d2StatusName + d2Avg = it.d2Avg + } + } + } + result.add(vo) + + lsT = lsT.plusMinutes(1) } return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result) } - // FIXME: 2021/11/5 姝ゅ鏆傛椂鍐欐锛屽悗缁慨鏀� - private fun getStatus(e: ElectricMinuteValue?, d: CompanyDevice?): Pair<String, String> { + 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) } @@ -236,7 +289,7 @@ if (status.isEmpty()) status = listOf("0", "2", "3") if (statusNames.isEmpty()) statusNames = listOf("寰呮満", "杩愯", "瓒呰礋鑽�") if (e == null) { - return Pair(status.first(), statusNames.first()) + return Triple(status.first(), statusNames.first(), .0) } val electricityList = mutableListOf<Double>() @@ -244,12 +297,12 @@ electricityList.add(e.mvElectricityB) electricityList.add(e.mvElectricityC) - val avg = electricityList.average() + val avg = round(electricityList.average() * 100) / 100 for (i in values.indices) { if (avg < values[i]) { - return Pair(status[i], statusNames[i]) + return Triple(status[i], statusNames[i], avg) } } - return Pair(status.last(), statusNames.last()) + return Triple(status.last(), statusNames.last(), avg) } } \ No newline at end of file -- Gitblit v1.9.3