From b36d66e090487d54d6664199ca9a807c13fb074b Mon Sep 17 00:00:00 2001
From: DYL0109 <dn18191638832@163.com>
Date: 星期五, 18 四月 2025 19:12:05 +0800
Subject: [PATCH] 报警分析优化

---
 zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java                |    3 
 zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml                       |  791 +++++++++++++++++++++++----------------------
 zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/MeterImplementModel.java       |   22 +
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java |  184 ++++++----
 4 files changed, 536 insertions(+), 464 deletions(-)

diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
index b416f28..f18bbc5 100644
--- a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
@@ -8,8 +8,8 @@
 import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
 import com.zhitan.alarm.mapper.HistoryAlarmMapper;
 import com.zhitan.alarm.services.IAlarmAnalysisService;
-import com.zhitan.basicdata.domain.MeterImplement;
 import com.zhitan.basicdata.domain.SysEnergy;
+import com.zhitan.basicdata.domain.vo.MeterImplementModel;
 import com.zhitan.basicdata.mapper.MeterImplementMapper;
 import com.zhitan.basicdata.mapper.SysEnergyMapper;
 import com.zhitan.common.enums.IndexType;
@@ -17,7 +17,6 @@
 import com.zhitan.common.utils.StringUtils;
 import com.zhitan.consumptionanalysis.domain.vo.ChartData;
 import com.zhitan.consumptionanalysis.domain.vo.EnergyProportion;
-import com.zhitan.model.domain.EnergyIndex;
 import com.zhitan.model.domain.ModelNode;
 import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
 import com.zhitan.model.mapper.EnergyIndexMapper;
@@ -27,10 +26,7 @@
 import org.springframework.stereotype.Service;
 
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -62,19 +58,12 @@
     @Override
     public AlarmAnalysisVO getByNodeId(AlarmAnalysisDTO alarmAnalysisDTO) {
         AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
-        List<EnergyProportion> alarmProportionList = new ArrayList<>();
-        for(IndexType indexType : IndexType.values()){
-            EnergyProportion proportion = new EnergyProportion();
-            proportion.setEnergyName(indexType.name());
-            proportion.setCount(0D);
-            proportion.setPercentage(0D);
-            alarmProportionList.add(proportion);
-        }
-                
-                
+        // 鍒濆鍖栨姤璀︽瘮渚嬪垪琛�
+        List<EnergyProportion> alarmProportionList = initializeProportionList(IndexType.values());
+        // 鍒濆鍖栬兘婧愭瘮渚嬪垪琛�
         List<EnergyProportion> energyProportionList = new ArrayList<>();
-        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(new SysEnergy());
-        sysEnergies.forEach(sysEnergy -> {
+
+        sysEnergyMapper.selectSysEnergyList(new SysEnergy()).forEach(sysEnergy -> {
             EnergyProportion proportion = new EnergyProportion();
             proportion.setEnergyName(sysEnergy.getEnersno());
             proportion.setCount(0D);
@@ -112,67 +101,21 @@
         query.setNodeId(nodeId);
         final List<JkHistoryAlarm> jkHistoryAlarms = historyAlarmMapper.selectJkHistoryAlarmList(query);
         if(CollectionUtils.isNotEmpty(jkHistoryAlarms)) {
-            jkHistoryAlarms.forEach(alarm -> {
-                final String indexType = alarm.getIndexType();
-                final String indexId = alarm.getIndexId();
-                final String alarmNodeId = alarm.getNodeId();
-                if ("COLLECT".equals(indexType) && StringUtils.isEmpty(alarm.getEnergyId())) {
-                    //鏍规嵁nodeId鍜宨ndexId 鍘绘煡璇㈣閲忓櫒鍏�
-                    EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
-                    final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
-                    alarm.setEnergyId(meterImplement.getEnergyType());
-                }
-            });
-            final Map<String, List<JkHistoryAlarm>> alarmTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getIndexType));
-            alarmTypeMap.forEach((key, value) -> {
-                alarmProportionList.forEach(alarm->{
-                    if(alarm.getEnergyName().equals(key)){
-                        alarm.setEnergyName(key);
-                        alarm.setCount(format2Double(value.size()));
-                        double percentage = value.size() / jkHistoryAlarms.size() * 100;
-                        alarm.setPercentage(format2Double(percentage));
-                    }
-                });
-            });
-            final Map<String, List<JkHistoryAlarm>> energyTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getEnergyId));
-            energyTypeMap.forEach((key, value) -> {
-                energyProportionList.forEach(en->{
-                    if(en.getEnergyName().equals(key)){
-                        en.setEnergyName(key);
-                        en.setCount(format2Double(value.size()));
-                        double percentage = value.size() / jkHistoryAlarms.size() * 100;
-                        en.setPercentage(format2Double(percentage));
-                    }
-                });
-                
-            });
 
+            // 璁剧疆鑳芥簮绫诲瀷
+            processEnergyType(jkHistoryAlarms);
 
-            jkHistoryAlarms.forEach(jkHistoryAlarm -> {
-                final String alarmBeginTime = DateUtil.format(jkHistoryAlarm.getAlarmBeginTime(), timeFormat);
-                jkHistoryAlarm.setAlarmTime(alarmBeginTime);
-            });
-            final Map<String, List<JkHistoryAlarm>> timeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getAlarmTime));
-            while (!beginTime.after(endTime)) {
-                final String currentTime = DateUtil.format(beginTime, timeFormat);
-                final List<JkHistoryAlarm> value = timeMap.get(currentTime);
-                ChartData chartData = new ChartData();
-                chartData.setXData(currentTime);
-                chartData.setYValue(null == value?0:(double)value.size());
-                chartDataList.add(chartData);
+            // 璁$畻鎶ヨ绫诲瀷姣斾緥
+            calculateProportions(jkHistoryAlarms, alarmProportionList, JkHistoryAlarm::getIndexType);
+            // 璁$畻鑳芥簮绫诲瀷姣斾緥
+            calculateProportions(jkHistoryAlarms, energyProportionList, JkHistoryAlarm::getEnergyId);
 
-                switch (TimeType.valueOf(queryTimeType)) {
-                    case DAY:
-                        beginTime = DateUtil.offsetHour(beginTime, 1);
-                        break;
-                    case MONTH:
-                        beginTime = DateUtil.offsetDay(beginTime, 1);
-                        break;
-                    default:
-                        beginTime = DateUtil.offsetMonth(beginTime, 1);
-                        break;
-                }
-            }
+            // 澶勭悊鎶ヨ鏃堕棿
+            processAlarmTimes(jkHistoryAlarms, timeFormat);
+
+            // 鐢熸垚鍥捐〃鏁版嵁
+            generateChartData(chartDataList, jkHistoryAlarms, beginTime, endTime, timeFormat, queryTimeType);
+
         }
         alarmAnalysisVO.setAlarmProportion(alarmProportionList);
         alarmAnalysisVO.setEnergyProportion(energyProportionList);
