DYL
2025-02-10 78382199e35d37b9ec348522c9faac81d80d3ade
能源流向分析
已添加8个文件
已修改6个文件
557 ■■■■■ 文件已修改
zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/resources/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.zhitan.web.controller.statisticalAnalysis;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.dataitem.service.IDataItemService;
import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * èƒ½è€—统计分析
 */
@Api(tags = "能耗统计分析")
@RestController
@RequestMapping("/statisticsAnalysis")
public class EnergyDataItemController {
    @Autowired
    private IDataItemService dataItemService;
    /**
     * èŽ·å–èƒ½æµå›¾å½¢åˆ†æž
     *
     * @param dto è¯·æ±‚参数
     * @return ç»“æžœ
     */
    @Log(title = "获取能流图形分析")
    @ApiOperation(value = "获取能流图形分析", notes = "获取能流图形分析")
    @GetMapping(value = "/getFlowCharts")
    public AjaxResult getFlowCharts(@Validated FlowChartsDTO dto) {
        return AjaxResult.success(dataItemService.getFlowCharts(dto));
    }
}
zhitan-admin/src/main/resources/application.yml
@@ -11,6 +11,8 @@
  addressEnabled: true
  # éªŒè¯ç ç±»åž‹ math æ•°å­—计算 char å­—符验证
  captchaType: math
  # åŸŸååœ°å€
  domainName: https://demo-ems.zhitancloud.com/prod-api
# å¼€å‘环境配置
server:
zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.zhitan.dataitem.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @Author DYL
 **/
@Data
public class NodeIndexValueVO {
    /**
     * èŠ‚ç‚¹id
     */
    private String nodeId;
    /**
     * èŠ‚ç‚¹åç§°
     */
    private String nodeName;
    /**
     * ç‚¹ä½id
     */
    private String indexId;
    /**
     * ç´¯ç§¯é‡
     */
    private BigDecimal value;
}
zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
@@ -1,5 +1,6 @@
package com.zhitan.dataitem.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.carbonemission.domain.CarbonEmission;
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.StagseDataEntry;
@@ -16,7 +17,7 @@
 * @author sys
 * @date 2020-03-25
 */
