StatusService.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720
  1. package com.gyee.generation.service;
  2. import com.gyee.common.contant.Contant;
  3. import com.gyee.common.model.PointData;
  4. import com.gyee.common.model.StringUtils;
  5. import com.gyee.common.util.DateUtils;
  6. import com.gyee.generation.init.CacheContext;
  7. import com.gyee.generation.model.auto.*;
  8. import com.gyee.generation.util.realtimesource.IEdosUtil;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.stereotype.Service;
  11. import javax.annotation.Resource;
  12. import java.util.*;
  13. import java.util.concurrent.atomic.AtomicInteger;
  14. import java.util.stream.Collectors;
  15. /**
  16. * @ClassName : StatusService
  17. * @Author : xieshengjie
  18. * @Date: 2022/3/28 14:22
  19. * @Description : 状态计算
  20. */
  21. @Service
  22. public class StatusService {
  23. private Map<String, List<Windturbinestatusdi>> statusMap;
  24. private List<Windturbine> wtls;
  25. private List<Project> projects;
  26. private Map<String, Map<String, Windturbinetestingpointnew>> wtpAimap;
  27. private Map<String,Map<String, Windpowerstationpointnew>> linepointmap;
  28. private Map<String,Map<String, Windpowerstationpointnew>> propointmap;
  29. private Map<String,Map<String, Windpowerstationpointnew>> wppointmap;
  30. private Date currentDate;
  31. private List<Windpowerstation> wpls;
  32. private List<Line> lines;
  33. private Map<String, Equipmentmodel> modelMap;
  34. public static Map<String,List<Project>> wppromap;
  35. public static Map<String,List<Line>> prolinemap;
  36. public static Map<String,List<Windturbine>> linewtmap;
  37. @Resource
  38. private IEdosUtil edosUtil;
  39. @Value("${clauStatus.ai}")
  40. private String clauStatusAi;
  41. @Value("${clauStatus.di}")
  42. private String clauStatusDi;
  43. @Value("${second}")
  44. private String second;
  45. @Value("${AI134}")
  46. private String AI134;
  47. @Value("${AI178}")
  48. private String AI178;
  49. public void init(){
  50. statusMap = CacheContext.statusMap;
  51. wtls = CacheContext.wtls;
  52. wpls = CacheContext.wpls;
  53. lines = CacheContext.lines;
  54. projects = CacheContext.projects;
  55. wtpAimap = CacheContext.wtpAimap;
  56. linepointmap = CacheContext.linepointmap;
  57. propointmap = CacheContext.propointmap;
  58. wppointmap = CacheContext.wppointmap;
  59. currentDate = DateUtils.getCurrentDate();
  60. modelMap = CacheContext.modelMap;
  61. wppromap = CacheContext.wppromap;
  62. prolinemap = CacheContext.prolinemap;
  63. linewtmap = CacheContext.linewtmap;
  64. }
  65. /**
  66. * 计算状态
  67. * @throws Exception
  68. */
  69. public void calculateStatus() throws Exception {
  70. init();
  71. List<PointData> resultList = new ArrayList<>();
  72. projects.stream().forEach(project->{
  73. wtls.stream().filter(i->i.getProjectid().equals(project.getId())).forEach(wt->{
  74. Map<String, Windturbinetestingpointnew> stringWindturbinetestingpointnewMap = wtpAimap.get(wt.getId());
  75. Windturbinetestingpointnew ztmxPoint = stringWindturbinetestingpointnewMap.get(Contant.ZTMX);
  76. Windturbinetestingpointnew fj5tPoint = stringWindturbinetestingpointnewMap.get(Contant.FJ5T);
  77. Windturbinetestingpointnew ai130 = stringWindturbinetestingpointnewMap.get(Contant.AI130);
  78. String[] interruption = Contant.INTERRUPTION.split(",");
  79. List<String> interruptionList = new ArrayList<>();
  80. Arrays.stream(interruption).forEach(i->{
  81. Windturbinetestingpointnew windturbinetestingpointnew = stringWindturbinetestingpointnewMap.get(i);
  82. if (!windturbinetestingpointnew.getCode().equals("INITIAL")){
  83. interruptionList.add(windturbinetestingpointnew.getCode());
  84. }
  85. });
  86. Double status = 1.0;
  87. Double mxstatus = 2.0;
  88. try {
  89. if (StringUtils.isEmpty(interruptionList)){
  90. mxstatus = 12.0;
  91. status = 3.0;
  92. }
  93. else {
  94. List<PointData> interruptionRealData = edosUtil.getRealData(interruptionList);
  95. List<PointData> collect = interruptionRealData.stream().filter(i -> (currentDate.getTime() - i.getPointTime()) / 1000 > Integer.parseInt(second)).collect(Collectors.toList());
  96. if (collect.size()!=interruptionRealData.size()){
  97. Double ztmx = edosUtil.getRealData(ztmxPoint).getPointValueInDouble();
  98. if (ztmx == 7 || ztmx == 9 || ztmx == 10 || ztmx == 11 || ztmx == 4 || ztmx == 5 ){ //手打状态
  99. mxstatus = ztmx;
  100. }
  101. if (clauStatusAi.contains(wt.getProjectid())){
  102. //多状态根据一个点来判断
  103. Optional<Windturbinestatusdi> first = statusMap.get(wt.getId()).stream().filter(w -> w.getUniformcode().equals(Contant.AI422)).findFirst();
  104. if (first.isPresent()){
  105. Windturbinestatusdi windturbinestatusdi = first.get();
  106. if (wt.getModelid().equals("EN141/2.65") || wt.getModelid().equals("EN141/3.2")){
  107. //远景
  108. int pointValueInDouble = (int) edosUtil.getRealData(windturbinestatusdi.getId()).getPointValueInDouble();
  109. switch (pointValueInDouble){
  110. case 1:
  111. case 4:
  112. mxstatus = 1.0;
  113. break;
  114. case 2:
  115. mxstatus = 6.0;
  116. break;
  117. case 3:
  118. mxstatus = 11.0;
  119. break;
  120. case 5:
  121. case 6:
  122. mxstatus = 2.0;
  123. break;
  124. case 7:
  125. mxstatus = 4.0;
  126. break;
  127. case 8:
  128. mxstatus = 12.0;
  129. break;
  130. case 9:
  131. mxstatus = 0.0;
  132. break;
  133. case 10:
  134. mxstatus = 10.0;
  135. break;
  136. case 11:
  137. case 12:
  138. mxstatus = 8.0;
  139. break;
  140. }
  141. }else {
  142. //联合动力
  143. double pointValueInDouble = edosUtil.getRealData(windturbinestatusdi.getId()).getPointValueInDouble();
  144. switch ((int) pointValueInDouble){
  145. case 0:
  146. mxstatus = 12.0;
  147. break;
  148. case 1:
  149. mxstatus = 6.0;
  150. break;
  151. case 2:
  152. mxstatus = 8.0;
  153. break;
  154. case 3:
  155. mxstatus = 0.0;
  156. break;
  157. case 4:
  158. case 5:
  159. mxstatus = 2.0;
  160. break;
  161. case 6:
  162. mxstatus = 1.0;
  163. break;
  164. default:
  165. mxstatus = 2.0;
  166. }
  167. }
  168. }
  169. }
  170. if (clauStatusDi.contains(wt.getProjectid())){
  171. //每个状态一个状态点
  172. List<Windturbinestatusdi> windturbinestatusdis = statusMap.get(wt.getId()).stream().filter(w -> w.getUniformcode().equals(Contant.MX000) || w.getUniformcode().equals(Contant.MX002) || w.getUniformcode().equals(Contant.MX004) || w.getUniformcode().equals(Contant.MX006) || w.getUniformcode().equals(Contant.MX008)).collect(Collectors.toList());
  173. for(Windturbinestatusdi w : windturbinestatusdis){
  174. PointData realData = edosUtil.getRealData(w.getId());
  175. if (realData.getPointValueInDouble()==1){
  176. mxstatus = Double.parseDouble(w.getTypeid());
  177. break;
  178. }
  179. }
  180. }
  181. if (mxstatus == 2){
  182. boolean isJcl = isJcl(wt, stringWindturbinetestingpointnewMap);
  183. double power = edosUtil.getRealData(ai130).getPointValueInDouble();
  184. if (power<=0){
  185. mxstatus=0.0;
  186. }else if (isJcl){
  187. mxstatus = 3.0;
  188. }
  189. }
  190. }else{
  191. //离线
  192. mxstatus = 12.0;
  193. }
  194. if (mxstatus == 0 || mxstatus == 1){
  195. status = 0.0;
  196. }else if(mxstatus == 2 || mxstatus == 3){
  197. status = 1.0;
  198. }else if(mxstatus == 4 || mxstatus == 5){
  199. status = 5.0;
  200. }else if(mxstatus == 6 || mxstatus == 7){
  201. status = 2.0;
  202. }else if(mxstatus == 8 || mxstatus == 9){
  203. status = 4.0;
  204. }else if(mxstatus == 10 || mxstatus == 11){
  205. status = 6.0;
  206. }else if(mxstatus == 12){
  207. status = 3.0;
  208. }
  209. }
  210. PointData ztmx = createPointData(ztmxPoint, mxstatus);
  211. PointData fj5t = createPointData(fj5tPoint, status);
  212. resultList.add(ztmx);
  213. resultList.add(fj5t);
  214. } catch (Exception e) {
  215. e.printStackTrace();
  216. }
  217. });
  218. });
  219. edosUtil.sendMultiPoint(resultList);
  220. }
  221. /**
  222. * 计算状态台数
  223. */
  224. public void calculateStatusNumber() throws Exception {
  225. init();
  226. List<PointData> resultList = new ArrayList<>();
  227. wpls.stream().forEach(wp->{
  228. List<Project> projects = wppromap.get(wp.getId());
  229. Map<String, Windpowerstationpointnew> wpmap = wppointmap.get(wp.getId());
  230. AtomicInteger wpdjnum = new AtomicInteger();
  231. AtomicInteger wptjnum = new AtomicInteger();
  232. AtomicInteger wpfdnum = new AtomicInteger();
  233. AtomicInteger wpfdjclnum = new AtomicInteger();
  234. AtomicInteger wpxdjclnum = new AtomicInteger();
  235. AtomicInteger wpxdtjnum = new AtomicInteger();
  236. AtomicInteger wpgznum = new AtomicInteger();
  237. AtomicInteger wpcngznum = new AtomicInteger();
  238. AtomicInteger wpjxnum = new AtomicInteger();
  239. AtomicInteger wpcnjxnum = new AtomicInteger();
  240. AtomicInteger wpdwslnum = new AtomicInteger();
  241. AtomicInteger wphjslnum = new AtomicInteger();
  242. AtomicInteger wplxnum = new AtomicInteger();
  243. //六种
  244. AtomicInteger wpdjts = new AtomicInteger();
  245. AtomicInteger wpgzts = new AtomicInteger();
  246. AtomicInteger wptxzd = new AtomicInteger();
  247. AtomicInteger wpwhtj = new AtomicInteger();
  248. AtomicInteger wpxdts = new AtomicInteger();
  249. AtomicInteger wpyxts = new AtomicInteger();
  250. AtomicInteger wpslts = new AtomicInteger();
  251. projects.stream().forEach(project->{
  252. List<Line> lineList = prolinemap.get(project.getId());
  253. Map<String, Windpowerstationpointnew> projectmap = propointmap.get(project.getId());
  254. AtomicInteger prodjnum = new AtomicInteger();
  255. AtomicInteger protjnum = new AtomicInteger();
  256. AtomicInteger profdnum = new AtomicInteger();
  257. AtomicInteger profdjclnum = new AtomicInteger();
  258. AtomicInteger proxdjclnum = new AtomicInteger();
  259. AtomicInteger proxdtjnum = new AtomicInteger();
  260. AtomicInteger progznum = new AtomicInteger();
  261. AtomicInteger procngznum = new AtomicInteger();
  262. AtomicInteger projxnum = new AtomicInteger();
  263. AtomicInteger procnjxnum = new AtomicInteger();
  264. AtomicInteger prodwslnum = new AtomicInteger();
  265. AtomicInteger prohjslnum = new AtomicInteger();
  266. AtomicInteger prolxnum = new AtomicInteger();
  267. //六种
  268. AtomicInteger prodjts = new AtomicInteger();
  269. AtomicInteger progzts = new AtomicInteger();
  270. AtomicInteger protxzd = new AtomicInteger();
  271. AtomicInteger prowhtj = new AtomicInteger();
  272. AtomicInteger proxdts = new AtomicInteger();
  273. AtomicInteger proyxts = new AtomicInteger();
  274. AtomicInteger proslts = new AtomicInteger();
  275. lineList.stream().forEach(line->{
  276. List<Windturbine> windturbines = linewtmap.get(line.getId());
  277. Map<String, Windpowerstationpointnew> linemap = linepointmap.get(line.getId());
  278. AtomicInteger djnum = new AtomicInteger();
  279. AtomicInteger tjnum = new AtomicInteger();
  280. AtomicInteger fdnum = new AtomicInteger();
  281. AtomicInteger fdjclnum = new AtomicInteger();
  282. AtomicInteger xdjclnum = new AtomicInteger();
  283. AtomicInteger xdtjnum = new AtomicInteger();
  284. AtomicInteger gznum = new AtomicInteger();
  285. AtomicInteger cngznum = new AtomicInteger();
  286. AtomicInteger jxnum = new AtomicInteger();
  287. AtomicInteger cnjxnum = new AtomicInteger();
  288. AtomicInteger dwslnum = new AtomicInteger();
  289. AtomicInteger hjslnum = new AtomicInteger();
  290. AtomicInteger lxnum = new AtomicInteger();
  291. //六种
  292. AtomicInteger djts = new AtomicInteger();
  293. AtomicInteger gzts = new AtomicInteger();
  294. AtomicInteger txzd = new AtomicInteger();
  295. AtomicInteger whtj = new AtomicInteger();
  296. AtomicInteger xdts = new AtomicInteger();
  297. AtomicInteger yxts = new AtomicInteger();
  298. AtomicInteger slts = new AtomicInteger();
  299. windturbines.stream().forEach(wt->{
  300. Windturbinetestingpointnew windturbinetestingpointnew = wtpAimap.get(wt.getId()).get(Contant.ZTMX);
  301. try {
  302. double valueInDouble = edosUtil.getRealData(windturbinetestingpointnew).getPointValueInDouble();
  303. switch ((int) valueInDouble){
  304. case 0:
  305. djnum.getAndIncrement();
  306. break;
  307. case 1:
  308. tjnum.getAndIncrement();
  309. break;
  310. case 2:
  311. fdnum.getAndIncrement();
  312. break;
  313. case 3:
  314. fdjclnum.getAndIncrement();
  315. break;
  316. case 4:
  317. xdjclnum.getAndIncrement();
  318. break;
  319. case 5:
  320. xdtjnum.getAndIncrement();
  321. break;
  322. case 6:
  323. gznum.getAndIncrement();
  324. break;
  325. case 7:
  326. cngznum.getAndIncrement();
  327. break;
  328. case 8:
  329. jxnum.getAndIncrement();
  330. break;
  331. case 9:
  332. cnjxnum.getAndIncrement();
  333. break;
  334. case 10:
  335. dwslnum.getAndIncrement();
  336. break;
  337. case 11:
  338. hjslnum.getAndIncrement();
  339. break;
  340. case 12:
  341. lxnum.getAndIncrement();
  342. break;
  343. default:
  344. fdnum.getAndIncrement();
  345. }
  346. } catch (Exception e) {
  347. e.printStackTrace();
  348. }
  349. });
  350. //待机台数0
  351. Windpowerstationpointnew djnumPointNew = linemap.get(Contant.DJNUM);
  352. PointData djnumPoint = createWpPoint(djnum, djnumPointNew);
  353. prodjnum.addAndGet(djnum.intValue());
  354. resultList.add(djnumPoint);
  355. //停机台数1
  356. Windpowerstationpointnew tjnumPointNew = linemap.get(Contant.TJNUM);
  357. PointData tjnumPoint = createWpPoint(tjnum, tjnumPointNew);
  358. protjnum.addAndGet(tjnum.intValue());
  359. resultList.add(tjnumPoint);
  360. //待机台数6-0
  361. djts.addAndGet(djnum.intValue()+tjnum.intValue());
  362. Windpowerstationpointnew djtsPointNew = linemap.get(Contant.DJTS);
  363. PointData djtsPoint = createWpPoint(djts, djtsPointNew);
  364. resultList.add(djtsPoint);
  365. //运行台数2
  366. Windpowerstationpointnew fdnumPointNew = linemap.get(Contant.FDNUM);
  367. PointData fdnumPoint = createWpPoint(fdnum, fdnumPointNew);
  368. profdnum.addAndGet(fdnum.intValue());
  369. resultList.add(fdnumPoint);
  370. //降出力台数3
  371. Windpowerstationpointnew fdjclnumPointNew = linemap.get(Contant.FDJCLNUM);
  372. PointData fdjclnumPoint = createWpPoint(fdjclnum, fdjclnumPointNew);
  373. profdjclnum.addAndGet(fdjclnum.intValue());
  374. resultList.add(fdjclnumPoint);
  375. //运行台数6-1
  376. yxts.addAndGet(fdnum.intValue()+fdjclnum.intValue());
  377. Windpowerstationpointnew yxtsPointNew = linemap.get(Contant.YXTS);
  378. PointData yxtsPoint = createWpPoint(yxts, yxtsPointNew);
  379. resultList.add(yxtsPoint);
  380. //限电降出力台数4
  381. Windpowerstationpointnew xdjclnumPointNew = linemap.get(Contant.XDJCLNUM);
  382. PointData xdjclnumPoint = createWpPoint(xdjclnum, xdjclnumPointNew);
  383. proxdjclnum.addAndGet(xdjclnum.intValue());
  384. resultList.add(xdjclnumPoint);
  385. //限电停机台数5
  386. Windpowerstationpointnew xdtjnumPointNew = linemap.get(Contant.XDTJNUM);
  387. PointData xdtjnumPoint = createWpPoint(xdtjnum, xdtjnumPointNew);
  388. proxdtjnum.addAndGet(xdtjnum.intValue());
  389. resultList.add(xdtjnumPoint);
  390. //限电台数6-5
  391. xdts.addAndGet(xdjclnum.intValue()+xdtjnum.intValue());
  392. Windpowerstationpointnew xdtsPointNew = linemap.get(Contant.XDTS);
  393. PointData xdtsPoint = createWpPoint(xdts, xdtsPointNew);
  394. resultList.add(xdtsPoint);
  395. //故障台数6
  396. Windpowerstationpointnew gznumPointNew = linemap.get(Contant.GZNUM);
  397. PointData gznumPoint = createWpPoint(gznum, gznumPointNew);
  398. progznum.addAndGet(gznum.intValue());
  399. resultList.add(gznumPoint);
  400. //故障受累台数7
  401. Windpowerstationpointnew cngznumPointNew = linemap.get(Contant.CNGZNUM);
  402. PointData cngznumPoint = createWpPoint(cngznum, cngznumPointNew);
  403. procngznum.addAndGet(cngznum.intValue());
  404. resultList.add(cngznumPoint);
  405. //检修台数8
  406. Windpowerstationpointnew jxnumPointNew = linemap.get(Contant.JXNUM);
  407. PointData jxnumPoint = createWpPoint(jxnum, jxnumPointNew);
  408. projxnum.addAndGet(jxnum.intValue());
  409. resultList.add(jxnumPoint);
  410. //检修受累台数9
  411. Windpowerstationpointnew cnjxnumPointNew = linemap.get(Contant.CNJXNUM);
  412. PointData cnjxnumPoint = createWpPoint(cnjxnum, cnjxnumPointNew);
  413. procnjxnum.addAndGet(cnjxnum.intValue());
  414. resultList.add(cnjxnumPoint);
  415. //检修台数6-4
  416. whtj.addAndGet(jxnum.intValue()+cnjxnum.intValue());
  417. Windpowerstationpointnew whtjPointNew = linemap.get(Contant.WHTJ);
  418. PointData whtjPoint = createWpPoint(whtj, whtjPointNew);
  419. resultList.add(whtjPoint);
  420. //电网受累台数10
  421. Windpowerstationpointnew dwslnumPointNew = linemap.get(Contant.DWSLNUM);
  422. PointData dwslnumPoint = createWpPoint(dwslnum, dwslnumPointNew);
  423. prodwslnum.addAndGet(dwslnum.intValue());
  424. resultList.add(dwslnumPoint);
  425. //环境受累台数11
  426. Windpowerstationpointnew hjslnumPointNew = linemap.get(Contant.HJSLNUM);
  427. PointData hjslnumPoint = createWpPoint(hjslnum, hjslnumPointNew);
  428. prohjslnum.addAndGet(hjslnum.intValue());
  429. resultList.add(hjslnumPoint);
  430. //故障台数6-2
  431. gzts.addAndGet(gznum.intValue()+cngznum.intValue());
  432. Windpowerstationpointnew gztsPointNew = linemap.get(Contant.GZTJ);
  433. PointData gztjPoint = createWpPoint(gzts, gztsPointNew);
  434. resultList.add(gztjPoint);
  435. //受累台数6-6
  436. slts.addAndGet(dwslnum.intValue()+hjslnum.intValue());
  437. Windpowerstationpointnew sltsPointNew = linemap.get(Contant.SLTS);
  438. PointData sltjPoint = createWpPoint(slts, sltsPointNew);
  439. resultList.add(sltjPoint);
  440. //离线台数12
  441. Windpowerstationpointnew lxnumPointNew = linemap.get(Contant.LXNUM);
  442. Windpowerstationpointnew txzdPointNew = linemap.get(Contant.TXZD);
  443. PointData lxnumPoint = createWpPoint(lxnum, lxnumPointNew);
  444. PointData txzdPoint = createWpPoint(lxnum, txzdPointNew);
  445. prolxnum.addAndGet(lxnum.intValue());
  446. resultList.add(lxnumPoint);
  447. resultList.add(txzdPoint);
  448. });
  449. //待机台数0
  450. Windpowerstationpointnew djnumPointNew = projectmap.get(Contant.DJNUM);
  451. PointData djnumPoint = createWpPoint(prodjnum, djnumPointNew);
  452. wpdjnum.addAndGet(prodjnum.intValue());
  453. resultList.add(djnumPoint);
  454. //停机台数1
  455. Windpowerstationpointnew tjnumPointNew = projectmap.get(Contant.TJNUM);
  456. PointData tjnumPoint = createWpPoint(protjnum, tjnumPointNew);
  457. wptjnum.addAndGet(protjnum.intValue());
  458. resultList.add(tjnumPoint);
  459. //待机台数6-0
  460. Windpowerstationpointnew djtsPointNew = projectmap.get(Contant.DJTS);
  461. prodjts.addAndGet(prodjnum.intValue()+protjnum.intValue());
  462. PointData djtsPoint = createWpPoint(prodjts, djtsPointNew);
  463. resultList.add(djtsPoint);
  464. //运行台数2
  465. Windpowerstationpointnew fdnumPointNew = projectmap.get(Contant.FDNUM);
  466. PointData fdnumPoint = createWpPoint(profdnum, fdnumPointNew);
  467. wpfdnum.addAndGet(profdnum.intValue());
  468. resultList.add(fdnumPoint);
  469. //降出力台数3
  470. Windpowerstationpointnew fdjclnumPointNew = projectmap.get(Contant.FDJCLNUM);
  471. PointData fdjclnumPoint = createWpPoint(profdjclnum, fdjclnumPointNew);
  472. wpfdjclnum.addAndGet(profdjclnum.intValue());
  473. resultList.add(fdjclnumPoint);
  474. //运行台数6-1
  475. Windpowerstationpointnew yxtsPointNew = projectmap.get(Contant.YXTS);
  476. proyxts.addAndGet(profdnum.intValue()+profdjclnum.intValue());
  477. PointData yxtsPoint = createWpPoint(proyxts, yxtsPointNew);
  478. resultList.add(yxtsPoint);
  479. //限电降出力台数4
  480. Windpowerstationpointnew xdjclnumPointNew = projectmap.get(Contant.XDJCLNUM);
  481. PointData xdjclnumPoint = createWpPoint(proxdjclnum, xdjclnumPointNew);
  482. wpxdjclnum.addAndGet(proxdjclnum.intValue());
  483. resultList.add(xdjclnumPoint);
  484. //限电停机台数5
  485. Windpowerstationpointnew xdtjnumPointNew = projectmap.get(Contant.XDTJNUM);
  486. PointData xdtjnumPoint = createWpPoint(proxdtjnum, xdtjnumPointNew);
  487. wpxdtjnum.addAndGet(proxdtjnum.intValue());
  488. resultList.add(xdtjnumPoint);
  489. //限电台数6-5
  490. Windpowerstationpointnew xdtsPointNew = projectmap.get(Contant.XDTS);
  491. proxdts.addAndGet(proxdjclnum.intValue()+proxdtjnum.intValue());
  492. PointData xdtsPoint = createWpPoint(proxdts, xdtsPointNew);
  493. resultList.add(xdtsPoint);
  494. //故障台数6
  495. Windpowerstationpointnew gznumPointNew = projectmap.get(Contant.GZNUM);
  496. PointData gznumPoint = createWpPoint(progznum, gznumPointNew);
  497. wpgznum.addAndGet(progznum.intValue());
  498. resultList.add(gznumPoint);
  499. //故障受累台数7
  500. Windpowerstationpointnew cngznumPointNew = projectmap.get(Contant.CNGZNUM);
  501. PointData cngznumPoint = createWpPoint(procngznum, cngznumPointNew);
  502. wpcngznum.addAndGet(procngznum.intValue());
  503. resultList.add(cngznumPoint);
  504. //检修台数8
  505. Windpowerstationpointnew jxnumPointNew = projectmap.get(Contant.JXNUM);
  506. PointData jxnumPoint = createWpPoint(projxnum, jxnumPointNew);
  507. wpjxnum.addAndGet(projxnum.intValue());
  508. resultList.add(jxnumPoint);
  509. //检修受累台数9
  510. Windpowerstationpointnew cnjxnumPointNew = projectmap.get(Contant.CNJXNUM);
  511. PointData cnjxnumPoint = createWpPoint(procnjxnum, cnjxnumPointNew);
  512. wpcnjxnum.addAndGet(procnjxnum.intValue());
  513. resultList.add(cnjxnumPoint);
  514. //检修台数6-4
  515. Windpowerstationpointnew jxtsPointNew = projectmap.get(Contant.WHTJ);
  516. prowhtj.addAndGet(projxnum.intValue()+procnjxnum.intValue());
  517. PointData jxtsPoint = createWpPoint(prowhtj, jxtsPointNew);
  518. resultList.add(jxtsPoint);
  519. //电网受累台数10
  520. Windpowerstationpointnew dwslnumPointNew = projectmap.get(Contant.DWSLNUM);
  521. PointData dwslnumPoint = createWpPoint(prodwslnum, dwslnumPointNew);
  522. wpdwslnum.addAndGet(prodwslnum.intValue());
  523. resultList.add(dwslnumPoint);
  524. //环境受累台数11
  525. Windpowerstationpointnew hjslnumPointNew = projectmap.get(Contant.HJSLNUM);
  526. PointData hjslnumPoint = createWpPoint(prohjslnum, hjslnumPointNew);
  527. wphjslnum.addAndGet(prohjslnum.intValue());
  528. resultList.add(hjslnumPoint);
  529. //故障台数6-2
  530. Windpowerstationpointnew gztsPointNew = projectmap.get(Contant.GZTJ);
  531. progzts.addAndGet(progznum.intValue()+procngznum.intValue());
  532. PointData gztsPoint = createWpPoint(progzts, gztsPointNew);
  533. resultList.add(gztsPoint);
  534. //受累台数6-6
  535. Windpowerstationpointnew sltsPointNew = projectmap.get(Contant.SLTS);
  536. proslts.addAndGet(prodwslnum.intValue()+prohjslnum.intValue());
  537. PointData sltsPoint = createWpPoint(proslts, sltsPointNew);
  538. resultList.add(sltsPoint);
  539. //离线台数12
  540. Windpowerstationpointnew lxnumPointNew = projectmap.get(Contant.LXNUM);
  541. Windpowerstationpointnew txzdPointNew = projectmap.get(Contant.TXZD);
  542. PointData lxnumPoint = createWpPoint(prolxnum, lxnumPointNew);
  543. PointData txzdPoint = createWpPoint(prolxnum, txzdPointNew);
  544. wplxnum.addAndGet(prolxnum.intValue());
  545. resultList.add(lxnumPoint);
  546. resultList.add(txzdPoint);
  547. });
  548. //待机台数0
  549. Windpowerstationpointnew djnumPointNew = wpmap.get(Contant.DJNUM);
  550. PointData djnumPoint = createWpPoint(wpdjnum, djnumPointNew);
  551. resultList.add(djnumPoint);
  552. //停机台数1
  553. Windpowerstationpointnew tjnumPointNew = wpmap.get(Contant.TJNUM);
  554. PointData tjnumPoint = createWpPoint(wptjnum, tjnumPointNew);
  555. resultList.add(tjnumPoint);
  556. //待机台数6-0
  557. Windpowerstationpointnew djtsPointNew = wpmap.get(Contant.DJTS);
  558. wpdjts.addAndGet(wpdjnum.intValue()+wptjnum.intValue());
  559. PointData djtsPoint = createWpPoint(wpdjts, djtsPointNew);
  560. resultList.add(djtsPoint);
  561. //运行台数2
  562. Windpowerstationpointnew fdnumPointNew = wpmap.get(Contant.FDNUM);
  563. PointData fdnumPoint = createWpPoint(wpfdnum, fdnumPointNew);
  564. resultList.add(fdnumPoint);
  565. //降出力台数3
  566. Windpowerstationpointnew fdjclnumPointNew = wpmap.get(Contant.FDJCLNUM);
  567. PointData fdjclnumPoint = createWpPoint(wpfdjclnum, fdjclnumPointNew);
  568. resultList.add(fdjclnumPoint);
  569. //运行台数6-1
  570. Windpowerstationpointnew yxtsPointNew = wpmap.get(Contant.YXTS);
  571. wpyxts.addAndGet(wpfdnum.intValue()+wpfdjclnum.intValue());
  572. PointData yxtsPoint = createWpPoint(wpyxts, yxtsPointNew);
  573. resultList.add(yxtsPoint);
  574. //限电降出力台数4
  575. Windpowerstationpointnew xdjclnumPointNew = wpmap.get(Contant.XDJCLNUM);
  576. PointData xdjclnumPoint = createWpPoint(wpxdjclnum, xdjclnumPointNew);
  577. resultList.add(xdjclnumPoint);
  578. //限电停机台数5
  579. Windpowerstationpointnew xdtjnumPointNew = wpmap.get(Contant.XDTJNUM);
  580. PointData xdtjnumPoint = createWpPoint(wpxdtjnum, xdtjnumPointNew);
  581. resultList.add(xdtjnumPoint);
  582. //限电台数6-5
  583. Windpowerstationpointnew xdtsPointNew = wpmap.get(Contant.XDTS);
  584. wpxdts.addAndGet(wpxdjclnum.intValue()+wpxdtjnum.intValue());
  585. PointData xdtsPoint = createWpPoint(wpxdts, xdtsPointNew);
  586. resultList.add(xdtsPoint);
  587. //故障台数6
  588. Windpowerstationpointnew gznumPointNew = wpmap.get(Contant.GZNUM);
  589. PointData gznumPoint = createWpPoint(wpgznum, gznumPointNew);
  590. resultList.add(gznumPoint);
  591. //故障受累台数7
  592. Windpowerstationpointnew cngznumPointNew = wpmap.get(Contant.CNGZNUM);
  593. PointData cngznumPoint = createWpPoint(wpcngznum, cngznumPointNew);
  594. resultList.add(cngznumPoint);
  595. //检修台数8
  596. Windpowerstationpointnew jxnumPointNew = wpmap.get(Contant.JXNUM);
  597. PointData jxnumPoint = createWpPoint(wpjxnum, jxnumPointNew);
  598. resultList.add(jxnumPoint);
  599. //检修受累台数9
  600. Windpowerstationpointnew cnjxnumPointNew = wpmap.get(Contant.CNJXNUM);
  601. PointData cnjxnumPoint = createWpPoint(wpcnjxnum, cnjxnumPointNew);
  602. resultList.add(cnjxnumPoint);
  603. //检修台数6-4
  604. Windpowerstationpointnew jxtsPointNew = wpmap.get(Contant.WHTJ);
  605. wpwhtj.addAndGet(wpjxnum.intValue()+wpcnjxnum.intValue());
  606. PointData jxtsPoint = createWpPoint(wpwhtj, jxtsPointNew);
  607. resultList.add(jxtsPoint);
  608. //电网受累台数10
  609. Windpowerstationpointnew dwslnumPointNew = wpmap.get(Contant.DWSLNUM);
  610. PointData dwslnumPoint = createWpPoint(wpdwslnum, dwslnumPointNew);
  611. resultList.add(dwslnumPoint);
  612. //环境受累台数11
  613. Windpowerstationpointnew hjslnumPointNew = wpmap.get(Contant.HJSLNUM);
  614. PointData hjslnumPoint = createWpPoint(wphjslnum, hjslnumPointNew);
  615. resultList.add(hjslnumPoint);
  616. //故障台数6-2
  617. Windpowerstationpointnew gztsPointNew = wpmap.get(Contant.GZTJ);
  618. wpgzts.addAndGet(wpgznum.intValue()+wpcngznum.intValue());
  619. PointData gztsPoint = createWpPoint(wpgzts, gztsPointNew);
  620. resultList.add(gztsPoint);
  621. //受累台数6-6
  622. Windpowerstationpointnew sltsPointNew = wpmap.get(Contant.SLTS);
  623. wpslts.addAndGet(wpdwslnum.intValue()+wphjslnum.intValue());
  624. PointData sltsPoint = createWpPoint(wpslts, sltsPointNew);
  625. resultList.add(sltsPoint);
  626. //离线台数12
  627. Windpowerstationpointnew lxnumPointNew = wpmap.get(Contant.LXNUM);
  628. Windpowerstationpointnew txzdPointNew = wpmap.get(Contant.TXZD);
  629. PointData lxnumPoint = createWpPoint(wplxnum, lxnumPointNew);
  630. PointData txzdPoint = createWpPoint(wplxnum, txzdPointNew);
  631. resultList.add(lxnumPoint);
  632. resultList.add(txzdPoint);
  633. });
  634. edosUtil.sendMultiPoint(resultList);
  635. }
  636. private PointData createWpPoint(AtomicInteger tjnum, Windpowerstationpointnew tjnumPoint) {
  637. PointData pointData = new PointData();
  638. pointData.setEdnaId(tjnumPoint.getCode());
  639. pointData.setPointName(tjnumPoint.getName());
  640. pointData.setPointTime(currentDate.getTime());
  641. pointData.setPointValue(String.valueOf(tjnum.doubleValue()));
  642. pointData.setPointValueInDouble(tjnum.doubleValue());
  643. return pointData;
  644. }
  645. /**
  646. * 判断是否降出力
  647. * @param wt
  648. * @param stringWindturbinetestingpointnewMap
  649. * @return
  650. * @throws Exception
  651. */
  652. private boolean isJcl(Windturbine wt, Map<String, Windturbinetestingpointnew> stringWindturbinetestingpointnewMap) throws Exception {
  653. boolean isJcl = false;
  654. Windturbinetestingpointnew ai134point = stringWindturbinetestingpointnewMap.get(Contant.AI134);
  655. Windturbinetestingpointnew ai178point = stringWindturbinetestingpointnewMap.get(Contant.AI178);
  656. Windturbinetestingpointnew ai443point = stringWindturbinetestingpointnewMap.get(Contant.AI443);
  657. if (!ai134point.getCode().equals("INITIAL")){
  658. Double realData = edosUtil.getRealData(ai134point).getPointValueInDouble();
  659. if (realData<Double.parseDouble(AI134)){
  660. isJcl = true;
  661. }
  662. }
  663. if (!ai178point.getCode().equals("INITIAL")){
  664. Double realData = edosUtil.getRealData(ai178point).getPointValueInDouble();
  665. if (realData<Double.parseDouble(AI178)){
  666. isJcl = true;
  667. }
  668. }
  669. if (!ai443point.getCode().equals("INITIAL")){
  670. Double realData = edosUtil.getRealData(ai443point).getPointValueInDouble();
  671. if (realData<modelMap.get(wt.getModelid()).getPowerproduction()){
  672. isJcl = true;
  673. }
  674. }
  675. return isJcl;
  676. }
  677. private PointData createPointData(Windturbinetestingpointnew ztmxPoint, Double mxstatus) {
  678. PointData pointData = new PointData();
  679. pointData.setEdnaId(ztmxPoint.getCode());
  680. pointData.setPointName(ztmxPoint.getName());
  681. pointData.setPointTime(currentDate.getTime());
  682. pointData.setPointValue(String.valueOf(mxstatus));
  683. pointData.setPointValueInDouble(mxstatus);
  684. return pointData;
  685. }
  686. }