From 1074bb5c8473dcb99d6edea5fa67ae7aa78af248 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期二, 17 九月 2019 15:54:59 +0800 Subject: [PATCH] 1. 按照数据分类添加新的数据库表格 2. 完成数据分表存储逻辑并debug完成 --- src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt | 102 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 85 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt b/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt index 5d99a6e..e413f7d 100644 --- a/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt +++ b/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt @@ -1,14 +1,17 @@ package com.flightfeather.obd.socket -import com.flightfeather.obd.lightshare.bean.BaseJson -import com.flightfeather.obd.lightshare.bean.ObdDataVo -import com.flightfeather.obd.repository.ObdDataRepository -import com.google.gson.Gson +import com.flightfeather.obd.common.utils.FileUtil +import com.flightfeather.obd.repository.* +import com.flightfeather.obd.socket.bean.ObdPackageData +import com.flightfeather.obd.socket.decoder.VehicleDataDecoder +import com.flightfeather.obd.socket.decoder.impl.DataPackageDecoderImpl +import com.flightfeather.obd.socket.eunm.ObdCommandUnit import io.netty.channel.ChannelHandlerContext import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component +import java.text.SimpleDateFormat +import java.util.* import javax.annotation.PostConstruct -import javax.annotation.Resource /** * 澶勭悊socket鎺ユ敹鐨勬秷鎭� @@ -25,25 +28,90 @@ @Autowired lateinit var obdDataRepository: ObdDataRepository + @Autowired + lateinit var originDataRepository: OriginDataRepository + @Autowired + lateinit var obdInfoRepository: ObdInfoRepository + @Autowired + lateinit var dataStreamRepository: DataStreamRepository + @Autowired + lateinit var carLogoutRepository: CarLogoutRepository + @Autowired + lateinit var carLoginRepository: CarLoginRepository + + val vehicleDataDecoder = VehicleDataDecoder() + val dataPackageDecoder = DataPackageDecoderImpl() @PostConstruct fun init() { instance = this instance.obdDataRepository = this.obdDataRepository + instance.originDataRepository = this.originDataRepository + instance.obdInfoRepository = this.obdInfoRepository + instance.dataStreamRepository = this.dataStreamRepository + instance.carLogoutRepository = this.carLogoutRepository + instance.carLoginRepository = this.carLoginRepository } - fun dealMsg(msg: String, ctx: ChannelHandlerContext?) { - try { - val baseJson = Gson().fromJson<BaseJson>(msg, BaseJson::class.java) - when (baseJson.cmdCode) { - 2001 -> { - val data = Gson().fromJson(msg, ObdDataVo::class.java) - DeviceSession.saveDevice(data.obdVin, ctx) - instance.obdDataRepository.saveObdData(data) - } - } - } catch (e: Throwable) { - println("------鏀跺埌鏍煎紡閿欒鐨勬暟鎹細$msg") + fun dealStringMsg(msg: String, ctx: ChannelHandlerContext?) { + saveToTxt(msg) + + if (bccCheck(msg)) { + //瑙e寘 + val packageData = vehicleDataDecoder.decode(msg) + //淇濆瓨 + DeviceSession.saveDevice(packageData.deviceCode, ctx) + saveToDataBase(packageData, msg) + } else { + println("------鏁版嵁BCC鏍¢獙澶辫触锛岃垗寮� [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]") } } + + /** + * 淇濆瓨鑷硉xt鏂囨湰 + */ + fun saveToTxt(msg: String) { + val data = "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]data=> $msg" + FileUtil.instance?.saveObdData(data) + } + + /** + * 淇濆瓨鑷虫暟鎹簱 + */ + fun saveToDataBase(packageData: ObdPackageData, msg: String) { + instance.obdDataRepository.saveObdData(packageData) + instance.originDataRepository.saveOriginData(packageData, msg) + when (packageData.commandUnit) { + ObdCommandUnit.CarRegister.value -> instance.carLoginRepository.saveCarLogin(packageData) + ObdCommandUnit.RealTimeData.value, + ObdCommandUnit.ReplacementData.value -> instance.dataStreamRepository.saveDataStream(packageData) + ObdCommandUnit.CarLogOut.value-> instance.carLogoutRepository.saveCarLogout(packageData) + } + } + + /** + * BCC锛堝紓鎴栨牎楠岋級 + */ + fun bccCheck(msg: String):Boolean { + val list = mutableListOf<String>().apply { + addAll(dataPackageDecoder.toStringList(msg)) + //鍘婚櫎2 浣嶈捣濮嬬 + removeAt(0) + removeAt(0) + } + //鍙栧緱鏁版嵁鍖呬腑鐨刡cc鏍¢獙缁撴灉 + val oldBcc = list[list.size - 1].toInt(16) + + //鍘婚櫎鏍¢獙缁撴灉 + list.removeAt(list.size-1) + + //璁$畻bcc鏍¢獙缁撴灉 + var newBcc = 0x00 + list.forEach { + newBcc = newBcc.xor(it.toInt(16)) + } + + //杩斿洖鏍¢獙缁撴灉鏄惁姝g‘ + return oldBcc == newBcc + } } \ No newline at end of file -- Gitblit v1.9.3