1. 按照数据分类添加新的数据库表格
2. 完成数据分表存储逻辑并debug完成
已修改9个文件
已添加25个文件
已重命名1个文件
1757 ■■■■■ 文件已修改
src/main/kotlin/com/flightfeather/obd/domain/entity/CarLogin.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/entity/CarLogout.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/entity/DataStream.java 551 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/entity/ObdInfo.java 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/entity/OriginData.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/mapper/CarLoginMapper.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/mapper/CarLogoutMapper.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/mapper/DataStreamMapper.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/mapper/ObdInfoMapper.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/mapper/OriginDataMapper.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/CarLoginRepository.kt 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/CarLogoutRepository.kt 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/DataStreamRepository.kt 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/ObdInfoRepository.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/OriginDataRepository.kt 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/impl/CarLoginDaoImpl.kt 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/impl/CarLogoutDaoImpl.kt 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/impl/DataStreamDaoImpl.kt 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/impl/ObdDataDaoImpl.kt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/impl/ObdInfoDaoImpl.kt 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/repository/impl/OriginDataDaoImpl.kt 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/socket/bean/EngineDataStream.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/socket/bean/ObdInfo.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/socket/decoder/RealTimeDataDecoder.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/DataUnitDecoderImpl.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdDataType.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/generator/generatorConfig.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/CarLoginMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/CarLogoutMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DataStreamMapper.xml 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ObdInfoMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OriginDataMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/kotlin/com/flightfeather/obd/socket/decoder/VehicleDataDecoderTest.kt 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/obd/domain/entity/CarLogin.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
package com.flightfeather.obd.domain.entity;
import java.util.Date;
import javax.persistence.*;
@Table(name = "obd_car_login")
public class CarLogin {
    @Id
    private Integer id;
    @Column(name = "obd_device_code")
    private String obdDeviceCode;
    @Column(name = "login_create_time")
    private Date loginCreateTime;
    @Column(name = "login_data_time")
    private Date loginDataTime;
    @Column(name = "login_serial_num")
    private Integer loginSerialNum;
    @Column(name = "login_sim_code")
    private String loginSimCode;
    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }
    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }
    /**
     * @return obd_device_code
     */
    public String getObdDeviceCode() {
        return obdDeviceCode;
    }
    /**
     * @param obdDeviceCode
     */
    public void setObdDeviceCode(String obdDeviceCode) {
        this.obdDeviceCode = obdDeviceCode == null ? null : obdDeviceCode.trim();
    }
    /**
     * @return login_create_time
     */
    public Date getLoginCreateTime() {
        return loginCreateTime;
    }
    /**
     * @param loginCreateTime
     */
    public void setLoginCreateTime(Date loginCreateTime) {
        this.loginCreateTime = loginCreateTime;
    }
    /**
     * @return login_data_time
     */
    public Date getLoginDataTime() {
        return loginDataTime;
    }
    /**
     * @param loginDataTime
     */
    public void setLoginDataTime(Date loginDataTime) {
        this.loginDataTime = loginDataTime;
    }
    /**
     * @return login_serial_num
     */
    public Integer getLoginSerialNum() {
        return loginSerialNum;
    }
    /**
     * @param loginSerialNum
     */
    public void setLoginSerialNum(Integer loginSerialNum) {
        this.loginSerialNum = loginSerialNum;
    }
    /**
     * @return login_sim_code
     */
    public String getLoginSimCode() {
        return loginSimCode;
    }
    /**
     * @param loginSimCode
     */
    public void setLoginSimCode(String loginSimCode) {
        this.loginSimCode = loginSimCode == null ? null : loginSimCode.trim();
    }
}
src/main/kotlin/com/flightfeather/obd/domain/entity/CarLogout.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.flightfeather.obd.domain.entity;
import java.util.Date;
import javax.persistence.*;
@Table(name = "obd_car_logout")
public class CarLogout {
    @Id
    private Integer id;
    @Column(name = "obd_device_code")
    private String obdDeviceCode;
    @Column(name = "logout_create_time")
    private Date logoutCreateTime;
    @Column(name = "logout_data_time")
    private Date logoutDataTime;
    @Column(name = "logout_serial_num")
    private Integer logoutSerialNum;
    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }
    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }
    /**
     * @return obd_device_code
     */
    public String getObdDeviceCode() {
        return obdDeviceCode;
    }
    /**
     * @param obdDeviceCode
     */
    public void setObdDeviceCode(String obdDeviceCode) {
        this.obdDeviceCode = obdDeviceCode == null ? null : obdDeviceCode.trim();
    }
    /**
     * @return logout_create_time
     */
    public Date getLogoutCreateTime() {
        return logoutCreateTime;
    }
    /**
     * @param logoutCreateTime
     */
    public void setLogoutCreateTime(Date logoutCreateTime) {
        this.logoutCreateTime = logoutCreateTime;
    }
    /**
     * @return logout_data_time
     */
    public Date getLogoutDataTime() {
        return logoutDataTime;
    }
    /**
     * @param logoutDataTime
     */
    public void setLogoutDataTime(Date logoutDataTime) {
        this.logoutDataTime = logoutDataTime;
    }
    /**
     * @return logout_serial_num
     */
    public Integer getLogoutSerialNum() {
        return logoutSerialNum;
    }
    /**
     * @param logoutSerialNum
     */
    public void setLogoutSerialNum(Integer logoutSerialNum) {
        this.logoutSerialNum = logoutSerialNum;
    }
}
src/main/kotlin/com/flightfeather/obd/domain/entity/DataStream.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,551 @@
package com.flightfeather.obd.domain.entity;
import java.util.Date;
import javax.persistence.*;
@Table(name = "obd_data_stream")
public class DataStream {
    @Id
    private Integer id;
    @Column(name = "obd_device_code")
    private String obdDeviceCode;
    @Column(name = "obd_create_time")
    private Date obdCreateTime;
    @Column(name = "obd_data_time")
    private Date obdDataTime;
    @Column(name = "obd_serial_num")
    private Integer obdSerialNum;
    @Column(name = "obd_speed")
    private Double obdSpeed;
    @Column(name = "obd_air_pressure")
    private Double obdAirPressure;
    @Column(name = "obd_engine_torque")
    private Double obdEngineTorque;
    @Column(name = "obd_friction_torque")
    private Double obdFrictionTorque;
    @Column(name = "obd_engine_rpm")
    private Double obdEngineRpm;
    @Column(name = "obd_engine_fuel_flow")
    private Double obdEngineFuelFlow;
    @Column(name = "obd_scr_upstream_NOx")
    private Double obdScrUpstreamNox;
    @Column(name = "obd_scr_downstream_NOx")
    private Double obdScrDownstreamNox;
    @Column(name = "obd_remain_reactant")
    private Double obdRemainReactant;
    @Column(name = "obd_air_input")
    private Double obdAirInput;
    @Column(name = "obd_scr_input_temp")
    private Double obdScrInputTemp;
    @Column(name = "obd_scr_output_temp")
    private Double obdScrOutputTemp;
    @Column(name = "obd_DPF")
    private Double obdDpf;
    @Column(name = "obd_engine_coolant_temp")
    private Double obdEngineCoolantTemp;
    @Column(name = "obd_fuel_level")
    private Double obdFuelLevel;
    @Column(name = "obd_location_status")
    private String obdLocationStatus;
    @Column(name = "obd_long")
    private Double obdLong;
    @Column(name = "obd_lat")
    private Double obdLat;
    @Column(name = "obd_total_mileage")
    private Double obdTotalMileage;
    @Column(name = "obd_engine_torque_mode")
    private Integer obdEngineTorqueMode;
    @Column(name = "obd_accelerator_pedal")
    private Double obdAcceleratorPedal;
    @Column(name = "obd_total_oil_consumption")
    private Double obdTotalOilConsumption;
    @Column(name = "obd_urea_box_temp")
    private Double obdUreaBoxTemp;
    @Column(name = "obd_urea_volume")
    private Double obdUreaVolume;
    @Column(name = "obd_total_urea_consume")
    private Double obdTotalUreaConsume;
    @Column(name = "obd_DPF_temp")
    private Double obdDpfTemp;
    @Column(name = "obd_status")
    private Boolean obdStatus;
    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }
    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }
    /**
     * @return obd_device_code
     */
    public String getObdDeviceCode() {
        return obdDeviceCode;
    }
    /**
     * @param obdDeviceCode
     */
    public void setObdDeviceCode(String obdDeviceCode) {
        this.obdDeviceCode = obdDeviceCode == null ? null : obdDeviceCode.trim();
    }
    /**
     * @return obd_create_time
     */
    public Date getObdCreateTime() {
        return obdCreateTime;
    }
    /**
     * @param obdCreateTime
     */
    public void setObdCreateTime(Date obdCreateTime) {
        this.obdCreateTime = obdCreateTime;
    }
    /**
     * @return obd_data_time
     */
    public Date getObdDataTime() {
        return obdDataTime;
    }
    /**
     * @param obdDataTime
     */
    public void setObdDataTime(Date obdDataTime) {
        this.obdDataTime = obdDataTime;
    }
    /**
     * @return obd_serial_num
     */
    public Integer getObdSerialNum() {
        return obdSerialNum;
    }
    /**
     * @param obdSerialNum
     */
    public void setObdSerialNum(Integer obdSerialNum) {
        this.obdSerialNum = obdSerialNum;
    }
    /**
     * @return obd_speed
     */
    public Double getObdSpeed() {
        return obdSpeed;
    }
    /**
     * @param obdSpeed
     */
    public void setObdSpeed(Double obdSpeed) {
        this.obdSpeed = obdSpeed;
    }
    /**
     * @return obd_air_pressure
     */
    public Double getObdAirPressure() {
        return obdAirPressure;
    }
    /**
     * @param obdAirPressure
     */
    public void setObdAirPressure(Double obdAirPressure) {
        this.obdAirPressure = obdAirPressure;
    }
    /**
     * @return obd_engine_torque
     */
    public Double getObdEngineTorque() {
        return obdEngineTorque;
    }
    /**
     * @param obdEngineTorque
     */
    public void setObdEngineTorque(Double obdEngineTorque) {
        this.obdEngineTorque = obdEngineTorque;
    }
    /**
     * @return obd_friction_torque
     */
    public Double getObdFrictionTorque() {
        return obdFrictionTorque;
    }
    /**
     * @param obdFrictionTorque
     */
    public void setObdFrictionTorque(Double obdFrictionTorque) {
        this.obdFrictionTorque = obdFrictionTorque;
    }
    /**
     * @return obd_engine_rpm
     */
    public Double getObdEngineRpm() {
        return obdEngineRpm;
    }
    /**
     * @param obdEngineRpm
     */
    public void setObdEngineRpm(Double obdEngineRpm) {
        this.obdEngineRpm = obdEngineRpm;
    }
    /**
     * @return obd_engine_fuel_flow
     */
    public Double getObdEngineFuelFlow() {
        return obdEngineFuelFlow;
    }
    /**
     * @param obdEngineFuelFlow
     */
    public void setObdEngineFuelFlow(Double obdEngineFuelFlow) {
        this.obdEngineFuelFlow = obdEngineFuelFlow;
    }
    /**
     * @return obd_scr_upstream_NOx
     */
    public Double getObdScrUpstreamNox() {
        return obdScrUpstreamNox;
    }
    /**
     * @param obdScrUpstreamNox
     */
    public void setObdScrUpstreamNox(Double obdScrUpstreamNox) {
        this.obdScrUpstreamNox = obdScrUpstreamNox;
    }
    /**
     * @return obd_scr_downstream_NOx
     */
    public Double getObdScrDownstreamNox() {
        return obdScrDownstreamNox;
    }
    /**
     * @param obdScrDownstreamNox
     */
    public void setObdScrDownstreamNox(Double obdScrDownstreamNox) {
        this.obdScrDownstreamNox = obdScrDownstreamNox;
    }
    /**
     * @return obd_remain_reactant
     */
    public Double getObdRemainReactant() {
        return obdRemainReactant;
    }
    /**
     * @param obdRemainReactant
     */
    public void setObdRemainReactant(Double obdRemainReactant) {
        this.obdRemainReactant = obdRemainReactant;
    }
    /**
     * @return obd_air_input
     */
    public Double getObdAirInput() {
        return obdAirInput;
    }
    /**
     * @param obdAirInput
     */
    public void setObdAirInput(Double obdAirInput) {
        this.obdAirInput = obdAirInput;
    }
    /**
     * @return obd_scr_input_temp
     */
    public Double getObdScrInputTemp() {
        return obdScrInputTemp;
    }
    /**
     * @param obdScrInputTemp
     */
    public void setObdScrInputTemp(Double obdScrInputTemp) {
        this.obdScrInputTemp = obdScrInputTemp;
    }
    /**
     * @return obd_scr_output_temp
     */
    public Double getObdScrOutputTemp() {
        return obdScrOutputTemp;
    }
    /**
     * @param obdScrOutputTemp
     */
    public void setObdScrOutputTemp(Double obdScrOutputTemp) {
        this.obdScrOutputTemp = obdScrOutputTemp;
    }
    /**
     * @return obd_DPF
     */
    public Double getObdDpf() {
        return obdDpf;
    }
    /**
     * @param obdDpf
     */
    public void setObdDpf(Double obdDpf) {
        this.obdDpf = obdDpf;
    }
    /**
     * @return obd_engine_coolant_temp
     */
    public Double getObdEngineCoolantTemp() {
        return obdEngineCoolantTemp;
    }
    /**
     * @param obdEngineCoolantTemp
     */
    public void setObdEngineCoolantTemp(Double obdEngineCoolantTemp) {
        this.obdEngineCoolantTemp = obdEngineCoolantTemp;
    }
    /**
     * @return obd_fuel_level
     */
    public Double getObdFuelLevel() {
        return obdFuelLevel;
    }
    /**
     * @param obdFuelLevel
     */
    public void setObdFuelLevel(Double obdFuelLevel) {
        this.obdFuelLevel = obdFuelLevel;
    }
    /**
     * @return obd_location_status
     */
    public String getObdLocationStatus() {
        return obdLocationStatus;
    }
    /**
     * @param obdLocationStatus
     */
    public void setObdLocationStatus(String obdLocationStatus) {
        this.obdLocationStatus = obdLocationStatus == null ? null : obdLocationStatus.trim();
    }
    /**
     * @return obd_long
     */
    public Double getObdLong() {
        return obdLong;
    }
    /**
     * @param obdLong
     */
    public void setObdLong(Double obdLong) {
        this.obdLong = obdLong;
    }
    /**
     * @return obd_lat
     */
    public Double getObdLat() {
        return obdLat;
    }
    /**
     * @param obdLat
     */
    public void setObdLat(Double obdLat) {
        this.obdLat = obdLat;
    }
    /**
     * @return obd_total_mileage
     */
    public Double getObdTotalMileage() {
        return obdTotalMileage;
    }
    /**
     * @param obdTotalMileage
     */
    public void setObdTotalMileage(Double obdTotalMileage) {
        this.obdTotalMileage = obdTotalMileage;
    }
    /**
     * @return obd_engine_torque_mode
     */
    public Integer getObdEngineTorqueMode() {
        return obdEngineTorqueMode;
    }
    /**
     * @param obdEngineTorqueMode
     */
    public void setObdEngineTorqueMode(Integer obdEngineTorqueMode) {
        this.obdEngineTorqueMode = obdEngineTorqueMode;
    }
    /**
     * @return obd_accelerator_pedal
     */
    public Double getObdAcceleratorPedal() {
        return obdAcceleratorPedal;
    }
    /**
     * @param obdAcceleratorPedal
     */
    public void setObdAcceleratorPedal(Double obdAcceleratorPedal) {
        this.obdAcceleratorPedal = obdAcceleratorPedal;
    }
    /**
     * @return obd_total_oil_consumption
     */
    public Double getObdTotalOilConsumption() {
        return obdTotalOilConsumption;
    }
    /**
     * @param obdTotalOilConsumption
     */
    public void setObdTotalOilConsumption(Double obdTotalOilConsumption) {
        this.obdTotalOilConsumption = obdTotalOilConsumption;
    }
    /**
     * @return obd_urea_box_temp
     */
    public Double getObdUreaBoxTemp() {
        return obdUreaBoxTemp;
    }
    /**
     * @param obdUreaBoxTemp
     */
    public void setObdUreaBoxTemp(Double obdUreaBoxTemp) {
        this.obdUreaBoxTemp = obdUreaBoxTemp;
    }
    /**
     * @return obd_urea_volume
     */
    public Double getObdUreaVolume() {
        return obdUreaVolume;
    }
    /**
     * @param obdUreaVolume
     */
    public void setObdUreaVolume(Double obdUreaVolume) {
        this.obdUreaVolume = obdUreaVolume;
    }
    /**
     * @return obd_total_urea_consume
     */
    public Double getObdTotalUreaConsume() {
        return obdTotalUreaConsume;
    }
    /**
     * @param obdTotalUreaConsume
     */
    public void setObdTotalUreaConsume(Double obdTotalUreaConsume) {
        this.obdTotalUreaConsume = obdTotalUreaConsume;
    }
    /**
     * @return obd_DPF_temp
     */
    public Double getObdDpfTemp() {
        return obdDpfTemp;
    }
    /**
     * @param obdDpfTemp
     */
    public void setObdDpfTemp(Double obdDpfTemp) {
        this.obdDpfTemp = obdDpfTemp;
    }
    /**
     * @return obd_status
     */
    public Boolean getObdStatus() {
        return obdStatus;
    }
    /**
     * @param obdStatus
     */
    public void setObdStatus(Boolean obdStatus) {
        this.obdStatus = obdStatus;
    }
}
src/main/kotlin/com/flightfeather/obd/domain/entity/ObdInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,279 @@
package com.flightfeather.obd.domain.entity;
import java.util.Date;
import javax.persistence.*;
@Table(name = "obd_info")
public class ObdInfo {
    @Id
    private Integer id;
    @Column(name = "obd_device_code")
    private String obdDeviceCode;
    @Column(name = "obd_create_time")
    private Date obdCreateTime;
    @Column(name = "obd_data_time")
    private Date obdDataTime;
    @Column(name = "obd_serial_num")
    private Integer obdSerialNum;
    @Column(name = "obd_protocol")
    private Integer obdProtocol;
    @Column(name = "obd_mil")
    private Integer obdMil;
    @Column(name = "obd_diagnosis_support_status")
    private String obdDiagnosisSupportStatus;
    @Column(name = "obd_diagnosis_ready_status")
    private String obdDiagnosisReadyStatus;
    @Column(name = "obd_vin")
    private String obdVin;
    @Column(name = "obd_crn")
    private String obdCrn;
    @Column(name = "obd_cvn")
    private String obdCvn;
    @Column(name = "obd_iupr")
    private String obdIupr;
    @Column(name = "obd_fault_code_num")
    private Integer obdFaultCodeNum;
    @Column(name = "obd_fault_code")
    private String obdFaultCode;
    @Column(name = "obd_status")
    private Boolean obdStatus;
    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }
    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }
    /**
     * @return obd_device_code
     */
    public String getObdDeviceCode() {
        return obdDeviceCode;
    }
    /**
     * @param obdDeviceCode
     */
    public void setObdDeviceCode(String obdDeviceCode) {
        this.obdDeviceCode = obdDeviceCode == null ? null : obdDeviceCode.trim();
    }
    /**
     * @return obd_create_time
     */
    public Date getObdCreateTime() {
        return obdCreateTime;
    }
    /**
     * @param obdCreateTime
     */
    public void setObdCreateTime(Date obdCreateTime) {
        this.obdCreateTime = obdCreateTime;
    }
    /**
     * @return obd_data_time
     */
    public Date getObdDataTime() {
        return obdDataTime;
    }
    /**
     * @param obdDataTime
     */
    public void setObdDataTime(Date obdDataTime) {
        this.obdDataTime = obdDataTime;
    }
    /**
     * @return obd_serial_num
     */
    public Integer getObdSerialNum() {
        return obdSerialNum;
    }
    /**
     * @param obdSerialNum
     */
    public void setObdSerialNum(Integer obdSerialNum) {
        this.obdSerialNum = obdSerialNum;
    }
    /**
     * @return obd_protocol
     */
    public Integer getObdProtocol() {
        return obdProtocol;
    }
    /**
     * @param obdProtocol
     */
    public void setObdProtocol(Integer obdProtocol) {
        this.obdProtocol = obdProtocol;
    }
    /**
     * @return obd_mil
     */
    public Integer getObdMil() {
        return obdMil;
    }
    /**
     * @param obdMil
     */
    public void setObdMil(Integer obdMil) {
        this.obdMil = obdMil;
    }
    /**
     * @return obd_diagnosis_support_status
     */
    public String getObdDiagnosisSupportStatus() {
        return obdDiagnosisSupportStatus;
    }
    /**
     * @param obdDiagnosisSupportStatus
     */
    public void setObdDiagnosisSupportStatus(String obdDiagnosisSupportStatus) {
        this.obdDiagnosisSupportStatus = obdDiagnosisSupportStatus == null ? null : obdDiagnosisSupportStatus.trim();
    }
    /**
     * @return obd_diagnosis_ready_status
     */
    public String getObdDiagnosisReadyStatus() {
        return obdDiagnosisReadyStatus;
    }
    /**
     * @param obdDiagnosisReadyStatus
     */
    public void setObdDiagnosisReadyStatus(String obdDiagnosisReadyStatus) {
        this.obdDiagnosisReadyStatus = obdDiagnosisReadyStatus == null ? null : obdDiagnosisReadyStatus.trim();
    }
    /**
     * @return obd_vin
     */
    public String getObdVin() {
        return obdVin;
    }
    /**
     * @param obdVin
     */
    public void setObdVin(String obdVin) {
        this.obdVin = obdVin == null ? null : obdVin.trim();
    }
    /**
     * @return obd_crn
     */
    public String getObdCrn() {
        return obdCrn;
    }
    /**
     * @param obdCrn
     */
    public void setObdCrn(String obdCrn) {
        this.obdCrn = obdCrn == null ? null : obdCrn.trim();
    }
    /**
     * @return obd_cvn
     */
    public String getObdCvn() {
        return obdCvn;
    }
    /**
     * @param obdCvn
     */
    public void setObdCvn(String obdCvn) {
        this.obdCvn = obdCvn == null ? null : obdCvn.trim();
    }
    /**
     * @return obd_iupr
     */
    public String getObdIupr() {
        return obdIupr;
    }
    /**
     * @param obdIupr
     */
    public void setObdIupr(String obdIupr) {
        this.obdIupr = obdIupr == null ? null : obdIupr.trim();
    }
    /**
     * @return obd_fault_code_num
     */
    public Integer getObdFaultCodeNum() {
        return obdFaultCodeNum;
    }
    /**
     * @param obdFaultCodeNum
     */
    public void setObdFaultCodeNum(Integer obdFaultCodeNum) {
        this.obdFaultCodeNum = obdFaultCodeNum;
    }
    /**
     * @return obd_fault_code
     */
    public String getObdFaultCode() {
        return obdFaultCode;
    }
    /**
     * @param obdFaultCode
     */
    public void setObdFaultCode(String obdFaultCode) {
        this.obdFaultCode = obdFaultCode == null ? null : obdFaultCode.trim();
    }
    /**
     * @return obd_status
     */
    public Boolean getObdStatus() {
        return obdStatus;
    }
    /**
     * @param obdStatus
     */
    public void setObdStatus(Boolean obdStatus) {
        this.obdStatus = obdStatus;
    }
}
src/main/kotlin/com/flightfeather/obd/domain/entity/OriginData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
package com.flightfeather.obd.domain.entity;
import javax.persistence.*;
@Table(name = "obd_origin_data")
public class OriginData {
    @Id
    private Integer id;
    @Column(name = "obd_device_code")
    private String obdDeviceCode;
    @Column(name = "obd_terminal_software_version")
    private Integer obdTerminalSoftwareVersion;
    @Column(name = "obd_encryption_way")
    private Integer obdEncryptionWay;
    @Column(name = "obd_command_unit")
    private Integer obdCommandUnit;
    @Column(name = "obd_content")
    private String obdContent;
    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }
    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }
    /**
     * @return obd_device_code
     */
    public String getObdDeviceCode() {
        return obdDeviceCode;
    }
    /**
     * @param obdDeviceCode
     */
    public void setObdDeviceCode(String obdDeviceCode) {
        this.obdDeviceCode = obdDeviceCode == null ? null : obdDeviceCode.trim();
    }
    /**
     * @return obd_terminal_software_version
     */
    public Integer getObdTerminalSoftwareVersion() {
        return obdTerminalSoftwareVersion;
    }
    /**
     * @param obdTerminalSoftwareVersion
     */
    public void setObdTerminalSoftwareVersion(Integer obdTerminalSoftwareVersion) {
        this.obdTerminalSoftwareVersion = obdTerminalSoftwareVersion;
    }
    /**
     * @return obd_encryption_way
     */
    public Integer getObdEncryptionWay() {
        return obdEncryptionWay;
    }
    /**
     * @param obdEncryptionWay
     */
    public void setObdEncryptionWay(Integer obdEncryptionWay) {
        this.obdEncryptionWay = obdEncryptionWay;
    }
    /**
     * @return obd_command_unit
     */
    public Integer getObdCommandUnit() {
        return obdCommandUnit;
    }
    /**
     * @param obdCommandUnit
     */
    public void setObdCommandUnit(Integer obdCommandUnit) {
        this.obdCommandUnit = obdCommandUnit;
    }
    /**
     * @return obd_content
     */
    public String getObdContent() {
        return obdContent;
    }
    /**
     * @param obdContent
     */
    public void setObdContent(String obdContent) {
        this.obdContent = obdContent == null ? null : obdContent.trim();
    }
}
src/main/kotlin/com/flightfeather/obd/domain/mapper/CarLoginMapper.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.flightfeather.obd.domain.mapper
import com.flightfeather.obd.domain.MyMapper
import com.flightfeather.obd.domain.entity.CarLogin
import org.apache.ibatis.annotations.Mapper
@Mapper
interface CarLoginMapper : MyMapper<CarLogin>
src/main/kotlin/com/flightfeather/obd/domain/mapper/CarLogoutMapper.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.flightfeather.obd.domain.mapper
import com.flightfeather.obd.domain.MyMapper
import com.flightfeather.obd.domain.entity.CarLogout
import org.apache.ibatis.annotations.Mapper
@Mapper
interface CarLogoutMapper : MyMapper<CarLogout>
src/main/kotlin/com/flightfeather/obd/domain/mapper/DataStreamMapper.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.flightfeather.obd.domain.mapper
import com.flightfeather.obd.domain.MyMapper
import com.flightfeather.obd.domain.entity.DataStream
import org.apache.ibatis.annotations.Mapper
@Mapper
interface DataStreamMapper : MyMapper<DataStream>
src/main/kotlin/com/flightfeather/obd/domain/mapper/ObdInfoMapper.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.flightfeather.obd.domain.mapper
import com.flightfeather.obd.domain.MyMapper
import com.flightfeather.obd.domain.entity.ObdInfo
import org.apache.ibatis.annotations.Mapper
@Mapper
interface ObdInfoMapper : MyMapper<ObdInfo>
src/main/kotlin/com/flightfeather/obd/domain/mapper/OriginDataMapper.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.flightfeather.obd.domain.mapper
import com.flightfeather.obd.domain.MyMapper
import com.flightfeather.obd.domain.entity.OriginData
import org.apache.ibatis.annotations.Mapper
@Mapper
interface OriginDataMapper : MyMapper<OriginData>
src/main/kotlin/com/flightfeather/obd/repository/CarLoginRepository.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.flightfeather.obd.repository
import com.flightfeather.obd.socket.bean.ObdPackageData
/**
 * @author riku
 * Date: 2019/9/17
 */
