车辆位置,极值,位置等重要数据数据

This commit is contained in:
tzy 2026-01-23 21:08:21 +08:00
parent 0de7503010
commit 3290319ba7
64 changed files with 1381 additions and 1574 deletions

Binary file not shown.

View File

@ -8,8 +8,8 @@ import java.util.List;
import javax.sql.DataSource;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -122,11 +122,11 @@ public class MyBatisConfig
typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
VFS.addImplClass(SpringBootVFS.class);
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
return sessionFactory.getObject();
}
}
}

View File

@ -4,13 +4,14 @@ import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
* Entity基类
*
*
* @author ruoyi
*/
public class BaseEntity implements Serializable
@ -19,6 +20,7 @@ public class BaseEntity implements Serializable
/** 搜索值 */
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/** 创建者 */
@ -36,10 +38,12 @@ public class BaseEntity implements Serializable
private Date updateTime;
/** 备注 */
@TableField(exist = false)
private String remark;
/** 请求参数 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> params;
public String getSearchValue()

View File

@ -1,58 +0,0 @@
package com.evobms.project.Battery.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.evobms.framework.aspectj.lang.annotation.Excel;
import com.evobms.framework.web.domain.BaseEntity;
public class ChargeDischargeSummary extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long id;
@Excel(name = "设备ID")
private String deviceId;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd")
private Date timestamp;
@Excel(name = "累计放电电量(kWh)")
private BigDecimal dischargeKwh;
@Excel(name = "累计充电电量(kWh)")
private BigDecimal chargeKwh;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getDeviceId() { return deviceId; }
public void setDeviceId(String deviceId) { this.deviceId = deviceId; }
public Date getTimestamp() { return timestamp; }
public void setTimestamp(Date timestamp) { this.timestamp = timestamp; }
public BigDecimal getDischargeKwh() { return dischargeKwh; }
public void setDischargeKwh(BigDecimal dischargeKwh) { this.dischargeKwh = dischargeKwh; }
public BigDecimal getChargeKwh() { return chargeKwh; }
public void setChargeKwh(BigDecimal chargeKwh) { this.chargeKwh = chargeKwh; }
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("deviceId", getDeviceId())
.append("timestamp", getTimestamp())
.append("dischargeKwh", getDischargeKwh())
.append("chargeKwh", getChargeKwh())
.append("createTime", getCreateTime())
.append("updateTime", getUpdateTime())
.append("createBy", getCreateBy())
.append("updateBy", getUpdateBy())
.toString();
}
}

View File

@ -1,223 +0,0 @@
package com.evobms.project.Battery.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.evobms.framework.aspectj.lang.annotation.Excel;
import com.evobms.framework.web.domain.BaseEntity;
/**
* 可充电储能子系统电压信息对象 subsystem_voltage
*
* @author 田志阳
* @date 2025-11-15
*/
public class SubsystemVoltage extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键ID */
private Long id;
/** 设备ID */
@Excel(name = "设备ID")
private String deviceId;
/** 数据时间戳 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd")
private Date timestamp;
/** 可充电储能子系统个数 */
@Excel(name = "可充电储能子系统个数")
private Integer subsystemCount;
/** 可充电储能子系统号 */
@Excel(name = "可充电储能子系统号")
private Integer subsystemNo;
/** 可充电储能装置电压(V) */
@Excel(name = "可充电储能装置电压(V)")
private BigDecimal subsystemVoltage;
/** 可充电储能装置电流(A) */
@Excel(name = "可充电储能装置电流(A)")
private BigDecimal subsystemCurrent;
/** 单体电池总数 */
@Excel(name = "单体电池总数")
private Integer totalBatteryCount;
/** 本帧起始电池序号 */
@Excel(name = "本帧起始电池序号")
private Integer frameStartBatteryNo;
/** 本帧单体电池总数 */
@Excel(name = "本帧单体电池总数")
private Integer frameBatteryCount;
/** 单体电池电压数组(V) */
@Excel(name = "单体电池电压数组(V)")
private String batteryVoltages;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date createdAt;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date updatedAt;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setDeviceId(String deviceId)
{
this.deviceId = deviceId;
}
public String getDeviceId()
{
return deviceId;
}
public void setTimestamp(Date timestamp)
{
this.timestamp = timestamp;
}
public Date getTimestamp()
{
return timestamp;
}
public void setSubsystemCount(Integer subsystemCount)
{
this.subsystemCount = subsystemCount;
}
public Integer getSubsystemCount()
{
return subsystemCount;
}
public void setSubsystemNo(Integer subsystemNo)
{
this.subsystemNo = subsystemNo;
}
public Integer getSubsystemNo()
{
return subsystemNo;
}
public void setSubsystemVoltage(BigDecimal subsystemVoltage)
{
this.subsystemVoltage = subsystemVoltage;
}
public BigDecimal getSubsystemVoltage()
{
return subsystemVoltage;
}
public void setSubsystemCurrent(BigDecimal subsystemCurrent)
{
this.subsystemCurrent = subsystemCurrent;
}
public BigDecimal getSubsystemCurrent()
{
return subsystemCurrent;
}
public void setTotalBatteryCount(Integer totalBatteryCount)
{
this.totalBatteryCount = totalBatteryCount;
}
public Integer getTotalBatteryCount()
{
return totalBatteryCount;
}
public void setFrameStartBatteryNo(Integer frameStartBatteryNo)
{
this.frameStartBatteryNo = frameStartBatteryNo;
}
public Integer getFrameStartBatteryNo()
{
return frameStartBatteryNo;
}
public void setFrameBatteryCount(Integer frameBatteryCount)
{
this.frameBatteryCount = frameBatteryCount;
}
public Integer getFrameBatteryCount()
{
return frameBatteryCount;
}
public void setBatteryVoltages(String batteryVoltages)
{
this.batteryVoltages = batteryVoltages;
}
public String getBatteryVoltages()
{
return batteryVoltages;
}
public void setCreatedAt(Date createdAt)
{
this.createdAt = createdAt;
}
public Date getCreatedAt()
{
return createdAt;
}
public void setUpdatedAt(Date updatedAt)
{
this.updatedAt = updatedAt;
}
public Date getUpdatedAt()
{
return updatedAt;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("deviceId", getDeviceId())
.append("timestamp", getTimestamp())
.append("subsystemCount", getSubsystemCount())
.append("subsystemNo", getSubsystemNo())
.append("subsystemVoltage", getSubsystemVoltage())
.append("subsystemCurrent", getSubsystemCurrent())
.append("totalBatteryCount", getTotalBatteryCount())
.append("frameStartBatteryNo", getFrameStartBatteryNo())
.append("frameBatteryCount", getFrameBatteryCount())
.append("batteryVoltages", getBatteryVoltages())
.append("createdAt", getCreatedAt())
.append("updatedAt", getUpdatedAt())
.toString();
}
}

View File

@ -1,13 +0,0 @@
package com.evobms.project.Battery.mapper;
import java.util.List;
import com.evobms.project.Battery.domain.ChargeDischargeSummary;
public interface ChargeDischargeSummaryMapper {
ChargeDischargeSummary selectChargeDischargeSummaryById(Long id);
List<ChargeDischargeSummary> selectChargeDischargeSummaryList(ChargeDischargeSummary summary);
int insertChargeDischargeSummary(ChargeDischargeSummary summary);
int updateChargeDischargeSummary(ChargeDischargeSummary summary);
int deleteChargeDischargeSummaryById(Long id);
int deleteChargeDischargeSummaryByIds(Long[] ids);
}

View File

@ -1,13 +0,0 @@
package com.evobms.project.Battery.service;
import java.util.List;
import com.evobms.project.Battery.domain.ChargeDischargeSummary;
public interface IChargeDischargeSummaryService {
ChargeDischargeSummary selectChargeDischargeSummaryById(Long id);
List<ChargeDischargeSummary> selectChargeDischargeSummaryList(ChargeDischargeSummary summary);
int insertChargeDischargeSummary(ChargeDischargeSummary summary);
int updateChargeDischargeSummary(ChargeDischargeSummary summary);
int deleteChargeDischargeSummaryByIds(Long[] ids);
int deleteChargeDischargeSummaryById(Long id);
}

View File

@ -1,47 +0,0 @@
package com.evobms.project.Battery.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.evobms.project.Battery.mapper.ChargeDischargeSummaryMapper;
import com.evobms.project.Battery.domain.ChargeDischargeSummary;
import com.evobms.project.Battery.service.IChargeDischargeSummaryService;
import com.evobms.common.utils.DateUtils;
@Service
public class ChargeDischargeSummaryServiceImpl implements IChargeDischargeSummaryService {
@Autowired
private ChargeDischargeSummaryMapper chargeDischargeSummaryMapper;
@Override
public ChargeDischargeSummary selectChargeDischargeSummaryById(Long id) {
return chargeDischargeSummaryMapper.selectChargeDischargeSummaryById(id);
}
@Override
public List<ChargeDischargeSummary> selectChargeDischargeSummaryList(ChargeDischargeSummary summary) {
return chargeDischargeSummaryMapper.selectChargeDischargeSummaryList(summary);
}
@Override
public int insertChargeDischargeSummary(ChargeDischargeSummary summary) {
summary.setCreateTime(DateUtils.getNowDate());
return chargeDischargeSummaryMapper.insertChargeDischargeSummary(summary);
}
@Override
public int updateChargeDischargeSummary(ChargeDischargeSummary summary) {
summary.setUpdateTime(DateUtils.getNowDate());
return chargeDischargeSummaryMapper.updateChargeDischargeSummary(summary);
}
@Override
public int deleteChargeDischargeSummaryByIds(Long[] ids) {
return chargeDischargeSummaryMapper.deleteChargeDischargeSummaryByIds(ids);
}
@Override
public int deleteChargeDischargeSummaryById(Long id) {
return chargeDischargeSummaryMapper.deleteChargeDischargeSummaryById(id);
}
}

View File

@ -1,104 +0,0 @@
package com.evobms.project.VehicleData.service.impl;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.evobms.project.VehicleData.mapper.VehicleDataMapper;
import com.evobms.project.VehicleData.domain.VehicleData;
import com.evobms.project.VehicleData.service.IVehicleDataService;
/**
* 整车数据Service业务层处理
*
* @author 田志阳
* @date 2025-11-15
*/
@Service
public class VehicleDataServiceImpl implements IVehicleDataService
{
@Autowired
private VehicleDataMapper vehicleDataMapper;
/**
* 查询整车数据
*
* @param id 整车数据主键
* @return 整车数据
*/
@Override
public VehicleData selectVehicleDataById(Long id)
{
return vehicleDataMapper.selectVehicleDataById(id);
}
/**
* 查询整车数据列表
*
* @param vehicleData 整车数据
* @return 整车数据
*/
@Override
public List<VehicleData> selectVehicleDataList(VehicleData vehicleData)
{
return vehicleDataMapper.selectVehicleDataList(vehicleData);
}
/**
* 新增整车数据
*
* @param vehicleData 整车数据
* @return 结果
*/
@Override
public int insertVehicleData(VehicleData vehicleData)
{
return vehicleDataMapper.insertVehicleData(vehicleData);
}
/**
* 修改整车数据
*
* @param vehicleData 整车数据
* @return 结果
*/
@Override
public int updateVehicleData(VehicleData vehicleData)
{
return vehicleDataMapper.updateVehicleData(vehicleData);
}
/**
* 批量删除整车数据
*
* @param ids 需要删除的整车数据主键
* @return 结果
*/
@Override
public int deleteVehicleDataByIds(Long[] ids)
{
return vehicleDataMapper.deleteVehicleDataByIds(ids);
}
/**
* 删除整车数据信息
*
* @param id 整车数据主键
* @return 结果
*/
@Override
public int deleteVehicleDataById(Long id)
{
return vehicleDataMapper.deleteVehicleDataById(id);
}
@Override
public List<VehicleData> selectByDeviceAndStartTime(String deviceId, Date startTime) {
return vehicleDataMapper.selectByDeviceAndStartTime(deviceId, startTime);
}
@Override
public VehicleData selectLatestByDeviceId(String deviceId) {
return vehicleDataMapper.selectLatestByDeviceId(deviceId);
}
}

View File

@ -1,105 +0,0 @@
package com.evobms.project.VehicleData.service.impl;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evobms.project.VehicleData.mapper.VehicleLocationMapper;
import com.evobms.project.VehicleData.domain.VehicleLocation;
import com.evobms.project.VehicleData.service.IVehicleLocationService;
/**
* 车辆位置数据Service业务层处理
*
* @author ruoyi
* @date 2025-11-15
*/
@Service
public class VehicleLocationServiceImpl implements IVehicleLocationService
{
@Autowired
private VehicleLocationMapper vehicleLocationMapper;
/**
* 查询车辆位置数据
*
* @param id 车辆位置数据主键
* @return 车辆位置数据
*/
@Override
public VehicleLocation selectVehicleLocationById(Long id)
{
return vehicleLocationMapper.selectVehicleLocationById(id);
}
/**
* 查询车辆位置数据列表
*
* @param vehicleLocation 车辆位置数据
* @return 车辆位置数据
*/
@Override
public List<VehicleLocation> selectVehicleLocationList(VehicleLocation vehicleLocation)
{
return vehicleLocationMapper.selectVehicleLocationList(vehicleLocation);
}
/**
* 新增车辆位置数据
*
* @param vehicleLocation 车辆位置数据
* @return 结果
*/
@Override
public int insertVehicleLocation(VehicleLocation vehicleLocation)
{
return vehicleLocationMapper.insertVehicleLocation(vehicleLocation);
}
/**
* 修改车辆位置数据
*
* @param vehicleLocation 车辆位置数据
* @return 结果
*/
@Override
public int updateVehicleLocation(VehicleLocation vehicleLocation)
{
return vehicleLocationMapper.updateVehicleLocation(vehicleLocation);
}
/**
* 批量删除车辆位置数据
*
* @param ids 需要删除的车辆位置数据主键
* @return 结果
*/
@Override
public int deleteVehicleLocationByIds(Long[] ids)
{
return vehicleLocationMapper.deleteVehicleLocationByIds(ids);
}
/**
* 删除车辆位置数据信息
*
* @param id 车辆位置数据主键
* @return 结果
*/
@Override
public int deleteVehicleLocationById(Long id)
{
return vehicleLocationMapper.deleteVehicleLocationById(id);
}
@Override
public VehicleLocation selectLatestByDeviceId(String deviceId) {
return vehicleLocationMapper.selectLatestByDeviceId(deviceId);
}
@Override
public List<VehicleLocation> selectByDeviceAndRange(String deviceId, Date start, Date end, Integer limit) {
return vehicleLocationMapper.selectByDeviceAndRange(deviceId, start, end, limit);
}
}

