DYL0109
2025-02-08 711c69bdaddecabc8d21aa66499cc6bae6ce4e00
!51 同环比分析
Merge pull request !51 from DYL0109/dyl_dev
已添加14个文件
已修改5个文件
959 ■■■■■ 文件已修改
zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeTrendController.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/StatisticalAnalysisController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-common/src/main/java/com/zhitan/common/constant/TimeTypeConst.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentMeasuringPointParameters.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/SvgTrendMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/realtimedata/service/ISvgTrendService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/SvgTrendServicelmpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/DataAnalysisMoMDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisMoMExcel.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisMoMVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisYoYExcel.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisYoYVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/IStatisticalAnalysisService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/StatisticalAnalysisServiceImpl.java 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/realtimedata/SvgTrendMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/realtimedata/RealtimeTrendController.java
@@ -5,9 +5,14 @@
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.common.utils.poi.ExcelUtil;
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.realtimedata.domain.TagValue;
import com.zhitan.realtimedata.domain.dto.EnergyIndexMonitorDTO;
import com.zhitan.realtimedata.domain.vo.EquipmentMeasuringPointParameters;
import com.zhitan.realtimedata.domain.vo.EquipmentPointParametersExcel;
import com.zhitan.realtimedata.domain.vo.ExportrealtimeTrendVO;
import com.zhitan.realtimedata.service.ISvgTrendService;
import com.zhitan.realtimedata.service.RealtimeDatabaseService;
import com.zhitan.realtimedata.service.RealtimeTrendService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -15,14 +20,18 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
 * @Description å®žæ—¶ç›‘测控制类
 *
 * @Author zhoubg
 * @date 2024-10-15
 * å®žæ—¶ç›‘测控制类
 **/
@RestController
@RequestMapping("rtdb/realtimeTrend")
@@ -31,11 +40,13 @@
    @Autowired
    private RealtimeTrendService realtimeTrendService;
    @Resource
    private ISvgTrendService svgTrendService;
    @Resource
    private RealtimeDatabaseService realtimeDatabaseService;
    /**
     * èŽ·å–æ¨¡åž‹èŠ‚ç‚¹å…³è”é‡‡é›†æŒ‡æ ‡
     *
     * @return
     */
    @GetMapping("/list")
    @ApiOperation(value = "获取模型节点关联采集指标")
@@ -45,9 +56,6 @@
    /**
     * èŽ·å–åŽ†å²æ¨¡åž‹èŠ‚ç‚¹å…³è”é‡‡é›†æŒ‡æ ‡æ•°æ®
     * @param tagCode
     * @param dataTime
     * @return
     */
    @Log(title = "获取历史模型节点关联采集指标数据", businessType = BusinessType.UPDATE)
    @GetMapping("/chartByDay")