public interface DataItemMapper {
public interface DataItemMapper extends BaseMapper<DataItem> {
    /**
     * é˜¶æ®µæ•°æ®å½•å…¥
     *
zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
@@ -4,6 +4,8 @@
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.StagseDataEntry;
import com.zhitan.realtimedata.domain.DataItem;
import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO;
import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO;
import java.math.BigDecimal;
import java.util.Date;
@@ -88,4 +90,12 @@
     * @return
     */
    List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds);
    /**
     * èŽ·å–èƒ½æµå›¾å½¢åˆ†æž
     *
     * @param dto è¯·æ±‚参数
     * @return ç»“æžœ
     */
    FlowChartsVO getFlowCharts(FlowChartsDTO dto);
}
zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
@@ -2,15 +2,29 @@
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.StagseDataEntry;
import com.zhitan.dataitem.domain.vo.NodeIndexValueVO;
import com.zhitan.dataitem.mapper.DataItemMapper;
import com.zhitan.dataitem.service.IDataItemService;
import com.zhitan.model.domain.ModelNode;
import com.zhitan.model.mapper.EnergyIndexMapper;
import com.zhitan.model.mapper.ModelNodeMapper;
import com.zhitan.model.mapper.NodeIndexMapper;
import com.zhitan.realtimedata.domain.DataItem;
import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO;
import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsItemVO;
import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
/**
 * stagseDataEntryService业务层处理
@@ -22,7 +36,14 @@
@AllArgsConstructor
public class DataItemServiceImpl implements IDataItemService {
    private final DataItemMapper dataItemMapper;
    @Resource
    private DataItemMapper dataItemMapper;
    @Resource
    private ModelNodeMapper modelNodeMapper;
    @Resource
    private EnergyIndexMapper energyIndexMapper;
    @Resource
    private NodeIndexMapper nodeIndexMapper;
    /**
@@ -117,4 +138,116 @@
    public List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) {
        return dataItemMapper.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds);
    }
    /**
     * èŽ·å–èƒ½æµå›¾å½¢åˆ†æž
     *
     * @param dto è¯·æ±‚参数
     * @return ç»“æžœ
     */
    @Override
    public FlowChartsVO getFlowCharts(FlowChartsDTO dto) {
        FlowChartsVO flowChartsVO = new FlowChartsVO();
        // çˆ¶èŠ‚ç‚¹id
        String nodeId = dto.getNodeId();
        String energyType = dto.getEnergyType();
        LocalDate queryTime = dto.getQueryTime();
        TimeType timeType = dto.getTimeType();
        // èŽ·å–èŠ‚ç‚¹ä¿¡æ¯
        ModelNode modelNode = modelNodeMapper.selectModelNodeById(nodeId);
        if (ObjectUtils.isEmpty(modelNode)) {
            return flowChartsVO;
        }
        // èŽ·å–æŸ¥è¯¢æ—¶é—´
        Map<String, LocalDateTime> dateTimeMap = getDataItemByIndexId(timeType, queryTime);
        // èŽ·å–èŠ‚ç‚¹å’Œç‚¹ä½çš„ç´¯ç§¯é‡
        List<NodeIndexValueVO> parentDataItemList = modelNodeMapper.getDataItemByNodeId(nodeId, energyType, timeType, dateTimeMap);
        // èŽ·å–å­èŠ‚ç‚¹ä¸‹çš„ç‚¹ä½çš„ç´¯ç§¯é‡
        List<NodeIndexValueVO> childDataItemList = modelNodeMapper.getDataItemByParentNodeId(nodeId, energyType, timeType, dateTimeMap);
        // èŽ·å–çˆ¶èŠ‚ç‚¹ä¸‹çš„èƒ½è€—æ•°æ®æ€»å’Œ
        if (ObjectUtils.isNotEmpty(parentDataItemList)) {
            // çˆ¶èŠ‚ç‚¹ä¸‹çš„èƒ½è€—æ•°æ®æ€»å’Œ
            BigDecimal totalValue = parentDataItemList.stream().map(NodeIndexValueVO::getValue)
                    .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
            // æ€»ç´¯ç§¯é‡
            flowChartsVO.setTotalAccumulatedAmount(totalValue);
        }
        // èŽ·å–å­èŠ‚ç‚¹ä¸‹çš„èƒ½è€—æ•°æ®
        if (ObjectUtils.isNotEmpty(childDataItemList)) {
            // å­èŠ‚ç‚¹ä¸‹çš„èƒ½è€—æ•°æ®æ€»å’Œ
            BigDecimal childTotalValue = childDataItemList.stream().map(NodeIndexValueVO::getValue)
                    .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
            // å­èŠ‚ç‚¹ç´¯ç§¯é‡
            flowChartsVO.setChildNodeAccumulatedAmount(childTotalValue);
            // æ ¹æ®å­èŠ‚ç‚¹id分组
            Map<String, List<NodeIndexValueVO>> voMap = childDataItemList.stream()
                    .collect(Collectors.groupingBy(NodeIndexValueVO::getNodeId));
            List<FlowChartsItemVO> itemList = new ArrayList<>();
            for (String childNodeId : voMap.keySet()) {
                FlowChartsItemVO vo = new FlowChartsItemVO();
                vo.setSource(modelNode.getName());
                List<NodeIndexValueVO> valueList = voMap.getOrDefault(childNodeId, Collections.emptyList());
                if (ObjectUtils.isNotEmpty(valueList)) {
                    // å„个子节点的能耗数据总和
                    BigDecimal value = valueList.stream().map(NodeIndexValueVO::getValue)
                            .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
                    valueList.stream().findFirst().ifPresent(nodeIndexValueVO -> vo.setTarget(nodeIndexValueVO.getNodeName()));
                    vo.setValue(value);
                }
                itemList.add(vo);
            }
            flowChartsVO.setItemVOList(itemList);
        }
        return flowChartsVO;
    }
    /**
     * æ ¹æ®indexId查询能耗数据
     */
    private Map<String, LocalDateTime> getDataItemByIndexId(TimeType timeType, LocalDate queryTime) {
        LocalDateTime startTime;
        LocalDateTime endTime;
        LocalDate startDate;
        LocalDate endDate;
        switch (timeType) {
            case DAY:
                // å½“天的开始时间
                startTime = LocalDateTime.of(queryTime, LocalTime.MIN);
                // å½“天的结束时间
                endTime = LocalDateTime.of(queryTime, LocalTime.MAX);
                break;
            case MONTH:
                // å½“月的开始时间
                startDate = queryTime.with(TemporalAdjusters.firstDayOfMonth());
                startTime = LocalDateTime.of(startDate, LocalTime.MIN);
                // å½“月的结束时间
                endDate = queryTime.with(TemporalAdjusters.lastDayOfMonth());
                endTime = LocalDateTime.of(endDate, LocalTime.MAX);
                break;
            case YEAR:
                // å½“年的开始时间
                startDate = queryTime.with(TemporalAdjusters.firstDayOfYear());
                startTime = LocalDateTime.of(startDate, LocalTime.MIN);
                // å½“年的结束时间
                endDate = queryTime.with(TemporalAdjusters.lastDayOfYear());
                endTime = LocalDateTime.of(endDate, LocalTime.MAX);
                break;
            default:
                // å½“天的开始时间
                startTime = LocalDateTime.of(queryTime, LocalTime.MIN);
                // å½“天的结束时间
                endTime = LocalDateTime.of(queryTime, LocalTime.MAX);
                break;
        }
        Map<String, LocalDateTime> localDateTimeMap = new HashMap<>();
        localDateTimeMap.put("startTime", startTime);
        localDateTimeMap.put("endTime", endTime);
        return localDateTimeMap;
    }
}
zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.zhitan.model.domain;
import lombok.Data;
import java.io.Serializable;
/**
 * æ¨¡åž‹èŠ‚ç‚¹ä¸ŽæŒ‡æ ‡çš„å…³è”å…³ç³»(NodeIndex)实体类
 *
 * @author makejava
 * @since 2025-02-10 15:08:14
 */
