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/bean/ElectricDailyInfo.kt              |   59 +++++++++++++++----
 src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt              |   13 ++++
 src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt                |    3 
 src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt              |   52 +++++++++++++++-
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt |   39 ------------
 5 files changed, 110 insertions(+), 56 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt b/src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt
index aca6e91..8c1d2e7 100644
--- a/src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt
+++ b/src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt
@@ -6,6 +6,7 @@
 import com.flightfeather.uav.lightshare.bean.ElectricDailyInfo
 import java.time.LocalDateTime
 import java.time.ZoneId
+import kotlin.math.round
 
 /**
  * 鐢ㄧ數閲忔棩鍒嗘瀽
@@ -39,24 +40,30 @@
             if (dataMap[it.mvStatCode]?.containsKey(day) != true) dataMap[it.mvStatCode]?.put(day, mutableListOf())
             val dayList = dataMap[it.mvStatCode]?.get(day)!!
             dayList.add(it)
+            // 鏁版嵁瀵瑰簲鐘舵��
+            val device = deviceMap[it.mvStatCode]
+            val status = getStatus(it, device)
 
             // 2.1 鏍规嵁鏁版嵁鍒囨崲褰撳墠璁惧绫诲瀷
             if (!dailyInfoMap.containsKey(day)) dailyInfoMap[day] = ElectricDailyInfo()
             val dayResult = dailyInfoMap[day]!!
             dayResult.day = day
-            dayResult.changeType(deviceMap[it.mvStatCode])
+            dayResult.changeType(device)
             // 2.2 姣忔棩鑾峰彇鐨勯涓暟鎹紝鍗充负褰撴棩璇ヨ澶囧紑鍚椂闂�
             if (dayList.size == 1) dayResult.setStartTime(it.mvDataTime)
-            // 2.3 姣忎釜鏁版嵁涓哄垎閽熷潎鍊硷紝鎬绘暟浠h〃寮�鍚椂闀�
-            dayResult.addRunTime(1)
-            // 2.4 缁熻褰撴棩璁惧杩愯鏃舵锛堝皬鏃讹級
+            // 2.3 姣忔棩鑾峰彇鐨勯涓负杩愯鐘舵�佺殑鏁版嵁锛屽嵆涓哄綋鏃ヨ璁惧姝e紡杩愯寮�濮嬫椂闂�
+            dayResult.setRunningTime(status, it)
+            // 2.4 姣忎釜鏁版嵁涓哄垎閽熷潎鍊硷紝鎬绘暟浠h〃寮�鍚椂闀�
+            dayResult.addRunTime(status)
+            // 2.5 缁熻褰撴棩璁惧杩愯鏃舵锛堝皬鏃讹級
             val hour = LocalDateTime.ofInstant(it.mvDataTime.toInstant(), ZoneId.systemDefault()).hour
             dayResult.addRunPeriod(hour)
         }
-        // 2.5 缁熻鍚勫彴璁惧姣忔棩缁撴潫鏃堕棿鍙婂垎鏋愮粨鏋�
+        // 2.6 缁熻鍚勫彴璁惧姣忔棩缁撴潫鏃堕棿鍙婂垎鏋愮粨鏋�
         dataMap.forEach { (dCode, dayMap) ->
             dayMap.forEach { (day, list) ->
                 dailyInfoMap[day]?.apply {
+
                     changeType(deviceMap[dCode])
                     setEndTime(list.last().mvDataTime)
                 }
@@ -66,4 +73,39 @@
 
         return result
     }
+
+    /**
+     * 鑾峰彇璁惧褰撳墠杩愯鐘舵��
+     * @param e 璁惧鐢ㄧ數閲忕洃娴嬫暟鎹�
+     * @param d 浼佷笟璁惧淇℃伅
+     * @return 鏁版嵁瀵瑰簲缁撴灉淇℃伅锛�<鐘舵�佺紪鍙凤紝鐘舵�佹弿杩帮紝鐢垫祦鍧囧��>
+     */
+    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)
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt
index d7f2802..91977a5 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/bean/ElectricDailyInfo.kt
@@ -1,6 +1,9 @@
 package com.flightfeather.uav.lightshare.bean
 
+import com.flightfeather.uav.dataprocess.ElectricDailyAnalysis
 import com.flightfeather.uav.domain.entity.CompanyDevice
+import com.flightfeather.uav.domain.entity.ElectricMinuteValue
+import com.flightfeather.uav.lightshare.eunm.ElectricityStatus
 import com.flightfeather.uav.lightshare.eunm.ElectricityType
 import java.util.*
 
@@ -17,8 +20,7 @@
     private var plSTime: Date? = null    // 寮�鍚椂闂�
     private var plRTime: Date? = null    // 姝e紡杩愯鏃堕棿
     private var plETime: Date? = null    // 鍏抽棴鏃堕棿
-    // FIXME: 2021/12/1 锛堢姸鎬佷负杩愯銆侀珮璐熻嵎鐨勬椂闀匡級
-    private var plRunTime: Int = 0    // 杩愯鏃堕暱锛堝垎閽燂級
+    private var plRunTime: Int = 0    // 杩愯鏃堕暱锛堝垎閽燂級锛堢姸鎬佷负杩愯銆侀珮璐熻嵎鐨勬椂闀匡級
     private var plRunPeriod = mutableListOf<Int>()// 杩愯鏃舵锛堝皬鏃讹級
     /***********鍑�鍖栬澶嘝urify, pf********************/
     private var pfDCode: String? = null
