StatusService.java 42 KB

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