@@ -180,6 +123,95 @@
         return alarmAnalysisVO;
     }
 
+    /**
+     * 璁剧疆鑳芥簮绫诲瀷
+     */
+    private void processEnergyType(List<JkHistoryAlarm> jkHistoryAlarms) {
+        List<String> indexIds = jkHistoryAlarms.stream().map(JkHistoryAlarm::getIndexId).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(indexIds)) {
+            List<MeterImplementModel> modelList = energyIndexMapper.selectEnergyTypeByIndex(indexIds);
+            if (CollectionUtils.isNotEmpty(modelList)){
+                Map<String, String> energyMap = modelList.stream().collect(Collectors.toMap(MeterImplementModel::getIndexId, MeterImplementModel::getEnergyType));
+
+                jkHistoryAlarms.forEach(alarm -> {
+                    if (IndexType.COLLECT.getDescription().equals(alarm.getIndexType()) && StringUtils.isEmpty(alarm.getEnergyId())){
+                        alarm.setEnergyId(energyMap.get(alarm.getIndexId()));
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     * 璁$畻鍗犳瘮
+     */
+    private void calculateProportions(List<JkHistoryAlarm> jkHistoryAlarms, List<EnergyProportion> proportionList, java.util.function.Function<JkHistoryAlarm, String> keyExtractor) {
+        Map<String, List<JkHistoryAlarm>> typeMap = jkHistoryAlarms.stream()
+                .collect(Collectors.groupingBy(keyExtractor));
+        typeMap.forEach((key, value) -> {
+            proportionList.forEach(alarm -> {
+                if (alarm.getEnergyName().equals(key)) {
+                    alarm.setCount(format2Double(value.size()));
+                    double percentage = (double) value.size() / jkHistoryAlarms.size() * 100;
+                    alarm.setPercentage(format2Double(percentage));
+                }
+            });
+        });
+    }
+
+    /**
+     * 澶勭悊鎶ヨ鏃堕棿
+     */
+    private void processAlarmTimes(List<JkHistoryAlarm> jkHistoryAlarms, String timeFormat) {
+        jkHistoryAlarms.forEach(jkHistoryAlarm -> {
+            String alarmBeginTime = DateUtil.format(jkHistoryAlarm.getAlarmBeginTime(), timeFormat);
+            jkHistoryAlarm.setAlarmTime(alarmBeginTime);
+        });
+    }
+
+    /**
+     * 鐢熸垚鍥捐〃鏁版嵁
+     */
+    private void generateChartData(List<ChartData> chartDataList, List<JkHistoryAlarm> jkHistoryAlarms, Date beginTime, Date endTime, String timeFormat, String queryTimeType) {
+        Map<String, List<JkHistoryAlarm>> timeMap = jkHistoryAlarms.stream()
+                .collect(Collectors.groupingBy(JkHistoryAlarm::getAlarmTime));
+        while (!beginTime.after(endTime)) {
+            String currentTime = DateUtil.format(beginTime, timeFormat);
+            List<JkHistoryAlarm> value = timeMap.get(currentTime);
+            ChartData chartData = new ChartData();
+            chartData.setXData(currentTime);
+            chartData.setYValue(value == null ? 0 : (double) value.size());
+            chartDataList.add(chartData);
+
+            switch (TimeType.valueOf(queryTimeType)) {
+                case DAY:
+                    beginTime = DateUtil.offsetHour(beginTime, 1);
+                    break;
+                case MONTH:
+                    beginTime = DateUtil.offsetDay(beginTime, 1);
+                    break;
+                default:
+                    beginTime = DateUtil.offsetMonth(beginTime, 1);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * 鍒濆鍖栧崰姣斿垪琛�
+     */
+    private List<EnergyProportion> initializeProportionList(Object[] items) {
+        List<EnergyProportion> proportionList = new ArrayList<>();
+        for (Object item : items) {
+            EnergyProportion proportion = new EnergyProportion();
+            proportion.setEnergyName(item.toString());
+            proportion.setCount(0D);
+            proportion.setPercentage(0D);
+            proportionList.add(proportion);
+        }
+        return proportionList;
+    }
+
     private double format2Double(double averageEnergy) {
         // 鍒涘缓DecimalFormat瀵硅薄锛岃缃繚鐣欎袱浣嶅皬鏁�
         DecimalFormat df = new DecimalFormat("#.00");
diff --git a/zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/MeterImplementModel.java b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/MeterImplementModel.java
new file mode 100644
index 0000000..af09843
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/MeterImplementModel.java
@@ -0,0 +1,22 @@
+package com.zhitan.basicdata.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class MeterImplementModel {
+
+    /**
+     * indexId
+     */
+    private String indexId;
+
+    /**
+     * meterId
+     */
+    private String meterId;
+
+    /**
+     * 鑳芥簮绫诲瀷
+     */
+    private String energyType;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
index c757ace..63a326d 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhitan.basicdata.domain.vo.MeterImplementModel;
 import com.zhitan.model.domain.EnergyIndex;
 import com.zhitan.model.domain.EnergyIndexQuery;
 import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
@@ -105,4 +106,6 @@
   List<EnergyIndex> getIndexByMeterIdIndexCode(@Param("meterId") String meterId, @Param("indexCode") String indexCode, @Param("nodeId") String nodeId);
 
   List<ModelNodeIndexInfo> getModelNodeIndexInfoListByIndexIds(@Param("indexIds") String[] indexIds);
+
+  List<MeterImplementModel> selectEnergyTypeByIndex(@Param("indexIds") List<String> indexIds);
 }
diff --git a/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
index 1145863..3534519 100644
--- a/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
@@ -1,317 +1,319 @@
 <?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">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zhitan.model.mapper.EnergyIndexMapper">
 
-  <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="orderNum" column="order_num"/>
-    <result property="equipment" column="equipment"/>
-    <result property="energyId" column="energy_id"/>
-    <result property="meterName" column="meter_name"/>
-  </resultMap>
+    <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="orderNum" column="order_num"/>
+        <result property="equipment" column="equipment"/>
+        <result property="energyId" column="energy_id"/>
+        <result property="meterName" column="meter_name"/>
+    </resultMap>
 
-  <sql id="selectEnergyIndexVo">
-    select index_id,
-           name,
-           code,
-           index_type,
-           index_category,
-           remark,
-           unit_id,
-           meter_id,
-           order_num,
-           equipment,
-           energy_id
-    from energy_index
-  </sql>
+    <sql id="selectEnergyIndexVo">
+        select index_id,
+               name,
+               code,
+               index_type,
+               index_category,
+               remark,
+               unit_id,
+               meter_id,
+               order_num,
+               equipment,
+               energy_id
+        from energy_index
+    </sql>
 
-  <select id="selectEnergyIndexList" parameterType="com.zhitan.model.domain.EnergyIndex" resultMap="EnergyIndexResult">
-    select ni.index_id, name, code, index_type, remark, unit_id, index_category
-    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
-    <where>
-      <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
-      <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
-      <if test="indexType != null">and index_type = #{indexType}</if>
-      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
-      <if test="indexCategory != null  and indexCategory != ''">and index_category =
-        #{indexCategory}
-      </if>
-    </where>
-    order by ei.order_num
-  </select>
+    <select id="selectEnergyIndexList" parameterType="com.zhitan.model.domain.EnergyIndex"
+            resultMap="EnergyIndexResult">
+        select ni.index_id, name, code, index_type, remark, unit_id, index_category
+        from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+        <where>
+            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
+            <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
+            <if test="indexType != null">and index_type = #{indexType}</if>
+            <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
+            <if test="indexCategory != null  and indexCategory != ''">and index_category =
+                #{indexCategory}
+            </if>
+        </where>
+        order by ei.order_num
+    </select>
 
-  <select id="selectEnergyIndexById" parameterType="String" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where index_id = #{indexId}
-    order by order_num
-  </select>
+    <select id="selectEnergyIndexById" parameterType="String" resultMap="EnergyIndexResult">
+        <include refid="selectEnergyIndexVo"/>
+        where index_id = #{indexId}
+        order by order_num
+    </select>
 
-  <select id="selectEnergyIndexByIds" resultType="com.zhitan.model.domain.EnergyIndex">
-    <include refid="selectEnergyIndexVo"/>
-    where
+    <select id="selectEnergyIndexByIds" resultType="com.zhitan.model.domain.EnergyIndex">
+        <include refid="selectEnergyIndexVo"/>
+        where
         index_id IN
         <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
-          #{indexId}
+            #{indexId}
         </foreach>
-  </select>
+    </select>
 
-  <select id="energyIndexHasExist" resultType="java.lang.Integer">
-    select count(*)
-    from energy_index
-    where code = #{code};
-  </select>
-  <select id="energyIndexHasExistWhenUpdate" resultType="java.lang.Integer">
-    select count(*)
-    from energy_index
-    where code = #{code}
-      AND index_id != #{indexId};
-  </select>
-  <select id="getMeterIndex" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where meter_id = #{meterId}
-    order by order_num
-  </select>
-  <select id="modelHasConfig" resultType="java.lang.Integer">
-    select count(*)
-    from model_node
-    where model_code = #{modelCode};
-  </select>
-  <select id="selectCollectIndex" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where meter_id = #{deviceId}
-    order by order_num
-  </select>
-  <select id="getEnergyIndexByIds" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where index_id in
-    <foreach item="indexId" collection="list" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-    order by order_num
-  </select>
-  <select id="getEnergyIndexByCodes" resultMap="EnergyIndexResult">
-    <include refid="selectEnergyIndexVo"/>
-    where code in
-    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    order by order_num
-  </select>
-  <select id="getIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
-    select ei.*
-    from energy_index ei
-           left join node_index ni on ei.index_id = ni.index_id
-    where ni.node_id in (select node_id
-                         from model_node
-                         where address like (select address
-                                             from model_node
-                                             where node_id = #{nodeId}) || '%')
-    order by ei.order_num
-  </select>
-  <select id="searchIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
-    select ei.*
-    from energy_index ei
-           left join node_index ni on ei.index_id = ni.index_id
-    where ni.node_id in (select node_id
-                         from model_node
-                         where address like (select address
-                                             from model_node
-                                             where node_id = #{nodeId}) || '%')
-      and (ei.code like concat('%', #{filter}, '%') or ei.name like concat('%', #{filter}, '%'))
-    order by ei.order_num
-  </select>
-  <select id="selectEnergyIndex" resultMap="EnergyIndexResult">
-    select ni.index_id, name, code, index_type, remark, unit_id, index_category
-    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
-    <where>
-      <if test="codeOrName != null  and codeOrName != ''">and (name like concat('%', #{codeOrName},
-        '%') or code like concat('%', #{codeOrName}, '%'))
-      </if>
-      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
-      <if test="indexType != null">and index_type = #{indexType}</if>
-      <if test="indexCategory != null  and indexCategory != ''">and index_category =
-        #{indexCategory}
-      </if>
-    </where>
-    order by ei.order_num
-  </select>
+    <select id="energyIndexHasExist" resultType="java.lang.Integer">
+        select count(*)
+        from energy_index
+        where code = #{code};
+    </select>
+    <select id="energyIndexHasExistWhenUpdate" resultType="java.lang.Integer">
+        select count(*)
+        from energy_index
+        where code = #{code}
+          AND index_id != #{indexId};
+    </select>
+    <select id="getMeterIndex" resultMap="EnergyIndexResult">
+        <include refid="selectEnergyIndexVo"/>
+        where meter_id = #{meterId}
+        order by order_num
+    </select>
+    <select id="modelHasConfig" resultType="java.lang.Integer">
+        select count(*)
+        from model_node
+        where model_code = #{modelCode};
+    </select>
+    <select id="selectCollectIndex" resultMap="EnergyIndexResult">
+        <include refid="selectEnergyIndexVo"/>
+        where meter_id = #{deviceId}
+        order by order_num
+    </select>
+    <select id="getEnergyIndexByIds" resultMap="EnergyIndexResult">
+        <include refid="selectEnergyIndexVo"/>
+        where index_id in
+        <foreach item="indexId" collection="list" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+        order by order_num
+    </select>
+    <select id="getEnergyIndexByCodes" resultMap="EnergyIndexResult">
+        <include refid="selectEnergyIndexVo"/>
+        where code in
+        <foreach item="indexCode" collection="list" open="(" separator="," close=")">
+            #{indexCode}
+        </foreach>
+        order by order_num
+    </select>
+    <select id="getIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
+        select ei.*
+        from energy_index ei
+                 left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id in (select node_id
+                             from model_node
+                             where address like (select address
+                                                 from model_node
+                                                 where node_id = #{nodeId}) || '%')
+        order by ei.order_num
+    </select>
+    <select id="searchIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
+        select ei.*
+        from energy_index ei
+                 left join node_index ni on ei.index_id = ni.index_id
+        where ni.node_id in (select node_id
+                             from model_node
+                             where address like (select address
+                                                 from model_node
+                                                 where node_id = #{nodeId}) || '%')
+          and (ei.code like concat('%', #{filter}, '%') or ei.name like concat('%', #{filter}, '%'))
+        order by ei.order_num
+    </select>
+    <select id="selectEnergyIndex" resultMap="EnergyIndexResult">
+        select ni.index_id, name, code, index_type, remark, unit_id, index_category
+        from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+        <where>
+            <if test="codeOrName != null  and codeOrName != ''">and (name like concat('%', #{codeOrName},
+                '%') or code like concat('%', #{codeOrName}, '%'))
+            </if>
+            <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
+            <if test="indexType != null">and index_type = #{indexType}</if>
+            <if test="indexCategory != null  and indexCategory != ''">and index_category =
+                #{indexCategory}
+            </if>
+        </where>
+        order by ei.order_num
+    </select>
 
-  <insert id="insertEnergyIndex" parameterType="com.zhitan.model.domain.EnergyIndex">
-    insert into energy_index
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="indexId != null  and indexId != ''">index_id,</if>
-      <if test="name != null  and name != ''">name,</if>
-      <if test="code != null  and code != ''">code,</if>
-      <if test="indexType != null">index_type,</if>
-      <if test="indexCategory != null  and indexCategory != ''">
-        index_category,
-      </if>
-      <if test="remark != null  and remark != ''">remark,</if>
-      <if test="unitId != null  and unitId != ''">unit_id,</if>
-      <if test="orderNum != null">order_num,</if>
-      <if test="equipment != null">equipment,</if>
-      <if test="energyId != null">energy_id,</if>
-    </trim>
-    <trim prefix="values (" suffix=");" suffixOverrides=",">
-      <if test="indexId != null  and indexId != ''">
-        #{indexId},
-      </if>
-      <if test="name != null  and name != ''">#{name},</if>
-      <if test="code != null  and code != ''">#{code},</if>
-      <if test="indexType != null">
-        #{indexType},
-      </if>
-      <if test="indexCategory != null  and indexCategory != ''">
-        #{indexCategory},
-      </if>
-      <if test="remark != null  and remark != ''">#{remark},
-      </if>
-      <if test="unitId != null  and unitId != ''">#{unitId},
-      </if>
-      <if test="orderNum != null">#{orderNum},
-      </if>
-      <if test="equipment != null">#{equipment},
-      </if>
-      <if test="energyId != null">#{energyId},
-      </if>
-    </trim>
+    <insert id="insertEnergyIndex" parameterType="com.zhitan.model.domain.EnergyIndex">
+        insert into energy_index
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="indexId != null  and indexId != ''">index_id,</if>
+            <if test="name != null  and name != ''">name,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="indexType != null">index_type,</if>
+            <if test="indexCategory != null  and indexCategory != ''">
+                index_category,
+            </if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="unitId != null  and unitId != ''">unit_id,</if>
+            <if test="orderNum != null">order_num,</if>
+            <if test="equipment != null">equipment,</if>
+            <if test="energyId != null">energy_id,</if>
+        </trim>
+        <trim prefix="values (" suffix=");" suffixOverrides=",">
+            <if test="indexId != null  and indexId != ''">
+                #{indexId},
+            </if>
+            <if test="name != null  and name != ''">#{name},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="indexType != null">
+                #{indexType},
+            </if>
+            <if test="indexCategory != null  and indexCategory != ''">
+                #{indexCategory},
+            </if>
+            <if test="remark != null  and remark != ''">#{remark},
+            </if>
+            <if test="unitId != null  and unitId != ''">#{unitId},
+            </if>
+            <if test="orderNum != null">#{orderNum},
+            </if>
+            <if test="equipment != null">#{equipment},
+            </if>
+            <if test="energyId != null">#{energyId},
+            </if>
+        </trim>
 
-  </insert>
-  <insert id="insertNodeIndex">
-    insert into node_index (node_id, index_id) values (#{nodeId}, #{indexId});
-  </insert>
-  <insert id="insertEnergyIndices">
-    <foreach collection="energyIndices" item="energyIndex" separator=";">
-      insert into energy_index
-      <trim prefix="(" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
-        <if test="energyIndex.indexType != null">index_type,</if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          index_category,
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
-        <if test="energyIndex.orderNum != null">order_num,</if>
-      </trim>
-      <trim prefix="values (" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
-          #{energyIndex.indexId},
-        </if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
-        <if test="energyIndex.indexType != null">
-          #{energyIndex.indexType},
-        </if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          #{energyIndex.indexCategory},
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
-        </if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
-        </if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
-          #{energyIndex.meterId},
-        </if>
-        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
-      </trim>
-    </foreach>
-  </insert>
-  <insert id="saveEnergyIndex">
-    <foreach collection="list" item="energyIndex" separator=";">
-      insert into energy_index
-      <trim prefix="(" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
-        <if test="energyIndex.indexType != null">index_type,</if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          index_category,
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
-        <if test="energyIndex.orderNum != null">order_num,</if>
-      </trim>
-      <trim prefix="values (" suffix=")" suffixOverrides=",">
-        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
-          #{energyIndex.indexId},
-        </if>
-        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
-        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
-        <if test="energyIndex.indexType != null">
-          #{energyIndex.indexType},
-        </if>
-        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
-          #{energyIndex.indexCategory},
-        </if>
-        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
-        </if>
-        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
-        </if>
-        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
-          #{energyIndex.meterId},
-        </if>
-        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
-      </trim>
-      ;
-      insert into node_index (node_id, index_id) values (#{energyIndex.nodeId},
-      #{energyIndex.indexId});
-    </foreach>
-  </insert>
+    </insert>
+    <insert id="insertNodeIndex">
+        insert into node_index (node_id, index_id)
+        values (#{nodeId}, #{indexId});
+    </insert>
+    <insert id="insertEnergyIndices">
+        <foreach collection="energyIndices" item="energyIndex" separator=";">
+            insert into energy_index
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
+                <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
+                <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
+                <if test="energyIndex.indexType != null">index_type,</if>
+                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+                    index_category,
+                </if>
+                <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
+                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
+                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
+                <if test="energyIndex.orderNum != null">order_num,</if>
+            </trim>
+            <trim prefix="values (" suffix=")" suffixOverrides=",">
+                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
+                    #{energyIndex.indexId},
+                </if>
+                <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
+                <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
+                <if test="energyIndex.indexType != null">
+                    #{energyIndex.indexType},
+                </if>
+                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+                    #{energyIndex.indexCategory},
+                </if>
+                <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
+                </if>
+                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
+                </if>
+                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
+                    #{energyIndex.meterId},
+                </if>
+                <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
+            </trim>
+        </foreach>
+    </insert>
+    <insert id="saveEnergyIndex">
+        <foreach collection="list" item="energyIndex" separator=";">
+            insert into energy_index
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
+                <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
+                <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
+                <if test="energyIndex.indexType != null">index_type,</if>
+                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+                    index_category,
+                </if>
+                <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
+                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
+                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
+                <if test="energyIndex.orderNum != null">order_num,</if>
+            </trim>
+            <trim prefix="values (" suffix=")" suffixOverrides=",">
+                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
+                    #{energyIndex.indexId},
+                </if>
+                <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
+                <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
+                <if test="energyIndex.indexType != null">
+                    #{energyIndex.indexType},
+                </if>
+                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
+                    #{energyIndex.indexCategory},
+                </if>
+                <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
+                </if>
+                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
+                </if>
+                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
+                    #{energyIndex.meterId},
+                </if>
+                <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
+            </trim>
+            ;
+            insert into node_index (node_id, index_id) values (#{energyIndex.nodeId},
+            #{energyIndex.indexId});
+        </foreach>
+    </insert>
 
-  <update id="updateEnergyIndex" parameterType="com.zhitan.model.domain.EnergyIndex">
-    update energy_index
-    <trim prefix="SET" suffixOverrides=",">
-      <if test="name != null  and name != ''">name = #{name},</if>
-      <if test="code != null  and code != ''">code = #{code},</if>
-      <if test="indexType != null">index_type = #{indexType},</if>
-      <if test="indexCategory != null  and indexCategory != ''">index_category = #{indexCategory},
-      </if>
-      <if test="remark != null  and remark != ''">remark = #{remark},</if>
-      <if test="unitId != null  and unitId != ''">unit_id = #{unitId},</if>
-      <if test="orderNum != null">order_num = #{orderNum},</if>
-      <if test="equipment != null">equipment = #{equipment},</if>
-      <if test="energyId != null">energy_id=#{energyId},</if>
-    </trim>
-    where index_id = #{indexId}
-  </update>
+    <update id="updateEnergyIndex" parameterType="com.zhitan.model.domain.EnergyIndex">
+        update energy_index
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null  and name != ''">name = #{name},</if>
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="indexType != null">index_type = #{indexType},</if>
+            <if test="indexCategory != null  and indexCategory != ''">index_category = #{indexCategory},
+            </if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="unitId != null  and unitId != ''">unit_id = #{unitId},</if>
+            <if test="orderNum != null">order_num = #{orderNum},</if>
+            <if test="equipment != null">equipment = #{equipment},</if>
+            <if test="energyId != null">energy_id=#{energyId},</if>
+        </trim>
+        where index_id = #{indexId}
+    </update>
 
-  <delete id="deleteEnergyIndexByIds" parameterType="String">
-    delete from energy_index where index_id in
-    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>;
-    delete from node_index where node_id = #{nodeId} and index_id in
-    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>;
-  </delete>
-  <delete id="deleteIndexByMeterId">
-    delete
-    from energy_index
-    where meter_id = #{meterId}
-  </delete>
-  <delete id="removeEnergyIndex">
-    delete from energy_index where index_id in
-    <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
-      #{indexId}
-    </foreach>
-  </delete>
+    <delete id="deleteEnergyIndexByIds" parameterType="String">
+        delete from energy_index where index_id in
+        <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>;
+        delete from node_index where node_id = #{nodeId} and index_id in
+        <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>;
+    </delete>
+    <delete id="deleteIndexByMeterId">
+        delete
+        from energy_index
+        where meter_id = #{meterId}
+    </delete>
+    <delete id="removeEnergyIndex">
+        delete from energy_index where index_id in
+        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+    </delete>
 
-  <select id="getEnergyIndexMeterByCodes" resultMap="EnergyIndexResult">
-    select ei.index_id,
+    <select id="getEnergyIndexMeterByCodes" resultMap="EnergyIndexResult">
+        select ei.index_id,
         ei.name,
         ei.code,
         ei.index_type,
@@ -324,100 +326,101 @@
         ei.energy_id,
         meter_name
         from energy_index as ei,meter_implement as me
-    where ei.code in
-    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
-      #{indexCode}
-    </foreach>
-    and ei.meter_id = me.id
-    order by ei.order_num
-  </select>
-
-  <select id="selectEnergyIndexPage" resultMap="EnergyIndexResult">
-    select ni.index_id, name, code, index_type, remark, unit_id, index_category
-    from energy_index ei left join node_index ni on ei.index_id = ni.index_id
-    <where>
-      <if test="query.codeOrName != null  and query.codeOrName != ''">and (name like concat('%', #{query.codeOrName},
-        '%') or code like concat('%', #{query.codeOrName}, '%'))
-      </if>
-      <if test="query.indexType != null">and index_type = #{query.indexType}</if>
-      <if test="query.nodeId != null  and query.nodeId != ''">and ni.node_id = #{query.nodeId}</if>
-      <if test="query.indexCategory != null  and query.indexCategory != ''">and index_category =
-        #{query.indexCategory}
-      </if>
-    </where>
-    order by ei.order_num
-
-  </select>
-    <select id="listIndexByMeterIds" resultType="com.zhitan.model.domain.EnergyIndex">
-      select ei.index_id,
-      name,
-      code,
-      index_type,
-      index_category,
-      remark,
-      unit_id,
-      meter_id,
-      order_num,
-      equipment,
-      energy_id
-      from energy_index ei
-      left join node_index ni on ei.index_id = ni.index_id
-      <where>
-
-        <if test="nodeId != null  and nodeId != ''">and ni.node_id = #{nodeId}</if>
-        <if test="meterIds != null">
-          and ei.meter_id in
-          <foreach collection="meterIds" item="meterId" open="(" separator="," close=")">
-            #{meterId}
-          </foreach>
-        </if>
-      </where>
+        where ei.code in
+        <foreach item="indexCode" collection="list" open="(" separator="," close=")">
+            #{indexCode}
+        </foreach>
+        and ei.meter_id = me.id
+        order by ei.order_num
     </select>
-  <select id="getiEnergyIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
-    <include refid="selectEnergyIndexVo"/>
-    where code = #{cdoe}
-  </select>
-  <select id="getIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
-    SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
-    LEFT JOIN node_device nd on ei.meter_id =  nd.device_id
-    LEFT JOIN meter_implement  mi on mi."id" = nd.device_id
-    <where>
-        <if test="nodeId != null  and nodeId != ''">and nd.node_id  = #{nodeId}</if>
-        <if test="code != null  and code != ''">
-          and (mi.meter_name like concat('%', #{code}, '%')
-          or ei.code like concat('%', #{code}, '%')
-          or ei.name like concat('%', #{code}, '%')
-          )
-        </if>
-    </where>
-  </select>
-  <select id="getIndexByMeterIdIndexCode" resultType="com.zhitan.model.domain.EnergyIndex">
-    SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
-    LEFT JOIN node_device nd on ei.meter_id =  nd.device_id
-    LEFT JOIN meter_implement  mi on mi."id" = nd.device_id
-    <where>
-        <if test="nodeId != null  and nodeId != ''">and nd.node_id  = #{nodeId}</if>
-        <if test="indexCode != null  and indexCode != ''">
-          and (mi.meter_name like concat('%', #{indexCode}, '%')
-          or ei.code like concat('%', #{indexCode}, '%')
-          or ei.name like concat('%', #{indexCode}, '%')
-          )
-        </if>
-        <if test="meterId != null  and meterId != ''">
-          and ei.meter_id = #{meterId}
-        </if>
-    </where>
-  </select>
+
+    <select id="selectEnergyIndexPage" resultMap="EnergyIndexResult">
+        select ni.index_id, name, code, index_type, remark, unit_id, index_category
+        from energy_index ei left join node_index ni on ei.index_id = ni.index_id
+        <where>
+            <if test="query.codeOrName != null  and query.codeOrName != ''">and (name like concat('%',
+                #{query.codeOrName},
+                '%') or code like concat('%', #{query.codeOrName}, '%'))
+            </if>
+            <if test="query.indexType != null">and index_type = #{query.indexType}</if>
+            <if test="query.nodeId != null  and query.nodeId != ''">and ni.node_id = #{query.nodeId}</if>
+            <if test="query.indexCategory != null  and query.indexCategory != ''">and index_category =
+                #{query.indexCategory}
+            </if>
+        </where>
+        order by ei.order_num
+
+    </select>
+    <select id="listIndexByMeterIds" resultType="com.zhitan.model.domain.EnergyIndex">
+        select ei.index_id,
+        name,
+        code,
+        index_type,
+        index_category,
+        remark,
+        unit_id,
+        meter_id,
+        order_num,
+        equipment,
+        energy_id
+        from energy_index ei
+        left join node_index ni on ei.index_id = ni.index_id
+        <where>
+
+            <if test="nodeId != null  and nodeId != ''">and ni.node_id = #{nodeId}</if>
+            <if test="meterIds != null">
+                and ei.meter_id in
+                <foreach collection="meterIds" item="meterId" open="(" separator="," close=")">
+                    #{meterId}
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="getiEnergyIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
+        <include refid="selectEnergyIndexVo"/>
+        where code = #{cdoe}
+    </select>
+    <select id="getIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
+        SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
+        LEFT JOIN node_device nd on ei.meter_id = nd.device_id
+        LEFT JOIN meter_implement mi on mi."id" = nd.device_id
+        <where>
+            <if test="nodeId != null  and nodeId != ''">and nd.node_id = #{nodeId}</if>
+            <if test="code != null  and code != ''">
+                and (mi.meter_name like concat('%', #{code}, '%')
+                or ei.code like concat('%', #{code}, '%')
+                or ei.name like concat('%', #{code}, '%')
+                )
+            </if>
+        </where>
+    </select>
+    <select id="getIndexByMeterIdIndexCode" resultType="com.zhitan.model.domain.EnergyIndex">
+        SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
+        LEFT JOIN node_device nd on ei.meter_id = nd.device_id
+        LEFT JOIN meter_implement mi on mi."id" = nd.device_id
+        <where>
+            <if test="nodeId != null  and nodeId != ''">and nd.node_id = #{nodeId}</if>
+            <if test="indexCode != null  and indexCode != ''">
+                and (mi.meter_name like concat('%', #{indexCode}, '%')
+                or ei.code like concat('%', #{indexCode}, '%')
+                or ei.name like concat('%', #{indexCode}, '%')
+                )
+            </if>
+            <if test="meterId != null  and meterId != ''">
+                and ei.meter_id = #{meterId}
+            </if>
+        </where>
+    </select>
     <select id="getModelNodeIndexInfoListByIndexIds"
             resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfo">
-        SELECT 	mi.model_name modelName,
-          mi.model_code,
-          mn."name" "name",
-          ei.index_id,
-          ei.code indexCode,
-          ei."name" indexName,
-          ei.energy_id,
-          ei.energy_id
+        SELECT mi.model_name modelName,
+        mi.model_code,
+        mn."name" "name",
+        ei.index_id,
+        ei.code indexCode,
+        ei."name" indexName,
+        ei.energy_id,
+        ei.energy_id
         FROM node_index ni
         INNER JOIN energy_index ei ON ni.index_id = ei.index_id
         LEFT JOIN model_node mn ON ni.node_id = mn.node_id
@@ -427,4 +430,16 @@
             #{indexId}
         </foreach>
     </select>
+
+    <select id="selectEnergyTypeByIndex" resultType="com.zhitan.basicdata.domain.vo.MeterImplementModel">
+        select ex.index_id indexId,
+               mi.id meterId,
+               mi.energy_type energyType
+        from energy_index ex
+                 left join meter_implement mi on ex.meter_id = mi.id
+        where ex.index_id in
+        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+    </select>
 </mapper>

--
Gitblit v1.9.3