whyclxw
6 天以前 9b85345450e2e194a84679bb6612f58a3124aee8
预警分析管理-电源告警
5个文件已修改
231 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/AlmParamController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_data_history/PwrdevHistorydataId.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattRealdataIdService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PwrdevAlarmService.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/SubTablePageInfoService.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/AlmParamController.java
@@ -138,9 +138,9 @@
    }
    @GetMapping("getBattHisRealInAlm")
    @ApiOperation("预警分析管理-主属性和分析属性")
    public Response getBattHisRealInAlm(@RequestParam Integer battgroupId,@RequestParam String startTime,@RequestParam(required = false) Integer almId) throws ParseException, InterruptedException {
        return battRealdataIdService.getBattHisRealInAlm(battgroupId,startTime,almId);
    @ApiOperation("预警分析管理-电池组主属性和分析属性")
    public Response getBattHisRealInAlm(@RequestParam Integer battgroupId,@RequestParam String startTime,@RequestParam(required = false) Integer almId,@RequestParam(required = false) Integer intervalTime) throws ParseException, InterruptedException {
        return battRealdataIdService.getBattHisRealInAlm(battgroupId,startTime,almId,intervalTime);
    }
    @PostMapping("getPwrtAlmAnalyse")
@@ -151,4 +151,9 @@
        return pwrdevAlarmService.getPwrtAlmAnalyse(dto);
    }
    @GetMapping("getPwrHisRealInAlm")
    @ApiOperation("预警分析管理-电源主属性和分析属性")
    public Response getPwrHisRealInAlm(@RequestParam Integer powerId,@RequestParam String startTime,@RequestParam(required = false) Integer almId,@RequestParam(required = false) Integer intervalTime) throws ParseException, InterruptedException {
        return pwrdevAlarmService.getPwrHisRealInAlm(powerId,startTime,almId,intervalTime);
    }
}
src/main/java/com/whyc/pojo/db_data_history/PwrdevHistorydataId.java
@@ -40,6 +40,13 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    private Date recordDatetime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    @TableField(exist = false)
    private Date recordDatetime1;
    @TableField(exist = false)
    private String tableName;
    @ApiModelProperty(value = "编号")
    private Integer recordNum;
