15 changed files with 588 additions and 21 deletions
			
			
		@ -0,0 +1,34 @@
					 | 
				
			||||
package com.mh.web.controller.comprehensive; | 
				
			||||
 | 
				
			||||
import com.mh.common.core.controller.BaseController; | 
				
			||||
import com.mh.common.core.domain.vo.EnergyQueryVO; | 
				
			||||
import com.mh.common.core.page.TableDataInfo; | 
				
			||||
import com.mh.system.service.report.IComprehensiveReportService; | 
				
			||||
import org.springframework.web.bind.annotation.GetMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestBody; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Classname CompreReportController | 
				
			||||
 * Todo: 综合报表 | 
				
			||||
 * @Date 2025-10-05 13:59 | 
				
			||||
 * @Created by LJF | 
				
			||||
 */ | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/compre") | 
				
			||||
public class CompreReportController extends BaseController { | 
				
			||||
 | 
				
			||||
    private final IComprehensiveReportService proOverviewService; | 
				
			||||
 | 
				
			||||
    public CompreReportController(IComprehensiveReportService proOverviewService) { | 
				
			||||
        this.proOverviewService = proOverviewService; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @GetMapping("/report") | 
				
			||||
    public TableDataInfo report(@RequestBody EnergyQueryVO vo) { | 
				
			||||
        startPage(); | 
				
			||||
        return getDataTable(proOverviewService.report(vo)); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,209 @@
					 | 
				
			||||
package com.mh.system.mapper.report; | 
				
			||||
 | 
				
			||||
import com.mh.common.core.domain.ColumnFilter; | 
				
			||||
import com.mh.common.core.domain.entity.CollectionParamsManage; | 
				
			||||
import com.mh.common.core.domain.entity.WaterLevel; | 
				
			||||
import org.apache.ibatis.annotations.*; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.util.Date; | 
				
			||||
import java.util.List; | 
				
			||||
import java.util.Map; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @author LJF | 
				
			||||
 * @version 1.0 | 
				
			||||
 * @project EEMCS | 
				
			||||
 * @description 热水温度记录 | 
				
			||||
 * @date 2025-06-19 16:24:31 | 
				
			||||
 */ | 
				
			||||
@Mapper | 
				
			||||
public interface ComprehensiveReportMapper { | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    @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.mtNum} " + | 
				
			||||
            "   </foreach>" + | 
				
			||||
            " </if>" + | 
				
			||||
            "</script>") | 
				
			||||
    BigDecimal queryByDeviceNum(@Param("deviceNums") List<CollectionParamsManage> deviceNums); | 
				
			||||
 | 
				
			||||
    @Select("<script>" + | 
				
			||||
            "WITH periods AS ( " + | 
				
			||||
            "  SELECT  " + | 
				
			||||
            "    <choose>" + | 
				
			||||
            "      <when test='timeType == \"year\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('year', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('year', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 year' " + | 
				
			||||
            "        ), 'YYYY') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"month\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('month', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('month', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 month' " + | 
				
			||||
            "        ), 'YYYY-MM') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"day\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('day', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('day', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 day' " + | 
				
			||||
            "        ), 'YYYY-MM-DD') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"hour\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('hour', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('hour', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 hour' " + | 
				
			||||
            "        ), 'YYYY-MM-DD HH24') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <otherwise>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('month', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('month', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 month' " + | 
				
			||||
            "        ), 'YYYY-MM') AS period " + | 
				
			||||
            "      </otherwise>" + | 
				
			||||
            "    </choose>" + | 
				
			||||
            ") " + | 
				
			||||
            "SELECT  " + | 
				
			||||
            "  p.period as name, " + | 
				
			||||
            "  COALESCE(SUM(all_data.calc_value), 0) AS value " + | 
				
			||||
            "FROM periods p " + | 
				
			||||
            "LEFT JOIN ( " + | 
				
			||||
            "  SELECT cur_time, calc_value, device_num FROM ${lastTableName} " + | 
				
			||||
            "  WHERE cur_time >= #{startTime} AND cur_time <= #{endTime} " + | 
				
			||||
            "  UNION ALL " + | 
				
			||||
            "  SELECT cur_time, calc_value, device_num FROM ${curTableName} " + | 
				
			||||
            "  WHERE cur_time >= #{startTime} AND cur_time <= #{endTime} " + | 
				
			||||
            ") all_data ON <choose>" + | 
				
			||||
            "      <when test='timeType == \"year\"'>" + | 
				
			||||
            "        to_char(all_data.cur_time, 'YYYY') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"month\"'>" + | 
				
			||||
            "        to_char(all_data.cur_time, 'YYYY-MM') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"day\"'>" + | 
				
			||||
            "        to_char(all_data.cur_time, 'YYYY-MM-DD') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"hour\"'>" + | 
				
			||||
            "        to_char(all_data.cur_time, 'YYYY-MM-DD HH24') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <otherwise>" + | 
				
			||||
            "        to_char(all_data.cur_time, 'YYYY-MM') = p.period " + | 
				
			||||
            "      </otherwise>" + | 
				
			||||
            "    </choose>" + | 
				
			||||
            " <if test='deviceNums != null and deviceNums.size() > 0'>" + | 
				
			||||
            " AND all_data.device_num IN " + | 
				
			||||
            "   <foreach collection='deviceNums' item='item' open='(' separator=',' close=')'>" + | 
				
			||||
            "     #{item.mtNum} " + | 
				
			||||
            "   </foreach>" + | 
				
			||||
            " </if>" + | 
				
			||||
            "GROUP BY p.period " + | 
				
			||||
            "ORDER BY p.period; " + | 
				
			||||
            "</script>") | 
				
			||||
    List<ColumnFilter> energyAnalysisManyTable(@Param("deviceNums") List<CollectionParamsManage> deviceNums, | 
				
			||||
                                              @Param("lastTableName") String lastTableName, | 
				
			||||
                                              @Param("curTableName") String curTableName, | 
				
			||||
                                              @Param("startTime") Date startTime, | 
				
			||||
                                              @Param("endTime") Date endTime, | 
				
			||||
                                              @Param("timeType") String timeType); | 
				
			||||
 | 
				
			||||
    @Select("<script>" + | 
				
			||||
            "select sum(cur_value) from collect_param_manage where id in " + | 
				
			||||
            "   <foreach collection='deviceNums' item='item' open='(' separator=',' close=')'>" + | 
				
			||||
            "     #{item.id} " + | 
				
			||||
            "   </foreach>" + | 
				
			||||
            "</script>") | 
				
			||||
    BigDecimal selectEER(@Param("deviceNums") List<CollectionParamsManage> deviceNums); | 
				
			||||
 | 
				
			||||
    @Select("<script>" + | 
				
			||||
            "WITH periods AS ( " + | 
				
			||||
            "  SELECT  " + | 
				
			||||
            "    <choose>" + | 
				
			||||
            "      <when test='timeType == \"year\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('year', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('year', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 year' " + | 
				
			||||
            "        ), 'YYYY') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"month\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('month', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('month', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 month' " + | 
				
			||||
            "        ), 'YYYY-MM') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"day\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('day', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('day', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 day' " + | 
				
			||||
            "        ), 'YYYY-MM-DD') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"hour\"'>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('hour', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('hour', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 hour' " + | 
				
			||||
            "        ), 'YYYY-MM-DD HH24') AS period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <otherwise>" + | 
				
			||||
            "        to_char(generate_series( " + | 
				
			||||
            "          date_trunc('month', #{startTime}::timestamp),  " + | 
				
			||||
            "          date_trunc('month', #{endTime}::timestamp),  " + | 
				
			||||
            "          '1 month' " + | 
				
			||||
            "        ), 'YYYY-MM') AS period " + | 
				
			||||
            "      </otherwise>" + | 
				
			||||
            "    </choose>" + | 
				
			||||
            ") " + | 
				
			||||
            "SELECT  " + | 
				
			||||
            "  p.period as name, " + | 
				
			||||
            "  COALESCE(SUM(dm.calc_value), 0) AS value " + | 
				
			||||
            "FROM periods p " + | 
				
			||||
            "LEFT JOIN ${lastTableName} dm  " + | 
				
			||||
            "  ON <choose>" + | 
				
			||||
            "      <when test='timeType == \"year\"'>" + | 
				
			||||
            "        to_char(dm.cur_time, 'YYYY') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"month\"'>" + | 
				
			||||
            "        to_char(dm.cur_time, 'YYYY-MM') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"day\"'>" + | 
				
			||||
            "        to_char(dm.cur_time, 'YYYY-MM-DD') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <when test='timeType == \"hour\"'>" + | 
				
			||||
            "        to_char(dm.cur_time, 'YYYY-MM-DD HH24') = p.period " + | 
				
			||||
            "      </when>" + | 
				
			||||
            "      <otherwise>" + | 
				
			||||
            "        to_char(dm.cur_time, 'YYYY-MM') = p.period " + | 
				
			||||
            "      </otherwise>" + | 
				
			||||
            "    </choose>" + | 
				
			||||
            " <if test='deviceNums != null and deviceNums.size() > 0'>" + | 
				
			||||
            " AND dm.device_num IN " + | 
				
			||||
            "   <foreach collection='deviceNums' item='item' open='(' separator=',' close=')'>" + | 
				
			||||
            "     #{item.mtNum} " + | 
				
			||||
            "   </foreach>" + | 
				
			||||
            " </if>" + | 
				
			||||
            "  AND dm.cur_time >= #{startTime} AND dm.cur_time <= #{endTime} " + | 
				
			||||
            "GROUP BY p.period " + | 
				
			||||
            "ORDER BY p.period; " + | 
				
			||||
            "</script>") | 
				
			||||
    List<ColumnFilter> energyAnalysisOneTable(@Param("deviceNums") List<CollectionParamsManage> deviceNums, | 
				
			||||
                                                @Param("lastTableName") String lastTableName, | 
				
			||||
                                                @Param("curTableName") String curTableName, | 
				
			||||
                                                @Param("startTime") Date startTime, | 
				
			||||
                                                @Param("endTime") Date endTime, | 
				
			||||
                                                @Param("timeType") String timeType); | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,14 @@
					 | 
				
			||||
package com.mh.system.service.report; | 
				
			||||
 | 
				
			||||
import com.mh.common.core.domain.vo.EnergyQueryVO; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Description: 综合能耗报表 | 
				
			||||
 * @Author: LJF | 
				
			||||
 * @Date: 2020/4/1 10:03 | 
				
			||||
 **/ | 
				
			||||
public interface IComprehensiveReportService { | 
				
			||||
    List<?> report(EnergyQueryVO vo); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,206 @@
					 | 
				
			||||
package com.mh.system.service.report.impl; | 
				
			||||
 | 
				
			||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
				
			||||
import com.mh.common.core.domain.ColumnFilter; | 
				
			||||
import com.mh.common.core.domain.dto.OverviewEnergyDTO; | 
				
			||||
import com.mh.common.core.domain.entity.CollectionParamsManage; | 
				
			||||
import com.mh.common.core.domain.entity.SysDictData; | 
				
			||||
import com.mh.common.core.domain.vo.EnergyQueryVO; | 
				
			||||
import com.mh.common.utils.DateUtils; | 
				
			||||
import com.mh.system.mapper.SysDictDataMapper; | 
				
			||||
import com.mh.system.mapper.device.CollectionParamsManageMapper; | 
				
			||||
import com.mh.system.mapper.report.ComprehensiveReportMapper; | 
				
			||||
import com.mh.system.service.report.IComprehensiveReportService; | 
				
			||||
import jakarta.annotation.Resource; | 
				
			||||
import org.springframework.stereotype.Service; | 
				
			||||
 | 
				
			||||
import java.math.BigDecimal; | 
				
			||||
import java.time.LocalDate; | 
				
			||||
import java.util.*; | 
				
			||||
import java.util.concurrent.atomic.AtomicReference; | 
				
			||||
import java.util.stream.Collectors; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * @Classname ComprehensiveReportServiceImpl | 
				
			||||
 * Todo: 综合能耗数据报表 | 
				
			||||
 * @Date 2025-10-05 14:05 | 
				
			||||
 * @Created by LJF | 
				
			||||
 */ | 
				
			||||
@Service | 
				
			||||
public class ComprehensiveReportServiceImpl implements IComprehensiveReportService { | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private SysDictDataMapper sysDictDataMapper; | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private CollectionParamsManageMapper collectionParamsManageMapper; | 
				
			||||
 | 
				
			||||
    @Resource | 
				
			||||
    private ComprehensiveReportMapper comprehensiveReportMapper; | 
				
			||||
 | 
				
			||||
    @Override | 
				
			||||
    public List<?> report(EnergyQueryVO vo) { | 
				
			||||
        DateUtils.sysEnergyDateChange(vo); | 
				
			||||
        // 获取参数
 | 
				
			||||
        AtomicReference<String> lastTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||
        AtomicReference<String> curTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||
        String timeType = vo.getTimeType(); | 
				
			||||
 | 
				
			||||
        // 判断是否是单表
 | 
				
			||||
        boolean isSingleTable = "month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType); | 
				
			||||
        if (!isSingleTable) { | 
				
			||||
            lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); | 
				
			||||
            curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        // 查询系统类型数据
 | 
				
			||||
        List<SysDictData> sysTypeData = sysDictDataMapper.selectDictDataByType("sys_type"); | 
				
			||||
        // 定义参数类型
 | 
				
			||||
        String[] paramTypes = {"16", "17", "18", "19"}; | 
				
			||||
        // 初始化结果列表
 | 
				
			||||
        List<OverviewEnergyDTO> result = new ArrayList<>(); | 
				
			||||
        // 使用Map存储不同类型的能源DTO
 | 
				
			||||
        Map<String, OverviewEnergyDTO> energyMap = new HashMap<>(); | 
				
			||||
        energyMap.put("16", new OverviewEnergyDTO()); | 
				
			||||
        energyMap.put("17", new OverviewEnergyDTO()); | 
				
			||||
        energyMap.put("18", new OverviewEnergyDTO()); | 
				
			||||
        energyMap.put("19", new OverviewEnergyDTO()); | 
				
			||||
 | 
				
			||||
        for (String paramType : paramTypes) { | 
				
			||||
            List<ColumnFilter> dataList = new ArrayList<>(); | 
				
			||||
            for (SysDictData sysDictData : sysTypeData) { | 
				
			||||
                String sysType = sysDictData.getDictValue(); | 
				
			||||
                // 查询采集参数
 | 
				
			||||
                List<CollectionParamsManage> collectionParamsManages = queryCollectionParams(paramType, sysType, 40, null, false); | 
				
			||||
                // 合并数据
 | 
				
			||||
                if (collectionParamsManages != null && !collectionParamsManages.isEmpty()) { | 
				
			||||
                    // 判断两个表是否一样
 | 
				
			||||
                    boolean isSameTable = lastTableName.get().equals(curTableName.get()); | 
				
			||||
                    if (isSameTable) { | 
				
			||||
                        List<ColumnFilter> columnFilters = comprehensiveReportMapper.energyAnalysisOneTable(collectionParamsManages, | 
				
			||||
                                lastTableName.get(), | 
				
			||||
                                curTableName.get(), | 
				
			||||
                                DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getStartTime()), | 
				
			||||
                                DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getEndTime()), | 
				
			||||
                                timeType); | 
				
			||||
                        dataList.addAll(columnFilters); | 
				
			||||
                    } else { | 
				
			||||
                        // 两个表不一样
 | 
				
			||||
                        List<ColumnFilter> columnFilters = comprehensiveReportMapper.energyAnalysisManyTable(collectionParamsManages, | 
				
			||||
                                lastTableName.get(), | 
				
			||||
                                curTableName.get(), | 
				
			||||
                                DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getStartTime()), | 
				
			||||
                                DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", vo.getEndTime()), | 
				
			||||
                                timeType); | 
				
			||||
                        dataList.addAll(columnFilters); | 
				
			||||
                    } | 
				
			||||
                } | 
				
			||||
            } | 
				
			||||
            // 初始化能源数据
 | 
				
			||||
            initialEnergyData(dataList, energyMap.get(paramType), getEnergyLabel(paramType), getEnergyUnit(paramType), result); | 
				
			||||
 | 
				
			||||
        } | 
				
			||||
        return result.isEmpty() ? List.of() : result; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    private List<CollectionParamsManage> queryCollectionParams(String paramType, String sysType, int grade, String terminalDeviceType, boolean isNow) { | 
				
			||||
        QueryWrapper<CollectionParamsManage> queryWrapper = new QueryWrapper<>(); | 
				
			||||
        LocalDate today = LocalDate.now(); | 
				
			||||
        String todayStr = today.toString(); // 格式为 'YYYY-MM-DD'
 | 
				
			||||
        queryWrapper.eq("param_type", paramType) | 
				
			||||
                .eq("system_type", sysType) | 
				
			||||
                .eq("grade", grade); | 
				
			||||
        if (isNow) { | 
				
			||||
            queryWrapper.apply("DATE(cur_time) = DATE({0})", todayStr); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
        if (terminalDeviceType != null && !terminalDeviceType.isEmpty()) { | 
				
			||||
            queryWrapper.eq("terminal_device_type", terminalDeviceType); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        // 先查询总表
 | 
				
			||||
        queryWrapper.eq("mt_is_sum", 0); | 
				
			||||
        Long count = collectionParamsManageMapper.selectCount(queryWrapper); | 
				
			||||
        if (count > 0) { | 
				
			||||
            return collectionParamsManageMapper.selectList(queryWrapper); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        // 查询分表
 | 
				
			||||
        queryWrapper = new QueryWrapper<>(); | 
				
			||||
        queryWrapper.eq("param_type", paramType) | 
				
			||||
                .eq("system_type", sysType) | 
				
			||||
                .eq("grade", grade); | 
				
			||||
        if (isNow) { | 
				
			||||
            queryWrapper.apply("DATE(cur_time) = DATE({0})", todayStr); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
//        if (terminalDeviceType != null && !terminalDeviceType.isEmpty()) {
 | 
				
			||||
//            queryWrapper.eq("terminal_device_type", terminalDeviceType);
 | 
				
			||||
//        }
 | 
				
			||||
        return collectionParamsManageMapper.selectList(queryWrapper); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    private String getEnergyLabel(String paramType) { | 
				
			||||
        switch (paramType) { | 
				
			||||
            case "16": | 
				
			||||
                return "总用电量"; | 
				
			||||
            case "17": | 
				
			||||
                return "总产冷量"; | 
				
			||||
            case "18": | 
				
			||||
                return "总用水量"; | 
				
			||||
            case "19": | 
				
			||||
                return "总用气量"; | 
				
			||||
            default: | 
				
			||||
                throw new IllegalArgumentException("Invalid param type: " + paramType); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    private String getEnergyUnit(String paramType) { | 
				
			||||
        switch (paramType) { | 
				
			||||
            case "16": | 
				
			||||
                return "kw/h"; | 
				
			||||
            case "17": | 
				
			||||
                return "kw"; | 
				
			||||
            case "18": | 
				
			||||
                return "t"; | 
				
			||||
            case "19": | 
				
			||||
                return "t"; | 
				
			||||
            default: | 
				
			||||
                throw new IllegalArgumentException("Invalid param type: " + paramType); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    private static void initialEnergyData(List<ColumnFilter> dataList, | 
				
			||||
                                          OverviewEnergyDTO ele, | 
				
			||||
                                          String paramTypeName, | 
				
			||||
                                          String unitName, | 
				
			||||
                                          List<OverviewEnergyDTO> result) { | 
				
			||||
        if (!dataList.isEmpty()) { | 
				
			||||
            // 根据时间分组,求和取总和,再根据时间升序排序
 | 
				
			||||
            // 使用LinkedHashMap保持时间顺序
 | 
				
			||||
            LinkedHashMap<String, Double> eleMap = dataList.stream() | 
				
			||||
                    .sorted(Comparator.comparing(ColumnFilter::getName)) // 按时间字段排序
 | 
				
			||||
                    .collect(Collectors.groupingBy( | 
				
			||||
                            ColumnFilter::getName, | 
				
			||||
                            LinkedHashMap::new, | 
				
			||||
                            Collectors.summingDouble(value -> | 
				
			||||
                                    new BigDecimal(value.getValue()).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(paramTypeName); | 
				
			||||
            ele.setUnit(unitName); | 
				
			||||
            ele.setTimeStr(timeArray); | 
				
			||||
            ele.setData(valueArray); | 
				
			||||
            result.add(ele); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue