EquipmentInfo2Service.java 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  1. package com.gyee.generation.service;//package com.gyee.generation.service;
  2. import com.gyee.common.contant.ContantXk;
  3. import com.gyee.common.model.PointData;
  4. import com.gyee.common.model.StringUtils;
  5. import com.gyee.generation.init.CacheContext;
  6. import com.gyee.generation.model.auto.*;
  7. import com.gyee.generation.model.vo.Location;
  8. import com.gyee.generation.service.auto.IProEconEquipmentInfoDay2Service;
  9. import com.gyee.generation.util.DateUtils;
  10. import com.gyee.generation.util.realtimesource.IEdosUtil;
  11. import com.gyee.generation.util.statisticcs.Initial;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.stereotype.Service;
  15. import javax.annotation.Resource;
  16. import java.math.BigDecimal;
  17. import java.math.RoundingMode;
  18. import java.util.*;
  19. import java.util.stream.Collectors;
  20. @Service
  21. public class EquipmentInfo2Service {
  22. private static final Logger logger = LoggerFactory.getLogger(EquipmentInfo2Service.class);
  23. @Resource
  24. private IEdosUtil edosUtil;
  25. @Resource
  26. private IProEconEquipmentInfoDay2Service proEconEquipmentInfoDay2Service;
  27. /**
  28. * 计算设备日信息
  29. * @param recordDate
  30. * @throws Exception
  31. */
  32. public void calLineInfoDay(Date recordDate) throws Exception {
  33. Calendar c=Calendar.getInstance();
  34. c.setTime(recordDate);
  35. Date end=c.getTime();
  36. Date begin= DateUtils.truncDay(c.getTime());
  37. //判断是否有重复记录,先删除重复记录
  38. List<String> idls = proEconEquipmentInfoDay2Service.list().stream()
  39. .filter(i -> i.getRecordDate().compareTo(DateUtils.truncDay(recordDate))==0
  40. && CacheContext.wtmap.containsKey(i.getWindturbineId())
  41. ).map(ProEconEquipmentInfoDay2::getId)
  42. .collect(Collectors.toList());
  43. if (idls != null && idls.size() > 0) {
  44. proEconEquipmentInfoDay2Service.removeByIds(idls);
  45. }
  46. for(ProBasicWindturbine wt:CacheContext.wtls)
  47. {
  48. if(CacheContext.wppointmap.containsKey(wt.getId()))
  49. {
  50. ProEconEquipmentInfoDay2 pewp=new ProEconEquipmentInfoDay2();
  51. Initial.initial(pewp);
  52. pewp.setCompanyId(wt.getCompanyId());
  53. pewp.setWindpowerstationId(wt.getWindpowerstationId());
  54. pewp.setLineId(wt.getLineId());
  55. pewp.setProjectId(wt.getProjectId());
  56. pewp.setRegionId(wt.getRegionId());
  57. pewp.setRecordDate(DateUtils.truncDay(recordDate));
  58. //昨日的统计结果
  59. List<ProEconEquipmentInfoDay2> pepidls =new ArrayList<>();
  60. Calendar cl=Calendar.getInstance();
  61. cl.setTime(recordDate);
  62. if(cl.get(Calendar.DAY_OF_MONTH)!=1)
  63. {
  64. pepidls = proEconEquipmentInfoDay2Service.list().stream()
  65. .filter(i -> i.getRecordDate().compareTo(DateUtils.truncDay(cl.getTime())) == 0
  66. && i.getWindturbineId().equals(wt.getId())
  67. )
  68. .collect(Collectors.toList());
  69. }
  70. calDetiall( pewp, end, begin, wt,pepidls);
  71. proEconEquipmentInfoDay2Service.save(pewp);
  72. }
  73. }
  74. }
  75. private void calDetiall(ProEconEquipmentInfoDay2 pewp,Date end, Date begin,ProBasicWindturbine wt,List<ProEconEquipmentInfoDay2> pepidls) throws Exception {
  76. // // 0 待机
  77. // 1 手动停机
  78. // 2 正常发电
  79. // 3 发电降出力
  80. // 4 故障
  81. // 5 故障受累
  82. // 6 检修
  83. // 7 检修受累
  84. // 8 限电降出力
  85. // 9 限电停机
  86. // 10 电网受累
  87. // 11 环境受累
  88. // 12 通讯中断
  89. // 13 设备离线
  90. double lastState=-1;//上一分钟状态
  91. double djsc=0;//待机时长
  92. double sdtjsc=0;//手动停机时长
  93. double zcfdsc=0;//正常发电时长
  94. double fdjclsc=0;//发电降出力时长
  95. double gzsc=0;//故障时长
  96. double gzslsc=0;//故障受累时长
  97. double jxsc=0;//检修时长
  98. double jxslsc=0;//检修受累时长
  99. double xdjclsc=0;//限电降出力时长
  100. double xdtjsc=0;//限电停机时长
  101. double dwslsc=0;//电网受累时长
  102. double hjslsc=0;//环境受累时长
  103. double txzdsc=0;//通讯中断时长
  104. double sblxsc=0;//设备离线时长
  105. Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;
  106. lastState=-1;//上一分钟状态
  107. Map<String, ProBasicEquipmentPoint> aimap=wtpAimap.get(wt.getNemCode());
  108. if(wtpAimap.containsKey(ContantXk.MXZT));
  109. {
  110. ProBasicEquipmentPoint point=aimap.get(ContantXk.MXZT);
  111. //按照分钟时间进行统计状态快照值
  112. List<PointData> pointls=edosUtil.getHistoryDatasSnap(point.getNemCode(), begin.getTime()/1000, end.getTime()/1000);
  113. if(!pointls.isEmpty())
  114. {
  115. for(PointData po :pointls)
  116. {
  117. if(po.getPointValueInDouble()==0)
  118. {
  119. if(lastState!=po.getPointValueInDouble())
  120. {
  121. //将当前状态保存到上一分钟状态
  122. lastState=po.getPointValueInDouble();
  123. }
  124. //待机时长加1分钟
  125. djsc++;
  126. }else if(po.getPointValueInDouble()==1)
  127. {
  128. if(lastState!=po.getPointValueInDouble())
  129. {
  130. //将当前状态保存到上一分钟状态
  131. lastState=po.getPointValueInDouble();
  132. }
  133. //手动停机时长加1分钟
  134. sdtjsc++;
  135. }else if(po.getPointValueInDouble()==2)
  136. {
  137. if(lastState!=po.getPointValueInDouble())
  138. {
  139. //将当前状态保存到上一分钟状态
  140. lastState=po.getPointValueInDouble();
  141. }
  142. //正常发电时长加1分钟
  143. zcfdsc++;
  144. }else if(po.getPointValueInDouble()==3)
  145. {
  146. if(lastState!=po.getPointValueInDouble())
  147. {
  148. //将当前状态保存到上一分钟状态
  149. lastState=po.getPointValueInDouble();
  150. }
  151. //发电降出力时长加1分钟
  152. fdjclsc++;
  153. }else if(po.getPointValueInDouble()==4)
  154. {
  155. if(lastState!=po.getPointValueInDouble())
  156. {
  157. //将当前状态保存到上一分钟状态
  158. lastState=po.getPointValueInDouble();
  159. }
  160. //故障时长加1分钟
  161. gzsc++;
  162. }else if(po.getPointValueInDouble()==5)
  163. {
  164. if(lastState!=po.getPointValueInDouble())
  165. {
  166. //将当前状态保存到上一分钟状态
  167. lastState=po.getPointValueInDouble();
  168. }
  169. //故障受累时长加1分钟
  170. gzslsc++;
  171. }else if(po.getPointValueInDouble()==6)
  172. {
  173. if(lastState!=po.getPointValueInDouble())
  174. {
  175. //将当前状态保存到上一分钟状态
  176. lastState=po.getPointValueInDouble();
  177. }
  178. //检修时长加1分钟
  179. jxsc++;
  180. }else if(po.getPointValueInDouble()==7)
  181. {
  182. if(lastState!=po.getPointValueInDouble())
  183. {
  184. //将当前状态保存到上一分钟状态
  185. lastState=po.getPointValueInDouble();
  186. }
  187. //检修受累时长加1分钟
  188. jxslsc++;
  189. }else if(po.getPointValueInDouble()==8)
  190. {
  191. if(lastState!=po.getPointValueInDouble())
  192. {
  193. //将当前状态保存到上一分钟状态
  194. lastState=po.getPointValueInDouble();
  195. }
  196. //限电降出力时长加1分钟
  197. xdjclsc++;
  198. }else if(po.getPointValueInDouble()==9)
  199. {
  200. if(lastState!=po.getPointValueInDouble())
  201. {
  202. //将当前状态保存到上一分钟状态
  203. lastState=po.getPointValueInDouble();
  204. }
  205. //限电停机时长加1分钟
  206. xdtjsc++;
  207. }else if(po.getPointValueInDouble()==10)
  208. {
  209. if(lastState!=po.getPointValueInDouble())
  210. {
  211. //将当前状态保存到上一分钟状态
  212. lastState=po.getPointValueInDouble();
  213. }
  214. //电网受累时长加1分钟
  215. dwslsc++;
  216. }else if(po.getPointValueInDouble()==11)
  217. {
  218. if(lastState!=po.getPointValueInDouble())
  219. {
  220. //将当前状态保存到上一分钟状态
  221. lastState=po.getPointValueInDouble();
  222. }
  223. //环境受累时长加1分钟
  224. hjslsc++;
  225. }else if(po.getPointValueInDouble()==12)
  226. {
  227. if(lastState!=po.getPointValueInDouble())
  228. {
  229. //将当前状态保存到上一分钟状态
  230. lastState=po.getPointValueInDouble();
  231. }
  232. //通讯中断时长加1分钟
  233. txzdsc++;
  234. }else if(po.getPointValueInDouble()==13)
  235. {
  236. if(lastState!=po.getPointValueInDouble())
  237. {
  238. //将当前状态保存到上一分钟状态
  239. lastState=po.getPointValueInDouble();
  240. }
  241. //设备离线时长加1分钟
  242. sblxsc++;
  243. }
  244. }
  245. }
  246. }
  247. //日合计故障小时(明细)
  248. pewp.setRgzxsmx(new BigDecimal(gzsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  249. //日合计场内受累故障小时(明细)
  250. pewp.setRcnslgzxsmx(new BigDecimal(gzslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  251. //日合计检修小时(明细)
  252. pewp.setRjxxsmx(new BigDecimal(jxsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  253. //日合计场内受累检修小时(明细)
  254. pewp.setRcnsljxxsmx(new BigDecimal(jxslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  255. //日合计待机小时(明细)
  256. pewp.setRdjxsmx(new BigDecimal(djsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  257. //日合计缺陷降出力小时(明细)
  258. pewp.setRqxjclxsmx(new BigDecimal(fdjclsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  259. //日合计手动停机小时(明细)
  260. pewp.setRsdtjxsmx(new BigDecimal(sdtjsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  261. //日合计性能小时(明细)
  262. pewp.setRbwxsmx(new BigDecimal(zcfdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  263. //日合计限电停机小时(明细)
  264. pewp.setRxdtjxsmx(new BigDecimal(xdtjsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  265. //日合计限电降出力小时(明细)
  266. pewp.setRxdjclxsmx(new BigDecimal(xdjclsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  267. //日合计场外受累电网小时(明细)
  268. pewp.setRcwsldwxsmx(new BigDecimal(dwslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  269. //日合计场外受累电网小时(明细)
  270. pewp.setRcwsltqxsmx(new BigDecimal(hjslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  271. //日合计通讯中断小时(明细)
  272. pewp.setRtxzdxsmx(new BigDecimal(txzdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  273. //日合计离线小时(明细)
  274. pewp.setRlxxsmx(new BigDecimal(sblxsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  275. /*******************************************日信息统计*********************************************************/
  276. /*******************************************月信息统计*********************************************************/
  277. if(pepidls.isEmpty())
  278. {
  279. setLossHoursMonth(pewp);
  280. }else
  281. {
  282. if(!pepidls.isEmpty())
  283. {
  284. ProEconEquipmentInfoDay2 pepid=pepidls.get(0);
  285. //月合计故障小时(明细)
  286. pewp.setYgzxsmx(StringUtils.round(pepid.getYgzxsmx()+pewp.getRgzxsmx(),2));
  287. //月合计场内受累故障小时(明细)
  288. pewp.setYcnslgzxsmx(StringUtils.round(pepid.getYcnslgzxsmx()+pewp.getRcnslgzxsmx(),2));
  289. //月合计检修小时(明细)
  290. pewp.setYjxxsmx(StringUtils.round(pepid.getYjxxsmx()+pewp.getRjxxsmx(),2));
  291. //月合计场内受累检修小时(明细)
  292. pewp.setYcnsljxxsmx(StringUtils.round( pepid.getYcnsljxxsmx()+pewp.getRcnsljxxsmx(),2));
  293. //月合计待机小时(明细)
  294. pewp.setYdjxsmx(StringUtils.round(pepid.getYdjxsmx()+pewp.getRdjxsmx(),2));
  295. //月合计缺陷降出力小时(明细)
  296. pewp.setYqxjclxsmx(StringUtils.round(pepid.getYqxjclxsmx()+pewp.getRqxjclxsmx(),2));
  297. //月合计手动停机小时(明细)
  298. pewp.setYsdtjxsmx(StringUtils.round(pepid.getYsdtjxsmx()+pewp.getRsdtjxsmx(),2));
  299. //月合计性能小时(明细)
  300. pewp.setYbwxsmx(StringUtils.round(pepid.getYbwxsmx()+pewp.getRbwxsmx(),2));
  301. //月合计限电停机小时(明细)
  302. pewp.setYxdtjxsmx(StringUtils.round(pepid.getYxdtjxsmx()+pewp.getRxdtjxsmx(),2));
  303. //月合计限电降出力小时(明细)
  304. pewp.setYxdjclxsmx(StringUtils.round(pepid.getYxdjclxsmx()+pewp.getRxdjclxsmx(),2));
  305. //月合计场外受累电网小时(明细)
  306. pewp.setYcwsldwxsmx(StringUtils.round(pepid.getYcwsldwxsmx()+pewp.getRcwsldwxsmx(),2));
  307. //月合计场外受累电网小时(明细)
  308. pewp.setYcwsltqxsmx(StringUtils.round(pepid.getYcwsltqxsmx()+pewp.getRcwsltqxsmx(),2));
  309. //月合计通讯中断小时(明细)
  310. pewp.setYtxzdxsmx(StringUtils.round(pepid.getYtxzdxsmx()+pewp.getRtxzdxsmx(),2));
  311. //月合计离线小时(明细)
  312. pewp.setYlxxsmx(StringUtils.round(pepid.getYlxxsmx()+pewp.getRlxxsmx(),2));
  313. }else
  314. {
  315. setLossHoursMonth(pewp);
  316. }
  317. }
  318. /*******************************************月信息统计*********************************************************/
  319. /*******************************************年信息统计*********************************************************/
  320. if(pepidls.isEmpty())
  321. {
  322. setLossHoursYear(pewp);
  323. }else
  324. {
  325. if(!pepidls.isEmpty())
  326. {
  327. ProEconEquipmentInfoDay2 pepid=pepidls.get(0);
  328. //年合计故障小时(明细)
  329. pewp.setYgzxsmx(StringUtils.round(pepid.getNgzxsmx()+pewp.getRgzxsmx(),2));
  330. //年合计场内受累故障小时(明细)
  331. pewp.setYcnslgzxsmx(StringUtils.round(pepid.getNcnslgzxsmx()+pewp.getRcnslgzxsmx(),2));
  332. //年合计检修小时(明细)
  333. pewp.setYjxxsmx(StringUtils.round(pepid.getNjxxsmx()+pewp.getRjxxsmx(),2));
  334. //年合计场内受累检修小时(明细)
  335. pewp.setYcnsljxxsmx(StringUtils.round( pepid.getNcnsljxxsmx()+pewp.getRcnsljxxsmx(),2));
  336. //年合计待机小时(明细)
  337. pewp.setYdjxsmx(StringUtils.round(pepid.getNdjxsmx()+pewp.getRdjxsmx(),2));
  338. //年合计缺陷降出力小时(明细)
  339. pewp.setYqxjclxsmx(StringUtils.round(pepid.getNqxjclxsmx()+pewp.getRqxjclxsmx(),2));
  340. //年合计手动停机小时(明细)
  341. pewp.setYsdtjxsmx(StringUtils.round(pepid.getNsdtjxsmx()+pewp.getRsdtjxsmx(),2));
  342. //年合计性能小时(明细)
  343. pewp.setYbwxsmx(StringUtils.round(pepid.getNbwxsmx()+pewp.getRbwxsmx(),2));
  344. //年合计限电停机小时(明细)
  345. pewp.setYxdtjxsmx(StringUtils.round(pepid.getNxdtjxsmx()+pewp.getRxdtjxsmx(),2));
  346. //年合计限电降出力小时(明细)
  347. pewp.setYxdjclxsmx(StringUtils.round(pepid.getNxdjclxsmx()+pewp.getRxdjclxsmx(),2));
  348. //年合计场外受累电网小时(明细)
  349. pewp.setYcwsldwxsmx(StringUtils.round(pepid.getNcwsldwxsmx()+pewp.getRcwsldwxsmx(),2));
  350. //年合计场外受累电网小时(明细)
  351. pewp.setYcwsltqxsmx(StringUtils.round(pepid.getNcwsltqxsmx()+pewp.getRcwsltqxsmx(),2));
  352. //年合计通讯中断小时(明细)
  353. pewp.setYtxzdxsmx(StringUtils.round(pepid.getNtxzdxsmx()+pewp.getRtxzdxsmx(),2));
  354. //年合计离线小时(明细)
  355. pewp.setYlxxsmx(StringUtils.round(pepid.getNlxxsmx()+pewp.getRlxxsmx(),2));
  356. }else
  357. {
  358. setLossHoursYear(pewp);
  359. }
  360. }
  361. }
  362. private static void setLossHoursYear(ProEconEquipmentInfoDay2 pewp) {
  363. //年合计故障小时(明细)
  364. pewp.setNgzxsmx(pewp.getRgzxsmx());
  365. //年合计场内受累故障小时(明细)
  366. pewp.setNcnslgzxsmx(pewp.getRcnslgzxsmx());
  367. //年合计检修小时(明细)
  368. pewp.setNjxxsmx(pewp.getRjxxsmx());
  369. //年合计场内受累检修小时(明细)
  370. pewp.setNcnsljxxsmx(pewp.getRcnsljxxsmx());
  371. //年合计待机小时(明细)
  372. pewp.setNdjxsmx(pewp.getRdjxsmx());
  373. //年合计缺陷降出力小时(明细)
  374. pewp.setNqxjclxsmx(pewp.getRqxjclxsmx());
  375. //年合计手动停机小时(明细)
  376. pewp.setNsdtjxsmx(pewp.getRsdtjxsmx());
  377. //年合计性能小时(明细)
  378. pewp.setNbwxsmx(pewp.getRbwxsmx());
  379. //年合计限电停机小时(明细)
  380. pewp.setNxdtjxsmx(pewp.getRxdtjxsmx());
  381. //年合计限电降出力小时(明细)
  382. pewp.setNxdjclxsmx(pewp.getRxdjclxsmx());
  383. //年合计场外受累电网小时(明细)
  384. pewp.setNcwsldwxsmx(pewp.getRcwsldwxsmx());
  385. //年合计场外受累电网小时(明细)
  386. pewp.setNcwsltqxsmx(pewp.getRcwsltqxsmx());
  387. //年合计通讯中断小时(明细)
  388. pewp.setNtxzdxsmx(pewp.getRtxzdxsmx());
  389. //年合计离线小时(明细)
  390. pewp.setNlxxsmx(pewp.getRlxxsmx());
  391. }
  392. private static void setLossHoursMonth(ProEconEquipmentInfoDay2 pewp) {
  393. //月合计故障小时(明细)
  394. pewp.setYgzxsmx(pewp.getRgzxsmx());
  395. //月合计场内受累故障小时(明细)
  396. pewp.setYcnslgzxsmx(pewp.getRcnslgzxsmx());
  397. //月合计检修小时(明细)
  398. pewp.setYjxxsmx(pewp.getRjxxsmx());
  399. //月合计场内受累检修小时(明细)
  400. pewp.setYcnsljxxsmx(pewp.getRcnsljxxsmx());
  401. //月合计待机小时(明细)
  402. pewp.setYdjxsmx(pewp.getRdjxsmx());
  403. //月合计缺陷降出力小时(明细)
  404. pewp.setYqxjclxsmx(pewp.getRqxjclxsmx());
  405. //月合计手动停机小时(明细)
  406. pewp.setYsdtjxsmx(pewp.getRsdtjxsmx());
  407. //月合计性能小时(明细)
  408. pewp.setYbwxsmx(pewp.getRbwxsmx());
  409. //月合计限电停机小时(明细)
  410. pewp.setYxdtjxsmx(pewp.getRxdtjxsmx());
  411. //月合计限电降出力小时(明细)
  412. pewp.setYxdjclxsmx(pewp.getRxdjclxsmx());
  413. //月合计场外受累电网小时(明细)
  414. pewp.setYcwsldwxsmx(pewp.getRcwsldwxsmx());
  415. //月合计场外受累电网小时(明细)
  416. pewp.setYcwsltqxsmx(pewp.getRcwsltqxsmx());
  417. //月合计通讯中断小时(明细)
  418. pewp.setYtxzdxsmx(pewp.getRtxzdxsmx());
  419. //月合计离线小时(明细)
  420. pewp.setYlxxsmx(pewp.getRlxxsmx());
  421. }
  422. private static void setLossHoursMonthSimple(ProEconEquipmentInfoDay2 pewp) {
  423. //月合计待机小时
  424. pewp.setYdjxs(pewp.getRdjxs());
  425. //月合计维护停机小时
  426. pewp.setYjxtjxs(pewp.getRjxtjxs());
  427. // 月合计故障停机小时
  428. pewp.setYgztjxs(pewp.getRgztjxs());
  429. //月合计运行小时
  430. pewp.setYyxxs(pewp.getRyxxs());
  431. //月合计限电小时
  432. pewp.setYxdxs(pewp.getRxdxs());
  433. //月合计通讯中断小时
  434. pewp.setYtxzdxs(pewp.getRtxzdxs());
  435. //月合计受累小时
  436. pewp.setYslxs(pewp.getRslxs());
  437. }
  438. private static void setLossHoursYearSimple(ProEconEquipmentInfoDay2 pewp) {
  439. //年合计待机小时
  440. pewp.setNdjxs(pewp.getRdjxs());
  441. //年合计维护停机小时
  442. pewp.setNjxtjxs(pewp.getRjxtjxs());
  443. // 年合计故障小时
  444. pewp.setNgztjxs(pewp.getRgztjxs());
  445. //年合计运行小时
  446. pewp.setNyxxs(pewp.getRyxxs());
  447. //年合计限电小时
  448. pewp.setNxdxs(pewp.getRxdxs());
  449. //年合计通讯中断小时
  450. pewp.setNtxzdxs(pewp.getRtxzdxs());
  451. //年合计受累小时
  452. pewp.setNslxs(pewp.getRslxs());
  453. }
  454. private void calSimple(ProEconEquipmentInfoDay2 pewp,Date end, Date begin,ProBasicWindturbine wt,List<ProEconEquipmentInfoDay2> pepidls) throws Exception {
  455. // 0 待机
  456. // 1 运行
  457. // 2 故障
  458. // 3 检修
  459. // 4 限电
  460. // 5 受累
  461. // 6 离线
  462. /*******************************************日信息统计*********************************************************/
  463. double lastState=-1;//上一分钟状态
  464. double djsc=0;//待机时长
  465. double zcfdsc=0;//正常发电时长
  466. double gzsc=0;//故障时长
  467. double jxsc=0;//检修时长
  468. double xdtjsc=0;//限电停机时长
  469. double slsc=0;//受累时长
  470. double txzdsc=0;//通讯中断时长
  471. Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;
  472. Map<String, ProBasicEquipmentPoint> aimap=wtpAimap.get(wt.getNemCode());
  473. if(wtpAimap.containsKey(ContantXk.SBZT));
  474. {
  475. ProBasicEquipmentPoint point=aimap.get(ContantXk.SBZT);
  476. //按照分钟时间进行统计状态快照值
  477. List<PointData> pointls=edosUtil.getHistoryDatasSnap(point.getNemCode(), begin.getTime()/1000, end.getTime()/1000);
  478. if(!pointls.isEmpty()) {
  479. for (PointData po : pointls) {
  480. if (po.getPointValueInDouble() == 0) {
  481. if (lastState != po.getPointValueInDouble()) {
  482. //将当前状态保存到上一分钟状态
  483. lastState = po.getPointValueInDouble();
  484. }
  485. //待机时长加1分钟
  486. djsc++;
  487. } else if (po.getPointValueInDouble() == 1) {
  488. if (lastState != po.getPointValueInDouble()) {
  489. //将当前状态保存到上一分钟状态
  490. lastState = po.getPointValueInDouble();
  491. }
  492. //正常发电时长加1分钟
  493. zcfdsc++;
  494. } else if (po.getPointValueInDouble() == 2) {
  495. if (lastState != po.getPointValueInDouble()) {
  496. //将当前状态保存到上一分钟状态
  497. lastState = po.getPointValueInDouble();
  498. }
  499. //故障时长加1分钟
  500. gzsc++;
  501. } else if (po.getPointValueInDouble() == 3) {
  502. if (lastState != po.getPointValueInDouble()) {
  503. //将当前状态保存到上一分钟状态
  504. lastState = po.getPointValueInDouble();
  505. }
  506. //检修时长加1分钟
  507. jxsc++;
  508. } else if (po.getPointValueInDouble() == 4) {
  509. if (lastState != po.getPointValueInDouble()) {
  510. //将当前状态保存到上一分钟状态
  511. lastState = po.getPointValueInDouble();
  512. }
  513. //限电停机时长加1分钟
  514. xdtjsc++;
  515. } else if (po.getPointValueInDouble() == 5) {
  516. if (lastState != po.getPointValueInDouble()) {
  517. //将当前状态保存到上一分钟状态
  518. lastState = po.getPointValueInDouble();
  519. }
  520. //受累时长加1分钟
  521. slsc++;
  522. } else if (po.getPointValueInDouble() == 6) {
  523. if (lastState != po.getPointValueInDouble()) {
  524. //将当前状态保存到上一分钟状态
  525. lastState = po.getPointValueInDouble();
  526. }
  527. //通讯中断时长加1分钟
  528. txzdsc++;
  529. }
  530. }
  531. }
  532. }
  533. //日合计待机小时
  534. pewp.setRdjxs(new BigDecimal(gzsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  535. //日合计维护停机小时
  536. pewp.setRjxtjxs(new BigDecimal(jxsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  537. // 日合计待机小时
  538. pewp.setRdjxs(new BigDecimal(djsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  539. //日合计运行小时
  540. pewp.setRyxxs(new BigDecimal(zcfdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  541. //日合计限电小时
  542. pewp.setRxdxs(new BigDecimal(xdtjsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  543. //日合计通讯中断小时
  544. pewp.setRtxzdxs(new BigDecimal(txzdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  545. //日合计受累小时
  546. pewp.setRslxs(new BigDecimal(slsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
  547. /*******************************************日信息统计*********************************************************/
  548. /*******************************************月信息统计*********************************************************/
  549. if(pepidls.isEmpty())
  550. {
  551. setLossHoursMonthSimple(pewp);
  552. }else
  553. {
  554. if(!pepidls.isEmpty())
  555. {
  556. ProEconEquipmentInfoDay2 pepid=pepidls.get(0);
  557. //月合计待机小时
  558. pewp.setYdjxs(StringUtils.round(pepid.getYdjxs()+pewp.getRdjxs(),2));
  559. //月合计维护停机小时
  560. pewp.setYjxtjxs(StringUtils.round(pepid.getYjxtjxs()+pewp.getRjxtjxs(),2));
  561. // 月合计故障小时
  562. pewp.setYgztjxs(StringUtils.round(pepid.getYgztjxs()+pewp.getRgztjxs(),2));
  563. //月合计运行小时
  564. pewp.setYyxxs(StringUtils.round(pepid.getYyxxs()+pewp.getRyxxs(),2));
  565. //月合计限电小时
  566. pewp.setYxdxs(StringUtils.round(pepid.getYxdxs()+pewp.getRxdxs(),2));
  567. //月合计通讯中断小时
  568. pewp.setYtxzdxs(StringUtils.round(pepid.getYtxzdxs()+pewp.getRtxzdxs(),2));
  569. //月合计受累小时
  570. pewp.setYslxs(StringUtils.round(pepid.getYslxs()+pewp.getRslxs(),2));
  571. }else
  572. {
  573. setLossHoursMonthSimple(pewp);
  574. }
  575. }
  576. /*******************************************月信息统计*********************************************************/
  577. /*******************************************年信息统计*********************************************************/
  578. if(pepidls.isEmpty())
  579. {
  580. setLossHoursYearSimple(pewp);
  581. }else
  582. {
  583. if(!pepidls.isEmpty())
  584. {
  585. ProEconEquipmentInfoDay2 pepid=pepidls.get(0);
  586. //年合计待机小时
  587. pewp.setNdjxs(StringUtils.round(pepid.getNdjxs()+pewp.getRdjxs(),2));
  588. //年合计维护停机小时
  589. pewp.setNjxtjxs(StringUtils.round(pepid.getNjxtjxs()+pewp.getRjxtjxs(),2));
  590. // 年合计故障小时
  591. pewp.setNgztjxs(StringUtils.round(pepid.getNgztjxs()+pewp.getRgztjxs(),2));
  592. //年合计运行小时
  593. pewp.setNyxxs(StringUtils.round(pepid.getNyxxs()+pewp.getRyxxs(),2));
  594. //年合计限电小时
  595. pewp.setNxdxs(StringUtils.round(pepid.getNxdxs()+pewp.getRxdxs(),2));
  596. //年合计通讯中断小时
  597. pewp.setNtxzdxs(StringUtils.round(pepid.getNtxzdxs()+pewp.getRtxzdxs(),2));
  598. //年合计受累小时
  599. pewp.setNslxs(StringUtils.round(pepid.getNslxs()+pewp.getRslxs(),2));
  600. }else
  601. {
  602. setLossHoursYearSimple(pewp);
  603. }
  604. }
  605. /*******************************************年信息统计*********************************************************/
  606. }
  607. }