123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- 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<FaultInfo> faultInfos = faulthistoryMapper.queryFaultInfo(null, instance.getTime(), new Date());
- List<Casefaultalg> casefaultalgList = new ArrayList<>();
- List<Casefault> casefaultList = new ArrayList<>();
- QueryWrapper<Casefaultalg> cfawrapper = new QueryWrapper<>();
- cfawrapper.eq("endtime","").or().isNull("endtime").or().apply("starttime=endtime").orderByDesc("starttime").last("limit 5000");
- //查找没有更新故障解除时间的记录,
- List<Casefaultalg> casefaultalgs = casefaultalgMapper.selectList(cfawrapper);
- //faultid、Casefaultalg
- Map<Long, Casefaultalg> casefaultalgMap = casefaultalgs.stream().collect(Collectors.toMap(Casefaultalg::getFaultid, Function.identity(),(key1,key2)->key2));
- List<String> cfaturbines = casefaultalgs.stream().map(Casefaultalg::getWindturbineid).distinct().collect(Collectors.toList());
- for (String turbine : cfaturbines) {
- List<FaultInfo> 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<Casefault> cfwrapper = new QueryWrapper<>();
- cfwrapper.eq("endtime","").or().isNull("endtime").or().apply("starttime=endtime").orderByDesc("starttime").last("limit 2000");
- List<Casefault> casefaults = casefaultMapper.selectList(cfwrapper);
- Map<Long, Casefault> casefaultMap = casefaults.stream().collect(Collectors.toMap(Casefault::getFaultid, Function.identity(),(key1,key2)->key2));
- List<String> cfturbines = casefaults.stream().map(Casefault::getWindturbineid).distinct().collect(Collectors.toList());
- for (String turbine : cfturbines) {
- List<FaultInfo> 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<Casefaultalg> casefaultalgList = new ArrayList<>();
- List<Casefault> casefaultList = new ArrayList<>();
- QueryWrapper<Casefaultalg> cfawrapper = new QueryWrapper<>();
- cfawrapper.isNull("faultsecond").apply("starttime!=endtime");
- List<Casefaultalg> casefaultalgs = casefaultalgMapper.selectList(cfawrapper);
- QueryWrapper<Casefault> cfwrapper = new QueryWrapper<>();
- cfwrapper.isNull("faultsecond").ne("endtime","").apply("starttime!=endtime");
- List<Casefault> casefaults = casefaultMapper.selectList(cfwrapper);
- QueryWrapper<Windturbinetestingpointai2> wpwrapper = new QueryWrapper<>();
- wpwrapper.eq("UNIFORMCODE", "RFDLLL").likeLeft("WINDPOWERSTATIONID", "FDC");
- List<Windturbinetestingpointai2> windturbinetestingpointai2s = windturbinetestingpointai2Mapper.selectList(wpwrapper);
- //风机id、理论日发电量
- Map<String, Windturbinetestingpointai2> 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<String,TsDoubleData> startLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, startl);
- try {
- Thread.sleep(30);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- Map<String,TsDoubleData> 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<String,TsDoubleData> startLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, startl);
- try {
- Thread.sleep(30);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- Map<String,TsDoubleData> 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);
- }
- }
|