@@ -28,8 +30,12 @@
     private var pfRunTime: Int = 0
     private var pfRunPeriod = mutableListOf<Int>()
 
-    // TODO: 2021/12/1 姝e紡杩愯鏃堕棿宸�
-    // TODO: 2021/12/1 鍏抽棴鏃堕棿宸�
+    private var rTimeDiff:Int = 0 //姝e紡杩愯鏃堕棿宸�
+    private var sResult:Boolean = false //璁惧寮�鍚槸鍚﹀悎瑙�
+    private var eTimeDiff: Int = 0 //鍏抽棴鏃堕棿宸�
+    private var eResult: Boolean = false //璁惧鍏抽棴鏄惁鍚堣
+    private var runningTimeDiff = 0 //杩愯鏃堕暱宸�
+    private var rResult:Boolean = false //杩愯杩囩▼鏄惁鍚堣
     private var dailyResult: String = ""// 褰撴棩鍒嗘瀽缁撴灉鎻忚堪
 
     // 褰撳墠璁惧绫诲瀷锛岀敤浜庢彃鍏ユ暟鎹椂鍐冲畾璧嬪�煎瓧娈�
@@ -65,18 +71,39 @@
         }
     }
 
-    fun setRunningTime(date: Date) {
-
+    /**
+     * 璁剧疆姝e紡杩愯鏃堕棿
+     */
+    fun setRunningTime(s: Triple<String, String, Double>, e:ElectricMinuteValue?) {
+        when (deviceType) {
+            ElectricityType.ProductionLine -> {
+                if (plRTime == null) {
+                    if (s.first.toInt() >= ElectricityStatus.C.value) {
+                        plRTime = e?.mvDataTime
+                    }
+                }
+            }
+            ElectricityType.Purify -> {
+                if (pfRTime == null) {
+                    if (s.first.toInt() >= ElectricityStatus.C.value) {
+                        pfRTime = e?.mvDataTime
+                    }
+                }
+            }
+            else -> Unit
+        }
     }
 
     /**
      * 澧炲姞杩愯鏃堕暱
      */
-    fun addRunTime(min: Int) {
-        when (deviceType) {
-            ElectricityType.ProductionLine -> plRunTime += min
-            ElectricityType.Purify -> pfRunTime += min
-            else -> Unit
+    fun addRunTime(s: Triple<String, String, Double>) {
+        if (s.first.toInt() >= ElectricityStatus.C.value) {
+            when (deviceType) {
+                ElectricityType.ProductionLine -> plRunTime++
+                ElectricityType.Purify -> pfRunTime++
+                else -> Unit
+            }
         }
     }
 
@@ -95,11 +122,17 @@
      * 缁熻寰楀嚭褰撴棩鍒嗘瀽缁撴灉
      */
     fun getResult() {
-        // 1. 璁惧寮�鍚叧闂槸鍚﹀悎瑙�
-
         // TODO: 2021/12/1 1. 璁惧姝e紡杩愯鏃堕棿宸� =銆嬪紑鍚槸鍚﹀悎瑙�
+        if (pfRTime != null && plRTime != null) {
+            rTimeDiff = ((pfRTime!!.time - plRTime!!.time) / 1000 / 60).toInt()
+            sResult = rTimeDiff > 0
+        }
         // TODO: 2021/12/1 2锛岃澶囧叧闂椂闂村樊 =銆嬪叧闂槸鍚﹀悎瑙�
+        if (pfETime != null && plETime != null) {
+            eTimeDiff = ((pfETime!!.time - plETime!!.time) / 1000 / 60).toInt()
+        }
         // TODO: 2021/12/1 3. 杩愯鏃堕暱宸� =銆嬭繍琛岃繃绋嬫槸鍚﹀悎瑙�
+        runningTimeDiff = pfRunTime - plRunTime
         // TODO: 2021/12/1 4. 缁煎悎鍒ゆ柇缁撴灉
 
         // TODO: 2021/12/1 5. 澶氭棩鎽樿缁熻锛岃繍琛屽ぉ鏁般�佸悎瑙勫ぉ鏁扮瓑
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt
new file mode 100644
index 0000000..939508f
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityStatus.kt
@@ -0,0 +1,13 @@
+package com.flightfeather.uav.lightshare.eunm
+
+/**
+ * @author riku
+ * Date: 2021/12/2
+ * 鐢ㄧ數閲忕洃娴嬬殑璁惧鐨勮繍琛岀姸鎬�
+ */
+enum class ElectricityStatus(val value: Int, val des: String) {
+    A(0, "寰呮満"),
+    B(1, "浣庤礋鑽疯繍琛屾垨棰勭儹"),
+    C(2, "杩愯"),
+    D(3, "瓒呰礋鑽�"),
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt
index 1cdb0b4..c94d46b 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/eunm/ElectricityType.kt
@@ -2,7 +2,8 @@
 
 /**
  * @author riku
- * Date: 2019/9/26
+ * Date: 2021/11/26
+ * 鐢ㄧ數閲忕洃娴嬪搴旂殑浼佷笟璁惧绫诲瀷
  */
 enum class ElectricityType(val value: Int){
     //浜х嚎璁惧
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..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
@@ -200,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
@@ -238,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
@@ -274,41 +274,6 @@
         }
 
         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>> {

--
Gitblit v1.9.3