package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.constant.DevAlarmEnum; import com.whyc.constant.PowerAlarmEnum; 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.*; 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()); List list=mapper.getPwrAlmReal(almDto); list.forEach(data->{ data.setAlmName(PowerAlarmEnum.getValue(data.getAlmId())); }); PageInfo pageInfo=new PageInfo(list); return new Response().setII(1,list!=null,pageInfo,"获取电源实时告警信息"); } //确认电源告警 public Response updatePwrConfrim(Integer num) { UpdateWrapper wrapper = new UpdateWrapper<>(); wrapper.set("alm_is_confirmed",1); wrapper.set("alm_confirmed_time",new SimpleDateFormat(ActionUtil.time_yyyyMMddHHmmss).format(new Date())); // 通过num修改 wrapper.eq("num",num); int flag=mapper.update((PwrdevAlarm) ActionUtil.objeNull,wrapper); return new Response().set(1,flag>0,flag>0?"确认成功":"确认失败"); } //获取一级未处理实时告警数 public Integer getPwrAlmNum(Integer powerId) { QueryWrapper wrapper=new QueryWrapper(); wrapper.eq("power_id",powerId); wrapper.eq("alm_is_confirmed",0); wrapper.eq("alm_level",1); List list=mapper.selectList(wrapper); return list!=null?list.size():0; } //获取电源告警类型(下拉) public Response getPwrAlmIdType() { Map> map= PowerAlarmEnum.getOpInfo(); return new Response().setII(1,true,map,"获取电源告警类型(下拉)"); } public List getListGreatThan(Long id) { List listGreatThan = mapper.getListGreatThan(id); Date now = new Date(); listGreatThan.forEach(data->{ data.setType(1); data.setIsExist(1); data.setCreateTime(now); }); return listGreatThan; } public List getNumListInDB(List powerAlarmNumList) { QueryWrapper query = Wrappers.query(); query.select("num"); query.in("num",powerAlarmNumList); return mapper.selectList(query).stream().map(PwrdevAlarm::getNum).collect(Collectors.toList()); } public List getListByUserId(Integer userId,Integer alarmLevel) { return mapper.getListByUserId(userId,alarmLevel); } //预警分析管理-电源告警 public Response getPwrtAlmAnalyse(AlmAnalyseDto dto) { PageHelper .startPage(dto.getPageNum(),dto.getPageSize()); List list=mapper.getPwrtAlmAnalyse(dto); 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 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> 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 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,"预警分析管理-电源主属性和分析属性"); } }