whyclxw
2025-06-06 8dd6db3f6fd9d92ba8c26dbd91f8764f4623e3e0
历史实时测试数据
4个文件已修改
1个文件已添加
165 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/RealContoller.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Real/RealDateDTO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_data_history/BattRealdataId.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattRealdataIdService.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/SubTablePageInfoService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/RealContoller.java
@@ -13,6 +13,8 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
@RestController
@Api(tags = "实时页面")
@RequestMapping("real")
@@ -52,10 +54,18 @@
    public Response getBattTinf(@RequestParam Integer battgroupId){
        return tinfService.getBattTinf(battgroupId);
    }
    @ApiOperation(value = "历史测试记录具体某一次放电数据详情")
    @GetMapping("getTinfDataWithTestRecordCount")
    public Response getTinfDataWithTestRecordCount(@RequestParam Integer battgroupId,@RequestParam Integer testRecordCount
            ,@RequestParam Integer recordNum,@RequestParam Integer granularity){
        return tdataIdService.getTinfDataWithTestRecordCount(battgroupId,testRecordCount,recordNum,granularity);
    }
    @ApiOperation(value = "历史实时查询")
    @GetMapping("getBattRealDataHis")
    public Response getBattRealDataHis(@RequestParam Integer battgroupId,@RequestParam Integer granularity
            ,@RequestParam String startTime,@RequestParam String  endTime) throws ParseException, InterruptedException {
        return battRealdataIdService.getBattRealDataHis(battgroupId,granularity,startTime,endTime);
    }
}
src/main/java/com/whyc/dto/Real/RealDateDTO.java
New file
@@ -0,0 +1,30 @@
package com.whyc.dto.Real;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RealDateDTO {
    @ApiModelProperty(value = "记录时间")
    private Date recordTime;
    @ApiModelProperty(value = "组端电压")
    private Float groupVol;
    @ApiModelProperty(value = "在线电压")
    private Float onlineVol;
    @ApiModelProperty(value = "组端电流")
    private Float groupCurr;
    @ApiModelProperty(value = "单体电压")
    private Float monVol;
    @ApiModelProperty(value = "单体温度")
    private Float monTmp;
    @ApiModelProperty(value = "单体内阻")
    private Float monRes;
    @ApiModelProperty(value = "单体编号")
    private Integer monNum;
}
src/main/java/com/whyc/pojo/db_data_history/BattRealdataId.java
@@ -1,6 +1,7 @@
package com.whyc.pojo.db_data_history;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -38,6 +39,11 @@
    @ApiModelProperty(value = "记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    private Date recordTime;
    @ApiModelProperty(value = "记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    @TableField(exist = false)
    private Date recordTime1;
    @ApiModelProperty(value = "组端电压")
    private Float groupVol;
@@ -90,5 +96,8 @@
    @ApiModelProperty(value = "备注")
    private String note;
    @TableField(exist = false)
    private String tableName;
}
src/main/java/com/whyc/service/BattRealdataIdService.java
@@ -3,20 +3,28 @@
import com.whyc.dto.Real.BattHisRealDto;
import com.whyc.dto.Real.CompareDto;
import com.whyc.dto.Real.QuarterDto;
import com.whyc.dto.Real.RealDateDTO;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.CommonMapper;
import com.whyc.pojo.db_batt_testdata.BattresdataId;
import com.whyc.pojo.db_batt_testdata.BattresdataInf;
import com.whyc.pojo.db_data_history.BattRealdataId;
import com.whyc.pojo.db_station.BattInf;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static java.lang.Thread.sleep;
@Service
public class BattRealdataIdService {
@@ -163,4 +171,36 @@
        List<BattHisRealDto> datalist=subTablePageInfoService.getHalfHourBattDevData(tableName,granularity);
        return new Response().setII(1,datalist.size()>0,datalist,"获取半小时内核容设备信息");
    }
    //历史实时数据
    public Response getBattRealDataHis(Integer battgroupId, Integer granularity,String startTime,String endTime) throws ParseException, InterruptedException {
        List<RealDateDTO> dataList = new LinkedList<>();
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(ThreadLocalUtil.parse(startTime,1), ThreadLocalUtil.parse(endTime,1));
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
        for (int i = 0; i < monthTimeList.size(); i++) {
            int finalI = i;
            pool.execute(() -> {
                int finalII = finalI;
                BattRealdataId realdata = new BattRealdataId();
                realdata.setRecordTime(monthTimeList.get(finalII).get(0));
                realdata.setRecordTime1(monthTimeList.get(finalII).get(1));
                String table = battgroupId + "_" + ThreadLocalUtil.format(realdata.getRecordTime(),2);
                realdata.setTableName(table);//表名时间格式部分
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_realdata(table);
                List<RealDateDTO> list = new ArrayList();
                if (tableNum > 0) {
                    list = subTablePageInfoService.serchByCondition2(realdata,granularity);
                }
                dataList.addAll(list);
                latch.countDown();
            });
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(RealDateDTO::getRecordTime)).collect(Collectors.toList());
        return new Response().set(1, dataListSorted);
    }
}
src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -688,4 +688,68 @@
        });
        return list;
    }
    //判断历史实时表是否存在
    public int judgeTable_realdata( String table){
        String sql="select count(*) as tableNum " +
                "        from INFORMATION_SCHEMA.TABLES " +
                "        where TABLE_SCHEMA = 'db_data_history' " +
                "          and TABLE_NAME = 'tb_batt_realdata_"+table+"'";
        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                LinkedList<Object> temp = new LinkedList<>();
                try {
                    while (rs.next())
                        temp.add(rs.getInt("tableNum"));
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                return temp;
            }
        });
        int tableNum =0;
        if(list!=null){
            tableNum= (int) list.get(0);
        }
        return tableNum;
    }
    public List<RealDateDTO> serchByCondition2(BattRealdataId realdata, int granularity) {
        String sql=" select record_time, " +
                "               group_vol, " +
                "               online_vol, " +
                "               group_curr, " +
                "               mon_vol, " +
                "               mon_tmp, " +
                "               mon_res, " +
                "               mon_num " +
                "        from (select a.*, (@i:= @i+1) as number " +
                "              from (select * " +
                "                    from db_data_history.tb_batt_realdata_"+realdata.getTableName()+" " +
                "                    where record_time >= '"+ThreadLocalUtil.format(realdata.getRecordTime(),1)+"' " +
                "                      and record_time <= '"+ThreadLocalUtil.format(realdata.getRecordTime1(),1)+"' ) a, " +
                "                   (select @i:=0) b) c " +
                "        where c.number%"+granularity+"=0";
        List<RealDateDTO> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                List<RealDateDTO> list=new ArrayList<>();
                while (rs.next()){
                    RealDateDTO ph=new RealDateDTO();
                    ph.setRecordTime(rs.getTimestamp("record_time"));
                    ph.setGroupVol(rs.getFloat("group_vol"));
                    ph.setOnlineVol(rs.getFloat("online_vol"));
                    ph.setGroupCurr(rs.getFloat("group_curr"));
                    ph.setMonVol(rs.getFloat("mon_vol"));
                    ph.setMonTmp(rs.getFloat("mon_tmp"));
                    ph.setMonRes(rs.getFloat("mon_res"));
                    ph.setMonNum(rs.getInt("mon_num"));
                    list.add(ph);
                }
                return list;
            }
        });
        return list;
    }
}