interface CarLoginRepository {
    /**
     * ä¿å­˜è½¦è¾†ç™»å…¥ä¿¡æ¯
     */
    fun saveCarLogin(packageData: ObdPackageData): Boolean
}
src/main/kotlin/com/flightfeather/obd/repository/CarLogoutRepository.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.flightfeather.obd.repository
import com.flightfeather.obd.socket.bean.ObdPackageData
/**
 * @author riku
 * Date: 2019/9/17
 */
interface CarLogoutRepository {
    /**
     * ä¿å­˜ è½¦è¾†ç™»å‡ºå…¥ä¿¡æ¯
     */
    fun saveCarLogout(packageData: ObdPackageData): Boolean
}
src/main/kotlin/com/flightfeather/obd/repository/DataStreamRepository.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.flightfeather.obd.repository
import com.flightfeather.obd.socket.bean.ObdPackageData
/**
 * @author riku
 * Date: 2019/9/17
 */
interface DataStreamRepository {
    /**
     * ä¿å­˜ å®žæ—¶ä¿¡æ¯æˆ–补传信息 ä¸­çš„ æ•°æ®æµä¿¡æ¯ å’Œ è¡¥å……数据流
     */
    fun saveDataStream(packageData: ObdPackageData): Boolean
}
src/main/kotlin/com/flightfeather/obd/repository/ObdInfoRepository.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.flightfeather.obd.repository
import com.flightfeather.obd.socket.bean.ObdInfo
import com.flightfeather.obd.socket.bean.ObdPackageData
import com.flightfeather.obd.socket.bean.RealTimeData
import com.flightfeather.obd.socket.bean.ReplacementData
/**
 * @author riku
 * Date: 2019/9/17
 */
