12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109 |
- 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<ProEconShutdownEvent2> 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<String, ProEconEquipmentInfoDay5> 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<ProEconEquipmentInfoDay5> 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<ProEconEquipmentInfoDay5> 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<Double, Double> stateDescription1 = new HashMap<>();
- Map<Double, Double> 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<String, ProEconEquipmentInfoDay5> rates = new HashMap<>();
- Map<String, List<ProEconStateTranRatesSub>> ratesubs1 = new HashMap<>();
- Map<String, List<ProEconStateTranRatesSub2>> 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<PointData> speedDataList = null;
- List<PointData> statusDataList = null;
- if (CacheContext.wtpAimap.containsKey(wt.getId())) {
- Map<String, ProBasicEquipmentPoint> 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<PointData> powerDataList = getHistoryDatasSnap(powerpointDictionary[id].ID, beginDate, endDate);
- List<ProEconStateTranRatesSub> 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<ProEconStateTranRatesSub2> subs2 = new ArrayList<>();
- ProEconStateTranRatesSub2 sub2 = new ProEconStateTranRatesSub2();
- List<Date> intervaltimebegin = new ArrayList<>();
- List<Date> 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<Integer> items1 = proEconStateTranRatesSubService.list().stream().filter(i -> i.getRecordDate().compareTo(currentDate) == 0).map(ProEconStateTranRatesSub::getId).collect(Collectors.toList());
- List<Integer> 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<ProEconEquipmentInfoDay5> 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<ProEconEquipmentInfoDay5> 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<Date> intervaltimebegin, List<Date> 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<Date> intervaltimebegin, List<Date> 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<ProEconStateTranRatesSub> subs, Integer i, List<Date> intervaltimebegin, List<Date> 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<ProEconStateTranRatesSub> 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<PointData> speedDataList, List<PointData> statusDataList, List<ProEconStateTranRatesSub> 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<PointData> speedDataList, List<PointData> 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<Date, Map<String, ProEconFaultLiminatedefects>> 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<Integer> 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<ProEconShutdownEvent> 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<String, ProEconFaultLiminatedefects> 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<String, ProEconFaultLiminatedefects> items : dtDictionary.values()) {
- for (ProEconFaultLiminatedefects item : items.values()) {
- proEconFaultLiminatedefectsService.save(item);
- }
- }
- }
- }
|