@@ -58,7 +66,6 @@
    /**
     * å¯¼å‡ºå®žæ—¶ç›‘测Excel信息
     * @return
     */
    @Log(title = "导出实时监测Excel信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
@@ -69,4 +76,50 @@
        util.exportExcel(response,list, "实时监测");
    }
    /**
     * èŽ·å–æ¨¡åž‹èŠ‚ç‚¹å…³è”é‡‡é›†æŒ‡æ ‡
     */
    @Log(title = "获取模型节点关联采集指标", businessType = BusinessType.UPDATE)
    @GetMapping("/svgTrendView/energyIndex/list")
    @ApiOperation(value = "获取模型节点关联采集指标")
    public AjaxResult getSvgTrendViewSettingIndex(EnergyIndex energyIndex) {
        try {
            List<EnergyIndex> infoList = svgTrendService.selectSvgList(energyIndex);
            if (infoList == null || infoList.isEmpty()){
                return AjaxResult.success(Collections.emptyList());
            }
            List<String> codeList = infoList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
            List<TagValue> valList = realtimeDatabaseService.retrieve(codeList);
            if (valList == null || valList.isEmpty()) {
                return AjaxResult.success(Collections.emptyList());
            }
            Map<String, List<TagValue>> tagValueMap = valList.stream().collect(Collectors.groupingBy(TagValue::getTagCode));
            List<EquipmentMeasuringPointParameters> resultList = infoList.stream().map(index -> {
                EquipmentMeasuringPointParameters item = new EquipmentMeasuringPointParameters();
                item.setCode(index.getCode());
                item.setIndexName(index.getName());
                item.setIndexUnit(index.getUnitId());
                item.setMeteName(index.getMeterName());
                item.setyValue("y0");
                List<TagValue> tagValueList = tagValueMap.getOrDefault(index.getCode(), Collections.emptyList());
                if (!tagValueList.isEmpty()){
                    Optional<Double> sumOptional = tagValueList.stream()
                            .map(TagValue::getValue)
                            .reduce(Double::sum);
                    sumOptional.ifPresent(sum -> item.setValue(BigDecimal.valueOf(sum)
                            .setScale(2, RoundingMode.HALF_UP).doubleValue()));
                }
                return item;
            }).collect(Collectors.toList());
            return AjaxResult.success(resultList);
        } catch (Exception ex) {
            logger.error("获取关联采集指标出错!", ex);
            return AjaxResult.error("获取关联指标出错!");
        }
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/StatisticalAnalysisController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
package com.zhitan.web.controller.statisticalAnalysis;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.utils.poi.ExcelUtil;
import com.zhitan.statisticalAnalysis.domain.dto.DataAnalysisMoMDTO;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisMoMExcel;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisMoMVO;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYExcel;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYVO;
import com.zhitan.statisticalAnalysis.service.IStatisticalAnalysisService;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
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;
import java.util.ArrayList;
import java.util.List;
/**
 * ç»Ÿè®¡åˆ†æž æŽ§åˆ¶å±‚
 */
@RestController
@RequestMapping("/statisticalAnalysis")
public class StatisticalAnalysisController extends BaseController {
    @Autowired
    private IStatisticalAnalysisService analysisService;
    @PostMapping("/getElectricDataComparisonYoY")
    @ApiOperation(value = "获取电能耗同比数据", notes = "获取电能耗同比数据")
    public AjaxResult listElectricDataComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
        List<DataAnalysisYoYVO> yoyList = analysisService.listElectricDataComparisonYoY(dto);
        return AjaxResult.success(yoyList);
    }
    @PostMapping("/getElectricDataComparisonMoM")
    @ApiOperation(value = "获取电能耗环比数据", notes = "获取电能耗环比数据")
    public AjaxResult listElectricDataComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
        List<DataAnalysisMoMVO> momList = analysisService.listElectricDataComparisonMoM(dto);
        return AjaxResult.success(momList);
    }
    @PostMapping("/getWaterDataComparisonYoY")
    @ApiOperation(value = "获取水能耗同比数据", notes = "获取水能耗同比数据")
    public AjaxResult listWaterDataComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
        List<DataAnalysisYoYVO> yoyList = analysisService.listWaterDataComparisonYoY(dto);
        return AjaxResult.success(yoyList);
    }
    @PostMapping("/getWaterDataComparisonMoM")
    @ApiOperation(value = "获取水能耗环比数据", notes = "获取水能耗环比数据")
    public AjaxResult listWaterDataComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
        List<DataAnalysisMoMVO> momList = analysisService.listWaterDataComparisonMoM(dto);
        return AjaxResult.success(momList);
    }
    @PostMapping("/exportElectricYoY")
    @ApiOperation(value = "导出电能耗同比数据", notes = "导出电能耗同比数据")
    public AjaxResult exportElectricComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
        List<DataAnalysisYoYExcel> yoYExcelsList = new ArrayList<>();
        List<DataAnalysisYoYVO> yoYList = analysisService.listElectricDataComparisonYoY(dto);
        if (CollectionUtils.isNotEmpty(yoYList)) {
            for (DataAnalysisYoYVO vo : yoYList) {
                DataAnalysisYoYExcel excel = new DataAnalysisYoYExcel();
                BeanUtils.copyProperties(vo, excel);
                yoYExcelsList.add(excel);
            }
        }
        ExcelUtil<DataAnalysisYoYExcel> util = new ExcelUtil<>(DataAnalysisYoYExcel.class);
        return util.exportExcel(yoYExcelsList, "电综合能耗同比信息");
    }
