WindDeviationService.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. package com.gyee.generation.service;/*
  2. @author 谢生杰
  3. @date 2023/4/27-10:25
  4. */
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.gyee.common.contant.ContantXk;
  7. import com.gyee.common.model.PointData;
  8. import com.gyee.common.model.StringUtils;
  9. import com.gyee.common.util.CommonUtils;
  10. import com.gyee.common.util.DateUtils;
  11. import com.gyee.generation.init.CacheContext;
  12. import com.gyee.generation.model.auto.ProBasicEquipment;
  13. import com.gyee.generation.model.auto.ProBasicEquipmentPoint;
  14. import com.gyee.generation.model.auto.ProEconEquipmentDeviatPower;
  15. import com.gyee.generation.model.auto.ProEconEquipmentDeviatSpeed;
  16. import com.gyee.generation.model.vo.DeviationVo;
  17. import com.gyee.generation.service.auto.IProEconEquipmentDeviatPowerService;
  18. import com.gyee.generation.service.auto.IProEconEquipmentDeviatSpeedService;
  19. import com.gyee.generation.util.realtimesource.IEdosUtil;
  20. import org.springframework.stereotype.Service;
  21. import javax.annotation.Resource;
  22. import java.util.ArrayList;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.stream.Collectors;
  27. @Service
  28. public class WindDeviationService {
  29. @Resource
  30. private IEdosUtil edosUtil;
  31. @Resource
  32. private IProEconEquipmentDeviatSpeedService proEconEquipmentDeviatSpeedService;
  33. @Resource
  34. private IProEconEquipmentDeviatPowerService proEconEquipmentDeviatPowerService;
  35. public void save(String begin,String end){
  36. Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;
  37. List<ProBasicEquipment> wtfdls = CacheContext.wtfdls;
  38. Map<String, Double> modelpower = CacheContext.modelpower;
  39. List<ProEconEquipmentDeviatSpeed> speedsResultList = new ArrayList<>();
  40. List<ProEconEquipmentDeviatPower> powersResultList = new ArrayList<>();
  41. List<String> days = DateUtils.getDays(begin, end);
  42. days.stream().forEach(day->{
  43. Date date = DateUtils.parseDate(day);
  44. Date startOfDay = DateUtils.getStartOfDay(date);
  45. Date endOfDay = DateUtils.getEndOfDay(date);
  46. QueryWrapper<ProEconEquipmentDeviatSpeed> del = new QueryWrapper<>();
  47. del.lambda().eq(ProEconEquipmentDeviatSpeed::getRecordDate,date);
  48. proEconEquipmentDeviatSpeedService.remove(del);
  49. wtfdls.stream().forEach(wt->{
  50. if (wt.getEquipmentCategory()==-1){
  51. Map<String, ProBasicEquipmentPoint> equipmentPointMap = wtpAimap.get(wt.getId());
  52. ProBasicEquipmentPoint fxPoint = equipmentPointMap.get(ContantXk.CJ_FX);
  53. ProBasicEquipmentPoint dfjdPoint = equipmentPointMap.get(ContantXk.CJ_DFJD);
  54. ProBasicEquipmentPoint fsPoint = equipmentPointMap.get(ContantXk.CJ_SSFS);
  55. ProBasicEquipmentPoint glPoint = equipmentPointMap.get(ContantXk.CJ_SSGL);
  56. List<PointData> fxDatasSnap = null;
  57. List<PointData> dfjdDatasSnap = null;
  58. List<PointData> fsDatasSnap = null;
  59. List<PointData> glDatasSnap = null;
  60. try {
  61. fxDatasSnap = edosUtil.getHistoryDatasSnap(fxPoint.getNemCode(), startOfDay.getTime() / 1000, endOfDay.getTime() / 1000);
  62. dfjdDatasSnap = edosUtil.getHistoryDatasSnap(dfjdPoint.getNemCode(), startOfDay.getTime() / 1000, endOfDay.getTime() / 1000);
  63. fsDatasSnap = edosUtil.getHistoryDatasSnap(fsPoint.getNemCode(), startOfDay.getTime() / 1000, endOfDay.getTime() / 1000);
  64. glDatasSnap = edosUtil.getHistoryDatasSnap(glPoint.getNemCode(), startOfDay.getTime() / 1000, endOfDay.getTime() / 1000);
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. }
  68. if (StringUtils.isNotEmpty(fxDatasSnap) && StringUtils.isNotEmpty(dfjdDatasSnap) && StringUtils.isNotEmpty(fsDatasSnap) && StringUtils.isNotEmpty(glDatasSnap)){
  69. List<DeviationVo> tempList = new ArrayList<>();
  70. for (int i =0;i<fxDatasSnap.size();i++){
  71. DeviationVo vo = new DeviationVo();
  72. vo.setWtid(wt.getId());
  73. vo.setSpeed(fsDatasSnap.get(i).getPointValueInDouble());
  74. vo.setPower(glDatasSnap.get(i).getPointValueInDouble());
  75. vo.setFx(fxDatasSnap.get(i).getPointValueInDouble());
  76. vo.setDfjd(dfjdDatasSnap.get(i).getPointValueInDouble());
  77. tempList.add(vo);
  78. }
  79. for (int i = 1;i<=25;i++){
  80. int finalI = i;
  81. List<DeviationVo> vos = tempList.stream().filter(t -> (int) Math.round(t.getSpeed()) == finalI).collect(Collectors.toList());
  82. int[] ints = windDeviationRatio(vos);
  83. ProEconEquipmentDeviatSpeed deviatSpeed = new ProEconEquipmentDeviatSpeed();
  84. int qualified = 0;
  85. int zqualified = 0;
  86. for (int x=0;x<ints.length;x++){
  87. if (x>=35 && x<=65){
  88. qualified+=ints[x];
  89. }
  90. zqualified+=ints[x];
  91. }
  92. deviatSpeed.setSpeed(i);
  93. deviatSpeed.setUnqualified(zqualified-qualified);
  94. deviatSpeed.setQualified(qualified);
  95. deviatSpeed.setId(CommonUtils.getUUID());
  96. deviatSpeed.setWindturbineId(wt.getId());
  97. deviatSpeed.setLineId(wt.getLineId());
  98. deviatSpeed.setProjectId(wt.getProjectId());
  99. deviatSpeed.setWindpowerstationId(wt.getWindpowerstationId());
  100. deviatSpeed.setCompanyId(wt.getCompanyId());
  101. deviatSpeed.setRegionId(wt.getRegionId());
  102. deviatSpeed.setRecordDate(date);
  103. deviatSpeed.setN50(ints[0]);
  104. deviatSpeed.setN49(ints[1]);
  105. deviatSpeed.setN48(ints[2]);
  106. deviatSpeed.setN47(ints[3]);
  107. deviatSpeed.setN46(ints[4]);
  108. deviatSpeed.setN45(ints[5]);
  109. deviatSpeed.setN44(ints[6]);
  110. deviatSpeed.setN43(ints[7]);
  111. deviatSpeed.setN42(ints[8]);
  112. deviatSpeed.setN41(ints[9]);
  113. deviatSpeed.setN40(ints[10]);
  114. deviatSpeed.setN39(ints[11]);
  115. deviatSpeed.setN38(ints[12]);
  116. deviatSpeed.setN37(ints[13]);
  117. deviatSpeed.setN36(ints[14]);
  118. deviatSpeed.setN35(ints[15]);
  119. deviatSpeed.setN34(ints[16]);
  120. deviatSpeed.setN33(ints[17]);
  121. deviatSpeed.setN32(ints[18]);
  122. deviatSpeed.setN31(ints[19]);
  123. deviatSpeed.setN30(ints[20]);
  124. deviatSpeed.setN29(ints[21]);
  125. deviatSpeed.setN28(ints[22]);
  126. deviatSpeed.setN27(ints[23]);
  127. deviatSpeed.setN26(ints[24]);
  128. deviatSpeed.setN25(ints[25]);
  129. deviatSpeed.setN24(ints[26]);
  130. deviatSpeed.setN23(ints[27]);
  131. deviatSpeed.setN22(ints[28]);
  132. deviatSpeed.setN21(ints[29]);
  133. deviatSpeed.setN20(ints[30]);
  134. deviatSpeed.setN19(ints[31]);
  135. deviatSpeed.setN18(ints[32]);
  136. deviatSpeed.setN17(ints[33]);
  137. deviatSpeed.setN16(ints[34]);
  138. deviatSpeed.setN15(ints[35]);
  139. deviatSpeed.setN14(ints[36]);
  140. deviatSpeed.setN13(ints[37]);
  141. deviatSpeed.setN12(ints[38]);
  142. deviatSpeed.setN11(ints[39]);
  143. deviatSpeed.setN10(ints[40]);
  144. deviatSpeed.setN9(ints[41]);
  145. deviatSpeed.setN8(ints[42]);
  146. deviatSpeed.setN7(ints[43]);
  147. deviatSpeed.setN6(ints[44]);
  148. deviatSpeed.setN5(ints[45]);
  149. deviatSpeed.setN4(ints[46]);
  150. deviatSpeed.setN3(ints[47]);
  151. deviatSpeed.setN2(ints[48]);
  152. deviatSpeed.setN1(ints[49]);
  153. deviatSpeed.setP0(ints[50]);
  154. deviatSpeed.setP1(ints[51]);
  155. deviatSpeed.setP2(ints[52]);
  156. deviatSpeed.setP3(ints[53]);
  157. deviatSpeed.setP4(ints[54]);
  158. deviatSpeed.setP5(ints[55]);
  159. deviatSpeed.setP6(ints[56]);
  160. deviatSpeed.setP7(ints[57]);
  161. deviatSpeed.setP8(ints[58]);
  162. deviatSpeed.setP9(ints[59]);
  163. deviatSpeed.setP10(ints[60]);
  164. deviatSpeed.setP11(ints[61]);
  165. deviatSpeed.setP12(ints[62]);
  166. deviatSpeed.setP13(ints[63]);
  167. deviatSpeed.setP14(ints[64]);
  168. deviatSpeed.setP15(ints[65]);
  169. deviatSpeed.setP16(ints[66]);
  170. deviatSpeed.setP17(ints[67]);
  171. deviatSpeed.setP18(ints[68]);
  172. deviatSpeed.setP19(ints[69]);
  173. deviatSpeed.setP20(ints[70]);
  174. deviatSpeed.setP21(ints[71]);
  175. deviatSpeed.setP22(ints[72]);
  176. deviatSpeed.setP23(ints[73]);
  177. deviatSpeed.setP24(ints[74]);
  178. deviatSpeed.setP25(ints[75]);
  179. deviatSpeed.setP26(ints[76]);
  180. deviatSpeed.setP27(ints[77]);
  181. deviatSpeed.setP28(ints[78]);
  182. deviatSpeed.setP29(ints[79]);
  183. deviatSpeed.setP30(ints[80]);
  184. deviatSpeed.setP31(ints[81]);
  185. deviatSpeed.setP32(ints[82]);
  186. deviatSpeed.setP33(ints[83]);
  187. deviatSpeed.setP34(ints[84]);
  188. deviatSpeed.setP35(ints[85]);
  189. deviatSpeed.setP36(ints[86]);
  190. deviatSpeed.setP37(ints[87]);
  191. deviatSpeed.setP38(ints[88]);
  192. deviatSpeed.setP39(ints[89]);
  193. deviatSpeed.setP40(ints[90]);
  194. deviatSpeed.setP41(ints[91]);
  195. deviatSpeed.setP42(ints[92]);
  196. deviatSpeed.setP43(ints[93]);
  197. deviatSpeed.setP44(ints[94]);
  198. deviatSpeed.setP45(ints[95]);
  199. deviatSpeed.setP46(ints[96]);
  200. deviatSpeed.setP47(ints[97]);
  201. deviatSpeed.setP48(ints[98]);
  202. deviatSpeed.setP49(ints[99]);
  203. deviatSpeed.setP50(ints[100]);
  204. speedsResultList.add(deviatSpeed);
  205. }
  206. double zjrl = modelpower.get(wt.getModelId());
  207. int round = (int)zjrl/100;
  208. for (int i = 1;i<=round;i++){
  209. int finalI = i;
  210. List<DeviationVo> vos = tempList.stream().filter(t -> (int) Math.round(t.getPower()) == finalI).collect(Collectors.toList());
  211. int[] ints = windDeviationRatio(vos);
  212. ProEconEquipmentDeviatPower deviatPower = new ProEconEquipmentDeviatPower();
  213. int qualified = 0;
  214. int zqualified = 0;
  215. for (int x=0;x<ints.length;x++){
  216. if (x>=35 && x<=65){
  217. qualified+=ints[x];
  218. }
  219. zqualified+=ints[x];
  220. }
  221. deviatPower.setPower(i*100);
  222. deviatPower.setUnqualified(zqualified-qualified);
  223. deviatPower.setQualified(qualified);
  224. deviatPower.setId(CommonUtils.getUUID());
  225. deviatPower.setWindturbineId(wt.getId());
  226. deviatPower.setLineId(wt.getLineId());
  227. deviatPower.setProjectId(wt.getProjectId());
  228. deviatPower.setWindpowerstationId(wt.getWindpowerstationId());
  229. deviatPower.setCompanyId(wt.getCompanyId());
  230. deviatPower.setRegionId(wt.getRegionId());
  231. deviatPower.setRecordDate(date);
  232. deviatPower.setN50(ints[0]);
  233. deviatPower.setN49(ints[1]);
  234. deviatPower.setN48(ints[2]);
  235. deviatPower.setN47(ints[3]);
  236. deviatPower.setN46(ints[4]);
  237. deviatPower.setN45(ints[5]);
  238. deviatPower.setN44(ints[6]);
  239. deviatPower.setN43(ints[7]);
  240. deviatPower.setN42(ints[8]);
  241. deviatPower.setN41(ints[9]);
  242. deviatPower.setN40(ints[10]);
  243. deviatPower.setN39(ints[11]);
  244. deviatPower.setN38(ints[12]);
  245. deviatPower.setN37(ints[13]);
  246. deviatPower.setN36(ints[14]);
  247. deviatPower.setN35(ints[15]);
  248. deviatPower.setN34(ints[16]);
  249. deviatPower.setN33(ints[17]);
  250. deviatPower.setN32(ints[18]);
  251. deviatPower.setN31(ints[19]);
  252. deviatPower.setN30(ints[20]);
  253. deviatPower.setN29(ints[21]);
  254. deviatPower.setN28(ints[22]);
  255. deviatPower.setN27(ints[23]);
  256. deviatPower.setN26(ints[24]);
  257. deviatPower.setN25(ints[25]);
  258. deviatPower.setN24(ints[26]);
  259. deviatPower.setN23(ints[27]);
  260. deviatPower.setN22(ints[28]);
  261. deviatPower.setN21(ints[29]);
  262. deviatPower.setN20(ints[30]);
  263. deviatPower.setN19(ints[31]);
  264. deviatPower.setN18(ints[32]);
  265. deviatPower.setN17(ints[33]);
  266. deviatPower.setN16(ints[34]);
  267. deviatPower.setN15(ints[35]);
  268. deviatPower.setN14(ints[36]);
  269. deviatPower.setN13(ints[37]);
  270. deviatPower.setN12(ints[38]);
  271. deviatPower.setN11(ints[39]);
  272. deviatPower.setN10(ints[40]);
  273. deviatPower.setN9(ints[41]);
  274. deviatPower.setN8(ints[42]);
  275. deviatPower.setN7(ints[43]);
  276. deviatPower.setN6(ints[44]);
  277. deviatPower.setN5(ints[45]);
  278. deviatPower.setN4(ints[46]);
  279. deviatPower.setN3(ints[47]);
  280. deviatPower.setN2(ints[48]);
  281. deviatPower.setN1(ints[49]);
  282. deviatPower.setP0(ints[50]);
  283. deviatPower.setP1(ints[51]);
  284. deviatPower.setP2(ints[52]);
  285. deviatPower.setP3(ints[53]);
  286. deviatPower.setP4(ints[54]);
  287. deviatPower.setP5(ints[55]);
  288. deviatPower.setP6(ints[56]);
  289. deviatPower.setP7(ints[57]);
  290. deviatPower.setP8(ints[58]);
  291. deviatPower.setP9(ints[59]);
  292. deviatPower.setP10(ints[60]);
  293. deviatPower.setP11(ints[61]);
  294. deviatPower.setP12(ints[62]);
  295. deviatPower.setP13(ints[63]);
  296. deviatPower.setP14(ints[64]);
  297. deviatPower.setP15(ints[65]);
  298. deviatPower.setP16(ints[66]);
  299. deviatPower.setP17(ints[67]);
  300. deviatPower.setP18(ints[68]);
  301. deviatPower.setP19(ints[69]);
  302. deviatPower.setP20(ints[70]);
  303. deviatPower.setP21(ints[71]);
  304. deviatPower.setP22(ints[72]);
  305. deviatPower.setP23(ints[73]);
  306. deviatPower.setP24(ints[74]);
  307. deviatPower.setP25(ints[75]);
  308. deviatPower.setP26(ints[76]);
  309. deviatPower.setP27(ints[77]);
  310. deviatPower.setP28(ints[78]);
  311. deviatPower.setP29(ints[79]);
  312. deviatPower.setP30(ints[80]);
  313. deviatPower.setP31(ints[81]);
  314. deviatPower.setP32(ints[82]);
  315. deviatPower.setP33(ints[83]);
  316. deviatPower.setP34(ints[84]);
  317. deviatPower.setP35(ints[85]);
  318. deviatPower.setP36(ints[86]);
  319. deviatPower.setP37(ints[87]);
  320. deviatPower.setP38(ints[88]);
  321. deviatPower.setP39(ints[89]);
  322. deviatPower.setP40(ints[90]);
  323. deviatPower.setP41(ints[91]);
  324. deviatPower.setP42(ints[92]);
  325. deviatPower.setP43(ints[93]);
  326. deviatPower.setP44(ints[94]);
  327. deviatPower.setP45(ints[95]);
  328. deviatPower.setP46(ints[96]);
  329. deviatPower.setP47(ints[97]);
  330. deviatPower.setP48(ints[98]);
  331. deviatPower.setP49(ints[99]);
  332. deviatPower.setP50(ints[100]);
  333. powersResultList.add(deviatPower);
  334. }
  335. }
  336. }
  337. });
  338. });
  339. proEconEquipmentDeviatSpeedService.saveBatch(speedsResultList);
  340. proEconEquipmentDeviatPowerService.saveBatch(powersResultList);
  341. }
  342. private static int[] windDeviationRatio(List<DeviationVo> list){
  343. int[] pc = new int[101]; //正负偏差 [-50,-49,....,0,1,2,.....50]
  344. //次数统计
  345. for (int i = 0; i < list.size(); i++){
  346. DeviationVo item = list.get(i);
  347. int ele = (int) (Math.abs(item.getFx()) + Math.abs(item.getDfjd()));
  348. int index = ele - 180;
  349. if (index >= -50 && index <= 50)
  350. pc[50-(index > 0 ? -index : Math.abs(index))]++;
  351. }
  352. return pc;
  353. }
  354. }