src/main/java/com/whyc/controller/DeviceSetparamController.java
@@ -40,4 +40,16 @@ public Response startDis(@RequestParam int devId, @RequestParam int battGroupNum) { return service.startDis(devId, battGroupNum); } @ApiOperation("内阻测试") @GetMapping("startRes") public Response startRes(@RequestParam int devId, @RequestParam int battGroupNum) { return service.startRes(devId, battGroupNum); } @ApiOperation("停止内阻测试") @GetMapping("stopRes") public Response stopRes(@RequestParam int devId, @RequestParam int battGroupNum) { return service.stopRes(devId, battGroupNum); } } src/main/java/com/whyc/dto/CmdDto/DevCmd.java
@@ -11,6 +11,9 @@ final public static int CMD_SetDischargeParmAck=39; final public static int CMD_GetDischargeParmAck=48; final public static int CMD_StartResDischarge = 0x32; //启动内阻测试 final public static int CMD_StopResDischarge = 0x33; //停止内阻测试 public static final int CMD_StartDischarge = 0x25; //启动放电37 public static final int CMD_StartDischargeAck = 0x26; //启动放电成功38 public static final int CMD_StopDischarge = 0x23; //停止放电35 src/main/java/com/whyc/dto/Real/CompareDto.java
@@ -4,7 +4,7 @@ @Data public class CompareDto { private Float maxValue; private Float minValue; private Float avgValue; private Float maxData; private Float minData; private Float avgData; } src/main/java/com/whyc/mapper/BattresdataInfMapper.java
New file @@ -0,0 +1,6 @@ package com.whyc.mapper; import com.whyc.pojo.db_batt_testdata.BattresdataInf; public interface BattresdataInfMapper extends CustomMapper<BattresdataInf>{ } src/main/java/com/whyc/pojo/db_batt_testdata/BattresdataId.java
New file @@ -0,0 +1,72 @@ package com.whyc.pojo.db_batt_testdata; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * <p> * 电池组内阻测试详情表 * </p> * * @author lxw * @since 2025-05-29 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value="BattresdataId", description="电池组内阻测试详情表") public class BattresdataId implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "自增主键") @TableId(value = "num", type = IdType.AUTO) private Long num; @ApiModelProperty(value = "电池组ID") private Integer battgroupId; @ApiModelProperty(value = "测试次数") private Integer testRecordCount; @ApiModelProperty(value = "测试类型") private Integer testType; @ApiModelProperty(value = "是否是最新数据") private Integer dataNew; @ApiModelProperty(value = "数据是否有效") private Integer dataAvailable; @ApiModelProperty(value = "测试开始时间") private Date testStarttime; @ApiModelProperty(value = "组端电压") private Float groupVol; @ApiModelProperty(value = "测试电流") private Float testCurr; @ApiModelProperty(value = "单体编号") private Integer monNum; @ApiModelProperty(value = "单体电压") private Float monVol; @ApiModelProperty(value = "单体温度") private Float monTmp; @ApiModelProperty(value = "单体内阻") private Float monRes; } src/main/java/com/whyc/pojo/db_batt_testdata/BattresdataInf.java
New file @@ -0,0 +1,67 @@ package com.whyc.pojo.db_batt_testdata; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * <p> * 内阻测试总表 * </p> * * @author lxw * @since 2025-05-29 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName(schema = "db_batt_testdata",value ="tb_battresdata_inf") @ApiModel(value="BattresdataInf对象", description="内阻测试总表") public class BattresdataInf implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "自增主键") @TableId(value = "num", type = IdType.AUTO) private Long num; @ApiModelProperty(value = "电池组ID") private Integer battgroupId; @ApiModelProperty(value = "测试次数") private Integer testRecordCount; @ApiModelProperty(value = "下一次测试次数") private Integer testRecordCountEx; @ApiModelProperty(value = "测试类型") private Integer testType; @ApiModelProperty(value = "是否是最新数据") private Integer dataNew; @ApiModelProperty(value = "数据是否有效") private Integer dataAvailable; @ApiModelProperty(value = "测试开始时间") private Date testStarttime; @ApiModelProperty(value = "记录时间") private Date recordTime; @ApiModelProperty(value = "组端电压") private Float groupVol; @ApiModelProperty(value = "测试电流") private Float testCurr; } src/main/java/com/whyc/service/BattresdataInfService.java
New file @@ -0,0 +1,22 @@ package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.whyc.mapper.BattresdataInfMapper; import com.whyc.pojo.db_batt_testdata.BattresdataInf; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class BattresdataInfService { @Autowired(required = false) private BattresdataInfMapper mapper; //上一次内阻测试数据 public BattresdataInf getLastTestData(Integer battgroupId) { QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("battgroup_id", battgroupId); wrapper.last(" limit 1"); wrapper.last(" ORDER BY test_starttime DESC "); BattresdataInf rinf = mapper.selectOne(wrapper); return rinf; } } src/main/java/com/whyc/service/BatttestdataInfService.java
@@ -80,6 +80,7 @@ wrapper.eq("data_available", 1); wrapper.eq("test_type", 3); wrapper.eq("test_starttype", 3); wrapper.last("limit 1"); wrapper.last(" and test_timelong >= 7200 ORDER BY test_starttime DESC "); BatttestdataInf tinf = mapper.selectOne(wrapper); return tinf; src/main/java/com/whyc/service/DeviceSetparamService.java
@@ -39,6 +39,8 @@ break; case DevCmd.CMD_ResetSystem: cmd_ack = DevCmd.CMD_ResetSystemAck; case DevCmd.CMD_StartResDischarge: cmd_ack = DevCmd.CMD_StopResDischarge; default: return false; } @@ -105,4 +107,14 @@ boolean bl = sendCmdToDev(DevCmd.CMD_Start,DevCmd.CMD_StartDischarge, devId, battGroupNum); return new Response().set(1,bl,bl==true?"远程核容成功!":"远程核容失败!"); } //内阻测试 public Response startRes(int devId, int battGroupNum) { boolean bl = sendCmdToDev(DevCmd.CMD_Start,DevCmd.CMD_StartResDischarge, devId, battGroupNum); return new Response().set(1,bl,bl==true?"启动内阻测试成功!":"启动内阻测试失败!"); } //停止内阻测试 public Response stopRes(int devId, int battGroupNum) { boolean bl = sendCmdToDev(DevCmd.CMD_Stop,DevCmd.CMD_StopDischarge, devId, battGroupNum); return new Response().set(1,bl,bl==true?"停止内阻测试成功!":"停止内阻测试失败!"); } } src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -487,16 +487,16 @@ } //获取表中最大,最小,平均数据值 public CompareDto getBattCompareHis(String tableName, String columnName) { String sql="select max("+columnName+") as maxValue1,min("+columnName+") as minValue,avg("+columnName+") as avgValue"+" from "+tableName; String sql="select max("+columnName+") as maxData,min("+columnName+") as minData,avg("+columnName+") as avgData"+" from "+tableName; List<CompareDto> list = sqlExecuteService.executeQuery_call(sql, new CallBack() { @Override public List getResults(ResultSet rs) throws SQLException { List<CompareDto> list=new ArrayList<>(); while (rs.next()){ CompareDto data=new CompareDto(); data.setMaxValue(rs.getFloat("maxValue1")); data.setMinValue(rs.getFloat("minValue")); data.setAvgValue(rs.getFloat("avgValue")); data.setMaxData(rs.getFloat("maxData")); data.setMinData(rs.getFloat("minData")); data.setAvgData(rs.getFloat("avgData")); list.add(data); } return list; src/main/java/com/whyc/webSocket/RealTimeSocket.java
@@ -5,6 +5,7 @@ import com.whyc.dto.RealTimeDto; import com.whyc.dto.Response; import com.whyc.factory.BattCapFactory; import com.whyc.pojo.db_batt_testdata.BattresdataInf; import com.whyc.pojo.db_batt_testdata.BatttestdataInf; import com.whyc.pojo.db_ram_db.BattRtdata; import com.whyc.pojo.db_ram_db.BattRtstate; @@ -61,6 +62,9 @@ //单体信息 private static BattRtdataService rtdataService; //内阻测试信息 private static BattresdataInfService battresdataInfService; private volatile boolean runFlag = true; @@ -124,6 +128,11 @@ @Autowired public void setBattRtdataService(BattRtdataService rtdataService) { RealTimeSocket.rtdataService = rtdataService; } @Autowired public void setBattresdataInfService(BattresdataInfService battresdataInfService) { RealTimeSocket.battresdataInfService = battresdataInfService; } @@ -297,21 +306,9 @@ //获取内阻界面信息 private Response getResPage(RealTimeDto realDto) { Map<String, Object> map=new HashMap<>(); try { //实时获取单体信息 List<BattRtdata> rtdataList = rtdataService.getRtdataRealInfo(realDto.getBattgroupId()); map.put("rtdataList",rtdataList); return new Response().setII(1,true,map,"电压界面信息推送"); }catch (Exception e){ return new Response().set(1,false,"电压界面信息推送"); } } //获取电压界面信息 private Response getVolPage(RealTimeDto realDto) { Map<String, Object> map=new HashMap<>(); Float maxVol=0f; Float minVol=0f; Float avgVol=0f; Float maxData=0f; Float minData=0f; Float avgData=0f; try { //实时获取单体信息 List<BattRtdata> rtdataList = rtdataService.getRtdataRealInfo(realDto.getBattgroupId()); @@ -319,23 +316,61 @@ for(int i=0;i<rtdataList.size();i++) { BattRtdata battRtdata=rtdataList.get(i); if(i==0){ maxVol=battRtdata.getMonVol(); minVol=battRtdata.getMonVol(); maxData=battRtdata.getMonRes(); minData=battRtdata.getMonRes(); } if (battRtdata.getMonVol() >= maxVol) { maxVol = battRtdata.getMonVol(); if (battRtdata.getMonRes() >= maxData) { maxData = battRtdata.getMonRes(); } if (battRtdata.getMonVol() <= minVol) { minVol = battRtdata.getMonVol(); if (battRtdata.getMonRes() <= minData) { minData = battRtdata.getMonRes(); } avgVol += battRtdata.getMonVol(); avgData += battRtdata.getMonRes(); } avgVol=avgVol/rtdataList.size(); avgData=avgData/rtdataList.size(); } map.put("rtdataList",rtdataList); map.put("maxVol",maxVol); map.put("minVol",minVol); map.put("avgVol",avgVol); map.put("maxData",maxData); map.put("minData",minData); map.put("avgData",avgData); //上一次内阻测试数据 BattresdataInf rinfData= battresdataInfService.getLastTestData(realDto.getBattgroupId()); map.put("rinfData",rinfData); return new Response().setII(1,true,map,"内阻界面信息推送"); }catch (Exception e){ return new Response().set(1,false,"内阻界面信息推送"); } } //获取电压界面信息 private Response getVolPage(RealTimeDto realDto) { Map<String, Object> map=new HashMap<>(); Float maxData=0f; Float minData=0f; Float avgData=0f; try { //实时获取单体信息 List<BattRtdata> rtdataList = rtdataService.getRtdataRealInfo(realDto.getBattgroupId()); if(rtdataList!=null&&rtdataList.size()>0){ for(int i=0;i<rtdataList.size();i++) { BattRtdata battRtdata=rtdataList.get(i); if(i==0){ maxData=battRtdata.getMonVol(); minData=battRtdata.getMonVol(); } if (battRtdata.getMonVol() >= maxData) { maxData = battRtdata.getMonVol(); } if (battRtdata.getMonVol() <= minData) { minData = battRtdata.getMonVol(); } avgData += battRtdata.getMonVol(); } avgData=avgData/rtdataList.size(); } map.put("rtdataList",rtdataList); map.put("maxData",maxData); map.put("minData",minData); map.put("avgData",avgData); return new Response().setII(1,true,map,"电压界面信息推送"); }catch (Exception e){ return new Response().set(1,false,"电压界面信息推送");