interface ObdInfoRepository {
    /**
     * ä¿å­˜ å®žæ—¶ä¿¡æ¯ @see [RealTimeData] æˆ–补传信息 @see [ReplacementData]  ä¸­çš„ obd æ•°æ® @see [ObdInfo]
     */
    fun saveObdInfo(packageData: ObdPackageData): Boolean
}
src/main/kotlin/com/flightfeather/obd/repository/OriginDataRepository.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.flightfeather.obd.repository
import com.flightfeather.obd.socket.bean.ObdPackageData
/**
 * @author riku
 * Date: 2019/9/17
 */
interface OriginDataRepository {
    /**
     * ä¿å­˜å‰ç«¯ä¼ è¾“的原始数据 @see [ObdPackageData]
     */
    fun saveOriginData(packageData: ObdPackageData, msg: String): Boolean
}
src/main/kotlin/com/flightfeather/obd/repository/impl/CarLoginDaoImpl.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.flightfeather.obd.repository.impl
import com.flightfeather.obd.domain.entity.CarLogin
import com.flightfeather.obd.domain.mapper.CarLoginMapper
import com.flightfeather.obd.repository.CarLoginRepository
import com.flightfeather.obd.socket.bean.CarRegisterData
import com.flightfeather.obd.socket.bean.ObdPackageData
import com.flightfeather.obd.socket.eunm.ObdCommandUnit
import org.springframework.stereotype.Repository
/**
 * @author riku
 * Date: 2019/9/17
 */
