WindTowerDataParentTableServiceImpl.java 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134
  1. package com.jiayue.biz.service.impl;
  2. import cn.hutool.core.date.DateTime;
  3. import cn.hutool.core.lang.TypeReference;
  4. import cn.hutool.db.Entity;
  5. import cn.hutool.json.JSONArray;
  6. import cn.hutool.json.JSONUtil;
  7. import com.alibaba.fastjson.JSON;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  10. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  11. import com.jiayue.biz.conf.RequestDataHelper;
  12. import com.jiayue.biz.domain.*;
  13. import com.jiayue.biz.mapper.ProphaseAnemometryDataMapper;
  14. import com.jiayue.biz.mapper.ProphaseWeatherDataMapper;
  15. import com.jiayue.biz.mapper.WindTowerDataParentTableMapper;
  16. import com.jiayue.biz.service.*;
  17. import com.jiayue.biz.util.CalculationUtil;
  18. import com.jiayue.biz.util.CommonUtil;
  19. import com.jiayue.biz.util.DateTimeUtil;
  20. import com.jiayue.biz.util.FileUtil;
  21. import com.jiayue.common.utils.DateUtil;
  22. import lombok.extern.slf4j.Slf4j;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import java.io.*;
  28. import java.math.BigDecimal;
  29. import java.math.RoundingMode;
  30. import java.net.URLEncoder;
  31. import java.nio.charset.StandardCharsets;
  32. import java.sql.Timestamp;
  33. import java.text.ParseException;
  34. import java.text.SimpleDateFormat;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. /**
  38. * 测风塔父表数据Service业务层处理
  39. *
  40. * @author whc
  41. * @date 2022-08-04
  42. */
  43. @Slf4j
  44. @Service
  45. public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDataParentTableMapper, WindTowerDataParentTable> implements WindTowerDataParentTableService {
  46. @Autowired
  47. WindTowerDataChildTableService windTowerDataChildTableService;
  48. @Autowired
  49. EquipmentAttributeServiceImpl equipmentAttributeService;
  50. @Autowired
  51. WindTowerInfoServiceImpl windTowerInfoService;
  52. @Autowired
  53. AnalysisLogServiceImpl analysisLogService;
  54. @Autowired
  55. DisplayConfigServiceImpl displayConfigService;
  56. @Autowired
  57. ProphaseAnemometryDataOrgService prophaseAnemometryDataOrgService;
  58. @Autowired
  59. ProphaseWeatherDataOrgService prophaseWeatherDataOrgService;
  60. @Autowired
  61. ProphaseAnemometryDataService prophaseAnemometryDataService;
  62. @Autowired
  63. ProphaseWeatherDataService prophaseWeatherDataService;
  64. /**
  65. * 组装数据
  66. *
  67. * @param allData 数据
  68. * @param equipmentId 设备编号
  69. * @param type 文件类型
  70. * @param operation 操作类型(DataRecalculation数据重算)
  71. */
  72. public void packageData(List<Map<String, Object>> allData, String equipmentId, String type, String operation) {
  73. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  74. if (type.equals("rld") || type.equals("dat")) {
  75. simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  76. }
  77. if (type.equals("sld")) {
  78. simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
  79. }
  80. if (type.equals("eol")) {
  81. simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
  82. }
  83. String eqNo = equipmentId;
  84. List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
  85. List<WindTowerInfo> windTowerInfo = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(eqNo)).collect(Collectors.toList());
  86. String windTowerInfoHeights = windTowerInfo.get(0).getHeights();
  87. String windTowerInfoWdHeights = windTowerInfo.get(0).getWdHeights();
  88. String[] wdHeight = windTowerInfoWdHeights.split(",");
  89. String[] heights = windTowerInfoHeights.split(",");
  90. HashSet<String> heightAll = new HashSet<>();
  91. heightAll.addAll(Arrays.asList(wdHeight));
  92. heightAll.addAll(Arrays.asList(heights));
  93. //层高
  94. // ArrayList<ProphaseAnemometryData> prophaseAnemometryDataArrayList = new ArrayList<>();
  95. // ArrayList<ProphaseWeatherData> prophaseAnemometryPublicDataArrayList = new ArrayList<>();
  96. try {
  97. //所有数据
  98. for (Map<String, Object> m : allData) {
  99. if (!operation.equals("DataRecalculation")) {
  100. this.packageOrgData(m, heightAll, simpleDateFormat, eqNo, "org");
  101. }
  102. //异常数据赋值为-99
  103. if (m.get("abnormalType") != null) {
  104. if (m.get("abnormalType").toString().contains(",")) {
  105. String[] abnormalTypes = m.get("abnormalType").toString().split(",");
  106. for (String abnormalType : abnormalTypes) {
  107. m.put(abnormalType, -99f);
  108. }
  109. } else {
  110. m.put(m.get("abnormalType").toString(), -99f);
  111. }
  112. }
  113. this.packageOrgData(m, heightAll, simpleDateFormat, eqNo, "noOrg");
  114. }
  115. } catch (Exception e) {
  116. e.printStackTrace();
  117. }
  118. }
  119. public void packageOrgData(Map<String, Object> m, HashSet<String> heightAll, SimpleDateFormat simpleDateFormat, String equipmentId, String org) {
  120. for (String height : heightAll) {
  121. ProphaseAnemometryData one = new ProphaseAnemometryData();
  122. //组装子表数据
  123. one.setWsAve(m.get("wsAve_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wsAve_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  124. one.setWsMin(m.get("wsMin_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wsMin_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  125. one.setWsMax(m.get("wsMax_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wsMax_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  126. one.setWsSta(m.get("wsSta_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wsSta_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  127. one.setWsInst(m.get("wsInst_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wsInst_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  128. one.setWdAve(m.get("wdAve_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wdAve_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  129. one.setWdMax(m.get("wdMax_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wdMax_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  130. one.setWdMin(m.get("wdMin_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wdMin_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  131. one.setWdSta(m.get("wdSta_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wdSta_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  132. one.setWdInst(m.get("wdInst_" + height) == null ? null : CalculationUtil.getBigDecimal(m.get("wdInst_" + height)).setScale(2, RoundingMode.HALF_UP).floatValue());
  133. one.setLayerHeight(height);
  134. one.setEquipmentId(equipmentId);
  135. if (m.get("time") != null) {
  136. try {
  137. try {
  138. one.setTs(new Timestamp(simpleDateFormat.parse(m.get("time").toString()).getTime()));
  139. } catch (ParseException e) {
  140. one.setTs(new Timestamp(new Date(Long.parseLong(m.get("time").toString())).getTime()));
  141. }
  142. } catch (Exception e) {
  143. log.error("时间转换异常:" + e);
  144. }
  145. }
  146. if (org.equals("org")) {
  147. prophaseAnemometryDataOrgService.insertOneWithNew(one);
  148. } else {
  149. prophaseAnemometryDataService.insertOneWithNew(one);
  150. }
  151. }
  152. ProphaseWeatherData prophaseAnemometryPublicData = new ProphaseWeatherData();
  153. prophaseAnemometryPublicData.setEquipmentId(equipmentId);
  154. if (m.get("paMax") != null)
  155. //kpa转hpa
  156. if (BigDecimal.valueOf(Double.parseDouble(m.get("paMax").toString())).compareTo(new BigDecimal(200)) < 0)
  157. prophaseAnemometryPublicData.setPaMax(CalculationUtil.getBigDecimal(m.get("paMax").toString()).multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP).floatValue());
  158. else
  159. prophaseAnemometryPublicData.setPaMax(CalculationUtil.getBigDecimal(m.get("paMax").toString()).floatValue());
  160. if (m.get("paMin") != null)
  161. //kpa转hpa
  162. if (BigDecimal.valueOf(Double.parseDouble(m.get("paMin").toString())).compareTo(new BigDecimal(200)) < 0)
  163. prophaseAnemometryPublicData.setPaMin(CalculationUtil.getBigDecimal(m.get("paMin").toString()).multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP).floatValue());
  164. else
  165. prophaseAnemometryPublicData.setPaMin(CalculationUtil.getBigDecimal(m.get("paMin").toString()).floatValue());
  166. if (m.get("paAve") != null)
  167. //kpa转hpa
  168. if (BigDecimal.valueOf(Double.parseDouble(m.get("paAve").toString())).compareTo(new BigDecimal(200)) < 0)
  169. prophaseAnemometryPublicData.setPaAve(CalculationUtil.getBigDecimal(m.get("paAve").toString()).multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP).floatValue());
  170. else
  171. prophaseAnemometryPublicData.setPaAve(CalculationUtil.getBigDecimal(m.get("paAve").toString()).floatValue());
  172. prophaseAnemometryPublicData.setPaSta(m.get("paSta") == null ? null : CalculationUtil.getBigDecimal(m.get("paSta")).setScale(2, RoundingMode.HALF_UP).floatValue());
  173. prophaseAnemometryPublicData.setTMax(m.get("tMax") == null ? null : CalculationUtil.getBigDecimal(m.get("tMax")).setScale(2, RoundingMode.HALF_UP).floatValue());
  174. prophaseAnemometryPublicData.setTMin(m.get("tMin") == null ? null : CalculationUtil.getBigDecimal(m.get("tMin")).setScale(2, RoundingMode.HALF_UP).floatValue());
  175. prophaseAnemometryPublicData.setTAve(m.get("tAve") == null ? null : CalculationUtil.getBigDecimal(m.get("tAve")).setScale(2, RoundingMode.HALF_UP).floatValue());
  176. prophaseAnemometryPublicData.setTSta(m.get("tSta") == null ? null : CalculationUtil.getBigDecimal(m.get("tSta")).setScale(2, RoundingMode.HALF_UP).floatValue());
  177. prophaseAnemometryPublicData.setRhMax(m.get("rhMax") == null ? null : CalculationUtil.getBigDecimal(m.get("rhMax")).setScale(2, RoundingMode.HALF_UP).floatValue());
  178. prophaseAnemometryPublicData.setRhMin(m.get("rhMin") == null ? null : CalculationUtil.getBigDecimal(m.get("rhMin")).setScale(2, RoundingMode.HALF_UP).floatValue());
  179. prophaseAnemometryPublicData.setRhAve(m.get("rhAve") == null ? null : CalculationUtil.getBigDecimal(m.get("rhAve")).setScale(2, RoundingMode.HALF_UP).floatValue());
  180. prophaseAnemometryPublicData.setRhSta(m.get("rhSta") == null ? null : CalculationUtil.getBigDecimal(m.get("rhSta")).setScale(2, RoundingMode.HALF_UP).floatValue());
  181. //计算空气密度 1.293*(273/(273+温度摄氏度))*气压百帕/1013
  182. if (prophaseAnemometryPublicData.getTAve() != null && prophaseAnemometryPublicData.getPaAve() != null &&
  183. prophaseAnemometryPublicData.getTAve() != -99 && prophaseAnemometryPublicData.getPaAve() > 0) {
  184. BigDecimal airDensity = BigDecimal.valueOf(1.293).multiply(new BigDecimal(273).divide(new BigDecimal(273).add(BigDecimal.valueOf(prophaseAnemometryPublicData.getTAve())), 2, RoundingMode.HALF_UP)).multiply(BigDecimal.valueOf(prophaseAnemometryPublicData.getPaAve())).divide(new BigDecimal(1013), 2, RoundingMode.HALF_UP);
  185. prophaseAnemometryPublicData.setAirDensity(airDensity.floatValue());
  186. } else {
  187. //随机数 上限1.28 下限1.15
  188. Random random = new Random();
  189. int randNumber = random.nextInt(128 - 115 + 1) + 115;
  190. BigDecimal air = BigDecimal.valueOf(randNumber).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
  191. prophaseAnemometryPublicData.setAirDensity(air.floatValue());
  192. }
  193. if (m.get("time") != null) {
  194. try {
  195. try {
  196. prophaseAnemometryPublicData.setTs(new Timestamp(simpleDateFormat.parse(m.get("time").toString()).getTime()));
  197. } catch (ParseException e) {
  198. prophaseAnemometryPublicData.setTs(new Timestamp(new Date(Long.parseLong(m.get("time").toString())).getTime()));
  199. }
  200. } catch (Exception e) {
  201. log.error("时间转换异常:" + e);
  202. }
  203. }
  204. if (org.equals("org")) {
  205. prophaseWeatherDataOrgService.insertOne(prophaseAnemometryPublicData);
  206. } else {
  207. prophaseWeatherDataService.insertOne(prophaseAnemometryPublicData);
  208. }
  209. }
  210. /**
  211. * 组装数据
  212. *
  213. * @param allData 数据
  214. * @param equipmentId 设备编号
  215. * @param eTime 时间
  216. * @param type 文件类型
  217. * @param operation 操作类型(DataRecalculation数据重算)
  218. */
  219. public void packageData1(List<Map<String, Object>> allData, String equipmentId, String eTime, String type, String operation) {
  220. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  221. if (type.equals("rld")) {
  222. simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  223. }
  224. if (type.equals("sld")) {
  225. simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
  226. }
  227. String eqNo = equipmentId;
  228. List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
  229. List<EquipmentAttribute> heightList = equipmentAttributeList.stream().filter(e -> "height".equals(e.getAttributeFunction())).collect(Collectors.toList());
  230. List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
  231. List<WindTowerInfo> windTowerInfo = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(eqNo)).collect(Collectors.toList());
  232. String windTowerInfoHeights = windTowerInfo.get(0).getHeights();
  233. String windTowerInfoWdHeights = windTowerInfo.get(0).getWdHeights();
  234. String[] wdHeight = windTowerInfoWdHeights.split(",");
  235. String[] heights = windTowerInfoHeights.split(",");
  236. HashSet<String> heightAll = new HashSet<>();
  237. heightAll.addAll(Arrays.asList(wdHeight));
  238. heightAll.addAll(Arrays.asList(heights));
  239. //层高
  240. List<WindTowerDataParentTable> windTowerDataParentTableList = new ArrayList<>();
  241. List<WindTowerDataChildTable> windTowerDataChildTableList = new ArrayList<>();
  242. try {
  243. //所有数据
  244. if (operation.equals("DataRecalculation")) {
  245. for (Map<String, Object> m : allData) {
  246. WindTowerDataParentTable windTowerDataParentTable = new WindTowerDataParentTable();
  247. UUID uuid = UUID.randomUUID();
  248. for (String height : heightAll) {
  249. //层高对应的属性
  250. List<EquipmentAttribute> eqHeight = heightList.stream().filter(h -> height.equals(h.getFieldName())).collect(Collectors.toList());
  251. //组装子表数据
  252. WindTowerDataChildTable windTowerDataChildTable = new WindTowerDataChildTable();
  253. windTowerDataChildTable.setParentId(uuid.toString());
  254. windTowerDataChildTable.setLayerHeight(eqHeight.get(0).getId());
  255. windTowerDataChildTable.setWsAve(CalculationUtil.getBigDecimal(m.get("ws_ave" + height) == null ? null : m.get("ws_ave" + height).toString()));
  256. windTowerDataChildTable.setWsMin(CalculationUtil.getBigDecimal(m.get("ws_min" + height) == null ? null : m.get("ws_min" + height).toString()));
  257. windTowerDataChildTable.setWsMax(CalculationUtil.getBigDecimal(m.get("ws_max" + height) == null ? null : m.get("ws_max" + height).toString()));
  258. windTowerDataChildTable.setWsSta(CalculationUtil.getBigDecimal(m.get("ws_sta" + height) == null ? null : m.get("ws_sta" + height).toString()));
  259. windTowerDataChildTable.setWdAve(CalculationUtil.getBigDecimal(m.get("wd_ave" + height) == null ? null : m.get("wd_ave" + height).toString()));
  260. windTowerDataChildTable.setWdMax(CalculationUtil.getBigDecimal(m.get("wd_max" + height) == null ? null : m.get("wd_max" + height).toString()));
  261. windTowerDataChildTable.setWdMin(CalculationUtil.getBigDecimal(m.get("wd_min" + height) == null ? null : m.get("wd_min" + height).toString()));
  262. windTowerDataChildTable.setWdSta(CalculationUtil.getBigDecimal(m.get("wd_sta" + height) == null ? null : m.get("wd_sta" + height).toString()));
  263. windTowerDataChildTableList.add(windTowerDataChildTable);
  264. }
  265. //组装父表数据
  266. windTowerDataParentTable.setEquipmentId(equipmentId);
  267. windTowerDataParentTable.setId(uuid.toString());
  268. if (m.get("time") != null)
  269. try {
  270. try {
  271. windTowerDataParentTable.setTime(simpleDateFormat.parse(m.get("time").toString()));
  272. } catch (ParseException e) {
  273. windTowerDataParentTable.setTime(new Date(Long.parseLong(m.get("time").toString())));
  274. }
  275. } catch (Exception e) {
  276. log.error("时间转换异常:" + e);
  277. }
  278. if (m.get("paMax") != null)
  279. //kpa转hpa
  280. if (BigDecimal.valueOf(Double.parseDouble(m.get("pa_max").toString())).compareTo(new BigDecimal(200)) < 0)
  281. windTowerDataParentTable.setPaMax(CalculationUtil.getBigDecimal(m.get("pa_max").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  282. else
  283. windTowerDataParentTable.setPaMax(CalculationUtil.getBigDecimal(m.get("pa_max").toString()));
  284. if (m.get("pa_min") != null)
  285. //kpa转hpa
  286. if (BigDecimal.valueOf(Double.parseDouble(m.get("pa_min").toString())).compareTo(new BigDecimal(200)) < 0)
  287. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(m.get("pa_min").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  288. else
  289. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(m.get("pa_min").toString()));
  290. if (m.get("pa_ave") != null)
  291. //kpa转hpa
  292. if (BigDecimal.valueOf(Double.parseDouble(m.get("pa_ave").toString())).compareTo(new BigDecimal(200)) < 0)
  293. windTowerDataParentTable.setPaAve(CalculationUtil.getBigDecimal(m.get("pa_ave").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  294. else
  295. windTowerDataParentTable.setPaAve(CalculationUtil.getBigDecimal(m.get("pa_ave").toString()));
  296. windTowerDataParentTable.setPaSta(CalculationUtil.getBigDecimal(m.get("pa_sta") == null ? null : m.get("pa_sta").toString()));
  297. windTowerDataParentTable.setTMax(CalculationUtil.getBigDecimal(m.get("t_max") == null ? null : m.get("t_max").toString()));
  298. windTowerDataParentTable.setTMin(CalculationUtil.getBigDecimal(m.get("t_min") == null ? null : m.get("t_min").toString()));
  299. windTowerDataParentTable.setTAve(CalculationUtil.getBigDecimal(m.get("t_ave") == null ? null : m.get("t_ave").toString()));
  300. windTowerDataParentTable.setTSta(CalculationUtil.getBigDecimal(m.get("t_sta") == null ? null : m.get("t_sta").toString()));
  301. windTowerDataParentTable.setRhMax(CalculationUtil.getBigDecimal(m.get("rh_max") == null ? null : m.get("rh_max").toString()));
  302. windTowerDataParentTable.setRhMin(CalculationUtil.getBigDecimal(m.get("rh_min") == null ? null : m.get("rh_min").toString()));
  303. windTowerDataParentTable.setRhAve(CalculationUtil.getBigDecimal(m.get("rh_ave") == null ? null : m.get("rh_ave").toString()));
  304. windTowerDataParentTable.setRhSta(CalculationUtil.getBigDecimal(m.get("rh_sta") == null ? null : m.get("rh_sta").toString()));
  305. windTowerDataParentTable.setAbnormalData(m.get("abnormalData") == null ? null : m.get("abnormalData").toString());
  306. windTowerDataParentTable.setAbnormalType(m.get("abnormalType") == null ? null : m.get("abnormalType").toString());
  307. windTowerDataParentTableList.add(windTowerDataParentTable);
  308. }
  309. } else {
  310. for (Map<String, Object> m : allData) {
  311. WindTowerDataParentTable windTowerDataParentTable = new WindTowerDataParentTable();
  312. UUID uuid = UUID.randomUUID();
  313. for (String height : heightAll) {
  314. //层高对应的属性
  315. List<EquipmentAttribute> eqHeight = heightList.stream().filter(h -> height.equals(h.getFieldName())).collect(Collectors.toList());
  316. //组装子表数据
  317. WindTowerDataChildTable windTowerDataChildTable = new WindTowerDataChildTable();
  318. windTowerDataChildTable.setParentId(uuid.toString());
  319. windTowerDataChildTable.setLayerHeight(eqHeight.get(0).getId());
  320. windTowerDataChildTable.setWsAve(CalculationUtil.getBigDecimal(m.get("wsAve_" + height) == null ? null : m.get("wsAve_" + height).toString()));
  321. windTowerDataChildTable.setWsMin(CalculationUtil.getBigDecimal(m.get("wsMin_" + height) == null ? null : m.get("wsMin_" + height).toString()));
  322. windTowerDataChildTable.setWsMax(CalculationUtil.getBigDecimal(m.get("wsMax_" + height) == null ? null : m.get("wsMax_" + height).toString()));
  323. windTowerDataChildTable.setWsSta(CalculationUtil.getBigDecimal(m.get("wsSta_" + height) == null ? null : m.get("wsSta_" + height).toString()));
  324. windTowerDataChildTable.setWdAve(CalculationUtil.getBigDecimal(m.get("wdAve_" + height) == null ? null : m.get("wdAve_" + height).toString()));
  325. windTowerDataChildTable.setWdMax(CalculationUtil.getBigDecimal(m.get("wdMax_" + height) == null ? null : m.get("wdMax_" + height).toString()));
  326. windTowerDataChildTable.setWdMin(CalculationUtil.getBigDecimal(m.get("wdMin_" + height) == null ? null : m.get("wdMin_" + height).toString()));
  327. windTowerDataChildTable.setWdSta(CalculationUtil.getBigDecimal(m.get("wdSta_" + height) == null ? null : m.get("wdSta_" + height).toString()));
  328. windTowerDataChildTableList.add(windTowerDataChildTable);
  329. }
  330. //组装父表数据
  331. windTowerDataParentTable.setEquipmentId(equipmentId);
  332. windTowerDataParentTable.setId(uuid.toString());
  333. if (m.get("time") != null)
  334. try {
  335. try {
  336. windTowerDataParentTable.setTime(simpleDateFormat.parse(m.get("time").toString()));
  337. } catch (ParseException e) {
  338. windTowerDataParentTable.setTime(new Date(Long.parseLong(m.get("time").toString())));
  339. }
  340. } catch (Exception e) {
  341. log.error("时间转换异常:" + e);
  342. }
  343. if (m.get("paMax") != null)
  344. //kpa转hpa
  345. if (BigDecimal.valueOf(Double.parseDouble(m.get("paMax").toString())).compareTo(new BigDecimal(200)) < 0)
  346. windTowerDataParentTable.setPaMax(CalculationUtil.getBigDecimal(m.get("paMax").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  347. else
  348. windTowerDataParentTable.setPaMax(CalculationUtil.getBigDecimal(m.get("paMax").toString()));
  349. if (m.get("paMin") != null)
  350. //kpa转hpa
  351. if (BigDecimal.valueOf(Double.parseDouble(m.get("paMin").toString())).compareTo(new BigDecimal(200)) < 0)
  352. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(m.get("paMin").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  353. else
  354. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(m.get("paMin").toString()));
  355. if (m.get("paAve") != null)
  356. //kpa转hpa
  357. if (BigDecimal.valueOf(Double.parseDouble(m.get("paAve").toString())).compareTo(new BigDecimal(200)) < 0)
  358. windTowerDataParentTable.setPaAve(CalculationUtil.getBigDecimal(m.get("paAve").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  359. else
  360. windTowerDataParentTable.setPaAve(CalculationUtil.getBigDecimal(m.get("paAve").toString()));
  361. windTowerDataParentTable.setPaSta(CalculationUtil.getBigDecimal(m.get("paSta") == null ? null : m.get("paSta").toString()));
  362. windTowerDataParentTable.setTMax(CalculationUtil.getBigDecimal(m.get("tMax") == null ? null : m.get("tMax").toString()));
  363. windTowerDataParentTable.setTMin(CalculationUtil.getBigDecimal(m.get("tMin") == null ? null : m.get("tMin").toString()));
  364. windTowerDataParentTable.setTAve(CalculationUtil.getBigDecimal(m.get("tAve") == null ? null : m.get("tAve").toString()));
  365. windTowerDataParentTable.setTSta(CalculationUtil.getBigDecimal(m.get("tSta") == null ? null : m.get("tSta").toString()));
  366. windTowerDataParentTable.setRhMax(CalculationUtil.getBigDecimal(m.get("rhMax") == null ? null : m.get("rhMax").toString()));
  367. windTowerDataParentTable.setRhMin(CalculationUtil.getBigDecimal(m.get("rhMin") == null ? null : m.get("rhMin").toString()));
  368. windTowerDataParentTable.setRhAve(CalculationUtil.getBigDecimal(m.get("rhAve") == null ? null : m.get("rhAve").toString()));
  369. windTowerDataParentTable.setRhSta(CalculationUtil.getBigDecimal(m.get("rhSta") == null ? null : m.get("rhSta").toString()));
  370. windTowerDataParentTable.setAbnormalData(m.get("abnormalData") == null ? null : m.get("abnormalData").toString());
  371. windTowerDataParentTable.setAbnormalType(m.get("abnormalType") == null ? null : m.get("abnormalType").toString());
  372. windTowerDataParentTableList.add(windTowerDataParentTable);
  373. }
  374. }
  375. } catch (Exception e) {
  376. log.error("组装数据异常");
  377. }
  378. this.dataSave(windTowerDataParentTableList, windTowerDataChildTableList, equipmentId, eTime, type);
  379. }
  380. /**
  381. * 数据计算入库
  382. *
  383. * @param windTowerDataParentTableList 父表数据
  384. * @param windTowerDataChildTableList 子表数据
  385. * @param
  386. */
  387. private void dataSave(List<WindTowerDataParentTable> windTowerDataParentTableList, List<WindTowerDataChildTable> windTowerDataChildTableList, String equipmentId, String eTime, String type) {
  388. //获取设备编号 006177_2022-03-28_00.00_000060.rld 006177为设备编号
  389. //应该是文件的时间而不是系统时间
  390. Date date = new Date();
  391. if (type.equals("rld")) {
  392. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  393. try {
  394. date = simpleDateFormat.parse(eTime);
  395. } catch (ParseException e) {
  396. log.error("RLD转换文件名日期异常");
  397. }
  398. } else if (type.equals("sld")) {
  399. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
  400. try {
  401. date = sdf.parse(eTime);
  402. } catch (ParseException e) {
  403. log.error("RWD转换文件名异常");
  404. }
  405. } else {
  406. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  407. try {
  408. date = sdf.parse(eTime);
  409. } catch (ParseException e) {
  410. log.error("声雷达日期转换异常常");
  411. }
  412. }
  413. try {
  414. List<WindTowerDataParentTable> parentTableList = new ArrayList<>();
  415. List<WindTowerDataParentTable> parentTableCollect = windTowerDataParentTableList.stream().sorted(Comparator.comparing(WindTowerDataParentTable::getTime)).collect(Collectors.toList());
  416. List<Map<String, Object>> windTowerDataParentTables = selectDataByBetweenTimeAndEquipmetId(parentTableCollect.get(0).getTime(), parentTableCollect.get(parentTableCollect.size() - 1).getTime(), equipmentId);
  417. List<String> parentIdList = new ArrayList<>();
  418. if (!windTowerDataParentTables.isEmpty()) {
  419. for (Map<String, Object> map : windTowerDataParentTables) {
  420. if (!map.get("id").toString().isEmpty()) {
  421. parentIdList.add(map.get("id").toString());
  422. }
  423. }
  424. windTowerDataChildTableService.deleteBetweenTimeAndEquipmentIdAndChild(parentIdList, equipmentId);
  425. deleteBetweenTimeAndEquipmentIdAndParent(DateTimeUtil.getDayStartTime(date.getTime()), DateTimeUtil.getDayLastTime(date.getTime()), equipmentId);
  426. }
  427. for (WindTowerDataParentTable w : parentTableCollect) {
  428. //计算空气密度 1.293*(273/(273+温度摄氏度))*气压百帕/1013
  429. if (w.getTAve() != null && w.getPaAve() != null) {
  430. BigDecimal airDensity = BigDecimal.valueOf(1.293).multiply(new BigDecimal(273).divide(new BigDecimal(273).add(w.getTAve()), 2, RoundingMode.HALF_UP)).multiply(w.getPaAve()).divide(new BigDecimal(1013), 2, RoundingMode.HALF_UP);
  431. w.setAirDensity(airDensity);
  432. }
  433. w.setEquipmentId(equipmentId);
  434. parentTableList.add(w);
  435. }
  436. saveBatchByEquipmentId(parentTableList, windTowerDataChildTableList, equipmentId);
  437. AnalysisLog analysisLog = new AnalysisLog();
  438. analysisLog.setStatus("1");
  439. analysisLog.setTime(date);
  440. analysisLog.setEquipmentId(equipmentId);
  441. analysisLogService.save(analysisLog);
  442. } catch (Exception e) {
  443. log.error("数据入库失败" + e);
  444. AnalysisLog analysisLog = new AnalysisLog();
  445. analysisLog.setStatus("2");
  446. analysisLog.setTime(date);
  447. analysisLog.setEquipmentId(equipmentId);
  448. analysisLogService.save(analysisLog);
  449. }
  450. }
  451. /**
  452. * 存多条数据
  453. *
  454. * @param windTowerDataParentTableList
  455. * @param windTowerDataChildTableList
  456. * @param equipmentId
  457. */
  458. public void saveBatchById(List<WindTowerDataParentTable> windTowerDataParentTableList, List<WindTowerDataChildTable> windTowerDataChildTableList, String equipmentId) {
  459. Map<String, Object> map = new HashMap<>();
  460. map.put("equipment_id", equipmentId);
  461. RequestDataHelper.setRequestData(map);
  462. windTowerDataChildTableService.saveBatchByEquipmentId(windTowerDataChildTableList, equipmentId);
  463. this.saveBatch(windTowerDataParentTableList);
  464. }
  465. //通道数据保存
  466. public void saveDataForTunnel(HashMap<String, BigDecimal> dataMap, HashSet<Integer> heightSet, String equipmentNo, String time) {
  467. WindTowerDataParentTable windTowerDataParentTable = new WindTowerDataParentTable();
  468. List<WindTowerInfo> windTowerInfos = windTowerInfoService.getByEquipmentNo(equipmentNo).stream().filter(w -> w.getType().equals("2")).collect(Collectors.toList());
  469. String id = String.valueOf(UUID.randomUUID());
  470. List<EquipmentAttribute> equipmentAttributes = equipmentAttributeService.lambdaQuery().eq(EquipmentAttribute::getAttributeFunction, "height").list();
  471. List<WindTowerDataChildTable> windTowerDataChildTableList = new ArrayList<>();
  472. for (Integer height : heightSet) {
  473. List<EquipmentAttribute> eqHeight = equipmentAttributes.stream().filter(e -> e.getFieldName().equals(height.toString())).collect(Collectors.toList());
  474. WindTowerDataChildTable windTowerDataChildTable = new WindTowerDataChildTable();
  475. windTowerDataChildTable.setParentId(id);
  476. windTowerDataChildTable.setLayerHeight(eqHeight.get(0).getId());
  477. windTowerDataChildTable.setWsAve(CalculationUtil.getBigDecimal(dataMap.get("wsAve" + height) == null ? null : dataMap.get("wsAve" + height).toString()));
  478. windTowerDataChildTable.setWsMin(CalculationUtil.getBigDecimal(dataMap.get("wsMin" + height) == null ? null : dataMap.get("wsMin" + height).toString()));
  479. windTowerDataChildTable.setWsMax(CalculationUtil.getBigDecimal(dataMap.get("wsMax" + height) == null ? null : dataMap.get("wsMax" + height).toString()));
  480. windTowerDataChildTable.setWsSta(CalculationUtil.getBigDecimal(dataMap.get("wsSta" + height) == null ? null : dataMap.get("wsSta" + height).toString()));
  481. windTowerDataChildTable.setWsInst(CalculationUtil.getBigDecimal(dataMap.get("wsInst" + height) == null ? null : dataMap.get("wsInst" + height).toString()));
  482. windTowerDataChildTable.setWsGust(CalculationUtil.getBigDecimal(dataMap.get("wsGust" + height) == null ? null : dataMap.get("wsGust" + height).toString()));
  483. windTowerDataChildTable.setWsGreat(CalculationUtil.getBigDecimal(dataMap.get("wsGreat" + height) == null ? null : dataMap.get("wsGreat" + height).toString()));
  484. windTowerDataChildTable.setWdAve(CalculationUtil.getBigDecimal(dataMap.get("wdAve" + height) == null ? null : dataMap.get("wdAve" + height).toString()));
  485. windTowerDataChildTable.setWdMax(CalculationUtil.getBigDecimal(dataMap.get("wdMax" + height) == null ? null : dataMap.get("wdMax" + height).toString()));
  486. windTowerDataChildTable.setWdMin(CalculationUtil.getBigDecimal(dataMap.get("wdMin" + height) == null ? null : dataMap.get("wdMin" + height).toString()));
  487. windTowerDataChildTable.setWdSta(CalculationUtil.getBigDecimal(dataMap.get("wdSta" + height) == null ? null : dataMap.get("wdSta" + height).toString()));
  488. windTowerDataChildTable.setWdInst(CalculationUtil.getBigDecimal(dataMap.get("wdInst" + height) == null ? null : dataMap.get("wdInst" + height).toString()));
  489. windTowerDataChildTable.setWdOnWs(CalculationUtil.getBigDecimal(dataMap.get("wdOnWs" + height) == null ? null : dataMap.get("wdOnWs" + height).toString()));
  490. windTowerDataChildTable.setWdNow(CalculationUtil.getBigDecimal(dataMap.get("wdNow" + height) == null ? null : dataMap.get("wdNow" + height).toString()));
  491. windTowerDataChildTableList.add(windTowerDataChildTable);
  492. }
  493. windTowerDataParentTable.setEquipmentId(windTowerInfos.get(0).getEquipmentNo());
  494. windTowerDataParentTable.setId(id);
  495. //设置时间
  496. windTowerDataParentTable.setTime(DateUtil.parseDate(time));
  497. if (dataMap.get("paMax") != null)
  498. //kpa转hpa
  499. if (BigDecimal.valueOf(Double.parseDouble(dataMap.get("paMax").toString())).compareTo(new BigDecimal(200)) < 0)
  500. windTowerDataParentTable.setPaMax(CalculationUtil.getBigDecimal(dataMap.get("paMax").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  501. else
  502. windTowerDataParentTable.setPaMax(CalculationUtil.getBigDecimal(dataMap.get("paMax").toString()));
  503. if (dataMap.get("paMin") != null)
  504. //kpa转hpa
  505. if (BigDecimal.valueOf(Double.parseDouble(dataMap.get("paMin").toString())).compareTo(new BigDecimal(200)) < 0)
  506. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(dataMap.get("paMin").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  507. else
  508. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(dataMap.get("paMin").toString()));
  509. if (dataMap.get("paInst") != null)
  510. //kpa转hpa
  511. if (BigDecimal.valueOf(Double.parseDouble(dataMap.get("paInst").toString())).compareTo(new BigDecimal(200)) < 0)
  512. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(dataMap.get("paInst").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  513. else
  514. windTowerDataParentTable.setPaMin(CalculationUtil.getBigDecimal(dataMap.get("paInst").toString()));
  515. if (dataMap.get("paAve") != null)
  516. //kpa转hpa
  517. if (BigDecimal.valueOf(Double.parseDouble(dataMap.get("paAve").toString())).compareTo(new BigDecimal(200)) < 0)
  518. windTowerDataParentTable.setPaAve(CalculationUtil.getBigDecimal(dataMap.get("paAve").toString()).multiply(new BigDecimal(10)).setScale(4, RoundingMode.HALF_UP));
  519. else
  520. windTowerDataParentTable.setPaAve(CalculationUtil.getBigDecimal(dataMap.get("paAve").toString()));
  521. windTowerDataParentTable.setPaSta(CalculationUtil.getBigDecimal(dataMap.get("paSta") == null ? null : dataMap.get("paSta").toString()));
  522. windTowerDataParentTable.setPaNow(CalculationUtil.getBigDecimal(dataMap.get("paNow") == null ? null : dataMap.get("paNow").toString()));
  523. windTowerDataParentTable.setTMax(CalculationUtil.getBigDecimal(dataMap.get("tMax") == null ? null : dataMap.get("tMax").toString()));
  524. windTowerDataParentTable.setTMin(CalculationUtil.getBigDecimal(dataMap.get("tMin") == null ? null : dataMap.get("tMin").toString()));
  525. windTowerDataParentTable.setTAve(CalculationUtil.getBigDecimal(dataMap.get("tAve") == null ? null : dataMap.get("tAve").toString()));
  526. windTowerDataParentTable.setTSta(CalculationUtil.getBigDecimal(dataMap.get("tSta") == null ? null : dataMap.get("tSta").toString()));
  527. windTowerDataParentTable.setTInst(CalculationUtil.getBigDecimal(dataMap.get("tInst") == null ? null : dataMap.get("tInst").toString()));
  528. windTowerDataParentTable.setTNow(CalculationUtil.getBigDecimal(dataMap.get("tNow") == null ? null : dataMap.get("tNow").toString()));
  529. windTowerDataParentTable.setRhMax(CalculationUtil.getBigDecimal(dataMap.get("rhMax") == null ? null : dataMap.get("rhMax").toString()));
  530. windTowerDataParentTable.setRhMin(CalculationUtil.getBigDecimal(dataMap.get("rhMin") == null ? null : dataMap.get("rhMin").toString()));
  531. windTowerDataParentTable.setRhAve(CalculationUtil.getBigDecimal(dataMap.get("rhAve") == null ? null : dataMap.get("rhAve").toString()));
  532. windTowerDataParentTable.setRhSta(CalculationUtil.getBigDecimal(dataMap.get("rhSta") == null ? null : dataMap.get("rhSta").toString()));
  533. windTowerDataParentTable.setRhInst(CalculationUtil.getBigDecimal(dataMap.get("rhInst") == null ? null : dataMap.get("rhInst").toString()));
  534. windTowerDataParentTable.setRhNow(CalculationUtil.getBigDecimal(dataMap.get("rhNow") == null ? null : dataMap.get("rhNow").toString()));
  535. windTowerDataParentTable.setVMax(CalculationUtil.getBigDecimal(dataMap.get("vMax") == null ? null : dataMap.get("vMax").toString()));
  536. windTowerDataParentTable.setVMin(CalculationUtil.getBigDecimal(dataMap.get("vMin") == null ? null : dataMap.get("vMin").toString()));
  537. windTowerDataParentTable.setVAve(CalculationUtil.getBigDecimal(dataMap.get("vAve") == null ? null : dataMap.get("vAve").toString()));
  538. windTowerDataParentTable.setVSta(CalculationUtil.getBigDecimal(dataMap.get("vSta") == null ? null : dataMap.get("vSta").toString()));
  539. windTowerDataParentTable.setVInst(CalculationUtil.getBigDecimal(dataMap.get("vInst") == null ? null : dataMap.get("vInst").toString()));
  540. windTowerDataParentTable.setVNow(CalculationUtil.getBigDecimal(dataMap.get("vNow") == null ? null : dataMap.get("vNow").toString()));
  541. //计算空气密度
  542. if (dataMap.get("TAve") != null && dataMap.get("paAve") != null) {
  543. BigDecimal airDensity = BigDecimal.valueOf(1.293).multiply(new BigDecimal(273).divide(new BigDecimal(273).add(dataMap.get("TAve")), 2, RoundingMode.HALF_UP)).multiply(dataMap.get("paAve")).divide(new BigDecimal(1013), 2, RoundingMode.HALF_UP);
  544. windTowerDataParentTable.setAirDensity(airDensity);
  545. }
  546. ArrayList<WindTowerDataParentTable> windTowerDataParentTableList = new ArrayList<>();
  547. windTowerDataParentTableList.add(windTowerDataParentTable);
  548. // TODO 目前没有异常数据校验
  549. // windTowerDataParentTable.setAbnormalData(dataMap.get("abnormalData") == null ? null : dataMap.get("abnormalData").toString());
  550. // windTowerDataParentTable.setAbnormalType(dataMap.get("abnormalType") == null ? null : dataMap.get("abnormalType").toString());
  551. // windTowerDataParentTableList.add(windTowerDataParentTable);
  552. this.saveBatchById(windTowerDataParentTableList, windTowerDataChildTableList, "station_" + equipmentNo);
  553. }
  554. /**
  555. * 根据时间范围和设备id查询数据
  556. *
  557. * @param startTime 开始时间
  558. * @param endTime 结束时间
  559. * @param equipmentId 设备id
  560. * @return List<Map < String, Object>>
  561. */
  562. public List<Map<String, Object>> selectDataByBetweenTimeAndEquipmetId(Date startTime, Date endTime, String equipmentId) {
  563. return selectByBetweenTimeAndEquipmetId(startTime, endTime, equipmentId);
  564. }
  565. /**
  566. * 根据条件查询数据并分页
  567. *
  568. * @param startTime 开始时间
  569. * @param endTime 结束时间
  570. * @param equipmentId 设备id
  571. * @return
  572. */
  573. public Map<String, Object> selectDataPageByBetweenTimeAndEquipmetId(Date startTime, Date endTime, String equipmentId, Integer pageNo, Integer pageSize) {
  574. List<Map<String, Object>> maps = selectByBetweenTimeAndEquipmetId(startTime, endTime, equipmentId);
  575. Map<String, Object> map = new HashMap<>();
  576. map.put("count", maps.size());
  577. map.put("list", maps.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList()));
  578. return map;
  579. }
  580. //原实时数据查询
  581. public List<Map<String, Object>> selectByBetweenTimeAndEquipmetIdOld(Date startTime, Date endTime, String equipmentId) {
  582. List<Entity> windTowerDataParentTables = baseMapper.selectDataByBetweenTimeAndEquipmetId(equipmentId, startTime, endTime);
  583. //entity转JOSN数组
  584. JSONArray array = new JSONArray(windTowerDataParentTables);
  585. //JSON数据转List<Map<String, Object>>
  586. List<Map<String, Object>> maps = JSON.parseObject(array.toString(), new TypeReference<List<Map<String, Object>>>() {
  587. });
  588. //最终转换后的map
  589. List<Map<String, Object>> newMaps = new ArrayList<>();
  590. // 数据库查出来的结果父一行 子多行 一父多子转换成一父一子
  591. for (int i = 0; i < maps.size(); i++) {
  592. Map<String, Object> newMap = new HashMap<>();
  593. int finalI = i;
  594. maps.get(i).forEach((key, value) -> {
  595. if (!newMaps.isEmpty()) {
  596. //有数据的情况下 如果parent_id相等 则代表应合并成一条
  597. if (newMaps.get(newMaps.size() - 1).get("parent_id").equals(maps.get(finalI).get("parent_id"))) {
  598. //只有风速风向有层高
  599. if (key.contains("ws_") || key.contains("wd_")) {
  600. newMaps.get(newMaps.size() - 1).put(key + maps.get(finalI).get("field_name"), value);
  601. }
  602. } else {
  603. if (key.contains("ws_") || key.contains("wd_")) {
  604. newMap.put(key + maps.get(finalI).get("field_name"), value);
  605. } else {
  606. newMap.put(key, value);
  607. }
  608. }
  609. } else {
  610. if (key.contains("ws_") || key.contains("wd_")) {
  611. newMap.put(key + maps.get(finalI).get("field_name"), value);
  612. } else {
  613. newMap.put(key, value);
  614. }
  615. }
  616. });
  617. //在合并数据的时候是直接往list里put newMap就是空的 如果直接add的话会报错空指针
  618. if (!newMap.isEmpty()) {
  619. newMaps.add(newMap);
  620. }
  621. }
  622. return newMaps;
  623. }
  624. /**
  625. * 实时数据查询
  626. *
  627. * @param timeBegin 开始时间
  628. * @param timeEnd 结束时间
  629. * @param equipmentId 设备编号
  630. * @return List<Map < String, Object>> 实时数据
  631. */
  632. private List<Map<String, Object>> selectByBetweenTimeAndEquipmetId(Date timeBegin, Date timeEnd, String equipmentId) {
  633. Timestamp startTime = new Timestamp(timeBegin.getTime());
  634. Timestamp endTime = new Timestamp(timeEnd.getTime());
  635. HashSet<String> heightSet = new HashSet<>();
  636. LambdaQueryWrapper<ProphaseAnemometryData> lambdaQueryWrapper = Wrappers.lambdaQuery();
  637. lambdaQueryWrapper.eq(ProphaseAnemometryData::getEquipmentId, equipmentId);
  638. lambdaQueryWrapper.between(ProphaseAnemometryData::getTs, startTime, endTime);
  639. //获取测风塔数据
  640. List<WindTowerInfo> list = windTowerInfoService.getByEquipmentNo(equipmentId);
  641. List<Map<String, Object>> mapList = new ArrayList<>();
  642. List<ProphaseAnemometryData> prophaseAnemometryPublicData = prophaseAnemometryDataService.list(lambdaQueryWrapper);
  643. List<ProphaseWeatherData> prophaseAnemometryPublicDataList = prophaseWeatherDataService.selectPublicData(equipmentId, startTime, endTime);
  644. String heights = list.get(0).getHeights();
  645. String wdHeights = list.get(0).getWdHeights();
  646. //将层高加入list
  647. heightSet.addAll(Arrays.asList(heights.split(",")));
  648. heightSet.addAll(Arrays.asList(wdHeights.split(",")));
  649. //组装数据
  650. for (ProphaseWeatherData anemometryPublicData : prophaseAnemometryPublicDataList) {
  651. HashMap<String, Object> dataMap = new HashMap<>();
  652. List<ProphaseAnemometryData> prophaseAnemometryData = prophaseAnemometryPublicData.stream().filter(p -> p.getTs().getTime() == anemometryPublicData.getTs().getTime()).collect(Collectors.toList());
  653. dataMap.put("time", anemometryPublicData.getTs().getTime());
  654. dataMap.put("t_ave", anemometryPublicData.getTAve());
  655. dataMap.put("t_max", anemometryPublicData.getTMax());
  656. dataMap.put("t_min", anemometryPublicData.getTMin());
  657. dataMap.put("t_sta", anemometryPublicData.getTSta());
  658. dataMap.put("t_inst", anemometryPublicData.getTInst());
  659. dataMap.put("rh_ave", anemometryPublicData.getRhAve());
  660. dataMap.put("rh_max", anemometryPublicData.getRhMax());
  661. dataMap.put("rh_min", anemometryPublicData.getRhMin());
  662. dataMap.put("rh_sta", anemometryPublicData.getRhSta());
  663. dataMap.put("rh_inst", anemometryPublicData.getRhInst());
  664. dataMap.put("pa_ave", anemometryPublicData.getPaAve());
  665. dataMap.put("pa_max", anemometryPublicData.getPaMax());
  666. dataMap.put("pa_min", anemometryPublicData.getPaMin());
  667. dataMap.put("pa_sta", anemometryPublicData.getPaSta());
  668. dataMap.put("pa_inst", anemometryPublicData.getPaInst());
  669. dataMap.put("air_density", anemometryPublicData.getAirDensity());
  670. if (prophaseAnemometryData.size() > 0) {
  671. for (ProphaseAnemometryData prophaseAnemometryDatum : prophaseAnemometryData) {
  672. dataMap.put("ws_ave" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWsAve());
  673. dataMap.put("ws_max" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWsMax());
  674. dataMap.put("ws_min" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWsMin());
  675. dataMap.put("ws_sta" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWsSta());
  676. dataMap.put("ws_inst" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWsInst());
  677. dataMap.put("wd_ave" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWdAve());
  678. dataMap.put("wd_max" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWdMax());
  679. dataMap.put("wd_min" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWdMin());
  680. dataMap.put("wd_sta" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWdSta());
  681. dataMap.put("wd_inst" + prophaseAnemometryDatum.getLayerHeight(), prophaseAnemometryDatum.getWdInst());
  682. }
  683. }
  684. //过滤value为空的数据
  685. Map<String, Object> collect = dataMap.entrySet().stream().filter(h -> h.getValue() != null).collect(Collectors.toMap(Map.Entry::getKey, h -> h.getValue()));
  686. mapList.add(collect);
  687. }
  688. return mapList;
  689. }
  690. /**
  691. * 导出测风塔数据
  692. *
  693. * @param startTime
  694. * @param endTime
  695. * @param equipmentId
  696. */
  697. public void export(HttpServletResponse response, Long startTime, Long endTime, String equipmentId) {
  698. try {
  699. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  700. BufferedOutputStream bos = null;
  701. StringBuilder templateContent = new StringBuilder();
  702. List<Map<String, Object>> mapList = selectDataByBetweenTimeAndEquipmetId(new Date(startTime), new Date(endTime), equipmentId);
  703. //根据设备编号查找此场站显示的列
  704. List<DisplayConfig> displayConfigs = displayConfigService.findByDisplaySign(equipmentId);
  705. //把显示列分割数组
  706. String[] strings;
  707. if (displayConfigs.size() > 0) {
  708. strings = displayConfigs.get(0).getShowCode().split(",");
  709. } else {
  710. //获取层高根据层高拼
  711. //String s = "equipment_id,time,t_inst,t_max,t_min,t_ave,t_sta,rh_inst,rh_max,rh_min,rh_ave,rh_sta,pa_inst,pa_max,pa_min,pa_ave,ws_inst150,ws_max150,ws_min150,ws_ave150,ws_sta150,wd_inst150,wd_max150,wd_min150,wd_ave150,wd_sta150,ws_inst150A,ws_max150A,ws_min150A,ws_ave150A,ws_sta150A,wd_inst150A,wd_max150A,wd_min150A,wd_ave150A,wd_sta150A,ws_inst140,ws_max140,ws_min140,ws_ave140,ws_sta140,wd_inst140,wd_max140,wd_min140,wd_ave140,wd_sta140,ws_inst140A,ws_max140A,ws_min140A,ws_ave140A,ws_sta140A,wd_inst140A,wd_max140A,wd_min140A,wd_ave140A,wd_sta140A,ws_inst120,ws_max120,ws_min120,ws_ave120,ws_sta120,wd_inst120,wd_max120,wd_min120,wd_ave120,wd_sta120,ws_inst80,ws_max80,ws_min80,ws_ave80,ws_sta80,wd_inst80,wd_max80,wd_min80,wd_ave80,wd_sta80,ws_inst90,ws_max90,ws_min90,ws_ave90,ws_sta90,wd_inst90,wd_max90,wd_min90,wd_ave90,wd_sta90,ws_inst100,ws_max100,ws_min100,ws_ave100,ws_sta100,wd_inst100,wd_max100,wd_min100,wd_ave100,wd_sta100,ws_inst110,ws_max110,ws_min110,ws_ave110,ws_sta110,wd_inst110,wd_max110,wd_min110,wd_ave110,wd_sta110,ws_inst120,ws_max120,ws_min120,ws_ave120,ws_sta120,wd_inst120,wd_max120,wd_min120,wd_ave120,wd_sta120,wd_inst140,wd_max140,wd_min140,wd_ave140,wd_sta140,ws_inst140,ws_max140,ws_min140,ws_ave140,ws_sta140,wd_inst150,wd_max150,wd_min150,wd_ave150,wd_sta150,ws_inst150,ws_max150,ws_min150,ws_ave150,ws_sta150,airDensity";
  712. StringBuffer stringBuffer = new StringBuffer();
  713. stringBuffer.append("equipment_id")
  714. .append(",").append("time")
  715. .append(",").append("t_inst")
  716. .append(",").append("t_max")
  717. .append(",").append("t_min")
  718. .append(",").append("t_ave")
  719. .append(",").append("t_sta")
  720. .append(",").append("rh_inst")
  721. .append(",").append("rh_max")
  722. .append(",").append("rh_min")
  723. .append(",").append("rh_ave")
  724. .append(",").append("rh_sta")
  725. .append(",").append("pa_inst")
  726. .append(",").append("pa_max")
  727. .append(",").append("pa_min")
  728. .append(",").append("pa_ave")
  729. .append(",").append("pa_sta");
  730. //所有层高
  731. String[] height = {"200", "200A", "190", "190A", "180", "180A", "170", "170A", "160", "160A", "150", "150A", "140", "140A", "120", "120A", "110", "110A", "100", "100A", "90", "90A", "80", "80A", "70", "70A", "50", "50A", "30", "30A", "10", "10A"};
  732. Map<String, Object> map = new HashMap<>();
  733. if (!mapList.isEmpty()) {
  734. map = mapList.get(0);
  735. }
  736. //把拼装后的属性和共有的属性拼装
  737. StringBuffer key = getKey(height);
  738. stringBuffer.append(key);
  739. String[] strs = stringBuffer.toString().split(",");
  740. StringBuffer strBuffer = new StringBuffer();
  741. for (String s : strs) {
  742. if (map.get(s) != null) {
  743. strBuffer.append(s).append(",");
  744. }
  745. }
  746. strBuffer.append("air_density");
  747. strings = strBuffer.toString().split(",");
  748. }
  749. //表头
  750. String header = "";
  751. //内容
  752. StringBuilder content = new StringBuilder();
  753. for (String s : strings) {
  754. //获取动态的表头
  755. header += getName(s) + ",";
  756. }
  757. header += "\r\n";
  758. templateContent.append(header);
  759. //拼接内容
  760. if (!mapList.isEmpty()) {
  761. for (Map<String, Object> map : mapList) {
  762. for (String string : strings) {
  763. if (string.equals("time")) {
  764. content.append(sdf.format(map.get(string))).append(",");
  765. } else {
  766. content.append(map.get(string)).append(",");
  767. }
  768. }
  769. content.append("\r\n");
  770. }
  771. }
  772. templateContent.append(content);
  773. sdf = new SimpleDateFormat("yyyy-MM-dd");
  774. response.setContentType("application/x-msdownload;charset=UTF-8");// 文件下载必须配置为application/x-msdownload
  775. response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(sdf.format(startTime) + "至" + sdf.format(endTime) + "测风塔文件" + ".csv", "UTF-8"));// 中文文件名必须使用URLEncoder.encode进行转码
  776. byte[] templateContentBytes = new byte[0];
  777. templateContentBytes = templateContent.toString().getBytes(StandardCharsets.UTF_8);
  778. bos = new BufferedOutputStream(response.getOutputStream());// 向response中写入文件流
  779. bos.write(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});// 指定csv文件用UTF-8字符集打开
  780. bos.write(templateContentBytes);
  781. response.flushBuffer();
  782. } catch (Exception e) {
  783. e.printStackTrace();
  784. }
  785. }
  786. /**
  787. * 导出测风塔数据文件
  788. *
  789. * @param equipmentId
  790. */
  791. public void exportAll(HttpServletRequest request, HttpServletResponse response, String equipmentId, Long startTime, Long endTime) {
  792. try {
  793. File dataFile = new File(FileUtil.getSystemFilePath() + File.separator + equipmentId);
  794. File[] files = dataFile.listFiles();
  795. String zipPath = FileUtil.getSystemFilePath() + File.separator + equipmentId + File.separator + equipmentId + "数据文件.zip";
  796. List<File> files1 = Arrays.stream(files).map(file -> {
  797. String name = file.getName();
  798. if (name.contains(".rld")) {
  799. String[] rldNameTime = name.split("_");
  800. long time = DateUtil.parse(rldNameTime[1], "yyyy-MM-dd").getTime();
  801. if (time >= startTime && time <= endTime) {
  802. return file;
  803. }
  804. } else if (name.contains(".RWD")) {
  805. String rwdNameTime = name.substring(equipmentId.length(), equipmentId.length() + 8);
  806. long time = DateUtil.parse(rwdNameTime, "yyyyMMdd").getTime();
  807. if (time >= startTime && time <= endTime) {
  808. return file;
  809. }
  810. } else if (name.contains(".elog") || name.contains(".csv")) {
  811. String[] elogNameTime = name.split("_");
  812. long time = DateUtil.parse(elogNameTime[1], "yyyyMMdd").getTime();
  813. if (time >= startTime && time <= endTime) {
  814. return file;
  815. }
  816. } else if (name.contains("dat")) {
  817. String subTime = name.substring(equipmentId.length(), equipmentId.length() + 8);
  818. long time = DateUtil.parse(subTime, "yyyyMMdd").getTime();
  819. if (time >= startTime && time <= endTime) {
  820. return file;
  821. }
  822. }
  823. return null;
  824. }).filter(file -> file != null && file.getName().contains(equipmentId)).collect(Collectors.toList());
  825. String[] strDir = new String[files1.size()];
  826. for (int i = 0; i < files1.size(); i++) {
  827. strDir[i] = files1.get(i).toString();
  828. }
  829. FileOutputStream fos2 = new FileOutputStream(new File(zipPath));
  830. //压缩
  831. CommonUtil.toZip(strDir, fos2, true);
  832. downLoadFile(request, response, zipPath);
  833. File deleteFile = new File(zipPath);
  834. //下载完删除本地压缩包
  835. deleteFile.delete();
  836. } catch (Exception e) {
  837. e.printStackTrace();
  838. }
  839. }
  840. /**
  841. * 文件下载
  842. *
  843. * @param request HttpServletRequest
  844. * @param response HttpServletResponse
  845. * @param zipPath 路径
  846. */
  847. public void downLoadFile(HttpServletRequest request,
  848. HttpServletResponse response,
  849. String zipPath) {
  850. response.setContentType("text/html;charset=utf-8");
  851. try {
  852. request.setCharacterEncoding("UTF-8");
  853. } catch (UnsupportedEncodingException e1) {
  854. log.error("系统错误:" + e1.getMessage(), e1);
  855. }
  856. InputStream ins = null;
  857. BufferedInputStream bins = null;
  858. try {
  859. File df = new File(zipPath);
  860. ins = new FileInputStream(df);
  861. bins = new BufferedInputStream(ins);
  862. OutputStream outs = response.getOutputStream();
  863. BufferedOutputStream bouts = new BufferedOutputStream(outs);
  864. response.setHeader("Content-disposition", "attachment;filename=" + java.net.URLEncoder.encode(df.getName(), "UTF-8"));
  865. response.setContentType("application/x-msdownload; charset=utf-8");
  866. int bytesRead = 0;
  867. byte[] buffer = new byte[8192];
  868. while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
  869. bouts.write(buffer, 0, bytesRead);
  870. }
  871. bouts.flush();
  872. bouts.close();
  873. } catch (Exception e) {
  874. log.error("系统错误:" + e.getMessage(), e);
  875. } finally {
  876. if (bins != null) {
  877. try {
  878. bins.close();
  879. } catch (IOException e) {
  880. e.printStackTrace();
  881. }
  882. }
  883. if (ins != null) {
  884. try {
  885. ins.close();
  886. } catch (IOException e) {
  887. e.printStackTrace();
  888. }
  889. }
  890. }
  891. }
  892. /**
  893. * 根据传入的层高 返回拼装的属性
  894. *
  895. * @param height 层高
  896. * @return
  897. */
  898. private StringBuffer getKey(String[] height) {
  899. StringBuffer strings = new StringBuffer();
  900. for (String s : height) {
  901. strings.append(",").append("ws_inst").append(s).append(",").append("ws_max").append(s).append(",").append("ws_min").append(s).append(",").append("ws_ave").append(s).append(",").append("ws_sta").append(s).append(",").append("wd_inst").append(s).append(",").append("wd_max").append(s).append(",").append("wd_min").append(s).append(",").append("wd_ave").append(s).append(",").append("wd_sta").append(s);
  902. }
  903. return strings;
  904. }
  905. /**
  906. * 根据属性名返回表头
  907. *
  908. * @param name 属性名
  909. * @return
  910. */
  911. private String getName(String name) {
  912. if (name.equals("equipment_id")) {
  913. return "设备编号";
  914. } else if (name.equals("time")) {
  915. return "时间";
  916. } else if (name.equals("t_inst")) {
  917. return "温度瞬时值";
  918. } else if (name.equals("t_max")) {
  919. return "温度最大值";
  920. } else if (name.equals("t_min")) {
  921. return "温度最小值";
  922. } else if (name.equals("t_ave")) {
  923. return "温度平均值";
  924. } else if (name.equals("t_sta")) {
  925. return "温度标差值";
  926. } else if (name.equals("rh_inst")) {
  927. return "湿度瞬时值";
  928. } else if (name.equals("rh_max")) {
  929. return "湿度最大值";
  930. } else if (name.equals("rh_min")) {
  931. return "湿度最小值";
  932. } else if (name.equals("rh_ave")) {
  933. return "湿度平均值";
  934. } else if (name.equals("rh_sta")) {
  935. return "湿度标差值";
  936. } else if (name.equals("pa_inst")) {
  937. return "气压瞬时值";
  938. } else if (name.equals("pa_max")) {
  939. return "气压最大值";
  940. } else if (name.equals("pa_min")) {
  941. return "气压最小值";
  942. } else if (name.equals("pa_ave")) {
  943. return "气压平均值";
  944. } else if (name.equals("pa_sta")) {
  945. return "气压标差值";
  946. } else if (name.contains("ws_inst")) {
  947. return name.substring(7) + "米风速瞬时值";
  948. } else if (name.contains("ws_max")) {
  949. return name.substring(6) + "米风速最大值";
  950. } else if (name.contains("ws_min")) {
  951. return name.substring(6) + "米风速最小值";
  952. } else if (name.contains("ws_ave")) {
  953. return name.substring(6) + "米风速平均值";
  954. } else if (name.contains("ws_sta")) {
  955. return name.substring(6) + "米风速标差值";
  956. } else if (name.contains("wd_inst")) {
  957. return name.substring(7) + "米风向瞬时值";
  958. } else if (name.contains("wd_max")) {
  959. return name.substring(6) + "米风向最大值";
  960. } else if (name.contains("wd_min")) {
  961. return name.substring(6) + "米风向最小值";
  962. } else if (name.contains("wd_ave")) {
  963. return name.substring(6) + "米风向平均值";
  964. } else if (name.contains("wd_sta")) {
  965. return name.substring(6) + "米风向标差值";
  966. } else if (name.equals("air_density")) {
  967. return "空气密度";
  968. } else {
  969. return "";
  970. }
  971. }
  972. /**
  973. * 存一条数据
  974. *
  975. * @param windTowerDataParentTable
  976. * @param windTowerDataChildTable
  977. * @param equipmentId
  978. */
  979. public void saveByEquipmentId(WindTowerDataParentTable windTowerDataParentTable, WindTowerDataChildTable windTowerDataChildTable, String equipmentId) {
  980. Map<String, Object> map = new HashMap<>();
  981. map.put("equipment_id", equipmentId);
  982. RequestDataHelper.setRequestData(map);
  983. windTowerDataChildTableService.saveByEquipmentId(windTowerDataChildTable, equipmentId);
  984. this.save(windTowerDataParentTable);
  985. }
  986. /**
  987. * 存多条数据
  988. *
  989. * @param windTowerDataParentTableList
  990. * @param windTowerDataChildTableList
  991. * @param equipmentId
  992. */
  993. public void saveBatchByEquipmentId(List<WindTowerDataParentTable> windTowerDataParentTableList, List<WindTowerDataChildTable> windTowerDataChildTableList, String equipmentId) {
  994. Map<String, Object> map = new HashMap<>();
  995. map.put("equipment_id", equipmentId);
  996. RequestDataHelper.setRequestData(map);
  997. windTowerDataChildTableService.saveBatchByEquipmentId(windTowerDataChildTableList, equipmentId);
  998. this.saveBatch(windTowerDataParentTableList);
  999. }
  1000. /**
  1001. * 删除数据
  1002. *
  1003. * @param equipmentId 设备编号
  1004. * @param startTime 开始时间
  1005. * @param endTime 结束时间
  1006. */
  1007. public void deleteDataByBetweenTimeAndEquipmetId(Date startTime, Date endTime, String equipmentId) {
  1008. baseMapper.deleteDataByBetweenTimeAndEquipmetId(equipmentId, startTime, endTime);
  1009. }
  1010. /**
  1011. * 删除父表数据
  1012. *
  1013. * @param startTime 开始时间
  1014. * @param endTime 结束时间
  1015. * @param equipmentId 设备编号
  1016. */
  1017. public void deleteBetweenTimeAndEquipmentIdAndParent(Date startTime, Date endTime, String equipmentId) {
  1018. baseMapper.deleteBetweenTimeAndEquipmentIdAndParent(equipmentId, startTime, endTime);
  1019. }
  1020. /**
  1021. * 数据完整性
  1022. *
  1023. * @param equipmentId 设备编号
  1024. * @return List<Map < String, Object>>
  1025. */
  1026. public List<Map<String, Object>> countDataIntegrity(String equipmentId, String startTime, String endTime) {
  1027. return baseMapper.countDataIntegrity(equipmentId, startTime, endTime);
  1028. }
  1029. /**
  1030. * 根据设备编号获取该设备的第一条数据
  1031. *
  1032. * @param equipmentId 设备编号
  1033. * @return WindTowerDataParentTable
  1034. */
  1035. public WindTowerDataParentTable getFirstData(String equipmentId) {
  1036. return baseMapper.getFirstData(equipmentId);
  1037. }
  1038. /**
  1039. * 根据设备编号获取该设备的最后一条数据
  1040. *
  1041. * @param equipmentId 设备编号
  1042. * @return WindTowerDataParentTable
  1043. */
  1044. public WindTowerDataParentTable getLastData(String equipmentId) {
  1045. return baseMapper.getLastData(equipmentId);
  1046. }
  1047. /**
  1048. * 根据设备编号获取最新一天的数据
  1049. *
  1050. * @param equipmentId 设备编号
  1051. * @return List<Map < String, Object>>
  1052. */
  1053. public List<Map<String, Object>> getStartTimeAndEndTimeForData(String equipmentId) {
  1054. WindTowerDataParentTable towerDataParentTableServiceLastData = getLastData(equipmentId);
  1055. Date endTime = towerDataParentTableServiceLastData.getTime();
  1056. DateTime dateTime = DateUtil.beginOfDay(endTime);
  1057. return selectDataByBetweenTimeAndEquipmetId(new Date(dateTime.getTime()), endTime, equipmentId);
  1058. }
  1059. }