package com.gyee.generation.service;//package com.gyee.generation.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.gyee.common.contant.ContantXk; import com.gyee.common.model.PointData; import com.gyee.generation.init.CacheContext; import com.gyee.generation.model.auto.*; import com.gyee.generation.service.auto.*; import com.gyee.generation.util.DateUtils; import com.gyee.generation.util.StringUtils; import com.gyee.generation.util.realtimesource.IEdosUtil; import com.gyee.generation.util.statisticcs.Initial; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @Service public class EquipmentInfo5Service { // private static final Logger logger = LoggerFactory.getLogger(EquipmentInfo5Service.class); @Resource private IEdosUtil edosUtil; @Resource private IProEconShutdownEvent2Service proEconShutdownEvent2Service; //状态转换率 @Resource private IProEconEquipmentInfoDay5Service proEconEquipmentInfoDay5Service; @Resource private IProEconStateTranRatesSubService proEconStateTranRatesSubService; @Resource private IProEconStateTranRatesSub2Service proEconStateTranRatesSub2Service; @Resource private IProEconFaultLiminatedefectsService proEconFaultLiminatedefectsService; @Resource private IProEconShutdownEventService proEconShutdownEventService; /** * 复位及时率 */ public void resetRate(Date currentDate) { //调度时间是第二天,currentDate 是第一天 Date endDate = DateUtils.addDays(currentDate, 1); List shutdownevents = proEconShutdownEvent2Service.list().stream().filter(i -> i.getWinpowerstationId().contains("FDC") && (i.getStopTime().compareTo(currentDate) == 0 || i.getStopTime().after(currentDate)) && (i.getStopTime().compareTo(endDate) == 0 || i.getStopTime().before(endDate)) && !i.getStopTypeId().equals("wh") ).collect(Collectors.toList()); Map rates = new HashMap<>(); for (ProBasicEquipment wt : CacheContext.wtls) { ProEconEquipmentInfoDay5 rate = new ProEconEquipmentInfoDay5(); rate.setRecordDate(currentDate); rate.setWindpowerstationId(wt.getWindpowerstationId()); rate.setProjectId(wt.getProjectId()); rate.setLineId(wt.getLineId()); rate.setWindturbineId(wt.getId()); Initial.initial(rate); rates.put(wt.getId(), rate); } for (ProEconShutdownEvent2 item : shutdownevents) { if (rates.containsKey(item.getWindturbineId())) { if (item.getStopHours() <= 1) { double temp = rates.get(item.getWindturbineId()).getTimerate20(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate20(temp); if (item.getStopHours() <= 0.08) { temp = rates.get(item.getWindturbineId()).getTimerate16(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate16(temp); temp = rates.get(item.getWindturbineId()).getTimerate17(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate17(temp); temp = rates.get(item.getWindturbineId()).getTimerate18(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate18(temp); temp = rates.get(item.getWindturbineId()).getTimerate19(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate19(temp); item.setResetRate("5"); } else if (item.getStopHours() <= 0.17) { temp = rates.get(item.getWindturbineId()).getTimerate17(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate17(temp); temp = rates.get(item.getWindturbineId()).getTimerate18(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate18(temp); temp = rates.get(item.getWindturbineId()).getTimerate19(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate19(temp); item.setResetRate("10"); } else if (item.getStopHours() <= 0.25) { temp = rates.get(item.getWindturbineId()).getTimerate18(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate18(temp); temp = rates.get(item.getWindturbineId()).getTimerate19(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate19(temp); item.setResetRate("15"); } else if (item.getStopHours() <= 0.33) { temp = rates.get(item.getWindturbineId()).getTimerate19(); temp = temp + 1; rates.get(item.getWindturbineId()).setTimerate19(temp); item.setResetRate("20"); } else if (item.getResetRate() == null) { item.setResetRate("99"); } else { item.setResetRate(null); } } } for (ProEconEquipmentInfoDay5 day : rates.values()) { Optional dayInfoo = proEconEquipmentInfoDay5Service.list().stream().filter(i -> i.getWindturbineId().equals(day.getWindturbineId()) && i.getRecordDate().compareTo(currentDate) == 0 ).findFirst(); ProEconEquipmentInfoDay5 dayInfo ; if (dayInfoo.isPresent()) { dayInfo = dayInfoo.get(); buildresetRate(dayInfo, day); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("id", dayInfo.getId()); proEconEquipmentInfoDay5Service.remove(wrapper); }else { dayInfo = new ProEconEquipmentInfoDay5(); buildresetRate(dayInfo, day); } proEconEquipmentInfoDay5Service.save(dayInfo); } } } public void buildresetRate(ProEconEquipmentInfoDay5 dayInfo, ProEconEquipmentInfoDay5 day) { dayInfo.setRecordDate(day.getRecordDate()); dayInfo.setWindpowerstationId(day.getWindpowerstationId()); dayInfo.setProjectId(day.getProjectId()); dayInfo.setLineId(day.getLineId()); dayInfo.setWindturbineId(day.getWindturbineId()); dayInfo.setTimerate16(day.getTimerate16()); dayInfo.setTimerate17(day.getTimerate17()); dayInfo.setTimerate18(day.getTimerate18()); dayInfo.setTimerate19(day.getTimerate19()); dayInfo.setTimerate20(day.getTimerate20()); } /** * 状态转换及时率 */ Double interval = 0.33; //20分钟 Map stateDescription1 = new HashMap<>(); Map stateDescription2 = new HashMap<>(); Double interval1 = 0.0; Double interval2 = 0.0; Double interval3 = 0.0; public void stateRate(Date currentDate) throws Exception { if (stateDescription1.size() == 0) { stateDescription1.put(3.0, 6.0); stateDescription1.put(3.5, 0.0); stateDescription1.put(4.0, 0.0); } if (stateDescription2.size() == 0) { stateDescription2.put(3.0, 6.0); stateDescription2.put(3.5, 2.0); stateDescription2.put(4.0, 2.0); } //调度时间是第二天,currentDate 是第一天 Date beginDate = DateUtils.truncate(currentDate); Date endDate = DateUtils.addDays(currentDate, 1); Map rates = new HashMap<>(); Map> ratesubs1 = new HashMap<>(); Map> ratesubs2 = new HashMap<>(); for (ProBasicEquipment wt : CacheContext.wtls) { ProEconEquipmentInfoDay5 rate = new ProEconEquipmentInfoDay5(); rate.setRecordDate(currentDate); rate.setWindpowerstationId(wt.getWindpowerstationId()); rate.setProjectId(wt.getProjectId()); rate.setLineId(wt.getLineId()); rate.setWindturbineId(wt.getId()); Initial.initial(rate); rates.put(wt.getId(), rate); List speedDataList = null; List statusDataList = null; if (CacheContext.wtpAimap.containsKey(wt.getId())) { Map wtpmap = CacheContext.wtpAimap.get(wt.getId()); if (wtpmap.containsKey(ContantXk.CJ_SSFS)) { ProBasicEquipmentPoint point = wtpmap.get(ContantXk.CJ_SSFS); speedDataList = edosUtil.getHistoryDatasSnap(point.getNemCode(), beginDate.getTime() / 1000, endDate.getTime() / 1000); } if (wtpmap.containsKey(ContantXk.MXZT)) { ProBasicEquipmentPoint point = wtpmap.get(ContantXk.MXZT); statusDataList = edosUtil.getHistoryDatasSnap(point.getNemCode(), beginDate.getTime() / 1000, endDate.getTime() / 1000); } } //List powerDataList = getHistoryDatasSnap(powerpointDictionary[id].ID, beginDate, endDate); List subs = new ArrayList<>(); ProEconStateTranRatesSub sub = new ProEconStateTranRatesSub(); if (speedDataList != null && statusDataList != null && statusDataList.size() == speedDataList.size()) { for (int i = 0; i < speedDataList.size(); i++) { if (speedDataList.get(i).getPointValueInDouble() <= 3.0) { sub = buildStateRate(currentDate, wt.getId(), speedDataList, statusDataList, subs, sub, i, 3.0); } else if (speedDataList.get(i).getPointValueInDouble() > 3 && speedDataList.get(i).getPointValueInDouble() <= 4) { sub = buildStateRate(currentDate, wt.getId(), speedDataList, statusDataList, subs, sub, i, 3.5); } else { sub = buildStateRate(currentDate, wt.getId(), speedDataList, statusDataList, subs, sub, i, 4.0); } } if (com.gyee.generation.util.StringUtils.empty(sub.getStatusEnd())) { long time = speedDataList.get(speedDataList.size() - 1).getPointTime(); sub.setStatusEnd(new Date(time)); sub.setStatusHours(DateUtils.hoursDiff1(sub.getStatusBegin(), sub.getStatusEnd())); } else if (com.gyee.generation.util.StringUtils.notEmp(sub.getStatusBegin2()) && com.gyee.generation.util.StringUtils.empty(sub.getStatusEnd2())) { long time = speedDataList.get(speedDataList.size() - 1).getPointTime(); sub.setStatusEnd2(new Date(time)); sub.setStatusHours2(DateUtils.hoursDiff1(sub.getStatusBegin2(), sub.getStatusEnd2())); } long time = speedDataList.get(speedDataList.size() - 1).getPointTime(); sub.setEndTime(new Date(time)); sub.setDurationHours(DateUtils.hoursDiff1(sub.getStartTime(), sub.getEndTime())); subs.add(sub); ratesubs1.put(wt.getId(), subs); //======================================================================================================================================== //======================================================================================================================================== List subs2 = new ArrayList<>(); ProEconStateTranRatesSub2 sub2 = new ProEconStateTranRatesSub2(); List intervaltimebegin = new ArrayList<>(); List intervaltimeend = new ArrayList<>(); for (int i = 0; i < subs.size(); i++) { interval1 = 0.0; interval2 = 0.0; interval3 = 0.0; if (sub2.getSpeed() == null) { buildStatetransitionratesSub2(subs, sub2, i); } else//非第一次 { if (subs.get(i).getDurationHours() > interval) //当前时间间隔满足条件 { /* 加处理代码 */ double tempspeed; if (interval1 >= interval2 && interval1 >= interval3) { tempspeed = 3.0; } else if (interval2 >= interval1 && interval2 >= interval3) { tempspeed = 3.5; } else { tempspeed = 4.0; } if (Objects.equals(subs.get(i).getSpeed(), tempspeed)) { sub2.setEndTime(subs.get(i).getEndTime()); sub2.setDurationHours(sub2.getDurationHours() + subs.get(i).getDurationHours()); /* 加处理代码 */ } else { setStateTranRatesSub2(sub2, intervaltimebegin, intervaltimeend); interval1 = 0.0; interval2 = 0.0; interval3 = 0.0; intervaltimebegin = new ArrayList<>(); intervaltimeend = new ArrayList<>(); //newMethod(subs, interval1, interval2, interval3, i, lastspeed, intervaltimebegin, intervaltimeend); subs2.add(sub2); sub2 = new ProEconStateTranRatesSub2(); buildStatetransitionratesSub2(subs, sub2, i); } } else //当前时间间隔不满足条件 { if (subs.get(i).getSpeed() == 3.0) { interval1 = interval1 + subs.get(i).getDurationHours(); } else if (subs.get(i).getSpeed() == 3.5) { interval2 = interval2 + subs.get(i).getDurationHours(); } else { interval3 = interval3 + subs.get(i).getDurationHours(); } if (interval1 > 0 && interval2 > 0 && interval3 > 0) { if (subs.get(i).getSpeed() == 3.0) { interval1 = interval1 - subs.get(i).getDurationHours(); } else if (subs.get(i).getSpeed() == 3.5) { interval2 = interval2 - subs.get(i).getDurationHours(); } else { interval3 = interval3 - subs.get(i).getDurationHours(); } setStateTranRatesSub2(sub2, intervaltimebegin, intervaltimeend); interval1 = 0.0; interval2 = 0.0; interval3 = 0.0; intervaltimebegin = new ArrayList<>(); intervaltimeend = new ArrayList<>(); //newMethod(subs, interval1, interval2, interval3, i, lastspeed, intervaltimebegin, intervaltimeend); subs2.add(sub2); sub2 = new ProEconStateTranRatesSub2(); buildStatetransitionratesSub2(subs, sub2, i); } else { if (subs.get(i).getSpeed() == 3.0) { interval1 = interval1 - subs.get(i).getDurationHours(); } else if (subs.get(i).getSpeed() == 3.5) { interval2 = interval2 - subs.get(i).getDurationHours(); } else { interval3 = interval3 - subs.get(i).getDurationHours(); } sub2.setEndTime(subs.get(i).getEndTime()); sub2.setDurationHours(sub2.getDurationHours() + subs.get(i).getDurationHours()); } } } //----------------------------------------------------------------------------------------------------------------- newMethod(subs, i, intervaltimebegin, intervaltimeend); //------------------------------------------------------------------------------------------------------------------ } if (interval1 >= interval2 && interval1 >= interval3) { sub2.setSpeed(3.0); if (intervaltimebegin.get(4) != null) { sub2.setStatusCode2(4); sub2.setStatusBegin2(intervaltimebegin.get(4)); sub2.setStatusEnd2(intervaltimeend.get(4)); sub2.setStatusHours2(DateUtils.hoursDiff2(sub2.getStatusEnd2(), sub2.getStatusBegin2())); } } else if (interval2 >= interval1 && interval2 >= interval3) { sub2.setSpeed(3.5); newMethod(sub2, intervaltimebegin, intervaltimeend); } else { sub2.setSpeed(4.0); newMethod(sub2, intervaltimebegin, intervaltimeend); } subs2.add(sub2); ratesubs2.put(wt.getId(), subs2); //============================================================================================================================================================================ //============================================================================================================================================================================ for (ProEconStateTranRatesSub2 proEconStateTranRatesSub2 : subs2) { if (proEconStateTranRatesSub2.getSpeed() == 3) { if (proEconStateTranRatesSub2.getDurationHours() > 0.5) { if (proEconStateTranRatesSub2.getStatusCode() == 0 || proEconStateTranRatesSub2.getStatusCode() == 1) { //if (subs2.get(i).getStatusCode() == 4 && subs2.get(i).getStatusCode() == 2) //{ if (proEconStateTranRatesSub2.getStatusHours() < 0.25)//5分钟 { proEconStateTranRatesSub2.setResetRate(0.25); double temp = rate.getTimerate1(); temp = temp + 1; rate.setTimerate1(temp); temp = rate.getTimerate2(); temp = temp + 1; rate.setTimerate2(temp); temp = rate.getTimerate3(); temp = temp + 1; rate.setTimerate3(temp); temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.33)//10分钟 { proEconStateTranRatesSub2.setResetRate(0.33); double temp = rate.getTimerate2(); temp = temp + 1; rate.setTimerate2(temp); temp = rate.getTimerate3(); temp = temp + 1; rate.setTimerate3(temp); temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.42)//15分钟 { proEconStateTranRatesSub2.setResetRate(0.42); double temp = rate.getTimerate3(); temp = temp + 1; rate.setTimerate3(temp); temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.5)//20分钟 { proEconStateTranRatesSub2.setResetRate(0.5); double temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } //} double temp = rate.getTimerate13(); temp = temp + 1; rate.setTimerate13(temp); } if (proEconStateTranRatesSub2.getStatusCode() == 4) { if (proEconStateTranRatesSub2.getStatusHours() < 0.25)//5分钟 { proEconStateTranRatesSub2.setResetRate(0.25); double temp = rate.getTimerate5(); temp = temp + 1; rate.setTimerate5(temp); temp = rate.getTimerate6(); temp = temp + 1; rate.setTimerate6(temp); temp = rate.getTimerate7(); temp = temp + 1; rate.setTimerate7(temp); temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.33)//10分钟 { proEconStateTranRatesSub2.setResetRate(0.33); double temp = rate.getTimerate6(); temp = temp + 1; rate.setTimerate6(temp); temp = rate.getTimerate7(); temp = temp + 1; rate.setTimerate7(temp); temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.42)//15分钟 { proEconStateTranRatesSub2.setResetRate(0.42); double temp = rate.getTimerate7(); temp = temp + 1; rate.setTimerate7(temp); temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.5)//20分钟 { proEconStateTranRatesSub2.setResetRate(0.5); double temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } //} double temp = rate.getTimerate14(); temp = temp + 1; rate.setTimerate14(temp); } } } else if (proEconStateTranRatesSub2.getSpeed() == 3.5) { if (proEconStateTranRatesSub2.getDurationHours() > 0.5) { if (proEconStateTranRatesSub2.getStatusCode() == 0 || proEconStateTranRatesSub2.getStatusCode() == 1) { //if (subs2.get(i).getStatusCode() == 4 && subs2.get(i).getStatusCode() == 2) //{ if (proEconStateTranRatesSub2.getStatusHours() < 0.25)//5分钟 { proEconStateTranRatesSub2.setResetRate(0.25); double temp = rate.getTimerate1(); temp = temp + 1; rate.setTimerate1(temp); temp = rate.getTimerate2(); temp = temp + 1; rate.setTimerate2(temp); temp = rate.getTimerate3(); temp = temp + 1; rate.setTimerate3(temp); temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.33)//10分钟 { proEconStateTranRatesSub2.setResetRate(0.3); double temp = rate.getTimerate2(); temp = temp + 1; rate.setTimerate2(temp); temp = rate.getTimerate3(); temp = temp + 1; rate.setTimerate3(temp); temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.42)//15分钟 { proEconStateTranRatesSub2.setResetRate(0.42); double temp = rate.getTimerate3(); temp = temp + 1; rate.setTimerate3(temp); temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.5)//20分钟 { proEconStateTranRatesSub2.setResetRate(0.5); double temp = rate.getTimerate4(); temp = temp + 1; rate.setTimerate4(temp); } //} double temp = rate.getTimerate13(); temp = temp + 1; rate.setTimerate13(temp); } if (proEconStateTranRatesSub2.getStatusCode() == 4) { //if (subs2.get(i).getStatusCode() == 0 || subs2.get(i).getStatusCode() == 1) //{ if (proEconStateTranRatesSub2.getStatusHours() < 0.25)//5分钟 { proEconStateTranRatesSub2.setResetRate(0.25); double temp = rate.getTimerate5(); temp = temp + 1; rate.setTimerate5(temp); temp = rate.getTimerate6(); temp = temp + 1; rate.setTimerate6(temp); temp = rate.getTimerate7(); temp = temp + 1; rate.setTimerate7(temp); temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.33)//10分钟 { proEconStateTranRatesSub2.setResetRate(0.33); double temp = rate.getTimerate6(); temp = temp + 1; rate.setTimerate6(temp); temp = rate.getTimerate7(); temp = temp + 1; rate.setTimerate7(temp); temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.42)//15分钟 { proEconStateTranRatesSub2.setResetRate(0.42); double temp = rate.getTimerate7(); temp = temp + 1; rate.setTimerate7(temp); temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.5)//20分钟 { proEconStateTranRatesSub2.setResetRate(0.5); double temp = rate.getTimerate8(); temp = temp + 1; rate.setTimerate8(temp); } //} double temp = rate.getTimerate14(); temp = temp + 1; rate.setTimerate14(temp); } } } else if (proEconStateTranRatesSub2.getSpeed() == 4) { if (proEconStateTranRatesSub2.getDurationHours() > 0.5) { if (proEconStateTranRatesSub2.getStatusCode() == 0) { if (proEconStateTranRatesSub2.getStatusCode() == 1) { if (proEconStateTranRatesSub2.getStatusHours() < 0.25)//5分钟 { proEconStateTranRatesSub2.setResetRate(0.25); double temp = rate.getTimerate9(); temp = temp + 1; rate.setTimerate9(temp); temp = rate.getTimerate10(); temp = temp + 1; rate.setTimerate10(temp); temp = rate.getTimerate11(); temp = temp + 1; rate.setTimerate11(temp); temp = rate.getTimerate12(); temp = temp + 1; rate.setTimerate12(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.33)//10分钟 { proEconStateTranRatesSub2.setResetRate(0.33); double temp = rate.getTimerate10(); temp = temp + 1; rate.setTimerate10(temp); temp = rate.getTimerate11(); temp = temp + 1; rate.setTimerate11(temp); temp = rate.getTimerate12(); temp = temp + 1; rate.setTimerate12(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.42)//15分钟 { proEconStateTranRatesSub2.setResetRate(0.42); double temp = rate.getTimerate11(); temp = temp + 1; rate.setTimerate11(temp); temp = rate.getTimerate12(); temp = temp + 1; rate.setTimerate12(temp); } else if (proEconStateTranRatesSub2.getStatusHours() < 0.5)//20分钟 { proEconStateTranRatesSub2.setResetRate(0.5); double temp = rate.getTimerate12(); temp = temp + 1; rate.setTimerate12(temp); } double temp = rate.getTimerate15(); temp = temp + 1; rate.setTimerate15(temp); } } } } //} } } } List items1 = proEconStateTranRatesSubService.list().stream().filter(i -> i.getRecordDate().compareTo(currentDate) == 0).map(ProEconStateTranRatesSub::getId).collect(Collectors.toList()); List items2 = proEconStateTranRatesSub2Service.list().stream().filter(i -> i.getRecordDate().compareTo(currentDate) == 0).map(ProEconStateTranRatesSub2::getId).collect(Collectors.toList()); if (!items1.isEmpty()) { proEconStateTranRatesSubService.removeByIds(items1); } if (!items2.isEmpty()) { proEconStateTranRatesSub2Service.removeByIds(items2); } for (String key : rates.keySet()) { ProEconEquipmentInfoDay5 rate = rates.get(key); if (ratesubs1.containsKey(key) && ratesubs2.containsKey(key)) { for (ProEconStateTranRatesSub item : ratesubs1.get(key)) { proEconStateTranRatesSubService.save(item); } for (ProEconStateTranRatesSub2 item : ratesubs2.get(key)) { proEconStateTranRatesSub2Service.save(item); } Optional dayInfoo = proEconEquipmentInfoDay5Service.list().stream() .filter(i -> i.getWindturbineId().equals(key) && i.getRecordDate().compareTo(currentDate) == 0 ).findFirst(); ProEconEquipmentInfoDay5 dayInfo; if (dayInfoo.isPresent()) { dayInfo = dayInfoo.get(); buildresetRateByState(dayInfo, rate); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("id", dayInfo.getId()); proEconEquipmentInfoDay5Service.remove(wrapper); }else { dayInfo = new ProEconEquipmentInfoDay5(); buildresetRateByState(dayInfo, rate); } proEconEquipmentInfoDay5Service.save(dayInfo); } } } private void setStateTranRatesSub2(ProEconStateTranRatesSub2 sub2, List intervaltimebegin, List intervaltimeend) { if (interval1 >= interval2 && interval1 >= interval3) { sub2.setSpeed(3.0); if (intervaltimebegin.get(4) != null) { sub2.setStatusCode2(4); sub2.setStatusBegin2(intervaltimebegin.get(4)); sub2.setStatusEnd2(intervaltimeend.get(4)); sub2.setStatusHours2(DateUtils.hoursDiff2(sub2.getStatusEnd2(), sub2.getStatusBegin2())); } } else if (interval2 >= interval1 && interval2 >= interval3) { sub2.setSpeed(3.5); newMethod(sub2, intervaltimebegin, intervaltimeend); } else { sub2.setSpeed(4.0); newMethod(sub2, intervaltimebegin, intervaltimeend); } } private static void newMethod(ProEconStateTranRatesSub2 sub2, List intervaltimebegin, List intervaltimeend) { if (intervaltimebegin.get(0) != null) { if (intervaltimebegin.get(1) != null) { if (intervaltimebegin.get(0).before(intervaltimebegin.get(1))) { sub2.setStatusCode(0); sub2.setStatusBegin2(intervaltimebegin.get(0)); sub2.setStatusEnd2(intervaltimeend.get(0)); } else { sub2.setStatusCode(1); sub2.setStatusBegin2(intervaltimebegin.get(1)); sub2.setStatusEnd2(intervaltimeend.get(1)); } } else { sub2.setStatusCode(0); sub2.setStatusBegin2(intervaltimebegin.get(0)); sub2.setStatusEnd2(intervaltimeend.get(0)); } sub2.setStatusHours2(DateUtils.hoursDiff2(sub2.getStatusEnd2(), sub2.getStatusBegin2())); } else if (intervaltimebegin.get(1) != null) { sub2.setStatusCode(1); sub2.setStatusBegin2(intervaltimebegin.get(1)); sub2.setStatusEnd2(intervaltimeend.get(1)); sub2.setStatusHours2(DateUtils.hoursDiff2(sub2.getStatusEnd2(), sub2.getStatusBegin2())); } } private void newMethod(List subs, Integer i, List intervaltimebegin, List intervaltimeend) { if (subs.get(i).getSpeed() == 3.0) { interval1 += subs.get(i).getDurationHours(); } else if (subs.get(i).getSpeed() == 3.5) { interval2 += subs.get(i).getDurationHours(); } else { interval3 += subs.get(i).getDurationHours(); } if (subs.get(i).getStatusCode() != null && subs.get(i).getStatusCode() < 5) { Integer key = subs.get(i).getStatusCode(); if (intervaltimebegin.get(key) == null) { intervaltimebegin.set(key, subs.get(i).getStatusBegin2()); intervaltimeend.set(key, subs.get(i).getStatusEnd2()); } } if (subs.get(i).getStatusCode() != null && subs.get(i).getStatusCode() < 5) { Integer key = subs.get(i).getStatusCode(); if (intervaltimebegin.get(key) == null) { intervaltimebegin.set(key, subs.get(i).getStatusBegin()); intervaltimeend.set(key, subs.get(i).getStatusEnd()); } } } public void buildresetRateByState(ProEconEquipmentInfoDay5 dayInfo, ProEconEquipmentInfoDay5 day) { dayInfo.setRecordDate(day.getRecordDate()); dayInfo.setWindpowerstationId(day.getWindpowerstationId()); dayInfo.setProjectId(day.getProjectId()); dayInfo.setWindturbineId(day.getWindturbineId()); dayInfo.setLineId(day.getLineId()); dayInfo.setTimerate1(day.getTimerate1()); dayInfo.setTimerate2(day.getTimerate2()); dayInfo.setTimerate3(day.getTimerate3()); dayInfo.setTimerate4(day.getTimerate4()); dayInfo.setTimerate5(day.getTimerate5()); dayInfo.setTimerate6(day.getTimerate6()); dayInfo.setTimerate7(day.getTimerate7()); dayInfo.setTimerate8(day.getTimerate8()); dayInfo.setTimerate9(day.getTimerate9()); dayInfo.setTimerate10(day.getTimerate10()); dayInfo.setTimerate11(day.getTimerate11()); dayInfo.setTimerate12(day.getTimerate12()); dayInfo.setTimerate13(day.getTimerate13()); dayInfo.setTimerate14(day.getTimerate14()); dayInfo.setTimerate15(day.getTimerate15()); } private static void buildStatetransitionratesSub2(List subs, ProEconStateTranRatesSub2 sub2, Integer i) { sub2.setWindpwoerId(subs.get(i).getWindpwoerId()); sub2.setProjectId(subs.get(i).getProjectId()); sub2.setLineId(subs.get(i).getLineId()); sub2.setWindturbineId(subs.get(i).getWindturbineId()); sub2.setRecordDate(subs.get(i).getRecordDate()); sub2.setStartTime(subs.get(i).getStartTime()); sub2.setEndTime(subs.get(i).getEndTime()); sub2.setDurationHours(subs.get(i).getDurationHours()); sub2.setSpeed(subs.get(i).getSpeed()); sub2.setMaxSpeed(subs.get(i).getMaxSpeed()); sub2.setMinSpeed(subs.get(i).getMinSpeed()); sub2.setStatusCode(subs.get(i).getStatusCode()); sub2.setStatusHours(subs.get(i).getStatusHours()); sub2.setStatusBegin(subs.get(i).getStatusBegin()); sub2.setStatusEnd(subs.get(i).getStatusEnd()); sub2.setStatusCode2(subs.get(i).getStatusCode2()); sub2.setStatusHours2(subs.get(i).getStatusHours2()); sub2.setStatusBegin2(subs.get(i).getStatusBegin2()); sub2.setStatusEnd2(subs.get(i).getStatusEnd2()); } private ProEconStateTranRatesSub buildStateRate(Date currentDate, String id, List speedDataList, List statusDataList, List subs, ProEconStateTranRatesSub sub, Integer i, Double speed) { if (sub.getStartTime() == null) { //初始化 buildSTATETRANSITIONRATESSUB(currentDate, id, speedDataList, statusDataList, sub, i, speed); } else { if (sub.getEndTime() == null) { //判定是几米风速 3 、 3.5 、 4 if (Objects.equals(sub.getSpeed(), speed)) { //stateDescription.Add(3, 4); //stateDescription.Add(3.5m, 0); //stateDescription.Add(4, 0); if (sub.getStatusCode() != statusDataList.get(i).getPointValueInDouble() && sub.getStatusCode() == null && (statusDataList.get(i).getPointValueInDouble() == stateDescription1.get(speed) || statusDataList.get(i).getPointValueInDouble() == stateDescription2.get(speed))) { sub.setStatusCode(Integer.valueOf(String.valueOf(statusDataList.get(i).getPointValueInDouble()))); sub.setStatusBegin2(new Date(speedDataList.get(i).getPointTime())); sub.setStatusEnd(new Date(speedDataList.get(i).getPointTime())); sub.setStatusHours(DateUtils.hoursDiff1(sub.getStatusEnd(), sub.getStatusBegin())); } else if (sub.getStatusCode() != null && sub.getStatusCode() != statusDataList.get(i).getPointValueInDouble()) { sub.setStatusEnd2(new Date(speedDataList.get(i).getPointTime())); sub.setStatusHours2(DateUtils.hoursDiff1(sub.getStatusEnd2(), sub.getStatusBegin2())); } } else { if (sub.getStatusEnd() == null) { sub.setStatusEnd(new Date(speedDataList.get(i).getPointTime())); sub.setStatusHours(DateUtils.hoursDiff1(sub.getStatusEnd(), sub.getStatusBegin())); } else if (sub.getStatusBegin2() != null && sub.getStatusEnd2() == null) { sub.setStatusEnd2(new Date(speedDataList.get(i).getPointTime())); sub.setStatusHours2(DateUtils.hoursDiff1(sub.getStatusEnd2(), sub.getStatusBegin2())); } sub.setEndTime(new Date(speedDataList.get(i).getPointTime())); sub.setDurationHours(DateUtils.hoursDiff1(sub.getEndTime(), sub.getStartTime())); ProEconStateTranRatesSub finalSub = sub; DoubleSummaryStatistics summaryStatistics = speedDataList.stream().filter(x -> new Date(x.getPointTime()).after(finalSub.getStartTime()) && new Date(x.getPointTime()).before(finalSub.getEndTime()) ).mapToDouble(PointData::getPointValueInDouble).summaryStatistics(); //最大最小风速 double max = summaryStatistics.getMax(); double min = summaryStatistics.getMin(); sub.setMaxSpeed(max); sub.setMinSpeed(min); subs.add(sub); sub = new ProEconStateTranRatesSub(); buildSTATETRANSITIONRATESSUB(currentDate, id, speedDataList, statusDataList, sub, i, speed); } } } return sub; } private void buildSTATETRANSITIONRATESSUB(Date currentDate, String id, List speedDataList, List statusDataList, ProEconStateTranRatesSub sub, Integer i, Double speed) { sub.setStartTime(new Date(speedDataList.get(i).getPointTime())); sub.setWindpwoerId(CacheContext.wtmap.get(id).getWindpowerstationId()); sub.setProjectId(CacheContext.wtmap.get(id).getProjectId()); sub.setLineId(CacheContext.wtmap.get(id).getLineId()); sub.setWindturbineId(id); sub.setRecordDate(currentDate); Double temp = statusDataList.get(i).getPointValueInDouble(); sub.setStatusCode(Integer.valueOf(String.valueOf(temp))); sub.setStatusBegin(new Date(speedDataList.get(i).getPointTime())); sub.setSpeed(speed); } //故障消缺及时率 public void failRate(Date cuttentDate) { Map> dtDictionary = new HashMap<>(); Calendar c = Calendar.getInstance(); c.setTime(cuttentDate); //Date now = Date.Now.Date.AddMonths(-1); //上月 Date now = DateUtils.truncate(c.getTime()); //本月 c.setTime(now); c.set(Calendar.DAY_OF_MONTH, 1); Date begin = c.getTime(); c.add(Calendar.MONTH, 1); c.add(Calendar.DAY_OF_MONTH, -1); Date end = c.getTime(); List deleteitems = proEconFaultLiminatedefectsService.list().stream().filter(i -> (i.getDateTime().compareTo(begin) == 0 || i.getDateTime().after(begin)) && (i.getDateTime().compareTo(end) == 0 || i.getDateTime().before(end)) ).map(ProEconFaultLiminatedefects::getId).collect(Collectors.toList()); if (!deleteitems.isEmpty()) { proEconFaultLiminatedefectsService.removeByIds(deleteitems); } List st2 = proEconShutdownEventService.list().stream() .filter(i -> (i.getStopTime().compareTo(begin) == 0 || i.getStopTime().after(begin)) && (i.getStopTime().compareTo(end) == 0 || i.getStopTime().before(end)) ).collect(Collectors.toList()); for (ProEconShutdownEvent item : st2) { Date dt = item.getStopTime(); Map fdDictionary; if (dtDictionary.containsKey(dt)) { fdDictionary = dtDictionary.get(dt); } else { fdDictionary = new HashMap<>(); dtDictionary.put(dt, fdDictionary); } ProEconFaultLiminatedefects fs; if (fdDictionary.containsKey(item.getWindturbineId())) { fs = fdDictionary.get(item.getWindturbineId()); double temp = fs.getFaultCount(); temp = temp + 1; fs.setFaultCount(temp); } else { fs = new ProEconFaultLiminatedefects(); fs.setWindturbineId(item.getWindturbineId()); if (CacheContext.wtmap.containsKey(item.getWindturbineId())) { ProBasicEquipment wt = CacheContext.wtmap.get(item.getWindturbineId()); fs.setWindpowerstationId(wt.getWindpowerstationId()); fs.setProjectId(wt.getProjectId()); fs.setLineId(wt.getLineId()); } fs.setDateTime(dt); double temp = fs.getFaultCount(); temp = temp + 1; fs.setFaultCount(temp); fs.setClassifyId("-1"); if (!StringUtils.notEmp(fs.getRightCount())) { fs.setRightCount(0.0); } fdDictionary.put(item.getWindturbineId(), fs); } if (item.getStopHours() < 24) { double temp = fs.getRightCount(); temp = temp + 1; fs.setRightCount(temp); } if (fs.getFaultCount() != 0) { double temp = BigDecimal.valueOf(fs.getRightCount()).divide(BigDecimal.valueOf(fs.getFaultCount()), 2, RoundingMode.HALF_EVEN).multiply(new BigDecimal(100)).doubleValue(); fs.setRate(temp); } } for (Map items : dtDictionary.values()) { for (ProEconFaultLiminatedefects item : items.values()) { proEconFaultLiminatedefectsService.save(item); } } } }