StatusService.java 39 KB

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