@Data
public class NodeIndex implements Serializable {
    private static final long serialVersionUID = 386292923712960012L;
    /**
     * èŠ‚ç‚¹ä¸»é”®
     */
    private String nodeId;
    /**
     * æŒ‡æ ‡ä¸»é”®
     */
    private String indexId;
}
zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
@@ -5,11 +5,14 @@
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.domain.SysEnergy;
import com.zhitan.basicdata.domain.SysProduct;
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.vo.NodeIndexValueVO;
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.domain.ModelNode;
import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@@ -196,4 +199,20 @@
    ModelNode getFirstModeNodeInfo(String modelCode);
    List<ModelNodeIndexInfor> selectIndexByNodeIds(@Param("modelCode") String modelCode,@Param("nodeIds") List<String> nodeIds);
    /**
     * æ ¹æ®çˆ¶èŠ‚ç‚¹id和能源类型查询点位下的累积量
     */
    List<NodeIndexValueVO> getDataItemByParentNodeId(@Param("parentId") String parentId,
                                                     @Param("energyType") String energyType,
                                                     @Param("timeType") TimeType timeType,
                                                     @Param("dateTimeMap") Map<String, LocalDateTime> dateTimeMap);
    /**
     * æ ¹æ®èŠ‚ç‚¹id和能源类型查询点位下的累积量
     */
    List<NodeIndexValueVO> getDataItemByNodeId(@Param("nodeId") String nodeId,
                                                     @Param("energyType") String energyType,
                                                     @Param("timeType") TimeType timeType,
                                                     @Param("dateTimeMap") Map<String, LocalDateTime> dateTimeMap);
}
zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.zhitan.model.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.model.domain.NodeIndex;
/**
 * æ¨¡åž‹èŠ‚ç‚¹ä¸ŽæŒ‡æ ‡çš„å…³è”å…³ç³»(NodeIndex)表数据库访问层
 *
 * @author makejava
 * @since 2025-02-10 15:09:17
 */