//    @PostMapping("/exportElectricMoM")
//    @ApiOperation(value = "导出电能耗环比数据", notes = "导出电能耗环比数据")
//    public AjaxResult exportElectricComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
//        List<DataAnalysisMoMExcel> moMExcelsList = new ArrayList<>();
//        List<DataAnalysisMoMVO> moMList = analysisService.listElectricDataComparisonMoM(dto);
//        if (CollectionUtils.isNotEmpty(moMList)) {
//            for (DataAnalysisMoMVO vo : moMList) {
//                DataAnalysisMoMExcel excel = new DataAnalysisMoMExcel();
//                BeanUtils.copyProperties(vo, excel);
//                moMExcelsList.add(excel);
//            }
//        }
//        ExcelUtil<DataAnalysisMoMExcel> util = new ExcelUtil<>(DataAnalysisMoMExcel.class);
//        return util.exportRealTimeDataExcel(moMExcelsList, "电综合能耗环比信息");
//    }
    @PostMapping("/exportWaterYoY")
    @ApiOperation(value = "导出水耗同比数据", notes = "导出水耗同比数据")
    public AjaxResult exportWaterComparisonYoY(@RequestBody @Validated DataAnalysisMoMDTO dto) {
        List<DataAnalysisYoYExcel> yoYExcelsList = new ArrayList<>();
        List<DataAnalysisYoYVO> yoYList = analysisService.listWaterDataComparisonYoY(dto);
        if (CollectionUtils.isNotEmpty(yoYList)) {
            for (DataAnalysisYoYVO vo : yoYList) {
                DataAnalysisYoYExcel excel = new DataAnalysisYoYExcel();
                BeanUtils.copyProperties(vo, excel);
                yoYExcelsList.add(excel);
            }
        }
        ExcelUtil<DataAnalysisYoYExcel> util = new ExcelUtil<>(DataAnalysisYoYExcel.class);
        return util.exportExcel(yoYExcelsList, "水综合能耗耗同比信息");
    }
    @PostMapping("/exportWaterMoM")
    @ApiOperation(value = "导出水耗环比数据", notes = "导出水耗环比数据")
    public AjaxResult exportWaterComparisonMoM(@RequestBody @Validated DataAnalysisMoMDTO dto) {
        List<DataAnalysisMoMExcel> moMExcelsList = new ArrayList<>();
        List<DataAnalysisMoMVO> moMList = analysisService.listWaterDataComparisonMoM(dto);
        if (CollectionUtils.isNotEmpty(moMList)) {
            for (DataAnalysisMoMVO vo : moMList) {
                DataAnalysisMoMExcel excel = new DataAnalysisMoMExcel();
                BeanUtils.copyProperties(vo, excel);
                moMExcelsList.add(excel);
            }
        }
        ExcelUtil<DataAnalysisMoMExcel> util = new ExcelUtil<>(DataAnalysisMoMExcel.class);
        return util.exportExcel(moMExcelsList, "水综合能耗耗环比信息");
    }
}
zhitan-common/src/main/java/com/zhitan/common/constant/TimeTypeConst.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.zhitan.common.constant;
/**
 * @Description: å‘¨æœŸç±»åž‹
 * @author: yxw
 * @date: 2022å¹´03月17日 12:33
 */
public class TimeTypeConst {
    /**
     * å‘¨æœŸç±»åž‹ - å°æ—¶
     */
    public static final String TIME_TYPE_HOUR="HOUR";
    /**
     * å‘¨æœŸç±»åž‹ - æ—¥
     */
    public static final String TIME_TYPE_DAY="DAY";
    /**
     * å‘¨æœŸç±»åž‹ - æœˆ
     */
    public static final String TIME_TYPE_MONTH="MONTH";
    /**
     * å‘¨æœŸç±»åž‹ - å¹´
     */
    public static final String TIME_TYPE_YEAR="YEAR";
}
zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
@@ -110,4 +110,16 @@
     */
    List<CarbonEmission> getDownCarbonEmission(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                             @Param("timeType") String timeType, @Param("indexId") String indexId);
    /**
     * æ ¹æ®indexId与时间范围查询小时的dataitem信息
     *
     * @param beginTime å¼€å§‹æ—¶é—´
     * @param endTime   æˆªæ­¢æ—¶é—´
     * @param timeType  æ—¶é—´ç±»åž‹
     * @param indexIds  ç‚¹ä½é›†åˆ
     * @return
     */
    List<DataItem> getDataItemHourInforByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                                  @Param("timeType") String timeType, @Param("indexIds") List<String> indexIds);
}
zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
@@ -77,4 +77,15 @@
     * @return
     */
    BigDecimal getDataItemValueByIndexIds(String timeCode, List<String> indexIds);
    /**
     * æ ¹æ®indexId与时间范围查询小时的dataitem信息
     *
     * @param beginTime å¼€å§‹æ—¶é—´
     * @param endTime   æˆªæ­¢æ—¶é—´
     * @param timeType  æ—¶é—´ç±»åž‹
     * @param indexIds  ç‚¹ä½é›†åˆ
     * @return
     */
    List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds);
}
zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
@@ -103,4 +103,18 @@
    public BigDecimal getDataItemValueByIndexIds(String timeCode, List<String> indexIds) {
        return dataItemMapper.getDataItemValueByIndexIds(timeCode, indexIds);
    }
    /**
     * æ ¹æ®indexId与时间范围查询小时的dataitem信息
     *
     * @param beginTime å¼€å§‹æ—¶é—´
     * @param endTime   æˆªæ­¢æ—¶é—´
     * @param timeType  æ—¶é—´ç±»åž‹
     * @param indexIds  ç‚¹ä½é›†åˆ
     * @return
     */
    @Override
    public List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) {
        return dataItemMapper.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds);
    }
}
zhitan-system/src/main/java/com/zhitan/realtimedata/domain/vo/EquipmentMeasuringPointParameters.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.zhitan.realtimedata.domain.vo;
import lombok.Data;
/**
 * è®¾å¤‡ç›‘测参数列表对象
 */
