package com.gyee.impala.schdule; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.gyee.impala.common.feign.RemoteServiceBuilder; import com.gyee.impala.common.util.DateUtil; import com.gyee.impala.mapper.master.CasefaultMapper; import com.gyee.impala.mapper.master.CasefaultalgMapper; import com.gyee.impala.mapper.slave.FaulthistoryMapper; import com.gyee.impala.mapper.slave.Windturbinetestingpointai2Mapper; import com.gyee.impala.model.custom.TsDoubleData; import com.gyee.impala.model.custom.diagnose.FaultInfo; import com.gyee.impala.model.master.Casefault; import com.gyee.impala.model.master.Casefaultalg; import com.gyee.impala.model.slave.Windturbinetestingpointai2; import com.gyee.impala.service.master.CasefaultService; import com.gyee.impala.service.master.CasefaultalgService; import org.apache.commons.lang3.StringUtils; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @Component public class TaskCasefaultReplenish { @Resource private CasefaultalgMapper casefaultalgMapper; @Resource private CasefaultMapper casefaultMapper; @Resource private FaulthistoryMapper faulthistoryMapper; @Resource private Windturbinetestingpointai2Mapper windturbinetestingpointai2Mapper; @Resource private CasefaultalgService casefaultalgService; @Resource private CasefaultService casefaultService; @Resource private RemoteServiceBuilder remoteServiceBuilder; /** * 计算故障解除时间和故障时长 */ @Scheduled(cron = "0 15 3 * * ?") public void creatEndtime(){ Calendar instance = Calendar.getInstance(); instance.add(Calendar.DATE, -8); //获取报警信息,用此信息计算故障解除时间 List faultInfos = faulthistoryMapper.queryFaultInfo(null, instance.getTime(), new Date()); List casefaultalgList = new ArrayList<>(); List casefaultList = new ArrayList<>(); QueryWrapper cfawrapper = new QueryWrapper<>(); cfawrapper.eq("endtime","").or().isNull("endtime").or().apply("starttime=endtime").orderByDesc("starttime").last("limit 5000"); //查找没有更新故障解除时间的记录, List casefaultalgs = casefaultalgMapper.selectList(cfawrapper); //faultid、Casefaultalg Map casefaultalgMap = casefaultalgs.stream().collect(Collectors.toMap(Casefaultalg::getFaultid, Function.identity(),(key1,key2)->key2)); List cfaturbines = casefaultalgs.stream().map(Casefaultalg::getWindturbineid).distinct().collect(Collectors.toList()); for (String turbine : cfaturbines) { List collect = faultInfos.stream().filter(fis -> fis.getWindturbineId().equals(turbine)).collect(Collectors.toList()); Long k = 0L;//报警faultid //遍历当前风机的报警信息 for (FaultInfo faultInfo : collect) { if(faultInfo.getMessageType()==3){ if(!k.equals(0L)){ Casefaultalg casefaultalg = new Casefaultalg(); casefaultalg.setId(casefaultalgMap.get(k).getId()); casefaultalg.setEndtime(faultInfo.getFaultTime()); casefaultalgList.add(casefaultalg); k = 0L; } }else { //用faultid查找样本库有没有这条报警信息 Casefaultalg casefaultalg = casefaultalgMap.get(faultInfo.getId()); if(casefaultalg!=null){ k = casefaultalg.getFaultid(); }else { k = 0L; } } } } //批量更新endtime casefaultalgService.updateBatchById(casefaultalgList,300); QueryWrapper cfwrapper = new QueryWrapper<>(); cfwrapper.eq("endtime","").or().isNull("endtime").or().apply("starttime=endtime").orderByDesc("starttime").last("limit 2000"); List casefaults = casefaultMapper.selectList(cfwrapper); Map casefaultMap = casefaults.stream().collect(Collectors.toMap(Casefault::getFaultid, Function.identity(),(key1,key2)->key2)); List cfturbines = casefaults.stream().map(Casefault::getWindturbineid).distinct().collect(Collectors.toList()); for (String turbine : cfturbines) { List collect = faultInfos.stream().filter(fis -> fis.getWindturbineId().equals(turbine)).collect(Collectors.toList()); Long k = 0L; for (FaultInfo faultInfo : collect) { if(faultInfo.getMessageType()==3){ if(!k.equals(0L)){ Casefault casefault = new Casefault(); casefault.setId(casefaultMap.get(k).getId()); casefault.setEndtime(faultInfo.getFaultTime()); casefaultList.add(casefault); k = 0L; } }else { Casefault casefault = casefaultMap.get(faultInfo.getId()); if(casefault!=null){ k = casefault.getFaultid(); }else { k = 0L; } } } } casefaultService.updateBatchById(casefaultList,300); } /** * 计算损失电量 */ @Scheduled(cron = "0 35 3 * * ?") public void creatPowerloss(){ List casefaultalgList = new ArrayList<>(); List casefaultList = new ArrayList<>(); QueryWrapper cfawrapper = new QueryWrapper<>(); cfawrapper.isNull("faultsecond").apply("starttime!=endtime"); List casefaultalgs = casefaultalgMapper.selectList(cfawrapper); QueryWrapper cfwrapper = new QueryWrapper<>(); cfwrapper.isNull("faultsecond").ne("endtime","").apply("starttime!=endtime"); List casefaults = casefaultMapper.selectList(cfwrapper); QueryWrapper wpwrapper = new QueryWrapper<>(); wpwrapper.eq("UNIFORMCODE", "RFDLLL").likeLeft("WINDPOWERSTATIONID", "FDC"); List windturbinetestingpointai2s = windturbinetestingpointai2Mapper.selectList(wpwrapper); //风机id、理论日发电量 Map collect = windturbinetestingpointai2s.stream().collect(Collectors.toMap(Windturbinetestingpointai2::getWindturbineid, Function.identity())); for (Casefaultalg casefaultalg : casefaultalgs) { String starttime = casefaultalg.getStarttime(); String endtime = casefaultalg.getEndtime(); if(StringUtils.isEmpty(starttime)||StringUtils.isEmpty(endtime)) return; long startl = DateUtil.str2DateTime(starttime).getTime(); long endl = DateUtil.str2DateTime(endtime).getTime(); long l = endl - startl; String pointAi = collect.get(casefaultalg.getWindturbineid()).getId(); Map startLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, startl); try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } Map endLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, endl); double v = endLlgl.entrySet().iterator().next().getValue().getDoubleValue() - startLlgl.entrySet().iterator().next().getValue().getDoubleValue(); Casefaultalg cf = new Casefaultalg(); cf.setId(casefaultalg.getId()); cf.setFaultsecond((int) TimeUnit.MILLISECONDS.toSeconds(l)); cf.setPowerloos((float) v); casefaultalgList.add(cf); } casefaultalgService.updateBatchById(casefaultalgList,300); for (Casefault casefault : casefaults) { String starttime = casefault.getStarttime(); String endtime = casefault.getEndtime(); if(StringUtils.isEmpty(starttime)||StringUtils.isEmpty(endtime)) continue; long startl = DateUtil.str2DateTime(starttime).getTime(); long endl = DateUtil.str2DateTime(endtime).getTime(); long l = endl - startl; String pointAi = collect.get(casefault.getWindturbineid()).getId(); Map startLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, startl); try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } Map endLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, endl); double v = endLlgl.entrySet().iterator().next().getValue().getDoubleValue() - startLlgl.entrySet().iterator().next().getValue().getDoubleValue(); Casefault cf = new Casefault(); cf.setId(casefault.getId()); cf.setFaultsecond((int) TimeUnit.MILLISECONDS.toSeconds(l)); cf.setPowerloos((float) v); casefaultList.add(cf); } casefaultService.updateBatchById(casefaultList, 300); } }