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/bean/ElectricVo.kt | 6 +
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt | 129 ++++++++++++++++++++++++++++++------------
2 files changed, 95 insertions(+), 40 deletions(-)
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricVo.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricVo.kt
index 856bf3c..8142d42 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricVo.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricVo.kt
@@ -6,12 +6,14 @@
var d1eA: Double = .0,
var d1eB: Double = .0,
var d1eC: Double = .0,
+ var d1Avg: Double = .0,
var d1Status: String? = "0",
- var d1StatusName: String? = null,
+ var d1StatusName: String? = "寰呮満",
//搴熸皵鍑�鍖栬缃�
var d2eA: Double = .0,
var d2eB: Double = .0,
var d2eC: Double = .0,
+ var d2Avg: Double = .0,
var d2Status: String? = "0",
- var d2StatusName: String? = null
+ var d2StatusName: String? = "寰呮満"
)
\ No newline at end of file
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