| | |
| | | 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.Date; |
| | | import java.util.List; |
| | | 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<PwrdevAlarm> 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,"获取电源实时告警信息"); |
| | | } |
| | |
| | | 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<DevalarmData> list=mapper.selectList(wrapper); |
| | | return list!=null?list.size():0; |
| | | } |
| | | //获取电源告警类型(下拉) |
| | | public Response getPwrAlmIdType() { |
| | | Map<String,Map<Integer,String>> map= PowerAlarmEnum.getOpInfo(); |
| | | return new Response().setII(1,true,map,"获取电源告警类型(下拉)"); |
| | | } |
| | | |
| | | public List<AlarmInspection> getListGreatThan(Long id) { |
| | | List<AlarmInspection> listGreatThan = mapper.getListGreatThan(id); |
| | | Date now = new Date(); |
| | | listGreatThan.forEach(data->{ |
| | | data.setType(1); |
| | | data.setIsExist(1); |
| | | data.setCreateTime(now); |
| | | }); |
| | | return listGreatThan; |
| | | } |
| | | |
| | | public List<Long> getNumListInDB(List<Long> powerAlarmNumList) { |
| | | QueryWrapper<PwrdevAlarm> query = Wrappers.query(); |
| | | query.select("num"); |
| | | query.in("num",powerAlarmNumList); |
| | | return mapper.selectList(query).stream().map(PwrdevAlarm::getNum).collect(Collectors.toList()); |
| | | } |
| | | |
| | | public List<AlarmDto> getListByUserId(Integer userId,Integer alarmLevel) { |
| | | return mapper.getListByUserId(userId,alarmLevel); |
| | | } |
| | | |
| | | //预警分析管理-电源告警 |
| | | public Response getPwrtAlmAnalyse(AlmAnalyseDto dto) { |
| | | PageHelper .startPage(dto.getPageNum(),dto.getPageSize()); |
| | | List<PwrdevAlarm> 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<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,"预警分析管理-电源主属性和分析属性"); |
| | | } |
| | | } |