From 4cb662daa3d2760cc4c892e58f73cbf10b265f6f Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 11 十二月 2020 11:55:56 +0800
Subject: [PATCH] 新增经纬度、和时间的解析逻辑
---
src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataUnitDecoderImpl.kt | 122 +++++++++++++++++++++++++++++++---------
src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt | 23 +++++++
src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt | 12 ++-
src/main/kotlin/com/flightfeather/uav/socket/bean/AirData.kt | 11 ++-
4 files changed, 131 insertions(+), 37 deletions(-)
diff --git a/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt b/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt
index c507354..5c548e2 100644
--- a/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt
+++ b/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt
@@ -3,9 +3,12 @@
import com.flightfeather.uav.domain.entity.RealTimeData
import com.flightfeather.uav.domain.mapper.RealTimeDataMapper
import com.flightfeather.uav.repository.AirDataRepository
+import com.flightfeather.uav.socket.bean.AirData
import com.flightfeather.uav.socket.bean.AirDataPackage
+import com.flightfeather.uav.socket.eunm.FactorType
import com.google.gson.Gson
import org.springframework.stereotype.Repository
+import java.util.*
/**
* @author riku
@@ -15,7 +18,6 @@
class AirDataRepositoryImpl(private val realTimeDataMapper: RealTimeDataMapper): AirDataRepository {
override fun saveAirData(dataPackage: AirDataPackage): Int {
-
val data = RealTimeData().apply {
deviceCode = dataPackage.deviceCode
latitude
@@ -25,6 +27,25 @@
factors = Gson().toJson(dataPackage.dataUnit)
dataTime = dataPackage.dataTime
}
+ dataPackage.dataUnit.forEach {
+ if (it is AirData) {
+ when (it.factorId?.toInt()) {
+ FactorType.LAT.value -> {
+ data.latitude = it.factorData?.toBigDecimal()
+ }
+ FactorType.LNG.value -> {
+ data.longitude = it.factorData?.toBigDecimal()
+ }
+ FactorType.TIME.value -> {
+ it.factorData?.let { f-> Date(f)}?.let {d ->
+ data.dataTime = d
+ }
+ }
+ }
+ }
+ }
+
+
realTimeDataMapper.insert(data)
return 0
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/bean/AirData.kt b/src/main/kotlin/com/flightfeather/uav/socket/bean/AirData.kt
index c51473c..f1528bc 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/bean/AirData.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/bean/AirData.kt
@@ -4,12 +4,17 @@
* @author riku
* Date: 2020/6/10
*/
-class AirData:DataUnit(){
+class AirData : DataUnit() {
var factorId: String? = null
var factorName: String? = null
var sensorId: String? = null
+
//鐩戞祴鍥犲瓙瀹為檯鍊�
- var factorData: Double? = null
+ var factorData: Long? = null
+
//鐩戞祴鍥犲瓙鐗╃悊閲忥紙鐢靛帇锛�
- var physicalQuantity: Double? = null
+ var physicalQuantity: Long? = null
+
+ //鐘舵�佷綅
+ var statusList: List<String>? = null
}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataUnitDecoderImpl.kt b/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataUnitDecoderImpl.kt
index dac72d9..b6eba76 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataUnitDecoderImpl.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataUnitDecoderImpl.kt
@@ -6,6 +6,7 @@
import com.flightfeather.uav.socket.decoder.DataUnitDecoder
import com.flightfeather.uav.socket.eunm.FactorType
import org.slf4j.LoggerFactory
+import java.text.SimpleDateFormat
/**
* @author riku
@@ -38,49 +39,112 @@
if (i > b.size - it.factorType.byteLength) {
return@forEach
}
- when (it.factorType.byteLength) {
- AirDataPackage.FACTOR_BIT_LENGTH_2 -> {
- val a1 = "${b[i]}${b[i + 1]}".toInt(16)
- var b1 = b[i + 2].toInt(16).toDouble()
- while (b1 >= 1) {
- b1 /= 10
- }
- val data1 = a1 + b1
- resultList.add(AirData().apply {
- factorId = it.factorType.value?.toString()
- factorName = it.factorType.des
- factorData = data1
- })
- }
- AirDataPackage.FACTOR_BIT_LENGTH_1 -> {
- //鏁版嵁瀹為檯鍊硷紙3浣嶅瓧鑺傝〃绀猴級
- val a1 = "${b[i]}${b[i + 1]}".toInt(16)
- var b1 = b[i + 2].toInt(16).toDouble()
- while (b1 >= 1) {
- b1 /= 10
- }
- val data1 = a1 + b1
-
- //鏁版嵁鐗╃悊閲忥紙3浣嶅瓧鑺傝〃绀猴級
- val a2 = "${b[i]}${b[i + 1]}".toInt(16)
- var b2 = b[i + 2].toInt(16).toDouble()
+ when (it.factorType) {
+ FactorType.LNG -> {
+ val valid = b[i].toInt(16).toChar()//缁忕含搴︽槸鍚︽湁鏁堬紙鏈夋晥: A; 鏃犳晥: V锛�
+ val a1 = b[i + 1].toInt(16)
+ val b1 = b[i + 2].toInt(16)
+ var b2 = "${b[i + 3]}${b[i + 4]}".toInt(16).toLong()
while (b2 >= 1) {
b2 /= 10
}
- val data2 = a2 + b2
+ val lng = a1 + (b1 + b2) / 60
+ val s = b[i + 5].toInt(16).toChar()
resultList.add(AirData().apply {
factorId = it.factorType.value?.toString()
factorName = it.factorType.des
- factorData = data1
- physicalQuantity = data2
+ factorData = lng
+ statusList = listOf(valid.toString(), s.toString())
})
}
+ FactorType.LAT -> {
+ val a1 = b[i].toInt(16)
+ val b1 = b[i + 1].toInt(16)
+ var b2 = "${b[i + 2]}${b[i + 3]}".toInt(16).toLong()
+ while (b2 >= 1) {
+ b2 /= 10
+ }
+ val lat = a1 + (b1 + b2) / 60
+ val s = b[i + 4].toInt(16).toChar()
+ resultList.add(AirData().apply {
+ factorId = it.factorType.value.toString()
+ factorName = it.factorType.des
+ factorData = lat
+ statusList = listOf(s.toString())
+ })
+ }
+ FactorType.TIME -> {
+ val year = b[i].toInt(16).toString().run { numberFormat(this) }
+ val month = b[i+1].toInt(16).toString().run { numberFormat(this) }
+ val day = b[i+2].toInt(16).toString().run { numberFormat(this) }
+ val hour = b[i+3].toInt(16).toString().run { numberFormat(this) }
+ val minute = b[i+4].toInt(16).toString().run { numberFormat(this) }
+ val second = b[i + 5].toInt(16).toString().run { numberFormat(this) }
+ val date = "20$year-$month-$day $hour:$minute:$second"
+ val time = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).time
+ resultList.add(AirData().apply {
+ factorId = it.factorType.value.toString()
+ factorName = it.factorType.des
+ factorData = time
+ statusList = listOf(date)
+ })
+ }
+ else -> {
+ when (it.factorType.byteLength) {
+ AirDataPackage.FACTOR_BIT_LENGTH_2 -> {
+ val a1 = "${b[i]}${b[i + 1]}".toInt(16)
+ var b1 = b[i + 2].toInt(16).toLong()
+ while (b1 >= 1) {
+ b1 /= 10
+ }
+ val data1 = a1 + b1
+
+ resultList.add(AirData().apply {
+ factorId = it.factorType.value?.toString()
+ factorName = it.factorType.des
+ factorData = data1
+ })
+ }
+ AirDataPackage.FACTOR_BIT_LENGTH_1 -> {
+ //鏁版嵁瀹為檯鍊硷紙3浣嶅瓧鑺傝〃绀猴級
+ val a1 = "${b[i]}${b[i + 1]}".toInt(16)
+ var b1 = b[i + 2].toInt(16).toLong()
+ while (b1 >= 1) {
+ b1 /= 10
+ }
+ val data1 = a1 + b1
+
+ //鏁版嵁鐗╃悊閲忥紙3浣嶅瓧鑺傝〃绀猴級
+ val a2 = "${b[i+3]}${b[i + 4]}".toInt(16)
+ var b2 = b[i + 5].toInt(16).toLong()
+ while (b2 >= 1) {
+ b2 /= 10
+ }
+ val data2 = a2 + b2
+
+ resultList.add(AirData().apply {
+ factorId = it.factorType.value?.toString()
+ factorName = it.factorType.des
+ factorData = data1
+ physicalQuantity = data2
+ })
+ }
+ }
+ }
}
+
i += it.factorType.byteLength
}
return resultList
}
+
+ private fun numberFormat(num: String) =
+ if (num.length < 2) {
+ "0$num"
+ } else {
+ num
+ }
}
\ No newline at end of file
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 da16a68..ae56997 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
@@ -14,10 +14,12 @@
PM10(7, "PM10",3),
TEMPERATURE(8,"TEMPERATURE",3),
HUMIDITY(9, "HUMIDITY",3),
- VOC(10, "VOC",3),
- NOI(11, "NOI",3),//璐熸哀绂诲瓙
- LNG(12,"LNG",3),//缁忓害
- LAT(13,"LAT",3);//绾害
+ VOC(10, "VOC",6),
+ NOI(11, "NOI",6),//璐熸哀绂诲瓙
+ LNG(12,"LNG",6),//缁忓害
+ LAT(13,"LAT",5),//绾害
+ VELOCITY(14, "VELOCITY", 3),//閫熷害
+ TIME(15, "TIME", 6);//鏃堕棿
companion object {
@@ -35,6 +37,8 @@
NOI.value -> NOI
LNG.value -> LNG
LAT.value -> LAT
+ VELOCITY.value -> VELOCITY
+ TIME.value -> TIME
else -> null
}
}
--
Gitblit v1.9.3