package com.gyee.impala.schdule; import com.gyee.impala.common.config.GyeeConfig; import com.gyee.impala.common.constant.Constants; import com.gyee.impala.common.feign.RemoteServiceBuilder; import com.gyee.impala.common.spring.InitialRunner; import com.gyee.impala.common.util.DateUtil; import com.gyee.impala.common.util.GyeeUtil; import com.gyee.impala.common.util.SnowFlakeUtil; import com.gyee.impala.model.custom.TsDoubleData; import com.gyee.impala.model.master.Caseperformance; import com.gyee.impala.model.master.Windturbine; import com.gyee.impala.model.master.Windturbinepoint; import com.gyee.impala.service.master.CaseperformanceService; import com.gyee.impala.service.master.WindturbinepointService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 基于欠发矩阵的统计 */ @Component @Slf4j public class TaskPerformance { /** 等间隔查询 秒 **/ private final Integer interval = 1; @Autowired private GyeeConfig gyeeConfig; @Autowired private RemoteServiceBuilder remoteService; @Autowired private WindturbinepointService windturbinepointService; @Autowired private CaseperformanceService performanceService; // @Scheduled(initialDelay = 10 * 1000, fixedRate = 2 * 86400000 * 1000) // @Scheduled(cron = "0 40 2 * * ?") public void performanceNSS(){ if (InitialRunner.wpMap.size() == 0) return; Calendar cal = Calendar.getInstance(); InitialRunner.wpMap.forEach((k, v) -> v.stream().forEach(wt ->{ try{ /********************** 关系库获取测点名 ******************************/ List wp_zs = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.AI_FDJZS); List wp_zt = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_FJMXZT); List wp_qf = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_RSSQFZT); List wp_jy = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.AI_JYJD); List wp_xd = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_XDZT); /********************** 关系库获取测点名 ******************************/ long time = DateUtil.covertDateTimestamp(gyeeConfig.getInitTime()); Caseperformance item = performanceService.getOneMaxTimeByWtId(wt.getId()); if (item != null) time = DateUtil.covertDateTimestamp(item.getEndtime()); long currentTime = System.currentTimeMillis(); while(time < currentTime){ long st = time; cal.setTime(new Date(time)); cal.add(Calendar.DATE, 30); long et = cal.getTimeInMillis(); if (wp_zs.size() > 0 || wp_zt.size() > 0 && wp_qf.size() > 0 && wp_jy.size()>0 && wp_xd.size() > 0){ /********************** Golden读取原始数据 ******************************/ List zsData = remoteService.adapter().getHistorySnapAI(wp_zs.get(0).getPoint(), st, et, interval); List ztData = remoteService.adapter().getHistorySnapAI(wp_zt.get(0).getPoint(), st, et, interval); List qfData = remoteService.adapter().getHistorySnapAI(wp_qf.get(0).getPoint(), st, et, interval); List jdData = remoteService.adapter().getHistorySnapAI(wp_jy.get(0).getPoint(), st, et, interval); List xdData = remoteService.adapter().getHistorySnapAI(wp_xd.get(0).getPoint(), st, et, interval); /********************** Golden读取原始数据 ******************************/ /** 分析保存至kudu*/ saveCasePerformance(wt, k, zsData, ztData, qfData, jdData, xdData); time = et; try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } } catch (Exception e){ log.error(e.getMessage()); } })); } private void saveCasePerformance(Windturbine wt, String station, List zsData, List ztData, List qfData, List jdData, List xdData ){ List list = new ArrayList<>(); List lt = new ArrayList<>(); List ls = new ArrayList<>(); for (int j = 0; j < zsData.size(); j++) { /**性能差**/ if (GyeeUtil.convertNum(wt, zsData.get(j).getDoubleValue()) >= 1400 && ztData.get(j).getDoubleValue() == 2 && qfData.get(j).getDoubleValue() > 3 && jdData.get(j).getDoubleValue() == 0 && xdData.get(j).getDoubleValue() == 0) { lt.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN)); } /**性能好**/ if(GyeeUtil.convertNum(wt, zsData.get(j).getDoubleValue()) >= 1400 && ztData.get(j).getDoubleValue() == 2 && qfData.get(j).getDoubleValue() <= 2 && jdData.get(j).getDoubleValue() == 0 && xdData.get(j).getDoubleValue() == 0){ ls.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN)); } /**数据整理保存至kudu**/ if (lt.size() > 1 || ls.size() > 1){ Caseperformance obj = new Caseperformance(); // 统计欠发 if (lt.size() > 1) { obj.setTag(0); obj.setStarttime(lt.get(0)); obj.setEndtime(lt.get(lt.size() - 1)); obj.setIntervals(Double.valueOf(String.format("%.1f",(double)(lt.size() * interval) / 3600))); lt.clear(); } // 统计不欠发 if (ls.size() > 1) { obj.setTag(1); obj.setStarttime(ls.get(0)); obj.setEndtime(ls.get(lt.size() - 1)); obj.setIntervals(Double.valueOf(String.format("%.1f",(double)(ls.size() * interval) / 3600))); ls.clear(); } obj.setId(SnowFlakeUtil.generateId()); obj.setStationen(station); obj.setWindturbineid(wt.getId()); obj.setAlgtype("QFMX"); obj.setModel(wt.getModel()); obj.setStationcn(InitialRunner.stationMap.get(station)); obj.setManufacturer(InitialRunner.wpList.get(InitialRunner.wpList.indexOf(station)).getManufacturer()); list.add(obj); } } performanceService.insertBatch(list); } public static void main(String[] args){ } }