public interface NodeIndexMapper extends BaseMapper<NodeIndex> {
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.zhitan.statisticalAnalysis.domain.dto;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhitan.common.enums.TimeType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
/**
 * èƒ½æµå›¾æŸ¥è¯¢
 */
@Data
public class FlowChartsDTO {
    /**
     * èƒ½æºç±»åž‹åç§°
     */
    @EnumValue
    @ApiModelProperty(value = "时间类型")
    private TimeType timeType;
    /**
     * æŸ¥è¯¢æ—¶é—´
     */
    @NotNull(message = "查询时间不能为空")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "查询时间")
    private LocalDate queryTime;
    /**
     * èƒ½æºç±»åž‹
     */
    @NotBlank(message = "能源类型不能为空")
    @ApiModelProperty(value = "能源类型")
    private String energyType;
    /**
     * èŠ‚ç‚¹id
     */
    @NotBlank(message = "节点id不能为空")
    @ApiModelProperty(value = "节点id")
    private String nodeId;
    public TimeType getTimeType() {
        if (ObjectUtils.isEmpty(timeType)) {
            return TimeType.DAY;
        }
        return timeType;
    }
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.zhitan.statisticalAnalysis.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
 * èƒ½æµå›¾æŸ¥è¯¢
 */
@Data
public class FlowChartsItemVO {
    /**
     * æºå¤´
     */
    @ApiModelProperty(value = "源头")
    private String source;
    /**
     * ç›®æ ‡
     */
    @ApiModelProperty(value = "目标")
    private String target;
    /**
     * å€¼
     */
    @NotBlank(message = "值")
    @ApiModelProperty(value = "值")
    private BigDecimal value;
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.zhitan.statisticalAnalysis.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collections;
import java.util.List;
/**
 * èƒ½æµå›¾æŸ¥è¯¢
 */
@Data
public class FlowChartsVO {
    // æ€»ç´¯ç§¯é‡
    @ApiModelProperty(value = "总累积量")
    private BigDecimal totalAccumulatedAmount;
    // å­èŠ‚ç‚¹ç´¯ç§¯é‡
    @ApiModelProperty(value = "子节点累积量")
    private BigDecimal childNodeAccumulatedAmount;
    // å·®å€¼
    @ApiModelProperty(value = "差值")
    private BigDecimal difference;
    // èƒ½è€—损失比例
    @ApiModelProperty(value = "能耗损失比例")
    private BigDecimal energyLossRatio;
    private List<FlowChartsItemVO> itemVOList;
    public BigDecimal getTotalAccumulatedAmount() {
        if (totalAccumulatedAmount == null){
            return BigDecimal.ZERO;
        }
        return totalAccumulatedAmount;
    }
    public BigDecimal getChildNodeAccumulatedAmount() {
        if (childNodeAccumulatedAmount == null){
            return BigDecimal.ZERO;
        }
        return childNodeAccumulatedAmount;
    }
    public BigDecimal getDifference() {
        return difference = totalAccumulatedAmount.subtract(childNodeAccumulatedAmount);
    }
    public BigDecimal getEnergyLossRatio() {
        if (BigDecimal.ZERO.compareTo(totalAccumulatedAmount) == 0
                || BigDecimal.ZERO.compareTo(difference) == 0){
            return BigDecimal.ZERO;
        }
        return energyLossRatio = difference.divide(totalAccumulatedAmount, 2, RoundingMode.HALF_UP);
    }
    public FlowChartsVO() {
        this.totalAccumulatedAmount = BigDecimal.ZERO;
        this.childNodeAccumulatedAmount = BigDecimal.ZERO;
        this.difference = BigDecimal.ZERO;
        this.energyLossRatio = BigDecimal.ZERO;
        this.itemVOList = Collections.emptyList();
    }
}
zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
@@ -89,9 +89,9 @@
            resultType="com.zhitan.model.domain.EnergyIndex">
        select ei.index_id as indexId, code, name, index_type as indexType
        from energy_index ei
                 left join node_index ni on ei.index_id = ni.index_id
        left join node_index ni on ei.index_id = ni.index_id
        where ni.node_id = #{nodeId}
          and ei.index_type = #{indexType}
        and ei.index_type = #{indexType}
        <if test="code != null  and code != ''">
            and code like concat('%', #{code}, '%')
        </if>
@@ -332,11 +332,12 @@
               node_category nodeCategory
        FROM "model_node"
        WHERE model_code = #{indexCode}
          AND parent_id IS NULL LIMIT 1;
          AND parent_id IS NULL
        LIMIT 1;
    </select>
    <select id="selectIndexByModelCodeAndNodeId"
            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
        SELECT mn.node_id nodeId,
        SELECT mn.node_id  nodeId,
               mn."name",
               ni.index_id indexId
        FROM model_node mn
@@ -347,15 +348,15 @@
    <select id="getSettingDeviceIndex" resultType="com.zhitan.basicdata.domain.MeterImplement">
        SELECT distinct
               m."id",
               m.code,
               m.meter_name AS meterName,
               m.meter_type    meterType,
               m.wire_diameter    wireDiameter,
               m.max_allowable_power    maxAllowablePower
        m."id",
        m.code,
        m.meter_name AS meterName,
        m.meter_type meterType,
        m.wire_diameter wireDiameter,
        m.max_allowable_power maxAllowablePower
        FROM meter_implement m
                 LEFT JOIN energy_index ei ON ei.meter_id = m."id"
                 LEFT JOIN node_index ni ON ni.index_id = ei.index_id
        LEFT JOIN energy_index ei ON ei.meter_id = m."id"
        LEFT JOIN node_index ni ON ni.index_id = ei.index_id
        WHERE ni.node_id = #{nodeId}
        <if test="energyType!=null and energyType!=''">
            AND M.energy_type = #{energyType}
@@ -365,11 +366,12 @@
    <delete id="delIndexNodeIdAndIndexType">
        delete
        from node_index
        where node_id = #{nodeId} and index_id in (
            select ni.index_id
            from node_index ni left join energy_index ei on ni.index_id = ei.index_id
            where node_id = #{nodeId} and ei.index_type = #{indexType}
        );
        where node_id = #{nodeId}
          and index_id in (select ni.index_id
                           from node_index ni
                                    left join energy_index ei on ni.index_id = ei.index_id
                           where node_id = #{nodeId}
                             and ei.index_type = #{indexType});
    </delete>
    <insert id="setIndexAndNodeId">
        <foreach collection="indexIds" item="indexId" separator=";">
@@ -379,11 +381,11 @@
    </insert>
    <select id="getModelNodeIndexIdByNodeId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
        SELECT mn.node_id  nodeId,
               mn."name"   "name",
               ni.index_id indexId,
               ei.energy_id energyId,
               ei.index_type indexType
        SELECT mn.node_id nodeId,
        mn."name" "name",
        ni.index_id indexId,
        ei.energy_id energyId,
        ei.index_type indexType
        FROM "model_node" mn
        LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
        LEFT JOIN energy_index ei on ni.index_id = ei.index_id
@@ -400,16 +402,17 @@
        FROM "model_node" mn
                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
                 left join energy_index ei on ni.index_id = ei.index_id
        WHERE mn.parent_id = #{parentId} and ei.index_type = 'STATISTIC'
        WHERE mn.parent_id = #{parentId}
          and ei.index_type = 'STATISTIC'
    </select>
    <select id="getFirstModeNodeInfo" resultType="com.zhitan.model.domain.ModelNode">
        <include refid="selectModelNodeVo"/>
        where model_code = #{modelCode}  AND parent_id is null
        where model_code = #{modelCode} AND parent_id is null
        order by order_num
    </select>
    <select id="selectIndexByNodeIds" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
        SELECT mn.node_id  nodeId,
        mn."name"   "name",
        SELECT mn.node_id nodeId,
        mn."name" "name",
        ni.index_id indexId,
        ei.energy_id
        FROM "model_node" mn
@@ -417,15 +420,49 @@
        left join energy_index ei on ni.index_id = ei.index_id
        <where>
            mn.model_code = #{modelCode}
          AND mn.node_id in
        <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
        <if test="modelCode!=null and modelCode!='' and nodeIds.size>0">
            and ei.index_type='STATISTIC'
        </if>
            AND mn.node_id in
            <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
            <if test="modelCode!=null and modelCode!='' and nodeIds.size>0">
                and ei.index_type='STATISTIC'
            </if>
        </where>
    </select>
    <select id="getDataItemByParentNodeId" resultType="com.zhitan.dataitem.domain.vo.NodeIndexValueVO">
        SELECT mn.node_id  nodeId,
               mn."name"   nodeName,
               di.index_id indexId,
               di."value"  value
        FROM model_node mn
                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
                 LEFT JOIN "energy_index" ei ON ei.index_id = ni.index_id
                 LEFT JOIN "data_item" di ON ei.index_id = di.index_id
        WHERE mn.parent_id = #{parentId}
          AND ei.energy_id = #{energyType}
          AND ei.index_type = 'STATISTIC'
          AND di.time_type = #{timeType.name}
          AND di.data_time >= #{dateTimeMap.startTime}
          AND di.data_time &lt;= #{dateTimeMap.endTime}
    </select>
    <select id="getDataItemByNodeId" resultType="com.zhitan.dataitem.domain.vo.NodeIndexValueVO">
        SELECT mn.node_id  nodeId,
               mn."name"   nodeName,
               di.index_id indexId,
               di."value"  value
        FROM "model_node" mn
                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
                 LEFT JOIN "energy_index" ei ON ei.index_id = ni.index_id
                 LEFT JOIN "data_item" di ON ei.index_id = di.index_id
        WHERE mn.node_id = #{nodeId}
          AND ei.energy_id = #{energyType}
          AND ei.index_type = 'STATISTIC'
          AND di.time_type = #{timeType.name}
          AND di.data_time >= #{dateTimeMap.startTime}
          AND di.data_time &lt;= #{dateTimeMap.endTime}
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
<?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.model.mapper.NodeIndexMapper">
    <resultMap type="com.zhitan.model.domain.NodeIndex" id="NodeIndexMap">
        <result property="nodeId" column="node_id" jdbcType="VARCHAR"/>
        <result property="indexId" column="index_id" jdbcType="VARCHAR"/>
    </resultMap>
</mapper>