@Data
public class EquipmentMeasuringPointParameters {
    private String code;
    private String indexName;
    private String indexUnit;
    private Double value;
    private String yValue;
    private String meteName;
    public String getyValue() {
        return yValue;
    }
    public void setyValue(String yValue) {
        this.yValue = yValue;
    }
}
zhitan-system/src/main/java/com/zhitan/realtimedata/mapper/SvgTrendMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.zhitan.realtimedata.mapper;
import com.zhitan.model.domain.EnergyIndex;
import java.util.List;
public interface SvgTrendMapper {
    /**
     * å®žæ—¶æ£€æµ‹ åŠŸèƒ½ çš„多 sheet页  å±•示 ç»„态图  æµ‹ç‚¹ æŠ¥è­¦ä¿¡æ¯
     *
     * @param energyIndex
     * @return
     */
    List<EnergyIndex> selectSvgTrendList(EnergyIndex energyIndex);
}
zhitan-system/src/main/java/com/zhitan/realtimedata/service/ISvgTrendService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.zhitan.realtimedata.service;
import com.zhitan.model.domain.EnergyIndex;
import java.util.List;
public interface ISvgTrendService {
    /**
     * å®žæ—¶æ£€æµ‹ åŠŸèƒ½ çš„多 sheet页  å±•示趋势图
     * @param energyIndex
     * @return
     */
    List<EnergyIndex> selectSvgList(EnergyIndex energyIndex);
}
zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/SvgTrendServicelmpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.zhitan.realtimedata.service.impl;
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.realtimedata.mapper.SvgTrendMapper;
import com.zhitan.realtimedata.service.ISvgTrendService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SvgTrendServicelmpl implements ISvgTrendService {
    @Autowired
    private SvgTrendMapper svgTrendMapper;
    /**
     * æŸ¥è¯¢æŒ‡æ ‡ä¿¡æ¯
     *
     * @param energyIndex æŒ‡æ ‡ä¿¡æ¯ID
     * @return æŒ‡æ ‡ä¿¡æ¯
     */
    @Override
    public List<EnergyIndex> selectSvgList(EnergyIndex energyIndex) {
        return svgTrendMapper.selectSvgTrendList(energyIndex);
    }
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/DataAnalysisMoMDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.zhitan.statisticalAnalysis.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhitan.common.annotation.Excel;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
 * æ•°æ®åˆ†æžçŽ¯æ¯” è¯·æ±‚参数
 *
 * @Author: Zhujw
 * @Date: 2023/3/3
 */
@Data
public class DataAnalysisMoMDTO {
    /**
     * ç»Ÿè®¡å¼€å§‹æ—¶é—´
     */
    @NotNull(message = "请维护查询时间")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @Excel(name = "报警开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date beginTime;
    /**
     * ç»Ÿè®¡å¼€å§‹æ—¶é—´
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @Excel(name = "报警开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "请维护查询时间")
    private Date endTime;
    /**
     * æ—¶é—´ç±»åž‹
     */
    @NotBlank(message = "未找到时间类型")
    private String timeType;
    /**
     * æ¨¡åž‹èŠ‚ç‚¹id
     */
    @NotBlank(message = "未找到模型节点信息")
    private String nodeId;
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisMoMExcel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.zhitan.statisticalAnalysis.domain.vo;
import com.zhitan.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
/**
 * æ•°æ®åˆ†æžçŽ¯æ¯” å¯¼å‡ºExcel
 *
 * @Author: Zhujw
 * @Date: 2023/3/3
 */
@Data
public class DataAnalysisMoMExcel {
    /**
     * ç”¨èƒ½å•元名称
     */
    @Excel(name = "用能单元")
    private String energyUnitName;
    /**
     * æœ¬æœŸå€¼
     */
    @Excel(name = "本期值")
    private BigDecimal currentValue;
    /**
     * åŒæœŸå€¼
     */
    @Excel(name = "同期值")
    private BigDecimal oldValue;
    /**
     * åŒæ¯”值
     */
    @Excel(name = "同比值")
    private BigDecimal ratio;
    /**
     * å•位
     */
    @Excel(name = "单位")
    private String unit;
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisMoMVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.zhitan.statisticalAnalysis.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
 * æ•°æ®åˆ†æžçŽ¯æ¯” è¿”回vo
 *
 * @Author: Zhujw
 * @Date: 2023/3/3
 */
@Data
public class DataAnalysisMoMVO {
    /**
     * å•位
     */
    private String unit;
    /**
     * ç”¨èƒ½å•元名称
     */
    private String energyUnitName;
    /**
     * æœ¬æœŸå€¼
     */
    private BigDecimal currentValue;
    /**
     * åŒæœŸå€¼
     */
    private BigDecimal oldValue;
    /**
     * åŒæ¯”值
     */
    private BigDecimal ratio;
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisYoYExcel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.zhitan.statisticalAnalysis.domain.vo;
import com.zhitan.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
/**
 * æ•°æ®åˆ†æžåŒæ¯” å¯¼å‡ºExcel
 *
 * @Author: Zhujw
 * @Date: 2023/3/3
 */
@Data
public class DataAnalysisYoYExcel {
    /**
     * ç”¨èƒ½å•元名称
     */
    @Excel(name = "用能单元名称")
    private String energyUnitName;
    /**
     * æœ¬æœŸå€¼
     */
    @Excel(name = "本期值")
    private BigDecimal currentValue;
    /**
     * åŒæœŸå€¼
     */
    @Excel(name = "同期值")
    private BigDecimal oldValue;
    /**
     * åŒæ¯”值
     */
    @Excel(name = "同比值")
    private BigDecimal ratio;
    /**
     * å•位
     */
    @Excel(name = "单位")
    private String unit;
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/DataAnalysisYoYVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.zhitan.statisticalAnalysis.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
 * æ•°æ®åˆ†æžåŒæ¯” è¿”回vo
 *
 * @Author: Zhujw
 * @Date: 2023/3/3
 */
@Data
public class DataAnalysisYoYVO {
    /**
     * å•位
     */
    private String unit;
    /**
     * ç”¨èƒ½å•元名称
     */
    private String energyUnitName;
    /**
     * æœ¬æœŸå€¼
     */
    private BigDecimal currentValue;
    /**
     * åŒæœŸå€¼
     */
    private BigDecimal oldValue;
    /**
     * åŒæ¯”值
     */
    private BigDecimal ratio;
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/IStatisticalAnalysisService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.zhitan.statisticalAnalysis.service;
import com.zhitan.statisticalAnalysis.domain.dto.DataAnalysisMoMDTO;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisMoMVO;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYVO;
import java.util.List;
/**
 * ç»Ÿè®¡åˆ†æž  æŽ¥å£å±‚
 *
 * @Author: Zhujw
 * @Date: 2023/3/1
 */
public interface IStatisticalAnalysisService {
    /**
     * èŽ·å–ç”µèƒ½è€—åŒæ¯”æ•°æ®
     */
    List<DataAnalysisYoYVO> listElectricDataComparisonYoY(DataAnalysisMoMDTO dto);
    /**
     * èŽ·å–ç”µèƒ½è€—çŽ¯æ¯”æ•°æ®
     */
    List<DataAnalysisMoMVO> listElectricDataComparisonMoM(DataAnalysisMoMDTO dto);
    /**
     * èŽ·å–èƒ½è€—åŒæ¯”æ•°æ®
     */
    List<DataAnalysisYoYVO> listWaterDataComparisonYoY(DataAnalysisMoMDTO dto);
    /**
     * èŽ·å–èƒ½è€—çŽ¯æ¯”æ•°æ®
     */
    List<DataAnalysisMoMVO> listWaterDataComparisonMoM(DataAnalysisMoMDTO dto);
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/StatisticalAnalysisServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,293 @@
package com.zhitan.statisticalAnalysis.service.impl;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.zhitan.common.constant.CommonConst;
import com.zhitan.common.constant.TimeTypeConst;
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.service.IDataItemService;
import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
import com.zhitan.model.service.IModelNodeService;
import com.zhitan.realtimedata.domain.DataItem;
import com.zhitan.statisticalAnalysis.domain.dto.DataAnalysisMoMDTO;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisMoMVO;
import com.zhitan.statisticalAnalysis.domain.vo.DataAnalysisYoYVO;
import com.zhitan.statisticalAnalysis.service.IStatisticalAnalysisService;
import lombok.AllArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
/**
 * ç»Ÿè®¡åˆ†æž  æŽ¥å£å±‚实现层
 */
@Service
@AllArgsConstructor
public class StatisticalAnalysisServiceImpl implements IStatisticalAnalysisService {
    private final IDataItemService dataItemService;
    private final IModelNodeService modelNodeService;
    /**
     * èŽ·å–ç”µèƒ½è€—åŒæ¯”æ•°æ®
     */
    @Override
    public List<DataAnalysisYoYVO> listElectricDataComparisonYoY(DataAnalysisMoMDTO dto) {
        List<DataAnalysisYoYVO> yoyList = new ArrayList<>();
        // æŸ¥è¯¢ç‚¹ä½ä¸Žç”¨èƒ½å•元信息
        List<ModelNodeIndexInfor> nodeInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
        if (CollectionUtils.isEmpty(nodeInforList)) {
            return yoyList;
        }
        List<String> indexIds = nodeInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
        // æŒ‰ç…§ç‚¹ä½è¿›è¡Œåˆ†ç»„
        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeInforList.stream().collect(
                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
        // èŽ·å–æŸ¥è¯¢æ—¶é—´
        Date beginTime = dto.getBeginTime();
        Date endTime = dto.getEndTime();
        // åŒæ¯”æ—¶é—´
        Date lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
        Date lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
        // æŸ¥è¯¢å¯¹åº”indexIds,找到对应dataItem信息
        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
        //  å€çއ
        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
        nodeIndexMap.forEach((key, value) -> {
            DataAnalysisYoYVO yoyVO = new DataAnalysisYoYVO();
            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
            first.ifPresent(modelNodeIndexInfor -> yoyVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
            // èµ‹å€¼å•位
            yoyVO.setUnit("kWh");
            // æ‰¾å‡ºindexIds
            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
            // æ±‚å’Œ
            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            yoyVO.setCurrentValue(sum);
            yoyVO.setOldValue(lastSum);
            //  åŒæ¯”值
            BigDecimal ratio = BigDecimal.ZERO;
            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
            }
            yoyVO.setRatio(ratio);
            yoyList.add(yoyVO);
        });
        return yoyList;
    }
    /**
     * èŽ·å–ç”µèƒ½è€—çŽ¯æ¯”æ•°æ®
     */
    @Override
    public List<DataAnalysisMoMVO> listElectricDataComparisonMoM(DataAnalysisMoMDTO dto) {
        List<DataAnalysisMoMVO> momList = new ArrayList<>();
        // æ ¹æ®id查询点位信息
        List<ModelNodeIndexInfor> nodeIndexInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
        if (CollectionUtils.isEmpty(nodeIndexInforList)) {
            return momList;
        }
        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
        Date beginTime = dto.getBeginTime();
        Date endTime = dto.getEndTime();
        Date lastTime;
        Date lastEndTime;
        String queryTimeType = dto.getTimeType();
        // å°æ—¶
        if (TimeTypeConst.TIME_TYPE_HOUR.equals(queryTimeType)) {
            lastTime = DateUtil.offsetHour(beginTime, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offsetHour(endTime, CommonConst.DIGIT_MINUS_1);
            // å¤©
        } else if (TimeTypeConst.TIME_TYPE_DAY.equals(queryTimeType)) {
            lastTime = DateUtil.offsetDay(beginTime, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offsetDay(endTime, CommonConst.DIGIT_MINUS_1);
            // æœˆ
        } else if (TimeTypeConst.TIME_TYPE_MONTH.equals(queryTimeType)) {
            lastTime = DateUtil.offsetMonth(beginTime, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offsetMonth(endTime, CommonConst.DIGIT_MINUS_1);
            // å¹´
        } else {
            lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
        }
        // æŒ‰ç…§ç‚¹ä½è¿›è¡Œåˆ†ç»„
        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
        // æ ¹æ®indexId查询dataItem
        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
        //  å€çއ
        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
        nodeIndexMap.forEach((key, value) -> {
            DataAnalysisMoMVO momVO = new DataAnalysisMoMVO();
            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
            first.ifPresent(modelNodeIndexInfor -> momVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
            // èµ‹å€¼å•位
            momVO.setUnit("kWh");
            // æ‰¾å‡ºindexIds
            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
            // æ±‚å’Œ
            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            momVO.setCurrentValue(sum);
            momVO.setOldValue(lastSum);
            //  åŒæ¯”值
            BigDecimal ratio = BigDecimal.ZERO;
            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
            }
            momVO.setRatio(ratio);
            momList.add(momVO);
        });
        return momList;
    }
    /**
     * èŽ·å–èƒ½è€—åŒæ¯”æ•°æ®
     */
    @Override
    public List<DataAnalysisYoYVO> listWaterDataComparisonYoY(DataAnalysisMoMDTO dto) {
        List<DataAnalysisYoYVO> yoyList = new ArrayList<>();
        // æŸ¥è¯¢ç‚¹ä½ä¸Žç”¨èƒ½å•元信息
        List<ModelNodeIndexInfor> nodeInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
        if (CollectionUtils.isEmpty(nodeInforList)) {
            return yoyList;
        }
        List<String> indexIds = nodeInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
        // æŒ‰ç…§ç‚¹ä½è¿›è¡Œåˆ†ç»„
        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeInforList.stream().collect(
                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
        // æ—¶é—´ç±»åž‹
        // èŽ·å–æŸ¥è¯¢æ—¶é—´
        Date beginTime = dto.getBeginTime();
        Date endTime = dto.getEndTime();
        // åŒæ¯”æ—¶é—´
        Date lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
        Date lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
        // æŸ¥è¯¢å¯¹åº”indexIds,找到对应dataItem信息
        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
        //  å€çއ
        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
        nodeIndexMap.forEach((key, value) -> {
            DataAnalysisYoYVO yoyVO = new DataAnalysisYoYVO();
            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
            first.ifPresent(modelNodeIndexInfor -> yoyVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
            // èµ‹å€¼å•位
            yoyVO.setUnit("m³");
            // æ‰¾å‡ºindexIds
            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
            // æ±‚å’Œ
            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            yoyVO.setCurrentValue(sum);
            yoyVO.setOldValue(lastSum);
            //  åŒæ¯”值
            BigDecimal ratio = BigDecimal.ZERO;
            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
            }
            yoyVO.setRatio(ratio);
            yoyList.add(yoyVO);
        });
        return yoyList;
    }
    /**
     * èŽ·å–èƒ½è€—çŽ¯æ¯”æ•°æ®
     */
    @Override
    public List<DataAnalysisMoMVO> listWaterDataComparisonMoM(DataAnalysisMoMDTO dto) {
        List<DataAnalysisMoMVO> momList = new ArrayList<>();
        // æ ¹æ®id查询点位信息
        List<ModelNodeIndexInfor> nodeIndexInforList = listModelNodeIndexIdRelationInfor(dto.getNodeId());
        if (CollectionUtils.isEmpty(nodeIndexInforList)) {
            return momList;
        }
        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
        Date beginTime = dto.getBeginTime();
        Date endTime = dto.getEndTime();
        Date lastTime;
        Date lastEndTime;
        String queryTimeType = dto.getTimeType();
        // å°æ—¶
        if (TimeTypeConst.TIME_TYPE_HOUR.equals(queryTimeType)) {
            lastTime = DateUtil.offsetHour(beginTime, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offsetHour(endTime, CommonConst.DIGIT_MINUS_1);
            // å¤©
        } else if (TimeTypeConst.TIME_TYPE_DAY.equals(queryTimeType)) {
            lastTime = DateUtil.offsetDay(beginTime, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offsetDay(endTime, CommonConst.DIGIT_MINUS_1);
            // æœˆ
        } else if (TimeTypeConst.TIME_TYPE_MONTH.equals(queryTimeType)) {
            lastTime = DateUtil.offsetMonth(beginTime, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offsetMonth(endTime, CommonConst.DIGIT_MINUS_1);
            // å¹´
        } else {
            lastTime = DateUtil.offset(beginTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
            lastEndTime = DateUtil.offset(endTime, DateField.YEAR, CommonConst.DIGIT_MINUS_1);
        }
        // æŒ‰ç…§ç‚¹ä½è¿›è¡Œåˆ†ç»„
        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
        // æŸ¥è¯¢å¯¹åº”indexIds,找到对应dataItem信息
        List<DataItem> dataItemList = dataItemService.getDataItemHourInforByIndexIds(beginTime, endTime, TimeType.HOUR.name(), indexIds);
        List<DataItem> lastDataItemList = dataItemService.getDataItemHourInforByIndexIds(lastTime, lastEndTime, TimeType.HOUR.name(), indexIds);
        //  å€çއ
        BigDecimal multiple = BigDecimal.valueOf(CommonConst.DIGIT_100);
        nodeIndexMap.forEach((key, value) -> {
            DataAnalysisMoMVO momVO = new DataAnalysisMoMVO();
            Optional<ModelNodeIndexInfor> first = value.stream().findFirst();
            first.ifPresent(modelNodeIndexInfor -> momVO.setEnergyUnitName(modelNodeIndexInfor.getName()));
            // èµ‹å€¼å•位
            momVO.setUnit("m³");
            // æ‰¾å‡ºindexIds
            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
            // æ±‚å’Œ
            BigDecimal sum = BigDecimal.valueOf(dataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            BigDecimal lastSum = BigDecimal.valueOf(lastDataItemList.stream().filter(li -> indexIdList.contains(li.getIndexId()))
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
            momVO.setCurrentValue(sum);
            momVO.setOldValue(lastSum);
            //  åŒæ¯”值
            BigDecimal ratio = BigDecimal.ZERO;
            if (lastSum.compareTo(BigDecimal.ZERO) != 0) {
                ratio = sum.subtract(lastSum).divide(lastSum, CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(multiple);
            }
            momVO.setRatio(ratio);
            momList.add(momVO);
        });
        return momList;
    }
    /**
     * æŸ¥è¯¢ç‚¹ä½ä¸Žç”¨èƒ½å•元信息
     */
    private List<ModelNodeIndexInfor> listModelNodeIndexIdRelationInfor(String nodeId) {
        List<ModelNodeIndexInfor> nodeInforList = modelNodeService.listModelNodeIndexIdRelationInforByParentId(nodeId);
        // å¦‚果是空存在两种情况,1:id有问题,2:最底层
        if (CollectionUtils.isEmpty(nodeInforList)) {
            List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(nodeId);
            if (CollectionUtils.isNotEmpty(inforList)) {
                nodeInforList.addAll(inforList);
            }
        }
        return nodeInforList;
    }
}
zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml
@@ -199,4 +199,20 @@
        AND di.data_time BETWEEN   #{beginTime}  AND  #{endTime}
        AND di.time_type =  #{timeType}
    </select>
    <select id="getDataItemHourInforByIndexIds" resultType="com.zhitan.realtimedata.domain.DataItem">
        SELECT
        index_id indexId,
        data_time dataTime,
        "value"
        FROM
        "data_item"
        WHERE
        index_id IN
        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
            #{indexId}
        </foreach>
        AND ( begin_time BETWEEN #{beginTime} AND #{endTime} )
        AND time_type = #{timeType}
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/realtimedata/SvgTrendMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.realtimedata.mapper.SvgTrendMapper">
    <resultMap type="com.zhitan.model.domain.EnergyIndex" id="EnergyIndexResult">
        <result property="indexId" column="index_id"/>
        <result property="name" column="name"/>
        <result property="code" column="code"/>
        <result property="indexType" column="index_type"/>
        <result property="indexCategory" column="index_category"/>
        <result property="remark" column="remark"/>
        <result property="unitId" column="unit_id"/>
        <result property="meterId" column="meter_id"/>
        <result property="meterName" column="meter_name"/>
    </resultMap>
    <select id="selectSvgTrendList" parameterType="com.zhitan.model.domain.EnergyIndex" resultMap="EnergyIndexResult">
        select ei.index_id, name, ei.code, index_type, ei.remark, ei.unit_id, index_category,meter_name
        from
        energy_index ei,
        sys_svg_info svg,
        meter_implement as me
        <where>
            ei.code = svg.tag
            and ei.meter_id = me.id
            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
            <if test="code != null  and code != ''">and ei.code like concat('%', #{code}, '%')</if>
            <if test="indexType != null">and index_type = #{indexType}</if>
            <if test="nodeId != null  and nodeId != ''">and svg.node_id = #{nodeId}</if>
            <if test="indexCategory != null  and indexCategory != ''">and index_category =
                #{indexCategory}
            </if>
        </where>
    </select>
</mapper>