@Repository
class CarLoginDaoImpl(val carLoginMapper: CarLoginMapper) : CarLoginRepository {
    override fun saveCarLogin(packageData: ObdPackageData): Boolean {
        return if (packageData.commandUnit == ObdCommandUnit.CarRegister.value) {
            val carLogin = CarLogin().apply {
                obdDeviceCode = packageData.deviceCode
            }
            packageData.dataUnit.forEach {
                when (it) {
                    is CarRegisterData -> carLogin.apply {
                        loginDataTime = it.time
                        loginSerialNum = it.serialNum
                        loginSimCode = it.SIMCode
                    }
                }
            }
            carLoginMapper.insert(carLogin) == 1
        } else {
            false
        }
    }
}
src/main/kotlin/com/flightfeather/obd/repository/impl/CarLogoutDaoImpl.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.flightfeather.obd.repository.impl
import com.flightfeather.obd.domain.entity.CarLogout
import com.flightfeather.obd.domain.mapper.CarLogoutMapper
import com.flightfeather.obd.repository.CarLogoutRepository
import com.flightfeather.obd.socket.bean.CarLogOutData
import com.flightfeather.obd.socket.bean.ObdPackageData
import com.flightfeather.obd.socket.eunm.ObdCommandUnit
import org.springframework.stereotype.Repository
/**
 * @author riku
 * Date: 2019/9/17
 */
