From eb3dd00b0b7fcda477229d518d250f9c842b790b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 21 十月 2025 17:45:44 +0800
Subject: [PATCH] 2025.10.21 1. 走航季度报告相关数据计算逻辑调整
---
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt | 222 ++++++++++++++++++++++++++++++-------------------------
1 files changed, 121 insertions(+), 101 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 d055539..39e9f5e 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
@@ -1,7 +1,7 @@
package com.flightfeather.uav.lightshare.service.impl
import com.flightfeather.uav.common.utils.DateUtil
-import com.flightfeather.uav.dataprocess.ElectricDailyAnalysis
+import com.flightfeather.uav.biz.dataprocess.ElectricDailyAnalysis
import com.flightfeather.uav.domain.entity.CompanyDevice
import com.flightfeather.uav.domain.entity.ElectricMinuteValue
import com.flightfeather.uav.domain.entity.toAirData
@@ -10,18 +10,14 @@
import com.flightfeather.uav.lightshare.bean.*
import com.flightfeather.uav.lightshare.eunm.ElectricityType
import com.flightfeather.uav.lightshare.service.ElectricityService
-import com.flightfeather.uav.socket.bean.AirData
import com.github.pagehelper.PageHelper
-import org.springframework.format.annotation.DateTimeFormat
import org.springframework.stereotype.Service
import tk.mybatis.mapper.entity.Example
import java.text.SimpleDateFormat
-import java.time.LocalDate
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.time.format.DateTimeParseException
-import kotlin.math.round
@Service
class ElectricityServiceImpl(
@@ -132,11 +128,13 @@
if (startTime == null && endTime == null) {
dataList1.reverse()
}
- pageInfo = PageHelper.startPage<ElectricMinuteValue>(p, perP)
+ if (dataList1.isEmpty()) return BaseResponse(true, data = result)
+
+// pageInfo = PageHelper.startPage<ElectricMinuteValue>(p, perP)
val dataList2 = electricMinuteValueMapper.selectByExample(Example(ElectricMinuteValue::class.java).apply {
createCriteria().andEqualTo("mvStatCode", d2?.cdDeviceCode)
.apply {
- sTime?.let { andGreaterThanOrEqualTo("mvDataTime", it) }
+ andGreaterThanOrEqualTo("mvDataTime", sTime ?: dataList1[0].mvDataTime)
eTime?.let { andLessThanOrEqualTo("mvDataTime", it) }
}
orderBy("mvDataTime").apply {
@@ -187,26 +185,20 @@
// 鏍规嵁涓ゅ彴璁惧鐨勬渶闀胯捣濮嬫椂闂达紝璁$畻鍏朵腑姣忎竴鍒嗛挓鐨勫搴斿潎鍊�
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 {
+ val data1 = if (dataList1.isNotEmpty()) dataList1[0] else null
+ val t1 = data1?.let { LocalDateTime.ofInstant(it.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) }
+ val data2 = if (dataList2.isNotEmpty()) dataList2[0] else null
+ val t2 = data2?.let { LocalDateTime.ofInstant(it.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) }
+ if ((data1 == null || !lsT.isEqual(t1))
+ && (data2 == null || !lsT.isEqual(t2))
+ ) {
+
+ } else {
+ // 涓ゅ彴璁惧鐨勬暟鎹牴鎹椂闂村悎骞朵负涓�涓粨鏋勪綋
+ val vo = ElectricVo(lsT.format(dateFormatter2))
+ if (data1 == null || !lsT.isEqual(t1)) {
result.lastOrNull()?.let {
vo.apply {
d1eA = it.d1eA
@@ -217,34 +209,20 @@
d1Avg = it.d1Avg
}
}
- }
- } else {
- result.lastOrNull()?.let {
- vo.apply {
- d1eA = it.d1eA
- d1eB = it.d1eB
- d1eC = it.d1eC
- d1Status = it.d1Status
- d1StatusName = it.d1StatusName
- d1Avg = it.d1Avg
- }
- }
- }
- 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 {
+ vo.apply {
+ d1eA = data1.mvElectricityA ?: .0
+ d1eB = data1.mvElectricityB ?: .0
+ d1eC = data1.mvElectricityC ?: .0
+ val s = ElectricDailyAnalysis.getStatus(data1, d1)
+ d1Status = s.first
+ d1StatusName = s.second
+ d1Avg = s.third
+ }
+ dataList1.removeAt(0)
+ }
+
+ if (data2 == null || !lsT.isEqual(t2)) {
result.lastOrNull()?.let {
vo.apply {
d2eA = it.d2eA
@@ -255,20 +233,97 @@
d2Avg = it.d2Avg
}
}
- }
- } else {
- result.lastOrNull()?.let {
+ } else {
vo.apply {
- d2eA = it.d2eA
- d2eB = it.d2eB
- d2eC = it.d2eC
- d2Status = it.d2Status
- d2StatusName = it.d2StatusName
- d2Avg = it.d2Avg
+ d2eA = data2.mvElectricityA ?: .0
+ d2eB = data2.mvElectricityB ?: .0
+ d2eC = data2.mvElectricityC ?: .0
+ val s = ElectricDailyAnalysis.getStatus(data2, d2)
+ d2Status = s.first
+ d2StatusName = s.second
+ d2Avg = s.third
}
+ dataList2.removeAt(0)
}
+
+ result.add(vo)
}
- result.add(vo)
+// 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 = ElectricDailyAnalysis.getStatus(d, d1)
+// d1Status = s.first
+// d1StatusName = s.second
+// d1Avg = s.third
+// }
+// dataList1.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
+// }
+// }
+// }
+// } else {
+// result.lastOrNull()?.let {
+// vo.apply {
+// d1eA = it.d1eA
+// d1eB = it.d1eB
+// d1eC = it.d1eC
+// d1Status = it.d1Status
+// d1StatusName = it.d1StatusName
+// d1Avg = it.d1Avg
+// }
+// }
+// }
+// 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 = ElectricDailyAnalysis.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
+// }
+// }
+// }
lsT = lsT.plusMinutes(1)
}
@@ -276,42 +331,7 @@
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>> {
+ override fun dailyAnalysis(cId: String, startTime: String?, endTime: String?): BaseResponse<List<ElectricDailyInfo>> {
// 鏍规嵁浼佷笟id鑾峰彇瀵瑰簲璁惧
val devices = companyDeviceMapper.selectByExample(Example(CompanyDevice::class.java).apply {
createCriteria().andEqualTo("cdCompanyId", cId)
@@ -334,10 +354,10 @@
// 褰撴湁寮�濮嬬粨鏉熸椂闂存椂锛屽垽鏂牸寮忔槸鍚︽纭�
else {
try {
- st = LocalDateTime.parse(startTime, dateFormatter3).withHour(0).withMinute(0).withSecond(0)
- et = LocalDateTime.parse(endTime, dateFormatter3).withHour(23).withMinute(59).withSecond(59)
+ st = LocalDateTime.parse("$startTime 00:00:00", dateFormatter3)
+ et = LocalDateTime.parse("$endTime 23:59:59", dateFormatter3)
} catch (e: DateTimeParseException) {
- return BaseResponse(false, "鏃堕棿鏍煎紡閿欒锛屽簲涓簓yyy-MM-dd hh:mm:dd")
+ return BaseResponse(false, "鏃堕棿鏍煎紡閿欒锛屽簲涓簓yyy-MM-dd")
}
}
--
Gitblit v1.9.3