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