|
@@ -0,0 +1,198 @@
|
|
|
+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.apache.commons.lang3.time.DateUtils;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.text.ParseException;
|
|
|
+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);
|
|
|
+ }
|
|
|
+}
|