Browse Source

1、大屏相关接口。

dev
mh 1 month ago
parent
commit
3a49dce85c
  1. 58
      mh-admin/src/main/java/com/mh/web/controller/comprehensive/BigScreenController.java
  2. 154
      mh-common/src/main/java/com/mh/common/core/domain/dto/BigScreenOverviewAndBasicDTO.java
  3. 72
      mh-system/src/main/java/com/mh/system/mapper/energy/BigScreenMapper.java
  4. 2
      mh-system/src/main/java/com/mh/system/mapper/energy/OverviewMapper.java
  5. 36
      mh-system/src/main/java/com/mh/system/service/overview/IBigScreenService.java
  6. 232
      mh-system/src/main/java/com/mh/system/service/overview/impl/BigScreenServiceImpl.java
  7. 16
      mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java

58
mh-admin/src/main/java/com/mh/web/controller/comprehensive/BigScreenController.java

@ -0,0 +1,58 @@
package com.mh.web.controller.comprehensive;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.vo.EnergyConsumptionVO;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.utils.DateUtils;
import com.mh.system.service.overview.IBigScreenService;
import org.springframework.web.bind.annotation.*;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 大屏接口分析记录
* @date 2025-03-21 11:43:11
*/
@RestController
@RequestMapping("/bigScreen")
public class BigScreenController extends BaseController {
private final IBigScreenService bigScreenService;
public BigScreenController(IBigScreenService bigScreenService) {
this.bigScreenService = bigScreenService;
}
/**
* 获取能耗总览和基本信息数据内容
* @return
*/
@PostMapping("/overview")
public TableDataInfo overview(@RequestBody EnergyConsumptionVO vo){
DateUtils.energyDateChange(vo);
return getDataTable(bigScreenService.overview(vo));
}
/**
* 获取子系统能耗
* @return
*/
@PostMapping("/subSystem")
public TableDataInfo subSystem(@RequestBody EnergyConsumptionVO vo){
DateUtils.energyDateChange(vo);
return getDataTable(bigScreenService.subSystem(vo));
}
/**
* 获取所有系统用电趋势
* @return
*/
@PostMapping("/systemTrend")
public TableDataInfo systemTrend(@RequestBody EnergyConsumptionVO vo){
DateUtils.energyDateChange(vo);
return getDataTable(bigScreenService.systemTrend(vo));
}
}

154
mh-common/src/main/java/com/mh/common/core/domain/dto/BigScreenOverviewAndBasicDTO.java