@Repository
class CarLogoutDaoImpl(val carLogoutMapper: CarLogoutMapper): CarLogoutRepository {
    override fun saveCarLogout(packageData: ObdPackageData): Boolean {
        return if (packageData.commandUnit == ObdCommandUnit.CarLogOut.value) {
            val carLogout = CarLogout().apply {
                obdDeviceCode = packageData.deviceCode
            }
            packageData.dataUnit.forEach {
                when (it) {
                    is CarLogOutData -> carLogout.apply {
                        logoutDataTime = it.time
                        logoutSerialNum = it.serialNum
                    }
                }
            }
            carLogoutMapper.insert(carLogout) == 1
        } else {
            false
        }
    }
}
src/main/kotlin/com/flightfeather/obd/repository/impl/DataStreamDaoImpl.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.flightfeather.obd.repository.impl
import com.flightfeather.obd.domain.entity.DataStream
import com.flightfeather.obd.domain.mapper.DataStreamMapper
import com.flightfeather.obd.repository.DataStreamRepository
import com.flightfeather.obd.socket.bean.EngineDataStream
import com.flightfeather.obd.socket.bean.ObdPackageData
import com.flightfeather.obd.socket.bean.ReplacementData
import com.flightfeather.obd.socket.bean.SupplementDataStream
import com.flightfeather.obd.socket.eunm.ObdCommandUnit
import org.springframework.stereotype.Repository
/**
 * @author riku
 * Date: 2019/9/17
 */
