EquipmentInfo5Service.java 22 KB

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