RealtimeService.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. package com.gyee.ghost.service;/*
  2. @author 谢生杰
  3. @date 2022/10/25-10:33
  4. */
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  7. import com.gyee.common.contant.Contant;
  8. import com.gyee.common.model.PointData;
  9. import com.gyee.common.model.StringUtils;
  10. import com.gyee.common.util.CommonUtils;
  11. import com.gyee.common.util.DateUtils;
  12. import com.gyee.common.util.DoubleUtils;
  13. import com.gyee.ghost.init.CacheContext;
  14. import com.gyee.ghost.model.auto.ProEconStationStatusmx;
  15. import com.gyee.ghost.model.auto.ProEconWindturbineStatus2;
  16. import com.gyee.ghost.model.auto.Windturbine;
  17. import com.gyee.ghost.model.auto.Windturbinetestingpointai;
  18. import com.gyee.ghost.service.auto.IProEconStationStatusmxService;
  19. import com.gyee.ghost.service.auto.IProEconStatusmxService;
  20. import com.gyee.ghost.service.auto.IProEconWindturbineStatus2Service;
  21. import com.gyee.ghost.util.realtimesource.IEdosUtil;
  22. import lombok.extern.slf4j.Slf4j;
  23. import oracle.sql.Datum;
  24. import org.apache.ibatis.annotations.Update;
  25. import org.springframework.stereotype.Service;
  26. import javax.annotation.Resource;
  27. import java.text.ParseException;
  28. import java.text.SimpleDateFormat;
  29. import java.util.*;
  30. import java.util.stream.Collectors;
  31. @Service
  32. @Slf4j
  33. public class RealtimeService {
  34. @Resource
  35. private IProEconWindturbineStatus2Service proEconWindturbineStatus2Service;
  36. @Resource
  37. private IProEconStationStatusmxService proEconStationStatusmxService;
  38. @Resource
  39. private IEdosUtil edosUtil;
  40. public void saveWindturbineStatus2() throws ParseException {
  41. List<ProEconWindturbineStatus2> resultList = new ArrayList<>();
  42. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  43. List<Windturbine> wtls = CacheContext.wtls;
  44. Map<Integer, String> statusmxMap = CacheContext.statusmxMap;
  45. Map<String, Map<String, Windturbinetestingpointai>> wtpAimap = CacheContext.wtpAimap;
  46. Date samedayZero = DateUtils.getSamedayZero();
  47. Date currentDate = sdf.parse(DateUtils.toDate(DateUtils.getCurrentDate()));
  48. // Date befroeDate = DateUtils.addSeconds(currentDate, -1);
  49. Date befroeDate = DateUtils.addMinutes(currentDate,-5);
  50. Date startOfDay = DateUtils.getStartOfDay(currentDate);
  51. Date endOfDay = DateUtils.getEndOfDay(currentDate);
  52. wtls.stream().forEach(wt->{
  53. Map<String, Windturbinetestingpointai> stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId());
  54. Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX);
  55. Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022);
  56. try {
  57. PointData realData = edosUtil.getSectionData(windturbinetestingpointai,currentDate.getTime());
  58. double aDouble = realData.getPointValueInDouble();
  59. PointData sectionData = edosUtil.getSectionData(windturbinetestingpointai, befroeDate.getTime());
  60. double tempDouble = sectionData.getPointValueInDouble();
  61. double speed = edosUtil.getRealData(windturbinetestingpointaifs).getPointValueInDouble();
  62. if (isEq(DateUtils.toDate(currentDate),DateUtils.toDate(startOfDay)) || aDouble != tempDouble){
  63. ProEconWindturbineStatus2 proEconWindturbineStatus2 = new ProEconWindturbineStatus2();
  64. proEconWindturbineStatus2.setId(CommonUtils.getUUID());
  65. proEconWindturbineStatus2.setWindpowerstationId(wt.getWindpowerstationid());
  66. proEconWindturbineStatus2.setWindturbineId(wt.getId());
  67. proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(currentDate.getTime()));
  68. proEconWindturbineStatus2.setStartTime(DateUtils.parseLongToDate(currentDate.getTime()));
  69. proEconWindturbineStatus2.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus2.getStopTime(), proEconWindturbineStatus2.getStartTime()));
  70. proEconWindturbineStatus2.setLossPower(0.0);
  71. proEconWindturbineStatus2.setShutdownEventId("");
  72. proEconWindturbineStatus2.setProjectId(wt.getProjectid());
  73. proEconWindturbineStatus2.setSatusCode(new Double(aDouble).intValue());
  74. proEconWindturbineStatus2.setSpeed(speed);
  75. proEconWindturbineStatus2.setAvgSpeed(0.0);
  76. String statusName = statusmxMap.get(new Double(aDouble).intValue());
  77. proEconWindturbineStatus2.setStatusDesc(statusName);
  78. resultList.add(proEconWindturbineStatus2);
  79. // proEconWindturbineStatus2Service.save(proEconWindturbineStatus2);
  80. QueryWrapper<ProEconWindturbineStatus2> qw = new QueryWrapper<>();
  81. qw.eq("windTurbine_Id",wt.getId());
  82. // Date beforeFive = DateUtils.addMinutes(sdf.parse(DateUtils.toDate1(currentDate)), -5);
  83. // String toDate = DateUtils.toDate(beforeFive);
  84. // Date parse = sdf.parse(toDate);
  85. qw.eq("stop_Time",befroeDate);
  86. qw.orderByDesc("start_time");
  87. Optional<ProEconWindturbineStatus2> first = proEconWindturbineStatus2Service.list(qw).stream().findFirst();
  88. if (first.isPresent()){
  89. ProEconWindturbineStatus2 proEconWindturbineStatus = first.get();
  90. proEconWindturbineStatus.setStopTime(DateUtils.parseLongToDate(currentDate.getTime()));
  91. proEconWindturbineStatus.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus.getStopTime(), proEconWindturbineStatus.getStartTime()));
  92. proEconWindturbineStatus.setLossPower(0.0);
  93. proEconWindturbineStatus.setSpeed(speed);
  94. proEconWindturbineStatus.setAvgSpeed(0.0);
  95. resultList.add(proEconWindturbineStatus);
  96. // proEconWindturbineStatus2Service.updateById(proEconWindturbineStatus);
  97. }
  98. }else {
  99. QueryWrapper<ProEconWindturbineStatus2> qw = new QueryWrapper<>();
  100. qw.eq("windTurbine_Id",wt.getId());
  101. // Date beforeFive = DateUtils.addMinutes(sdf.parse(DateUtils.toDate1(currentDate)), -5);
  102. // String toDate = DateUtils.toDate(beforeFive);
  103. // Date parse = sdf.parse(toDate);
  104. qw.eq("stop_Time",befroeDate);
  105. qw.orderByDesc("start_time");
  106. Optional<ProEconWindturbineStatus2> first = proEconWindturbineStatus2Service.list(qw).stream().findFirst();
  107. if (first.isPresent()){
  108. ProEconWindturbineStatus2 proEconWindturbineStatus2 = first.get();
  109. proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(currentDate.getTime()));
  110. proEconWindturbineStatus2.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus2.getStopTime(), proEconWindturbineStatus2.getStartTime()));
  111. proEconWindturbineStatus2.setLossPower(0.0);
  112. proEconWindturbineStatus2.setSpeed(speed);
  113. proEconWindturbineStatus2.setAvgSpeed(0.0);
  114. // proEconWindturbineStatus2Service.updateById(proEconWindturbineStatus2);
  115. resultList.add(proEconWindturbineStatus2);
  116. }else {
  117. ProEconWindturbineStatus2 proEconWindturbineStatus2 = new ProEconWindturbineStatus2();
  118. proEconWindturbineStatus2.setId(CommonUtils.getUUID());
  119. proEconWindturbineStatus2.setWindpowerstationId(wt.getWindpowerstationid());
  120. proEconWindturbineStatus2.setWindturbineId(wt.getId());
  121. proEconWindturbineStatus2.setStopTime(DateUtils.parseLongToDate(currentDate.getTime()));
  122. proEconWindturbineStatus2.setStartTime(DateUtils.parseLongToDate(currentDate.getTime()));
  123. proEconWindturbineStatus2.setStopHours(DateUtils.hoursDiff2(proEconWindturbineStatus2.getStopTime(), proEconWindturbineStatus2.getStartTime()));
  124. proEconWindturbineStatus2.setLossPower(0.0);
  125. proEconWindturbineStatus2.setShutdownEventId("");
  126. proEconWindturbineStatus2.setProjectId(wt.getProjectid());
  127. proEconWindturbineStatus2.setSatusCode(new Double(aDouble).intValue());
  128. proEconWindturbineStatus2.setSpeed(speed);
  129. proEconWindturbineStatus2.setAvgSpeed(0.0);
  130. String statusName = statusmxMap.get(new Double(aDouble).intValue());
  131. proEconWindturbineStatus2.setStatusDesc(statusName);
  132. resultList.add(proEconWindturbineStatus2);
  133. // proEconWindturbineStatus2Service.save(proEconWindturbineStatus2);
  134. }
  135. }
  136. } catch (Exception e) {
  137. e.printStackTrace();
  138. }
  139. });
  140. proEconWindturbineStatus2Service.saveOrUpdateBatch(resultList);
  141. }
  142. public void saveWindstationStatus(String beginDate,String endDate) {
  143. List<ProEconStationStatusmx> resultList = new ArrayList<>();
  144. List<String> days = DateUtils.getDays(beginDate, endDate);
  145. List<Windturbine> wtls = CacheContext.wtls;
  146. Map<Integer, String> statusmxMap = CacheContext.statusmxMap;
  147. Set<Integer> status = statusmxMap.keySet();
  148. days.stream().forEach(day->{
  149. Date date = DateUtils.parseDate1(day);
  150. Date addDays = DateUtils.addDays(date, 1);
  151. Map<String,Object> delMap = new HashMap<>();
  152. delMap.put("recorddate",date);
  153. proEconStationStatusmxService.removeByMap(delMap);
  154. wtls.stream().forEach(wt->{
  155. QueryWrapper<ProEconWindturbineStatus2> qw = new QueryWrapper<>();
  156. qw.eq("windTurbine_Id",wt.getId());
  157. qw.le("stop_Time",addDays).ge("start_Time",date);
  158. List<ProEconWindturbineStatus2> windturbineStatus2s = proEconWindturbineStatus2Service.list(qw);
  159. status.stream().forEach(sta->{
  160. ProEconStationStatusmx proEconStationStatusmx = new ProEconStationStatusmx();
  161. proEconStationStatusmx.setId(CommonUtils.getUUID());
  162. proEconStationStatusmx.setProjectId(wt.getProjectid());
  163. proEconStationStatusmx.setWindpowerstationId(wt.getWindpowerstationid());
  164. proEconStationStatusmx.setWindturbineId(wt.getId());
  165. proEconStationStatusmx.setRecorddate(date);
  166. proEconStationStatusmx.setStopHours(windturbineStatus2s.stream().filter(i->i.getSatusCode().equals(sta)).mapToDouble(ProEconWindturbineStatus2::getStopHours).sum());
  167. proEconStationStatusmx.setLossPower(0.0);
  168. proEconStationStatusmx.setSatusCode(sta);
  169. proEconStationStatusmx.setStatusDesc(statusmxMap.get(sta));
  170. proEconStationStatusmx.setAvgSpeed(0.0);
  171. resultList.add(proEconStationStatusmx);
  172. });
  173. });
  174. proEconStationStatusmxService.saveBatch(resultList);
  175. });
  176. // List<ProEconStationStatusmx> resultList = new ArrayList<>();
  177. // List<String> days = DateUtils.getDays(beginDate, endDate);
  178. // List<Windturbine> wtls = CacheContext.wtls;
  179. // Map<Integer, String> statusmxMap = CacheContext.statusmxMap;
  180. // Set<Integer> status = statusmxMap.keySet();
  181. //
  182. // Map<String, Map<String, Windturbinetestingpointai>> wtpAimap = CacheContext.wtpAimap;
  183. //
  184. // Date samedayZero = DateUtils.getSamedayZero();
  185. // Date currentDate = DateUtils.getCurrentDate();
  186. //// Date befroeDate = DateUtils.addSeconds(currentDate,-1);
  187. //// Date befroeDate = DateUtils.addMinutes(currentDate,-5);
  188. // days.forEach(day->{
  189. // Date date = DateUtils.parseDate(day);
  190. // Date addday = DateUtils.addDays(date, 1);
  191. // wtls.stream().forEach(wt->{
  192. // Map<String, Windturbinetestingpointai> stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId());
  193. // Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX);
  194. // Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022);
  195. // try {
  196. // List<PointData> historyDatasSnap = edosUtil.getHistoryDatasSnap(windturbinetestingpointai, date.getTime() / 1000, addday.getTime() / 1000, null, 60l);
  197. // status.stream().forEach(sta->{
  198. // int minutes = historyDatasSnap.stream().filter(i -> i.getPointValueInDouble() == sta).collect(Collectors.toList()).size();
  199. // ProEconStationStatusmx proEconStationStatusmx = new ProEconStationStatusmx();
  200. // proEconStationStatusmx.setId(CommonUtils.getUUID());
  201. // proEconStationStatusmx.setProjectId(wt.getProjectid());
  202. // proEconStationStatusmx.setWindpowerstationId(wt.getWindpowerstationid());
  203. // proEconStationStatusmx.setWindturbineId(wt.getId());
  204. // proEconStationStatusmx.setRecorddate(date);
  205. // proEconStationStatusmx.setStopHours(DoubleUtils.keepPrecision(new Double(minutes)/60,2));
  206. // proEconStationStatusmx.setLossPower(0.0);
  207. // proEconStationStatusmx.setSatusCode(sta);
  208. // proEconStationStatusmx.setStatusDesc(statusmxMap.get(sta));
  209. // proEconStationStatusmx.setAvgSpeed(0.0);
  210. //// proEconStationStatusmxService.save(proEconStationStatusmx);
  211. // resultList.add(proEconStationStatusmx);
  212. // });
  213. // } catch (Exception e) {
  214. // e.printStackTrace();
  215. // }
  216. //
  217. // });
  218. // });
  219. //
  220. // proEconStationStatusmxService.saveBatch(resultList);
  221. }
  222. public void saveWindstationStatus1(String beginDate,String endDate) {
  223. List<ProEconStationStatusmx> resultList = new ArrayList<>();
  224. List<String> days = DateUtils.getDays(beginDate, endDate);
  225. List<Windturbine> wtls = CacheContext.wtls;
  226. Map<Integer, String> statusmxMap = CacheContext.statusmxMap;
  227. Set<Integer> status = statusmxMap.keySet();
  228. Map<String, Map<String, Windturbinetestingpointai>> wtpAimap = CacheContext.wtpAimap;
  229. Date samedayZero = DateUtils.getSamedayZero();
  230. Date currentDate = DateUtils.getCurrentDate();
  231. // Date befroeDate = DateUtils.addSeconds(currentDate,-1);
  232. // Date befroeDate = DateUtils.addMinutes(currentDate,-5);
  233. days.forEach(day->{
  234. Date date = DateUtils.parseDate(day);
  235. Date addday = DateUtils.addDays(date, 1);
  236. wtls.stream().forEach(wt->{
  237. Map<String, Windturbinetestingpointai> stringWindturbinetestingpointaiMap = wtpAimap.get(wt.getId());
  238. Windturbinetestingpointai windturbinetestingpointai = stringWindturbinetestingpointaiMap.get(Contant.ZTMX);
  239. Windturbinetestingpointai windturbinetestingpointaifs = stringWindturbinetestingpointaiMap.get(Contant.AI022);
  240. try {
  241. List<PointData> historyDatasSnap = edosUtil.getHistoryDatasSnap(windturbinetestingpointai, date.getTime() / 1000, addday.getTime() / 1000, null, 60l);
  242. status.stream().forEach(sta->{
  243. int minutes = historyDatasSnap.stream().filter(i -> i.getPointValueInDouble() == sta).collect(Collectors.toList()).size();
  244. ProEconStationStatusmx proEconStationStatusmx = new ProEconStationStatusmx();
  245. proEconStationStatusmx.setId(CommonUtils.getUUID());
  246. proEconStationStatusmx.setProjectId(wt.getProjectid());
  247. proEconStationStatusmx.setWindpowerstationId(wt.getWindpowerstationid());
  248. proEconStationStatusmx.setWindturbineId(wt.getId());
  249. proEconStationStatusmx.setRecorddate(date);
  250. proEconStationStatusmx.setStopHours(DoubleUtils.keepPrecision(new Double(minutes)/60,2));
  251. proEconStationStatusmx.setLossPower(0.0);
  252. proEconStationStatusmx.setSatusCode(sta);
  253. proEconStationStatusmx.setStatusDesc(statusmxMap.get(sta));
  254. proEconStationStatusmx.setAvgSpeed(0.0);
  255. // proEconStationStatusmxService.save(proEconStationStatusmx);
  256. resultList.add(proEconStationStatusmx);
  257. });
  258. } catch (Exception e) {
  259. e.printStackTrace();
  260. }
  261. });
  262. });
  263. proEconStationStatusmxService.saveBatch(resultList);
  264. }
  265. /**
  266. * 获取两日期间日期list
  267. *
  268. * @param beginDate
  269. * @param endDate
  270. * @return
  271. */
  272. private boolean isEq(String beginDate, String endDate) throws ParseException {
  273. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  274. Date date1 = sdf.parse(beginDate);
  275. Date date2 = sdf.parse(endDate);
  276. if(date1.equals(date2)) {
  277. return true;
  278. }else {
  279. return false;
  280. }
  281. }
  282. }