8 changed files with 450 additions and 1 deletions
@ -0,0 +1,58 @@ |
|||||||
|
package com.mh.web.controller.comprehensive; |
||||||
|
|
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.system.service.ISysParamsService; |
||||||
|
import com.mh.system.service.overview.IProOverviewService; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 项目总览 |
||||||
|
* @date 2025-03-19 11:08:41 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/pro/overview") |
||||||
|
public class ProOverviewController extends BaseController { |
||||||
|
|
||||||
|
private final ISysParamsService sysParamsService; |
||||||
|
|
||||||
|
private final IProOverviewService proOverviewService; |
||||||
|
|
||||||
|
public ProOverviewController(ISysParamsService sysParamsService, IProOverviewService proOverviewService) { |
||||||
|
this.sysParamsService = sysParamsService; |
||||||
|
this.proOverviewService = proOverviewService; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取项目简介 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping("/introduction") |
||||||
|
public TableDataInfo introduction() { |
||||||
|
return getDataTable(sysParamsService.queryList()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取项目概况 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping("/profile") |
||||||
|
public TableDataInfo profile() { |
||||||
|
return getDataTable(proOverviewService.getProProfile()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取能耗分析:查询最近12个月的能耗数据 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping("energyAnalysis") |
||||||
|
public TableDataInfo energyAnalysis() { |
||||||
|
return getDataTable(proOverviewService.energyAnalysis()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import lombok.Getter; |
||||||
|
import lombok.Setter; |
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 项目总览能耗分析 |
||||||
|
* @date 2025-03-19 17:43:24 |
||||||
|
*/ |
||||||
|
@Setter |
||||||
|
@Getter |
||||||
|
public class OverviewEnergyDTO { |
||||||
|
|
||||||
|
private String name; |
||||||
|
|
||||||
|
private String[] data; |
||||||
|
|
||||||
|
private String[] timeStr; |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return new ToStringBuilder(this) |
||||||
|
.append("name", name) |
||||||
|
.append("data", data) |
||||||
|
.append("timeStr", timeStr) |
||||||
|
.toString(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,86 @@ |
|||||||
|
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-19 11:43:26 |
||||||
|
*/ |
||||||
|
@Setter |
||||||
|
@Getter |
||||||
|
public class ProProfileDTO { |
||||||
|
|
||||||
|
/** |
||||||
|
* 总耗电量 |
||||||
|
*/ |
||||||
|
private BigDecimal totalEle; |
||||||
|
|
||||||
|
/** |
||||||
|
* 总冷量 |
||||||
|
*/ |
||||||
|
private BigDecimal totalCold; |
||||||
|
|
||||||
|
/** |
||||||
|
* z总用水量 |
||||||
|
*/ |
||||||
|
private BigDecimal totalWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 总用气量 |
||||||
|
*/ |
||||||
|
private BigDecimal totalGas; |
||||||
|
|
||||||
|
/** |
||||||
|
* 年耗电量 |
||||||
|
*/ |
||||||
|
private BigDecimal yearEle; |
||||||
|
|
||||||
|
/** |
||||||
|
* 总冷量 |
||||||
|
*/ |
||||||
|
private BigDecimal yearCold; |
||||||
|
|
||||||
|
/** |
||||||
|
* 年用水量 |
||||||
|
*/ |
||||||
|
private BigDecimal yearWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 年用气量 |
||||||
|
*/ |
||||||
|
private BigDecimal yearGas; |
||||||
|
|
||||||
|
public ProProfileDTO() { |
||||||
|
} |
||||||
|
|
||||||
|
public ProProfileDTO(BigDecimal totalEle, BigDecimal totalCold, BigDecimal totalWater, BigDecimal totalGas, BigDecimal yearEle, BigDecimal yearCold, BigDecimal yearWater, BigDecimal yearGas) { |
||||||
|
this.totalEle = totalEle.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
this.totalCold = totalCold.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
this.totalWater = totalWater.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
this.totalGas = totalGas.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
this.yearEle = yearEle.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
this.yearCold = yearCold.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
this.yearWater = yearWater.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
this.yearGas = yearGas.setScale(2, BigDecimal.ROUND_HALF_UP); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return new ToStringBuilder(this) |
||||||
|
.append("totalEle", totalEle) |
||||||
|
.append("totalCold", totalCold) |
||||||
|
.append("totalWater", totalWater) |
||||||
|
.append("totalGas", totalGas) |
||||||
|
.append("yearEle", yearEle) |
||||||
|
.append("yearWater", yearWater) |
||||||
|
.append("yearGas", yearGas) |
||||||
|
.toString(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.mh.system.mapper.energy; |
||||||
|
|
||||||
|
import com.mh.common.core.domain.entity.ChillersEntity; |
||||||
|
import com.mh.common.core.domain.entity.CollectionParamsManage; |
||||||
|
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 项目总览 |
||||||
|
* @date 2025-03-19 16:37:22 |
||||||
|
*/ |
||||||
|
@Mapper |
||||||
|
public interface OverviewMapper { |
||||||
|
|
||||||
|
@Select("<script>" + |
||||||
|
"select sum(calc_value) as calc_value from data_year where " + |
||||||
|
" cur_time >= DATE_TRUNC('year', CURRENT_DATE)" + |
||||||
|
" AND cur_time < DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '1 year'" + |
||||||
|
" <if test='deviceNums != null and deviceNums.size() > 0'>" + |
||||||
|
" AND device_num IN " + |
||||||
|
" <foreach collection='deviceNums' item='item' open='(' separator=',' close=')'>" + |
||||||
|
" #{item.deviceNum} " + |
||||||
|
" </foreach>" + |
||||||
|
" </if>" + |
||||||
|
"</script>") |
||||||
|
BigDecimal queryByDeviceNum(@Param("deviceNums") List<CollectionParamsManage> deviceNums); |
||||||
|
|
||||||
|
@Select("<script>" + |
||||||
|
"WITH months AS ( " + |
||||||
|
" SELECT " + |
||||||
|
" to_char(generate_series( " + |
||||||
|
" date_trunc('month', CURRENT_DATE) - INTERVAL '11 months', " + |
||||||
|
" date_trunc('month', CURRENT_DATE), " + |
||||||
|
" '1 month' " + |
||||||
|
" ), 'YYYY-MM') AS month " + |
||||||
|
") " + |
||||||
|
"SELECT " + |
||||||
|
" m.month, " + |
||||||
|
" COALESCE(SUM(dm.calc_value), 0) AS calc_value_sum " + |
||||||
|
"FROM months m " + |
||||||
|
"LEFT JOIN data_month dm " + |
||||||
|
" ON to_char(dm.cur_time, 'YYYY-MM') = m.month " + |
||||||
|
" <if test='deviceNums != null and deviceNums.size() > 0'>" + |
||||||
|
" AND dm.device_num IN " + |
||||||
|
" <foreach collection='deviceNums' item='item' open='(' separator=',' close=')'>" + |
||||||
|
" #{item.deviceNum} " + |
||||||
|
" </foreach>" + |
||||||
|
" </if>" + |
||||||
|
" AND dm.cur_time >= date_trunc('month', CURRENT_DATE) - INTERVAL '11 months' " + |
||||||
|
"WHERE m.month <= to_char(CURRENT_DATE, 'YYYY-MM') " + |
||||||
|
"GROUP BY m.month " + |
||||||
|
"ORDER BY m.month; " + |
||||||
|
"</script>") |
||||||
|
List<ChillersEntity> energyAnalysis(@Param("deviceNums") List<CollectionParamsManage> deviceNums); |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.mh.system.service.overview; |
||||||
|
|
||||||
|
import com.mh.common.core.domain.dto.OverviewEnergyDTO; |
||||||
|
import com.mh.common.core.domain.dto.ProProfileDTO; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 项目总览 |
||||||
|
* @date 2025-03-19 11:40:47 |
||||||
|
*/ |
||||||
|
public interface IProOverviewService { |
||||||
|
|
||||||
|
List<ProProfileDTO> getProProfile(); |
||||||
|
|
||||||
|
List<OverviewEnergyDTO> energyAnalysis(); |
||||||
|
} |
@ -0,0 +1,166 @@ |
|||||||
|
package com.mh.system.service.overview.impl; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.mh.common.core.domain.dto.OverviewEnergyDTO; |
||||||
|
import com.mh.common.core.domain.dto.ProProfileDTO; |
||||||
|
import com.mh.common.core.domain.entity.ChillersEntity; |
||||||
|
import com.mh.common.core.domain.entity.CollectionParamsManage; |
||||||
|
import com.mh.common.core.domain.entity.SysDictData; |
||||||
|
import com.mh.system.mapper.SysDictDataMapper; |
||||||
|
import com.mh.system.mapper.device.CollectionParamsManageMapper; |
||||||
|
import com.mh.system.mapper.energy.OverviewMapper; |
||||||
|
import com.mh.system.service.overview.IProOverviewService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 项目总览服务实现类 |
||||||
|
* @date 2025-03-19 15:44:31 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class ProOverviewServiceImpl implements IProOverviewService { |
||||||
|
|
||||||
|
private final CollectionParamsManageMapper collectionParamsManageMapper; |
||||||
|
|
||||||
|
private final SysDictDataMapper sysDictDataMapper; |
||||||
|
|
||||||
|
private final OverviewMapper overviewMapper; |
||||||
|
|
||||||
|
public ProOverviewServiceImpl(CollectionParamsManageMapper collectionParamsManageMapper, SysDictDataMapper sysDictDataMapper, OverviewMapper overviewMapper) { |
||||||
|
this.collectionParamsManageMapper = collectionParamsManageMapper; |
||||||
|
this.sysDictDataMapper = sysDictDataMapper; |
||||||
|
this.overviewMapper = overviewMapper; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<OverviewEnergyDTO> energyAnalysis() { |
||||||
|
List<ChillersEntity> dataList = overviewMapper.energyAnalysis(null); |
||||||
|
return List.of(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<ProProfileDTO> getProProfile() { |
||||||
|
// 请求各个系统中有没有对应的总表,如果有直接查询总表,没有就是各个分表之和
|
||||||
|
List<SysDictData> sysTypeData = sysDictDataMapper.selectDictDataByType("sys_type"); |
||||||
|
// 查询采集参数是这几个的:
|
||||||
|
// 耗电量 16
|
||||||
|
// 产冷量 17
|
||||||
|
// 用水量 18
|
||||||
|
// 用气量 19
|
||||||
|
BigDecimal totalEle = new BigDecimal(0); |
||||||
|
BigDecimal totalCold = new BigDecimal(0); |
||||||
|
BigDecimal totalWater = new BigDecimal(0); |
||||||
|
BigDecimal totalGas = new BigDecimal(0); |
||||||
|
|
||||||
|
BigDecimal yearEle = new BigDecimal(0); |
||||||
|
BigDecimal yearCold = new BigDecimal(0); |
||||||
|
BigDecimal yearWater = new BigDecimal(0); |
||||||
|
BigDecimal yearGas = new BigDecimal(0); |
||||||
|
|
||||||
|
for (SysDictData sysDictData : sysTypeData) { |
||||||
|
String sysType = sysDictData.getDictValue(); |
||||||
|
String[] paramTypes = {"16", "17", "18", "19"}; |
||||||
|
for (String paramType : paramTypes) { |
||||||
|
QueryWrapper<CollectionParamsManage> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.eq("param_type", paramType); |
||||||
|
queryWrapper.eq("system_type", sysType); |
||||||
|
queryWrapper.eq("grade", 40); |
||||||
|
queryWrapper.eq("mt_is_sum", 0); |
||||||
|
Long count = collectionParamsManageMapper.selectCount(queryWrapper); |
||||||
|
if (count > 0) { |
||||||
|
// 查询总表
|
||||||
|
getTotalData(paramType, queryWrapper, totalEle, |
||||||
|
totalCold, |
||||||
|
totalWater, |
||||||
|
totalGas, |
||||||
|
yearEle, |
||||||
|
yearCold, |
||||||
|
yearWater, |
||||||
|
yearGas); |
||||||
|
} else { |
||||||
|
// 查询分表综合
|
||||||
|
queryWrapper.eq("mt_is_sum", 1); |
||||||
|
// 查询分表总和
|
||||||
|
getTotalData(paramType, queryWrapper, |
||||||
|
totalEle, |
||||||
|
totalCold, |
||||||
|
totalWater, |
||||||
|
totalGas, |
||||||
|
yearEle, |
||||||
|
yearCold, |
||||||
|
yearWater, |
||||||
|
yearGas); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
ProProfileDTO proProfileDTO = new ProProfileDTO(totalEle, totalCold, totalWater, totalGas, yearEle, yearCold, yearWater, yearGas); |
||||||
|
List<ProProfileDTO> proProfileDTOS = new ArrayList<>(); |
||||||
|
proProfileDTOS.add(proProfileDTO); |
||||||
|
return proProfileDTOS; |
||||||
|
} |
||||||
|
|
||||||
|
private void getTotalData(String paramType, |
||||||
|
QueryWrapper<CollectionParamsManage> queryWrapper, |
||||||
|
BigDecimal totalEle, |
||||||
|
BigDecimal totalCold, |
||||||
|
BigDecimal totalWater, |
||||||
|
BigDecimal totalGas, |
||||||
|
BigDecimal yearEle, |
||||||
|
BigDecimal yearCold, |
||||||
|
BigDecimal yearWater, |
||||||
|
BigDecimal yearGas) { |
||||||
|
List<CollectionParamsManage> collectionParamsManages = collectionParamsManageMapper.selectList(queryWrapper); |
||||||
|
// 遍历计算得出总用电量
|
||||||
|
collectionParamsManages.forEach(collectionParamsManage -> { |
||||||
|
// TODO
|
||||||
|
switch (Integer.parseInt(paramType)) { |
||||||
|
case 16: |
||||||
|
totalEle.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) |
||||||
|
.multiply(new BigDecimal(collectionParamsManage.getMtRatio()))); |
||||||
|
break; |
||||||
|
case 17: |
||||||
|
totalCold.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) |
||||||
|
.multiply(new BigDecimal(collectionParamsManage.getMtRatio()))); |
||||||
|
break; |
||||||
|
case 18: |
||||||
|
totalWater.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) |
||||||
|
.multiply(new BigDecimal(collectionParamsManage.getMtRatio()))); |
||||||
|
break; |
||||||
|
case 19: |
||||||
|
totalGas.add((collectionParamsManage.getCurValue().subtract(collectionParamsManage.getMtInitValue())) |
||||||
|
.multiply(new BigDecimal(collectionParamsManage.getMtRatio()))); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
// 计算得出今年的各个参数用量
|
||||||
|
BigDecimal yearValue = overviewMapper.queryByDeviceNum(collectionParamsManages); |
||||||
|
switch (Integer.parseInt(paramType)) { |
||||||
|
case 16: |
||||||
|
yearEle = yearValue; |
||||||
|
break; |
||||||
|
case 17: |
||||||
|
yearCold = yearValue; |
||||||
|
break; |
||||||
|
case 18: |
||||||
|
yearWater = yearValue; |
||||||
|
break; |
||||||
|
case 19: |
||||||
|
yearGas = yearValue; |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue