From 88ae069fcf657c1790bb04b444e150c06f04e5f6 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 30 十二月 2021 11:50:46 +0800
Subject: [PATCH] 1. 网格化风向权重分析完善

---
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt |  245 +++++++++++++++++++++++++++++++-----------------
 1 files changed, 157 insertions(+), 88 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..28cd86f 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) }
@@ -133,11 +132,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 {
@@ -188,26 +189,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
@@ -218,34 +213,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
@@ -256,20 +237,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)
         }
@@ -277,32 +335,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 dailyAnalysis(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 00:00:00", dateFormatter3)
+                et = LocalDateTime.parse("$endTime 23:59:59", dateFormatter3)
+            } catch (e: DateTimeParseException) {
+                return BaseResponse(false, "鏃堕棿鏍煎紡閿欒锛屽簲涓簓yyy-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