View File

@ -1,4 +1,4 @@
package com.evobms.project.Battery.controller;
package com.evobms.project.battery.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evobms.framework.aspectj.lang.annotation.Log;
import com.evobms.framework.aspectj.lang.enums.BusinessType;
import com.evobms.project.Battery.domain.ExtremeValues;
import com.evobms.project.Battery.service.IExtremeValuesService;
import com.evobms.project.battery.domain.ExtremeValues;
import com.evobms.project.battery.service.IExtremeValuesService;
import com.evobms.framework.web.controller.BaseController;
import com.evobms.framework.web.domain.AjaxResult;
import com.evobms.common.utils.poi.ExcelUtil;
@ -23,7 +23,7 @@ import com.evobms.framework.web.page.TableDataInfo;
/**
* 电池极值数据Controller
*
*
* @author 田志阳
* @date 2025-10-14
*/

View File

@ -1,4 +1,4 @@
package com.evobms.project.Battery.controller;
package com.evobms.project.battery.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evobms.framework.aspectj.lang.annotation.Log;
import com.evobms.framework.aspectj.lang.enums.BusinessType;
import com.evobms.project.Battery.domain.SubsystemTemperature;
import com.evobms.project.Battery.service.ISubsystemTemperatureService;
import com.evobms.project.battery.domain.SubsystemTemperature;
import com.evobms.project.battery.service.ISubsystemTemperatureService;
import com.evobms.framework.web.controller.BaseController;
import com.evobms.framework.web.domain.AjaxResult;
import com.evobms.common.utils.poi.ExcelUtil;
@ -23,7 +23,7 @@ import com.evobms.framework.web.page.TableDataInfo;
/**
* 可充电储能子系统温度信息Controller
*
*
* @author 田志阳
* @date 2025-11-15
*/

View File

@ -1,4 +1,4 @@
package com.evobms.project.Battery.controller;
package com.evobms.project.battery.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evobms.framework.aspectj.lang.annotation.Log;
import com.evobms.framework.aspectj.lang.enums.BusinessType;
import com.evobms.project.Battery.domain.SubsystemVoltage;
import com.evobms.project.Battery.service.ISubsystemVoltageService;
import com.evobms.project.battery.domain.SubsystemVoltage;
import com.evobms.project.battery.service.ISubsystemVoltageService;
import com.evobms.framework.web.controller.BaseController;
import com.evobms.framework.web.domain.AjaxResult;
import com.evobms.common.utils.poi.ExcelUtil;
@ -23,7 +23,7 @@ import com.evobms.framework.web.page.TableDataInfo;
/**
* 可充电储能子系统电压信息Controller
*
*
* @author 田志阳
* @date 2025-11-15
*/

View File

@ -1,4 +1,4 @@
package com.evobms.project.Battery.domain;
package com.evobms.project.battery.domain;
import java.math.BigDecimal;
import java.util.Date;
@ -10,7 +10,7 @@ import com.evobms.framework.web.domain.BaseEntity;
/**
* 电池极值数据对象 extreme_values
*
*
* @author 田志阳
* @date 2025-10-14
*/
@ -26,8 +26,8 @@ public class ExtremeValues extends BaseEntity
private String deviceId;
/** 数据时间戳 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date timestamp;
/** 最高电压电池子系统号 */
@ -78,152 +78,152 @@ public class ExtremeValues extends BaseEntity
@Excel(name = "最低温度值(℃)")
private BigDecimal minTempValue;
public void setId(Long id)
public void setId(Long id)
{
this.id = id;
}
public Long getId()
public Long getId()
{
return id;
}
public void setDeviceId(String deviceId)
public void setDeviceId(String deviceId)
{
this.deviceId = deviceId;
}
public String getDeviceId()
public String getDeviceId()
{
return deviceId;
}
public void setTimestamp(Date timestamp)
public void setTimestamp(Date timestamp)
{
this.timestamp = timestamp;
}
public Date getTimestamp()
public Date getTimestamp()
{
return timestamp;
}
public void setMaxVoltageSubsystemNo(Integer maxVoltageSubsystemNo)
public void setMaxVoltageSubsystemNo(Integer maxVoltageSubsystemNo)
{
this.maxVoltageSubsystemNo = maxVoltageSubsystemNo;
}
public Integer getMaxVoltageSubsystemNo()
public Integer getMaxVoltageSubsystemNo()
{
return maxVoltageSubsystemNo;
}
public void setMaxVoltageBatteryNo(Integer maxVoltageBatteryNo)
public void setMaxVoltageBatteryNo(Integer maxVoltageBatteryNo)
{
this.maxVoltageBatteryNo = maxVoltageBatteryNo;
}
public Integer getMaxVoltageBatteryNo()
public Integer getMaxVoltageBatteryNo()
{
return maxVoltageBatteryNo;
}
public void setMaxVoltageValue(BigDecimal maxVoltageValue)
public void setMaxVoltageValue(BigDecimal maxVoltageValue)
{
this.maxVoltageValue = maxVoltageValue;
}
public BigDecimal getMaxVoltageValue()
public BigDecimal getMaxVoltageValue()
{
return maxVoltageValue;
}
public void setMinVoltageSubsystemNo(Integer minVoltageSubsystemNo)
public void setMinVoltageSubsystemNo(Integer minVoltageSubsystemNo)
{
this.minVoltageSubsystemNo = minVoltageSubsystemNo;
}
public Integer getMinVoltageSubsystemNo()
public Integer getMinVoltageSubsystemNo()
{
return minVoltageSubsystemNo;
}
public void setMinVoltageBatteryNo(Integer minVoltageBatteryNo)
public void setMinVoltageBatteryNo(Integer minVoltageBatteryNo)
{
this.minVoltageBatteryNo = minVoltageBatteryNo;
}
public Integer getMinVoltageBatteryNo()
public Integer getMinVoltageBatteryNo()
{
return minVoltageBatteryNo;
}
public void setMinVoltageValue(BigDecimal minVoltageValue)
public void setMinVoltageValue(BigDecimal minVoltageValue)
{
this.minVoltageValue = minVoltageValue;
}
public BigDecimal getMinVoltageValue()
public BigDecimal getMinVoltageValue()
{
return minVoltageValue;
}
public void setMaxTempSubsystemNo(Integer maxTempSubsystemNo)
public void setMaxTempSubsystemNo(Integer maxTempSubsystemNo)
{
this.maxTempSubsystemNo = maxTempSubsystemNo;
}
public Integer getMaxTempSubsystemNo()
public Integer getMaxTempSubsystemNo()
{
return maxTempSubsystemNo;
}
public void setMaxTempProbeNo(Integer maxTempProbeNo)
public void setMaxTempProbeNo(Integer maxTempProbeNo)
{
this.maxTempProbeNo = maxTempProbeNo;
}
public Integer getMaxTempProbeNo()
public Integer getMaxTempProbeNo()
{
return maxTempProbeNo;
}
public void setMaxTempValue(BigDecimal maxTempValue)
public void setMaxTempValue(BigDecimal maxTempValue)
{
this.maxTempValue = maxTempValue;
}
public BigDecimal getMaxTempValue()
public BigDecimal getMaxTempValue()
{
return maxTempValue;
}
public void setMinTempSubsystemNo(Integer minTempSubsystemNo)
public void setMinTempSubsystemNo(Integer minTempSubsystemNo)
{
this.minTempSubsystemNo = minTempSubsystemNo;
}
public Integer getMinTempSubsystemNo()
public Integer getMinTempSubsystemNo()
{
return minTempSubsystemNo;
}
public void setMinTempProbeNo(Integer minTempProbeNo)
public void setMinTempProbeNo(Integer minTempProbeNo)
{
this.minTempProbeNo = minTempProbeNo;
}
public Integer getMinTempProbeNo()
public Integer getMinTempProbeNo()
{
return minTempProbeNo;
}
public void setMinTempValue(BigDecimal minTempValue)
public void setMinTempValue(BigDecimal minTempValue)
{
this.minTempValue = minTempValue;
}
public BigDecimal getMinTempValue()
public BigDecimal getMinTempValue()
{
return minTempValue;
}

View File

@ -1,10 +1,8 @@
package com.evobms.project.Battery.domain;
package com.evobms.project.battery.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.evobms.framework.aspectj.lang.annotation.Excel;
import com.evobms.framework.web.domain.BaseEntity;
@ -27,8 +25,8 @@ public class SubsystemTemperature extends BaseEntity
private String deviceId;
/** 数据时间戳 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date timestamp;
/** 可充电储能子系统个数 */

View File

@ -0,0 +1,77 @@
package com.evobms.project.battery.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.evobms.framework.aspectj.lang.annotation.Excel;
import com.evobms.framework.web.domain.BaseEntity;
/**
* 可充电储能子系统电压信息对象 subsystem_voltage
*
* @author 田志阳
* @date 2025-11-15
*/
@Data
public class SubsystemVoltage extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键ID */
private Long id;
/** 设备ID */
@Excel(name = "设备ID")
private String deviceId;
/** 数据时间戳 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date timestamp;
/** 可充电储能子系统个数 */
@Excel(name = "可充电储能子系统个数")
private Integer subsystemCount;
/** 可充电储能子系统号 */
@Excel(name = "可充电储能子系统号")
private Integer subsystemNo;
/** 可充电储能装置电压(V) */
@Excel(name = "可充电储能装置电压(V)")
private BigDecimal subsystemVoltage;
/** 可充电储能装置电流(A) */
@Excel(name = "可充电储能装置电流(A)")
private BigDecimal subsystemCurrent;
/** 单体电池总数 */
@Excel(name = "单体电池总数")
private Integer totalBatteryCount;
/** 本帧起始电池序号 */
@Excel(name = "本帧起始电池序号")
private Integer frameStartBatteryNo;
/** 本帧单体电池总数 */
@Excel(name = "本帧单体电池总数")
private Integer frameBatteryCount;
/** 单体电池电压数组(V) */
@Excel(name = "单体电池电压数组(V)")
private String batteryVoltages;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date createTime;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date updateTime;
}

View File

