package com.gyee.ghost.service;/* @author 谢生杰 @date 2022/10/25-10:33 */ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.gyee.common.contant.Contant; import com.gyee.common.model.PointData; import com.gyee.common.model.StringUtils; import com.gyee.common.util.CommonUtils; import com.gyee.common.util.DateUtils; import com.gyee.common.util.DoubleUtils; import com.gyee.ghost.init.CacheContext; import com.gyee.ghost.model.auto.ProEconStationStatusmx; import com.gyee.ghost.model.auto.ProEconWindturbineStatus2; import com.gyee.ghost.model.auto.Windturbine; import com.gyee.ghost.model.auto.Windturbinetestingpointai; import com.gyee.ghost.service.auto.IProEconStationStatusmxService; import com.gyee.ghost.service.auto.IProEconStatusmxService; import com.gyee.ghost.service.auto.IProEconWindturbineStatus2Service; import com.gyee.ghost.util.realtimesource.IEdosUtil; import lombok.extern.slf4j.Slf4j; import oracle.sql.Datum; import org.apache.ibatis.annotations.Update; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Service @Slf4j public class RealtimeService { @Resource private IProEconWindturbineStatus2Service proEconWindturbineStatus2Service; @Resource private IProEconStationStatusmxService proEconStationStatusmxService; @Resource private IEdosUtil edosUtil; public void saveWindturbineStatus2() throws ParseException { List resultList = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); List wtls = CacheContext.wtls; Map statusmxMap = CacheContext.statusmxMap; Map> wtpAimap = CacheContext.wtpAimap; Date samedayZero = DateUtils.getSamedayZero(); Date currentDate = sdf.parse(DateUtils.toDate(DateUtils.getCurrentDate())); // Date befroeDate = DateUtils.addSeconds(currentDate, -1); Date befroeDate = DateUtils.addMinutes(currentDate,-5); Date startOfDay = DateUtils.getStartOfDay(currentDate); Date endOfDay = DateUtils.getEndOfDay(currentDate); wtls.stream().forEach(wt->{ Map stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId()); Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX); Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022); try { PointData realData = edosUtil.getSectionData(windturbinetestingpointai,currentDate.getTime()); double aDouble = realData.getPointValueInDouble(); PointData sectionData = edosUtil.getSectionData(windturbinetestingpointai, befroeDate.getTime()); double tempDouble = sectionData.getPointValueInDouble(); double speed = edosUtil.getRealData(windturbinetestingpointaifs).getPointValueInDouble(); if (isEq(DateUtils.toDate(currentDate),DateUtils.toDate(startOfDay)) || aDouble != tempDouble){ ProEconWindturbineStatus2 proEconWindturbineStatus2 = new ProEconWindturbineStatus2(); proEconWindturbineStatus2.setId(CommonUtils.getUUID()); proEconWindturbineStatus2.setWindpowerstationId(wt.getWindpowerstationid()); proEconWindturbineStatus2.setWindturbineId(wt.getId()); proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(currentDate.getTime())); proEconWindturbineStatus2.setStartTime(DateUtils.parseLongToDate(currentDate.getTime())); proEconWindturbineStatus2.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus2.getStopTime(), proEconWindturbineStatus2.getStartTime())); proEconWindturbineStatus2.setLossPower(0.0); proEconWindturbineStatus2.setShutdownEventId(""); proEconWindturbineStatus2.setProjectId(wt.getProjectid()); proEconWindturbineStatus2.setSatusCode(new Double(aDouble).intValue()); proEconWindturbineStatus2.setSpeed(speed); proEconWindturbineStatus2.setAvgSpeed(0.0); String statusName = statusmxMap.get(new Double(aDouble).intValue()); proEconWindturbineStatus2.setStatusDesc(statusName); resultList.add(proEconWindturbineStatus2); // proEconWindturbineStatus2Service.save(proEconWindturbineStatus2); QueryWrapper qw = new QueryWrapper<>(); qw.eq("windTurbine_Id",wt.getId()); // Date beforeFive = DateUtils.addMinutes(sdf.parse(DateUtils.toDate1(currentDate)), -5); // String toDate = DateUtils.toDate(beforeFive); // Date parse = sdf.parse(toDate); qw.eq("stop_Time",befroeDate); qw.orderByDesc("start_time"); Optional first = proEconWindturbineStatus2Service.list(qw).stream().findFirst(); if (first.isPresent()){ ProEconWindturbineStatus2 proEconWindturbineStatus = first.get(); proEconWindturbineStatus.setStopTime(DateUtils.parseLongToDate(currentDate.getTime())); proEconWindturbineStatus.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus.getStopTime(), proEconWindturbineStatus.getStartTime())); proEconWindturbineStatus.setLossPower(0.0); proEconWindturbineStatus.setSpeed(speed); proEconWindturbineStatus.setAvgSpeed(0.0); resultList.add(proEconWindturbineStatus); // proEconWindturbineStatus2Service.updateById(proEconWindturbineStatus); } }else { QueryWrapper qw = new QueryWrapper<>(); qw.eq("windTurbine_Id",wt.getId()); // Date beforeFive = DateUtils.addMinutes(sdf.parse(DateUtils.toDate1(currentDate)), -5); // String toDate = DateUtils.toDate(beforeFive); // Date parse = sdf.parse(toDate); qw.eq("stop_Time",befroeDate); qw.orderByDesc("start_time"); Optional first = proEconWindturbineStatus2Service.list(qw).stream().findFirst(); if (first.isPresent()){ ProEconWindturbineStatus2 proEconWindturbineStatus2 = first.get(); proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(currentDate.getTime())); proEconWindturbineStatus2.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus2.getStopTime(), proEconWindturbineStatus2.getStartTime())); proEconWindturbineStatus2.setLossPower(0.0); proEconWindturbineStatus2.setSpeed(speed); proEconWindturbineStatus2.setAvgSpeed(0.0); // proEconWindturbineStatus2Service.updateById(proEconWindturbineStatus2); resultList.add(proEconWindturbineStatus2); }else { ProEconWindturbineStatus2 proEconWindturbineStatus2 = new ProEconWindturbineStatus2(); proEconWindturbineStatus2.setId(CommonUtils.getUUID()); proEconWindturbineStatus2.setWindpowerstationId(wt.getWindpowerstationid()); proEconWindturbineStatus2.setWindturbineId(wt.getId()); proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(currentDate.getTime())); proEconWindturbineStatus2.setStartTime(DateUtils.parseLongToDate(currentDate.getTime())); proEconWindturbineStatus2.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus2.getStopTime(), proEconWindturbineStatus2.getStartTime())); proEconWindturbineStatus2.setLossPower(0.0); proEconWindturbineStatus2.setShutdownEventId(""); proEconWindturbineStatus2.setProjectId(wt.getProjectid()); proEconWindturbineStatus2.setSatusCode(new Double(aDouble).intValue()); proEconWindturbineStatus2.setSpeed(speed); proEconWindturbineStatus2.setAvgSpeed(0.0); String statusName = statusmxMap.get(new Double(aDouble).intValue()); proEconWindturbineStatus2.setStatusDesc(statusName); resultList.add(proEconWindturbineStatus2); // proEconWindturbineStatus2Service.save(proEconWindturbineStatus2); } } } catch (Exception e) { e.printStackTrace(); } }); proEconWindturbineStatus2Service.saveOrUpdateBatch(resultList); } public void saveWindstationStatus(String beginDate,String endDate) { List resultList = new ArrayList<>(); List days = DateUtils.getDays(beginDate, endDate); List wtls = CacheContext.wtls; Map statusmxMap = CacheContext.statusmxMap; Set status = statusmxMap.keySet(); days.stream().forEach(day->{ Date date = DateUtils.parseDate1(day); Date addDays = DateUtils.addDays(date, 1); Map delMap = new HashMap<>(); delMap.put("recorddate",date); proEconStationStatusmxService.removeByMap(delMap); wtls.stream().forEach(wt->{ QueryWrapper qw = new QueryWrapper<>(); qw.eq("windTurbine_Id",wt.getId()); qw.le("stop_Time",addDays).ge("start_Time",date); List windturbineStatus2s = proEconWindturbineStatus2Service.list(qw); status.stream().forEach(sta->{ ProEconStationStatusmx proEconStationStatusmx = new ProEconStationStatusmx(); proEconStationStatusmx.setId(CommonUtils.getUUID()); proEconStationStatusmx.setProjectId(wt.getProjectid()); proEconStationStatusmx.setWindpowerstationId(wt.getWindpowerstationid()); proEconStationStatusmx.setWindturbineId(wt.getId()); proEconStationStatusmx.setRecorddate(date); proEconStationStatusmx.setStopHours(windturbineStatus2s.stream().filter(i->i.getSatusCode().equals(sta)).mapToDouble(ProEconWindturbineStatus2::getStopHours).sum()); proEconStationStatusmx.setLossPower(0.0); proEconStationStatusmx.setSatusCode(sta); proEconStationStatusmx.setStatusDesc(statusmxMap.get(sta)); proEconStationStatusmx.setAvgSpeed(0.0); resultList.add(proEconStationStatusmx); }); }); proEconStationStatusmxService.saveBatch(resultList); }); // List resultList = new ArrayList<>(); // List days = DateUtils.getDays(beginDate, endDate); // List wtls = CacheContext.wtls; // Map statusmxMap = CacheContext.statusmxMap; // Set status = statusmxMap.keySet(); // // Map> wtpAimap = CacheContext.wtpAimap; // // Date samedayZero = DateUtils.getSamedayZero(); // Date currentDate = DateUtils.getCurrentDate(); //// Date befroeDate = DateUtils.addSeconds(currentDate,-1); //// Date befroeDate = DateUtils.addMinutes(currentDate,-5); // days.forEach(day->{ // Date date = DateUtils.parseDate(day); // Date addday = DateUtils.addDays(date, 1); // wtls.stream().forEach(wt->{ // Map stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId()); // Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX); // Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022); // try { // List historyDatasSnap = edosUtil.getHistoryDatasSnap(windturbinetestingpointai, date.getTime() / 1000, addday.getTime() / 1000, null, 60l); // status.stream().forEach(sta->{ // int minutes = historyDatasSnap.stream().filter(i -> i.getPointValueInDouble() == sta).collect(Collectors.toList()).size(); // ProEconStationStatusmx proEconStationStatusmx = new ProEconStationStatusmx(); // proEconStationStatusmx.setId(CommonUtils.getUUID()); // proEconStationStatusmx.setProjectId(wt.getProjectid()); // proEconStationStatusmx.setWindpowerstationId(wt.getWindpowerstationid()); // proEconStationStatusmx.setWindturbineId(wt.getId()); // proEconStationStatusmx.setRecorddate(date); // proEconStationStatusmx.setStopHours(DoubleUtils.keepPrecision(new Double(minutes)/60,2)); // proEconStationStatusmx.setLossPower(0.0); // proEconStationStatusmx.setSatusCode(sta); // proEconStationStatusmx.setStatusDesc(statusmxMap.get(sta)); // proEconStationStatusmx.setAvgSpeed(0.0); //// proEconStationStatusmxService.save(proEconStationStatusmx); // resultList.add(proEconStationStatusmx); // }); // } catch (Exception e) { // e.printStackTrace(); // } // // }); // }); // // proEconStationStatusmxService.saveBatch(resultList); } public void saveWindstationStatus1(String beginDate,String endDate) { List resultList = new ArrayList<>(); List days = DateUtils.getDays(beginDate, endDate); List wtls = CacheContext.wtls; Map statusmxMap = CacheContext.statusmxMap; Set status = statusmxMap.keySet(); Map> wtpAimap = CacheContext.wtpAimap; Date samedayZero = DateUtils.getSamedayZero(); Date currentDate = DateUtils.getCurrentDate(); // Date befroeDate = DateUtils.addSeconds(currentDate,-1); // Date befroeDate = DateUtils.addMinutes(currentDate,-5); days.forEach(day->{ Date date = DateUtils.parseDate(day); Date addday = DateUtils.addDays(date, 1); wtls.stream().forEach(wt->{ Map stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId()); Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX); Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022); try { List historyDatasSnap = edosUtil.getHistoryDatasSnap(windturbinetestingpointai, date.getTime() / 1000, addday.getTime() / 1000, null, 60l); status.stream().forEach(sta->{ int minutes = historyDatasSnap.stream().filter(i -> i.getPointValueInDouble() == sta).collect(Collectors.toList()).size(); ProEconStationStatusmx proEconStationStatusmx = new ProEconStationStatusmx(); proEconStationStatusmx.setId(CommonUtils.getUUID()); proEconStationStatusmx.setProjectId(wt.getProjectid()); proEconStationStatusmx.setWindpowerstationId(wt.getWindpowerstationid()); proEconStationStatusmx.setWindturbineId(wt.getId()); proEconStationStatusmx.setRecorddate(date); proEconStationStatusmx.setStopHours(DoubleUtils.keepPrecision(new Double(minutes)/60,2)); proEconStationStatusmx.setLossPower(0.0); proEconStationStatusmx.setSatusCode(sta); proEconStationStatusmx.setStatusDesc(statusmxMap.get(sta)); proEconStationStatusmx.setAvgSpeed(0.0); // proEconStationStatusmxService.save(proEconStationStatusmx); resultList.add(proEconStationStatusmx); }); } catch (Exception e) { e.printStackTrace(); } }); }); proEconStationStatusmxService.saveBatch(resultList); } /** * 获取两日期间日期list * * @param beginDate * @param endDate * @return */ private boolean isEq(String beginDate, String endDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date date1 = sdf.parse(beginDate); Date date2 = sdf.parse(endDate); if(date1.equals(date2)) { return true; }else { return false; } } }