@Repository
class DataStreamDaoImpl(val dataStreamMapper: DataStreamMapper): DataStreamRepository {
    override fun saveDataStream(packageData: ObdPackageData): Boolean {
        return if (packageData.commandUnit == ObdCommandUnit.RealTimeData.value
                || packageData.commandUnit == ObdCommandUnit.ReplacementData.value) {
            val dataStream = DataStream().apply {
                obdDeviceCode = packageData.deviceCode
                obdStatus = packageData.commandUnit == ObdCommandUnit.ReplacementData.value
            }
            packageData.dataUnit.forEach {
                dataStream.apply {
                    obdDataTime = it.time
                    obdSerialNum = it.serialNum
                }
                when (it) {
                    is EngineDataStream -> dataStream.apply {
                        //fixme æ­¤å¤„相同属性可用 [BeanUtil] å·¥å…·æ¥å¿«é€Ÿèµ‹å€¼ï¼Œä½†å› ä¸ºå¹¶ä¸æ˜¯å…¨éƒ¨å±žæ€§éƒ½ç›¸åŒï¼Œå¯èƒ½å®¹æ˜“产生误解
                        obdSpeed = it.obdSpeed
                        obdAirPressure = it.obdAirPressure
                        obdEngineTorque = it.obdEngineTorque
                        obdFrictionTorque = it.obdFrictionTorque
                        obdEngineRpm = it.obdEngineRpm
                        obdEngineFuelFlow = it.obdEngineFuelFlow
                        obdScrUpstreamNox = it.obdScrUpstreamNox
                        obdScrDownstreamNox = it.obdScrDownstreamNox
                        obdRemainReactant = it.obdRemainReactant
                        obdAirInput = it.obdAirInput
                        obdScrInputTemp = it.obdScrInputTemp
                        obdScrOutputTemp = it.obdScrOutputTemp
                        obdDpf = it.obdDpf
                        obdEngineCoolantTemp = it.obdEngineCoolantTemp
                        obdFuelLevel = it.obdFuelLevel
                        obdLocationStatus = it.obdLocationStatus?.toString(2)
                        obdLong = it.obdLong
                        obdLat = it.obdLat
                        obdTotalMileage = it.obdTotalMileage
                    }
                    is SupplementDataStream -> dataStream.apply {
                        obdEngineTorqueMode = it.obdEngineTorqueMode
                        obdAcceleratorPedal = it.obdAcceleratorPedal
                        obdTotalOilConsumption = it.obdTotalOilConsumption
                        obdUreaBoxTemp = it.obdUreaBoxTemp
                        obdUreaVolume = it.obdUreaVolume
                        obdTotalUreaConsume = it.obdTotalUreaConsume
                        obdDpfTemp = it.obdDpfTemp
                    }
                }
            }
            dataStreamMapper.insert(dataStream) == 1
        } else {
            false
        }
    }
}
src/main/kotlin/com/flightfeather/obd/repository/impl/ObdDataDaoImpl.kt
@@ -66,7 +66,7 @@
            ObdCommandUnit.ReplacementData.value -> {
                packageData.dataUnit.forEach {
                    when (it) {
                        is com.flightfeather.obd.socket.bean.ObdData -> {
                        is com.flightfeather.obd.socket.bean.ObdInfo -> {
                            obdData.apply {
                                obdTime = it.time
                                obdProtocol = it.obdProtocol
@@ -88,8 +88,8 @@
                                obdFrictionTorque = it.obdFrictionTorque
                                obdEngineRpm = it.obdEngineRpm?.toInt()
                                obdStartFuelFlow = it.obdEngineFuelFlow
                                obdScrUpstreamNo = it.obdScrUpstreamNo
                                obdScrDownstreamNo = it.obdScrDownstreamNo
                                obdScrUpstreamNo = it.obdScrUpstreamNox
                                obdScrDownstreamNo = it.obdScrDownstreamNox
                                obdRemainReactant = it.obdRemainReactant
                                obdAirInput = it.obdAirInput
                                obdScrInputTemp = it.obdScrInputTemp
src/main/kotlin/com/flightfeather/obd/repository/impl/ObdInfoDaoImpl.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.flightfeather.obd.repository.impl
import com.flightfeather.obd.domain.entity.ObdInfo
import com.flightfeather.obd.domain.mapper.ObdInfoMapper
import com.flightfeather.obd.repository.ObdInfoRepository
import com.flightfeather.obd.socket.bean.ObdPackageData
import com.flightfeather.obd.socket.eunm.ObdCommandUnit
import org.springframework.stereotype.Repository
/**
 * @author riku
 * Date: 2019/9/17
 */
@Repository
class ObdInfoDaoImpl(val obdInfoMapper: ObdInfoMapper) : ObdInfoRepository {
    override fun saveObdInfo(packageData: ObdPackageData): Boolean {
        return if (packageData.commandUnit == ObdCommandUnit.RealTimeData.value
                || packageData.commandUnit == ObdCommandUnit.ReplacementData.value) {
            val obdInfo = ObdInfo().apply {
                obdDeviceCode = packageData.deviceCode
                obdStatus = packageData.commandUnit == ObdCommandUnit.ReplacementData.value
            }
            packageData.dataUnit.forEach {
                when (it) {
                    is com.flightfeather.obd.socket.bean.ObdInfo -> {
                        obdInfo.apply {
                            obdDataTime = it.time
                            obdSerialNum = it.serialNum
                            obdProtocol = it.obdProtocol
                            obdMil = it.obdMil
                            obdDiagnosisSupportStatus = it.diagnosisSupportStatus
                            obdDiagnosisReadyStatus = it.diagnosisReadyStatus
                            obdVin = it.obdVin
                            obdCrn = it.obdCrn
                            obdCvn = it.obdCvn
                            obdIupr = it.iupr
                            obdFaultCodeNum = it.obdFaultCodeNum
                            obdFaultCode = it.obdFaultCode
                        }
                    }
                }
            }
            obdInfoMapper.insert(obdInfo) == 1
        } else {
            false
        }
    }
}
src/main/kotlin/com/flightfeather/obd/repository/impl/OriginDataDaoImpl.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.flightfeather.obd.repository.impl
import com.flightfeather.obd.domain.entity.OriginData
import com.flightfeather.obd.domain.mapper.OriginDataMapper
import com.flightfeather.obd.repository.OriginDataRepository
import com.flightfeather.obd.socket.bean.ObdPackageData
import org.springframework.stereotype.Repository
/**
 * @author riku
 * Date: 2019/9/17
 */
@Repository
class OriginDataDaoImpl (val originDataMapper: OriginDataMapper): OriginDataRepository {
    override fun saveOriginData(packageData: ObdPackageData, msg: String): Boolean {
        val originData = OriginData().apply {
            obdDeviceCode = packageData.deviceCode
            obdTerminalSoftwareVersion = packageData.softwareVersion
            obdEncryptionWay = packageData.encryptionWay
            obdCommandUnit = packageData.commandUnit
            obdContent = msg
        }
        return originDataMapper.insert(originData) == 1
    }
}
src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt
@@ -1,10 +1,11 @@
package com.flightfeather.obd.socket
import com.flightfeather.obd.common.utils.FileUtil
import com.flightfeather.obd.repository.ObdDataRepository
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
@@ -27,6 +28,16 @@
    @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()
@@ -35,6 +46,11 @@
    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 dealStringMsg(msg: String, ctx: ChannelHandlerContext?) {
@@ -45,7 +61,7 @@
            val packageData = vehicleDataDecoder.decode(msg)
            //保存
            DeviceSession.saveDevice(packageData.deviceCode, ctx)
            saveToDataBase(packageData)
            saveToDataBase(packageData, msg)
        } else {
            println("------数据BCC校验失败,舍弃 [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]")
        }
@@ -62,8 +78,15 @@
    /**
     * ä¿å­˜è‡³æ•°æ®åº“
     */
    fun saveToDataBase(packageData: ObdPackageData) {
    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)
        }
    }
    /**
src/main/kotlin/com/flightfeather/obd/socket/bean/EngineDataStream.kt
@@ -19,8 +19,8 @@
    var obdFrictionTorque: Double? = null
    var obdEngineRpm: Double? = null
    var obdEngineFuelFlow: Double? = null
    var obdScrUpstreamNo: Double? = null
    var obdScrDownstreamNo: Double? = null
    var obdScrUpstreamNox: Double? = null
    var obdScrDownstreamNox: Double? = null
    var obdRemainReactant: Double? = null
    var obdAirInput: Double? = null
    var obdScrInputTemp: Double? = null
src/main/kotlin/com/flightfeather/obd/socket/bean/ObdInfo.kt
ÎļþÃû´Ó src/main/kotlin/com/flightfeather/obd/socket/bean/ObdData.kt ÐÞ¸Ä
@@ -10,7 +10,7 @@
 * å®žæ—¶ä¿¡æ¯[RealTimeData] ä¸­çš„obd数据
 * æ•°æ®ç±»åž‹ @see [ObdDataType.ObdData]
 */
class ObdData(
class ObdInfo(
        time: Date?,
        serialNum: Int?
) : RealTimeData(time, serialNum) {
@@ -21,7 +21,7 @@
    var obdVin: String? = null
    var obdCrn: String? = null//软件标定识别号
    var obdCvn: String? = null//标定验证码
    var IUPR:String?=null//定义参考 SAE J 1979-DA è¡¨ G11
    var iupr:String?=null//定义参考 SAE J 1979-DA è¡¨ G11
    var obdFaultCodeNum: Int? = null//故障码总数: æœ‰æ•ˆå€¼èŒƒå›´ï¼š0~253,“0xFE”表示无效。
    var obdFaultCode: String? = null//故障码信息列表: æ¯ä¸ªæ•…障码为四字节,可按故障实际顺序进行排序
}
src/main/kotlin/com/flightfeather/obd/socket/decoder/RealTimeDataDecoder.kt
@@ -12,7 +12,7 @@
 */
interface RealTimeDataDecoder {
    fun getObdData(time: Date?, serialNum: Int, b: List<String>): ObdData?
    fun getObdData(time: Date?, serialNum: Int, b: List<String>): ObdInfo?
    fun getEngineDataStream(time: Date?, serialNum: Int, b: List<String>): EngineDataStream?
src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/DataUnitDecoderImpl.kt
@@ -116,6 +116,7 @@
        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
src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt
@@ -1,7 +1,7 @@
package com.flightfeather.obd.socket.decoder.impl
import com.flightfeather.obd.socket.bean.EngineDataStream
import com.flightfeather.obd.socket.bean.ObdData
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
@@ -12,7 +12,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()) {
            //去除 ä¿¡æ¯ç±»åž‹æ ‡å¿—
@@ -46,7 +46,7 @@
                }
            }
            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)
@@ -54,7 +54,7 @@
                obdVin = vin.toString()
                obdCrn = softwareCode.toString()
                obdCvn = cvn.toString()
                this.IUPR = IUPR.toString()
                this.iupr = IUPR.toString()
                obdFaultCodeNum = faultCodeNum
                obdFaultCode = faultCode.toString()
            }
@@ -78,8 +78,8 @@
                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)?.minus(200)?.toDouble()?.times(0.05)
                obdScrDownstreamNox = "${dataList[11]}${dataList[12]}".toIntOrNull(16)?.minus(200)?.toDouble()?.times(0.05)
                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)
