GenerateBackPassDataService.java 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055
  1. package com.jiayue.ipfcst.client.service;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.http.HttpRequest;
  4. import cn.hutool.http.HttpResponse;
  5. import cn.hutool.json.JSONArray;
  6. import cn.hutool.json.JSONObject;
  7. import com.fasterxml.jackson.core.JsonProcessingException;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import com.jiayue.ipfcst.client.utils.EfileUtil;
  10. import com.jiayue.ipfcst.client.utils.GzipUtil;
  11. import com.jiayue.ipfcst.client.utils.JsonBeanUtil;
  12. import com.jiayue.ipfcst.client.utils.TimeUtils;
  13. import com.jiayue.ipfcst.common.core.exception.BusinessException;
  14. import com.jiayue.ipfcst.common.core.util.DateMomentUtil;
  15. import com.jiayue.ipfcst.common.core.util.DateTimeUtil;
  16. import com.jiayue.ipp.common.data.entity.*;
  17. import lombok.Data;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.apache.commons.io.FileUtils;
  20. import org.springframework.scheduling.annotation.Scheduled;
  21. import org.springframework.stereotype.Service;
  22. import java.io.*;
  23. import java.text.SimpleDateFormat;
  24. import java.time.ZoneId;
  25. import java.util.*;
  26. import java.util.Date;
  27. import java.util.stream.Collectors;
  28. /**
  29. * 生成回传数据
  30. *
  31. * @Author: tl
  32. * @Date: 2023/6/29 9:47
  33. */
  34. @Service
  35. @Slf4j
  36. public class GenerateBackPassDataService {
  37. private final WindPowerReal15MinFD0001Service windPowerReal15MinFD0001Service;
  38. private final WindPowerReal15MinFD0002Service windPowerReal15MinFD0002Service;
  39. private final WindPowerReal15MinFD0003Service windPowerReal15MinFD0003Service;
  40. private final WindPowerReal15MinFD0004Service windPowerReal15MinFD0004Service;
  41. private final WindPowerReal15MinFD0005Service windPowerReal15MinFD0005Service;
  42. private final WindPowerReal15MinFD0006Service windPowerReal15MinFD0006Service;
  43. private final WindPowerReal15MinFD0007Service windPowerReal15MinFD0007Service;
  44. private static final String IMAGE_TYPE = "jpg";
  45. private static final String PLACE = "-0.99|";
  46. private static final Long oneDay = 3600 * 24 * 1000L - 1000L;
  47. private static final Integer packSize = 2000;
  48. private final JiaYueWindPowerDqResultCoverFD0001Service jiaYueWindPowerDqResultCoverFD0001Service;
  49. private final JiaYueWindPowerDqResultCoverFD0002Service jiaYueWindPowerDqResultCoverFD0002Service;
  50. private final JiaYueWindPowerDqResultCoverFD0003Service jiaYueWindPowerDqResultCoverFD0003Service;
  51. private final JiaYueWindPowerDqResultCoverFD0004Service jiaYueWindPowerDqResultCoverFD0004Service;
  52. private final JiaYueWindPowerDqResultCoverFD0005Service jiaYueWindPowerDqResultCoverFD0005Service;
  53. private final JiaYueWindPowerDqResultCoverFD0006Service jiaYueWindPowerDqResultCoverFD0006Service;
  54. private final JiaYueWindPowerDqResultCoverFD0007Service jiaYueWindPowerDqResultCoverFD0007Service;
  55. private final JiaYueWindPowerCdqResultCoverFD0001Service jiaYueWindPowerCdqResultCoverFD0001Service;
  56. private final JiaYueWindPowerCdqResultCoverFD0002Service jiaYueWindPowerCdqResultCoverFD0002Service;
  57. private final JiaYueWindPowerCdqResultCoverFD0003Service jiaYueWindPowerCdqResultCoverFD0003Service;
  58. private final JiaYueWindPowerCdqResultCoverFD0004Service jiaYueWindPowerCdqResultCoverFD0004Service;
  59. private final JiaYueWindPowerCdqResultCoverFD0005Service jiaYueWindPowerCdqResultCoverFD0005Service;
  60. private final JiaYueWindPowerCdqResultCoverFD0006Service jiaYueWindPowerCdqResultCoverFD0006Service;
  61. private final JiaYueWindPowerCdqResultCoverFD0007Service jiaYueWindPowerCdqResultCoverFD0007Service;
  62. public GenerateBackPassDataService(WindPowerReal15MinFD0001Service windPowerReal15MinFD0001Service,WindPowerReal15MinFD0002Service windPowerReal15MinFD0002Service,WindPowerReal15MinFD0003Service windPowerReal15MinFD0003Service,WindPowerReal15MinFD0004Service windPowerReal15MinFD0004Service,WindPowerReal15MinFD0005Service windPowerReal15MinFD0005Service,
  63. WindPowerReal15MinFD0006Service windPowerReal15MinFD0006Service,WindPowerReal15MinFD0007Service windPowerReal15MinFD0007Service,JiaYueWindPowerDqResultCoverFD0001Service jiaYueWindPowerDqResultCoverFD0001Service,JiaYueWindPowerDqResultCoverFD0002Service jiaYueWindPowerDqResultCoverFD0002Service,
  64. JiaYueWindPowerDqResultCoverFD0003Service jiaYueWindPowerDqResultCoverFD0003Service,JiaYueWindPowerDqResultCoverFD0004Service jiaYueWindPowerDqResultCoverFD0004Service,JiaYueWindPowerDqResultCoverFD0005Service jiaYueWindPowerDqResultCoverFD0005Service,JiaYueWindPowerDqResultCoverFD0006Service jiaYueWindPowerDqResultCoverFD0006Service,
  65. JiaYueWindPowerDqResultCoverFD0007Service jiaYueWindPowerDqResultCoverFD0007Service,JiaYueWindPowerCdqResultCoverFD0001Service jiaYueWindPowerCdqResultCoverFD0001Service,JiaYueWindPowerCdqResultCoverFD0002Service jiaYueWindPowerCdqResultCoverFD0002Service,
  66. JiaYueWindPowerCdqResultCoverFD0003Service jiaYueWindPowerCdqResultCoverFD0003Service,JiaYueWindPowerCdqResultCoverFD0004Service jiaYueWindPowerCdqResultCoverFD0004Service,JiaYueWindPowerCdqResultCoverFD0005Service jiaYueWindPowerCdqResultCoverFD0005Service,JiaYueWindPowerCdqResultCoverFD0006Service jiaYueWindPowerCdqResultCoverFD0006Service,
  67. JiaYueWindPowerCdqResultCoverFD0007Service jiaYueWindPowerCdqResultCoverFD0007Service){
  68. this.windPowerReal15MinFD0001Service = windPowerReal15MinFD0001Service;
  69. this.windPowerReal15MinFD0002Service = windPowerReal15MinFD0002Service;
  70. this.windPowerReal15MinFD0003Service = windPowerReal15MinFD0003Service;
  71. this.windPowerReal15MinFD0004Service = windPowerReal15MinFD0004Service;
  72. this.windPowerReal15MinFD0005Service = windPowerReal15MinFD0005Service;
  73. this.windPowerReal15MinFD0006Service = windPowerReal15MinFD0006Service;
  74. this.windPowerReal15MinFD0007Service = windPowerReal15MinFD0007Service;
  75. this.jiaYueWindPowerDqResultCoverFD0001Service = jiaYueWindPowerDqResultCoverFD0001Service;
  76. this.jiaYueWindPowerDqResultCoverFD0002Service = jiaYueWindPowerDqResultCoverFD0002Service;
  77. this.jiaYueWindPowerDqResultCoverFD0003Service = jiaYueWindPowerDqResultCoverFD0003Service;
  78. this.jiaYueWindPowerDqResultCoverFD0004Service = jiaYueWindPowerDqResultCoverFD0004Service;
  79. this.jiaYueWindPowerDqResultCoverFD0005Service = jiaYueWindPowerDqResultCoverFD0005Service;
  80. this.jiaYueWindPowerDqResultCoverFD0006Service = jiaYueWindPowerDqResultCoverFD0006Service;
  81. this.jiaYueWindPowerDqResultCoverFD0007Service = jiaYueWindPowerDqResultCoverFD0007Service;
  82. this.jiaYueWindPowerCdqResultCoverFD0001Service = jiaYueWindPowerCdqResultCoverFD0001Service;
  83. this.jiaYueWindPowerCdqResultCoverFD0002Service = jiaYueWindPowerCdqResultCoverFD0002Service;
  84. this.jiaYueWindPowerCdqResultCoverFD0003Service = jiaYueWindPowerCdqResultCoverFD0003Service;
  85. this.jiaYueWindPowerCdqResultCoverFD0005Service = jiaYueWindPowerCdqResultCoverFD0005Service;
  86. this.jiaYueWindPowerCdqResultCoverFD0004Service = jiaYueWindPowerCdqResultCoverFD0004Service;
  87. this.jiaYueWindPowerCdqResultCoverFD0006Service = jiaYueWindPowerCdqResultCoverFD0006Service;
  88. this.jiaYueWindPowerCdqResultCoverFD0007Service = jiaYueWindPowerCdqResultCoverFD0007Service;
  89. }
  90. /**
  91. * 生成实际功率json文件
  92. */
  93. // @Scheduled(cron = "0 48 1 * * ?")
  94. // public void genRealPowerDataJsonFile() {
  95. //
  96. // long time = System.currentTimeMillis() - 86400000l;
  97. // // 获取startTime和endTime
  98. // Date startTime = DateTimeUtil.getDayStartTime(time);
  99. // Date endTime = DateTimeUtil.getDayLastTime(time);
  100. //
  101. // List list = new ArrayList();
  102. // list.add("FD0001");
  103. // list.add("FD0002");
  104. // list.add("FD0003");
  105. // list.add("FD0005");
  106. // list.add("FD0006");
  107. // list.add("FD0007");
  108. //
  109. // List<ElectricField> electricFieldList = new ArrayList<>();
  110. // ElectricField electricField1 = new ElectricField();
  111. // electricField1.setBelongForecastManufactor("SYJY");
  112. // electricField1.setCapacity(new BigDecimal(30.0000));
  113. // electricField1.setElectricFieldTypeEnum("2");
  114. // electricField1.setForecastManufactor("SYJY");
  115. // electricField1.setId("138c6aebdf6ddc792495bc35fa3e4adb");
  116. // electricField1.setName("天津中能融合测试站A");
  117. // electricField1.setStationCode("J00770");
  118. // electricField1.setSign("FD0001");
  119. // electricField1.setNetSubstationName("J00770");
  120. //
  121. // ElectricField electricField2 = new ElectricField();
  122. // electricField2.setBelongForecastManufactor("SYJY");
  123. // electricField2.setCapacity(new BigDecimal(12.0000));
  124. // electricField2.setElectricFieldTypeEnum("2");
  125. // electricField2.setForecastManufactor("SYJY");
  126. // electricField2.setId("30a9f02678beb7101e628d7c7e22c5d6");
  127. // electricField2.setName("天津中能融合测试站C");
  128. // electricField2.setStationCode("J00942");
  129. // electricField2.setSign("FD0003");
  130. // electricField2.setNetSubstationName("J00942");
  131. //
  132. // ElectricField electricField3 = new ElectricField();
  133. // electricField3.setBelongForecastManufactor("SYJY");
  134. // electricField3.setCapacity(new BigDecimal(20.0000));
  135. // electricField3.setElectricFieldTypeEnum("2");
  136. // electricField2.setForecastManufactor("SYJY");
  137. // electricField3.setId("d712c1ef348714a5afafcf130c256cc9");
  138. // electricField3.setName("中能融合测试站B");
  139. // electricField3.setStationCode("J00941");
  140. // electricField3.setSign("FD0002");
  141. // electricField3.setNetSubstationName("J00941");
  142. //
  143. // ElectricField electricField5 = new ElectricField();
  144. // electricField3.setBelongForecastManufactor("SYJY");
  145. // electricField3.setCapacity(new BigDecimal(99.0000));
  146. // electricField3.setElectricFieldTypeEnum("2");
  147. // electricField2.setForecastManufactor("SYJY");
  148. // electricField3.setId("d712c1ef348714a5afafcf130c256cc5");
  149. // electricField3.setName("内蒙古中能融合测试站E");
  150. // electricField3.setStationCode("J00929");
  151. // electricField3.setSign("FD0005");
  152. // electricField3.setNetSubstationName("J00929");
  153. //
  154. // ElectricField electricField6 = new ElectricField();
  155. // electricField3.setBelongForecastManufactor("SYJY");
  156. // electricField3.setCapacity(new BigDecimal(50.0000));
  157. // electricField3.setElectricFieldTypeEnum("2");
  158. // electricField2.setForecastManufactor("SYJY");
  159. // electricField3.setId("d712c1ef348714a5afafcf130c256cc6");
  160. // electricField3.setName("河南中能融合测试站F");
  161. // electricField3.setStationCode("J00930");
  162. // electricField3.setSign("FD0006");
  163. // electricField3.setNetSubstationName("J00930");
  164. //
  165. // ElectricField electricField7 = new ElectricField();
  166. // electricField3.setBelongForecastManufactor("SYJY");
  167. // electricField3.setCapacity(new BigDecimal(50.0000));
  168. // electricField3.setElectricFieldTypeEnum("2");
  169. // electricField2.setForecastManufactor("SYJY");
  170. // electricField3.setId("d712c1ef348714a5afafcf130c256cc7");
  171. // electricField3.setName("天津中能融合测试站F");
  172. // electricField3.setStationCode("J00931");
  173. // electricField3.setSign("FD0007");
  174. // electricField3.setNetSubstationName("J00931");
  175. //
  176. // electricFieldList.add(electricField1);
  177. // electricFieldList.add(electricField2);
  178. // electricFieldList.add(electricField3);
  179. // electricFieldList.add(electricField5);
  180. // electricFieldList.add(electricField6);
  181. // electricFieldList.add(electricField7);
  182. //
  183. // List<WindPowerReal15MinFD0001> windPowerReal15MinFD0001List = windPowerReal15MinFD0001Service.getAll(startTime, endTime);
  184. // List<WindPowerReal15MinFD0002> windPowerReal15MinFD0002List = windPowerReal15MinFD0002Service.getAll(startTime, endTime);
  185. // List<WindPowerReal15MinFD0003> windPowerReal15MinFD0003List = windPowerReal15MinFD0003Service.getAll(startTime, endTime);
  186. // List<WindPowerReal15MinFD0005> windPowerReal15MinFD0005List = windPowerReal15MinFD0005Service.getAll(startTime, endTime);
  187. // List<WindPowerReal15MinFD0006> windPowerReal15MinFD0006List = windPowerReal15MinFD0006Service.getAll(startTime, endTime);
  188. // List<WindPowerReal15MinFD0007> windPowerReal15MinFD0007List = windPowerReal15MinFD0007Service.getAll(startTime, endTime);
  189. // // 根据电站编号查询对应实际功率
  190. // for (int i = 0; i < list.size(); i++) {
  191. //
  192. // for (ElectricField electricField : electricFieldList) {
  193. // // 判断场站标识是否跟数据库中的场站id相同
  194. // String zxglPath = sysParameterService.getSysParameterAndStationCode("zxgl_config", "", electricField.getStationCode());
  195. //
  196. // if (!zxglPath.equals("")) {
  197. // FileOutputStream fileOutputStream = null;
  198. // try {
  199. // log.info("开始生成【{}】实际功率json文件", electricField.getStationCode());
  200. // String content = electricField.getStationCode() + "|" + startTime.getTime() + "|rp|";
  201. // //为了确保无数据缺失,遍历时间
  202. // long sTimeL = startTime.getTime();
  203. // long eTimeL = endTime.getTime();
  204. // for (long m = sTimeL; m < eTimeL; m += 900000l) {
  205. // long finalI = m;
  206. // List<? extends Serializable> filterList = new ArrayList<>();
  207. // if (electricField.getSign().equals(list.get(i)) && list.get(i).equals("FD0001")) {
  208. // filterList = windPowerReal15MinFD0001List.stream().filter(p -> Timestamp.valueOf(p.getDateTime()).getTime() == finalI).collect(Collectors.toList());
  209. // }
  210. // if (electricField.getSign().equals(list.get(i)) && list.get(i).equals("FD0002")) {
  211. // filterList = windPowerReal15MinFD0002List.stream().filter(p -> Timestamp.valueOf(p.getDateTime()).getTime() == finalI).collect(Collectors.toList());
  212. // }
  213. // if (electricField.getSign().equals(list.get(i)) && list.get(i).equals("FD0003")) {
  214. // filterList = windPowerReal15MinFD0003List.stream().filter(p -> Timestamp.valueOf(p.getDateTime()).getTime() == finalI).collect(Collectors.toList());
  215. // }
  216. // if (electricField.getSign().equals(list.get(i)) && list.get(i).equals("FD0005")) {
  217. // filterList = windPowerReal15MinFD0005List.stream().filter(p -> Timestamp.valueOf(p.getDateTime()).getTime() == finalI).collect(Collectors.toList());
  218. // }
  219. // if (electricField.getSign().equals(list.get(i)) && list.get(i).equals("FD0006")) {
  220. // filterList = windPowerReal15MinFD0006List.stream().filter(p -> Timestamp.valueOf(p.getDateTime()).getTime() == finalI).collect(Collectors.toList());
  221. // }
  222. // if (electricField.getSign().equals(list.get(i)) && list.get(i).equals("FD0007")) {
  223. // filterList = windPowerReal15MinFD0007List.stream().filter(p -> Timestamp.valueOf(p.getDateTime()).getTime() == finalI).collect(Collectors.toList());
  224. // }
  225. // if (filterList != null && filterList.size() > 0) {
  226. // try {
  227. // Method getValueMethod = filterList.get(0).getClass().getMethod("getValue");
  228. // Object value = getValueMethod.invoke(filterList.get(0));
  229. // content = content + value.toString() + "|";
  230. // } catch (NoSuchMethodException e) {
  231. // throw new RuntimeException(e);
  232. // } catch (IllegalAccessException e) {
  233. // throw new RuntimeException(e);
  234. // } catch (InvocationTargetException e) {
  235. // throw new RuntimeException(e);
  236. // }
  237. //
  238. // } else {
  239. // content = content + "-0.99|";
  240. // }
  241. //
  242. // }
  243. // for (int j = 0; j < 96; j++) {
  244. // content = content + "-0.99|";
  245. // }
  246. // String zipContent = GzipUtil.zip(content).replace("\r\n", "");
  247. //
  248. // String taskNo = getTaskNo(electricField);
  249. //
  250. // JSONObject jsonObject = new JSONObject();
  251. // jsonObject.putOnce("taskNo", taskNo);
  252. // jsonObject.putOnce("taskType", "stationData-rp");
  253. // jsonObject.putOnce("partNo", 1);
  254. // jsonObject.putOnce("partTotal", 1);
  255. // jsonObject.putOnce("data", zipContent);
  256. //
  257. // String qrCodeContent = jsonObject.toString();
  258. //
  259. // String fileName = electricField.getStationCode() + "-" + DateFormatUtils.format(new Date(), "yyyyMMddHHmm") + "-realpower.json";
  260. //
  261. // File file = new File(zxglPath + File.separator + fileName);
  262. //
  263. // fileOutputStream = new FileOutputStream(file);
  264. // fileOutputStream.write(qrCodeContent.getBytes(Charset.forName("utf-8")));
  265. // fileOutputStream.flush();
  266. // fileOutputStream.close();
  267. //
  268. // log.info("实际功率json文件【{}】生成成功", fileName);
  269. // } catch (IOException e) {
  270. // e.printStackTrace();
  271. // }
  272. //
  273. // }
  274. //
  275. //// if (electricField.getSign().equals(list.get(i)) && list.get(i).equals("FD0003")) {
  276. //// String zxglPath = sysParameterService.getSysParameterAndStationCode("zxgl_config", "", electricField.getStationCode());
  277. ////
  278. //// if (!zxglPath.equals("")) {
  279. //// FileOutputStream fileOutputStream = null;
  280. //// try {
  281. //// log.info("开始生成【{}】实际功率json文件", electricField.getStationCode());
  282. //// String content = electricField.getStationCode() + "|" + startTime.getTime() + "|rp|";
  283. //// //为了确保无数据缺失,遍历时间
  284. //// long sTimeL = startTime.getTime();
  285. //// long eTimeL = endTime.getTime();
  286. //// for (long m = sTimeL; m < eTimeL; m += 900000l) {
  287. //// long finalI = m;
  288. //// List<WindPowerReal15MinFD0003> filterList = windPowerReal15MinFD0003List.stream().filter(p -> Timestamp.valueOf(p.getDateTime()).getTime() == finalI).collect(Collectors.toList());
  289. ////
  290. //// if (filterList != null && filterList.size() > 0) {
  291. //// content = content + filterList.get(0).getValue().toString() + "|";
  292. //// } else {
  293. //// content = content + "-0.99|";
  294. //// }
  295. ////
  296. //// }
  297. //// for (int j = 0; j < 96; j++) {
  298. //// content = content + "-0.99|";
  299. //// }
  300. //// String zipContent = GzipUtil.zip(content).replace("\r\n", "");
  301. ////
  302. //// String taskNo = getTaskNo(electricField);
  303. ////
  304. //// JSONObject jsonObject = new JSONObject();
  305. //// jsonObject.putOnce("taskNo", taskNo);
  306. //// jsonObject.putOnce("taskType", "stationData-rp");
  307. //// jsonObject.putOnce("partNo", 1);
  308. //// jsonObject.putOnce("partTotal", 1);
  309. //// jsonObject.putOnce("data", zipContent);
  310. ////
  311. //// String qrCodeContent = jsonObject.toString();
  312. ////
  313. //// String fileName = electricField.getStationCode() + "-" + DateFormatUtils.format(new Date(), "yyyyMMddHHmm") + "-realpower.json";
  314. ////
  315. //// File file = new File(zxglPath + File.separator + fileName);
  316. ////
  317. //// fileOutputStream = new FileOutputStream(file);
  318. //// fileOutputStream.write(qrCodeContent.getBytes(Charset.forName("utf-8")));
  319. //// fileOutputStream.flush();
  320. //// fileOutputStream.close();
  321. ////
  322. //// log.info("实际功率json文件【{}】生成成功", fileName);
  323. //// } catch (IOException e) {
  324. //// e.printStackTrace();
  325. //// }
  326. ////
  327. //// }
  328. //// }
  329. // }
  330. // }
  331. //
  332. //
  333. // }
  334. @Scheduled(fixedRate = 60000L)
  335. public void realPowerForQr() {
  336. String zxglPath = "/home/syjy/huichuan";
  337. File zxglPathFile = new File(zxglPath + File.separator + "new");
  338. log.info("开始扫描正向隔离回传目录{}", zxglPathFile.getPath());
  339. String bakPath = zxglPath + File.separator + "bak";
  340. if (zxglPathFile.exists()) {
  341. for (String s : zxglPathFile.list()) {
  342. List<String> list;
  343. File file = null;
  344. try {
  345. file = new File(zxglPathFile.getPath() + File.separator + s);
  346. list = EfileUtil.getFileContent(file);
  347. TaskResultRequestVO taskResultRequestVO = new TaskResultRequestVO();
  348. log.info("开始回传二维码数据,文件名:{}", file.getName());
  349. taskResultRequestVO.setTaskResult(String.join("", list));
  350. String url = "https://api.jiayuepowertech.com:8080/task/result";
  351. // 构造请求对象
  352. HttpRequest request = HttpRequest.put(url).body(JsonBeanUtil.beanToJson(taskResultRequestVO));
  353. // 发送请求并获取响应对象
  354. HttpResponse response = request.execute();
  355. log.info("回传二维码数据状态=》{}", response.body());
  356. FileUtils.moveFile(file, new File(bakPath + File.separator + file.getName()));
  357. } catch (Exception e) {
  358. log.info("回传二维码数据失败,文件名:{}", file.getName());
  359. e.printStackTrace();
  360. }
  361. }
  362. }
  363. }
  364. @Data
  365. class TaskResultRequestVO {
  366. private static final long serialVersionUID = 1L;
  367. private String taskResult;
  368. }
  369. /**
  370. * @return
  371. */
  372. /**
  373. * 查询回传短期、超短期、实际功率所需数据
  374. * @param electricField
  375. * @return
  376. */
  377. public Map<String, Object> generateQR(ElectricField electricField) {
  378. Long time = new Date().getTime() - 3600 * 24 * 1000L;
  379. // 获取昨日开始时间结束时间
  380. Date startTime = new Date(TimeUtils.getDayStartTime(time));
  381. Date endTime = new Date(startTime.getTime() + 3600 * 24 * 1000L * 10 - 1000L);
  382. Map<String, Object> map = new HashMap<>();
  383. try {
  384. //各个二维码显示设置
  385. Map<String, List<String>> dqMap = new TreeMap<>();
  386. Map<String, List<String>> cdqMap = new HashMap<>();
  387. Map<String, List<String>> rpMap = new HashMap<>();
  388. //超短期 stationData-QR T00003-ust-点位
  389. List<String> ust = generateUltraShortTermContent(startTime.getTime(), startTime.getTime() + 3600 * 24 * 1000L - 1000, electricField);
  390. cdqMap.put("超短期第1点数据", ust);
  391. //短期
  392. List<String> st = generateShortTermContent(startTime.getTime(), endTime.getTime(), electricField);
  393. //二维码名字
  394. StringBuilder name = new StringBuilder("E1短期");
  395. dqMap.put(name.toString(), st);
  396. //实际功率stationData-QR T00003-rp
  397. List<String> rp = generateRealPowerCodeContent(startTime.getTime(), endTime.getTime(), electricField);
  398. rpMap.put("实际功率", rp);
  399. map.put("ultraShortTerm", cdqMap);
  400. map.put("shortTerm", dqMap);
  401. map.put("realPower", rpMap);
  402. } catch (Exception e) {
  403. e.printStackTrace();
  404. }
  405. return map;
  406. }
  407. /**
  408. * 实际功率二维码内容生成
  409. *
  410. * @param startTime 开始时间
  411. * @param endTime 结束时间
  412. * @return 二维码生成内容集
  413. * @throws IOException io异常
  414. * @throws BusinessException 业务异常
  415. */
  416. public List<String> generateRealPowerCodeContent(Long startTime, Long endTime, ElectricField electricField) throws IOException, BusinessException {
  417. long timeStep = 900000L;
  418. if (startTime % timeStep != 0) {
  419. startTime = startTime - (startTime % timeStep) + timeStep;
  420. }
  421. StringBuilder content = new StringBuilder();
  422. StringBuilder instContent = new StringBuilder();
  423. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  424. StringBuilder stringBuilder = new StringBuilder();
  425. //T00003-rp|2023-04-14
  426. stringBuilder.append(electricField.getStationCode()).append("-").append("rp").append("|").append(sdf.format(startTime)).append("|");
  427. List<WindPowerReal15MinFD0001> windPowerReal15MinFD0001List = windPowerReal15MinFD0001Service.getAll(new Date(startTime), new Date(startTime + 24 * 60 * 60 * 1000L - 1000));
  428. List<WindPowerReal15MinFD0002> windPowerReal15MinFD0002List = windPowerReal15MinFD0002Service.getAll(new Date(startTime), new Date(startTime + 24 * 60 * 60 * 1000L - 1000));
  429. List<WindPowerReal15MinFD0003> windPowerReal15MinFD0003List = windPowerReal15MinFD0003Service.getAll(new Date(startTime), new Date(startTime + 24 * 60 * 60 * 1000L - 1000));
  430. List<WindPowerReal15MinFD0004> windPowerReal15MinFD0004List = windPowerReal15MinFD0004Service.getAll(new Date(startTime), new Date(startTime + 24 * 60 * 60 * 1000L - 1000));
  431. List<WindPowerReal15MinFD0005> windPowerReal15MinFD0005List = windPowerReal15MinFD0005Service.getAll(new Date(startTime), new Date(startTime + 24 * 60 * 60 * 1000L - 1000));
  432. List<WindPowerReal15MinFD0006> windPowerReal15MinFD0006List = windPowerReal15MinFD0006Service.getAll(new Date(startTime), new Date(startTime + 24 * 60 * 60 * 1000L - 1000));
  433. List<WindPowerReal15MinFD0007> windPowerReal15MinFD0007List = windPowerReal15MinFD0007Service.getAll(new Date(startTime), new Date(startTime + 24 * 60 * 60 * 1000L - 1000));
  434. for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + timeStep) {
  435. long finalTime = stepTime;
  436. if (electricField.getSign().equals("FD0001")) {
  437. List<WindPowerReal15MinFD0001> filterList = windPowerReal15MinFD0001List.stream().filter(p -> p.getDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  438. if (!filterList.isEmpty()) {
  439. content.append(filterList.get(0).getValue()).append("|");
  440. } else {
  441. content.append(PLACE);
  442. }
  443. }
  444. if (electricField.getSign().equals("FD0002")) {
  445. List<WindPowerReal15MinFD0002> filterList = windPowerReal15MinFD0002List.stream().filter(p -> p.getDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  446. if (!filterList.isEmpty()) {
  447. content.append(filterList.get(0).getValue()).append("|");
  448. } else {
  449. content.append(PLACE);
  450. }
  451. }
  452. if (electricField.getSign().equals("FD0003")) {
  453. List<WindPowerReal15MinFD0003> filterList = windPowerReal15MinFD0003List.stream().filter(p -> p.getDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  454. if (!filterList.isEmpty()) {
  455. content.append(filterList.get(0).getValue()).append("|");
  456. } else {
  457. content.append(PLACE);
  458. }
  459. }
  460. if (electricField.getSign().equals("FD0004")) {
  461. List<WindPowerReal15MinFD0004> filterList = windPowerReal15MinFD0004List.stream().filter(p -> p.getDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  462. if (!filterList.isEmpty()) {
  463. content.append(filterList.get(0).getValue()).append("|");
  464. } else {
  465. content.append(PLACE);
  466. }
  467. }
  468. if (electricField.getSign().equals("FD0005")) {
  469. List<WindPowerReal15MinFD0005> filterList = windPowerReal15MinFD0005List.stream().filter(p -> p.getDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  470. if (!filterList.isEmpty()) {
  471. content.append(filterList.get(0).getValue()).append("|");
  472. } else {
  473. content.append(PLACE);
  474. }
  475. }
  476. if (electricField.getSign().equals("FD0006")) {
  477. List<WindPowerReal15MinFD0006> filterList = windPowerReal15MinFD0006List.stream().filter(p -> p.getDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  478. if (!filterList.isEmpty()) {
  479. content.append(filterList.get(0).getValue()).append("|");
  480. } else {
  481. content.append(PLACE);
  482. }
  483. }
  484. if (electricField.getSign().equals("FD0007")) {
  485. List<WindPowerReal15MinFD0007> filterList = windPowerReal15MinFD0007List.stream().filter(p -> p.getDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  486. if (!filterList.isEmpty()) {
  487. content.append(filterList.get(0).getValue()).append("|");
  488. } else {
  489. content.append(PLACE);
  490. }
  491. }
  492. }
  493. stringBuilder.append(content);
  494. stringBuilder.append(instContent);
  495. List<String> qrCodeContents = GzipUtil.pubZipList(stringBuilder.toString(), packSize);
  496. List<String> result = new ArrayList<>();
  497. String taskNo = getTaskNo(electricField);
  498. for (int i = 0; i < qrCodeContents.size(); i++) {
  499. JSONObject jsonObject = new JSONObject();
  500. jsonObject.putOnce("taskNo", taskNo);
  501. jsonObject.putOnce("taskType", "stationData-QR");
  502. jsonObject.putOnce("partNo", i + 1);
  503. jsonObject.putOnce("partTotal", qrCodeContents.size());
  504. jsonObject.putOnce("data", qrCodeContents.get(i));
  505. result.add(i, jsonObject.toString());
  506. }
  507. return result;
  508. }
  509. /**
  510. * 上报短期二维码内容生成
  511. *
  512. * @param startTime 开始时间
  513. * @param endTime 结束时间
  514. * @return 二维码生成内容集
  515. * @throws IOException IO异常
  516. * @throws BusinessException 业务异常
  517. */
  518. public List<String> generateShortTermContent(Long startTime, Long endTime, ElectricField electricField) throws IOException, BusinessException {
  519. long timeStep = 900000L;
  520. if (startTime % timeStep != 0) {
  521. startTime = startTime - (startTime % timeStep) + timeStep;
  522. }
  523. StringBuilder content = new StringBuilder();
  524. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  525. StringBuilder name = new StringBuilder("E1");
  526. content.append(electricField.getStationCode()).append("-").append("st").append("-").append(name).append("|");
  527. List<Long> lDate = DateMomentUtil.getEveryDay(startTime, startTime + 24 * 60 * 60 * 1000 - 1000L);
  528. for (int i = 0; i < lDate.size(); i++) {
  529. content.append(sdf.format(lDate.get(i)));
  530. if (i != lDate.size() - 1) {
  531. content.append(",");
  532. } else {
  533. content.append("|");
  534. }
  535. }
  536. List<JiaYueWindPowerDqResultCoverFD0001> jiaYueWindPowerDqResultCoverFD0001List = jiaYueWindPowerDqResultCoverFD0001Service.findByDataDate(new Date(startTime));
  537. List<JiaYueWindPowerDqResultCoverFD0002> jiaYueWindPowerDqResultCoverFD0002List = jiaYueWindPowerDqResultCoverFD0002Service.findByDataDate(new Date(startTime));
  538. List<JiaYueWindPowerDqResultCoverFD0003> jiaYueWindPowerDqResultCoverFD0003List = jiaYueWindPowerDqResultCoverFD0003Service.findByDataDate(new Date(startTime));
  539. List<JiaYueWindPowerDqResultCoverFD0004> jiaYueWindPowerDqResultCoverFD0004List = jiaYueWindPowerDqResultCoverFD0004Service.findByDataDate(new Date(startTime));
  540. List<JiaYueWindPowerDqResultCoverFD0005> jiaYueWindPowerDqResultCoverFD0005List = jiaYueWindPowerDqResultCoverFD0005Service.findByDataDate(new Date(startTime));
  541. List<JiaYueWindPowerDqResultCoverFD0006> jiaYueWindPowerDqResultCoverFD0006List = jiaYueWindPowerDqResultCoverFD0006Service.findByDataDate(new Date(startTime));
  542. List<JiaYueWindPowerDqResultCoverFD0007> jiaYueWindPowerDqResultCoverFD0007List = jiaYueWindPowerDqResultCoverFD0007Service.findByDataDate(new Date(startTime));
  543. for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + timeStep) {
  544. long finalTime = stepTime;
  545. if (electricField.getSign().equals("FD0001")) {
  546. List<JiaYueWindPowerDqResultCoverFD0001> filterList = jiaYueWindPowerDqResultCoverFD0001List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  547. if (!filterList.isEmpty()) {
  548. content.append(filterList.get(0).getActivePower()).append("|");
  549. } else {
  550. content.append(PLACE);
  551. }
  552. }
  553. if (electricField.getSign().equals("FD0002")) {
  554. List<JiaYueWindPowerDqResultCoverFD0002> filterList = jiaYueWindPowerDqResultCoverFD0002List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  555. if (!filterList.isEmpty()) {
  556. content.append(filterList.get(0).getActivePower()).append("|");
  557. } else {
  558. content.append(PLACE);
  559. }
  560. }
  561. if (electricField.getSign().equals("FD0003")) {
  562. List<JiaYueWindPowerDqResultCoverFD0003> filterList = jiaYueWindPowerDqResultCoverFD0003List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  563. if (!filterList.isEmpty()) {
  564. content.append(filterList.get(0).getActivePower()).append("|");
  565. } else {
  566. content.append(PLACE);
  567. }
  568. }
  569. if (electricField.getSign().equals("FD0004")) {
  570. List<JiaYueWindPowerDqResultCoverFD0004> filterList = jiaYueWindPowerDqResultCoverFD0004List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  571. if (!filterList.isEmpty()) {
  572. content.append(filterList.get(0).getActivePower()).append("|");
  573. } else {
  574. content.append(PLACE);
  575. }
  576. }
  577. if (electricField.getSign().equals("FD0005")) {
  578. List<JiaYueWindPowerDqResultCoverFD0005> filterList = jiaYueWindPowerDqResultCoverFD0005List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  579. if (!filterList.isEmpty()) {
  580. content.append(filterList.get(0).getActivePower()).append("|");
  581. } else {
  582. content.append(PLACE);
  583. }
  584. }
  585. if (electricField.getSign().equals("FD0006")) {
  586. List<JiaYueWindPowerDqResultCoverFD0006> filterList = jiaYueWindPowerDqResultCoverFD0006List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  587. if (!filterList.isEmpty()) {
  588. content.append(filterList.get(0).getActivePower()).append("|");
  589. } else {
  590. content.append(PLACE);
  591. }
  592. }
  593. if (electricField.getSign().equals("FD0007")) {
  594. List<JiaYueWindPowerDqResultCoverFD0007> filterList = jiaYueWindPowerDqResultCoverFD0007List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  595. if (!filterList.isEmpty()) {
  596. content.append(filterList.get(0).getActivePower()).append("|");
  597. } else {
  598. content.append(PLACE);
  599. }
  600. }
  601. }
  602. List<String> qrCodeContents1 = GzipUtil.pubZipList(content.toString(), packSize);
  603. List<String> result = new ArrayList<>();
  604. String taskNo = getTaskNo(electricField);
  605. for (int i = 0; i < qrCodeContents1.size(); i++) {
  606. JSONObject jsonObject = new JSONObject();
  607. jsonObject.putOnce("taskNo", taskNo);
  608. jsonObject.putOnce("taskType", "stationData-QR");
  609. jsonObject.putOnce("partNo", i + 1);
  610. jsonObject.putOnce("partTotal", qrCodeContents1.size());
  611. jsonObject.putOnce("data", qrCodeContents1.get(i));
  612. result.add(i, jsonObject.toString());
  613. }
  614. return result;
  615. }
  616. /**
  617. * 上报超短期二维码内容生成
  618. *
  619. * @param startTime 开始时间
  620. * @param endTime 结束时间
  621. * @return 二维码生成内容集
  622. * @throws IOException IO异常
  623. * @throws BusinessException 业务异常
  624. */
  625. public List<String> generateUltraShortTermContent(Long startTime, Long endTime, ElectricField electricField) throws IOException, BusinessException {
  626. long timeStep = 900000L;
  627. if (startTime % timeStep != 0) {
  628. startTime = startTime - (startTime % timeStep) + timeStep;
  629. }
  630. StringBuilder content = new StringBuilder();
  631. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  632. content.append(electricField.getStationCode()).append("-").append("ust").append("-").append(1).append("|");
  633. List<Long> lDate = DateMomentUtil.getEveryDay(startTime, endTime);
  634. for (int i = 0; i < lDate.size(); i++) {
  635. content.append(sdf.format(lDate.get(i)));
  636. if (i != lDate.size() - 1) {
  637. content.append(",");
  638. } else {
  639. content.append("|");
  640. }
  641. }
  642. List<JiaYueWindPowerCdqResultCoverFD0001> jiaYueWindPowerCdqResultCoverFD0001List = jiaYueWindPowerCdqResultCoverFD0001Service.findByDataDate(new Date(startTime));
  643. List<JiaYueWindPowerCdqResultCoverFD0002> jiaYueWindPowerCdqResultCoverFD0002List = jiaYueWindPowerCdqResultCoverFD0002Service.findByDataDate(new Date(startTime));
  644. List<JiaYueWindPowerCdqResultCoverFD0003> jiaYueWindPowerCdqResultCoverFD0003List = jiaYueWindPowerCdqResultCoverFD0003Service.findByDataDate(new Date(startTime));
  645. List<JiaYueWindPowerCdqResultCoverFD0004> jiaYueWindPowerCdqResultCoverFD0004List = jiaYueWindPowerCdqResultCoverFD0004Service.findByDataDate(new Date(startTime));
  646. List<JiaYueWindPowerCdqResultCoverFD0005> jiaYueWindPowerCdqResultCoverFD0005List = jiaYueWindPowerCdqResultCoverFD0005Service.findByDataDate(new Date(startTime));
  647. List<JiaYueWindPowerCdqResultCoverFD0006> jiaYueWindPowerCdqResultCoverFD0006List = jiaYueWindPowerCdqResultCoverFD0006Service.findByDataDate(new Date(startTime));
  648. List<JiaYueWindPowerCdqResultCoverFD0007> jiaYueWindPowerCdqResultCoverFD0007List = jiaYueWindPowerCdqResultCoverFD0007Service.findByDataDate(new Date(startTime));
  649. for (long stepTime = startTime; stepTime <= endTime; stepTime = stepTime + timeStep) {
  650. long finalTime = stepTime;
  651. if (electricField.getSign().equals("FD0001")) {
  652. List<JiaYueWindPowerCdqResultCoverFD0001> filterList = jiaYueWindPowerCdqResultCoverFD0001List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  653. if (!filterList.isEmpty()) {
  654. content.append(filterList.get(0).getActivePower()).append("|");
  655. } else {
  656. content.append(PLACE);
  657. }
  658. }
  659. if (electricField.getSign().equals("FD0002")) {
  660. List<JiaYueWindPowerCdqResultCoverFD0002> filterList = jiaYueWindPowerCdqResultCoverFD0002List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  661. if (!filterList.isEmpty()) {
  662. content.append(filterList.get(0).getActivePower()).append("|");
  663. } else {
  664. content.append(PLACE);
  665. }
  666. }
  667. if (electricField.getSign().equals("FD0003")) {
  668. List<JiaYueWindPowerCdqResultCoverFD0003> filterList = jiaYueWindPowerCdqResultCoverFD0003List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() == finalTime).collect(Collectors.toList());
  669. if (!filterList.isEmpty()) {
  670. content.append(filterList.get(0).getActivePower()).append("|");
  671. } else {
  672. content.append(PLACE);
  673. }
  674. }
  675. if (electricField.getSign().equals("FD0004")) {
  676. List<JiaYueWindPowerCdqResultCoverFD0004> filterList = jiaYueWindPowerCdqResultCoverFD0004List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  677. if (!filterList.isEmpty()) {
  678. content.append(filterList.get(0).getActivePower()).append("|");
  679. } else {
  680. content.append(PLACE);
  681. }
  682. }
  683. if (electricField.getSign().equals("FD0005")) {
  684. List<JiaYueWindPowerCdqResultCoverFD0005> filterList = jiaYueWindPowerCdqResultCoverFD0005List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  685. if (!filterList.isEmpty()) {
  686. content.append(filterList.get(0).getActivePower()).append("|");
  687. } else {
  688. content.append(PLACE);
  689. }
  690. }
  691. if (electricField.getSign().equals("FD0006")) {
  692. List<JiaYueWindPowerCdqResultCoverFD0006> filterList = jiaYueWindPowerCdqResultCoverFD0006List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  693. if (!filterList.isEmpty()) {
  694. content.append(filterList.get(0).getActivePower()).append("|");
  695. } else {
  696. content.append(PLACE);
  697. }
  698. }
  699. if (electricField.getSign().equals("FD0007")) {
  700. List<JiaYueWindPowerCdqResultCoverFD0007> filterList = jiaYueWindPowerCdqResultCoverFD0007List.stream().filter(p -> p.getPreDateTime().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L == finalTime).collect(Collectors.toList());
  701. if (!filterList.isEmpty()) {
  702. content.append(filterList.get(0).getActivePower()).append("|");
  703. } else {
  704. content.append(PLACE);
  705. }
  706. }
  707. }
  708. List<String> qrCodeContents1 = GzipUtil.pubZipList(content.toString(), packSize);
  709. List<String> result = new ArrayList<>();
  710. String taskNo = getTaskNo(electricField);
  711. for (int i = 0; i < qrCodeContents1.size(); i++) {
  712. JSONObject jsonObject = new JSONObject();
  713. jsonObject.putOnce("taskNo", taskNo);
  714. jsonObject.putOnce("taskType", "stationData-QR");
  715. jsonObject.putOnce("partNo", i + 1);
  716. jsonObject.putOnce("partTotal", qrCodeContents1.size());
  717. jsonObject.putOnce("data", qrCodeContents1.get(i));
  718. result.add(i, jsonObject.toString());
  719. }
  720. return result;
  721. }
  722. /**
  723. * 获取taskNo编号
  724. *
  725. * @param electricField 场站对象
  726. * @return 编号
  727. */
  728. private String getTaskNo(ElectricField electricField) {
  729. Date date = DateUtil.date();
  730. return electricField.getStationCode() + DateUtil.format(date, "yyMMddHHmmss");
  731. }
  732. /**
  733. * 每天凌晨一点零五分生成回传短期、超短期。实际功率数据
  734. * @return
  735. */
  736. @Scheduled(cron = "0 5 1 * * *")
  737. public Map<String, Object> generateQRCode() {
  738. Map<String, Object> map = new HashMap<>();
  739. try {
  740. // 定时调用
  741. Calendar startyesterday = Calendar.getInstance();
  742. startyesterday.add(Calendar.DAY_OF_MONTH, -1);
  743. startyesterday.set(Calendar.HOUR_OF_DAY, 0);
  744. startyesterday.set(Calendar.MINUTE, 0);
  745. startyesterday.set(Calendar.SECOND, 0);
  746. startyesterday.set(Calendar.MILLISECOND, 0);
  747. Calendar endyesterday = Calendar.getInstance();
  748. endyesterday.add(Calendar.DAY_OF_MONTH, -1);
  749. endyesterday.set(Calendar.HOUR_OF_DAY, 23);
  750. endyesterday.set(Calendar.MINUTE, 59);
  751. endyesterday.set(Calendar.SECOND, 59);
  752. endyesterday.set(Calendar.MILLISECOND, 999);
  753. List<ElectricField> electricFieldList = new ArrayList<>();
  754. ElectricField electricField = new ElectricField();
  755. electricField.setStationCode("J00770");
  756. electricField.setSign("FD0001");
  757. ElectricField electricField2 = new ElectricField();
  758. electricField2.setStationCode("J00941");
  759. electricField2.setSign("FD0002");
  760. ElectricField electricField3 = new ElectricField();
  761. electricField3.setStationCode("J00942");
  762. electricField3.setSign("FD0003");
  763. // 新增宁夏吴忠石窖沟电站
  764. ElectricField electricField4 = new ElectricField();
  765. electricField4.setStationCode("J00988");
  766. electricField4.setSign("FD0004");
  767. ElectricField electricField5 = new ElectricField();
  768. electricField5.setStationCode("J00929");
  769. electricField5.setSign("FD0005");
  770. ElectricField electricField6 = new ElectricField();
  771. electricField6.setStationCode("J00930");
  772. electricField6.setSign("FD0006");
  773. ElectricField electricField7 = new ElectricField();
  774. electricField7.setStationCode("J00931");
  775. electricField7.setSign("FD0007");
  776. electricFieldList.add(electricField);
  777. electricFieldList.add(electricField2);
  778. electricFieldList.add(electricField3);
  779. electricFieldList.add(electricField4);
  780. electricFieldList.add(electricField5);
  781. electricFieldList.add(electricField6);
  782. electricFieldList.add(electricField7);
  783. for (int i = 0; i < electricFieldList.size(); i++) {
  784. map = generateQR(electricFieldList.get(i));
  785. toJson(map);
  786. }
  787. } catch (Exception e) {
  788. e.printStackTrace();
  789. log.error("生成二维码失败");
  790. // 处理生成二维码失败的情况
  791. }
  792. return map;
  793. }
  794. /**
  795. * 生成回传短期、超短期、实际功率json文件
  796. * @param map
  797. */
  798. public void toJson(Map<String, Object> map) {
  799. map.entrySet().stream().forEach(entry -> {
  800. Map<String, Object> value = (Map<String, Object>) entry.getValue();
  801. value.entrySet().stream().forEach(entry1 -> {
  802. ObjectMapper objectMapper = new ObjectMapper();
  803. JSONArray jsonArray = new JSONArray(entry1.getValue().toString());// 将entry1.getValue()转换为JSON数组
  804. JSONObject jsonObject = jsonArray.getJSONObject(0);// 获取数组中的第一个JSONObject对象
  805. String json = null;
  806. String prettyPrintJson = null;
  807. try {
  808. json = objectMapper.writeValueAsString(jsonObject);
  809. Object formattedJson = objectMapper.readValue(json, Object.class);
  810. prettyPrintJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(formattedJson);
  811. } catch (JsonProcessingException e) {
  812. e.printStackTrace();
  813. }
  814. String fileName = null;
  815. // if (entry1.getKey().contains("超短期")) {
  816. // if (entry1.getKey().contains("点数")) {
  817. // fileName = entry.getKey() + "_Point" + entry1.getKey().substring(4, 6) + "_" + System.currentTimeMillis() + ".json";
  818. // } else {
  819. // fileName = entry.getKey() + "_Avg_" + System.currentTimeMillis() + ".json";
  820. // }
  821. // } else if (entry1.getKey().contains("中期")) {
  822. // if (entry1.getKey().contains("平均值")) {
  823. // fileName = entry.getKey() + "_Avg_" + System.currentTimeMillis() + ".json";
  824. // } else {
  825. // fileName = entry.getKey() + "_" + System.currentTimeMillis() + ".json";
  826. // }
  827. // } else {
  828. fileName = entry.getKey() + "_" + System.currentTimeMillis() + ".json";
  829. // }
  830. String filePath = "/home/syjy/huichuan/new/" + fileName;
  831. //写入文件
  832. try (FileWriter fileWriter = new FileWriter(filePath)) {
  833. fileWriter.write(prettyPrintJson);
  834. } catch (IOException e) {
  835. e.printStackTrace();
  836. }
  837. });
  838. });
  839. // }
  840. }
  841. /**
  842. * 这几个表清除所有数据,在进行数据同步(基础信息表)
  843. */
  844. // @Scheduled(cron = "0 30 0 * * ?")
  845. // @Scheduled(cron = "0 48 2 * * ?")
  846. public void synchronizeInfoData() {
  847. log.info("---------------------------开始同步基础信息---------------------------");
  848. // // 数据类型信息表
  849. // List<DataTypeInfo> dataTypeInfoList = dataTypeInfoService.get();
  850. // // 查询本地所有数据
  851. // List<DataTypeInfo> dataTypeInfos = dataTypeInfoService.getAll();
  852. // if (dataTypeInfos != null && dataTypeInfos.size() > 0) {
  853. // // 先删除数据
  854. // dataTypeInfoService.deleteAll();
  855. // }
  856. // // 将远端数据插入到本地
  857. // dataTypeInfoService.put(dataTypeInfoList);
  858. // // 风电场基本信息表(厂商专供)
  859. // List<WindFarmInfoEncryption> windFarmInfoEncryptionList = windFarmInfoEncryptionService.get();
  860. // // 查询本地所有数据
  861. // List<WindFarmInfoEncryption> windFarmInfoEncryptions = windFarmInfoEncryptionService.getAll();
  862. // if (windFarmInfoEncryptions != null && windFarmInfoEncryptions.size() > 0) {
  863. // // 先删除数据
  864. // windFarmInfoEncryptionService.deleteAll();
  865. // }
  866. // windFarmInfoEncryptionService.put(windFarmInfoEncryptionList);
  867. // // 测风塔信息
  868. // List<WindTowerInfo> windTowerInfoList = windTowerInfoService.get();
  869. // // 查询本地所有数据
  870. // List<WindTowerInfo> windTowerInfos = windTowerInfoService.getAll();
  871. // if (windTowerInfos != null && windTowerInfos.size() > 0) {
  872. // // 先删除数据
  873. // windTowerInfoService.deleteAll();
  874. // }
  875. // windTowerInfoService.put(windTowerInfoList);
  876. // // 风电机组基本信息表
  877. // List<WindUnitInfo> windUnitInfoList = windUnitInfoService.get();
  878. // // 查询本地所有数据
  879. // List<WindUnitInfo> windUnitInfos = windUnitInfoService.getAll();
  880. // if (windUnitInfos != null && windUnitInfos.size() > 0) {
  881. // // 先删除数据
  882. // windUnitInfoService.deleteAll();
  883. // }
  884. // windUnitInfoService.put(windUnitInfoList);
  885. // // 风电机组型号基本信息表
  886. // List<WindUnitModelInfo> windUnitModelInfoList = windUnitModelInfoService.get();
  887. // // 查询本地所有数据
  888. // List<WindUnitModelInfo> windUnitModelInfos = windUnitModelInfoService.getAll();
  889. // if (windUnitModelInfos != null && windUnitModelInfos.size() > 0) {
  890. // // 先删除数据
  891. // windUnitModelInfoService.deleteAll();
  892. // }
  893. // windUnitModelInfoService.put(windUnitModelInfoList);
  894. // List<WindUnitModelWsAndPower> windUnitModelWsAndPowerList = windUnitModelWsAndPowerService.get();
  895. // // 查询本地所有数据
  896. // List<WindUnitModelWsAndPower> windUnitModelWsAndPowers = windUnitModelWsAndPowerService.getAll();
  897. // if (windUnitModelWsAndPowers != null && windUnitModelWsAndPowers.size() > 0) {
  898. // // 先删除数据
  899. // windUnitModelWsAndPowerService.deleteAll();
  900. // }
  901. // windUnitModelWsAndPowerService.put(windUnitModelWsAndPowerList);
  902. log.info("---------------------------同步基础信息结束---------------------------");
  903. }
  904. /**
  905. * 这几个表每天同步昨天的数据
  906. */
  907. // @Scheduled(cron = "0 48 2 * * ?")
  908. public void synchronizeRealData() {
  909. log.info("---------------------------开始同步昨日数据---------------------------");
  910. long time = System.currentTimeMillis() - 86400000l;
  911. // 获取startTime和endTime
  912. Date startTime = DateTimeUtil.getDayStartTime(time);
  913. Date endTime = DateTimeUtil.getDayLastTime(time);
  914. // List<WindTowerCdqResultCover> windTowerCdqResultCoverList = windTowerCdqResultCoverService.get(startTime, endTime);
  915. // windTowerCdqResultCoverService.put(windTowerCdqResultCoverList);
  916. //
  917. // List<WindPowerCdqResultCover> windPowerCdqResultCoverList = windPowerCdqResultCoverService.get(startTime, endTime);
  918. // windPowerCdqResultCoverService.put(windPowerCdqResultCoverList);
  919. //
  920. // List<WindPowerDqResultCover> windPowerDqResultCoverList = windPowerDqResultCoverService.get(startTime, endTime);
  921. // windPowerDqResultCoverService.put(windPowerDqResultCoverList);
  922. List<WindPowerReal15MinFD0001> windPowerReal15MinFD0001List = windPowerReal15MinFD0001Service.get(startTime, endTime);
  923. windPowerReal15MinFD0001Service.put(windPowerReal15MinFD0001List);
  924. List<WindPowerReal15MinFD0002> windPowerReal15MinFD0002List = windPowerReal15MinFD0002Service.get(startTime, endTime);
  925. windPowerReal15MinFD0002Service.put(windPowerReal15MinFD0002List);
  926. List<WindPowerReal15MinFD0003> windPowerReal15MinFD0003List = windPowerReal15MinFD0003Service.get(startTime, endTime);
  927. windPowerReal15MinFD0003Service.put(windPowerReal15MinFD0003List);
  928. List<WindPowerReal15MinFD0005> windPowerReal15MinFD0005List = windPowerReal15MinFD0005Service.get(startTime, endTime);
  929. windPowerReal15MinFD0005Service.put(windPowerReal15MinFD0005List);
  930. List<WindPowerReal15MinFD0006> windPowerReal15MinFD0006List = windPowerReal15MinFD0006Service.get(startTime, endTime);
  931. windPowerReal15MinFD0006Service.put(windPowerReal15MinFD0006List);
  932. List<WindPowerReal15MinFD0007> windPowerReal15MinFD0007List = windPowerReal15MinFD0007Service.get(startTime, endTime);
  933. windPowerReal15MinFD0007Service.put(windPowerReal15MinFD0007List);
  934. // List<WindTower15Min> windTower15MinList = windTower15MinService.get(startTime, endTime);
  935. // windTower15MinService.put(windTower15MinList);
  936. //
  937. //
  938. // List<WindTowerDqResultCover> windTowerDqResultCoverList = windTowerDqResultCoverService.get(startTime, endTime);
  939. // windTowerDqResultCoverService.put(windTowerDqResultCoverList);
  940. log.info("---------------------------同步昨日数据结束---------------------------");
  941. }
  942. }