From d9a6f3c2503795f074ac602c24467f804417ad76 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 01 十二月 2021 19:41:34 +0800
Subject: [PATCH] 1. 新增用电量日分析功能

---
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt |   61 ++++++++++++++++++++++++++----
 1 files changed, 53 insertions(+), 8 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..d055539 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) }
@@ -277,6 +276,12 @@
         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 {
@@ -305,4 +310,44 @@
         }
         return Triple(status.last(), statusNames.last(), avg)
     }
+
+    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")
+            }
+        }
+
+        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)
+
+        return BaseResponse(true, data = result)
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3