whyclxw
2025-05-29 3f2c786d82463b073eb8ba83553fdcc67131cb89
实时页面内阻测试控制
7个文件已修改
4个文件已添加
296 ■■■■ 已修改文件
src/main/java/com/whyc/controller/DeviceSetparamController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/CmdDto/DevCmd.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Real/CompareDto.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BattresdataInfMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_batt_testdata/BattresdataId.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_batt_testdata/BattresdataInf.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattresdataInfService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BatttestdataInfService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/DeviceSetparamService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/SubTablePageInfoService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/RealTimeSocket.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,"电压界面信息推送");