StatusService.java 39 KB

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