src/main/kotlin/com/flightfeather/uav/domain/entity/AlarmData.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/CarLogin.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/CarLogout.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/DataStream.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/ObdData.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/ObdInfo.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/ObdUser.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/OriginData.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/RealTimeData.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,156 @@ package com.flightfeather.uav.domain.entity; import java.math.BigDecimal; import java.util.Date; import javax.persistence.*; @Table(name = "air_real_time_data") public class RealTimeData { @Id private Integer id; @Column(name = "device_code") private String deviceCode; private BigDecimal latitude; private BigDecimal longitude; private Float altitude; private Float height; @Column(name = "data_time") private Date dataTime; @Column(name = "create_time") private Date createTime; private String factors; /** * @return id */ public Integer getId() { return id; } /** * @param id */ public void setId(Integer id) { this.id = id; } /** * @return device_code */ public String getDeviceCode() { return deviceCode; } /** * @param deviceCode */ public void setDeviceCode(String deviceCode) { this.deviceCode = deviceCode == null ? null : deviceCode.trim(); } /** * @return latitude */ public BigDecimal getLatitude() { return latitude; } /** * @param latitude */ public void setLatitude(BigDecimal latitude) { this.latitude = latitude; } /** * @return longitude */ public BigDecimal getLongitude() { return longitude; } /** * @param longitude */ public void setLongitude(BigDecimal longitude) { this.longitude = longitude; } /** * @return altitude */ public Float getAltitude() { return altitude; } /** * @param altitude */ public void setAltitude(Float altitude) { this.altitude = altitude; } /** * @return height */ public Float getHeight() { return height; } /** * @param height */ public void setHeight(Float height) { this.height = height; } /** * @return data_time */ public Date getDataTime() { return dataTime; } /** * @param dataTime */ public void setDataTime(Date dataTime) { this.dataTime = dataTime; } /** * @return create_time */ public Date getCreateTime() { return createTime; } /** * @param createTime */ public void setCreateTime(Date createTime) { this.createTime = createTime; } /** * @return factors */ public String getFactors() { return factors; } /** * @param factors */ public void setFactors(String factors) { this.factors = factors == null ? null : factors.trim(); } } src/main/kotlin/com/flightfeather/uav/domain/entity/ThresholdValue.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/entity/VehicleInfo.java
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/AlarmDataMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/CarLoginMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/CarLogoutMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/DataStreamMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/ObdDataMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/ObdInfoMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/ObdUserMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/OriginDataMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/RealTimeDataMapper.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package com.flightfeather.uav.domain.mapper import com.flightfeather.uav.domain.MyMapper import com.flightfeather.uav.domain.entity.RealTimeData import org.apache.ibatis.annotations.Mapper @Mapper interface RealTimeDataMapper : MyMapper<RealTimeData> src/main/kotlin/com/flightfeather/uav/domain/mapper/ThresholdValueMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/domain/mapper/VehicleInfoMapper.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/AlarmDataVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/CarLoginVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/CarLogoutVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/DataStreamVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/LatLngVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/ObdDataVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/ObdInfoVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/ObdUserVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/bean/ThresholdValueVo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/ObdAlarmService.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/ObdDataService.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/ObdThresholdValueService.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/ObdUserService.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ObdAlarmServiceImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ObdDataServiceImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ObdThresholdValueServiceImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ObdUserServiceImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/VehicleServiceImpl.kt
@@ -1,5 +1,6 @@ package com.flightfeather.uav.lightshare.service.impl import com.flightfeather.uav.domain.entity.RealTimeData import com.flightfeather.uav.lightshare.bean.VehicleInfoVo import com.flightfeather.uav.lightshare.service.VehicleService import com.flightfeather.uav.repository.VehicleRepository @@ -11,18 +12,9 @@ * Date: 2019/10/25 */ @Service class VehicleServiceImpl(val vehicleRepository: VehicleRepository) : VehicleService { class VehicleServiceImpl() : VehicleService { override fun getVehicleInfo(pageNum: Int?, pageSize: Int?): List<VehicleInfoVo> { val dbResult = vehicleRepository.getVehicleInfo(pageNum, pageSize) val resultList = mutableListOf<VehicleInfoVo>() dbResult.forEach { val vo = VehicleInfoVo() BeanUtils.copyProperties(it, vo) resultList.add(vo) } return resultList return emptyList() } } src/main/kotlin/com/flightfeather/uav/lightshare/web/ObdAlarmController.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/web/ObdDataController.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/web/ObdThresholdController.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/lightshare/web/ObdUserController.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/AirDataRepository.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.flightfeather.uav.repository import com.flightfeather.uav.socket.bean.AirPackageData /** * @author riku * Date: 2020/6/11 */ interface AirDataRepository { fun saveAirData(packageData: AirPackageData): Int } src/main/kotlin/com/flightfeather/uav/repository/CarLoginRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/CarLogoutRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/DataStreamRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/ObdAlarmRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/ObdDataRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/ObdInfoRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/ObdThresholdValueRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/ObdUserRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/OriginDataRepository.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/VehicleRepository.kt
@@ -1,15 +1,9 @@ package com.flightfeather.uav.repository import com.flightfeather.uav.domain.entity.VehicleInfo /** * @author riku * Date: 2019/10/25 */ interface VehicleRepository { /** * è·å车è¾ä¿¡æ¯ */ fun getVehicleInfo(pageNum: Int?, pageSize: Int?): List<VehicleInfo> } src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.flightfeather.uav.repository.impl 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.AirPackageData import com.google.gson.Gson import org.springframework.stereotype.Repository /** * @author riku * Date: 2020/6/11 */ @Repository class AirDataRepositoryImpl(private val realTimeDataMapper: RealTimeDataMapper): AirDataRepository { override fun saveAirData(packageData: AirPackageData): Int { val data = RealTimeData().apply { deviceCode = packageData.deviceCode latitude longitude altitude height factors = Gson().toJson(packageData.dataUnit) dataTime = packageData.dataTime } realTimeDataMapper.insert(data) return 0 } } src/main/kotlin/com/flightfeather/uav/repository/impl/CarLoginDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/CarLogoutDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/DataStreamDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/ObdAlarmDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/ObdDataDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/ObdInfoDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/ObdThresholdValueDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/ObdUserDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/OriginDataDaoImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/repository/impl/VehicleRepositoryImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/DeviceSession.kt
@@ -1,10 +1,11 @@ package com.flightfeather.uav.socket import com.flightfeather.uav.socket.bean.AirTypeData import io.netty.channel.ChannelHandlerContext import java.util.concurrent.ConcurrentHashMap /** * ç¨äºä¿åè¿æ¥ç设å¤å对åºçsessionéé * ç¨äºä¿åè¿æ¥ç设å¤å对åºçsessionéé以å对åºçä¸å±ä¿¡æ¯ * Date: 2019.8.27 * @author riku */ @@ -12,6 +13,8 @@ companion object{ private val deviceMap = ConcurrentHashMap<String, ChannelHandlerContext?>() private val typeMap = ConcurrentHashMap<String, List<AirTypeData>>() private const val DEFAULT_DEVICE = "default_device" fun saveDevice(deviceCode: String?, channel: ChannelHandlerContext?) { deviceCode?.let { @@ -25,5 +28,21 @@ else null } fun saveAirType(deviceCode: String?, types: List<AirTypeData>) { if (deviceCode == null) { typeMap[DEFAULT_DEVICE] = types } else { typeMap[deviceCode] = types } } fun getAirType(deviceCode: String?): List<AirTypeData>? { return if (typeMap.containsKey(deviceCode)) { typeMap[deviceCode] } else { null } } } } src/main/kotlin/com/flightfeather/uav/socket/MessageManager.kt
@@ -2,13 +2,10 @@ import com.flightfeather.uav.common.utils.FileUtil import com.flightfeather.uav.repository.* import com.flightfeather.uav.socket.bean.EngineDataStream import com.flightfeather.uav.socket.bean.ObdInfo import com.flightfeather.uav.socket.bean.ObdPackageData import com.flightfeather.uav.socket.bean.SupplementDataStream import com.flightfeather.uav.socket.decoder.VehicleDataDecoder import com.flightfeather.uav.socket.bean.* import com.flightfeather.uav.socket.decoder.AirDataDecoder import com.flightfeather.uav.socket.decoder.impl.DataPackageDecoderImpl import com.flightfeather.uav.socket.eunm.ObdCommandUnit import com.flightfeather.uav.socket.eunm.AirCommandUnit import io.netty.buffer.Unpooled import io.netty.channel.ChannelHandlerContext import org.springframework.beans.factory.annotation.Autowired @@ -31,50 +28,40 @@ } @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 lateinit var airDataRepository: AirDataRepository val vehicleDataDecoder = VehicleDataDecoder() val vehicleDataDecoder = AirDataDecoder() 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 airDataRepository = this.airDataRepository } fun dealStringMsg(msg: String, ctx: ChannelHandlerContext?) { //è§£å val packageData = vehicleDataDecoder.decode(msg) saveToTxt(msg) val isCommand = command(packageData, ctx) if (isCommand) { println("------è¿ç¨æ§å¶æä»¤ [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]") } else { if (bccCheck(msg)) { if (packageData.commandUnit == AirCommandUnit.Confirm.value) { val t = mutableListOf<AirTypeData>() packageData.dataUnit.forEach { if (it is AirTypeData) { t.add(it) } } DeviceSession.saveAirType(packageData.deviceCode, t) } else if (packageData.commandUnit == AirCommandUnit.AirData.value) { val types = DeviceSession.getAirType(packageData.deviceCode) } //ä¿å DeviceSession.saveDevice(packageData.deviceCode, ctx) saveToDataBase(packageData, msg) // saveToTxt(msg) saveToDataBase(packageData) } else { println("------æ°æ®BCCæ ¡éªå¤±è´¥ï¼èå¼ [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]") } } } @@ -89,27 +76,9 @@ /** * ä¿åè³æ°æ®åº */ fun saveToDataBase(packageData: ObdPackageData, msg: String) { // instance.obdDataRepository.saveObdData(packageData) instance.originDataRepository.saveOriginData(packageData, msg) fun saveToDataBase(packageData: AirPackageData) { when (packageData.commandUnit) { ObdCommandUnit.CarRegister.value -> instance.carLoginRepository.saveCarLogin(packageData) ObdCommandUnit.RealTimeData.value, ObdCommandUnit.ReplacementData.value -> { var done = false for (i in 0 until packageData.dataUnit.size) { when (packageData.dataUnit[i]) { is ObdInfo -> instance.obdInfoRepository.saveObdInfo(packageData) is EngineDataStream, is SupplementDataStream -> { instance.dataStreamRepository.saveDataStream(packageData) done = true } } if (done) break } } ObdCommandUnit.CarLogOut.value-> instance.carLogoutRepository.saveCarLogout(packageData) AirCommandUnit.AirData.value -> instance.airDataRepository.saveAirData(packageData) } } @@ -139,37 +108,6 @@ return oldBcc == newBcc } /** * è¿ç¨æä»¤ */ fun command(packageData: ObdPackageData, ctx: ChannelHandlerContext?): Boolean { if (packageData.commandUnit == ObdCommandUnit.Update.value) { val channel = DeviceSession.getDevice(packageData.deviceCode) if (channel != null) { val s = getDataPackage(packageData.deviceCode) if (s == null) { ctx?.writeAndFlush("[${packageData.deviceCode}] 设å¤ç¼å·ä¸ºç©º") } else { val bytes = encodeToBytes(s) channel.writeAndFlush(Unpooled.copiedBuffer(bytes)) ctx?.writeAndFlush("[${packageData.deviceCode}] æä»¤åéæå") } } else { ctx?.writeAndFlush("[${packageData.deviceCode}] è®¾å¤æªè¿æ¥æä¸åå¨") } return true } else if (packageData.commandUnit != ObdCommandUnit.CarRegister.value && packageData.commandUnit != ObdCommandUnit.RealTimeData.value && packageData.commandUnit != ObdCommandUnit.ReplacementData.value && packageData.commandUnit != ObdCommandUnit.CarLogOut.value && packageData.commandUnit != ObdCommandUnit.TimeCalibration.value) { ctx?.writeAndFlush("[${packageData.deviceCode}] å½ä»¤ä¸åå¨") return true } else { return false } } fun encodeToBytes(msg:String): ByteArray { val list = msg.split(" ") src/main/kotlin/com/flightfeather/uav/socket/ServerHandler.kt
@@ -31,8 +31,7 @@ if (msg is ByteArray) { println("------æ¶å°çåå§æ°æ®ï¼[ip:${ctx?.channel()?.remoteAddress()}] ${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}") msg.forEach { var a = 0 a = if (it < 0) { val a: Int = if (it < 0) { it + 256 } else { it.toInt() src/main/kotlin/com/flightfeather/uav/socket/SocketServerClient.kt
@@ -6,6 +6,7 @@ import io.netty.channel.nio.NioEventLoopGroup import io.netty.channel.socket.nio.NioServerSocketChannel import io.netty.channel.socket.nio.NioSocketChannel import io.netty.handler.codec.string.StringDecoder import io.netty.handler.codec.string.StringEncoder import java.nio.charset.Charset @@ -41,7 +42,7 @@ override fun initChannel(p0: NioSocketChannel?) { p0?.pipeline() // ?.addLast("decoder", StringDecoder()) ?.addLast(ObdByteDataDecoder()) ?.addLast(UAVByteDataDecoder()) ?.addLast("encoder", StringEncoder(Charset.forName("UTF-8"))) ?.addLast(ServerHandler()) } src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt
ÎļþÃû´Ó src/main/kotlin/com/flightfeather/uav/socket/ObdByteDataDecoder.kt ÐÞ¸Ä @@ -7,14 +7,18 @@ /** * @author riku * Date: 2019/9/16 * Date: 2020/06/02 * æ°æ®ç²å åå è§£ç å¨ */ class ObdByteDataDecoder : ByteToMessageDecoder() { class UAVByteDataDecoder : ByteToMessageDecoder() { companion object { const val BASE_LENGTH = 2 + 1 + 17 + 1 + 1 + 2 + 0 + 1 const val HEAD = 0x23.toByte() private const val HEAD_BYTES = 2//æ°æ®å¤´æå é¿åº¦ private const val LENGTH_BYTES = 1//æ°æ®ä½æ°æå é¿åº¦ private const val BCC_BYTES = 2//æ ¡éªç é¿åº¦ const val BASE_LENGTH = HEAD_BYTES + LENGTH_BYTES + BCC_BYTES const val HEAD1 = 0x01.toByte() const val HEAD2 = 0x05.toByte() } override fun decode(p0: ChannelHandlerContext?, p1: ByteBuf?, p2: MutableList<Any>?) { @@ -40,7 +44,7 @@ // 读å°äºåè®®çå¼å§æ å¿ï¼ç»æwhileå¾ªç¯ val b = ByteArray(2) it.readBytes(b) if (b[0] == HEAD && b[1] == HEAD) { if (b[0] == HEAD1 && b[1] == HEAD2) { dataList.add(b[0]) dataList.add(b[1]) break @@ -57,7 +61,7 @@ } } ByteArray(1 + 17 + 1 + 1).apply { ByteArray(1).apply { it.readBytes(this) }.forEach {b -> dataList.add(b) @@ -65,15 +69,15 @@ //æ°æ®åå çé¿åº¦ val length = getDataUnitLength(it, dataList) // å¤æè¯·æ±æ°æ®åå æ°æ®å1个åèçæ ¡éªç æ¯å¦å°é½ if (it.readableBytes() < length + 1) { // å¤æè¯·æ±æ°æ®åå æ°æ®å[LENGTH_BYTES]个åèçæ ¡éªç æ¯å¦å°é½ if (it.readableBytes() < length + BCC_BYTES) { // è¿å读æé it.readerIndex(beginReader) return } //è¯»åæ°æ®åå åæ ¡éªç æ°æ® ByteArray(length + 1).apply { ByteArray(length + BCC_BYTES).apply { it.readBytes(this) }.forEach {b -> dataList.add(b) @@ -91,11 +95,10 @@ private fun getDataUnitLength(p1: ByteBuf, dataList: MutableList<Byte>): Int { val sb = StringBuilder() ByteArray(2).apply { ByteArray(1).apply { p1.readBytes(this) }.forEach { b -> var a = 0 a = if (b < 0) { val a: Int = if (b < 0) { b + 256 } else { b.toInt() @@ -108,5 +111,4 @@ return sb.toString().toInt(16) } } src/main/kotlin/com/flightfeather/uav/socket/bean/AirData.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.flightfeather.uav.socket.bean import java.util.* /** * @author riku * Date: 2020/6/10 */ class AirData:DataUnit(){ var factorId: String? = null var factorName: String? = null var sensorId: String? = null var factorData: Double? = null } src/main/kotlin/com/flightfeather/uav/socket/bean/AirPackageData.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.flightfeather.uav.socket.bean import com.flightfeather.uav.socket.eunm.AirCommandUnit import java.util.* /** * @author riku * Date: 2019/9/12 * æ°æ®å ç»æ * * èµ·å§åè å®ä¹ æ°æ®ç±»å æè¿°åè¦æ± * */ data class AirPackageData constructor( //èµ·å§ç¬¦ var head: String? = null, //å½ä»¤åå var commandUnit: Int? = null, //设å¤ç¼å· var deviceCode: String? = null, //éæ ·æ¶é´ var dataTime: Date? = null, //æ°æ®å 坿¹å¼ // var encryptionWay: Int? = null, //æ°æ®åå é¿åº¦ var dataLength: Int? = null, //æ°æ®åå var dataUnit: List<DataUnit>, //æ ¡éªç var checkCode: Int? = null ) src/main/kotlin/com/flightfeather/uav/socket/bean/AirTypeData.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,9 @@ package com.flightfeather.uav.socket.bean import com.flightfeather.uav.socket.eunm.FactorType /** * @author riku * Date: 2020/6/10 */ class AirTypeData(var factorType: FactorType): DataUnit() src/main/kotlin/com/flightfeather/uav/socket/bean/CarLogOutData.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/CarRegisterData.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/DataUnit.kt
@@ -1,6 +1,6 @@ package com.flightfeather.uav.socket.bean import com.flightfeather.uav.socket.eunm.ObdCommandUnit import com.flightfeather.uav.socket.eunm.AirCommandUnit import java.util.* /** @@ -8,9 +8,8 @@ * Date: 2019/9/12 * * æ°æ®åå * æ ¹æ®å½ä»¤åå @see [ObdCommandUnit] çåç±»ï¼ä¸åç±»åçç»æä¸åï¼è§ååç±» * æ ¹æ®å½ä»¤åå @see [AirCommandUnit] çåç±»ï¼ä¸åç±»åçç»æä¸åï¼è§ååç±» */ open class DataUnit( var time: Date?, var serialNum: Int? ) open class DataUnit { var time: Date? = null } src/main/kotlin/com/flightfeather/uav/socket/bean/EngineDataStream.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/ObdInfo.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/ObdPackageData.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/RealTimeData.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/ReplacementData.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/SupplementDataStream.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/bean/TimeCalibrationData.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/decoder/AirDataDecoder.kt
ÎļþÃû´Ó src/main/kotlin/com/flightfeather/uav/socket/decoder/VehicleDataDecoder.kt ÐÞ¸Ä @@ -1,26 +1,25 @@ package com.flightfeather.uav.socket.decoder import com.flightfeather.uav.socket.bean.ObdPackageData import com.flightfeather.uav.socket.bean.AirPackageData import com.flightfeather.uav.socket.decoder.impl.DataPackageDecoderImpl /** * è½¦è¾ uav æ°æ®è§£ç å¨ * 空æ°è´¨éå¤åæ°æ°æ®è§£ç å¨ * @author riku * Date: 2019/9/12 */ class VehicleDataDecoder { class AirDataDecoder { private val dataPackageDecoder: DataPackageDecoder = DataPackageDecoderImpl() fun decode(msg: String): ObdPackageData { fun decode(msg: String): AirPackageData { val list = dataPackageDecoder.toStringList(msg) dataPackageDecoder.run { return ObdPackageData( return AirPackageData( getHead(list), getCommandUnit(list), getVinCode(list), getSoftwareVersion(list), getEncryptionWay(list), getDeviceCode(list), getDataTime(list), getDataLength(list), getDataUnit(list), getCheckCode(list) src/main/kotlin/com/flightfeather/uav/socket/decoder/DataPackageDecoder.kt
@@ -1,7 +1,8 @@ package com.flightfeather.uav.socket.decoder import com.flightfeather.uav.socket.bean.DataUnit import com.flightfeather.uav.socket.eunm.ObdCommandUnit import com.flightfeather.uav.socket.eunm.AirCommandUnit import java.util.* /** * uav 第ä¸å±æ°æ®å è§£ç å¨ @@ -11,13 +12,9 @@ * æ°æ®ç¬¬ä¸å±ç»æå®ä¹å¦ä¸ï¼ * èµ·å§åè å®ä¹ * 0 èµ·å§ç¬¦ * 2 å½ä»¤åå ç±»å@see [ObdCommandUnit] * 3 车è¾è¯å«å· * 4 ç»ç«¯è½¯ä»¶çæ¬å· * 21 æ°æ®å 坿¹å¼ * 22 æ°æ®åå é¿åº¦ * 24 æ°æ®åå è§£ç å¨@see [DataUnitDecoder] * åæ°ç¬¬1 æ ¡éªç * 1 å½ä»¤åå ç±»å@see [AirCommandUnit] * 2 æ°æ®åå é¿åº¦ * åæ°ç¬¬2 æ ¡éªç */ interface DataPackageDecoder { @@ -25,11 +22,9 @@ fun getCommandUnit(b: List<String>): Int? fun getVinCode(b: List<String>): String? fun getDeviceCode(b: List<String>): String? fun getSoftwareVersion(b: List<String>): Int? fun getEncryptionWay(b: List<String>): Int? fun getDataTime(b: List<String>): Date fun getDataLength(b: List<String>): Int src/main/kotlin/com/flightfeather/uav/socket/decoder/DataUnitDecoder.kt
@@ -1,7 +1,7 @@ package com.flightfeather.uav.socket.decoder import com.flightfeather.uav.socket.bean.* import com.flightfeather.uav.socket.eunm.ObdCommandUnit import com.flightfeather.uav.socket.eunm.AirCommandUnit import java.util.* /** @@ -10,7 +10,7 @@ * Date: 2019/9/12 * * æ°æ®åå æç §å½ä»¤åå çç±»åå ±æä»¥ä¸å ç§ç±»åï¼ * å½ä»¤åå @see [ObdCommandUnit] * å½ä»¤åå @see [AirCommandUnit] * ç¼ç (byte) å®ä¹ * 0x01 车è¾ç»å ¥ * 0x02 宿¶ä¿¡æ¯ä¸æ¥ @@ -21,16 +21,8 @@ */ interface DataUnitDecoder { fun getCarRegisterData(b: List<String>): List<CarRegisterData> fun getAirConfirmData(b: List<String>): List<AirTypeData> fun getRealTimeData(b: List<String>): List<RealTimeData> fun getReplacementData(b: List<String>): List<ReplacementData> fun getCarLogOutData(b: List<String>): List<CarLogOutData> fun getTimeCalibrationData(b: List<String>): List<TimeCalibrationData> fun decodeDataTime(b: List<String>): Date? fun getAirData(b: List<String>): List<AirData> } src/main/kotlin/com/flightfeather/uav/socket/decoder/RealTimeDataDecoder.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataPackageDecoderImpl.kt
@@ -3,7 +3,8 @@ import com.flightfeather.uav.socket.bean.DataUnit import com.flightfeather.uav.socket.decoder.DataPackageDecoder import com.flightfeather.uav.socket.decoder.DataUnitDecoder import com.flightfeather.uav.socket.eunm.ObdCommandUnit import com.flightfeather.uav.socket.eunm.AirCommandUnit import java.util.* /** * @author riku @@ -13,79 +14,62 @@ private val dataUnitDecoder: DataUnitDecoder = DataUnitDecoderImpl() // æ¥æ¶å°çå符串æ¯byte转ç åçï¼å ¶å°±è¡¨ç¤ºå符çASCIIç ï¼ override fun getHead(b: List<String>): String? { return if (b.size >= 2) { "${b[0]}${b[1]}" return if (b.isNotEmpty()) { b[0] } else { null } } override fun getCommandUnit(b: List<String>): Int? = if (b.size >= 3) { b[2].toIntOrNull(16) override fun getCommandUnit(b: List<String>): Int? = if (b.size >= 2) { b[1].toIntOrNull(16) } else { null } override fun getVinCode(b: List<String>): String? { if (b.size < 20) return null //fixme åºè¯¥æ¯éè¦å°bå½ä½ASCIIç ï¼åè·å转æ¢åçå符串 val s = StringBuilder() for (i in 3..19) { s.append(b[i].toIntOrNull(16)?.toChar()) override fun getDeviceCode(b: List<String>): String? { return null } return s.toString() } override fun getSoftwareVersion(b: List<String>): Int? = if (b.size >= 21) { b[20].toIntOrNull(16) } else { null } override fun getEncryptionWay(b: List<String>): Int? = if (b.size >= 21) { b[21].toIntOrNull(16) } else { null override fun getDataTime(b: List<String>): Date { //fixme 2020/06/11 ç®åæ°æ®æµä¸ä¸å å«éæ ·æ¶é´ï¼æä»¥éç¨æå¡å¨æ¥æ¶æ¶é´ä½ä¸ºéæ ·æ¶é´ return Date() } override fun getDataLength(b: List<String>): Int { if (b.size < 24) return 0 if (b.size < 5) return 0 val hexNum = "${b[22]}${b[23]}" val hexNum = b[2] return hexNum.toIntOrNull(16) ?: 0 } override fun getDataUnit(b: List<String>): List<DataUnit> { if (getDataLength(b) == 0 || b.size < 26) { if (getDataLength(b) == 0 || b.size < 5) { return emptyList() } val unit = mutableListOf<String>() for (i in 24..b.size - 2) { for (i in 3..b.size - 3) { unit.add(b[i]) } dataUnitDecoder.run { return when (getCommandUnit(b)) { ObdCommandUnit.CarRegister.value -> getCarRegisterData(unit) ObdCommandUnit.RealTimeData.value -> getRealTimeData(unit) ObdCommandUnit.ReplacementData.value -> getReplacementData(unit) ObdCommandUnit.CarLogOut.value -> getCarLogOutData(unit) ObdCommandUnit.TimeCalibration.value -> getTimeCalibrationData(unit) AirCommandUnit.Confirm.value -> getAirConfirmData(unit) AirCommandUnit.AirData.value -> getAirData(unit) else -> emptyList() } } } override fun getCheckCode(b: List<String>): Int? { return if (b.isNotEmpty()) { b[b.size - 1].toIntOrNull(16) return if (b.size >= 5) { val hexNum = "${b[b.size - 2]}${b[b.size - 1]}" hexNum.toIntOrNull(16) } else { null } src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataUnitDecoderImpl.kt
@@ -1,12 +1,10 @@ package com.flightfeather.uav.socket.decoder.impl import com.flightfeather.uav.socket.bean.* import com.flightfeather.uav.socket.bean.AirData import com.flightfeather.uav.socket.bean.AirTypeData import com.flightfeather.uav.socket.decoder.DataUnitDecoder import com.flightfeather.uav.socket.decoder.RealTimeDataDecoder import com.flightfeather.uav.socket.eunm.ObdDataType import com.flightfeather.uav.socket.eunm.FactorType import org.slf4j.LoggerFactory import java.lang.StringBuilder import java.util.* /** * @author riku @@ -15,113 +13,34 @@ class DataUnitDecoderImpl : DataUnitDecoder { private val logger = LoggerFactory.getLogger(javaClass.name) private var realTimeDataDecoder: RealTimeDataDecoder = RealTimeDataDecoderImpl() override fun getCarRegisterData(b: List<String>): List<CarRegisterData> { val time = decodeDataTime(b) val serialNum = "${b[6]}${b[7]}".toInt(16) val simCode = StringBuilder() for (i in 10 until b.size) { simCode.append(b[i].toInt(16).toChar()) } return mutableListOf(CarRegisterData(time, serialNum, simCode.toString())) } override fun getRealTimeData(b: List<String>): List<RealTimeData> { val time = decodeDataTime(b) //彿 æ³: èµ·å§åè为7 å¼å§ç2个åè表示 æµæ°´å· // val serialNum = "${b[7]}${b[8]}".toInt(16) //䏿µ·æ³: èµ·å§åè为6 å¼å§ç2个åè表示 æµæ°´å· val serialNum = "${b[6]}${b[7]}".toInt(16) val dataList = mutableListOf<String>().apply { addAll(b) } //å å»å6使¶é´ for (i in 0..5) { if (dataList.isNotEmpty()) dataList.removeAt(0) } //fixme 2019.9.15 ç®å两ç§è§åæå²çªï¼å¹¶ä¸åªä»æ°æ®å å®¹æ æ³åºåãææ¶ä½¿ç¨ 彿 æ³ /* * å 廿µæ°´å·ï¼å¾å°ä¿¡æ¯æ å¿ä¸ä¿¡æ¯ä½çç»å * (彿 æ³ï¼å»é¤å6使¶é´åï¼èµ·å§åè为1 å¼å§ç2个åè表示 æµæ°´å·) */ // if (dataList.size >= 2) dataList.removeAt(1) // if (dataList.size >= 2) dataList.removeAt(1) /* * å 廿µæ°´å·ï¼å¾å°ä¿¡æ¯æ å¿ä¸ä¿¡æ¯ä½çç»å * (䏿µ·æ³ï¼å»é¤å6使¶é´åï¼èµ·å§åè为0 å¼å§ç2个åè表示 æµæ°´å·) */ if (dataList.isNotEmpty()) dataList.removeAt(0) if (dataList.isNotEmpty()) dataList.removeAt(0) val resultList = mutableListOf<RealTimeData>() /* * æç»å¾å°çæ°æ®ç»æä¸º [ ä¿¡æ¯ç±»åæ å¿, ä¿¡æ¯ä½, ...... , ä¿¡æ¯ç±»åæ å¿, ä¿¡æ¯ä½ ] */ while (dataList.isNotEmpty()) { //å¾å°æåé¢çä¸ç»ä¿¡æ¯ç±»å+ä¿¡æ¯ä½å表 val data = realTimeDataDecoder.getDataListByDataType(dataList) if (data.isNotEmpty()) { val r = when (data[0].toInt(16)) { ObdDataType.ObdData.value -> realTimeDataDecoder.getObdData(time, serialNum, data) ObdDataType.EngineDataFlow.value -> realTimeDataDecoder.getEngineDataStream(time, serialNum, data) ObdDataType.SupplementDataFlow.value -> realTimeDataDecoder.getSupplementDataStream(time, serialNum, data) else -> null } if (r != null) { resultList.add(r) } for (i in 0 until data.size) { if (dataList.isNotEmpty()) dataList.removeAt(0) } }else if (dataList.isNotEmpty()) { //æç §è§å没æåå°ä¿¡æ¯ä½ï¼å¹¶ä¸åæ°æ®ä¸ä¸ºç©ºï¼è¡¨ç¤ºåæ°æ®æ ¼å¼é误ï¼éåºå¾ªç¯ logger.error("-------æ°æ®ä¿¡æ¯æµæè¡¥å æ°æ®æµæ ¼å¼é误") break override fun getAirConfirmData(b: List<String>): List<AirTypeData> { val resultList = mutableListOf<AirTypeData>() b.forEach { FactorType.getByIndex(it.toInt(16))?.let { f-> resultList.add(AirTypeData(f)) } } return resultList } override fun getReplacementData(b: List<String>): List<ReplacementData> = getRealTimeData(b) override fun getCarLogOutData(b: List<String>): List<CarLogOutData> { val time = decodeDataTime(b) val serialNum = "${b[6]}${b[7]}".toInt(16) return mutableListOf(CarLogOutData(time, serialNum)) override fun getAirData(b: List<String>): List<AirData> { val resultList = mutableListOf<AirData>() var i = 0 while (i < b.size - 3) { val a = "${b[i]}${b[i + 1]}".toInt(16) var b1 = b[i + 2].toInt(16).toDouble() while (b1 >= 1) { b1 /= 10 } val data = a + b1 resultList.add(AirData().apply { factorData = data }) i += 3 } override fun getTimeCalibrationData(b: List<String>): List<TimeCalibrationData> = emptyList() override fun decodeDataTime(b: List<String>): Date? { if (b.size < 6) { return null } val year = b[0].toInt(16) + 2000 if (year < 2000 || year > 2099) return null val month = b[1].toInt(16) val day = b[2].toInt(16) val hour = b[3].toInt(16) val min = b[4].toInt(16) val sec = b[5].toInt(16) val cal = Calendar.getInstance().apply { set(year, month - 1, day, hour, min, sec) set(Calendar.MILLISECOND, 0) } return cal.time return resultList } } src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/RealTimeDataDecoderImpl.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/eunm/AirCommandUnit.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.flightfeather.uav.socket.eunm /** * @author riku * Date: 2019/9/12 * * uav å½ä»¤åå * * ç¼ç å®ä¹ * 0x04 çæµåæ°ç¡®è®¤æä»¤ä½ * 0x05 çæµåæ°åé¦æä»¤ä½ * */ enum class AirCommandUnit constructor(val value: Int) { Confirm(4), AirData(5) } src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package com.flightfeather.uav.socket.eunm /** * @author riku * Date: 2020/6/10 */ enum class FactorType(val value: Int, val des: String){ NO2(1, "NO2"), CO(2,"CO"), H2S(3,"H2S"), SO2(4,"SO2"), O3(5,"O3"), PM25(6,"PM25"), PM10(7, "PM10"), TEMPERATURE(8,"TEMPERATURE"), HUMIDITY(9, "HUMIDITY"); companion object { fun getByIndex(index: Int): FactorType? = when (index) { NO2.value -> NO2 CO.value -> CO H2S.value -> H2S SO2.value -> SO2 O3.value -> O3 PM25.value -> PM25 PM10.value -> PM10 TEMPERATURE.value -> TEMPERATURE HUMIDITY.value -> HUMIDITY else -> null } } } src/main/kotlin/com/flightfeather/uav/socket/eunm/ObdCommandUnit.kt
ÎļþÒÑɾ³ý src/main/kotlin/com/flightfeather/uav/socket/eunm/ObdDataType.kt
@@ -1,17 +1,9 @@ package com.flightfeather.uav.socket.eunm import com.flightfeather.uav.socket.bean.* /** * @author riku * Date: 2019/9/15 * * 宿¶ä¿¡æ¯[RealTimeData]åè¡¥åä¿¡æ¯[ReplacementData] ä¸çæ°æ®ç±»å * ç±»åç¼ç 说æ * 0x01 OBD ä¿¡æ¯ @see [com.flightfeather.uav.socket.bean.ObdInfo] * 0x02 æ°æ®æµä¿¡æ¯ @see[com.flightfeather.uav.socket.bean.EngineDataStream] * 0x03-0x7F é¢ç * 0x80 è¡¥å æ°æ®æµ @see[com.flightfeather.uav.socket.bean.SupplementDataStream] * 0x81~0xFE ç¨æ·èªå®ä¹ */ enum class ObdDataType constructor(val value: Int){ ObdData(1), src/main/resources/application.yml
@@ -1,9 +1,15 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://47.100.191.150:3306/uav?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false username: uav password: obd2019 # url: jdbc:mysql://47.100.191.150:3306/uav?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false # username: uav # password: obd2019 url: jdbc:mysql://114.215.109.124:3306/dronemonitor?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false username: root password: 123456 mybatis: type-aliases-package: com.flightfeather.uav.domain.entity src/main/resources/generator/generatorConfig.xml
@@ -24,9 +24,9 @@ <property name="suppressAllComments" value="true"/> </commentGenerator> <!--æ°æ®åºé¾æ¥URLï¼ç¨æ·åãå¯ç --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://47.100.191.150:3306/obd" userId="obd" password="obd2019"> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://114.215.109.124:3306/dronemonitor" userId="root" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> @@ -54,6 +54,6 @@ <!--<table tableName="obd_car_logout" domainObjectName="CarLogout" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> <!--<table tableName="obd_data_stream" domainObjectName="DataStream" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> <!--<table tableName="obd_info" domainObjectName="ObdInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> <table tableName="obd_vehicle_info" domainObjectName="VehicleInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> <table tableName="air_real_time_data" domainObjectName="RealTimeData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> </context> </generatorConfiguration> src/main/resources/mapper/AlarmDataMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/CarLoginMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/CarLogoutMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/DataStreamMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/ObdDataMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/ObdInfoMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/ObdUserMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/OriginDataMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/ThresholdValueMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/VehicleInfoMapper.xml
ÎļþÒÑɾ³ý src/test/kotlin/com/flightfeather/uav/Test.kt
@@ -1,150 +1,10 @@ package com.flightfeather.uav import org.junit.Test import java.text.SimpleDateFormat import java.util.* /** * @author riku * Date: 2019/9/12 */ class Test { @Test fun foo1() { val b = ByteArray(20) {8} val a = 1 println(a.toString(2)) } @Test fun foo2() { val b = ByteArray(2) b[0] = 0x01 b[1] = 0x80.toByte() println("${b[0].toString(16)}${b[1].toInt()}") println("${b[0]}${b[1]}".toInt(16)) } @Test fun foo3() { val hexNum = "ff" val length = hexNum.toInt(16) println(length) } @Test fun foo4() { val h = "0101" val byte = 0xff val b = h.toInt(16) println(b) } @Test fun foo5() { val s = "23 23 30 30 30 30 30 35 33 31 36 30 38 30 31 30 35 33 36" val sb = StringBuilder() val ascii = s.split(" ") ascii.forEach { sb.append(it.toIntOrNull(16)?.toChar()) } println(sb.toString()) } @Test fun foo6() { val cal = Calendar.getInstance().apply { set(2019, 9, 15, 23, 16, 59) } println(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.time)) } @Test fun foo7() { val a = "0AAF".toIntOrNull(16)?.toString(2) println(a) } @Test fun foo8() { val byte = ByteArray(2) byte[0] = 0x23 byte[1] = 0x23 byte[0].toString(16) } @Test fun foo9() { val b = 128.toByte() var a = 0 if (b < 0) { a = b + 256 } else { a = b.toInt() } println(b.toString(16)) } @Test fun foo10() { val s = "2 31 37 36 39 31 35 33 31 39 30 39 31 32 30 30 30 36 1 1 0 42 13 9 f 12 33 3b 2 0 8a 1b 0 36 2e 0 23 60 11 b4 0 c8 0 b4 0 0 66 0 0 0 0 0 0 73 0 0 0 b9 4 75 0 2e d8 ed 0 0 0 0 80 0 bc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" val ascii = s.split(" ") var bcc = 0x00 ascii.forEach { bcc = bcc.xor(it.toInt(16)) } println(bcc.toString(16)) } @Test fun foo11() { val b = mutableListOf<String>().apply { add("13") add("09") add("10") add("10") add("2b") add("2f") } if (b.size < 6) { println("null") } val year = b[0].toInt(16) + 2000 if (year < 2000 || year > 2099) println("null") val month = b[1].toInt(16) val day = b[2].toInt(16) val hour = b[3].toInt(16) val min = b[4].toInt(16) val sec = b[5].toInt(16) val cal = Calendar.getInstance().apply { set(year, month - 1, day, hour, min, sec) } println(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.time)) } @Test fun f0012() { val sb = java.lang.StringBuilder() val byte = ByteArray(2) byte[0] = 0x00 byte[1] = 0xBD.toByte() byte.forEach { b -> var a = 0 a = if (b < 0) { b + 256 } else { b.toInt() } sb.append(a.toString(16)) } println(sb.toString().toInt(16)) } } src/test/kotlin/com/flightfeather/uav/UAVApplicationTests.kt
@@ -1,12 +1,8 @@ package com.flightfeather.uav import com.flightfeather.uav.domain.mapper.ObdDataMapper import com.flightfeather.uav.lightshare.bean.ObdDataVo import com.google.gson.Gson import org.junit.Test import org.junit.runner.RunWith import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.junit4.SpringRunner @@ -14,8 +10,6 @@ @SpringBootTest class UAVApplicationTests { @Autowired lateinit var obdDataMapper: ObdDataMapper @Test fun contextLoads() { @@ -23,16 +17,7 @@ @Test fun foo1(): Unit { // val map = GsonJsonParser().parseMap("{\"vin\":\"vin001\",\"protocol\":2}") val map = Gson().fromJson("{\"vin\":\"vin001\",\"protocol\":2,\"cmdCode\":2001}", ObdDataVo::class.java) val res = obdDataMapper.selectAll() res.forEach { println(it.obdVin) println(it.obdTime) } println(map.obdVin) println(map.obdProtocol) println(map.cmdCode) } @Test src/test/kotlin/com/flightfeather/uav/socket/decoder/VehicleDataDecoderTest.kt
ÎļþÒÑɾ³ý