EquipmentInfo2Service.java 31 KB

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