src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdDataType.kt
@@ -7,7 +7,7 @@
 *
 * å®žæ—¶ä¿¡æ¯[RealTimeData]和补发信息[ReplacementData] ä¸­çš„æ•°æ®ç±»åž‹
 * ç±»åž‹ç¼–码                     è¯´æ˜Ž
 * 0x01                           OBD ä¿¡æ¯    @see [com.flightfeather.obd.socket.bean.ObdData]
 * 0x01                           OBD ä¿¡æ¯    @see [com.flightfeather.obd.socket.bean.ObdInfo]
 * 0x02                          æ•°æ®æµä¿¡æ¯  @see[com.flightfeather.obd.socket.bean.EngineDataStream]
 * 0x03-0x7F                é¢„ç•™
 * 0x80                          è¡¥å……数据流   @see[com.flightfeather.obd.socket.bean.SupplementDataStream]
src/main/resources/generator/generatorConfig.xml
@@ -46,8 +46,13 @@
        </javaClientGenerator>
        <!-- è¦ç”Ÿæˆçš„表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <!--<table tableName="obd_data" domainObjectName="ObdData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <table tableName="obd_user" domainObjectName="ObdUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
        <table tableName="obd_threshold_value" domainObjectName="ThresholdValue" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
        <table tableName="obd_alarm_data" domainObjectName="AlarmData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
        <!--<table tableName="obd_user" domainObjectName="ObdUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <!--<table tableName="obd_threshold_value" domainObjectName="ThresholdValue" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <!--<table tableName="obd_alarm_data" domainObjectName="AlarmData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <!--<table tableName="obd_origin_data" domainObjectName="OriginData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <!--<table tableName="obd_car_login" domainObjectName="CarLogin" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <!--<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"/>-->
    </context>
</generatorConfiguration>
src/main/resources/mapper/CarLoginMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.flightfeather.obd.domain.mapper.CarLoginMapper">
  <resultMap id="BaseResultMap" type="com.flightfeather.obd.domain.entity.CarLogin">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="obd_device_code" jdbcType="VARCHAR" property="obdDeviceCode" />
    <result column="login_create_time" jdbcType="TIMESTAMP" property="loginCreateTime" />
    <result column="login_data_time" jdbcType="TIMESTAMP" property="loginDataTime" />
    <result column="login_serial_num" jdbcType="INTEGER" property="loginSerialNum" />
    <result column="login_sim_code" jdbcType="VARCHAR" property="loginSimCode" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    id, obd_device_code, login_create_time, login_data_time, login_serial_num, login_sim_code
  </sql>
</mapper>
src/main/resources/mapper/CarLogoutMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.flightfeather.obd.domain.mapper.CarLogoutMapper">
  <resultMap id="BaseResultMap" type="com.flightfeather.obd.domain.entity.CarLogout">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="obd_device_code" jdbcType="VARCHAR" property="obdDeviceCode" />
    <result column="logout_create_time" jdbcType="TIMESTAMP" property="logoutCreateTime" />
    <result column="logout_data_time" jdbcType="TIMESTAMP" property="logoutDataTime" />
    <result column="logout_serial_num" jdbcType="INTEGER" property="logoutSerialNum" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    id, obd_device_code, logout_create_time, logout_data_time, logout_serial_num
  </sql>
</mapper>
src/main/resources/mapper/DataStreamMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.flightfeather.obd.domain.mapper.DataStreamMapper">
  <resultMap id="BaseResultMap" type="com.flightfeather.obd.domain.entity.DataStream">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="obd_device_code" jdbcType="VARCHAR" property="obdDeviceCode" />
    <result column="obd_create_time" jdbcType="TIMESTAMP" property="obdCreateTime" />
    <result column="obd_data_time" jdbcType="TIMESTAMP" property="obdDataTime" />
    <result column="obd_serial_num" jdbcType="INTEGER" property="obdSerialNum" />
    <result column="obd_speed" jdbcType="DOUBLE" property="obdSpeed" />
    <result column="obd_air_pressure" jdbcType="DOUBLE" property="obdAirPressure" />
    <result column="obd_engine_torque" jdbcType="DOUBLE" property="obdEngineTorque" />
    <result column="obd_friction_torque" jdbcType="DOUBLE" property="obdFrictionTorque" />
    <result column="obd_engine_rpm" jdbcType="DOUBLE" property="obdEngineRpm" />
    <result column="obd_engine_fuel_flow" jdbcType="DOUBLE" property="obdEngineFuelFlow" />
    <result column="obd_scr_upstream_NOx" jdbcType="DOUBLE" property="obdScrUpstreamNox" />
    <result column="obd_scr_downstream_NOx" jdbcType="DOUBLE" property="obdScrDownstreamNox" />
    <result column="obd_remain_reactant" jdbcType="DOUBLE" property="obdRemainReactant" />
    <result column="obd_air_input" jdbcType="DOUBLE" property="obdAirInput" />
    <result column="obd_scr_input_temp" jdbcType="DOUBLE" property="obdScrInputTemp" />
    <result column="obd_scr_output_temp" jdbcType="DOUBLE" property="obdScrOutputTemp" />
    <result column="obd_DPF" jdbcType="DOUBLE" property="obdDpf" />
    <result column="obd_engine_coolant_temp" jdbcType="DOUBLE" property="obdEngineCoolantTemp" />
    <result column="obd_fuel_level" jdbcType="DOUBLE" property="obdFuelLevel" />
    <result column="obd_location_status" jdbcType="VARCHAR" property="obdLocationStatus" />
    <result column="obd_long" jdbcType="DOUBLE" property="obdLong" />
    <result column="obd_lat" jdbcType="DOUBLE" property="obdLat" />
    <result column="obd_total_mileage" jdbcType="DOUBLE" property="obdTotalMileage" />
    <result column="obd_engine_torque_mode" jdbcType="INTEGER" property="obdEngineTorqueMode" />
    <result column="obd_accelerator_pedal" jdbcType="DOUBLE" property="obdAcceleratorPedal" />
    <result column="obd_total_oil_consumption" jdbcType="DOUBLE" property="obdTotalOilConsumption" />
    <result column="obd_urea_box_temp" jdbcType="DOUBLE" property="obdUreaBoxTemp" />
    <result column="obd_urea_volume" jdbcType="DOUBLE" property="obdUreaVolume" />
    <result column="obd_total_urea_consume" jdbcType="DOUBLE" property="obdTotalUreaConsume" />
    <result column="obd_DPF_temp" jdbcType="DOUBLE" property="obdDpfTemp" />
    <result column="obd_status" jdbcType="BIT" property="obdStatus" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    id, obd_device_code, obd_create_time, obd_data_time, obd_serial_num, obd_speed, obd_air_pressure,
    obd_engine_torque, obd_friction_torque, obd_engine_rpm, obd_engine_fuel_flow, obd_scr_upstream_NOx,
    obd_scr_downstream_NOx, obd_remain_reactant, obd_air_input, obd_scr_input_temp, obd_scr_output_temp,
    obd_DPF, obd_engine_coolant_temp, obd_fuel_level, obd_location_status, obd_long,
    obd_lat, obd_total_mileage, obd_engine_torque_mode, obd_accelerator_pedal, obd_total_oil_consumption,
    obd_urea_box_temp, obd_urea_volume, obd_total_urea_consume, obd_DPF_temp, obd_status
  </sql>
