From 0a41264a2efac63f173ccac7df495ec6a7143c9a Mon Sep 17 00:00:00 2001 From: v-lijf43 <3067418132@qq.com> Date: Wed, 17 Jun 2026 14:50:46 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=EF=BC=9B=202=E3=80=81=E4=BF=AE=E6=94=B9rabbitmq=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E6=B6=88=E8=B4=B9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 4 +- .../test/java/com/mh/MHApplicationTest.java | 13 +- .../common/model/request/AdvantechDatas.java | 2 +- .../com/mh/common/utils/http/HttpUtils.java | 3 +- .../dealdata/impl/DataProcessServiceImpl.java | 20 ++- .../mh/framework/rabbitmq/RabbitMqConfig.java | 26 ++-- .../mh/quartz/task/GetOtherSysDataJob.java | 118 ++++++++++-------- .../mh/system/mapper/overview/HomeMapper.java | 2 +- .../energy/impl/EnergyAnalyzeServiceImpl.java | 51 ++++++-- .../overview/impl/HomeServiceImpl.java | 15 ++- 10 files changed, 159 insertions(+), 95 deletions(-) diff --git a/mh-admin/src/main/resources/application-dev.yml b/mh-admin/src/main/resources/application-dev.yml index 89fb5a2..234cc2f 100644 --- a/mh-admin/src/main/resources/application-dev.yml +++ b/mh-admin/src/main/resources/application-dev.yml @@ -98,10 +98,10 @@ spring: # 主库数据源 master: #添加allowMultiQueries=true 在批量更新时才不会出错 - url: jdbc:postgresql://127.0.0.1:5432/eemcs_bl_dev + url: jdbc:postgresql://127.0.0.1:5432/bl_eems # url: jdbc:postgresql://106.55.173.225:5505/eemcs username: postgres - password: mh@803 + password: 123456 # 从库数据源 slave: # 从数据源开关/默认关闭 diff --git a/mh-admin/src/test/java/com/mh/MHApplicationTest.java b/mh-admin/src/test/java/com/mh/MHApplicationTest.java index c4c753d..9e539c4 100644 --- a/mh-admin/src/test/java/com/mh/MHApplicationTest.java +++ b/mh-admin/src/test/java/com/mh/MHApplicationTest.java @@ -10,10 +10,7 @@ import com.mh.common.core.domain.entity.WeatherData; import com.mh.common.core.domain.vo.EnergyQueryVO; import com.mh.common.utils.DateUtils; import com.mh.common.utils.StringUtils; -import com.mh.quartz.task.DealDataTask; -import com.mh.quartz.task.DealOnOrOffData; -import com.mh.quartz.task.GetWeatherDataTask; -import com.mh.quartz.task.HotWaterTask; +import com.mh.quartz.task.*; import com.mh.system.mapper.device.DataProcessMapper; import com.mh.system.service.ISysParamsService; import com.mh.system.service.ISysUserService; @@ -73,6 +70,14 @@ public class MHApplicationTest { @Autowired private DealOnOrOffData dealOnOrOffData; + @Autowired + private GetOtherSysDataJob getOtherSysDataJob; + + @Test + public void getBSDData() { + getOtherSysDataJob.getBSDData("",""); + } + @Test public void setDealOnOrOffData() throws Exception { dealOnOrOffData.dealDeviceLedger(); diff --git a/mh-common/src/main/java/com/mh/common/model/request/AdvantechDatas.java b/mh-common/src/main/java/com/mh/common/model/request/AdvantechDatas.java index 7ca8c75..a543337 100644 --- a/mh-common/src/main/java/com/mh/common/model/request/AdvantechDatas.java +++ b/mh-common/src/main/java/com/mh/common/model/request/AdvantechDatas.java @@ -10,7 +10,7 @@ import lombok.Data; * @date 2025-01-22 14:47:25 */ @Data -public class AdvantechDatas { +public class AdvantechDatas { /** * 对应研华的标签值 diff --git a/mh-common/src/main/java/com/mh/common/utils/http/HttpUtils.java b/mh-common/src/main/java/com/mh/common/utils/http/HttpUtils.java index 0b64a0d..a6f861f 100644 --- a/mh-common/src/main/java/com/mh/common/utils/http/HttpUtils.java +++ b/mh-common/src/main/java/com/mh/common/utils/http/HttpUtils.java @@ -132,13 +132,14 @@ public class HttpUtils try { log.info("sendPost - {}", url); + log.info("sendPost param - {}", param); URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); conn.setRequestProperty("Accept-Charset", "utf-8"); - conn.setRequestProperty("contentType", "utf-8"); + conn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); conn.setDoOutput(true); conn.setDoInput(true); out = new PrintWriter(conn.getOutputStream()); diff --git a/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java b/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java index a5a09fd..9ff4ad9 100644 --- a/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java +++ b/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java @@ -200,10 +200,22 @@ public class DataProcessServiceImpl implements DataProcessService { Object dObject = data.getD(); if (dObject instanceof List) { - // 如果已经是List类型,直接转换 - @SuppressWarnings("unchecked") - List tempList = (List) dObject; - list = tempList; + List tempList = (List) dObject; + list = tempList.stream() + .map(item -> { + if (item instanceof AdvantechDatas) { + return (AdvantechDatas) item; + } else { + try { + return JSON.parseObject(JSON.toJSONString(item), AdvantechDatas.class); + } catch (Exception e) { + log.error("转换AdvantechDatas失败,item: {}", item, e); + return null; + } + } + }) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } else { // 如果是其他类型(如String),则进行JSON解析 String dString = dObject.toString(); diff --git a/mh-framework/src/main/java/com/mh/framework/rabbitmq/RabbitMqConfig.java b/mh-framework/src/main/java/com/mh/framework/rabbitmq/RabbitMqConfig.java index 1995831..6155dc1 100644 --- a/mh-framework/src/main/java/com/mh/framework/rabbitmq/RabbitMqConfig.java +++ b/mh-framework/src/main/java/com/mh/framework/rabbitmq/RabbitMqConfig.java @@ -156,12 +156,12 @@ public class RabbitMqConfig { } // 延迟交换机(使用自定义类型x-delayed-message) - @Bean - public CustomExchange delayedExchange() { - Map args = new HashMap<>(); - args.put("x-delayed-type", "direct"); // 底层转发类型 - return new CustomExchange(DELAY_EXCHANGE_NAME, "x-delayed-message", true, false, args); - } +// @Bean +// public CustomExchange delayedExchange() { +// Map args = new HashMap<>(); +// args.put("x-delayed-type", "direct"); // 底层转发类型 +// return new CustomExchange(DELAY_EXCHANGE_NAME, "x-delayed-message", true, false, args); +// } // 报警队列 @Bean @@ -170,12 +170,12 @@ public class RabbitMqConfig { } // 绑定延迟交换机与队列 - @Bean - public Binding binding(Queue alarmQueue, CustomExchange delayedExchange) { - return BindingBuilder.bind(alarmQueue) - .to(delayedExchange) - .with(ROUTING_KEY_ALARM) - .noargs(); - } +// @Bean +// public Binding binding(Queue alarmQueue, CustomExchange delayedExchange) { +// return BindingBuilder.bind(alarmQueue) +// .to(delayedExchange) +// .with(ROUTING_KEY_ALARM) +// .noargs(); +// } } diff --git a/mh-quartz/src/main/java/com/mh/quartz/task/GetOtherSysDataJob.java b/mh-quartz/src/main/java/com/mh/quartz/task/GetOtherSysDataJob.java index 7a74d29..5143c8b 100644 --- a/mh-quartz/src/main/java/com/mh/quartz/task/GetOtherSysDataJob.java +++ b/mh-quartz/src/main/java/com/mh/quartz/task/GetOtherSysDataJob.java @@ -9,6 +9,7 @@ import com.mh.common.core.domain.entity.CollectionParamsManage; import com.mh.common.model.request.AdvantechDatas; import com.mh.common.model.request.AdvantechReceiver; import com.mh.common.utils.DateUtils; +import com.mh.common.utils.StringUtils; import com.mh.common.utils.http.HttpUtils; import com.mh.framework.rabbitmq.producer.SendMsgByTopic; import com.mh.system.service.device.ICollectionParamsManageService; @@ -88,6 +89,16 @@ public class GetOtherSysDataJob { public void getBSDData(String realUrl, String realValuesUrl) { log.info("获取BSD数据"); try { + if (StringUtils.isEmpty(realUrl)) { + realUrl = "http://192.168.1.80:5002/data/get_real"; + } else { + realUrl = "http://" + realUrl; + } + if (StringUtils.isEmpty(realValuesUrl)) { + realValuesUrl = "http://192.168.1.80:5002/data/get_real_values"; + } else { + realValuesUrl = "http://" + realValuesUrl; + } // 获取实时读数\累计读数的所有点位 HashMap params = new HashMap<>(); params.put("systemType", "0"); @@ -121,21 +132,22 @@ public class GetOtherSysDataJob { } } } - - List allAdvantechDatas = new ArrayList<>(); - - // 使用CompletableFuture并发请求累计读数和功率读数 - CompletableFuture> cumulativeFuture = null; - CompletableFuture> powerFuture = null; - + + List> allAdvantechDatas = new ArrayList<>(); + + CompletableFuture>> cumulativeFuture = null; + CompletableFuture>> powerFuture = null; + + // 并发请求累计读数 (grade=40) if (!cumulativeMtCodes.isEmpty()) { final List finalCumulativeMtCodes = new ArrayList<>(cumulativeMtCodes); final HashMap finalMtCodeToOtherNameMap = new HashMap<>(mtCodeToOtherNameMap); + String finalRealUrl = realUrl; cumulativeFuture = CompletableFuture.supplyAsync(() -> { log.info("[线程-{}] 请求累计读数,点位数量: {}", Thread.currentThread().getName(), finalCumulativeMtCodes.size()); // http://192.168.1.80:5002/data/get_real - return fetchCumulativeData(finalCumulativeMtCodes, finalMtCodeToOtherNameMap, realUrl); + return fetchCumulativeData(finalCumulativeMtCodes, finalMtCodeToOtherNameMap, finalRealUrl); }, executor); } @@ -143,50 +155,49 @@ public class GetOtherSysDataJob { if (!powerMtCodes.isEmpty()) { final List finalPowerMtCodes = new ArrayList<>(powerMtCodes); final HashMap finalMtCodeToOtherNameMap = new HashMap<>(mtCodeToOtherNameMap); + String finalRealValuesUrl = realValuesUrl; powerFuture = CompletableFuture.supplyAsync(() -> { log.info("[线程-{}] 请求功率读数,点位数量: {}", Thread.currentThread().getName(), finalPowerMtCodes.size()); // http://192.168.1.80:5002/data/get_real_values - return fetchPowerData(finalPowerMtCodes, finalMtCodeToOtherNameMap, realValuesUrl); + return fetchPowerData(finalPowerMtCodes, finalMtCodeToOtherNameMap, finalRealValuesUrl); }, executor); } // 等待两个任务完成并合并结果 try { + List> cumulativeDatas = null; + List> powerDatas = null; + if (cumulativeFuture != null) { - List cumulativeDatas = cumulativeFuture.get(30, TimeUnit.SECONDS); - // 累计读数 - // cumulativeDatas.遍历计算得出机房总累计读数、主机总累计读数、冷冻泵总累计读数、冷却泵总累计读数、冷却塔总累计读数 - // 新建一个主机总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_CH"的value值,quality为0,value为cumulativeDatas中tag包含"主机*累计读数"的value和值 - // 新建一个冷冻泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_ChWPump"的value值,quality为0,value为cumulativeDatas中tag包含"冷冻泵*累计读数"的value和值 - // 新建一个冷却泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_CWPump"的value值,quality为0,value为cumulativeDatas中tag包含"冷却泵*累计读数"的value和值 - // 新建一个冷却塔总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_CT"的value值,quality为0,value为cumulativeDatas中tag包含"冷却塔*累计读数"的value和值 - // 新建一个机房总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal"的value值,quality为0,value为cumulativeDatas中tag包含"累计读数"的value和值 - // 瞬时功率 - // cumulativeDatas.遍历计算得出机房总瞬时功率、主机总瞬时功率、冷冻泵总瞬时功率、冷却泵总瞬时功率、冷却塔总瞬时功率 - // 新建一个主机总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"ChPower"的value值,quality为0,value为cumulativeDatas中tag包含"主机*瞬时功率"的value和值 - // 新建一个冷冻泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PriChWPPower"的value值,quality为0,value为cumulativeDatas中tag包含"冷冻泵*瞬时功率"的value和值 - // 新建一个冷却泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"CWPPower"的value值,quality为0,value为cumulativeDatas中tag包含"冷却泵*瞬时功率"的value和值 - // 新建一个冷却塔总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"CTPower"的value值,quality为0,value为cumulativeDatas中tag包含"冷却塔*瞬时功率"的value和值 - // 新建一个机房总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"Power"的value值,quality为0,value为cumulativeDatas中tag包含"瞬时功率"的value和值 - // 再插入到cumulativeDatas中 + cumulativeDatas = cumulativeFuture.get(30, TimeUnit.SECONDS); + log.info("累计读数获取完成,数据点数: {}", cumulativeDatas.size()); + } + + if (powerFuture != null) { + powerDatas = powerFuture.get(30, TimeUnit.SECONDS); + log.info("功率读数获取完成,数据点数: {}", powerDatas.size()); + } + + // 合并累计读数和功率读数后进行汇总计算 + if (cumulativeDatas != null && !cumulativeDatas.isEmpty()) { + // 将功率读数添加到累计读数列表中,以便一起进行汇总计算 + if (powerDatas != null && !powerDatas.isEmpty()) { + cumulativeDatas.addAll(powerDatas); + } + // 计算汇总数据并添加到cumulativeDatas(包括累计读数和瞬时功率的汇总) try { - // 计算汇总数据并添加到cumulativeDatas calculateAndAddSummaryData(cumulativeDatas, mtCodeToOtherNameMap); } catch (Exception e) { - log.error("累计读数汇总计算异常,但不影响后续流程", e); + log.error("数据汇总计算异常,但不影响后续流程", e); } allAdvantechDatas.addAll(cumulativeDatas); - log.info("累计读数获取完成,数据点数: {}", cumulativeDatas.size()); - } - - if (powerFuture != null) { - List powerDatas = powerFuture.get(30, TimeUnit.SECONDS); + } else if (powerDatas != null && !powerDatas.isEmpty()) { + // 如果只有功率读数,直接添加 allAdvantechDatas.addAll(powerDatas); - // 实时功率 - log.info("功率读数获取完成,数据点数: {}", powerDatas.size()); } + } catch (Exception e) { log.error("等待异步任务完成时异常", e); } @@ -215,7 +226,8 @@ public class GetOtherSysDataJob { * @param cumulativeDatas 累计读数数据列表 * @param mtCodeToOtherNameMap mtCode到otherName的映射关系 */ - private void calculateAndAddSummaryData(List cumulativeDatas, HashMap mtCodeToOtherNameMap) { + private void calculateAndAddSummaryData(List> cumulativeDatas, HashMap mtCodeToOtherNameMap) { + // 定义汇总类型枚举 enum SummaryType { CH_CUMULATIVE("主机", "累计读数", "PowerTotal_CH", "主机总累计读数"), @@ -286,7 +298,7 @@ public class GetOtherSysDataJob { } } - log.info("累计读数汇总完成,成功添加{}/{}个汇总数据点", successCount, SummaryType.values().length); + log.info("数据汇总完成,成功添加{}/{}个汇总数据点", successCount, SummaryType.values().length); } /** @@ -296,8 +308,8 @@ public class GetOtherSysDataJob { * @param realUrl 请求URL * @return 解析后的数据列表 */ - private List fetchCumulativeData(List mtCodes, HashMap mtCodeToOtherNameMap, String realUrl) { - List dataList = new ArrayList<>(); + private List> fetchCumulativeData(List mtCodes, HashMap mtCodeToOtherNameMap, String realUrl) { + List> dataList = new ArrayList<>(); try { JSONObject cumulativeRequest = new JSONObject(); cumulativeRequest.put("names", mtCodes); @@ -305,11 +317,11 @@ public class GetOtherSysDataJob { pointProperty.add("point_value"); cumulativeRequest.put("point_property", pointProperty); cumulativeRequest.put("proj_id", "1"); - + String cumulativeResponse = HttpUtils.sendPost(realUrl, cumulativeRequest.toJSONString()); - log.info("[线程-{}] 累计读数响应长度: {}", Thread.currentThread().getName(), + log.info("[线程-{}] 累计读数响应长度: {}", Thread.currentThread().getName(), cumulativeResponse != null ? cumulativeResponse.length() : 0); - + if (cumulativeResponse != null && !cumulativeResponse.isEmpty()) { JSONObject cumulativeJson = JSON.parseObject(cumulativeResponse); if (cumulativeJson.getBooleanValue("success") && cumulativeJson.containsKey("data")) { @@ -321,12 +333,11 @@ public class GetOtherSysDataJob { String valueStr = valueArray.getString(0); try { BigDecimal value = new BigDecimal(valueStr); - AdvantechDatas datas = new AdvantechDatas(); - // 使用otherName作为tag,如果不存在则使用mtCode + AdvantechDatas datas = new AdvantechDatas<>(); String tag = mtCodeToOtherNameMap.getOrDefault(mtCode, mtCode); datas.setTag(tag); datas.setValue(value); - datas.setQuality(0); + datas.setQuality(BigDecimal.valueOf(0)); dataList.add(datas); } catch (NumberFormatException e) { log.error("解析累计读数失败,mtCode: {}, value: {}", mtCode, valueStr, e); @@ -341,7 +352,8 @@ public class GetOtherSysDataJob { } return dataList; } - + + /** * 获取功率读数数据 * @@ -350,17 +362,17 @@ public class GetOtherSysDataJob { * @param realValuesUrl 请求URL * @return 解析后的数据列表 */ - private List fetchPowerData(List mtCodes, HashMap mtCodeToOtherNameMap, String realValuesUrl) { - List dataList = new ArrayList<>(); + private List> fetchPowerData(List mtCodes, HashMap mtCodeToOtherNameMap, String realValuesUrl) { + List> dataList = new ArrayList<>(); try { JSONObject powerRequest = new JSONObject(); powerRequest.put("expresss", mtCodes); powerRequest.put("proj_id", "1"); - + String powerResponse = HttpUtils.sendPost(realValuesUrl, powerRequest.toJSONString()); - log.info("[线程-{}] 功率读数响应长度: {}", Thread.currentThread().getName(), + log.info("[线程-{}] 功率读数响应长度: {}", Thread.currentThread().getName(), powerResponse != null ? powerResponse.length() : 0); - + if (powerResponse != null && !powerResponse.isEmpty()) { JSONObject powerJson = JSON.parseObject(powerResponse); if (powerJson.getBooleanValue("success") && powerJson.containsKey("data")) { @@ -370,12 +382,11 @@ public class GetOtherSysDataJob { String valueStr = dataObj.getString(mtCode); try { BigDecimal value = new BigDecimal(valueStr); - AdvantechDatas datas = new AdvantechDatas(); - // 使用otherName作为tag,如果不存在则使用mtCode + AdvantechDatas datas = new AdvantechDatas<>(); String tag = mtCodeToOtherNameMap.getOrDefault(mtCode, mtCode); datas.setTag(tag); datas.setValue(value); - datas.setQuality(0); + datas.setQuality(BigDecimal.valueOf(0)); dataList.add(datas); } catch (NumberFormatException e) { log.error("解析功率读数失败,mtCode: {}, value: {}", mtCode, valueStr, e); @@ -389,4 +400,5 @@ public class GetOtherSysDataJob { } return dataList; } + } diff --git a/mh-system/src/main/java/com/mh/system/mapper/overview/HomeMapper.java b/mh-system/src/main/java/com/mh/system/mapper/overview/HomeMapper.java index dcb2483..b0d114c 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/overview/HomeMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/overview/HomeMapper.java @@ -60,7 +60,7 @@ public interface HomeMapper { * @param otherNamePrefix other_name 前缀 * @return mt_num 列表 */ - @Select("SELECT mt_code FROM collection_params_manage WHERE grade = #{grade} AND mt_num LIKE CONCAT(#{otherNamePrefix}, '%') AND is_use = 0") + @Select("SELECT mt_code FROM collection_params_manage WHERE grade = #{grade} AND mt_num = #{otherNamePrefix} AND is_use = 0") List queryMtNumsByGradeAndOtherNamePrefix(@Param("grade") Integer grade, @Param("otherNamePrefix") String otherNamePrefix); diff --git a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java index fbae147..1c31f0c 100644 --- a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java @@ -109,17 +109,6 @@ public class EnergyAnalyzeServiceImpl implements EnergyAnalyzeService { HashMap::new )); List results = new ArrayList<>(); - for (String value : Constants.DEVICE_TYPE) { - ColumnFilter columnFilter = new ColumnFilter(); - columnFilter.setName(value); - if (result.containsKey(value)) { - columnFilter.setValue(String.valueOf(result.get(value).setScale(2, RoundingMode.HALF_UP))); - results.add(columnFilter); - } else { - columnFilter.setValue("0.00"); - results.add(columnFilter); - } - } // 查询各个冷水机组的 0-9 List chiller = createDeviceTypeData(deviceTypeEnergyEntities, 0, 0); @@ -162,6 +151,46 @@ public class EnergyAnalyzeServiceImpl implements EnergyAnalyzeService { List coolTowerData = getResultData(coolTower); + // results需要重新赋值,chillerData:主机,chillerPumpData:冷冻泵,coolPumpData:冷却泵,coolTowerData:冷却塔 + for (String value : Constants.DEVICE_TYPE) { + ColumnFilter columnFilter = new ColumnFilter(); + columnFilter.setName(value); + // 计算累积和 + if ("冷水机组(kwh)".equals(value)) { + BigDecimal sum = chillerData.stream() + .map(ColumnFilter::getValue) + .filter(v -> v != null && !v.isEmpty()) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + columnFilter.setValue(sum.setScale(2, RoundingMode.HALF_UP).toString()); + } else if ("冷冻泵(kwh)".equals(value)) { + BigDecimal sum = chillerPumpData.stream() + .map(ColumnFilter::getValue) + .filter(v -> v != null && !v.isEmpty()) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + columnFilter.setValue(sum.setScale(2, RoundingMode.HALF_UP).toString()); + } else if ("冷却泵(kwh)".equals(value)) { + BigDecimal sum = coolPumpData.stream() + .map(ColumnFilter::getValue) + .filter(v -> v != null && !v.isEmpty()) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + columnFilter.setValue(sum.setScale(2, RoundingMode.HALF_UP).toString()); + } else if ("冷却塔(kwh)".equals(value)) { + BigDecimal sum = coolTowerData.stream() + .map(ColumnFilter::getValue) + .filter(v -> v != null && !v.isEmpty()) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + columnFilter.setValue(sum.setScale(2, RoundingMode.HALF_UP).toString()); + } else { + columnFilter.setValue("0.00"); + } + results.add(columnFilter); + } + + JSONObject resultJson = new JSONObject(); resultJson.put("all", results); resultJson.put("chiller", chillerData); diff --git a/mh-system/src/main/java/com/mh/system/service/overview/impl/HomeServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/overview/impl/HomeServiceImpl.java index c6a1b35..612678f 100644 --- a/mh-system/src/main/java/com/mh/system/service/overview/impl/HomeServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/overview/impl/HomeServiceImpl.java @@ -95,7 +95,7 @@ public class HomeServiceImpl implements HomeService { List eleMtNums = safeList( homeMapper.queryMtNumsByGradeAndOtherNamePrefix(GRADE_CUMULATIVE, ON_POWER_CUMULATIVE_PREFIX)); // 过滤掉数组totalMeter的值 - eleMtNums.removeAll(totalMeter); +// eleMtNums.removeAll(totalMeter); List eleHistory = queryOrEmpty(() -> homeMapper.querySumHistoryByMtNums(tableName, eleMtNums)); resultMap.put("eleChart", buildSingleChart("设备总用电量", eleHistory)); @@ -112,8 +112,10 @@ public class HomeServiceImpl implements HomeService { resultMap.put("tempChart", buildChart(tempHistoryList)); // 3)设备瞬时功率:瞬时值(grade=140)所有非冷量表的电力设备汇总 +// List powerMtNums = safeList( +// homeMapper.queryMtNumsByGradeExcludeMtNumPrefix(GRADE_INSTANT, MT_COLD_PREFIX)); List powerMtNums = safeList( - homeMapper.queryMtNumsByGradeExcludeMtNumPrefix(GRADE_INSTANT, MT_COLD_PREFIX)); + homeMapper.queryMtNumsByGradeAndOtherNamePrefix(GRADE_INSTANT, ON_SYSTEM_POWER)); List powerHistory = queryOrEmpty(() -> homeMapper.querySumHistoryByMtNums(tableName, powerMtNums)); resultMap.put("eleRateChart", buildSingleChart("设备瞬时功率", powerHistory)); @@ -148,7 +150,7 @@ public class HomeServiceImpl implements HomeService { List eleMtNums = safeList( homeMapper.queryMtNumsByGradeAndOtherNamePrefix(GRADE_CUMULATIVE, ON_POWER_CUMULATIVE_PREFIX)); // 过滤掉数组totalMeter的值 - eleMtNums.removeAll(totalMeter); +// eleMtNums.removeAll(totalMeter); Map allCap = homeMapper.selectAllTypeCap(dayTable, coldMtNums); Map allEle = homeMapper.selectAllTypeEle(dayTable, eleMtNums); @@ -250,8 +252,11 @@ public class HomeServiceImpl implements HomeService { String tableName = "data_min" + year; // 实时总用电量:瞬时值(grade=140)所有电力设备最新 calc_value 之和 - List powerMtNums = safeList( - homeMapper.queryMtNumsByGradeExcludeMtNumPrefix(GRADE_INSTANT, MT_COLD_PREFIX)); +// List powerMtNums = safeList( +// homeMapper.queryMtNumsByGradeExcludeMtNumPrefix(GRADE_INSTANT, MT_COLD_PREFIX)); + // 直接取总累积 + String powerNum = "Power"; + List powerMtNums = Collections.singletonList(powerNum); double eleUsed = homeMapper.selectLastEle(tableName, powerMtNums); BigDecimal power = BigDecimal.valueOf(eleUsed).setScale(2, RoundingMode.HALF_UP);