From c56e1e74426238939f229f0005828d05089715ff Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 03 七月 2025 17:30:58 +0800
Subject: [PATCH] 2025.7.3 1. 新增动态污染溯源新的判定逻辑
---
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceController.kt | 10 ++
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt | 18 ++++
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt | 10 +
src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt | 29 ++++++
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/config/RTExcWindLevelConfig.kt | 33 +++++++-
src/main/kotlin/com/flightfeather/uav/socket/sender/MsgType.kt | 3
src/test/kotlin/com/flightfeather/uav/Test.kt | 5 +
src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuousSingle.kt | 2
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTExcChangeRate.kt | 26 +++++-
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/BaseRTExcWindLevel.kt | 15 +++
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTWarnChangeRate.kt | 20 +++++
src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt | 7 -
src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt | 4
src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionType.kt | 15 ++-
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt | 3
15 files changed, 168 insertions(+), 32 deletions(-)
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt
index 2bfe2be..7193e08 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt
@@ -53,6 +53,16 @@
}
/**
+ * 鍒ゆ柇鏁版嵁閲忕骇鍦ㄥ紓甯稿垽鏂殑鑼冨洿鍐�
+ * 榛樿鎵�鏈夐噺绾ч兘鍦ㄥ紓甯稿垽鏂殑鑼冨洿鍐�
+ */
+ open fun judgeDataScale(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean> {
+ val res = mutableMapOf<FactorType, Boolean>()
+ config.factorFilter.mainList().forEach { f -> res[f] = true }
+ return res
+ }
+
+ /**
* 鍒ゆ柇鍓嶅悗鏁版嵁鏄惁婊¤冻寮傚父鏉′欢
*/
abstract fun judgeException(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean>
@@ -62,6 +72,19 @@
* @param tag 寮傚父鏁版嵁瀵硅薄
*/
abstract fun judgeExceptionCount(tag: T, factorType: FactorType?): Boolean
+
+ /**
+ * 鍒ゆ柇鐩戞祴鍥犲瓙鏄惁鍑虹幇寮傚父
+ */
+ open fun judge(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean> {
+ val jds = judgeDataScale(p, n)
+ val jex = judgeException(p, n)
+ val res = mutableMapOf<FactorType, Boolean>()
+ jds.forEach { (t, u) ->
+ res[t] = u && jex[t] ?: false
+ }
+ return res
+ }
/**
* 寮傚父鏁版嵁鐨勬埅鍙栧垽鏂�
@@ -83,7 +106,7 @@
override fun onNextData(data: BaseRealTimeData) {
val isContinue = isContinuous(lastData, data)
- val hasException = judgeException(lastData, data)
+ val hasException = judge(lastData, data)
config.factorFilter.selectedList.forEach { s ->
val f = s.main
tagMap[f]?.let {
@@ -114,7 +137,7 @@
// 3. 鏁版嵁姝e父锛屾棤浠讳綍寮傚父鏃禿
// TODO("2025.6.3锛氬叾浠栧瓙绫荤殑姝ゅ鍒锋柊閫昏緫寰呭畬鎴愨��)
else {
- it.refreshWithNoException(data)
+ it.refreshWithNextException(data)
}
}
}
@@ -149,7 +172,7 @@
} else {
config.factorFilter.selectedList.forEach { f ->
val tag1 = tagMap[f.main] ?: return@forEach
- if (tag1.exceptionExisted && judgeExceptionCount(tag1, null)) {
+ if (tag1.exceptionExisted && judgeExceptionCount(tag1, f.main)) {
onNewException(tag1, f, exceptionStatus)
}
}
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuousSingle.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuousSingle.kt
index 1abfb01..cd592ab 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuousSingle.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuousSingle.kt
@@ -11,7 +11,7 @@
override fun onNextData(data: BaseRealTimeData) {
val isContinue = isContinuous(lastData, data)
- val hasException = judgeException(lastData, data)
+ val hasException = judge(lastData, data)
config.factorFilter.selectedList.forEach { s ->
val f = s.main
tagMap[f]?.let {
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionType.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionType.kt
index dac7f89..a80de91 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionType.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionType.kt
@@ -1,14 +1,15 @@
package com.flightfeather.uav.biz.dataanalysis.model
enum class ExceptionType(val value:Int, val des:String) {
- TYPE0(0, "鏁版嵁缂哄け寮傚父"),
- TYPE1(1, "鏁版嵁瓒呬綆寮傚父"),
+ TYPE0(0, "鏁版嵁缂哄け"),
+ TYPE1(1, "鏁版嵁瓒呬綆"),
TYPE2(2, "鏁版嵁瓒呮爣"),
TYPE3(3, "鏁版嵁闀挎椂娈垫棤娉㈠姩"),
- TYPE4(4, "閲忕骇绐佸彉寮傚父"),
- TYPE5(5, "涓磋繎瓒呮爣寮傚父"),
- TYPE6(6, "鍗曟棩瓒呮爣娆℃暟涓磋繎澶勭綒寮傚父"),
- TYPE7(7, "婊戝姩骞冲潎鍊肩獊鍙樺紓甯�"),
+ TYPE4(4, "閲忕骇绐佸彉"),
+ TYPE5(5, "涓磋繎瓒呮爣"),
+ TYPE6(6, "鍗曟棩瓒呮爣娆℃暟涓磋繎澶勭綒"),
+ TYPE7(7, "婊戝姩骞冲潎鍊肩獊鍙�"),
TYPE8(8, "鏈夋晥鐜囧紓甯�"),
- TYPE9(9, "鍙樺寲閫熺巼寮傚父"),
+ TYPE9(9, "蹇�熶笂鍗�"),
+ TYPE10(10, "蹇�熶笅闄�")
}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceController.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceController.kt
index 662cd6b..9c522a0 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceController.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceController.kt
@@ -72,6 +72,7 @@
add(RTExcWindLevel4(config) { exceptionCallback(it) }.also { it.init() })
add(RTExcWindLevel6(config) { exceptionCallback(it) }.also { it.init() })
add(RTExcChangeRate(config) { exceptionCallback(it) }.also { it.init() })
+ add(RTWarnChangeRate(config) { dataChangeCallback(it) }.also { it.init() })
}
}
@@ -110,6 +111,15 @@
pollutedSummary.addClue(ex)
}
+ // 鏁版嵁鍙樺寲鎻愰啋鍥炶皟
+ private fun dataChangeCallback(ex: PollutedClue) {
+ // 婧簮姹℃煋婧愪俊鎭�
+ ex.searchScenes(sceneInfoRep)
+
+ // 骞挎挱鏁版嵁鍙樺寲鎻愰啋
+ UnderwayWebSocketSender.broadcast(MsgType.DataChange.value, ex)
+ }
+
private fun summaryCallback(ex: PollutedSummary.AnalysisResult) {
// 骞挎挱姹℃煋婧簮寮傚父缁撴灉
UnderwayWebSocketSender.broadcast(MsgType.AnaResult.value, ex)
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/config/RTExcWindLevelConfig.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/config/RTExcWindLevelConfig.kt
index 1bbd6b4..d39d51d 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/config/RTExcWindLevelConfig.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/config/RTExcWindLevelConfig.kt
@@ -28,7 +28,7 @@
// 瀹氭椂绾跨储鍒嗘瀽鏃堕棿闂撮殧(鍗曚綅锛氬垎閽�)
var analysisPeriod = 15
// 瀹氭椂鍒嗘瀽闂撮殧涓紝绔嬪嵆杩涜绾跨储鍒嗘瀽鐨勬渶灏忕嚎绱㈤噺(鍗曚綅锛氫釜)
- var analysisCount = 2
+ var analysisCount = 4
/****鏁版嵁绐佸彉*****************************************************************************/
// 0 - 1绾ч
@@ -52,8 +52,8 @@
1.6 to 7.9,
0.2 to Double.MAX_VALUE,
DistanceType.TYPE3,
-// 3
- 1
+ 3
+// 1
)
// 5 - 6绾ч
@@ -64,7 +64,7 @@
3
)
- /****鏁版嵁鍙樺寲閫熺巼*****************************************************************************/
+ /****鏁版嵁蹇�熶笂鍗�*****************************************************************************/
var changeRateCondition = WindLevelCondition(
.0 to Double.MAX_VALUE,
0.1 to Double.MAX_VALUE,
@@ -72,7 +72,7 @@
3
)
// 鐩戞祴鍥犲瓙鍦ㄤ竴涓洃娴嬪懆鏈燂紙4绉掞級鍐呮甯稿彉鍖栫殑閲忕骇鑼冨洿
- var changeRate = mutableMapOf(
+ var changeRateUp = mutableMapOf(
FactorType.PM25 to WindLevelCondition(
.0 to Double.MAX_VALUE,
4.0 to Double.MAX_VALUE,
@@ -92,4 +92,27 @@
1
),
)
+
+ /****鏁版嵁蹇�熶笅闄�*****************************************************************************/
+ // 鐩戞祴鍥犲瓙鍦ㄤ竴涓洃娴嬪懆鏈燂紙4绉掞級鍐呮甯稿彉鍖栫殑閲忕骇鑼冨洿
+ var changeRateDown = mutableMapOf(
+ FactorType.PM25 to WindLevelCondition(
+ .0 to Double.MAX_VALUE,
+ -Double.MAX_VALUE to -2.0,
+ DistanceType.TYPE1,
+ 3
+ ),
+ FactorType.PM10 to WindLevelCondition(
+ .0 to Double.MAX_VALUE,
+ -Double.MAX_VALUE to -2.0,
+ DistanceType.TYPE1,
+ 3
+ ),
+ FactorType.VOC to WindLevelCondition(
+ .0 to Double.MAX_VALUE,
+ -Double.MAX_VALUE to -3.0,
+ DistanceType.TYPE1,
+ 3
+ ),
+ )
}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/BaseRTExcWindLevel.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/BaseRTExcWindLevel.kt
index f78fd15..84933af 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/BaseRTExcWindLevel.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/BaseRTExcWindLevel.kt
@@ -37,9 +37,22 @@
return ExceptionType.TYPE4
}
+ override fun judgeDataScale(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean> {
+ val res = mutableMapOf<FactorType, Boolean>()
+ config.factorFilter.mainList().forEach { f ->
+ if (p?.getByFactorType(f) == null || n.getByFactorType(f) == null || n.windSpeed == null) {
+ res[f] = (false)
+ return@forEach
+ }
+ val nValue = n.getByFactorType(f)!!
+ val minValue = FactorType.getVMin(f)
+ res[f] = nValue >= minValue
+ }
+ return res
+ }
+
override fun judgeException(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean> {
val res = mutableMapOf<FactorType, Boolean>()
- println()
config.factorFilter.mainList().forEach { f ->
if (p?.getByFactorType(f) == null || n.getByFactorType(f) == null || n.windSpeed == null) {
res[f] = (false)
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTExcChangeRate.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTExcChangeRate.kt
index c6360d3..f07fd1c 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTExcChangeRate.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTExcChangeRate.kt
@@ -19,7 +19,7 @@
* @date 2025/6/10
* @author feiyu02
*/
-class RTExcChangeRate(config: RTExcWindLevelConfig) :
+open class RTExcChangeRate(config: RTExcWindLevelConfig) :
BaseExceptionContinuous<ExceptionTag, RTExcWindLevelConfig, PollutedClue>(config, ExceptionTag::class.java) {
constructor(config: RTExcWindLevelConfig, callback: NewPolluteClueCallback) : this(config){
@@ -28,8 +28,24 @@
private var callback: NewPolluteClueCallback? = null
+ open var changeRate = this.config.changeRateUp
+
override fun getExceptionType(): ExceptionType {
return ExceptionType.TYPE9
+ }
+
+ override fun judgeDataScale(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean> {
+ val res = mutableMapOf<FactorType, Boolean>()
+ config.factorFilter.mainList().forEach { f ->
+ if (p?.getByFactorType(f) == null || n.getByFactorType(f) == null || n.windSpeed == null) {
+ res[f] = (false)
+ return@forEach
+ }
+ val nValue = n.getByFactorType(f)!!
+ val minValue = FactorType.getVMin(f)
+ res[f] = nValue >= minValue
+ }
+ return res
}
override fun judgeException(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean> {
@@ -40,7 +56,7 @@
return@forEach
}
- val rate = config.changeRate[f]
+ val rate = changeRate[f]
val pValue = p.getByFactorType(f)!!
val nValue = n.getByFactorType(f)!!
@@ -48,7 +64,7 @@
val v = (nValue - pValue)
val b1 = if (rate != null) {
- v >= rate.mutationRate.first
+ v in rate.mutationRate.first..rate.mutationRate.second
} else {
false
}
@@ -61,7 +77,7 @@
}
override fun judgeExceptionCount(tag: ExceptionTag, factorType: FactorType?): Boolean {
- return tag.exceptionData.size >= (config.changeRate[factorType]?.countLimit ?: 1)
+ return tag.exceptionData.size >= (changeRate[factorType]?.countLimit ?: 1)
}
override fun needCut(tag: ExceptionTag, hasException: Boolean?): Boolean {
@@ -97,7 +113,7 @@
}
override fun newResult(tag: ExceptionTag, factor: FactorFilter.SelectedFactor): PollutedClue {
- return PollutedClue(tag, factor, getExceptionType(), config, config.changeRate[factor.main])
+ return PollutedClue(tag, factor, getExceptionType(), config, changeRate[factor.main])
}
override fun onNewException(
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTWarnChangeRate.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTWarnChangeRate.kt
new file mode 100644
index 0000000..7dce4e3
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/RTWarnChangeRate.kt
@@ -0,0 +1,20 @@
+package com.flightfeather.uav.biz.sourcetrace.exceptiontype
+
+import com.flightfeather.uav.biz.dataanalysis.model.ExceptionType
+import com.flightfeather.uav.biz.sourcetrace.config.RTExcWindLevelConfig
+
+/**
+ * 鏁版嵁蹇�熶笅闄嶆彁閱�
+ * @date 2025/7/3
+ * @author feiyu02
+ */
+class RTWarnChangeRate : RTExcChangeRate {
+ constructor(config: RTExcWindLevelConfig):super(config)
+ constructor(config: RTExcWindLevelConfig, callback: NewPolluteClueCallback) : super(config, callback)
+
+ override fun getExceptionType(): ExceptionType {
+ return ExceptionType.TYPE10
+ }
+
+ override var changeRate = config.changeRateDown
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
index 4a599d7..5661859 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
@@ -59,6 +59,7 @@
historyDataList.addAll(historyData.map { it.toDataVo() })
calPer()
+ calRate()
}
var deviceCode: String? = null
@@ -85,6 +86,8 @@
var percentage: Double? = null
// 鍥犲瓙閲忕骇骞冲潎鍙樺寲骞呭害
var avgPer: Double? = null
+ // 鍥犲瓙閲忕骇骞冲潎鍙樺寲閫熺巼
+ var avgRate: Double? = null
// 鍙戠敓娆℃暟
var times: Int? = null
@@ -108,4 +111,19 @@
}
avgPer = total / (list.size - 1)
}
+
+ private fun calRate() {
+ val list = dataList
+// list.add(startData)
+// list.addAll(dataList)
+ if (list.size < 2) return
+
+ var total = .0
+ for (i in 0 until list.size - 1) {
+ val p = list[i]?.getByFactorType(selectedFactor!!.main)!!
+ val n = list[i + 1]?.getByFactorType(selectedFactor!!.main)!!
+ total += (n - p) / 4
+ }
+ avgRate = total / (list.size - 1)
+ }
}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
index d74ceaa..1543d33 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
@@ -107,18 +107,22 @@
FactorType.PM25,
FactorType.PM10,
-> {
+ val pm25Avg = round(pollutedData.dataList.map { it.pm25!! }.average() * 10) / 10
+ val pm10Avg = round(pollutedData.dataList.map { it.pm10!! }.average() * 10) / 10
// 璁$畻寮傚父鏁版嵁鐨刾m2.5鍗爌m10姣旈噸鐨勫潎鍊�
val percentageAvg = pollutedData.dataList.map {
it.pm25!! / it.pm10!!
}.average()
+ val str =
+ "PM2.5閲忕骇涓�${pm25Avg}渭g/m鲁锛孭M10閲忕骇涓�${pm25Avg}渭g/m鲁锛孭M2.5鍗燩M10鐨勬瘮閲嶄负${round(percentageAvg * 100)}%"
return if (percentageAvg > 0.666) {
- "PM2.5鍗燩M10鐨勬瘮閲嶄负${round(percentageAvg * 100)}%锛屾瘮閲嶈緝澶э紝姹℃煋婧愪互椁愰ギ涓轰富锛屽伐鍦版涔�" to
+ "${str}锛屾瘮閲嶈緝澶э紝姹℃煋婧愪互椁愰ギ涓轰富锛屽伐鍦版涔�" to
listOf(SceneType.TYPE1, SceneType.TYPE2, SceneType.TYPE3, SceneType.TYPE14, SceneType.TYPE5)
} else if (percentageAvg < 0.333) {
- "PM2.5鍗燩M10鐨勬瘮閲嶄负${round(percentageAvg * 100)}%锛屾瘮閲嶈緝灏忥紝灞炰簬澶ч绮掓壃灏樻薄鏌擄紝姹℃煋婧愪互宸ュ湴涓轰富" to
+ "${str}锛屾瘮閲嶈緝灏忥紝灞炰簬澶ч绮掓壃灏樻薄鏌擄紝姹℃煋婧愪互宸ュ湴涓轰富" to
listOf(SceneType.TYPE1, SceneType.TYPE2, SceneType.TYPE3, SceneType.TYPE14, SceneType.TYPE5)
} else {
- "PM2.5鍗燩M10鐨勬瘮閲嶄负${round(percentageAvg * 100)}%锛屾薄鏌撴簮浠ラ楗�佸伐鍦颁负涓�" to
+ "${str}锛屾薄鏌撴簮浠ラ楗�佸伐鍦颁负涓�" to
listOf(SceneType.TYPE1, SceneType.TYPE2, SceneType.TYPE3, SceneType.TYPE14, SceneType.TYPE5)
}
}
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
index 58b3e29..53532f6 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
@@ -168,7 +168,8 @@
val closetScene = result.sortedSceneList?.first()
// 璧拌埅璺嚎璋冩暣寤鸿
result.advice =
- "鏍规嵁${sT}鑷�${eT}鐨�${clueList.size}鏉℃渶鏂版薄鏌撶嚎绱紝姹℃煋婧愩��${closetScene?.first?.name}銆戣澶氭婧簮锛屽叿鏈夎緝楂樻薄鏌撻闄╋紝鐜版彁渚涙柊鐨勮蛋鑸帹鑽愯矾绾匡紝鍙粡杩囪姹℃煋婧愩��"
+ "鏍规嵁${sT}鑷�${eT}鐨�${clueList.size}鏉℃函婧愬垏鐗囷紝椋庨櫓婧愩��" +
+ "${closetScene?.first?.name}銆戣澶氭婧簮锛屽叿鏈夎緝楂樻薄鏌撻闄╋紝鐜版彁渚涙柊鐨勮蛋鑸帹鑽愯矾绾匡紝鍙粡杩囪姹℃煋婧愩��"
val lastP = realTimeDataList.last()
// 寤鸿瀵瑰簲鐨勬暟鎹噰鏍锋椂闂�
diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt
index 40bfa5a..45f9b80 100644
--- a/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt
+++ b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt
@@ -82,7 +82,7 @@
val it = mDataList[i].values?.get(y) ?: continue
if (!calTypes.contains(it.factorName)) continue
- val vMax = FactorType.getVMax(it.factorName) ?: continue
+ val vMax = FactorType.getVMin(it.factorName) ?: continue
it.factorData ?: continue
if (it.factorData!! > vMax) {
@@ -150,7 +150,7 @@
while (i < mDataList.size) {
for (y in mDataList[i].values?.indices ?: 0..0) {
val it = mDataList[i].values?.get(y) ?: continue
- val vMax = FactorType.getVMax(it.factorName) ?: continue
+ val vMax = FactorType.getVMin(it.factorName) ?: continue
it.factorData ?: continue
if (it.factorData!! > vMax) {
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt b/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
index 9874aa7..bd019b6 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
@@ -125,9 +125,9 @@
else -> null
}
- fun getVMax(name: String?): Double? {
+ fun getVMin(name: String?): Double? {
getByName(name)?.let {
- return getVMax(it)
+ return getVMin(it)
}
return null
}
@@ -135,7 +135,7 @@
/**
* 涓嶅鐞嗕綆浜庢鍊肩殑鍊�
*/
- fun getVMax(type: FactorType): Double? = when (type) {
+ fun getVMin(type: FactorType): Double = when (type) {
NO -> 1.0
NO2 -> 10.0
CO -> 100.0
@@ -155,7 +155,6 @@
WIND_SPEED -> 2.0
WIND_DIRECTION -> 0.0
HEIGHT -> 0.0
- else -> null
}
/**
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/sender/MsgType.kt b/src/main/kotlin/com/flightfeather/uav/socket/sender/MsgType.kt
index be86205..6aba55f 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/sender/MsgType.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/sender/MsgType.kt
@@ -15,4 +15,7 @@
* @see [PollutedSummary.AnalysisResult]
*/
AnaResult(2),
+
+ // 鏁版嵁鍙樺寲鎻愰啋锛堥潪寮傚父锛�
+ DataChange(3),
}
\ No newline at end of file
diff --git a/src/test/kotlin/com/flightfeather/uav/Test.kt b/src/test/kotlin/com/flightfeather/uav/Test.kt
index eca3219..4941af9 100644
--- a/src/test/kotlin/com/flightfeather/uav/Test.kt
+++ b/src/test/kotlin/com/flightfeather/uav/Test.kt
@@ -163,4 +163,9 @@
println("${period?.first};${period?.second};${period?.third}")
}
+
+ @Test
+ fun foo18() {
+ println(-4.382398 in 4.0..Double.MAX_VALUE)
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3