</mapper>
src/main/resources/mapper/ObdInfoMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.flightfeather.obd.domain.mapper.ObdInfoMapper">
  <resultMap id="BaseResultMap" type="com.flightfeather.obd.domain.entity.ObdInfo">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="obd_device_code" jdbcType="VARCHAR" property="obdDeviceCode" />
    <result column="obd_create_time" jdbcType="TIMESTAMP" property="obdCreateTime" />
    <result column="obd_data_time" jdbcType="TIMESTAMP" property="obdDataTime" />
    <result column="obd_serial_num" jdbcType="INTEGER" property="obdSerialNum" />
    <result column="obd_protocol" jdbcType="INTEGER" property="obdProtocol" />
    <result column="obd_mil" jdbcType="INTEGER" property="obdMil" />
    <result column="obd_diagnosis_support_status" jdbcType="VARCHAR" property="obdDiagnosisSupportStatus" />
    <result column="obd_diagnosis_ready_status" jdbcType="VARCHAR" property="obdDiagnosisReadyStatus" />
    <result column="obd_vin" jdbcType="VARCHAR" property="obdVin" />
    <result column="obd_crn" jdbcType="VARCHAR" property="obdCrn" />
    <result column="obd_cvn" jdbcType="VARCHAR" property="obdCvn" />
    <result column="obd_iupr" jdbcType="VARCHAR" property="obdIupr" />
    <result column="obd_fault_code_num" jdbcType="INTEGER" property="obdFaultCodeNum" />
    <result column="obd_fault_code" jdbcType="VARCHAR" property="obdFaultCode" />
    <result column="obd_status" jdbcType="BIT" property="obdStatus" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    id, obd_device_code, obd_create_time, obd_data_time, obd_serial_num, obd_protocol,
    obd_mil, obd_diagnosis_support_status, obd_diagnosis_ready_status, obd_vin, obd_crn,
    obd_cvn, obd_iupr, obd_fault_code_num, obd_fault_code, obd_status
  </sql>
</mapper>
src/main/resources/mapper/OriginDataMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.flightfeather.obd.domain.mapper.OriginDataMapper">
  <resultMap id="BaseResultMap" type="com.flightfeather.obd.domain.entity.OriginData">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="obd_device_code" jdbcType="VARCHAR" property="obdDeviceCode" />
    <result column="obd_terminal_software_version" jdbcType="INTEGER" property="obdTerminalSoftwareVersion" />
    <result column="obd_encryption_way" jdbcType="INTEGER" property="obdEncryptionWay" />
    <result column="obd_command_unit" jdbcType="INTEGER" property="obdCommandUnit" />
  </resultMap>
  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.flightfeather.obd.domain.entity.OriginData">
    <!--
      WARNING - @mbg.generated
    -->
    <result column="obd_content" jdbcType="LONGVARCHAR" property="obdContent" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    id, obd_device_code, obd_terminal_software_version, obd_encryption_way, obd_command_unit
  </sql>
  <sql id="Blob_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    obd_content
  </sql>
</mapper>
src/test/kotlin/com/flightfeather/obd/socket/decoder/VehicleDataDecoderTest.kt
@@ -36,11 +36,14 @@
            }
            ObdCommandUnit.RealTimeData.value,
            ObdCommandUnit.ReplacementData.value -> {
                packageData.dataUnit.forEach {
                    obdData.apply {
                        obdTime = it.time
                    }
                    when (it) {
                        is com.flightfeather.obd.socket.bean.ObdData -> {
                        is com.flightfeather.obd.socket.bean.ObdInfo -> {
                            obdData.apply {
                                obdTime = it.time
                                obdProtocol = it.obdProtocol
                                obdMil = it.obdMil
                                obdIdCode = it.obdCrn
@@ -51,7 +54,6 @@
                        }
                        is EngineDataStream -> {
                            obdData.apply {
                                obdTime = it.time
                                obdLng = it.obdLong
                                obdLat = it.obdLat
                                obdSpeed = it.obdSpeed?.toInt()
@@ -60,8 +62,8 @@
                                obdFrictionTorque = it.obdFrictionTorque
                                obdEngineRpm = it.obdEngineRpm?.toInt()
                                obdStartFuelFlow = it.obdEngineFuelFlow
                                obdScrUpstreamNo = it.obdScrUpstreamNo
                                obdScrDownstreamNo = it.obdScrDownstreamNo
                                obdScrUpstreamNo = it.obdScrUpstreamNox
                                obdScrDownstreamNo = it.obdScrDownstreamNox
                                obdRemainReactant = it.obdRemainReactant
                                obdAirInput = it.obdAirInput
                                obdScrInputTemp = it.obdScrInputTemp
@@ -75,7 +77,6 @@
                        }
                        is SupplementDataStream -> {
                            obdData.apply {
                                obdTime = it.time
                                obdEngineTorqueMode = it.obdEngineTorqueMode?.toString()
                                obdAcceleratorPedal = it.obdAcceleratorPedal
                                obdTotalOilConsumption = it.obdTotalOilConsumption
@@ -91,26 +92,10 @@
            }
            ObdCommandUnit.CarLogOut.value -> {
                packageData.dataUnit.forEach {
                    when (it) {
                        is CarLogOutData -> {
                            obdData.apply {
                                obdTime = it.time
                            }
                        }
                    }
                }
            }
            ObdCommandUnit.TimeCalibration.value -> {
                packageData.dataUnit.forEach {
                    when (it) {
                        is TimeCalibrationData -> {
                            obdData.apply {
                                obdTime = it.time
                            }
                        }
                    }
                }
            }
        }
    }