src/main/java/com/whyc/service/BattRealdataIdService.java
@@ -227,13 +227,18 @@
        return new Response().set(1, dataListSorted);
    }
    //电池告警点击具体告警信息查看从告警开始时间到现在的历史实时数据
    public Response getBattHisRealInAlm(Integer battgroupId, String startTime, Integer almId) throws ParseException, InterruptedException {
    public Response getBattHisRealInAlm(Integer battgroupId, String startTime, Integer almId,Integer intervalTime) throws ParseException, InterruptedException {
        //获取告警almId对应的分析配置属性值
        AlmAnalysisParam almAnalysisParam= almAnalysisParamService.getAnalysisParam(almId);
        List<RealDateDTO> dataList = new LinkedList<>();
        Integer cycleTime=0;
        //获取预警分析周期阈值
        AppParam appParam = appParamService.getAlarmAnalysisCycle();
        Integer cycleTime=appParam.getParamValue().intValue();
        if(intervalTime==null){
            AppParam appParam = appParamService.getAlarmAnalysisCycle();
            cycleTime=appParam.getParamValue().intValue();
        }else{
            cycleTime=intervalTime;
        }
        Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(startTime,1),cycleTime*(-1));
        //获取cyscleDate到现在所有的历史实时数据
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,new Date());
@@ -262,6 +267,5 @@
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(RealDateDTO::getRecordTime)).collect(Collectors.toList());
        return new Response().setIII(1,true, dataListSorted,almAnalysisParam,"电池告警点击具体告警信息查看从告警开始时间到现在的历史实时数据");
    }
}
src/main/java/com/whyc/service/PwrdevAlarmService.java
@@ -10,26 +10,44 @@
import com.whyc.dto.AlarmDto;
import com.whyc.dto.Param.AlmAnalyseDto;
import com.whyc.dto.Real.AlmDto;
import com.whyc.dto.Real.RealDateDTO;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.PwrdevAlarmMapper;
import com.whyc.pojo.db_alarm.DevalarmData;
import com.whyc.pojo.db_data_history.BattRealdataId;
import com.whyc.pojo.db_data_history.PwrdevHistorydataId;
import com.whyc.pojo.db_param.AlmAnalysisParam;
import com.whyc.pojo.db_param.AppParam;
import com.whyc.pojo.db_pwrdev_alarm.PwrdevAlarm;
import com.whyc.pojo.db_pwrdev_alarm.PwrdevAlarmParam;
import com.whyc.pojo.web_site.AlarmInspection;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
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 PwrdevAlarmService {
    @Autowired(required = false)
    private PwrdevAlarmMapper mapper;
    @Autowired
    private AppParamService appParamService;
    @Autowired
    private AlmAnalysisParamService almAnalysisParamService;
    @Autowired
    private SubTablePageInfoService subTablePageInfoService;
    //获取电源实时告警信息
    public Response getPwrAlmReal(AlmDto almDto) {
        PageHelper.startPage(almDto.getPageNum(),almDto.getPageSize());
@@ -94,4 +112,46 @@
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list!=null,pageInfo,"电源告警分析");
    }
    //预警分析管理-电源主属性和分析属性
    public Response getPwrHisRealInAlm(Integer powerId, String startTime, Integer almId,Integer intervalTime) throws ParseException, InterruptedException {
        //获取告警almId对应的分析配置属性值
        AlmAnalysisParam almAnalysisParam= almAnalysisParamService.getAnalysisParam(almId);
        List<PwrdevHistorydataId> dataList = new LinkedList<>();
        Integer cycleTime=0;
        //获取预警分析周期阈值
        if(intervalTime==null){
            AppParam appParam = appParamService.getAlarmAnalysisCycle();
            cycleTime=appParam.getParamValue().intValue();
        }else{
            cycleTime=intervalTime;
        }
        Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(startTime,1),cycleTime*(-1));
        //获取cyscleDate到现在所有的历史实时数据
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,new Date());
        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;
                PwrdevHistorydataId pwrHis = new PwrdevHistorydataId();
                pwrHis.setRecordDatetime(monthTimeList.get(finalII).get(0));
                pwrHis.setRecordDatetime1(monthTimeList.get(finalII).get(1));
                String table = powerId + "_" + ThreadLocalUtil.format(pwrHis.getRecordDatetime(),2);
                pwrHis.setTableName(table);//表名时间格式部分
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
                List<PwrdevHistorydataId> list = new ArrayList();
                if (tableNum > 0) {
                    list = subTablePageInfoService.getPwrHisRealInAlm(pwrHis);
                }
                dataList.addAll(list);
                latch.countDown();
            });
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(PwrdevHistorydataId::getRecordDatetime)).collect(Collectors.toList());
        return new Response().setIII(1,true, dataListSorted,almAnalysisParam,"预警分析管理-电源主属性和分析属性");
    }
}
src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -717,7 +717,7 @@
        });
        return list;
    }
    //判断历史实时表是否存在
    //判断电池组历史实时表是否存在
    public int judgeTable_realdata( String table){
        String sql="select count(*) as tableNum " +
                "        from INFORMATION_SCHEMA.TABLES " +
@@ -742,7 +742,31 @@
        }
        return tableNum;
    }
    //判断电源历史实时表是否存在
    public int judgeTable_pwrhis( String table){
        String sql="select count(*) as tableNum " +
                "        from INFORMATION_SCHEMA.TABLES " +
                "        where TABLE_SCHEMA = 'db_data_history' " +
                "          and TABLE_NAME = 'tb_pwrdev_historydata_"+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> getBattRealDataHis(BattRealdataId realdata, int granularity,Integer maxRecordNum,Integer minRecordNum) {
        String sql=" select record_time, group_vol, online_vol,group_curr, mon_vol, mon_tmp, mon_res, mon_num,record_num  " +
@@ -801,6 +825,113 @@
        });
        return list;
    }
    //电源数据历史实时处理(预警分析)
    public List<PwrdevHistorydataId> getPwrHisRealInAlm(PwrdevHistorydataId pwrHis) {
        String sql=" select record_time, group_vol, online_vol,group_curr, mon_vol, mon_tmp, mon_res, mon_num,record_num  " +
                "               from db_data_history.tb_batt_realdata_"+pwrHis.getTableName()+" " +
                "               where record_time >= '"+ThreadLocalUtil.format(pwrHis.getRecordDatetime(),1)+"' " +
                "               and record_time <= '"+ThreadLocalUtil.format(pwrHis.getRecordDatetime1(),1)+"' " +
                "               order by record_time asc,mon_num asc";
        List<PwrdevHistorydataId> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                List<PwrdevHistorydataId> list=new ArrayList<>();
                while (rs.next()){
                    PwrdevHistorydataId data=new PwrdevHistorydataId();
                    data.setRecordDatetime(rs.getTimestamp("record_datetime"));
                    data.setAcin1Vola(rs.getFloat("acin1_vola"));
                    data.setAcin1Volb(rs.getFloat("acin1_volb"));
                    data.setAcin1Volc(rs.getFloat("acin1_volc"));
                    data.setAcin2Vola(rs.getFloat("acin2_vola"));
                    data.setAcin2Volb(rs.getFloat("acin2_volb"));
                    data.setAcin2Volc(rs.getFloat("acin2_volc"));
                    data.setAcoutVola(rs.getFloat("acout_vola"));
                    data.setAcoutVolb(rs.getFloat("acout_volb"));
                    data.setAcoutVolc(rs.getFloat("acout_volc"));
                    data.setAcoutCurra(rs.getFloat("acout_curra"));
                    data.setAcoutCurrb(rs.getFloat("acout_currb"));
                    data.setAcoutCurrc(rs.getFloat("acout_currc"));
                    data.setDcoutVol(rs.getFloat("dcout_vol"));
                    data.setDcoutCurr(rs.getFloat("dcout_curr"));
                    data.setBattgroup1Vol(rs.getFloat("battgroup1_vol"));
                    data.setBattgroup1Curr(rs.getFloat("battgroup1_curr"));
                    data.setBattgroup2Vol(rs.getFloat("battgroup2_vol"));
                    data.setBattgroup2Curr(rs.getFloat("battgroup2_curr"));
                    data.setTemprature(rs.getFloat("temprature"));
                    data.setMOutputvol(rs.getFloat("m_outputvol"));
                    data.setM1Outcurr(rs.getFloat("m1_outcurr"));
                    data.setM2Outcurr(rs.getFloat("m2_outcurr"));
                    data.setM3Outcurr(rs.getFloat("m3_outcurr"));
                    data.setM4Outcurr(rs.getFloat("m4_outcurr"));
                    data.setM5Outcurr(rs.getFloat("m5_outcurr"));
                    data.setM6Outcurr(rs.getFloat("m6_outcurr"));
                    data.setM7Outcurr(rs.getFloat("m7_outcurr"));
                    data.setM8Outcurr(rs.getFloat("m8_outcurr"));
                    data.setM9Outcurr(rs.getFloat("m9_outcurr"));
                    data.setM10Outcurr(rs.getFloat("m10_outcurr"));
                    data.setM11Outcurr(rs.getFloat("m11_outcurr"));
                    data.setM12Outcurr(rs.getFloat("m12_outcurr"));
                    data.setM13Outcurr(rs.getFloat("m13_outcurr"));
                    data.setM14Outcurr(rs.getFloat("m14_outcurr"));
                    data.setM15Outcurr(rs.getFloat("m15_outcurr"));
                    data.setM16Outcurr(rs.getFloat("m16_outcurr"));
                    data.setAcin1Curra(rs.getFloat("acin1_curra"));
                    data.setAcin1Currb(rs.getFloat("acin1_currb"));
                    data.setAcin1Currc(rs.getFloat("acin1_currc"));
                    data.setLoaderCurr(rs.getFloat("loader_curr"));
                    data.setBattgroup1Ah(rs.getFloat("battgroup1_ah"));
                    data.setBattgroup1Temp(rs.getFloat("battgroup1_temp"));
                    data.setBattgroup2Ah(rs.getFloat("battgroup2_ah"));
                    data.setBattgroup2Temp(rs.getFloat("battgroup2_temp"));
                    data.setAcdcmTemp(rs.getFloat("acdcm_temp"));
                    data.setM1OutVol(rs.getFloat("m1_out_vol"));
                    data.setM2OutVol(rs.getFloat("m2_out_vol"));
                    data.setM3OutVol(rs.getFloat("m3_out_vol"));
                    data.setM4OutVol(rs.getFloat("m4_out_vol"));
                    data.setM5OutVol(rs.getFloat("m5_out_vol"));
                    data.setM6OutVol(rs.getFloat("m6_out_vol"));
                    data.setM7OutVol(rs.getFloat("m7_out_vol"));
                    data.setM8OutVol(rs.getFloat("m8_out_vol"));
                    data.setM9OutVol(rs.getFloat("m9_out_vol"));
                    data.setM10OutVol(rs.getFloat("m10_out_vol"));
                    data.setM11OutVol(rs.getFloat("m11_out_vol"));
                    data.setM12OutVol(rs.getFloat("m12_out_vol"));
                    data.setM13OutVol(rs.getFloat("m13_out_vol"));
                    data.setM14OutVol(rs.getFloat("m14_out_vol"));
                    data.setM15OutVol(rs.getFloat("m15_out_vol"));
                    data.setM16OutVol(rs.getFloat("m16_out_vol"));
                    data.setUseracin1Vola(rs.getFloat("useracin1_vola"));
                    data.setUseracin1Volb(rs.getFloat("useracin1_volb"));
                    data.setUseracin1Volc(rs.getFloat("useracin1_volc"));
                    data.setUseracin1Curra(rs.getFloat("useracin1_curra"));
                    data.setUseracin1Currb(rs.getFloat("useracin1_currb"));
                    data.setUseracin1Currc(rs.getFloat("useracin1_currc"));
                    data.setUseracin1Freq(rs.getFloat("useracin1_freq"));
                    data.setUseracin2Vola(rs.getFloat("useracin2_vola"));
                    data.setUseracin2Volb(rs.getFloat("useracin2_volb"));
                    data.setUseracin2Volc(rs.getFloat("useracin2_volc"));
                    data.setUseracin2Curra(rs.getFloat("useracin2_curra"));
                    data.setUseracin2Currb(rs.getFloat("useracin2_currb"));
                    data.setUseracin2Currc(rs.getFloat("useracin2_currc"));
                    data.setUseracin2Freq(rs.getFloat("useracin2_freq"));
                    data.setMTemper1(rs.getFloat("m_temper1"));
                    data.setMTemper2(rs.getFloat("m_temper2"));
                    data.setMTemper3(rs.getFloat("m_temper3"));
                    data.setMHumidity1(rs.getFloat("m_humidity1"));
                    data.setMHumidity2(rs.getFloat("m_humidity2"));
                    data.setMHumidity3(rs.getFloat("m_humidity3"));
                    list.add(data);
                }
                return list;
            }
        });
        return list;
    }
    //获取指定时间段内最大最小recordNum确保数据的完整
    public List getMaxAndMinRecordNum(BattRealdataId realdata) {
        String sql="select max(record_num) as maxRecordNum,min(record_num) as minRecordNum " +