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/service/impl/ElectricityServiceImpl.kt |   76 +++++++++++++++++++++----------------
 1 files changed, 43 insertions(+), 33 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 01496d2..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
@@ -1,25 +1,26 @@
 package com.flightfeather.uav.lightshare.service.impl
 
 import com.flightfeather.uav.common.utils.DateUtil
+import com.flightfeather.uav.dataprocess.ElectricDailyAnalysis
 import com.flightfeather.uav.domain.entity.CompanyDevice
 import com.flightfeather.uav.domain.entity.ElectricMinuteValue
 import com.flightfeather.uav.domain.entity.toAirData
 import com.flightfeather.uav.domain.mapper.CompanyDeviceMapper
 import com.flightfeather.uav.domain.mapper.ElectricMinuteValueMapper
-import com.flightfeather.uav.lightshare.bean.BaseResponse
-import com.flightfeather.uav.lightshare.bean.DataHead
-import com.flightfeather.uav.lightshare.bean.DataVo
-import com.flightfeather.uav.lightshare.bean.ElectricVo
+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
@@ -29,11 +30,9 @@
 
     private var dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
     private var dateFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")
+    private var dateFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
 
-    override fun getMinuteData(
-        deviceCode: String, startTime: String?,
-        endTime: String?, page: Int?, perPage: Int?
-    ): BaseResponse<List<ElectricMinuteValue>> {
+    override fun getMinuteData(deviceCode: String, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<ElectricMinuteValue>> {
         val perP = perPage ?: 60
         val p = page ?: 1
         val sTime = startTime?.let { dateFormatter.parse(it) }
@@ -201,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
@@ -239,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
@@ -277,32 +276,43 @@
         return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result)
     }
 
-    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) }
+    override fun dailyStatistics(cId: String, startTime: String?, endTime: String?): BaseResponse<List<ElectricDailyInfo>> {
+        // 鏍规嵁浼佷笟id鑾峰彇瀵瑰簲璁惧
+        val devices = companyDeviceMapper.selectByExample(Example(CompanyDevice::class.java).apply {
+            createCriteria().andEqualTo("cdCompanyId", cId)
+        })
+        val deviceCodeList = mutableListOf<String>()
+        devices.forEach { it?.let { deviceCodeList.add(it.cdDeviceCode) }}
+
+        val st:LocalDateTime
+        val et:LocalDateTime
+        // 褰撴病鏈夊紑濮嬫垨缁撴潫鏃堕棿鏃讹紝浣跨敤鏈�鏂颁竴鏉℃暟鎹椂闂寸殑褰撳ぉ浣滀负缁熻鏃堕棿
+        if (startTime == null || endTime == null) {
+            val em = electricMinuteValueMapper.selectOneByExample(Example(ElectricMinuteValue::class.java).apply {
+                createCriteria().andIn("mvStatCode", deviceCodeList)
+                orderBy("mvDataTime").desc()
+            })
+            val dataTime = LocalDateTime.ofInstant(em?.mvDataTime?.toInstant(), ZoneId.systemDefault())
+            st = dataTime.withHour(0).withMinute(0).withSecond(0)
+            et = dataTime.withHour(23).withMinute(59).withSecond(59)
+        }
+        // 褰撴湁寮�濮嬬粨鏉熸椂闂存椂锛屽垽鏂牸寮忔槸鍚︽纭�
+        else {
+            try {
+                st = LocalDateTime.parse(startTime, dateFormatter3).withHour(0).withMinute(0).withSecond(0)
+                et = LocalDateTime.parse(endTime, dateFormatter3).withHour(23).withMinute(59).withSecond(59)
+            } catch (e: DateTimeParseException) {
+                return BaseResponse(false, "鏃堕棿鏍煎紡閿欒锛屽簲涓簓yyy-MM-dd hh:mm:dd")
             }
         }
-        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 dataList = electricMinuteValueMapper.selectByExample(Example(ElectricMinuteValue::class.java).apply {
+            createCriteria().andIn("mvStatCode", deviceCodeList)
+                .andBetween("mvDataTime", st, et)
+            orderBy("mvDataTime")
+        })
+        val result = ElectricDailyAnalysis.analysis(devices, dataList)
 
-        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)
+        return BaseResponse(true, data = result)
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3