From 457b3ef95a38ed50f80e04abbe9d66e5e7ae2dc1 Mon Sep 17 00:00:00 2001 From: "3067418132@qq.com" Date: Wed, 29 Apr 2026 17:26:59 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=84=B1=E7=A1=AB=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E3=80=81=E7=94=A8=E9=87=8F=E5=88=86=E6=9E=90?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../energy/FgdScrEnergyAnalyzeController.java | 37 ++++ .../energy/FgdScrEnergyQueryMapper.java | 209 ++++++++++++++++++ .../energy/IFdgScrEnergyQueryService.java | 22 ++ .../impl/FdgScrEnergyQueryServiceImpl.java | 198 +++++++++++++++++ .../overview/impl/ProOverviewServiceImpl.java | 25 +++ 5 files changed, 491 insertions(+) create mode 100644 mh-admin/src/main/java/com/mh/web/controller/energy/FgdScrEnergyAnalyzeController.java create mode 100644 mh-system/src/main/java/com/mh/system/mapper/energy/FgdScrEnergyQueryMapper.java create mode 100644 mh-system/src/main/java/com/mh/system/service/energy/IFdgScrEnergyQueryService.java create mode 100644 mh-system/src/main/java/com/mh/system/service/energy/impl/FdgScrEnergyQueryServiceImpl.java diff --git a/mh-admin/src/main/java/com/mh/web/controller/energy/FgdScrEnergyAnalyzeController.java b/mh-admin/src/main/java/com/mh/web/controller/energy/FgdScrEnergyAnalyzeController.java new file mode 100644 index 0000000..728fe0b --- /dev/null +++ b/mh-admin/src/main/java/com/mh/web/controller/energy/FgdScrEnergyAnalyzeController.java @@ -0,0 +1,37 @@ +package com.mh.web.controller.energy; + +import com.mh.common.core.controller.BaseController; +import com.mh.common.core.domain.AjaxResult; +import com.mh.common.core.domain.vo.EnergyQueryVO; +import com.mh.system.service.energy.IEnergyQueryService; +import com.mh.system.service.energy.IFdgScrEnergyQueryService; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 脱硫脱硝系统能效分析controller + * @date 2026-04-29 14:43:45 + */ +@RestController +@RequestMapping("/fgdScr/energy") +public class FgdScrEnergyAnalyzeController extends BaseController { + + @Resource + private IFdgScrEnergyQueryService fdgScrEnergyQueryService; + + /** + * 整体脱硫系统图形,表格数据查询(公用一个接口) + * @param page + * @return + */ + @PostMapping("/sys/query") + public AjaxResult sysQuery(@RequestBody EnergyQueryVO page) { + return fdgScrEnergyQueryService.sysQuery(page); + } +} diff --git a/mh-system/src/main/java/com/mh/system/mapper/energy/FgdScrEnergyQueryMapper.java b/mh-system/src/main/java/com/mh/system/mapper/energy/FgdScrEnergyQueryMapper.java new file mode 100644 index 0000000..f88c6c8 --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/mapper/energy/FgdScrEnergyQueryMapper.java @@ -0,0 +1,209 @@ +package com.mh.system.mapper.energy; + +import com.mh.common.core.domain.entity.ConsumptionAnalyze; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 脱硫脱硝能耗查询 + * @date 2026-04-29 15:10:09 + */ +public interface FgdScrEnergyQueryMapper { + @Select("") + List queryOneTable(@Param("startTime") String startTime, + @Param("endTime") String endTime, + @Param("lastTableName") String lastTableName, + @Param("curTableName") String curTableName, + @Param("len") String dateLen, + @Param("paramType") String paramType, + @Param("haveLoadCell") boolean haveLoadCell, + @Param("haveSO2") boolean haveSO2, + @Param("systemType") String systemType); + + + /** + * 跨表查询操作 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param lastTableName 上一个表名 + * @param curTableName 当前表名 + * @return + */ + @Select("") + List queryManyTable(@Param("startTime") String startTime, + @Param("endTime") String endTime, + @Param("lastTableName") String lastTableName, + @Param("curTableName") String curTableName, + @Param("len") String dateLen, + @Param("paramType") String paramType, + @Param("haveMeter") boolean haveMeter, + @Param("haveCloud") boolean haveCloud, + @Param("systemType") String systemType); + +} diff --git a/mh-system/src/main/java/com/mh/system/service/energy/IFdgScrEnergyQueryService.java b/mh-system/src/main/java/com/mh/system/service/energy/IFdgScrEnergyQueryService.java new file mode 100644 index 0000000..b8140e3 --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/energy/IFdgScrEnergyQueryService.java @@ -0,0 +1,22 @@ +package com.mh.system.service.energy; + +import com.mh.common.core.domain.AjaxResult; +import com.mh.common.core.domain.vo.EnergyQueryVO; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 脱硫脱硝系统能效查询 + * @date 2026-04-29 15:06:15 + */ +public interface IFdgScrEnergyQueryService { + + /** + * 能源查询 + * @param page + * @return + */ + AjaxResult sysQuery(EnergyQueryVO page); + +} diff --git a/mh-system/src/main/java/com/mh/system/service/energy/impl/FdgScrEnergyQueryServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/energy/impl/FdgScrEnergyQueryServiceImpl.java new file mode 100644 index 0000000..c67f89f --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/energy/impl/FdgScrEnergyQueryServiceImpl.java @@ -0,0 +1,198 @@ +package com.mh.system.service.energy.impl; + +import com.mh.common.core.domain.AjaxResult; +import com.mh.common.core.domain.entity.ConsumptionAnalyze; +import com.mh.common.core.domain.vo.EnergyQueryVO; +import com.mh.common.utils.DateUtils; +import com.mh.system.mapper.device.CollectionParamsManageMapper; +import com.mh.system.mapper.energy.FgdScrEnergyQueryMapper; +import com.mh.system.service.energy.IFdgScrEnergyQueryService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 脱硫脱硝能效查询 + * @date 2026-04-29 15:07:42 + */ +@Slf4j +@Service +public class FdgScrEnergyQueryServiceImpl implements IFdgScrEnergyQueryService { + + private final CollectionParamsManageMapper collectionParamsManageMapper; + + private final FgdScrEnergyQueryMapper fgdScrEnergyQueryMapper; + + public FdgScrEnergyQueryServiceImpl(CollectionParamsManageMapper collectionParamsManageMapper, FgdScrEnergyQueryMapper fgdScrEnergyQueryMapper) { + this.collectionParamsManageMapper = collectionParamsManageMapper; + this.fgdScrEnergyQueryMapper = fgdScrEnergyQueryMapper; + } + + + @Override + public AjaxResult sysQuery(EnergyQueryVO vo) { + DateUtils.sysEnergyDateChange(vo); + // 获取参数 + AtomicReference lastTableName = new AtomicReference<>("data_" + vo.getTimeType()); + AtomicReference curTableName = new AtomicReference<>("data_" + vo.getTimeType()); + String timeType = vo.getTimeType(); + // 判断是否有总表 + boolean haveLoadCell = collectionParamsManageMapper.selectSummary(40, "32") != 0; + boolean haveSO2 = false; + if ("min".equals(timeType)) { + haveSO2 = true; + } + List consumptionAnalyzeEntities = null; + // 表格数据 + if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { + // 单表 + consumptionAnalyzeEntities = fgdScrEnergyQueryMapper.queryOneTable(vo.getStartTime(), + vo.getEndTime(), + lastTableName.get(), + curTableName.get(), + DateUtils.getTimeLen(vo.getTimeType()), + null, + haveLoadCell, + haveSO2, + vo.getSystemType()); + } else { + lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); + curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); + if (lastTableName.get().equalsIgnoreCase(curTableName.get())) { + // 单表 + consumptionAnalyzeEntities = fgdScrEnergyQueryMapper.queryOneTable(vo.getStartTime(), + vo.getEndTime(), + lastTableName.get(), + curTableName.get(), + DateUtils.getTimeLen(vo.getTimeType()), + null, + haveLoadCell, + haveSO2, + vo.getSystemType()); + } else { + // 多表 + consumptionAnalyzeEntities = fgdScrEnergyQueryMapper.queryManyTable(vo.getStartTime(), + vo.getEndTime(), + lastTableName.get(), + curTableName.get(), + DateUtils.getTimeLen(vo.getTimeType()), + null, + haveLoadCell, + haveSO2, + vo.getSystemType()); + } + } + if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.isEmpty()) { + return AjaxResult.success(); + } + // 分组并按时间排序操作,拿到冷量记和电表数据 + Map> collect = consumptionAnalyzeEntities.stream() + .parallel() + .collect(Collectors.groupingBy(ConsumptionAnalyze::getDeviceType, HashMap::new, Collectors + .collectingAndThen(Collectors.toList(), + list -> list.stream().sorted(Comparator.comparing(ConsumptionAnalyze::getTimeStr)).collect(Collectors.toList())))); + List so1Data = new ArrayList<>(); + List so2Data = new ArrayList<>(); + List loadCellData = new ArrayList<>(); + for (Map.Entry> nmap : collect.entrySet()) { + // 获取二氧化硫传感器的值 + if (haveSO2) { + if (nmap.getKey().equalsIgnoreCase("so1")) { + so1Data = nmap.getValue(); + } + if (nmap.getKey().equalsIgnoreCase("so2")) { + so2Data = nmap.getValue(); + } + } + // 获取称重传感器的值 + if (nmap.getKey().equalsIgnoreCase("loadCell")) { + loadCellData = nmap.getValue(); + } + } + String[] loadCellDataArr = loadCellData.stream() + .map(ConsumptionAnalyze::getCurValue) + .toArray(String[]::new); + String[] timeStrArr = loadCellData.stream() + .map(ConsumptionAnalyze::getTimeStr) + .toArray(String[]::new); + String[] so1Arr = so1Data.stream() + .map(ConsumptionAnalyze::getCurValue) + .toArray(String[]::new); + String[] so2Arr = so2Data.stream() + .map(ConsumptionAnalyze::getCurValue) + .toArray(String[]::new); + // 表格数据 + Map map = new HashMap<>(); + int pageNum = vo.getPageNum(); + int pageSize = vo.getPageSize(); + if (pageNum == 0) { + map.put("loadCellDataArr", loadCellDataArr); + if (haveSO2) { + map.put("so1Arr", so1Arr); + map.put("so2Arr", so2Arr); + } + map.put("timeStrArr", timeStrArr); + } else { + int startIndex = (pageNum - 1) * pageSize; + int endIndex = Math.min(pageNum * pageSize, loadCellDataArr.length); + if (startIndex > endIndex) { + return AjaxResult.success(); + } + map.put("loadCellDataArr", Arrays.copyOfRange(loadCellDataArr, startIndex, endIndex)); + if (haveSO2) { + map.put("so1Arr", Arrays.copyOfRange(so1Arr, startIndex, endIndex)); + map.put("so2Arr", Arrays.copyOfRange(so2Arr, startIndex, endIndex)); + } + map.put("timeStrArr", Arrays.copyOfRange(timeStrArr, startIndex, endIndex)); + } + map.put("total", timeStrArr.length); + + // 组装赋值 + List> listData = new ArrayList<>(); + if (haveSO2) { + Map so1 = new HashMap<>(); + so1.put("so1", map.get("so1Arr")); + listData.add(so1); + Map so2 = new HashMap<>(); + so2.put("so2", map.get("so2Arr")); + listData.add(so2); + } + Map loadCell = new HashMap<>(); + loadCell.put("loadCell", map.get("loadCellDataArr")); + listData.add(loadCell); + String[] titleArr = new String[]{"loadCell"}; + if (haveSO2) { + titleArr = new String[]{"so1", "so2", "loadCell"}; + } + Map titles = new HashMap<>(); + titles.put("titleArr", titleArr); + listData.add(titles); + Map timeStr = new HashMap<>(); + timeStr.put("timeStrArr", map.get("timeStrArr")); + listData.add(timeStr); + Map total = new HashMap<>(); + total.put("total", map.get("total")); + listData.add(total); + return AjaxResult.success(listData); + } + + private static String[] getArr(List copLineData, String[] lineTimeStrArr) { + String[] lineCopArr = new String[lineTimeStrArr.length]; + for (int i = 0; i < lineTimeStrArr.length; i++) { + int j = i; + Optional first = copLineData.stream().filter(s -> lineTimeStrArr[j].equalsIgnoreCase(s.getTimeStr())).findFirst(); + if (first.isPresent()) { + lineCopArr[i] = first.get().getCurValue(); + } else { + lineCopArr[i] = "0.00"; + } + } + return lineCopArr; + } +} diff --git a/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java index f9bd2b0..b5bbdbe 100644 --- a/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java @@ -218,6 +218,31 @@ public class ProOverviewServiceImpl implements IProOverviewService { case 5: // 园林照明控制系统 break; + case 8: + // 脱硫系统 + List sulfurParams = queryCollectionParams("4", "8", 140, "31", true); + // stream流判断时间cur_time是否是今天,如果是今天则判断在线,不是则判断离线 + if (sulfurParams != null && !sulfurParams.isEmpty()) { + // 获取1号SO2浓度传感器 + CollectionParamsManage sulfurParam = sulfurParams.stream() + .filter(param -> param.getOrderNum() != null + && param.getOrderNum() == 1) + .findFirst() + .orElse(null); + // 获取2号SO2浓度传感器 + CollectionParamsManage sulfurParam2 = sulfurParams.stream() + .filter(param -> param.getOrderNum() != null + && param.getOrderNum() == 2) + .findFirst() + .orElse(null); + ColumnFilter onlineColumn = new ColumnFilter("反应前SO2浓度", sulfurParam != null ? sulfurParam.getCurValue().toString() : "--"); + ColumnFilter offlineColumn = new ColumnFilter("反应后SO2浓度", sulfurParam2 != null ? sulfurParam2.getCurValue().toString() : "--"); + DeviceMonitorDTO deviceMonitorDTO4 = new DeviceMonitorDTO(); + deviceMonitorDTO4.setName(sysDictData.getDictLabel()); + deviceMonitorDTO4.setValues(Stream.of(onlineColumn, offlineColumn).collect(Collectors.toList())); + deviceMonitorDTOList.add(deviceMonitorDTO4); + } + break; } } return deviceMonitorDTOList;