@ -1,21 +1,22 @@
package com.evobms.project.Battery.mapper;
package com.evobms.project.battery.mapper;
import java.util.List;
import com.evobms.project.Battery.domain.ExtremeValues;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evobms.project.battery.domain.ExtremeValues;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
/**
* 电池极值数据Mapper接口
*
*
* @author 田志阳
* @date 2025-10-14
*/
public interface ExtremeValuesMapper
{
public interface ExtremeValuesMapper extends BaseMapper<ExtremeValues> {
/**
* 查询电池极值数据
*
*
* @param id 电池极值数据主键
* @return 电池极值数据
*/
@ -23,7 +24,7 @@ public interface ExtremeValuesMapper
/**
* 查询电池极值数据列表
*
*
* @param extremeValues 电池极值数据
* @return 电池极值数据集合
*/
@ -31,7 +32,7 @@ public interface ExtremeValuesMapper
/**
* 新增电池极值数据
*
*
* @param extremeValues 电池极值数据
* @return 结果
*/
@ -39,7 +40,7 @@ public interface ExtremeValuesMapper
/**
* 修改电池极值数据
*
*
* @param extremeValues 电池极值数据
* @return 结果
*/
@ -47,7 +48,7 @@ public interface ExtremeValuesMapper
/**
* 删除电池极值数据
*
*
* @param id 电池极值数据主键
* @return 结果
*/
@ -55,7 +56,7 @@ public interface ExtremeValuesMapper
/**
* 批量删除电池极值数据
*
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/

View File

@ -1,13 +1,13 @@
package com.evobms.project.Battery.mapper;
package com.evobms.project.battery.mapper;
import java.util.List;
import com.evobms.project.Battery.domain.SubsystemTemperature;
import com.evobms.project.battery.domain.SubsystemTemperature;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* 可充电储能子系统温度信息Mapper接口
*
*
* @author 田志阳
* @date 2025-11-15
*/
@ -15,7 +15,7 @@ public interface SubsystemTemperatureMapper extends BaseMapper<SubsystemTemperat
{
/**
* 查询可充电储能子系统温度信息
*
*
* @param id 可充电储能子系统温度信息主键
* @return 可充电储能子系统温度信息
*/
@ -23,7 +23,7 @@ public interface SubsystemTemperatureMapper extends BaseMapper<SubsystemTemperat
/**
* 查询可充电储能子系统温度信息列表
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 可充电储能子系统温度信息集合
*/
@ -31,7 +31,7 @@ public interface SubsystemTemperatureMapper extends BaseMapper<SubsystemTemperat
/**
* 新增可充电储能子系统温度信息
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 结果
*/
@ -39,7 +39,7 @@ public interface SubsystemTemperatureMapper extends BaseMapper<SubsystemTemperat
/**
* 修改可充电储能子系统温度信息
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 结果
*/
@ -47,7 +47,7 @@ public interface SubsystemTemperatureMapper extends BaseMapper<SubsystemTemperat
/**
* 删除可充电储能子系统温度信息
*
*
* @param id 可充电储能子系统温度信息主键
* @return 结果
*/
@ -55,7 +55,7 @@ public interface SubsystemTemperatureMapper extends BaseMapper<SubsystemTemperat
/**
* 批量删除可充电储能子系统温度信息
*
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/

View File

@ -1,13 +1,13 @@
package com.evobms.project.Battery.mapper;
package com.evobms.project.battery.mapper;
import java.util.List;
import com.evobms.project.Battery.domain.SubsystemVoltage;
import com.evobms.project.battery.domain.SubsystemVoltage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* 可充电储能子系统电压信息Mapper接口
*
*
* @author 田志阳
* @date 2025-11-15
*/
@ -15,7 +15,7 @@ public interface SubsystemVoltageMapper extends BaseMapper<SubsystemVoltage>
{
/**
* 查询可充电储能子系统电压信息
*
*
* @param id 可充电储能子系统电压信息主键
* @return 可充电储能子系统电压信息
*/
@ -23,7 +23,7 @@ public interface SubsystemVoltageMapper extends BaseMapper<SubsystemVoltage>
/**
* 查询可充电储能子系统电压信息列表
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 可充电储能子系统电压信息集合
*/
@ -31,7 +31,7 @@ public interface SubsystemVoltageMapper extends BaseMapper<SubsystemVoltage>
/**
* 新增可充电储能子系统电压信息
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 结果
*/
@ -39,7 +39,7 @@ public interface SubsystemVoltageMapper extends BaseMapper<SubsystemVoltage>
/**
* 修改可充电储能子系统电压信息
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 结果
*/
@ -47,7 +47,7 @@ public interface SubsystemVoltageMapper extends BaseMapper<SubsystemVoltage>
/**
* 删除可充电储能子系统电压信息
*
*
* @param id 可充电储能子系统电压信息主键
* @return 结果
*/
@ -55,7 +55,7 @@ public interface SubsystemVoltageMapper extends BaseMapper<SubsystemVoltage>
/**
* 批量删除可充电储能子系统电压信息
*
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/

View File

@ -1,19 +1,19 @@
package com.evobms.project.Battery.service;
package com.evobms.project.battery.service;
import java.util.List;
import com.evobms.project.Battery.domain.ExtremeValues;
import com.evobms.project.battery.domain.ExtremeValues;
/**
* 电池极值数据Service接口
*
*
* @author 田志阳
* @date 2025-10-14
*/
public interface IExtremeValuesService
public interface IExtremeValuesService
{
/**
* 查询电池极值数据
*
*
* @param id 电池极值数据主键
* @return 电池极值数据
*/
@ -21,7 +21,7 @@ public interface IExtremeValuesService
/**
* 查询电池极值数据列表
*
*
* @param extremeValues 电池极值数据
* @return 电池极值数据集合
*/
@ -29,7 +29,7 @@ public interface IExtremeValuesService
/**
* 新增电池极值数据
*
*
* @param extremeValues 电池极值数据
* @return 结果
*/
@ -37,7 +37,7 @@ public interface IExtremeValuesService
/**
* 修改电池极值数据
*
*
* @param extremeValues 电池极值数据
* @return 结果
*/
@ -45,7 +45,7 @@ public interface IExtremeValuesService
/**
* 批量删除电池极值数据
*
*
* @param ids 需要删除的电池极值数据主键集合
* @return 结果
*/
@ -53,7 +53,7 @@ public interface IExtremeValuesService
/**
* 删除电池极值数据信息
*
*
* @param id 电池极值数据主键
* @return 结果
*/

View File

@ -1,19 +1,19 @@
package com.evobms.project.Battery.service;
package com.evobms.project.battery.service;
import java.util.List;
import com.evobms.project.Battery.domain.SubsystemTemperature;
import com.evobms.project.battery.domain.SubsystemTemperature;
/**
* 可充电储能子系统温度信息Service接口
*
*
* @author 田志阳
* @date 2025-11-15
*/
public interface ISubsystemTemperatureService
public interface ISubsystemTemperatureService
{
/**
* 查询可充电储能子系统温度信息
*
*
* @param id 可充电储能子系统温度信息主键
* @return 可充电储能子系统温度信息
*/
@ -21,7 +21,7 @@ public interface ISubsystemTemperatureService
/**
* 查询可充电储能子系统温度信息列表
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 可充电储能子系统温度信息集合
*/
@ -29,7 +29,7 @@ public interface ISubsystemTemperatureService
/**
* 新增可充电储能子系统温度信息
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 结果
*/
@ -37,7 +37,7 @@ public interface ISubsystemTemperatureService
/**
* 修改可充电储能子系统温度信息
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 结果
*/
@ -45,7 +45,7 @@ public interface ISubsystemTemperatureService
/**
* 批量删除可充电储能子系统温度信息
*
*
* @param ids 需要删除的可充电储能子系统温度信息主键集合
* @return 结果
*/
@ -53,7 +53,7 @@ public interface ISubsystemTemperatureService
/**
* 删除可充电储能子系统温度信息信息
*
*
* @param id 可充电储能子系统温度信息主键
* @return 结果
*/

View File

@ -1,19 +1,19 @@
package com.evobms.project.Battery.service;
package com.evobms.project.battery.service;
import java.util.List;
import com.evobms.project.Battery.domain.SubsystemVoltage;
import com.evobms.project.battery.domain.SubsystemVoltage;
/**
* 可充电储能子系统电压信息Service接口
*
*
* @author 田志阳
* @date 2025-11-15
*/
public interface ISubsystemVoltageService
public interface ISubsystemVoltageService
{
/**
* 查询可充电储能子系统电压信息
*
*
* @param id 可充电储能子系统电压信息主键
* @return 可充电储能子系统电压信息
*/
@ -21,7 +21,7 @@ public interface ISubsystemVoltageService
/**
* 查询可充电储能子系统电压信息列表
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 可充电储能子系统电压信息集合
*/
@ -29,7 +29,7 @@ public interface ISubsystemVoltageService
/**
* 新增可充电储能子系统电压信息
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 结果
*/
@ -37,7 +37,7 @@ public interface ISubsystemVoltageService
/**
* 修改可充电储能子系统电压信息
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 结果
*/
@ -45,7 +45,7 @@ public interface ISubsystemVoltageService
/**
* 批量删除可充电储能子系统电压信息
*
*
* @param ids 需要删除的可充电储能子系统电压信息主键集合
* @return 结果
*/
@ -53,7 +53,7 @@ public interface ISubsystemVoltageService
/**
* 删除可充电储能子系统电压信息信息
*
*
* @param id 可充电储能子系统电压信息主键
* @return 结果
*/

View File

@ -1,28 +1,30 @@
package com.evobms.project.Battery.service.impl;
package com.evobms.project.battery.service.impl;
import java.util.List;
import com.evobms.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.evobms.project.Battery.mapper.ExtremeValuesMapper;
import com.evobms.project.Battery.domain.ExtremeValues;
import com.evobms.project.Battery.service.IExtremeValuesService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evobms.project.battery.mapper.ExtremeValuesMapper;
import com.evobms.project.battery.domain.ExtremeValues;
import com.evobms.project.battery.service.IExtremeValuesService;
/**
* 电池极值数据Service业务层处理
*
*
* @author 田志阳
* @date 2025-10-14
*/
@Service
public class ExtremeValuesServiceImpl implements IExtremeValuesService
public class ExtremeValuesServiceImpl extends ServiceImpl<ExtremeValuesMapper, ExtremeValues> implements IExtremeValuesService
{
@Autowired
private ExtremeValuesMapper extremeValuesMapper;
/**
* 查询电池极值数据
*
*
* @param id 电池极值数据主键
* @return 电池极值数据
*/
@ -34,19 +36,40 @@ public class ExtremeValuesServiceImpl implements IExtremeValuesService
/**
* 查询电池极值数据列表
*
*
* @param extremeValues 电池极值数据
* @return 电池极值数据
*/
@Override
public List<ExtremeValues> selectExtremeValuesList(ExtremeValues extremeValues)
{
return extremeValuesMapper.selectExtremeValuesList(extremeValues);
LambdaQueryWrapper<ExtremeValues> qw = new LambdaQueryWrapper<>();
if (extremeValues != null) {
if (extremeValues.getDeviceId() != null && !extremeValues.getDeviceId().isEmpty()) {
qw.eq(ExtremeValues::getDeviceId, extremeValues.getDeviceId());
}
if (extremeValues.getTimestamp() != null) {
qw.ge(ExtremeValues::getTimestamp, extremeValues.getTimestamp());
}
java.util.Map<String, Object> params = extremeValues.getParams();
if (params != null) {
java.util.Date begin = com.evobms.common.utils.DateUtils.parseDate(params.get("beginTime"));
java.util.Date end = com.evobms.common.utils.DateUtils.parseDate(params.get("endTime"));
if (begin != null) {
qw.ge(ExtremeValues::getTimestamp, begin);
}
if (end != null) {
qw.le(ExtremeValues::getTimestamp, end);
}
}
}
qw.orderByDesc(ExtremeValues::getTimestamp);
return extremeValuesMapper.selectList(qw);
}
/**
* 新增电池极值数据
*
*
* @param extremeValues 电池极值数据
* @return 结果
*/
@ -59,7 +82,7 @@ public class ExtremeValuesServiceImpl implements IExtremeValuesService
/**
* 修改电池极值数据
*
*
* @param extremeValues 电池极值数据
* @return 结果
*/
@ -72,7 +95,7 @@ public class ExtremeValuesServiceImpl implements IExtremeValuesService
/**
* 批量删除电池极值数据
*
*
* @param ids 需要删除的电池极值数据主键
* @return 结果
*/
@ -84,7 +107,7 @@ public class ExtremeValuesServiceImpl implements IExtremeValuesService
/**
* 删除电池极值数据信息
*
*
* @param id 电池极值数据主键
* @return 结果
*/

View File

@ -1,28 +1,29 @@
package com.evobms.project.Battery.service.impl;
package com.evobms.project.battery.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evobms.project.Battery.mapper.SubsystemTemperatureMapper;
import com.evobms.project.Battery.domain.SubsystemTemperature;
import com.evobms.project.Battery.service.ISubsystemTemperatureService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evobms.project.battery.mapper.SubsystemTemperatureMapper;
import com.evobms.project.battery.domain.SubsystemTemperature;
import com.evobms.project.battery.service.ISubsystemTemperatureService;
/**
* 可充电储能子系统温度信息Service业务层处理
*
*
* @author 田志阳
* @date 2025-11-15
*/
@Service
public class SubsystemTemperatureServiceImpl implements ISubsystemTemperatureService
public class SubsystemTemperatureServiceImpl extends ServiceImpl<SubsystemTemperatureMapper, SubsystemTemperature> implements ISubsystemTemperatureService
{
@Autowired
private SubsystemTemperatureMapper subsystemTemperatureMapper;
/**
* 查询可充电储能子系统温度信息
*
*
* @param id 可充电储能子系统温度信息主键
* @return 可充电储能子系统温度信息
*/
@ -34,19 +35,40 @@ public class SubsystemTemperatureServiceImpl implements ISubsystemTemperatureSer
/**
* 查询可充电储能子系统温度信息列表
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 可充电储能子系统温度信息
*/
@Override
public List<SubsystemTemperature> selectSubsystemTemperatureList(SubsystemTemperature subsystemTemperature)
{
return subsystemTemperatureMapper.selectSubsystemTemperatureList(subsystemTemperature);
LambdaQueryWrapper<SubsystemTemperature> qw = new LambdaQueryWrapper<>();
if (subsystemTemperature != null) {
if (subsystemTemperature.getDeviceId() != null && !subsystemTemperature.getDeviceId().isEmpty()) {
qw.eq(SubsystemTemperature::getDeviceId, subsystemTemperature.getDeviceId());
}
if (subsystemTemperature.getTimestamp() != null) {
qw.ge(SubsystemTemperature::getTimestamp, subsystemTemperature.getTimestamp());
}
java.util.Map<String, Object> params = subsystemTemperature.getParams();
if (params != null) {
java.util.Date begin = com.evobms.common.utils.DateUtils.parseDate(params.get("beginTime"));
java.util.Date end = com.evobms.common.utils.DateUtils.parseDate(params.get("endTime"));
if (begin != null) {
qw.ge(SubsystemTemperature::getTimestamp, begin);
}
if (end != null) {
qw.le(SubsystemTemperature::getTimestamp, end);
}
}
}
qw.orderByDesc(SubsystemTemperature::getTimestamp);
return subsystemTemperatureMapper.selectList(qw);
}
/**
* 新增可充电储能子系统温度信息
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 结果
*/
@ -58,7 +80,7 @@ public class SubsystemTemperatureServiceImpl implements ISubsystemTemperatureSer
/**
* 修改可充电储能子系统温度信息
*
*
* @param subsystemTemperature 可充电储能子系统温度信息
* @return 结果
*/
@ -70,7 +92,7 @@ public class SubsystemTemperatureServiceImpl implements ISubsystemTemperatureSer
/**
* 批量删除可充电储能子系统温度信息
*
*
* @param ids 需要删除的可充电储能子系统温度信息主键
* @return 结果
*/
@ -82,7 +104,7 @@ public class SubsystemTemperatureServiceImpl implements ISubsystemTemperatureSer
/**
* 删除可充电储能子系统温度信息信息
*
*
* @param id 可充电储能子系统温度信息主键
* @return 结果
*/

View File

@ -1,28 +1,29 @@
package com.evobms.project.Battery.service.impl;
package com.evobms.project.battery.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evobms.project.Battery.mapper.SubsystemVoltageMapper;
import com.evobms.project.Battery.domain.SubsystemVoltage;
import com.evobms.project.Battery.service.ISubsystemVoltageService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evobms.project.battery.mapper.SubsystemVoltageMapper;
import com.evobms.project.battery.domain.SubsystemVoltage;
import com.evobms.project.battery.service.ISubsystemVoltageService;
/**
* 可充电储能子系统电压信息Service业务层处理
*
*
* @author 田志阳
* @date 2025-11-15
*/
@Service
public class SubsystemVoltageServiceImpl implements ISubsystemVoltageService
public class SubsystemVoltageServiceImpl extends ServiceImpl<SubsystemVoltageMapper, SubsystemVoltage> implements ISubsystemVoltageService
{
@Autowired
private SubsystemVoltageMapper subsystemVoltageMapper;
/**
* 查询可充电储能子系统电压信息
*
*
* @param id 可充电储能子系统电压信息主键
* @return 可充电储能子系统电压信息
*/
@ -34,19 +35,40 @@ public class SubsystemVoltageServiceImpl implements ISubsystemVoltageService
/**
* 查询可充电储能子系统电压信息列表
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 可充电储能子系统电压信息
*/
@Override
public List<SubsystemVoltage> selectSubsystemVoltageList(SubsystemVoltage subsystemVoltage)
{
return subsystemVoltageMapper.selectSubsystemVoltageList(subsystemVoltage);
LambdaQueryWrapper<SubsystemVoltage> qw = new LambdaQueryWrapper<>();
if (subsystemVoltage != null) {
if (subsystemVoltage.getDeviceId() != null && !subsystemVoltage.getDeviceId().isEmpty()) {
qw.eq(SubsystemVoltage::getDeviceId, subsystemVoltage.getDeviceId());
}
if (subsystemVoltage.getTimestamp() != null) {
qw.ge(SubsystemVoltage::getTimestamp, subsystemVoltage.getTimestamp());
}
java.util.Map<String, Object> params = subsystemVoltage.getParams();
if (params != null) {
java.util.Date begin = com.evobms.common.utils.DateUtils.parseDate(params.get("beginTime"));
java.util.Date end = com.evobms.common.utils.DateUtils.parseDate(params.get("endTime"));
if (begin != null) {
qw.ge(SubsystemVoltage::getTimestamp, begin);
}
if (end != null) {
qw.le(SubsystemVoltage::getTimestamp, end);
}
}
}
qw.orderByDesc(SubsystemVoltage::getTimestamp);
return subsystemVoltageMapper.selectList(qw);
}
/**
* 新增可充电储能子系统电压信息
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 结果
*/
@ -58,7 +80,7 @@ public class SubsystemVoltageServiceImpl implements ISubsystemVoltageService
/**
* 修改可充电储能子系统电压信息
*
*
* @param subsystemVoltage 可充电储能子系统电压信息
* @return 结果
*/
@ -70,7 +92,7 @@ public class SubsystemVoltageServiceImpl implements ISubsystemVoltageService
/**
* 批量删除可充电储能子系统电压信息
*
*
* @param ids 需要删除的可充电储能子系统电压信息主键
* @return 结果
*/
@ -82,7 +104,7 @@ public class SubsystemVoltageServiceImpl implements ISubsystemVoltageService
/**
* 删除可充电储能子系统电压信息信息
*
*
* @param id 可充电储能子系统电压信息主键
* @return 结果
*/

View File

@ -1,196 +0,0 @@
package com.evobms.project.bms.controller;
import com.evobms.framework.aspectj.lang.annotation.Log;
import com.evobms.framework.aspectj.lang.enums.BusinessType;
import com.evobms.framework.web.controller.BaseController;
import com.evobms.framework.web.domain.AjaxResult;
import com.evobms.framework.web.page.TableDataInfo;
import com.evobms.project.bms.domain.BmsDevice;
import com.evobms.project.bms.service.IBmsDeviceService;
//import com.evobms.project.bms.service.MqttService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* BMS设备Controller
*
* @author evobms
* @date 2025-01-22
*/
@RestController
@RequestMapping("/bms/device")
public class BmsDeviceController extends BaseController {
@Autowired
private IBmsDeviceService bmsDeviceService;
// @Autowired(required = false)
// private MqttService mqttService;
/**
* 查询BMS设备列表
*/
@PreAuthorize("@ss.hasPermi('bms:device:list')")
@GetMapping("/list")
public TableDataInfo list(BmsDevice bmsDevice) {
startPage();
List<BmsDevice> list = bmsDeviceService.selectBmsDeviceList(bmsDevice);
return getDataTable(list);
}
/**
* 获取BMS设备详细信息
*/
@PreAuthorize("@ss.hasPermi('bms:device:query')")
@GetMapping(value = "/{deviceId}")
public AjaxResult getInfo(@PathVariable("deviceId") Long deviceId) {
return success(bmsDeviceService.selectBmsDeviceByDeviceId(deviceId));
}
/**
* 新增BMS设备
*/
@PreAuthorize("@ss.hasPermi('bms:device:add')")
@Log(title = "BMS设备", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BmsDevice bmsDevice) {
return toAjax(bmsDeviceService.insertBmsDevice(bmsDevice));
}
/**
* 修改BMS设备
*/
@PreAuthorize("@ss.hasPermi('bms:device:edit')")
@Log(title = "BMS设备", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BmsDevice bmsDevice) {
return toAjax(bmsDeviceService.updateBmsDevice(bmsDevice));
}
/**
* 删除BMS设备
*/
@PreAuthorize("@ss.hasPermi('bms:device:remove')")
@Log(title = "BMS设备", businessType = BusinessType.DELETE)
@DeleteMapping("/{deviceIds}")
public AjaxResult remove(@PathVariable Long[] deviceIds) {
return toAjax(bmsDeviceService.deleteBmsDeviceByDeviceIds(deviceIds));
}
/**
* 批量更新设备状态
*/
@PreAuthorize("@ss.hasPermi('bms:device:edit')")
@Log(title = "BMS设备状态", businessType = BusinessType.UPDATE)
@PutMapping("/status")
public AjaxResult updateStatus(@RequestBody Map<String, Object> params) {
Long[] deviceIds = (Long[]) params.get("deviceIds");
String status = (String) params.get("status");
return toAjax(bmsDeviceService.updateBmsDeviceStatus(deviceIds, status));
}
// /**
// * 查询设备状态
// */
// @PreAuthorize("@ss.hasPermi('bms:device:query')")
// @PostMapping("/queryStatus/{deviceCode}")
// public AjaxResult queryDeviceStatus(@PathVariable String deviceCode) {
// if (mqttService != null) {
// mqttService.queryDeviceStatus(deviceCode);
// return success("设备状态查询命令已发送");
// } else {
// return error("MQTT服务未启用无法发送查询命令");
// }
// }
//
// /**
// * 重启设备
// */
// @PreAuthorize("@ss.hasPermi('bms:device:edit')")
// @Log(title = "重启BMS设备", businessType = BusinessType.UPDATE)
// @PostMapping("/restart/{deviceCode}")
// public AjaxResult restartDevice(@PathVariable String deviceCode) {
// if (mqttService != null) {
// mqttService.restartDevice(deviceCode);
// return success("设备重启命令已发送");
// } else {
// return error("MQTT服务未启用无法发送重启命令");
// }
// }
//
// /**
// * 配置设备参数
// */
// @PreAuthorize("@ss.hasPermi('bms:device:edit')")
// @Log(title = "配置BMS设备", businessType = BusinessType.UPDATE)
// @PostMapping("/config/{deviceCode}")
// public AjaxResult configDevice(@PathVariable String deviceCode, @RequestBody Map<String, Object> config) {
// if (mqttService != null) {
// mqttService.configDevice(deviceCode, config);
// return success("设备配置命令已发送");
// } else {
// return error("MQTT服务未启用无法发送配置命令");
// }
// }
//
// /**
// * 发送自定义MQTT消息
// */
// @PreAuthorize("@ss.hasPermi('bms:device:edit')")
// @Log(title = "发送MQTT消息", businessType = BusinessType.OTHER)
// @PostMapping("/mqtt/send")
// public AjaxResult sendMqttMessage(@RequestBody Map<String, String> params) {
// if (mqttService != null) {
// String topic = params.get("topic");
// String message = params.get("message");
// mqttService.sendMessage(topic, message);
// return success("MQTT消息已发送");
// } else {
// return error("MQTT服务未启用无法发送消息");
// }
// }
/**
* 获取设备统计信息
*/
@PreAuthorize("@ss.hasPermi('bms:device:list')")
@GetMapping("/statistics")
public AjaxResult getStatistics() {
Map<String, Object> statistics = new HashMap<>();
// 查询所有设备
List<BmsDevice> allDevices = bmsDeviceService.selectBmsDeviceList(new BmsDevice());
// 统计设备数量
long totalCount = allDevices.size();
long onlineCount = allDevices.stream().filter(device -> "0".equals(device.getStatus())).count();
long offlineCount = totalCount - onlineCount;
// 计算平均温度
double avgTemperature = allDevices.stream()
.filter(device -> device.getTemperature() != null)
.mapToDouble(BmsDevice::getTemperature)
.average()
.orElse(0.0);
// 计算平均剩余电量
double avgCapacity = allDevices.stream()
.filter(device -> device.getRemainingCapacity() != null)
.mapToDouble(BmsDevice::getRemainingCapacity)
.average()
.orElse(0.0);
statistics.put("totalCount", totalCount);
statistics.put("onlineCount", onlineCount);
statistics.put("offlineCount", offlineCount);
statistics.put("avgTemperature", Math.round(avgTemperature * 100.0) / 100.0);
statistics.put("avgCapacity", Math.round(avgCapacity * 100.0) / 100.0);
return success(statistics);
}
}

View File

@ -7,7 +7,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class GBT32960MqttReceiver {
private static final String BROKER = "tcp://61.182.73.218:1883";
private static final String BROKER = "tcp://localhost:1883";
private static final String CLIENT_ID = "evobms-client";
private static final String TOPIC = "/bbox/EVO0002/#";
private static final String DEVICE_SN = "EVO0002";

View File

@ -1,203 +0,0 @@
package com.evobms.project.bms.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.evobms.framework.aspectj.lang.annotation.Excel;
import com.evobms.framework.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
/**
* BMS设备对象 bms_device
*
* @author evobms
* @date 2025-01-22
*/
@TableName("bms_device")
public class BmsDevice extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 设备ID */
@TableId(type = IdType.AUTO)
private Long deviceId;
/** 设备编号 */
@Excel(name = "设备编号")
private String deviceCode;
/** 设备名称 */
@Excel(name = "设备名称")
private String deviceName;
/** 设备类型 */
@Excel(name = "设备类型")
private String deviceType;
/** 设备状态0正常 1停用 */
@Excel(name = "设备状态", readConverterExp = "0=正常,1=停用")
private String status;
/** 电池容量(Ah) */
@Excel(name = "电池容量")
private Double batteryCapacity;
/** 额定电压(V) */
@Excel(name = "额定电压")
private Double ratedVoltage;
/** 当前电压(V) */
private Double currentVoltage;
/** 当前电流(A) */
private Double currentCurrent;
/** 剩余电量(%) */
private Double remainingCapacity;
/** 温度(℃) */
private Double temperature;
/** 最后通信时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastCommTime;
/** 删除标志0代表存在 2代表删除 */
@TableLogic
private String delFlag;
/** 版本号(乐观锁) */
@Version
private Integer version;
public void setDeviceId(Long deviceId) {
this.deviceId = deviceId;
}
public Long getDeviceId() {
return deviceId;
}
public void setDeviceCode(String deviceCode) {
this.deviceCode = deviceCode;
}
public String getDeviceCode() {
return deviceCode;
}
public void setDeviceName(String deviceName) {
this.deviceName = deviceName;
}
public String getDeviceName() {
return deviceName;
}
public void setDeviceType(String deviceType) {
this.deviceType = deviceType;
}
public String getDeviceType() {
return deviceType;
}
public void setStatus(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public void setBatteryCapacity(Double batteryCapacity) {
this.batteryCapacity = batteryCapacity;
}
public Double getBatteryCapacity() {
return batteryCapacity;
}
public void setRatedVoltage(Double ratedVoltage) {
this.ratedVoltage = ratedVoltage;
}
public Double getRatedVoltage() {
return ratedVoltage;
}
public void setCurrentVoltage(Double currentVoltage) {
this.currentVoltage = currentVoltage;
}
public Double getCurrentVoltage() {
return currentVoltage;
}
public void setCurrentCurrent(Double currentCurrent) {
this.currentCurrent = currentCurrent;
}
public Double getCurrentCurrent() {
return currentCurrent;
}
public void setRemainingCapacity(Double remainingCapacity) {
this.remainingCapacity = remainingCapacity;
}
public Double getRemainingCapacity() {
return remainingCapacity;
}
public void setTemperature(Double temperature) {
this.temperature = temperature;
}
public Double getTemperature() {
return temperature;
}
public void setLastCommTime(Date lastCommTime) {
this.lastCommTime = lastCommTime;
}
public Date getLastCommTime() {
return lastCommTime;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getDelFlag() {
return delFlag;
}
public void setVersion(Integer version) {
this.version = version;
}
public Integer getVersion() {
return version;
}
@Override
public String toString() {
return "BmsDevice{" +
"deviceId=" + deviceId +
", deviceCode='" + deviceCode + '\'' +
", deviceName='" + deviceName + '\'' +
", deviceType='" + deviceType + '\'' +
", status='" + status + '\'' +
", batteryCapacity=" + batteryCapacity +
", ratedVoltage=" + ratedVoltage +
", currentVoltage=" + currentVoltage +
", currentCurrent=" + currentCurrent +
", remainingCapacity=" + remainingCapacity +
", temperature=" + temperature +
", lastCommTime=" + lastCommTime +
", delFlag='" + delFlag + '\'' +
", version=" + version +
'}';
}
}

View File

@ -1,43 +0,0 @@
package com.evobms.project.bms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evobms.project.bms.domain.BmsDevice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* BMS设备Mapper接口
*
* @author evobms
* @date 2025-01-22
*/
@Mapper
public interface BmsDeviceMapper extends BaseMapper<BmsDevice> {
/**
* 查询BMS设备列表
*
* @param bmsDevice BMS设备
* @return BMS设备集合
*/
List<BmsDevice> selectBmsDeviceList(BmsDevice bmsDevice);
/**
* 根据设备编号查询设备信息
*
* @param deviceCode 设备编号
* @return BMS设备
*/
BmsDevice selectBmsDeviceByCode(@Param("deviceCode") String deviceCode);
/**
* 批量更新设备状态
*
* @param deviceIds 设备ID数组
* @param status 状态
* @return 结果
*/
int updateBmsDeviceStatus(@Param("deviceIds") Long[] deviceIds, @Param("status") String status);
}

View File

@ -1,80 +0,0 @@
package com.evobms.project.bms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.evobms.project.bms.domain.BmsDevice;
import java.util.List;
/**
* BMS设备Service接口
*
* @author evobms
* @date 2025-01-22
*/
public interface IBmsDeviceService extends IService<BmsDevice> {
/**
* 查询BMS设备
*
* @param deviceId BMS设备主键
* @return BMS设备
*/
BmsDevice selectBmsDeviceByDeviceId(Long deviceId);
/**
* 查询BMS设备列表
*
* @param bmsDevice BMS设备
* @return BMS设备集合
*/
List<BmsDevice> selectBmsDeviceList(BmsDevice bmsDevice);
/**
* 新增BMS设备
*
* @param bmsDevice BMS设备
* @return 结果
*/
int insertBmsDevice(BmsDevice bmsDevice);
/**
* 修改BMS设备
*
* @param bmsDevice BMS设备
* @return 结果
*/
int updateBmsDevice(BmsDevice bmsDevice);
/**
* 批量删除BMS设备
*
* @param deviceIds 需要删除的BMS设备主键集合
* @return 结果
*/
int deleteBmsDeviceByDeviceIds(Long[] deviceIds);
/**
* 删除BMS设备信息
*
* @param deviceId BMS设备主键
* @return 结果
*/
int deleteBmsDeviceByDeviceId(Long deviceId);
/**
* 根据设备编号查询设备信息
*
* @param deviceCode 设备编号
* @return BMS设备
*/
BmsDevice selectBmsDeviceByCode(String deviceCode);
/**
* 批量更新设备状态
*
* @param deviceIds 设备ID数组
* @param status 状态
* @return 结果
*/
int updateBmsDeviceStatus(Long[] deviceIds, String status);
}

View File

@ -1,20 +1,20 @@
package com.evobms.project.bms.service;
import com.alibaba.fastjson2.JSON;
import com.evobms.project.Battery.domain.ExtremeValues;
import com.evobms.project.Battery.domain.SubsystemVoltage;
import com.evobms.project.Battery.domain.SubsystemTemperature;
import com.evobms.project.Battery.service.IExtremeValuesService;
import com.evobms.project.Battery.service.ISubsystemVoltageService;
import com.evobms.project.Battery.service.ISubsystemTemperatureService;
import com.evobms.project.Battery.domain.ChargeDischargeSummary;
import com.evobms.project.Battery.service.IChargeDischargeSummaryService;
import com.evobms.project.VehicleData.domain.VehicleData;
import com.evobms.project.VehicleData.domain.VehicleLocation;
import com.evobms.project.VehicleData.service.IVehicleDataService;
import com.evobms.project.VehicleData.service.IVehicleLocationService;
import com.evobms.project.bms.domain.BmsDevice;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import com.evobms.common.utils.DateUtils;
import com.evobms.project.battery.domain.ExtremeValues;
import com.evobms.project.battery.domain.SubsystemVoltage;
import com.evobms.project.battery.domain.SubsystemTemperature;
import com.evobms.project.battery.service.IExtremeValuesService;
import com.evobms.project.battery.service.ISubsystemVoltageService;
import com.evobms.project.battery.service.ISubsystemTemperatureService;
import com.evobms.project.summary.domain.ChargeDischargeSummary;
import com.evobms.project.summary.service.IChargeDischargeSummaryService;
import com.evobms.project.system.mapper.BmsDevicesMapper;
import com.evobms.project.vehicledata.domain.VehicleData;
import com.evobms.project.vehicledata.domain.VehicleLocation;
import com.evobms.project.vehicledata.service.IVehicleDataService;
import com.evobms.project.vehicledata.service.IVehicleLocationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@ -36,7 +36,6 @@ import com.evobms.project.system.service.IBmsDevicesService;
import com.evobms.project.system.domain.BmsDevices;
import static com.evobms.project.bms.controller.GBT32960FullDecoder.parseGBT32960Data;
import static oshi.util.ParseUtil.hexStringToByteArray;
/**
* MQTT服务类
@ -72,7 +71,8 @@ public class MqttService {
@Autowired
private IChargeDischargeSummaryService chargeDischargeSummaryService;
@Autowired
private BmsDevicesMapper bmsDevicesMapper;
@Value("${mqtt.publishTopic}")
private String publishTopic;
@ -184,7 +184,6 @@ public class MqttService {
/**
* 处理接收到的设备数据
*
* @param topic 主题
* @param message 消息内容
*/
@ -223,7 +222,6 @@ public class MqttService {
/**
* 逐字段解析数据字符串 - 直接解析十六进制数据
*
* @param data 十六进制数据字符串
* @param deviceSn 设备SN码
*/
@ -245,6 +243,10 @@ public class MqttService {
// 将十六进制字符串转换为字节数组
byte[] message = hexStringToByteArray(cleanData);
if (message.length >= 3 && (message[0] & 0xFF) == 0xAA && (message[1] & 0xFF) == 0x55 && (message[2] & 0xFF) == 0xA5) {
log.info("设备 {} 调试无效帧(AA 55 A5),跳过", deviceSn);
return;
}
// 按照协议索引逐段解析
parseByProtocolIndex(message, deviceSn);
@ -265,7 +267,7 @@ public class MqttService {
frameTime = new Date();
}
// 2. 整车数据 - 索引30-49 (20字节)
// 2. 整车数据 - 索引30-49 (20字节)
parseVehicleDataAtIndex(message, 6, deviceSn, frameTime);
// 3. 位置信息 - 索引51-60 (10字节)
@ -309,8 +311,7 @@ public class MqttService {
int second = message[startIndex + 5] & 0xFF; // 索引29:
if (isValidTime(year, month, day, hour, minute, second)) {
String time = String.format("%04d-%02d-%02d %02d:%02d:%02d",
year, month, day, hour, minute, second);
String time = String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
log.info("设备 {} - 时间: {}", deviceSn, time);
saveTimeData(deviceSn, time);
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
@ -318,8 +319,7 @@ public class MqttService {
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
} else {
log.info("设备 {} - 时间: 无效数据({}-{}-{} {}:{}:{})",
deviceSn, year, month, day, hour, minute, second);
log.info("设备 {} - 时间: 无效数据({}-{}-{} {}:{}:{})", deviceSn, year, month, day, hour, minute, second);
return null;
}
@ -830,14 +830,36 @@ public class MqttService {
* 保存时间数据
*/
private void saveTimeData(String deviceSn, String time) {
// TODO: 实现时间数据保存逻辑
log.debug("保存设备 {} 时间数据: {}", deviceSn, time);
try {
Date ts = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, time);
if (ts == null) {
log.warn("设备 {} 时间解析失败: {}", deviceSn, time);
return;
}
BmsDevices existing = bmsDevicesService.selectBmsDevicesBySn(deviceSn);
if (existing != null) {
existing.setLastOnline(ts);
existing.setStatus("online");
existing.setUpdateTime(new Date());
bmsDevicesMapper.updateBmsDevices(existing);
} else {
BmsDevices dev = new BmsDevices();
dev.setDeviceSn(deviceSn);
dev.setStatus("online");
dev.setLastOnline(ts);
dev.setCreateTime(new Date());
bmsDevicesMapper.insertBmsDevices(dev);
}
log.debug("保存设备 {} 时间数据: {}", deviceSn, time);
} catch (Exception e) {
log.error("保存设备 {} 时间数据失败: {}", deviceSn, e.getMessage(), e);
}
}
/**
* 保存整车数据
*/
private void saveVehicleData(String deviceSn, double voltage, double current, int soc, byte chargeStatus,int insulationResistance, Date frameTime) {
private void saveVehicleData(String deviceSn, double voltage, double current, int soc, byte chargeStatus, int insulationResistance, Date frameTime) {
// 保存整车数据到数据库
VehicleData ve = new VehicleData();
ve.setDeviceId(deviceSn);
@ -853,7 +875,7 @@ public class MqttService {
}
private void processLocationData(String deviceSn, double longitude, double latitude,String locationStatus, Date frameTime) {
private void processLocationData(String deviceSn, double longitude, double latitude, String locationStatus, Date frameTime) {
VehicleLocation ve = new VehicleLocation();
ve.setDeviceId(deviceSn);
ve.setTimestamp(frameTime);
@ -913,29 +935,6 @@ public class MqttService {
}
/**
* 更新设备数据
*
* @param device 设备对象
* @param data 数据
*/
private void updateDeviceData(BmsDevice device, Map<String, Object> data) {
if (data.containsKey("voltage")) {
device.setCurrentVoltage(Double.valueOf(data.get("voltage").toString()));
}
if (data.containsKey("current")) {
device.setCurrentCurrent(Double.valueOf(data.get("current").toString()));
}
if (data.containsKey("capacity")) {
device.setRemainingCapacity(Double.valueOf(data.get("capacity").toString()));
}
if (data.containsKey("temperature")) {
device.setTemperature(Double.valueOf(data.get("temperature").toString()));
}
device.setLastCommTime(new Date());
}
/**
* 发送设备状态查询命令
*

View File

@ -1,115 +0,0 @@
package com.evobms.project.bms.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evobms.common.utils.DateUtils;
import com.evobms.project.bms.domain.BmsDevice;
import com.evobms.project.bms.mapper.BmsDeviceMapper;
import com.evobms.project.bms.service.IBmsDeviceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* BMS设备Service业务层处理
*
* @author evobms
* @date 2025-01-22
*/
@Service
public class BmsDeviceServiceImpl extends ServiceImpl<BmsDeviceMapper, BmsDevice> implements IBmsDeviceService {
@Autowired
private BmsDeviceMapper bmsDeviceMapper;
/**
* 查询BMS设备
*
* @param deviceId BMS设备主键
* @return BMS设备
*/
@Override
public BmsDevice selectBmsDeviceByDeviceId(Long deviceId) {
return bmsDeviceMapper.selectById(deviceId);
}
/**
* 查询BMS设备列表
*
* @param bmsDevice BMS设备
* @return BMS设备
*/
@Override
public List<BmsDevice> selectBmsDeviceList(BmsDevice bmsDevice) {
return bmsDeviceMapper.selectBmsDeviceList(bmsDevice);
}
/**
* 新增BMS设备
*
* @param bmsDevice BMS设备
* @return 结果
*/
@Override
public int insertBmsDevice(BmsDevice bmsDevice) {
bmsDevice.setCreateTime(DateUtils.getNowDate());
return bmsDeviceMapper.insert(bmsDevice);
}
/**
* 修改BMS设备
*
* @param bmsDevice BMS设备
* @return 结果
*/
@Override
public int updateBmsDevice(BmsDevice bmsDevice) {
bmsDevice.setUpdateTime(DateUtils.getNowDate());
return bmsDeviceMapper.updateById(bmsDevice);
}
/**
* 批量删除BMS设备
*
* @param deviceIds 需要删除的BMS设备主键
* @return 结果
*/
@Override
public int deleteBmsDeviceByDeviceIds(Long[] deviceIds) {
return bmsDeviceMapper.deleteBatchIds(java.util.Arrays.asList(deviceIds));
}
/**
* 删除BMS设备信息
*
* @param deviceId BMS设备主键
* @return 结果
*/
@Override
public int deleteBmsDeviceByDeviceId(Long deviceId) {
return bmsDeviceMapper.deleteById(deviceId);
}
/**
* 根据设备编号查询设备信息
*
* @param deviceCode 设备编号
* @return BMS设备
*/
@Override
public BmsDevice selectBmsDeviceByCode(String deviceCode) {
return bmsDeviceMapper.selectBmsDeviceByCode(deviceCode);
}
/**
* 批量更新设备状态
*
* @param deviceIds 设备ID数组
* @param status 状态
* @return 结果
*/
@Override
public int updateBmsDeviceStatus(Long[] deviceIds, String status) {
return bmsDeviceMapper.updateBmsDeviceStatus(deviceIds, status);
}
}

View File

@ -65,7 +65,7 @@ public class IotAuthController {
@Value("${token.header:Authorization}")
private String tokenHeader;
@Value("${mqtt.host:tcp://localhost:1883}")
@Value("${mqtt.host:tcp://192.168.5.23:1883}")
private String mqttHostUri;
@Value("${mqtt.username:00000001}")
private String mqttUsername;
@ -79,7 +79,7 @@ public class IotAuthController {
private String otaCount;
// OTA文件存储位置支持 classpath 文件系统目录例如classpath:/ota /data/ota
@Value("${ota.repo:classpath:/ota}")
@Value("${ota.repo:D:/OTA}")
private String otaRepo;
// OTA分片大小字节规范为1KB=1024字节
@ -120,10 +120,8 @@ public class IotAuthController {
BmsDevices query = new BmsDevices();
// 依据设备上报的SN使用系统侧BmsDevices的deviceSn字段进行校验
query.setDeviceSn(sn);
List<BmsDevices> list = bmsDevicesService.selectBmsDevicesList(query);
if (list != null && !list.isEmpty()) {
device = list.get(0);
}
device = bmsDevicesService.selectBmsDevicesList1(query);
}
if (device == null) {
@ -185,7 +183,7 @@ public class IotAuthController {
}
// 解析 MQTT 主机与端口
String host = "61.182.73.218";
String host = "192.168.5.23";
int port = 1883;
try {
URI uri = new URI(mqttHostUri);
@ -215,7 +213,10 @@ public class IotAuthController {
if (sn.equals("EVO0001")) {
String key161 = fixLengthRight("EVO0001", 16);
encryptedBase64 = AesEcbPkcs5Utils.encryptToAscII16(json, key161);
} else {
} else if (sn.equals("EVO0002")) {
String key161 = fixLengthRight("EVO0002", 16);
encryptedBase64 = AesEcbPkcs5Utils.encryptToAscII16(json, key161);
}else {
String keyTail6 = sn.length() >= 16 ? sn.substring(sn.length() - 16) : sn;
encryptedBase64 = AesEcbPkcs5Utils.encryptToAscII16(json, keyTail6);
}
@ -288,10 +289,8 @@ public class IotAuthController {
if (bmsDevicesService != null) {
BmsDevices query = new BmsDevices();
query.setDeviceSn(sn);
List<BmsDevices> list = bmsDevicesService.selectBmsDevicesList(query);
if (list != null && !list.isEmpty()) {
device = list.get(0);
}
device = bmsDevicesService.selectBmsDevicesList1(query);
}
if (device == null) {

View File

@ -0,0 +1,104 @@
package com.evobms.project.summary.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evobms.framework.aspectj.lang.annotation.Log;
import com.evobms.framework.aspectj.lang.enums.BusinessType;
import com.evobms.project.summary.domain.ChargeDischargeSummary;
import com.evobms.project.summary.service.IChargeDischargeSummaryService;
import com.evobms.framework.web.controller.BaseController;
import com.evobms.framework.web.domain.AjaxResult;
import com.evobms.common.utils.poi.ExcelUtil;
import com.evobms.framework.web.page.TableDataInfo;
/**
* 累计充放电量Controller
*
* @author 田志阳
* @date 2026-01-09
*/
@RestController
@RequestMapping("/summary/summary")
public class ChargeDischargeSummaryController extends BaseController
{
@Autowired
private IChargeDischargeSummaryService chargeDischargeSummaryService;
/**
* 查询累计充放电量列表
*/
@PreAuthorize("@ss.hasPermi('summary:summary:list')")
@GetMapping("/list")
public TableDataInfo list(ChargeDischargeSummary chargeDischargeSummary)
{
startPage();
List<ChargeDischargeSummary> list = chargeDischargeSummaryService.selectChargeDischargeSummaryList(chargeDischargeSummary);
return getDataTable(list);
}
/**
* 导出累计充放电量列表
*/
@PreAuthorize("@ss.hasPermi('summary:summary:export')")
@Log(title = "累计充放电量", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ChargeDischargeSummary chargeDischargeSummary)
{
List<ChargeDischargeSummary> list = chargeDischargeSummaryService.selectChargeDischargeSummaryList(chargeDischargeSummary);
ExcelUtil<ChargeDischargeSummary> util = new ExcelUtil<ChargeDischargeSummary>(ChargeDischargeSummary.class);
util.exportExcel(response, list, "累计充放电量数据");
}
/**
* 获取累计充放电量详细信息
*/
@PreAuthorize("@ss.hasPermi('summary:summary:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(chargeDischargeSummaryService.selectChargeDischargeSummaryById(id));
}
/**
* 新增累计充放电量
*/
@PreAuthorize("@ss.hasPermi('summary:summary:add')")
@Log(title = "累计充放电量", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ChargeDischargeSummary chargeDischargeSummary)
{
return toAjax(chargeDischargeSummaryService.insertChargeDischargeSummary(chargeDischargeSummary));
}
/**
* 修改累计充放电量
*/
@PreAuthorize("@ss.hasPermi('summary:summary:edit')")
@Log(title = "累计充放电量", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ChargeDischargeSummary chargeDischargeSummary)
{
return toAjax(chargeDischargeSummaryService.updateChargeDischargeSummary(chargeDischargeSummary));
}
/**
* 删除累计充放电量
*/
@PreAuthorize("@ss.hasPermi('summary:summary:remove')")
@Log(title = "累计充放电量", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(chargeDischargeSummaryService.deleteChargeDischargeSummaryByIds(ids));
}
}

View File

@ -0,0 +1,105 @@
package com.evobms.project.summary.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.evobms.framework.aspectj.lang.annotation.Excel;
import com.evobms.framework.web.domain.BaseEntity;
/**
* 累计充放电量对象 charge_discharge_summary
*
* @author 田志阳
* @date 2026-01-09
*/
public class ChargeDischargeSummary extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键ID */
private Long id;
/** 设备ID */
@Excel(name = "设备ID")
private String deviceId;
/** 时间戳 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss ")
@Excel(name = "时间戳", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date timestamp;
/** 累计放电(kWh) */
@Excel(name = "累计放电(kWh)")
private BigDecimal dischargeKwh;
/** 累计充电kWh) */
@Excel(name = "累计充电kWh)")
private BigDecimal chargeKwh;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setDeviceId(String deviceId)
{
this.deviceId = deviceId;
}
public String getDeviceId()
{
return deviceId;
}
public void setTimestamp(Date timestamp)
{
this.timestamp = timestamp;
}
public Date getTimestamp()
{
return timestamp;
}
public void setDischargeKwh(BigDecimal dischargeKwh)
{
this.dischargeKwh = dischargeKwh;
}
public BigDecimal getDischargeKwh()
{
return dischargeKwh;
}
public void setChargeKwh(BigDecimal chargeKwh)
{
this.chargeKwh = chargeKwh;
}
public BigDecimal getChargeKwh()
{
return chargeKwh;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("deviceId", getDeviceId())
.append("timestamp", getTimestamp())
.append("dischargeKwh", getDischargeKwh())
.append("chargeKwh", getChargeKwh())
.append("createTime", getCreateTime())
.append("updateTime", getUpdateTime())
.append("createBy", getCreateBy())
.append("updateBy", getUpdateBy())
.toString();
}
}

View File

@ -0,0 +1,62 @@
package com.evobms.project.summary.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evobms.project.summary.domain.ChargeDischargeSummary;
/**
* 累计充放电量Mapper接口
*
* @author 田志阳
* @date 2026-01-09
*/
public interface ChargeDischargeSummaryMapper extends BaseMapper<ChargeDischargeSummary> {
/**
* 查询累计充放电量
*
* @param id 累计充放电量主键
* @return 累计充放电量
*/
public ChargeDischargeSummary selectChargeDischargeSummaryById(Long id);
/**
* 查询累计充放电量列表
*
* @param chargeDischargeSummary 累计充放电量
* @return 累计充放电量集合
*/
public List<ChargeDischargeSummary> selectChargeDischargeSummaryList(ChargeDischargeSummary chargeDischargeSummary);
/**
* 新增累计充放电量
*
* @param chargeDischargeSummary 累计充放电量
* @return 结果
*/
public int insertChargeDischargeSummary(ChargeDischargeSummary chargeDischargeSummary);
/**
* 修改累计充放电量
*
* @param chargeDischargeSummary 累计充放电量
* @return 结果
*/
public int updateChargeDischargeSummary(ChargeDischargeSummary chargeDischargeSummary);
/**
* 删除累计充放电量
*
* @param id 累计充放电量主键
* @return 结果
*/
public int deleteChargeDischargeSummaryById(Long id);
/**
* 批量删除累计充放电量
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteChargeDischargeSummaryByIds(Long[] ids);
}

View File

@ -0,0 +1,61 @@
package com.evobms.project.summary.service;
import java.util.List;
import com.evobms.project.summary.domain.ChargeDischargeSummary;
/**
* 累计充放电量Service接口
*
* @author 田志阳
* @date 2026-01-09
*/
public interface IChargeDischargeSummaryService
{
/**
* 查询累计充放电量
*
* @param id 累计充放电量主键
* @return 累计充放电量
*/
public ChargeDischargeSummary selectChargeDischargeSummaryById(Long id);
/**
* 查询累计充放电量列表
*
* @param chargeDischargeSummary 累计充放电量
* @return 累计充放电量集合
*/
public List<ChargeDischargeSummary> selectChargeDischargeSummaryList(ChargeDischargeSummary chargeDischargeSummary);
/**
* 新增累计充放电量
*
* @param chargeDischargeSummary 累计充放电量
* @return 结果
*/
public int insertChargeDischargeSummary(ChargeDischargeSummary chargeDischargeSummary);
/**
* 修改累计充放电量
*
* @param chargeDischargeSummary 累计充放电量
* @return 结果
*/
public int updateChargeDischargeSummary(ChargeDischargeSummary chargeDischargeSummary);
/**
* 批量删除累计充放电量
*
* @param ids 需要删除的累计充放电量主键集合
* @return 结果
*/
public int deleteChargeDischargeSummaryByIds(Long[] ids);
/**
* 删除累计充放电量信息
*
* @param id 累计充放电量主键
* @return 结果
*/
public int deleteChargeDischargeSummaryById(Long id);
}

View File

@ -0,0 +1,102 @@
package com.evobms.project.summary.service.impl;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evobms.common.utils.DateUtils;
import com.evobms.project.vehicledata.domain.VehicleData;
import com.evobms.project.vehicledata.mapper.VehicleDataMapper;
import com.evobms.project.vehicledata.service.IVehicleDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.evobms.project.summary.mapper.ChargeDischargeSummaryMapper;
import com.evobms.project.summary.domain.ChargeDischargeSummary;
import com.evobms.project.summary.service.IChargeDischargeSummaryService;
/**
* 累计充放电量Service业务层处理
*
* @author 田志阳
* @date 2026-01-09
*/
@Service
public class ChargeDischargeSummaryServiceImpl extends ServiceImpl<ChargeDischargeSummaryMapper, ChargeDischargeSummary> implements IChargeDischargeSummaryService
{
@Autowired
private ChargeDischargeSummaryMapper chargeDischargeSummaryMapper;
/**
* 查询累计充放电量
*
* @param id 累计充放电量主键
* @return 累计充放电量
*/
@Override
public ChargeDischargeSummary selectChargeDischargeSummaryById(Long id)
{
return chargeDischargeSummaryMapper.selectChargeDischargeSummaryById(id);
}
/**
* 查询累计充放电量列表
*
* @param chargeDischargeSummary 累计充放电量
* @return 累计充放电量
*/
@Override
public List<ChargeDischargeSummary> selectChargeDischargeSummaryList(ChargeDischargeSummary chargeDischargeSummary)
{
return chargeDischargeSummaryMapper.selectChargeDischargeSummaryList(chargeDischargeSummary);
}
/**
* 新增累计充放电量
*
* @param chargeDischargeSummary 累计充放电量
* @return 结果
*/
@Override
public int insertChargeDischargeSummary(ChargeDischargeSummary chargeDischargeSummary)
{
chargeDischargeSummary.setCreateTime(DateUtils.getNowDate());
return chargeDischargeSummaryMapper.insertChargeDischargeSummary(chargeDischargeSummary);
}
/**
* 修改累计充放电量
*
* @param chargeDischargeSummary 累计充放电量
* @return 结果
*/
@Override
public int updateChargeDischargeSummary(ChargeDischargeSummary chargeDischargeSummary)
{
chargeDischargeSummary.setUpdateTime(DateUtils.getNowDate());
return chargeDischargeSummaryMapper.updateChargeDischargeSummary(chargeDischargeSummary);
}
/**
* 批量删除累计充放电量
*
* @param ids 需要删除的累计充放电量主键
* @return 结果
*/
@Override
public int deleteChargeDischargeSummaryByIds(Long[] ids)
{
return chargeDischargeSummaryMapper.deleteChargeDischargeSummaryByIds(ids);
}
/**
* 删除累计充放电量信息
*
* @param id 累计充放电量主键
* @return 结果
*/
@Override
public int deleteChargeDischargeSummaryById(Long id)
{
return chargeDischargeSummaryMapper.deleteChargeDischargeSummaryById(id);
}
}

View File

@ -52,8 +52,8 @@ public class BmsDevices extends BaseEntity
private String firmwareVersion;
/** 最后在线时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "最后在线时间", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "最后在线时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date lastOnline;
}

View File

@ -1,19 +1,20 @@
package com.evobms.project.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evobms.project.system.domain.BmsDevices;
/**
* BBOX管理Mapper接口
*
*
* @author 田志阳
* @date 2025-10-10
*/
public interface BmsDevicesMapper
{
public interface BmsDevicesMapper extends BaseMapper<BmsDevices> {
/**
* 查询BBOX管理
*
*
* @param id BBOX管理主键
* @return BBOX管理
*/
@ -21,7 +22,7 @@ public interface BmsDevicesMapper
/**
* 查询BBOX管理列表
*
*
* @param bmsDevices BBOX管理
* @return BBOX管理集合
*/
@ -29,7 +30,7 @@ public interface BmsDevicesMapper
/**
* 新增BBOX管理
*
*
* @param bmsDevices BBOX管理
* @return 结果
*/
@ -37,7 +38,7 @@ public interface BmsDevicesMapper
/**
* 修改BBOX管理
*
*
* @param bmsDevices BBOX管理
* @return 结果
*/
@ -45,7 +46,7 @@ public interface BmsDevicesMapper
/**
* 删除BBOX管理
*
*
* @param id BBOX管理主键
* @return 结果
*/
@ -53,7 +54,7 @@ public interface BmsDevicesMapper
/**
* 批量删除BBOX管理
*
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/

View File

@ -5,15 +5,15 @@ import com.evobms.project.system.domain.BmsDevices;
/**
* BBOX管理Service接口
*
*
* @author 田志阳
* @date 2025-10-10
*/
public interface IBmsDevicesService
public interface IBmsDevicesService
{
/**
* 查询BBOX管理
*
*
* @param id BBOX管理主键
* @return BBOX管理
*/
@ -21,7 +21,7 @@ public interface IBmsDevicesService
/**
* 查询BBOX管理列表
*
*
* @param bmsDevices BBOX管理
* @return BBOX管理集合
*/
@ -29,7 +29,7 @@ public interface IBmsDevicesService
/**
* 新增BBOX管理
*
*
* @param bmsDevices BBOX管理
* @return 结果
*/
@ -37,7 +37,7 @@ public interface IBmsDevicesService
/**
* 修改BBOX管理
*
*
* @param bmsDevices BBOX管理
* @return 结果
*/
@ -45,7 +45,7 @@ public interface IBmsDevicesService
/**
* 批量删除BBOX管理
*
*
* @param ids 需要删除的BBOX管理主键集合
* @return 结果
*/
@ -53,9 +53,13 @@ public interface IBmsDevicesService
/**
* 删除BBOX管理信息
*
*
* @param id BBOX管理主键
* @return 结果
*/
public int deleteBmsDevicesById(String id);
BmsDevices selectBmsDevicesBySn(String deviceSn);
BmsDevices selectBmsDevicesList1(BmsDevices query);
}

View File

@ -1,9 +1,14 @@
package com.evobms.project.system.service.impl;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.evobms.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evobms.project.system.mapper.BmsDevicesMapper;
import com.evobms.project.system.domain.BmsDevices;
import com.evobms.project.system.service.IBmsDevicesService;
@ -15,7 +20,7 @@ import com.evobms.project.system.service.IBmsDevicesService;
* @date 2025-10-10
*/
@Service
public class BmsDevicesServiceImpl implements IBmsDevicesService
public class BmsDevicesServiceImpl extends ServiceImpl<BmsDevicesMapper, BmsDevices> implements IBmsDevicesService
{
@Autowired
private BmsDevicesMapper bmsDevicesMapper;
@ -41,7 +46,25 @@ public class BmsDevicesServiceImpl implements IBmsDevicesService
@Override
public List<BmsDevices> selectBmsDevicesList(BmsDevices bmsDevices)
{
return bmsDevicesMapper.selectBmsDevicesList(bmsDevices);
LambdaQueryWrapper<BmsDevices> qw = new LambdaQueryWrapper<>();
if (bmsDevices != null) {
if (bmsDevices.getDeviceId() != null && !bmsDevices.getDeviceId().isEmpty()) {
qw.eq(BmsDevices::getDeviceId, bmsDevices.getDeviceId());
}
Map<String, Object> params = bmsDevices.getParams();
if (params != null) {
Date begin = DateUtils.parseDate(params.get("beginTime"));
Date end = DateUtils.parseDate(params.get("endTime"));
if (begin != null) {
qw.and(w -> w.ge(BmsDevices::getUpdateTime, begin).or().ge(BmsDevices::getCreateTime, begin));
}
if (end != null) {
qw.and(w -> w.le(BmsDevices::getUpdateTime, end).or().le(BmsDevices::getCreateTime, end));
}
}
}
qw.orderByDesc(BmsDevices::getUpdateTime).orderByDesc(BmsDevices::getCreateTime);
return bmsDevicesMapper.selectList(qw);
}
/**
@ -93,4 +116,22 @@ public class BmsDevicesServiceImpl implements IBmsDevicesService
{
return bmsDevicesMapper.deleteBmsDevicesById(id);
}
@Override
public BmsDevices selectBmsDevicesBySn(String deviceSn) {
LambdaQueryWrapper<BmsDevices> bmslq = new LambdaQueryWrapper<>();
bmslq.eq(BmsDevices::getDeviceSn, deviceSn);
return baseMapper.selectOne(bmslq);
}
@Override
public BmsDevices selectBmsDevicesList1(BmsDevices bmsDevices) {
LambdaQueryWrapper<BmsDevices> eq = new LambdaQueryWrapper<>();
if (bmsDevices != null) {
eq.eq(BmsDevices::getDeviceSn, bmsDevices.getDeviceSn());
return baseMapper.selectOne(eq);
}
return null;
}
}

View File

@ -1,24 +1,30 @@
package com.evobms.project.VehicleData.controller;
package com.evobms.project.vehicledata.controller;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import com.evobms.framework.web.domain.R;
import com.evobms.project.vehicledata.domain.HomeDashboardDTO;
import org.apache.ibatis.annotations.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.evobms.project.VehicleData.service.IVehicleDataService;
import com.evobms.project.VehicleData.service.IVehicleLocationService;
import com.evobms.project.VehicleData.domain.VehicleData;
import com.evobms.project.VehicleData.domain.VehicleLocation;
import com.evobms.project.VehicleData.dto.ChartDataPoint;
import com.evobms.project.Battery.service.ISubsystemVoltageService;
import com.evobms.project.Battery.service.ISubsystemTemperatureService;
import com.evobms.project.Battery.domain.SubsystemVoltage;
import com.evobms.project.Battery.domain.SubsystemTemperature;
import com.evobms.project.Battery.service.IExtremeValuesService;
import com.evobms.project.Battery.domain.ExtremeValues;
import com.evobms.project.vehicledata.service.IVehicleDataService;
import com.evobms.project.vehicledata.service.IVehicleLocationService;
import com.evobms.project.vehicledata.domain.VehicleData;
import com.evobms.project.vehicledata.domain.VehicleLocation;
import com.evobms.project.vehicledata.dto.ChartDataPoint;
import com.evobms.project.battery.service.ISubsystemVoltageService;
import com.evobms.project.battery.service.ISubsystemTemperatureService;
import com.evobms.project.battery.domain.SubsystemVoltage;
import com.evobms.project.battery.domain.SubsystemTemperature;
import com.evobms.project.battery.service.IExtremeValuesService;
import com.evobms.project.battery.domain.ExtremeValues;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import io.swagger.annotations.Api;
@ -80,10 +86,7 @@ public class BatteryChartController {
// 位置轨迹按时间范围返回位置列表start/end 为毫秒时间戳可选 limit 限制条数
@GetMapping("/vehicle-location/{deviceId}")
@ApiOperation(value = "车辆位置轨迹", notes = "按时间范围返回位置列表")
public List<VehicleLocation> locationRange(@PathVariable("deviceId") String deviceId,
@RequestParam("start") long startMillis,
@RequestParam("end") long endMillis,
@RequestParam(value = "limit", required = false) Integer limit) {
public List<VehicleLocation> locationRange(@PathVariable("deviceId") String deviceId, @RequestParam("start") long startMillis, @RequestParam("end") long endMillis, @RequestParam(value = "limit", required = false) Integer limit) {
Date start = new Date(startMillis);
Date end = new Date(endMillis);
return vehicleLocationService.selectByDeviceAndRange(deviceId, start, end, limit);
@ -122,4 +125,12 @@ public class BatteryChartController {
}
return extremeValuesService.selectLatestByDeviceIdBefore(deviceId, beforeTime);
}
@GetMapping("/api/dashboard/home")
@ApiOperation(value = "首页所有分布数据", notes = "返回指定设备极值数据支持before筛选")
public R<HomeDashboardDTO> home(){
HomeDashboardDTO dto = vehicleDataService.getHomeDashboard();
return R.ok(dto);
}
}

View File

@ -1,4 +1,4 @@
package com.evobms.project.VehicleData.controller;
package com.evobms.project.vehicledata.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evobms.framework.aspectj.lang.annotation.Log;
import com.evobms.framework.aspectj.lang.enums.BusinessType;
import com.evobms.project.VehicleData.domain.VehicleData;
import com.evobms.project.VehicleData.service.IVehicleDataService;
import com.evobms.project.vehicledata.domain.VehicleData;
import com.evobms.project.vehicledata.service.IVehicleDataService;
import com.evobms.framework.web.controller.BaseController;
import com.evobms.framework.web.domain.AjaxResult;
import com.evobms.common.utils.poi.ExcelUtil;
@ -23,7 +23,7 @@ import com.evobms.framework.web.page.TableDataInfo;
/**
* 整车数据Controller
*
*
* @author 田志阳
* @date 2025-11-15
*/

View File

@ -1,4 +1,4 @@
package com.evobms.project.VehicleData.controller;
package com.evobms.project.vehicledata.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evobms.framework.aspectj.lang.annotation.Log;
import com.evobms.framework.aspectj.lang.enums.BusinessType;
import com.evobms.project.VehicleData.domain.VehicleLocation;
import com.evobms.project.VehicleData.service.IVehicleLocationService;
import com.evobms.project.vehicledata.domain.VehicleLocation;
import com.evobms.project.vehicledata.service.IVehicleLocationService;
import com.evobms.framework.web.controller.BaseController;
import com.evobms.framework.web.domain.AjaxResult;
import com.evobms.common.utils.poi.ExcelUtil;
@ -23,7 +23,7 @@ import com.evobms.framework.web.page.TableDataInfo;
/**
* 车辆位置数据Controller
*
*
* @author ruoyi
* @date 2025-11-15
*/

View File

@ -0,0 +1,18 @@
package com.evobms.project.vehicledata.domain;
import lombok.Data;
import java.util.Map;
@Data
public class HomeDashboardDTO {
private Long deviceCount; // 设备总数
private Integer onlineCount; // 在线设备数
private Double avgSoc; // 平均 SOC
private Double maxTemp; // 当前最高温度
private Double maxVoltageDiff; // 最大单体压差
private Integer alarmCount; // 未恢复告警数
private Map<String, Integer> socDistribution; // SOC 分布
private Map<String, Integer> tempDistribution; // 温度分布
}

View File

@ -1,4 +1,4 @@
package com.evobms.project.VehicleData.domain;
package com.evobms.project.vehicledata.domain;
import java.math.BigDecimal;
import java.util.Date;

View File

@ -1,4 +1,4 @@
package com.evobms.project.VehicleData.domain;
package com.evobms.project.vehicledata.domain;
import java.math.BigDecimal;
import java.util.Date;
@ -32,8 +32,8 @@ public class VehicleLocation extends BaseEntity {
/**
* 数据时间戳
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "数据时间戳", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date timestamp;
/**

View File

@ -1,4 +1,4 @@
package com.evobms.project.VehicleData.dto;
package com.evobms.project.vehicledata.dto;
import java.util.Date;
@ -8,7 +8,6 @@ public class ChartDataPoint {
private double current;
private int soc;
public ChartDataPoint() {}
public ChartDataPoint(Date timestamp, double voltage, double current, int soc) {
this.timestamp = timestamp;
@ -25,4 +24,4 @@ public class ChartDataPoint {
public void setCurrent(double current) { this.current = current; }
public int getSoc() { return soc; }
public void setSoc(int soc) { this.soc = soc; }
}
}

View File

@ -1,8 +1,8 @@
package com.evobms.project.VehicleData.mapper;
package com.evobms.project.vehicledata.mapper;
import java.util.Date;
import java.util.List;
import com.evobms.project.VehicleData.domain.VehicleData;
import com.evobms.project.vehicledata.domain.VehicleData;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

View File

@ -1,14 +1,14 @@
package com.evobms.project.VehicleData.mapper;
package com.evobms.project.vehicledata.mapper;
import java.util.Date;
import java.util.List;
import com.evobms.project.VehicleData.domain.VehicleLocation;
import com.evobms.project.vehicledata.domain.VehicleLocation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* 车辆位置数据Mapper接口
*
*
* @author ruoyi
* @date 2025-11-15
*/
@ -16,7 +16,7 @@ public interface VehicleLocationMapper extends BaseMapper<VehicleLocation>
{
/**
* 查询车辆位置数据
*
*
* @param id 车辆位置数据主键
* @return 车辆位置数据
*/
@ -24,7 +24,7 @@ public interface VehicleLocationMapper extends BaseMapper<VehicleLocation>
/**
* 查询车辆位置数据列表
*
*
* @param vehicleLocation 车辆位置数据
* @return 车辆位置数据集合
*/
@ -32,7 +32,7 @@ public interface VehicleLocationMapper extends BaseMapper<VehicleLocation>
/**
* 新增车辆位置数据
*
*
* @param vehicleLocation 车辆位置数据
* @return 结果
*/
@ -40,7 +40,7 @@ public interface VehicleLocationMapper extends BaseMapper<VehicleLocation>
/**
* 修改车辆位置数据
*
*
* @param vehicleLocation 车辆位置数据
* @return 结果
*/
@ -48,7 +48,7 @@ public interface VehicleLocationMapper extends BaseMapper<VehicleLocation>
/**
* 删除车辆位置数据
*
*
* @param id 车辆位置数据主键
* @return 结果
*/
@ -56,7 +56,7 @@ public interface VehicleLocationMapper extends BaseMapper<VehicleLocation>
/**
* 批量删除车辆位置数据
*
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/

View File

@ -1,8 +1,10 @@
package com.evobms.project.VehicleData.service;
package com.evobms.project.vehicledata.service;
import java.util.Date;
import java.util.List;
import com.evobms.project.VehicleData.domain.VehicleData;
import com.evobms.project.vehicledata.domain.HomeDashboardDTO;
import com.evobms.project.vehicledata.domain.VehicleData;
/**
* 整车数据Service接口
@ -63,4 +65,6 @@ public interface IVehicleDataService
List<VehicleData> selectByDeviceAndStartTime(String deviceId, Date startTime);
VehicleData selectLatestByDeviceId(String deviceId);
HomeDashboardDTO getHomeDashboard();
}

View File

@ -1,8 +1,8 @@
package com.evobms.project.VehicleData.service;
package com.evobms.project.vehicledata.service;
import java.util.Date;
import java.util.List;
import com.evobms.project.VehicleData.domain.VehicleLocation;
import com.evobms.project.vehicledata.domain.VehicleLocation;
/**
* 车辆位置数据Service接口
@ -61,6 +61,11 @@ public interface IVehicleLocationService
public int deleteVehicleLocationById(Long id);
VehicleLocation selectLatestByDeviceId(String deviceId);
/**
* 删除车辆位置数据信息
* 位置轨迹按时间范围返回位置列表start/end 为毫秒时间戳可选 limit 限制条数
* @param deviceId
* @return 结果
*/
List<VehicleLocation> selectByDeviceAndRange(String deviceId, Date start, Date end, Integer limit);
}

View File

@ -0,0 +1,185 @@
package com.evobms.project.vehicledata.service.impl;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evobms.common.utils.DateUtils;
import com.evobms.project.battery.mapper.ExtremeValuesMapper;
import com.evobms.project.system.domain.BmsDevices;
import com.evobms.project.system.mapper.BmsDevicesMapper;
import com.evobms.project.vehicledata.domain.HomeDashboardDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evobms.project.vehicledata.mapper.VehicleDataMapper;
import com.evobms.project.vehicledata.domain.VehicleData;
import com.evobms.project.vehicledata.service.IVehicleDataService;
/**
* 整车数据Service业务层处理
*
* @author 田志阳
* @date 2025-11-15
*/
@Service
public class VehicleDataServiceImpl extends ServiceImpl<VehicleDataMapper, VehicleData> implements IVehicleDataService
{
@Autowired
private VehicleDataMapper vehicleDataMapper;
@Autowired
private BmsDevicesMapper bmsDevicesMapper;
@Autowired
private ExtremeValuesMapper extremeValuesMapper;
/**
* 查询整车数据
*
* @param id 整车数据主键
* @return 整车数据
*/
@Override
public VehicleData selectVehicleDataById(Long id)
{
return vehicleDataMapper.selectVehicleDataById(id);
}
/**
* 查询整车数据列表
*
* @param vehicleData 整车数据
* @return 整车数据
*/
@Override
public List<VehicleData> selectVehicleDataList(VehicleData vehicleData)
{
LambdaQueryWrapper<VehicleData> qw = new LambdaQueryWrapper<>();
if (vehicleData != null) {
if (vehicleData.getDeviceId() != null && !vehicleData.getDeviceId().isEmpty()) {
qw.eq(VehicleData::getDeviceId, vehicleData.getDeviceId());
}
if (vehicleData.getTimestamp() != null) {
qw.ge(VehicleData::getTimestamp, vehicleData.getTimestamp());
}
Map<String, Object> params = vehicleData.getParams();
if (params != null) {
Date begin = DateUtils.parseDate(params.get("beginTime"));
Date end = DateUtils.parseDate(params.get("endTime"));
if (begin != null) {
qw.ge(VehicleData::getTimestamp, begin);
}
if (end != null) {
qw.le(VehicleData::getTimestamp, end);
}
}
}
qw.orderByDesc(VehicleData::getTimestamp);
return vehicleDataMapper.selectList(qw);
}
/**
* 新增整车数据
*
* @param vehicleData 整车数据
* @return 结果
*/
@Override
public int insertVehicleData(VehicleData vehicleData)
{
return vehicleDataMapper.insertVehicleData(vehicleData);
}
/**
* 修改整车数据
*
* @param vehicleData 整车数据
* @return 结果
*/
@Override
public int updateVehicleData(VehicleData vehicleData)
{
return vehicleDataMapper.updateVehicleData(vehicleData);
}
/**
* 批量删除整车数据
*
* @param ids 需要删除的整车数据主键
* @return 结果
*/
@Override
public int deleteVehicleDataByIds(Long[] ids)
{
return vehicleDataMapper.deleteVehicleDataByIds(ids);
}
/**
* 删除整车数据信息
*
* @param id 整车数据主键
* @return 结果
*/
@Override
public int deleteVehicleDataById(Long id)
{
return vehicleDataMapper.deleteVehicleDataById(id);
}
@Override
public List<VehicleData> selectByDeviceAndStartTime(String deviceId, Date startTime) {
LambdaQueryWrapper<VehicleData> byTimestamp = new LambdaQueryWrapper<>();
byTimestamp.eq(VehicleData::getDeviceId, deviceId)
.ge(VehicleData::getTimestamp, startTime)
.orderByAsc(VehicleData::getTimestamp);
List<VehicleData> rows = vehicleDataMapper.selectList(byTimestamp);
if (rows == null || rows.isEmpty()) {
LambdaQueryWrapper<VehicleData> byCreateTime = new LambdaQueryWrapper<>();
byCreateTime.eq(VehicleData::getDeviceId, deviceId)
.ge(VehicleData::getCreateTime, startTime)
.orderByAsc(VehicleData::getCreateTime);
rows = vehicleDataMapper.selectList(byCreateTime);
}
return rows;
}
@Override
public VehicleData selectLatestByDeviceId(String deviceId) {
LambdaQueryWrapper<VehicleData> byTimestamp = new LambdaQueryWrapper<>();
byTimestamp.eq(VehicleData::getDeviceId, deviceId)
.orderByDesc(VehicleData::getTimestamp)
.last("limit 1");
VehicleData latest = vehicleDataMapper.selectOne(byTimestamp);
if (latest == null) {
LambdaQueryWrapper<VehicleData> byCreateTime = new LambdaQueryWrapper<>();
byCreateTime.eq(VehicleData::getDeviceId, deviceId)
.orderByDesc(VehicleData::getCreateTime)
.last("limit 1");
latest = vehicleDataMapper.selectOne(byCreateTime);
}
return latest;
}
@Override
public HomeDashboardDTO getHomeDashboard() {
HomeDashboardDTO dto = new HomeDashboardDTO();
// 1 设备总数
Long deviceCount = bmsDevicesMapper.selectCount(null);
dto.setDeviceCount(deviceCount);
return null;
}
@Scheduled(fixedDelay = 60000)
public void checkDeviceOffline() {
LocalDateTime threshold = LocalDateTime.now().minusMinutes(5);
bmsDevicesMapper.update(null, new UpdateWrapper<BmsDevices>()
.set("status", "offline")
.lt("last_online", threshold));
bmsDevicesMapper.update(null, new UpdateWrapper<BmsDevices>()
.set("status", "online")
.ge("last_online", threshold));
}
}

View File

@ -0,0 +1,139 @@
package com.evobms.project.vehicledata.service.impl;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evobms.project.vehicledata.mapper.VehicleLocationMapper;
import com.evobms.project.vehicledata.domain.VehicleLocation;
import com.evobms.project.vehicledata.service.IVehicleLocationService;
/**
* 车辆位置数据Service业务层处理
*
* @author ruoyi
* @date 2025-11-15
*/
@Service
public class VehicleLocationServiceImpl extends ServiceImpl<VehicleLocationMapper, VehicleLocation> implements IVehicleLocationService
{
@Autowired
private VehicleLocationMapper vehicleLocationMapper;
/**
* 查询车辆位置数据
*
* @param id 车辆位置数据主键
* @return 车辆位置数据
*/
@Override
public VehicleLocation selectVehicleLocationById(Long id)
{
return vehicleLocationMapper.selectVehicleLocationById(id);
}
/**
* 查询车辆位置数据列表
*
* @param vehicleLocation 车辆位置数据
* @return 车辆位置数据
*/
@Override
public List<VehicleLocation> selectVehicleLocationList(VehicleLocation vehicleLocation)
{
LambdaQueryWrapper<VehicleLocation> qw = new LambdaQueryWrapper<>();
if (vehicleLocation != null) {
if (vehicleLocation.getDeviceId() != null && !vehicleLocation.getDeviceId().isEmpty()) {
qw.eq(VehicleLocation::getDeviceId, vehicleLocation.getDeviceId());
}
if (vehicleLocation.getTimestamp() != null) {
qw.ge(VehicleLocation::getTimestamp, vehicleLocation.getTimestamp());
}
java.util.Map<String, Object> params = vehicleLocation.getParams();
if (params != null) {
java.util.Date begin = com.evobms.common.utils.DateUtils.parseDate(params.get("beginTime"));
java.util.Date end = com.evobms.common.utils.DateUtils.parseDate(params.get("endTime"));
if (begin != null) {
qw.ge(VehicleLocation::getTimestamp, begin);
}
if (end != null) {
qw.le(VehicleLocation::getTimestamp, end);
}
}
}
qw.orderByDesc(VehicleLocation::getTimestamp);
return vehicleLocationMapper.selectList(qw);
}
/**
* 新增车辆位置数据
*
* @param vehicleLocation 车辆位置数据
* @return 结果
*/
@Override
public int insertVehicleLocation(VehicleLocation vehicleLocation)
{
return vehicleLocationMapper.insertVehicleLocation(vehicleLocation);
}
/**
* 修改车辆位置数据
*
* @param vehicleLocation 车辆位置数据
* @return 结果
*/
@Override
public int updateVehicleLocation(VehicleLocation vehicleLocation)
{
return vehicleLocationMapper.updateVehicleLocation(vehicleLocation);
}
/**
* 批量删除车辆位置数据
*
* @param ids 需要删除的车辆位置数据主键
* @return 结果
*/
@Override
public int deleteVehicleLocationByIds(Long[] ids)
{
return vehicleLocationMapper.deleteVehicleLocationByIds(ids);
}
/**
* 删除车辆位置数据信息
*
* @param id 车辆位置数据主键
* @return 结果
*/
@Override
public int deleteVehicleLocationById(Long id)
{
return vehicleLocationMapper.deleteVehicleLocationById(id);
}
@Override
public VehicleLocation selectLatestByDeviceId(String deviceId) {
LambdaQueryWrapper<VehicleLocation> qw = new LambdaQueryWrapper<>();
qw.eq(VehicleLocation::getDeviceId, deviceId)
.orderByDesc(VehicleLocation::getTimestamp)
.last("limit 1");
return vehicleLocationMapper.selectOne(qw);
}
@Override
public List<VehicleLocation> selectByDeviceAndRange(String deviceId, Date start, Date end, Integer limit) {
LambdaQueryWrapper<VehicleLocation> qw = new LambdaQueryWrapper<>();
qw.eq(VehicleLocation::getDeviceId, deviceId)
.ge(VehicleLocation::getTimestamp, start)
.le(VehicleLocation::getTimestamp, end)
.orderByAsc(VehicleLocation::getTimestamp);
if (limit != null && limit > 0) {
qw.last("limit " + limit);
}
return vehicleLocationMapper.selectList(qw);
}
}

View File

@ -16,7 +16,7 @@ ruoyi:
# 开发环境配置
server:
# 服务器HTTP端口支持环境变量覆盖SERVER_PORT默认8080
port: ${SERVER_PORT:8081}
port: ${SERVER_PORT:8080}
servlet:
# 应用的访问路径
context-path: /
@ -154,7 +154,7 @@ swagger:
# 是否开启swagger
enabled: true
# 请求前缀
pathMapping: /dev-api
pathMapping: /prod-api
# 防盗链配置
referer:
@ -175,7 +175,7 @@ xss:
# 代码生成
gen:
# 作者
author: ruoyi
author: tzy
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
packageName: com.evobms.project.system
# 自动去除表前缀默认是true
@ -190,13 +190,13 @@ mqtt:
# 是否启用MQTT功能设置为false可在没有MQTT服务器时正常启动
enabled: true
# MQTT服务器地址
host: tcp://61.182.73.218:1883
# 客户端ID
clientId: evobms-client
# 用户名
username:
# 密码
password:
host: ${MQTT_HOST_URI:tcp://61.182.73.218:1883}
# 客户端ID(避免冲突,随机后缀)
clientId: evobms-client-${random.int}
# 用户名(如需认证请填写)
username: ${MQTT_USERNAME:00000001}
# 密码(如需认证请填写)
password: ${MQTT_PASSWORD:741a03a10f3de6b2}
# 连接超时时间(秒)
connectionTimeout: 30
# 心跳间隔(秒)

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.evobms.project.Battery.mapper.ChargeDischargeSummaryMapper">
<mapper namespace="com.evobms.project.battery.mapper.ChargeDischargeSummaryMapper">
<resultMap type="ChargeDischargeSummary" id="ChargeDischargeSummaryResult">
<result property="id" column="id" />
@ -84,4 +84,4 @@
#{id}
</foreach>
</delete>
</mapper>
</mapper>

View File

@ -2,8 +2,8 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.evobms.project.Battery.mapper.ExtremeValuesMapper">
<mapper namespace="com.evobms.project.battery.mapper.ExtremeValuesMapper">
<resultMap type="ExtremeValues" id="ExtremeValuesResult">
<result property="id" column="id" />
<result property="deviceId" column="device_id" />
@ -32,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectExtremeValuesList" parameterType="ExtremeValues" resultMap="ExtremeValuesResult">
<include refid="selectExtremeValuesVo"/>
<where>
<where>
<if test="deviceId != null and deviceId != ''"> and device_id = #{deviceId}</if>
<if test="timestamp != null "> and timestamp = #{timestamp}</if>
<if test="maxVoltageSubsystemNo != null "> and max_voltage_subsystem_no = #{maxVoltageSubsystemNo}</if>
@ -49,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="minTempValue != null "> and min_temp_value = #{minTempValue}</if>
</where>
</select>
<select id="selectExtremeValuesById" parameterType="Long" resultMap="ExtremeValuesResult">
<include refid="selectExtremeValuesVo"/>
where id = #{id}
@ -129,7 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<delete id="deleteExtremeValuesByIds" parameterType="String">
delete from extreme_values where id in
delete from extreme_values where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
@ -149,4 +149,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by timestamp desc
limit 1
</select>
</mapper>
</mapper>

View File

@ -1,66 +0,0 @@
<?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.evobms.project.bms.mapper.BmsDeviceMapper">
<resultMap type="BmsDevice" id="BmsDeviceResult">
<result property="deviceId" column="device_id" />
<result property="deviceCode" column="device_code" />
<result property="deviceName" column="device_name" />
<result property="deviceType" column="device_type" />
<result property="status" column="status" />
<result property="batteryCapacity" column="battery_capacity" />
<result property="ratedVoltage" column="rated_voltage" />
<result property="currentVoltage" column="current_voltage" />
<result property="currentCurrent" column="current_current" />
<result property="remainingCapacity" column="remaining_capacity" />
<result property="temperature" column="temperature" />
<result property="lastCommTime" column="last_comm_time" />
<result property="delFlag" column="del_flag" />
<result property="version" column="version" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
</resultMap>
<sql id="selectBmsDeviceVo">
select device_id, device_code, device_name, device_type, status, battery_capacity,
rated_voltage, current_voltage, current_current, remaining_capacity, temperature,
last_comm_time, del_flag, version, create_by, create_time, update_by, update_time, remark
from bms_device
</sql>
<select id="selectBmsDeviceList" parameterType="BmsDevice" resultMap="BmsDeviceResult">
<include refid="selectBmsDeviceVo"/>
<where>
<if test="deviceCode != null and deviceCode != ''"> and device_code like concat('%', #{deviceCode}, '%')</if>
<if test="deviceName != null and deviceName != ''"> and device_name like concat('%', #{deviceName}, '%')</if>
<if test="deviceType != null and deviceType != ''"> and device_type = #{deviceType}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
<if test="batteryCapacity != null "> and battery_capacity = #{batteryCapacity}</if>
<if test="ratedVoltage != null "> and rated_voltage = #{ratedVoltage}</if>
<if test="currentVoltage != null "> and current_voltage = #{currentVoltage}</if>
<if test="currentCurrent != null "> and current_current = #{currentCurrent}</if>
<if test="remainingCapacity != null "> and remaining_capacity = #{remainingCapacity}</if>
<if test="temperature != null "> and temperature = #{temperature}</if>
<if test="lastCommTime != null "> and last_comm_time = #{lastCommTime}</if>
</where>
order by device_id desc
</select>
<select id="selectBmsDeviceByCode" parameterType="String" resultMap="BmsDeviceResult">
<include refid="selectBmsDeviceVo"/>
where device_code = #{deviceCode} and del_flag = '0'
</select>
<update id="updateBmsDeviceStatus">
update bms_device set status = #{status} where device_id in
<foreach item="deviceId" collection="deviceIds" open="(" separator="," close=")">
#{deviceId}
</foreach>
</update>
</mapper>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.evobms.project.VehicleData.mapper.VehicleLocationMapper">
<mapper namespace="com.evobms.project.vehicledata.mapper.VehicleLocationMapper">
<resultMap type="VehicleLocation" id="VehicleLocationResult">
<result property="id" column="id" />

View File

@ -0,0 +1,87 @@
<?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.evobms.project.summary.mapper.ChargeDischargeSummaryMapper">
<resultMap type="ChargeDischargeSummary" id="ChargeDischargeSummaryResult">
<result property="id" column="id" />
<result property="deviceId" column="device_id" />
<result property="timestamp" column="timestamp" />
<result property="dischargeKwh" column="discharge_kwh" />
<result property="chargeKwh" column="charge_kwh" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="createBy" column="create_by" />
<result property="updateBy" column="update_by" />
</resultMap>
<sql id="selectChargeDischargeSummaryVo">
select id, device_id, timestamp, discharge_kwh, charge_kwh, create_time, update_time, create_by, update_by from charge_discharge_summary
</sql>
<select id="selectChargeDischargeSummaryList" parameterType="ChargeDischargeSummary" resultMap="ChargeDischargeSummaryResult">
<include refid="selectChargeDischargeSummaryVo"/>
<where>
<if test="deviceId != null and deviceId != ''"> and device_id = #{deviceId}</if>
<if test="timestamp != null "> and timestamp = #{timestamp}</if>
<if test="dischargeKwh != null "> and discharge_kwh = #{dischargeKwh}</if>
<if test="chargeKwh != null "> and charge_kwh = #{chargeKwh}</if>
</where>
</select>
<select id="selectChargeDischargeSummaryById" parameterType="Long" resultMap="ChargeDischargeSummaryResult">
<include refid="selectChargeDischargeSummaryVo"/>
where id = #{id}
</select>
<insert id="insertChargeDischargeSummary" parameterType="ChargeDischargeSummary" useGeneratedKeys="true" keyProperty="id">
insert into charge_discharge_summary
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="deviceId != null and deviceId != ''">device_id,</if>
<if test="timestamp != null">timestamp,</if>
<if test="dischargeKwh != null">discharge_kwh,</if>
<if test="chargeKwh != null">charge_kwh,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
<if test="createBy != null">create_by,</if>
<if test="updateBy != null">update_by,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="deviceId != null and deviceId != ''">#{deviceId},</if>
<if test="timestamp != null">#{timestamp},</if>
<if test="dischargeKwh != null">#{dischargeKwh},</if>
<if test="chargeKwh != null">#{chargeKwh},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if>
</trim>
</insert>
<update id="updateChargeDischargeSummary" parameterType="ChargeDischargeSummary">
update charge_discharge_summary
<trim prefix="SET" suffixOverrides=",">
<if test="deviceId != null and deviceId != ''">device_id = #{deviceId},</if>
<if test="timestamp != null">timestamp = #{timestamp},</if>
<if test="dischargeKwh != null">discharge_kwh = #{dischargeKwh},</if>
<if test="chargeKwh != null">charge_kwh = #{chargeKwh},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteChargeDischargeSummaryById" parameterType="Long">
delete from charge_discharge_summary where id = #{id}
</delete>
<delete id="deleteChargeDischargeSummaryByIds" parameterType="String">
delete from charge_discharge_summary where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.evobms.project.Battery.mapper.SubsystemTemperatureMapper">
<mapper namespace="com.evobms.project.battery.mapper.SubsystemTemperatureMapper">
<resultMap type="SubsystemTemperature" id="SubsystemTemperatureResult">
<result property="id" column="id" />

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.evobms.project.VehicleData.mapper.VehicleDataMapper">
<mapper namespace="com.evobms.project.vehicledata.mapper.VehicleDataMapper">
<resultMap type="VehicleData" id="VehicleDataResult">
<result property="id" column="id" />

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.evobms.project.Battery.mapper.SubsystemVoltageMapper">
<mapper namespace="com.evobms.project.battery.mapper.SubsystemVoltageMapper">
<resultMap type="SubsystemVoltage" id="SubsystemVoltageResult">
<result property="id" column="id" />