|
@@ -0,0 +1,266 @@
|
|
|
+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 org.apache.ibatis.annotations.Update;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+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() {
|
|
|
+
|
|
|
+ List<ProEconWindturbineStatus2> resultList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Windturbine> wtls = CacheContext.wtls;
|
|
|
+ Map<Integer, String> statusmxMap = CacheContext.statusmxMap;
|
|
|
+
|
|
|
+ Map<String, Map<String, Windturbinetestingpointai>> wtpAimap = CacheContext.wtpAimap;
|
|
|
+
|
|
|
+ Date samedayZero = DateUtils.getSamedayZero();
|
|
|
+ Date currentDate = DateUtils.getCurrentDate();
|
|
|
+// Date befroeDate = DateUtils.addSeconds(currentDate, -1);
|
|
|
+ Date befroeDate = DateUtils.addMinutes(currentDate,-5);
|
|
|
+
|
|
|
+ wtls.stream().forEach(wt->{
|
|
|
+
|
|
|
+ Map<String, Windturbinetestingpointai> stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId());
|
|
|
+ Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX);
|
|
|
+ Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022);
|
|
|
+ try {
|
|
|
+ PointData realData = edosUtil.getRealData(windturbinetestingpointai);
|
|
|
+
|
|
|
+ double aDouble = realData.getPointValueInDouble();
|
|
|
+
|
|
|
+ PointData sectionData = edosUtil.getSectionData(windturbinetestingpointai, befroeDate.getTime());
|
|
|
+ double tempDouble = sectionData.getPointValueInDouble();
|
|
|
+ double speed = edosUtil.getRealData(windturbinetestingpointaifs).getPointValueInDouble();
|
|
|
+ if (aDouble != tempDouble){
|
|
|
+ ProEconWindturbineStatus2 proEconWindturbineStatus2 = new ProEconWindturbineStatus2();
|
|
|
+ proEconWindturbineStatus2.setId(CommonUtils.getUUID());
|
|
|
+ proEconWindturbineStatus2.setWindpowerstationId(wt.getWindpowerstationid());
|
|
|
+ proEconWindturbineStatus2.setWindturbineId(wt.getId());
|
|
|
+ proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(realData.getPointTime()*1000));
|
|
|
+ proEconWindturbineStatus2.setStartTime(DateUtils.parseLongToDate(realData.getPointTime()*1000));
|
|
|
+ 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);
|
|
|
+
|
|
|
+ QueryWrapper<ProEconWindturbineStatus2> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("windTurbine_Id",wt.getId());
|
|
|
+ qw.orderByDesc("start_Time");
|
|
|
+ ProEconWindturbineStatus2 proEconWindturbineStatus21 = proEconWindturbineStatus2Service.getBaseMapper().selectOne(qw);
|
|
|
+ if (StringUtils.isNotNull(proEconWindturbineStatus21)){
|
|
|
+ proEconWindturbineStatus21.setStopTime(DateUtils.parseLongToDate(realData.getPointTime()*1000));
|
|
|
+ proEconWindturbineStatus21.setLossPower(0.0);
|
|
|
+ proEconWindturbineStatus21.setSpeed(speed);
|
|
|
+ proEconWindturbineStatus21.setAvgSpeed(0.0);
|
|
|
+ resultList.add(proEconWindturbineStatus21);
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ QueryWrapper<ProEconWindturbineStatus2> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("windTurbine_Id",wt.getId());
|
|
|
+ qw.orderByDesc("start_Time");
|
|
|
+ ProEconWindturbineStatus2 proEconWindturbineStatus21 = proEconWindturbineStatus2Service.getBaseMapper().selectOne(qw);
|
|
|
+ if (StringUtils.isNotNull(proEconWindturbineStatus21)){
|
|
|
+ proEconWindturbineStatus21.setStopTime(DateUtils.parseLongToDate(realData.getPointTime()*1000));
|
|
|
+ proEconWindturbineStatus21.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus21.getStopTime(), proEconWindturbineStatus21.getStartTime()));
|
|
|
+ proEconWindturbineStatus21.setLossPower(0.0);
|
|
|
+ proEconWindturbineStatus21.setSpeed(speed);
|
|
|
+ proEconWindturbineStatus21.setAvgSpeed(0.0);
|
|
|
+ resultList.add(proEconWindturbineStatus21);
|
|
|
+ }else{
|
|
|
+ ProEconWindturbineStatus2 proEconWindturbineStatus2 = new ProEconWindturbineStatus2();
|
|
|
+ proEconWindturbineStatus2.setId(CommonUtils.getUUID());
|
|
|
+ proEconWindturbineStatus2.setWindpowerstationId(wt.getWindpowerstationid());
|
|
|
+ proEconWindturbineStatus2.setWindturbineId(wt.getId());
|
|
|
+ proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(realData.getPointTime()*1000));
|
|
|
+ proEconWindturbineStatus2.setStartTime(DateUtils.parseLongToDate(realData.getPointTime()*1000));
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ proEconWindturbineStatus2Service.saveOrUpdateBatch(resultList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void saveWindstationStatus(String beginDate,String endDate) {
|
|
|
+ List<ProEconStationStatusmx> resultList = new ArrayList<>();
|
|
|
+ List<String> days = DateUtils.getDays(beginDate, endDate);
|
|
|
+ List<Windturbine> wtls = CacheContext.wtls;
|
|
|
+ Map<Integer, String> statusmxMap = CacheContext.statusmxMap;
|
|
|
+ Set<Integer> status = statusmxMap.keySet();
|
|
|
+
|
|
|
+ Map<String, Map<String, Windturbinetestingpointai>> 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.addMinutes(date, 1);
|
|
|
+ wtls.stream().forEach(wt->{
|
|
|
+ Map<String, Windturbinetestingpointai> stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId());
|
|
|
+ Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX);
|
|
|
+ Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022);
|
|
|
+ try {
|
|
|
+ List<PointData> 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).intValue()/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<Windturbine> wtls = CacheContext.wtls;
|
|
|
+// Map<Integer, String> statusmxMap = CacheContext.statusmxMap;
|
|
|
+// Set<Integer> status = statusmxMap.keySet();
|
|
|
+// List<String> days = DateUtils.getDays(beginDate, endDate);
|
|
|
+// days.forEach(day->{
|
|
|
+// Date date = DateUtils.parseDate1(day);
|
|
|
+// Date addDay = DateUtils.addDays(date, 1);
|
|
|
+//
|
|
|
+// wtls.stream().forEach(wt->{
|
|
|
+// QueryWrapper<ProEconWindturbineStatus2> qw = new QueryWrapper<>();
|
|
|
+// qw.eq("windTurbine_Id",wt.getId());
|
|
|
+// qw.ge("start_Time",date).lt("start_Time",addDay);
|
|
|
+// List<ProEconWindturbineStatus2> proEconWindturbineStatus2s = proEconWindturbineStatus2Service.list(qw);
|
|
|
+// if (StringUtils.isNotNull(proEconWindturbineStatus2s)){
|
|
|
+// status.stream().forEach(sta->{
|
|
|
+// List<ProEconWindturbineStatus2> collect = proEconWindturbineStatus2s.stream().filter(i -> i.getSatusCode() == sta).collect(Collectors.toList());
|
|
|
+// if (StringUtils.isNotNull(collect)){
|
|
|
+// double sum = collect.stream().mapToDouble(ProEconWindturbineStatus2::getStopHours).sum();
|
|
|
+// 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(sum);
|
|
|
+// proEconStationStatusmx.setLossPower(0.0);
|
|
|
+// proEconStationStatusmx.setSatusCode(sta);
|
|
|
+// proEconStationStatusmx.setStatusDesc(statusmxMap.get(sta));
|
|
|
+// proEconStationStatusmx.setAvgSpeed(0.0);
|
|
|
+// }else{
|
|
|
+//
|
|
|
+// }
|
|
|
+// });
|
|
|
+// }else{
|
|
|
+//
|
|
|
+// }
|
|
|
+// qw.clear();
|
|
|
+// qw.eq("windTurbine_Id",wt.getId());
|
|
|
+// qw.ge("stop_Time",date).lt("start_Time",addDay);
|
|
|
+//
|
|
|
+// proEconWindturbineStatus2s.stream().forEach(data->{
|
|
|
+//
|
|
|
+// });
|
|
|
+//
|
|
|
+//
|
|
|
+// });
|
|
|
+//
|
|
|
+// });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取两日期间日期list
|
|
|
+ *
|
|
|
+ * @param beginDate
|
|
|
+ * @param endDate
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<String> getDays(String beginDate, String endDate) {
|
|
|
+ List<String> days = null;
|
|
|
+ if (StringUtils.isNotEmpty(beginDate) && StringUtils.isNotEmpty(endDate)) {
|
|
|
+ days = DateUtils.getDays(beginDate, endDate);
|
|
|
+ } else {
|
|
|
+ days = new ArrayList<>();
|
|
|
+ days.add(DateUtils.getYesterdayStr("yyyy-MM-dd"));
|
|
|
+ }
|
|
|
+ return days;
|
|
|
+ }
|
|
|
+}
|