EquipmentInfo5Service.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. package com.gyee.generation.service;//package com.gyee.generation.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.gyee.common.contant.ContantXk;
  4. import com.gyee.common.model.PointData;
  5. import com.gyee.generation.init.CacheContext;
  6. import com.gyee.generation.model.auto.ProBasicEquipment;
  7. import com.gyee.generation.model.auto.ProBasicEquipmentPoint;
  8. import com.gyee.generation.model.auto.ProEconEquipmentInfoDay5;
  9. import com.gyee.generation.model.auto.ProEconShutdownEvent2;
  10. import com.gyee.generation.service.auto.IProEconEquipmentInfoDay5Service;
  11. import com.gyee.generation.service.auto.IProEconShutdownEvent2Service;
  12. import com.gyee.generation.util.DateUtils;
  13. import com.gyee.generation.util.realtimesource.IEdosUtil;
  14. import com.gyee.generation.util.statisticcs.Initial;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import java.util.*;
  18. import java.util.stream.Collectors;
  19. @Service
  20. public class EquipmentInfo5Service {
  21. // private static final Logger logger = LoggerFactory.getLogger(EquipmentInfo5Service.class);
  22. @Resource
  23. private IEdosUtil edosUtil;
  24. @Resource
  25. private IProEconShutdownEvent2Service proEconShutdownEvent2Service;
  26. //状态转换率
  27. @Resource
  28. private IProEconEquipmentInfoDay5Service proEconEquipmentInfoDay5Service;
  29. public void calEquipmentInfoDay(Date currentDate) throws Exception {
  30. resetRate(DateUtils.truncate(currentDate));
  31. }
  32. /**
  33. * 复位及时率
  34. */
  35. public void resetRate(Date currentDate) throws Exception {
  36. //调度时间是第二天,currentDate 是第一天,
  37. Date endDate = DateUtils.addDays(currentDate, 1);
  38. QueryWrapper<ProEconShutdownEvent2> queryWrapper = new QueryWrapper<>();
  39. queryWrapper.ge("stop_Time",currentDate).le("stop_Time",endDate)
  40. .isNotNull("stop_Type_Id").isNotNull("stop_Hours").ne("stop_Type_Id","wh");
  41. List<ProEconShutdownEvent2> shutdownevents = proEconShutdownEvent2Service.list(queryWrapper);
  42. Map<String, ProEconEquipmentInfoDay5> rates = new HashMap<>();
  43. for (ProBasicEquipment wt : CacheContext.wtls) {
  44. if(wt.getWindpowerstationId().contains("GDC"))
  45. {
  46. continue;
  47. }
  48. ProEconEquipmentInfoDay5 rate = new ProEconEquipmentInfoDay5();
  49. rate.setRecordDate(currentDate);
  50. rate.setWindpowerstationId(wt.getWindpowerstationId());
  51. rate.setProjectId(wt.getProjectId());
  52. rate.setLineId(wt.getLineId());
  53. rate.setWindturbineId(wt.getId());
  54. rate.setCompanyId(wt.getCompanyId());
  55. rate.setRegionId(wt.getRegionId());
  56. Initial.initial(rate);
  57. rates.put(wt.getId(), rate);
  58. }
  59. for (ProEconShutdownEvent2 item : shutdownevents) {
  60. if (rates.containsKey(item.getWindturbineId())) {
  61. if (item.getStopHours() <= 1) {
  62. double temp = rates.get(item.getWindturbineId()).getTimerate20();
  63. temp = temp + 1;
  64. rates.get(item.getWindturbineId()).setTimerate20(temp);
  65. if (item.getStopHours() <= 0.08) {
  66. temp = rates.get(item.getWindturbineId()).getTimerate16();
  67. temp = temp + 1;
  68. rates.get(item.getWindturbineId()).setTimerate16(temp);
  69. temp = rates.get(item.getWindturbineId()).getTimerate17();
  70. temp = temp + 1;
  71. rates.get(item.getWindturbineId()).setTimerate17(temp);
  72. temp = rates.get(item.getWindturbineId()).getTimerate18();
  73. temp = temp + 1;
  74. rates.get(item.getWindturbineId()).setTimerate18(temp);
  75. temp = rates.get(item.getWindturbineId()).getTimerate19();
  76. temp = temp + 1;
  77. rates.get(item.getWindturbineId()).setTimerate19(temp);
  78. item.setResetRate("5");
  79. } else if (item.getStopHours() <= 0.17) {
  80. temp = rates.get(item.getWindturbineId()).getTimerate17();
  81. temp = temp + 1;
  82. rates.get(item.getWindturbineId()).setTimerate17(temp);
  83. temp = rates.get(item.getWindturbineId()).getTimerate18();
  84. temp = temp + 1;
  85. rates.get(item.getWindturbineId()).setTimerate18(temp);
  86. temp = rates.get(item.getWindturbineId()).getTimerate19();
  87. temp = temp + 1;
  88. rates.get(item.getWindturbineId()).setTimerate19(temp);
  89. item.setResetRate("10");
  90. } else if (item.getStopHours() <= 0.25) {
  91. temp = rates.get(item.getWindturbineId()).getTimerate18();
  92. temp = temp + 1;
  93. rates.get(item.getWindturbineId()).setTimerate18(temp);
  94. temp = rates.get(item.getWindturbineId()).getTimerate19();
  95. temp = temp + 1;
  96. rates.get(item.getWindturbineId()).setTimerate19(temp);
  97. item.setResetRate("15");
  98. } else if (item.getStopHours() <= 0.33) {
  99. temp = rates.get(item.getWindturbineId()).getTimerate19();
  100. temp = temp + 1;
  101. rates.get(item.getWindturbineId()).setTimerate19(temp);
  102. item.setResetRate("20");
  103. } else if (item.getResetRate() == null) {
  104. item.setResetRate("99");
  105. } else {
  106. item.setResetRate(null);
  107. }
  108. }
  109. if (item.getStopHours() < 24) {
  110. double temp = rates.get(item.getWindturbineId()).getTimerate21();
  111. temp = temp + 1;
  112. rates.get(item.getWindturbineId()).setTimerate21(temp);
  113. }
  114. double temp = rates.get(item.getWindturbineId()).getTimerate22();
  115. temp = temp + 1;
  116. rates.get(item.getWindturbineId()).setTimerate22(temp);
  117. }
  118. }
  119. stateRate(currentDate,rates);
  120. List<ProEconEquipmentInfoDay5> dayls=new ArrayList<>();
  121. QueryWrapper<ProEconEquipmentInfoDay5> queryWrapper2 = new QueryWrapper<>();
  122. queryWrapper2.ge("record_date",currentDate);
  123. List<String> dayInfoids = proEconEquipmentInfoDay5Service.list(queryWrapper2)
  124. .stream()
  125. // .filter(i -> i.getRecordDate().compareTo(currentDate) == 0
  126. // )
  127. .map(ProEconEquipmentInfoDay5::getId).collect(Collectors.toList());
  128. ProEconEquipmentInfoDay5 dayInfo;
  129. if (!dayInfoids.isEmpty()) {
  130. proEconEquipmentInfoDay5Service.removeByIds(dayInfoids);
  131. }
  132. for (ProEconEquipmentInfoDay5 day : rates.values()) {
  133. dayInfo = new ProEconEquipmentInfoDay5();
  134. buildresetRate(dayInfo, day);
  135. dayls.add(dayInfo);
  136. //proEconEquipmentInfoDay5Service.save(dayInfo);
  137. }
  138. List<ProEconEquipmentInfoDay5> templs=new ArrayList<>();
  139. for(ProEconEquipmentInfoDay5 vo:dayls)
  140. {
  141. templs.add(vo);
  142. if(templs.size()==100)
  143. {
  144. proEconEquipmentInfoDay5Service.saveBatch(templs);
  145. templs=new ArrayList<>();
  146. }
  147. }
  148. if(!templs.isEmpty())
  149. {
  150. proEconEquipmentInfoDay5Service.saveBatch(templs);
  151. }
  152. // proEconEquipmentInfoDay5Service.saveBatch(dayls);
  153. }
  154. public void buildresetRate(ProEconEquipmentInfoDay5 dayInfo, ProEconEquipmentInfoDay5 day) {
  155. dayInfo.setRecordDate(day.getRecordDate());
  156. dayInfo.setWindpowerstationId(day.getWindpowerstationId());
  157. dayInfo.setProjectId(day.getProjectId());
  158. dayInfo.setLineId(day.getLineId());
  159. dayInfo.setWindturbineId(day.getWindturbineId());
  160. dayInfo.setRegionId(day.getRegionId());
  161. dayInfo.setCompanyId(day.getCompanyId());
  162. dayInfo.setTimerate1(day.getTimerate1());
  163. dayInfo.setTimerate2(day.getTimerate2());
  164. dayInfo.setTimerate3(day.getTimerate3());
  165. dayInfo.setTimerate4(day.getTimerate4());
  166. dayInfo.setTimerate5(day.getTimerate5());
  167. dayInfo.setTimerate6(day.getTimerate6());
  168. dayInfo.setTimerate7(day.getTimerate7());
  169. dayInfo.setTimerate8(day.getTimerate8());
  170. dayInfo.setTimerate9(day.getTimerate9());
  171. dayInfo.setTimerate10(day.getTimerate10());
  172. dayInfo.setTimerate11(day.getTimerate11());
  173. dayInfo.setTimerate12(day.getTimerate12());
  174. dayInfo.setTimerate13(day.getTimerate13());
  175. dayInfo.setTimerate14(day.getTimerate14());
  176. dayInfo.setTimerate15(day.getTimerate15());
  177. dayInfo.setTimerate16(day.getTimerate16());
  178. dayInfo.setTimerate17(day.getTimerate17());
  179. dayInfo.setTimerate18(day.getTimerate18());
  180. dayInfo.setTimerate19(day.getTimerate19());
  181. dayInfo.setTimerate20(day.getTimerate20());
  182. dayInfo.setTimerate21(day.getTimerate21());
  183. dayInfo.setTimerate22(day.getTimerate22());
  184. }
  185. /**
  186. * 状态转换及时率
  187. */
  188. Map<Double, Double> stateDescription1 = new HashMap<>();
  189. Map<Double, Double> stateDescription2 = new HashMap<>();
  190. public void stateRate(Date currentDate,Map<String, ProEconEquipmentInfoDay5> rates) throws Exception {
  191. if (stateDescription1.size() == 0) {
  192. stateDescription1.put(3.0, 6.0);
  193. stateDescription1.put(3.5, 0.0);
  194. stateDescription1.put(4.0, 0.0);
  195. }
  196. if (stateDescription2.size() == 0) {
  197. stateDescription2.put(3.0, 6.0);
  198. stateDescription2.put(3.5, 2.0);
  199. stateDescription2.put(4.0, 2.0);
  200. }
  201. //调度时间是第二天,currentDate 是第一天
  202. Date beginDate = DateUtils.truncate(currentDate);
  203. Date endDate = DateUtils.addDays(currentDate, 1);
  204. //
  205. // final CountDownLatch latch = new CountDownLatch(+CacheContext.wtls.size());
  206. for (ProBasicEquipment wt : CacheContext.wtls) {
  207. if(wt.getWindpowerstationId().contains("GDC"))
  208. {
  209. continue;
  210. }
  211. ProEconEquipmentInfoDay5 rate = rates.get(wt.getId());
  212. List<PointData> speedDataList = null;
  213. List<PointData> statusDataList = null;
  214. if (CacheContext.wtpAimap.containsKey(wt.getId())) {
  215. Map<String, ProBasicEquipmentPoint> wtpmap = CacheContext.wtpAimap.get(wt.getId());
  216. if (wtpmap.containsKey(ContantXk.CJ_SSFS)) {
  217. ProBasicEquipmentPoint point = wtpmap.get(ContantXk.CJ_SSFS);
  218. speedDataList = edosUtil.getHistoryDatasSnap(point.getNemCode(), beginDate.getTime() / 1000, endDate.getTime() / 1000);
  219. }
  220. if (wtpmap.containsKey(ContantXk.MXZT)) {
  221. ProBasicEquipmentPoint point = wtpmap.get(ContantXk.MXZT);
  222. statusDataList = edosUtil.getHistoryDatasSnap(point.getNemCode(), beginDate.getTime() / 1000, endDate.getTime() / 1000);
  223. }
  224. }
  225. if (speedDataList != null && statusDataList != null && statusDataList.size() == speedDataList.size() && !speedDataList.isEmpty()) {
  226. double laststatus = -1;
  227. Date begin = new Date();
  228. for (int i = 0; i < speedDataList.size(); i++) {
  229. double status = statusDataList.get(i).getPointValueInDouble();
  230. double speed = speedDataList.get(i).getPointValueInDouble();
  231. if (i == 0) {
  232. begin = new Date(speedDataList.get(i).getPointTime());
  233. laststatus = status;
  234. }
  235. if (speed <= 3.0) {
  236. if (laststatus != status &&
  237. (status == stateDescription1.get(3.0) || status == stateDescription2.get(3.0))) {
  238. Date end = new Date(speedDataList.get(i).getPointTime());
  239. double zhcs = DateUtils.hoursDiff2(begin, end);
  240. if (zhcs < 0.25)//5分钟
  241. {
  242. double temp = rate.getTimerate1();
  243. temp = temp + 1;
  244. rate.setTimerate1(temp);
  245. temp = rate.getTimerate2();
  246. temp = temp + 1;
  247. rate.setTimerate2(temp);
  248. temp = rate.getTimerate3();
  249. temp = temp + 1;
  250. rate.setTimerate3(temp);
  251. temp = rate.getTimerate4();
  252. temp = temp + 1;
  253. rate.setTimerate4(temp);
  254. } else if (zhcs < 0.33)//10分钟
  255. {
  256. double temp = rate.getTimerate2();
  257. temp = temp + 1;
  258. rate.setTimerate2(temp);
  259. temp = rate.getTimerate3();
  260. temp = temp + 1;
  261. rate.setTimerate3(temp);
  262. temp = rate.getTimerate4();
  263. temp = temp + 1;
  264. rate.setTimerate4(temp);
  265. } else if (zhcs < 0.42)//15分钟
  266. {
  267. double temp = rate.getTimerate3();
  268. temp = temp + 1;
  269. rate.setTimerate3(temp);
  270. temp = rate.getTimerate4();
  271. temp = temp + 1;
  272. rate.setTimerate4(temp);
  273. } else if (zhcs < 0.5)//20分钟
  274. {
  275. double temp = rate.getTimerate4();
  276. temp = temp + 1;
  277. rate.setTimerate4(temp);
  278. }
  279. double temp = rate.getTimerate13();
  280. temp = temp + 1;
  281. rate.setTimerate13(temp);
  282. }
  283. laststatus = status;
  284. begin = new Date(speedDataList.get(i).getPointTime());
  285. } else if (speed <= 4.0 && speed > 3.0) {
  286. if (laststatus != status &&
  287. (status == stateDescription1.get(3.5) || status == stateDescription2.get(3.5))) {
  288. Date end = new Date(speedDataList.get(i).getPointTime());
  289. double zhcs = DateUtils.hoursDiff2(begin, end);
  290. if (zhcs < 0.25)//5分钟
  291. {
  292. double temp = rate.getTimerate5();
  293. temp = temp + 1;
  294. rate.setTimerate5(temp);
  295. temp = rate.getTimerate6();
  296. temp = temp + 1;
  297. rate.setTimerate6(temp);
  298. temp = rate.getTimerate7();
  299. temp = temp + 1;
  300. rate.setTimerate7(temp);
  301. temp = rate.getTimerate8();
  302. temp = temp + 1;
  303. rate.setTimerate8(temp);
  304. } else if (zhcs < 0.33)//10分钟
  305. {
  306. double temp = rate.getTimerate6();
  307. temp = temp + 1;
  308. rate.setTimerate6(temp);
  309. temp = rate.getTimerate7();
  310. temp = temp + 1;
  311. rate.setTimerate7(temp);
  312. temp = rate.getTimerate8();
  313. temp = temp + 1;
  314. rate.setTimerate8(temp);
  315. } else if (zhcs < 0.42)//15分钟
  316. {
  317. double temp = rate.getTimerate7();
  318. temp = temp + 1;
  319. rate.setTimerate7(temp);
  320. temp = rate.getTimerate8();
  321. temp = temp + 1;
  322. rate.setTimerate8(temp);
  323. } else if (zhcs < 0.5)//20分钟
  324. {
  325. double temp = rate.getTimerate8();
  326. temp = temp + 1;
  327. rate.setTimerate8(temp);
  328. }
  329. //}
  330. double temp = rate.getTimerate14();
  331. temp = temp + 1;
  332. rate.setTimerate14(temp);
  333. }
  334. laststatus = status;
  335. begin = new Date(speedDataList.get(i).getPointTime());
  336. } else {
  337. if (laststatus != status &&
  338. (status == stateDescription1.get(4.0) || status == stateDescription2.get(4.0))) {
  339. Date end = new Date(speedDataList.get(i).getPointTime());
  340. double zhcs = DateUtils.hoursDiff2(begin, end);
  341. if (zhcs < 0.25)//5分钟
  342. {
  343. double temp = rate.getTimerate9();
  344. temp = temp + 1;
  345. rate.setTimerate9(temp);
  346. temp = rate.getTimerate10();
  347. temp = temp + 1;
  348. rate.setTimerate10(temp);
  349. temp = rate.getTimerate11();
  350. temp = temp + 1;
  351. rate.setTimerate11(temp);
  352. temp = rate.getTimerate12();
  353. temp = temp + 1;
  354. rate.setTimerate12(temp);
  355. } else if (zhcs < 0.33)//10分钟
  356. {
  357. double temp = rate.getTimerate10();
  358. temp = temp + 1;
  359. rate.setTimerate10(temp);
  360. temp = rate.getTimerate11();
  361. temp = temp + 1;
  362. rate.setTimerate11(temp);
  363. temp = rate.getTimerate12();
  364. temp = temp + 1;
  365. rate.setTimerate12(temp);
  366. } else if (zhcs < 0.42)//15分钟
  367. {
  368. double temp = rate.getTimerate11();
  369. temp = temp + 1;
  370. rate.setTimerate11(temp);
  371. temp = rate.getTimerate12();
  372. temp = temp + 1;
  373. rate.setTimerate12(temp);
  374. } else if (zhcs < 0.5)//20分钟
  375. {
  376. double temp = rate.getTimerate12();
  377. temp = temp + 1;
  378. rate.setTimerate12(temp);
  379. }
  380. double temp = rate.getTimerate15();
  381. temp = temp + 1;
  382. rate.setTimerate15(temp);
  383. laststatus = status;
  384. begin = new Date(speedDataList.get(i).getPointTime());
  385. }
  386. }
  387. }
  388. }
  389. }
  390. // latch.await();
  391. }
  392. }