whyclxw
3 小时以前 e196f42e9a977c0b2f8452dce875b110fb76e92f
实时数据统计曲线-核容设备初稿
1个文件已添加
4个文件已修改
136 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/RealDataStaticController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/RealDataStatic/ResRealDataHr.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/RealDataStatic/ResRealDataMon.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattRealdataIdService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/SubTablePageInfoService.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/RealDataStaticController.java
@@ -30,7 +30,7 @@
    @ApiOperation(value = "核容设备")
    @PostMapping("getSticRealHrData")
    public Response getSticRealHrData(@RequestBody SticRealDataAc stic) throws ParseException, InterruptedException {
    public Response getSticRealHrData(@RequestBody SticRealDataBatt stic) throws ParseException, InterruptedException {
        return battRealdataIdService.getSticRealHrData(stic);
    }
src/main/java/com/whyc/dto/RealDataStatic/ResRealDataHr.java
New file
@@ -0,0 +1,20 @@
package com.whyc.dto.RealDataStatic;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class ResRealDataHr {
    private Integer recordNum;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date recordTime;
    private Float onlineVol;
    private Float groupVol;
    private Float groupCurr;
    private Float groupTmp;
    private Float hjqTmp;
    private Float devConresist;
    private Float devCondvoldp;
}
src/main/java/com/whyc/dto/RealDataStatic/ResRealDataMon.java
@@ -8,7 +8,6 @@
@Data
public class ResRealDataMon {
    private Integer battgroupId;
    private Integer recordNum;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date recordTime;
src/main/java/com/whyc/service/BattRealdataIdService.java
@@ -1,10 +1,7 @@
package com.whyc.service;
import com.whyc.dto.Real.*;
import com.whyc.dto.RealDataStatic.ResRealDataAc;
import com.whyc.dto.RealDataStatic.ResRealDataMon;
import com.whyc.dto.RealDataStatic.SticRealDataAc;
import com.whyc.dto.RealDataStatic.SticRealDataBatt;
import com.whyc.dto.RealDataStatic.*;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.CommonMapper;
@@ -280,19 +277,19 @@
        return new Response().setIII(1, dataListSorted!=null,dataListSorted,map,"历史实时查询");
    }
    //实时数据统计曲线--核容设备
    public Response getSticRealHrData(SticRealDataAc stic) throws ParseException, InterruptedException {
        Integer granularity=5;//默认值
    public Response getSticRealHrData(SticRealDataBatt stic) throws ParseException, InterruptedException {
        Integer granularity=2;//默认值
        Map<String,Date> startAndEndTime=DateUtil.getStartAndEndTime(stic.getSticTime());
        //获取两个时间分割多少张表
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(startAndEndTime.get("startTime"),startAndEndTime.get("endTime"));
        List<ResRealDataAc> dataList = new LinkedList<>();
        List<ResRealDataHr> dataList = new LinkedList<>();
        Map<String, Map<String,List<String>>> allTimeMap=new HashMap<>();
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
        for (int i = 0; i < monthTimeList.size(); i++) {
            int finalI = i;
            Integer finalGranularity = granularity;
            Map<String,List<String>> propertyInfo=stic.getPropertyInfo();
           List<String> propertyList=stic.getPropertyList();
            pool.execute(() -> {
                int finalII = finalI;
                Date recordDatetime=monthTimeList.get(finalII).get(0);
@@ -302,7 +299,7 @@
                String tableName="db_data_history.tb_batt_realdata_"+table;
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_realdata(table);
                List<ResRealDataAc> list = new ArrayList();
                List<ResRealDataHr> list = new ArrayList();
                Map<String,List<String>> timeMap=new HashMap<>();
                if (tableNum > 0) {
                    //获取指定时间段内最大最小recordNum确保数据的完整
@@ -313,23 +310,21 @@
                        maxRecordNum=(Integer)recordNums.get(0);
                        minRecordNum=(Integer)recordNums.get(1);
                    }
                    list = subTablePageInfoService.getSticRealHrData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum,propertyInfo);
                    list = subTablePageInfoService.getSticRealHrData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum);
                    //所有属性的异动点
                    List<Integer> allChangeNums=new ArrayList<>();
                    if(propertyList!=null){
                        for (String value:propertyList) {
                    //获取指定时间取出每个参数的异动次数和异动的recordNum
                    for (Map.Entry<String, List<String>> entry : propertyInfo.entrySet()) {
                        String param = entry.getKey();
                        List<String> valueList = entry.getValue();
                        for (String value : valueList) {
                            float upperLimit=550;
                            float lowerLimit=50;
                            float upperLimit=3.5f;
                            float lowerLimit=2.0f;
                            //查询电源字段的异动
                            List changes= subTablePageInfoService.getBattChangesRecordNum(tableName,recordDatetime,recordDatetime1,value,upperLimit,lowerLimit);
                            List<Integer> numList= (List<Integer>) changes.get(0);//record_num的集合
                            List<String> timeList= (List<String>) changes.get(1);//record_datetime的集合
                            if(numList!=null&&numList.size()>0){
                                allChangeNums.addAll(numList);
                            }
                            List<String> timeList= (List<String>) changes.get(1);//record_datetime的集合
                            //存放每个参数的异动时间点
                            timeMap.put(value,timeList);
                        }
@@ -337,7 +332,7 @@
                    //只有存在异动点采取查询异动数据
                    if(allChangeNums.size()>0){
                        //查询大类参数下所有异动recordNum的记录之和
                        List<ResRealDataAc> paramList=subTablePageInfoService.getBattPropertyChangesByRecordNum(tableName,recordDatetime,recordDatetime1,allChangeNums,propertyInfo);
                        List<ResRealDataHr> paramList=subTablePageInfoService.getHrPropertyChangesByRecordNum(tableName,recordDatetime,recordDatetime1,allChangeNums);
                        list.addAll(paramList);
                    }
                }
@@ -348,10 +343,10 @@
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List<ResRealDataAc> uniqueList = dataList.stream()
        List<ResRealDataHr> uniqueList = dataList.stream()
                .distinct()
                .collect(Collectors.toList());
        List dataListSorted = uniqueList.stream().sorted(Comparator.comparing(ResRealDataAc::getRecordNum)).collect(Collectors.toList());
        List dataListSorted = uniqueList.stream().sorted(Comparator.comparing(ResRealDataHr::getRecordNum)).collect(Collectors.toList());
        //所有异动点合并去重
        Map<String, List<String>> mergedMap =ActionUtil.getMergeMap(allTimeMap);
        return new Response().setIII(1,dataList.size()>0,dataListSorted,mergedMap,"实时数据统计曲线--核容设备");
src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -7,6 +7,7 @@
import com.whyc.dto.Real.*;
import com.whyc.dto.RealDataStatic.MonDataDto;
import com.whyc.dto.RealDataStatic.ResRealDataAc;
import com.whyc.dto.RealDataStatic.ResRealDataHr;
import com.whyc.dto.RealDataStatic.ResRealDataMon;
import com.whyc.dto.Statistic.ComPareChangeCurve;
import com.whyc.dto.Statistic.ComPareChart;
@@ -981,35 +982,28 @@
        return list;
    }
    //实时数据统计曲线--核容设备
    public List<ResRealDataAc> getSticRealHrData(String tableName, Integer granularity,Date recordDatetime,Date recordDatetime1, Integer maxRecordNum, Integer minRecordNum, Map<String, List<String>> propertyInfo) {
        String  propertyStr = propertyInfo.values().stream()
                .flatMap(List::stream)
                .collect(Collectors.joining(","));
        String sql=" select distinct record_time,record_num, "+propertyStr+" "+
    public List<ResRealDataHr> getSticRealHrData(String tableName, Integer granularity, Date recordDatetime, Date recordDatetime1, Integer maxRecordNum, Integer minRecordNum) {
        String sql=" select distinct record_time,record_num,online_vol,group_vol,group_curr,group_tmp,hjq_tmp,dev_conresist,dev_condvoldp "+
                "               from "+tableName+" " +
                "               where record_time >= '"+ThreadLocalUtil.format(recordDatetime,1)+"' " +
                "               and record_time <= '"+ThreadLocalUtil.format(recordDatetime1,1)+"' "+
                "               and (record_num-"+minRecordNum+")%"+granularity+"=0 or record_num="+maxRecordNum+" or record_num="+minRecordNum ;
        List<ResRealDataAc> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
        sql+=" order by record_num asc";
        List<ResRealDataHr> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                List<ResRealDataAc> list=new ArrayList<>();
                List<ResRealDataHr> list=new ArrayList<>();
                while (rs.next()){
                    ResRealDataAc data=new ResRealDataAc();
                    data.setRecordDatetime(rs.getTimestamp("record_time"));
                    ResRealDataHr data=new ResRealDataHr();
                    data.setRecordTime(rs.getTimestamp("record_time"));
                    data.setRecordNum(rs.getInt("record_num"));
                    Map<String,Map<String,Float>>dataMap=new HashMap<>();
                    for (Map.Entry<String, List<String>> entry : propertyInfo.entrySet()) {
                        String key = entry.getKey();
                        List<String> valueList = entry.getValue();
                        Map<String,Float> propertyMap=new HashMap<>();
                        for (String value : valueList) {
                            Float propertyValue = rs.getFloat(value);
                            propertyMap.put(value,propertyValue);
                        }
                        dataMap.put(key,propertyMap);
                    }
                    data.setPropertyInfo(dataMap);
                    data.setOnlineVol(rs.getFloat("online_vol"));
                    data.setGroupVol(rs.getFloat("group_vol"));
                    data.setGroupCurr(rs.getFloat("group_curr"));
                    data.setGroupTmp(rs.getFloat("group_tmp"));
                    data.setHjqTmp(rs.getFloat("hjq_tmp"));
                    data.setDevConresist(rs.getFloat("dev_conresist"));
                    data.setDevCondvoldp(rs.getFloat("dev_condvoldp"));
                    list.add(data);
                }
                return list;
@@ -1017,7 +1011,45 @@
        });
        return list;
    }
    //查询核容设备字段的异动
    public List<ResRealDataHr> getHrPropertyChangesByRecordNum(String tableName, Date recordDatetime, Date recordDatetime1, List<Integer> allChangeNums) {
        String sql=" select  distinct record_time,record_num,online_vol,group_vol,group_curr,group_tmp,hjq_tmp,dev_conresist,dev_condvoldp "+
                " from "+tableName+" where record_time>='"+ActionUtil.sdf.format(recordDatetime)+"'" +
                "                    and record_time<='"+ActionUtil.sdf.format(recordDatetime1)+"'";
        if (allChangeNums.size() > 0) {
            //去除重复项
            List<Integer> uniqueList = allChangeNums.stream()
                    .distinct()
                    .collect(Collectors.toList());
            //拼接生成sql
            String changeNumsStr = uniqueList.stream()
                    .map(String::valueOf)
                    .collect(Collectors.joining(","));
            sql += " and record_num in (" + changeNumsStr + ")";
        }
        sql += " order by record_num asc  ";
        List<ResRealDataHr> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                List<ResRealDataHr> list=new ArrayList<>();
                while (rs.next()){
                    ResRealDataHr data=new ResRealDataHr();
                    data.setRecordTime(rs.getTimestamp("record_time"));
                    data.setRecordNum(rs.getInt("record_num"));
                    data.setOnlineVol(rs.getFloat("online_vol"));
                    data.setGroupVol(rs.getFloat("group_vol"));
                    data.setGroupCurr(rs.getFloat("group_curr"));
                    data.setGroupTmp(rs.getFloat("group_tmp"));
                    data.setHjqTmp(rs.getFloat("hjq_tmp"));
                    data.setDevConresist(rs.getFloat("dev_conresist"));
                    data.setDevCondvoldp(rs.getFloat("dev_condvoldp"));
                    list.add(data);
                }
                return list;
            }
        });
        return list;
    }
    //实时数据统计曲线--蓄电池组
    public List<ResRealDataMon> getSticRealMonData(String tableName, Integer granularity, Date recordDatetime, Date recordDatetime1, Integer maxRecordNum, Integer minRecordNum) {
        String sql=" select distinct battgroup_id,record_time,record_num,mon_num,mon_vol,mon_tmp,mon_res,mon_jh_curr "+
@@ -1040,7 +1072,6 @@
                    ResRealDataMon data = map.get(key);
                    if (data == null) {
                        data = new ResRealDataMon();
                        data.setBattgroupId(battgroupId);
                        data.setRecordTime(recordTime);
                        data.setRecordNum(recordNum);
                        data.setMonList(new ArrayList<>());
@@ -1117,7 +1148,6 @@
                    ResRealDataMon data = map.get(key);
                    if (data == null) {
                        data = new ResRealDataMon();
                        data.setBattgroupId(battgroupId);
                        data.setRecordTime(recordTime);
                        data.setRecordNum(recordNum);
                        data.setMonList(new ArrayList<>());