@ -0,0 +1,154 @@
package com.mh.common.core.domain.dto;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 能耗总览和基本信息
* @date 2025-03-21 14:06:49
*/
@Getter
public class BigScreenOverviewAndBasicDTO {
/**
* 总用电量
*/
private BigDecimal totalEle;
/**
* 总用水量
*/
private BigDecimal totalWater;
/**
* 总冷量
*/
private BigDecimal totalCold;
/**
* 总气量
*/
private BigDecimal totalGas;
/**
* 建筑面积
*/
private BigDecimal buildingArea;
/**
* 用电面积单耗
*/
private BigDecimal eleUnitArea;
/**
* 用水面积单耗
*/
private BigDecimal waterUnitArea;
/**
* 冷量面积单耗
*/
private BigDecimal coldUnitArea;
/**
* 气面积单耗
*/
private BigDecimal gasUnitArea;
/**
* 用电标准煤
*/
private BigDecimal eleStandardCoal;
/**
* 用水标准煤
*/
private BigDecimal waterStandardCoal;
/**
* 冷量标准煤
*/
private BigDecimal coldStandardCoal;
/**
* 气标准煤
*/
private BigDecimal gasStandardCoal;
public void setTotalEle(BigDecimal totalEle) {
this.totalEle = totalEle.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setTotalWater(BigDecimal totalWater) {
this.totalWater = totalWater.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setTotalCold(BigDecimal totalCold) {
this.totalCold = totalCold.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setTotalGas(BigDecimal totalGas) {
this.totalGas = totalGas.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setBuildingArea(BigDecimal buildingArea) {
this.buildingArea = buildingArea.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setEleUnitArea(BigDecimal eleUnitArea) {
this.eleUnitArea = eleUnitArea.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setWaterUnitArea(BigDecimal waterUnitArea) {
this.waterUnitArea = waterUnitArea.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setColdUnitArea(BigDecimal coldUnitArea) {
this.coldUnitArea = coldUnitArea.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setGasUnitArea(BigDecimal gasUnitArea) {
this.gasUnitArea = gasUnitArea.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setEleStandardCoal(BigDecimal eleStandardCoal) {
this.eleStandardCoal = eleStandardCoal.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setWaterStandardCoal(BigDecimal waterStandardCoal) {
this.waterStandardCoal = waterStandardCoal.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setColdStandardCoal(BigDecimal coldStandardCoal) {
this.coldStandardCoal = coldStandardCoal.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setGasStandardCoal(BigDecimal gasStandardCoal) {
this.gasStandardCoal = gasStandardCoal.setScale(2, BigDecimal.ROUND_HALF_UP);
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("totalEle", totalEle)
.append("totalWater", totalWater)
.append("totalCold", totalCold)
.append("totalGas", totalGas)
.append("buildingArea", buildingArea)
.append("eleUnitArea", eleUnitArea)
.append("waterUnitArea", waterUnitArea)
.append("coldUnitArea", coldUnitArea)
.append("gasUnitArea", gasUnitArea)
.append("eleStandardCoal", eleStandardCoal)
.append("waterStandardCoal", waterStandardCoal)
.append("coldStandardCoal", coldStandardCoal)
.append("gasStandardCoal", gasStandardCoal)
.toString();
}
}

72
mh-system/src/main/java/com/mh/system/mapper/energy/BigScreenMapper.java

@ -0,0 +1,72 @@
package com.mh.system.mapper.energy;
import com.mh.common.core.domain.entity.DataMonth;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 大屏sql查询
* @date 2025-03-21 14:46:18
*/
@Mapper
public interface BigScreenMapper {
@Select("<script>" +
"select coalesce(sum(dm.calc_value), 0) from ${tableName} dm " +
"where exists( " +
"select " +
" 1 " +
"from " +
" collection_params_manage cpm " +
"where " +
" cpm.param_type = #{paramType} " +
" and cpm.grade = #{grade} " +
" and cpm.mt_is_sum = #{mtIsSum} " +
" and cpm.mt_num = dm.device_num " +
"<if test='systemType != null and systemType != \"\"'>" +
" and cpm.system_type = #{systemType} " +
"</if>" +
" ) " +
" and dm.cur_time between #{startTime}::timestamp and #{endTime}::timestamp " +
"</script>")
BigDecimal selectOverviewData(@Param("tableName") String tableName,
@Param("paramType") String paramType,
@Param("startTime") String startTime,
@Param("endTime") String endTime,
@Param("mtIsSum") int mtIsSum,
@Param("grade") int grade,
@Param("systemType") String systemType);
@Select("<script>" +
"select * from ${tableName} dm " +
"where exists( " +
"select " +
" 1 " +
"from " +
" collection_params_manage cpm " +
"where " +
" cpm.param_type = #{paramType} " +
" and cpm.grade = #{grade} " +
" and cpm.mt_is_sum = #{mtIsSum} " +
" and cpm.mt_num = dm.device_num " +
"<if test='systemType != null and systemType != \"\"'>" +
" and cpm.system_type = #{systemType} " +
"</if>" +
" ) " +
" and dm.cur_time between #{startTime}::timestamp and #{endTime}::timestamp " +
"</script>")
List<DataMonth> selectDataByRangeTime(@Param("tableName") String tableName,
@Param("paramType") String paramType,
@Param("startTime") String startTime,
@Param("endTime") String endTime,
@Param("mtIsSum") int mtIsSum,
@Param("grade") int grade,
@Param("systemType") String systemType);
}

2
mh-system/src/main/java/com/mh/system/mapper/energy/OverviewMapper.java

@ -28,7 +28,7 @@ public interface OverviewMapper {
" <if test='deviceNums != null and deviceNums.size() > 0'>" + " <if test='deviceNums != null and deviceNums.size() > 0'>" +
" AND device_num IN " + " AND device_num IN " +
" <foreach collection='deviceNums' item='item' open='(' separator=',' close=')'>" + " <foreach collection='deviceNums' item='item' open='(' separator=',' close=')'>" +
" #{item.deviceNum} " + " #{item.mtNum} " +
" </foreach>" + " </foreach>" +
" </if>" + " </if>" +
"</script>") "</script>")

36
mh-system/src/main/java/com/mh/system/service/overview/IBigScreenService.java

@ -0,0 +1,36 @@
package com.mh.system.service.overview;
import com.mh.common.core.domain.vo.EnergyConsumptionVO;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 大屏相关服务类
* @date 2025-03-21 11:46:47
*/
public interface IBigScreenService {
/**
* 获取能耗总览数据
* @param vo
* @return
*/
List<?> overview(EnergyConsumptionVO vo);
/**
* 获取子系统能耗数据
* @param vo
* @return
*/
List<?> subSystem(EnergyConsumptionVO vo);
/**
* 获取系统能耗趋势
* @param vo
* @return
*/
List<?> systemTrend(EnergyConsumptionVO vo);
}

232
mh-system/src/main/java/com/mh/system/service/overview/impl/BigScreenServiceImpl.java

@ -0,0 +1,232 @@
package com.mh.system.service.overview.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mh.common.core.domain.ColumnFilter;
import com.mh.common.core.domain.dto.BigScreenOverviewAndBasicDTO;
import com.mh.common.core.domain.dto.OverviewEnergyDTO;
import com.mh.common.core.domain.entity.CollectionParamsManage;
import com.mh.common.core.domain.entity.DataMonth;
import com.mh.common.core.domain.entity.SysParams;
import com.mh.common.core.domain.vo.EnergyConsumptionVO;
import com.mh.common.utils.DateUtils;
import com.mh.system.mapper.SysParamsMapper;
import com.mh.system.mapper.device.CollectionParamsManageMapper;
import com.mh.system.mapper.energy.BigScreenMapper;
import com.mh.system.service.overview.IBigScreenService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 大屏实现类
* @date 2025-03-21 11:47:12
*/
@Service
public class BigScreenServiceImpl implements IBigScreenService {
private final CollectionParamsManageMapper collectionParamsManageMapper;
private final BigScreenMapper bigScreenMapper;
private final SysParamsMapper sysParamsMapper;
public BigScreenServiceImpl(CollectionParamsManageMapper collectionParamsManageMapper, BigScreenMapper bigScreenMapper, SysParamsMapper sysParamsMapper) {
this.collectionParamsManageMapper = collectionParamsManageMapper;
this.bigScreenMapper = bigScreenMapper;
this.sysParamsMapper = sysParamsMapper;
}
@Override
public List<?> overview(EnergyConsumptionVO vo) {
// 判断时间类型
String tableName = getTableName(vo);
// 查询总表的数据采集参数
String[] paramTypes = {"16", "17", "18", "19"};
BigScreenOverviewAndBasicDTO bigScreenOverviewAndBasicDTO = new BigScreenOverviewAndBasicDTO();
for (String paramType : paramTypes) {
int mtIsSum = queryCollectionParams(paramType, 40);
BigDecimal useValue = bigScreenMapper.selectOverviewData(tableName, paramType, vo.getStartTime(), vo.getEndTime(), mtIsSum, 40, null);
switch (paramType) {
case "16":
bigScreenOverviewAndBasicDTO.setTotalEle(useValue);
break;
case "17":
bigScreenOverviewAndBasicDTO.setTotalCold(useValue);
break;
case "18":
bigScreenOverviewAndBasicDTO.setTotalWater(useValue);
break;
case "19":
bigScreenOverviewAndBasicDTO.setTotalGas(useValue);
break;
default:
break;
}
}
// 换算标准煤
// 用电转换,公式:标准煤量(kgce)= 用电量(kWh)×0.1229
bigScreenOverviewAndBasicDTO.setEleStandardCoal(bigScreenOverviewAndBasicDTO.getTotalEle().multiply(new BigDecimal("0.1229")));
// 用冷转换,公式:标准煤量(kgce)= 3.6*用冷量(kW)➗29.3076
bigScreenOverviewAndBasicDTO.setColdStandardCoal(bigScreenOverviewAndBasicDTO.getTotalCold().multiply(new BigDecimal("3.6")).divide(new BigDecimal("29.3076")));
// 用水转换,公式:标准煤量(kgce)=用水量(吨)×0.0857
bigScreenOverviewAndBasicDTO.setWaterStandardCoal(bigScreenOverviewAndBasicDTO.getTotalWater().multiply(new BigDecimal("0.0857")));
// 用气转换,公式:标准煤量(kgce)=用蒸汽量(吨)×0.0948
bigScreenOverviewAndBasicDTO.setGasStandardCoal(bigScreenOverviewAndBasicDTO.getTotalGas().multiply(new BigDecimal("0.0948")));
// 获取建筑面积
List<SysParams> sysParams = sysParamsMapper.selectSysParamsList();
if (!sysParams.isEmpty()) {
bigScreenOverviewAndBasicDTO.setBuildingArea(new BigDecimal(sysParams.get(0).getBuildingArea()));
// 计算单位面积能耗
// 用电转换,公式:单位面积能耗(kWh/m2)=用电量(kWh)➗建筑面积(m2)
bigScreenOverviewAndBasicDTO.setEleUnitArea(bigScreenOverviewAndBasicDTO.getTotalEle().divide(bigScreenOverviewAndBasicDTO.getBuildingArea()));
// 用冷转换,公式:单位面积能耗(kWh/m2)=用冷量(kW)➗建筑面积(m2)
bigScreenOverviewAndBasicDTO.setColdUnitArea(bigScreenOverviewAndBasicDTO.getTotalCold().divide(bigScreenOverviewAndBasicDTO.getBuildingArea()));
// 用水转换,公式:单位面积能耗(kWh/m2)=用水量(吨)➗建筑面积(m2)
bigScreenOverviewAndBasicDTO.setWaterUnitArea(bigScreenOverviewAndBasicDTO.getTotalWater().divide(bigScreenOverviewAndBasicDTO.getBuildingArea()));
// 用气转换,公式:单位面积能耗(kWh/m2)=用蒸汽量(吨)➗建筑面积(m2)
bigScreenOverviewAndBasicDTO.setGasUnitArea(bigScreenOverviewAndBasicDTO.getTotalGas().divide(bigScreenOverviewAndBasicDTO.getBuildingArea()));
}
return List.of(bigScreenOverviewAndBasicDTO);
}
private int queryCollectionParams(String paramType, int grade) {
QueryWrapper<CollectionParamsManage> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("param_type", paramType)
.eq("grade", grade);
// 先查询总表
queryWrapper.eq("mt_is_sum", 0);
Long count = collectionParamsManageMapper.selectCount(queryWrapper);
if (count > 0) {
return 0;
}
// 查询分表
return 1;
}
@Override
public List<?> subSystem(EnergyConsumptionVO vo) {
// 判断时间类型
String tableName = getTableName(vo);
// 查询总表的数据采集参数
String[] paramTypes = {"16", "17"};
if (vo.getSystemType().equals("1")) {
paramTypes = new String[]{"16", "18"};
}
HashMap<String, BigDecimal> mapData = new HashMap<>();
for (String paramType : paramTypes) {
int mtIsSum = queryCollectionParams(paramType, 40);
BigDecimal useValue = bigScreenMapper.selectOverviewData(tableName, paramType, vo.getStartTime(), vo.getEndTime(), mtIsSum, 40, vo.getSystemType());
switch (paramType) {
case "16":
mapData.put("totalEle", useValue);
break;
case "17":
mapData.put("totalCold", useValue);
break;
case "18":
mapData.put("totalWater", useValue);
break;
default:
break;
}
}
// 判断冷量为0或者电量为0,直接赋值0.00
if (vo.getSystemType().equals("0")) {
if (mapData.get("totalCold").compareTo(BigDecimal.ZERO) == 0 || mapData.get("totalEle").compareTo(BigDecimal.ZERO) == 0) {
mapData.put("eer", BigDecimal.ZERO);
} else {
mapData.put("eer", mapData.get("totalCold").divide(mapData.get("totalEle"), 2, BigDecimal.ROUND_HALF_UP));
}
} else if (vo.getSystemType().equals("1")) {
if (mapData.get("totalWater").compareTo(BigDecimal.ZERO) == 0 || mapData.get("totalEle").compareTo(BigDecimal.ZERO) == 0) {
mapData.put("eer", BigDecimal.ZERO);
} else {
mapData.put("eer", mapData.get("totalEle").divide(mapData.get("totalWater"), 2, BigDecimal.ROUND_HALF_UP));
}
}
return List.of(mapData);
}
private static String getTableName(EnergyConsumptionVO vo) {
String tableName = "data_min" + vo.getStartTime().substring(0, 4);
switch (vo.getTimeType()) {
case "year":
tableName = "data_year";
break;
case "month":
tableName = "data_month";
break;
case "day":
tableName = "data_min" + vo.getStartTime().substring(0, 4);
break;
default:
break;
}
return tableName;
}
@Override
public List<?> systemTrend(EnergyConsumptionVO vo) {
String tableName = "data_hour" + vo.getStartTime().substring(0, 4);
String dateFormat = "yyyy-MM-dd HH";
switch (vo.getTimeType()) {
case "year":
tableName = "data_month";
dateFormat = "yyyy-MM";
break;
case "month":
tableName = "data_day";
dateFormat = "yyyy-MM-dd";
break;
case "day":
tableName = "data_hour" + vo.getStartTime().substring(0, 4);
break;
default:
break;
}
String paramType = "16";
int mtIsSum = queryCollectionParams(paramType, 40);
List<DataMonth> dataList = bigScreenMapper.selectDataByRangeTime(tableName, paramType, vo.getStartTime(), vo.getEndTime(), mtIsSum, 40, null);
List<OverviewEnergyDTO> result = new ArrayList<>();
OverviewEnergyDTO ele = new OverviewEnergyDTO();
if (dataList == null || dataList.isEmpty()) {
return List.of(result);
}
// dataList使用stream流根据时间分组排序,dataMonth.calcValue求和,并根据时间升序排序
String finalDateFormat = dateFormat;
Map<String, List<DataMonth>> groupedData = dataList.stream()
.collect(Collectors.groupingBy(val -> DateUtils.dateToString(val.getCurTime(), finalDateFormat)));
// 根据时间分组,求和取总和,再根据时间升序排序
// 使用LinkedHashMap保持时间顺序
LinkedHashMap<String, Double> eleMap = dataList.stream()
.sorted(Comparator.comparing(val->DateUtils.dateToString(val.getCurTime(), finalDateFormat))) // 按时间字段排序
.collect(Collectors.groupingBy(
val->DateUtils.dateToString(val.getCurTime(), finalDateFormat),
LinkedHashMap::new,
Collectors.summingDouble(value ->
value.getCalcValue().doubleValue())
));
// 提取时间序列和数值序列
String[] timeArray = eleMap.keySet().toArray(new String[0]);
String[] valueArray = eleMap.values().stream()
.map(d -> String.format("%.2f", d)) // 保留两位小数
.toArray(String[]::new);
// 设置到对象中
ele.setName("耗电趋势");
ele.setUnit("kwh");
ele.setTimeStr(timeArray);
ele.setData(valueArray);
result.add(ele);
return result;
}
}

16
mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java

@ -364,23 +364,23 @@ public class ProOverviewServiceImpl implements IProOverviewService {
List<CollectionParamsManage> collectionParamsManages = collectionParamsManageMapper.selectList(queryWrapper); List<CollectionParamsManage> collectionParamsManages = collectionParamsManageMapper.selectList(queryWrapper);
// 遍历计算得出总用电量 // 遍历计算得出总用电量
collectionParamsManages.forEach(collectionParamsManage -> { collectionParamsManages.forEach(collectionParamsManage -> {
BigDecimal curValue = collectionParamsManage.getCurValue() == null ? BigDecimal.ZERO : collectionParamsManage.getCurValue();
BigDecimal mtInitValue = collectionParamsManage.getMtInitValue() == null ? BigDecimal.ZERO : collectionParamsManage.getMtInitValue();
BigDecimal mtRatio = collectionParamsManage.getMtRatio() == null ? BigDecimal.ZERO : BigDecimal.valueOf(collectionParamsManage.getMtRatio());
BigDecimal multiply = (curValue.subtract(mtInitValue)).multiply(mtRatio);
// TODO // TODO
switch (Integer.parseInt(paramType)) { switch (Integer.parseInt(paramType)) {
case 16: case 16:
totalEle.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) totalEle.add(multiply);
.multiply(new BigDecimal(collectionParamsManage.getMtRatio())));
break; break;
case 17: case 17:
totalCold.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) totalCold.add(multiply);
.multiply(new BigDecimal(collectionParamsManage.getMtRatio())));
break; break;
case 18: case 18:
totalWater.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) totalWater.add(multiply);
.multiply(new BigDecimal(collectionParamsManage.getMtRatio())));
break; break;
case 19: case 19:
totalGas.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) totalGas.add(multiply);
.multiply(new BigDecimal(collectionParamsManage.getMtRatio())));
break; break;
default: default:
break; break;

Loading…
Cancel
Save