From 14ce5d2ccfae554497763da846ffb9eb39cd6d34 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期一, 23 九月 2019 12:55:26 +0800
Subject: [PATCH] 1. 修改实时数据各项的转换逻辑

---
 src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt |   96 ++++++++++++++++++++++++++++-------------------
 1 files changed, 57 insertions(+), 39 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt b/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt
index e1067f6..7c401c1 100644
--- a/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt
+++ b/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt
@@ -1,11 +1,11 @@
 package com.flightfeather.obd.socket.decoder.impl
 
-import com.flightfeather.obd.socket.bean.EngineDataFlow
-import com.flightfeather.obd.socket.bean.ObdData
-import com.flightfeather.obd.socket.bean.SupplementDataFlow
+import com.flightfeather.obd.common.INVALID_DATA_4_BYTE
+import com.flightfeather.obd.socket.bean.EngineDataStream
+import com.flightfeather.obd.socket.bean.ObdInfo
+import com.flightfeather.obd.socket.bean.SupplementDataStream
 import com.flightfeather.obd.socket.decoder.RealTimeDataDecoder
 import com.flightfeather.obd.socket.eunm.ObdDataType
-import org.springframework.stereotype.Component
 import java.util.*
 
 /**
@@ -13,7 +13,7 @@
  * Date: 2019/9/15
  */
 class RealTimeDataDecoderImpl : RealTimeDataDecoder {
-    override fun getObdData(time: Date?, serialNum: Int, b: List<String>): ObdData? {
+    override fun getObdData(time: Date?, serialNum: Int, b: List<String>): ObdInfo? {
         val dataList = mutableListOf<String>().apply { addAll(b) }
         if (b.isNotEmpty()) {
             //鍘婚櫎 淇℃伅绫诲瀷鏍囧織
@@ -47,15 +47,15 @@
                 }
             }
 
-            return ObdData(time, serialNum).apply {
+            return ObdInfo(time, serialNum).apply {
                 obdProtocol = dataList[0].toIntOrNull(16)
                 obdMil = dataList[1].toIntOrNull(16)
                 diagnosisSupportStatus = "${dataList[2]}${dataList[3]}".toIntOrNull(16)?.toString(2)
                 diagnosisReadyStatus = "${dataList[4]}${dataList[5]}".toIntOrNull(16)?.toString(2)
                 obdVin = vin.toString()
-                obdSoftwareCode = softwareCode.toString()
+                obdCrn = softwareCode.toString()
                 obdCvn = cvn.toString()
-                this.IUPR = IUPR.toString()
+                this.iupr = IUPR.toString()
                 obdFaultCodeNum = faultCodeNum
                 obdFaultCode = faultCode.toString()
             }
@@ -64,7 +64,7 @@
         }
     }
 
-    override fun getEngineDataFlow(time: Date?, serialNum: Int, b: List<String>): EngineDataFlow? {
+    override fun getEngineDataStream(time: Date?, serialNum: Int, b: List<String>): EngineDataStream? {
         val dataList = mutableListOf<String>().apply { addAll(b) }
         if (b.isNotEmpty()) {
             //鍘婚櫎 淇℃伅绫诲瀷鏍囧織
@@ -72,33 +72,39 @@
         }
 
         return if (dataList.size >= 37) {
-             EngineDataFlow(time, serialNum).apply {
-                obdSpeed = "${dataList[0]}${dataList[1]}".toIntOrNull(16)?.toDouble()?.times((1 / 256).toDouble())
+             EngineDataStream(time, serialNum).apply {
+                obdSpeed = "${dataList[0]}${dataList[1]}".toIntOrNull(16)?.toDouble()?.div(256)
                 obdAirPressure = dataList[2].toIntOrNull(16)?.toDouble()?.times(0.5)
                 obdEngineTorque = dataList[3].toIntOrNull(16)?.minus(125)?.toDouble()?.div(100)
                 obdFrictionTorque = dataList[4].toIntOrNull(16)?.minus(125)?.toDouble()?.div(100)
                 obdEngineRpm = "${dataList[5]}${dataList[6]}".toIntOrNull(16)?.toDouble()?.times(0.125)
                 obdEngineFuelFlow = "${dataList[7]}${dataList[8]}".toIntOrNull(16)?.toDouble()?.times(0.05)
-                obdScrUpstreamNo = "${dataList[9]}${dataList[10]}".toIntOrNull(16)?.minus(200)?.toDouble()?.times(0.05)
-                obdScrDownstreamNo = "${dataList[11]}${dataList[12]}".toIntOrNull(16)?.minus(200)?.toDouble()?.times(0.05)
+                obdScrUpstreamNox = "${dataList[9]}${dataList[10]}".toIntOrNull(16)?.times(0.05)?.minus(200)
+                obdScrDownstreamNox = "${dataList[11]}${dataList[12]}".toIntOrNull(16)?.times(0.05)?.minus(200)
                 obdRemainReactant = dataList[13].toIntOrNull(16)?.toDouble()?.times(0.4)?.div(100)
                 obdAirInput = "${dataList[14]}${dataList[15]}".toIntOrNull(16)?.toDouble()?.times(0.05)
-                obdScrInputTemp = "${dataList[16]}${dataList[17]}".toIntOrNull(16)?.minus(273)?.toDouble()?.times(0.03125)
-                obdScrOutputTemp = "${dataList[18]}${dataList[19]}".toIntOrNull(16)?.minus(273)?.toDouble()?.times(0.03125)
+                obdScrInputTemp = "${dataList[16]}${dataList[17]}".toIntOrNull(16)?.times(0.03125)?.minus(273)
+                obdScrOutputTemp = "${dataList[18]}${dataList[19]}".toIntOrNull(16)?.times(0.03125)?.minus(273)
                 obdDpf = "${dataList[20]}${dataList[21]}".toIntOrNull(16)?.toDouble()?.times(0.1)
                 obdEngineCoolantTemp = dataList[22].toIntOrNull(16)?.minus(40)?.toDouble()
                 obdFuelLevel = dataList[23].toIntOrNull(16)?.toDouble()?.times(0.4)
                 obdLocationStatus = dataList[24].toIntOrNull(16)
-                obdLong = "${dataList[25]}${dataList[26]}${dataList[27]}${dataList[28]}".toIntOrNull(16)?.toDouble()?.times(0.000001)
-                obdLat = "${dataList[29]}${dataList[30]}${dataList[31]}${dataList[32]}".toIntOrNull(16)?.toDouble()?.times(0.000001)
-                obdTotalMileage = "${dataList[33]}${dataList[34]}${dataList[35]}${dataList[36]}".toIntOrNull(16)?.toDouble()?.times(0.1)
+                 with("${dataList[25]}${dataList[26]}${dataList[27]}${dataList[28]}") {
+                     obdLong = if (toUpperCase() == INVALID_DATA_4_BYTE) { -1.0 } else { toBigIntegerOrNull(16)?.toDouble()?.times(0.000001) }
+                 }
+                 with("${dataList[29]}${dataList[30]}${dataList[31]}${dataList[32]}") {
+                     obdLat = if (toUpperCase() == INVALID_DATA_4_BYTE) { -1.0 } else { toBigIntegerOrNull(16)?.toDouble()?.times(0.000001) }
+                 }
+                 with("${dataList[33]}${dataList[34]}${dataList[35]}${dataList[36]}") {
+                     obdTotalMileage = if (toUpperCase() == INVALID_DATA_4_BYTE) { -1.0 } else { toBigIntegerOrNull(16)?.toDouble()?.times(0.1) }
+                 }
             }
         } else {
             null
         }
     }
 
-    override fun getSupplementDataFlow(time: Date?, serialNum: Int, b: List<String>): SupplementDataFlow? {
+    override fun getSupplementDataStream(time: Date?, serialNum: Int, b: List<String>): SupplementDataStream? {
         val dataList = mutableListOf<String>().apply { addAll(b) }
         if (b.isNotEmpty()) {
             //鍘婚櫎 淇℃伅绫诲瀷鏍囧織
@@ -106,14 +112,20 @@
         }
 
         return if (dataList.size >= 17) {
-            SupplementDataFlow(time, serialNum).apply {
+            SupplementDataStream(time, serialNum).apply {
                 obdEngineTorqueMode = dataList[0].toIntOrNull(16)
                 obdAcceleratorPedal = dataList[1].toIntOrNull(16)?.toDouble()?.times(0.4)?.div(100)
-                obdTotalOilConsumption = "${dataList[2]}${dataList[3]}${dataList[4]}${dataList[5]}".toIntOrNull(16)?.toDouble()?.times(0.5)
+                with("${dataList[2]}${dataList[3]}${dataList[4]}${dataList[5]}") {
+                    obdTotalOilConsumption = if (toUpperCase() == INVALID_DATA_4_BYTE) -1.0 else toBigIntegerOrNull(16)?.toDouble()?.times(0.5)
+                }
                 obdUreaBoxTemp  = dataList[6].toIntOrNull(16)?.toDouble()?.minus(40)
-                obdUreaVolume  = "${dataList[7]}${dataList[8]}${dataList[9]}${dataList[10]}".toIntOrNull(16)?.toDouble()?.times(0.01)
-                obdTotalUreaConsume  = "${dataList[11]}${dataList[12]}${dataList[13]}${dataList[14]}".toIntOrNull(16)?.toDouble()
-                obdDpfTemp  = "${dataList[15]}${dataList[16]}".toIntOrNull(16)?.minus(273)?.toDouble()?.times(0.03125)
+                with("${dataList[7]}${dataList[8]}${dataList[9]}${dataList[10]}") {
+                    obdUreaVolume = if (toUpperCase() == INVALID_DATA_4_BYTE) -1.0 else toBigIntegerOrNull(16)?.toDouble()?.times(0.01)
+                }
+                with("${dataList[11]}${dataList[12]}${dataList[13]}${dataList[14]}") {
+                    obdTotalUreaConsume = if (toUpperCase() == INVALID_DATA_4_BYTE) -1.0 else toBigIntegerOrNull(16)?.toDouble()
+                }
+                obdDpfTemp  = "${dataList[15]}${dataList[16]}".toIntOrNull(16)?.times(0.03125)?.minus(273)
             }
         } else {
             null
@@ -132,31 +144,37 @@
         when (list[0].toIntOrNull(16)) {
             ObdDataType.ObdData.value -> {
 
-                //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�97涓瓧鑺傜殑鏁版嵁
-                for (i in 1..96) {
-                    resultList.add(list[i])
-                }
-
-                val faultCodeNum = list[96].toIntOrNull() ?: 0//鏁呴殰鐮佹�绘暟
-                //鏍规嵁鏁呴殰鐮佹�绘暟锛屾瘡涓晠闅滅爜4涓瓧鑺傦紝寰楀埌鏁呴殰鐮佹�诲瓧鑺傛暟
-                if (faultCodeNum in 0..253) {
-                    for (i in 97..(96 + faultCodeNum * 4)) {
+                if (list.size >= 97) {
+                    //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�96涓瓧鑺傜殑鏁版嵁
+                    for (i in 1..96) {
                         resultList.add(list[i])
+                    }
+
+                    val faultCodeNum = list[96].toIntOrNull() ?: 0//鏁呴殰鐮佹�绘暟
+                    //鏍规嵁鏁呴殰鐮佹�绘暟锛屾瘡涓晠闅滅爜4涓瓧鑺傦紝寰楀埌鏁呴殰鐮佹�诲瓧鑺傛暟
+                    if (faultCodeNum in 0..253) {
+                        for (i in 97..(96 + faultCodeNum * 4)) {
+                            resultList.add(list[i])
+                        }
                     }
                 }
             }
             ObdDataType.EngineDataFlow.value -> {
 
-                //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�37涓瓧鑺傜殑鏁版嵁
-                for (i in 1..37) {
-                    resultList.add(list[i])
+                if (list.size >= 38) {
+                    //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�37涓瓧鑺傜殑鏁版嵁
+                    for (i in 1..37) {
+                        resultList.add(list[i])
+                    }
                 }
             }
             ObdDataType.SupplementDataFlow.value -> {
 
-                //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�17涓瓧鑺傜殑鏁版嵁
-                for (i in 1..17) {
-                    resultList.add(list[i])
+                if (list.size>= 18) {
+                    //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�17涓瓧鑺傜殑鏁版嵁
+                    for (i in 1..17) {
+                        resultList.add(list[i])
+                    }
                 }
             }
         }

--
Gitblit v1.9.3