Parcourir la source

Merge branch 'master' of http://git.xt.wenhq.top:8083/hs/prod_group_bg

chen.cheng il y a 5 mois
Parent
commit
ae6a68d0be

+ 17 - 0
ems/ems-cloud/ems-server/src/main/java/com/ruoyi/ems/controller/ElecMeterHController.java

@@ -7,8 +7,10 @@ import com.ruoyi.common.core.web.page.TableDataInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.ems.domain.ElecMeter;
 import com.ruoyi.ems.domain.ElecMeterH;
 import com.ruoyi.ems.model.QueryMeter;
+import com.ruoyi.ems.service.IBoundaryObjService;
 import com.ruoyi.ems.service.IElecMeterHService;
 import io.swagger.annotations.Api;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,6 +39,9 @@ public class ElecMeterHController extends BaseController {
     @Autowired
     private IElecMeterHService elecMeterHService;
 
+    @Autowired
+    private IBoundaryObjService boundaryObjService;
+
     /**
      * 查询用电计量-小时列表
      */
@@ -49,6 +54,18 @@ public class ElecMeterHController extends BaseController {
     }
 
     /**
+     * 条件查询用能指标
+     * @param queryMeter 查询条件
+     * @return
+     */
+    @GetMapping("/hour/listByFacs")
+    public TableDataInfo listByFacs(QueryMeter queryMeter) {
+        startPage();
+        List<ElecMeter> list = boundaryObjService.getMeterStatisticsByFacs(queryMeter);
+        return getDataTable(list);
+    }
+
+    /**
      * 导出用电计量-小时列表
      */
     @RequiresPermissions("ems:elecMeterH:export")

+ 88 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/domain/ElecMeter.java

@@ -0,0 +1,88 @@
+/*
+ * 文 件 名:  ElecMeter
+ * 版    权:  华设设计集团股份有限公司
+ * 描    述:  <描述>
+ * 修 改 人:  lvwenbin
+ * 修改时间:  2025/2/12
+ * 跟踪单号:  <跟踪单号>
+ * 修改单号:  <修改单号>
+ * 修改内容:  <修改内容>
+ */
+package com.ruoyi.ems.domain;
+
+/**
+ * 电计量
+ * <功能详细描述>
+ *
+ * @author lvwenbin
+ * @version [版本号, 2025/2/12]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+public class ElecMeter {
+    // 区域编码
+    private String areaCode;
+
+    // 边界对象类型
+    private Integer objType;
+
+    // 边界对象代码
+    private String objCode;
+
+    // 边界对象名称
+    private String objName;
+
+    // 用电量
+    private Double quantity;
+
+    // 用电成本
+    private Double useCost;
+
+    public String getAreaCode() {
+        return areaCode;
+    }
+
+    public void setAreaCode(String areaCode) {
+        this.areaCode = areaCode;
+    }
+
+    public Integer getObjType() {
+        return objType;
+    }
+
+    public void setObjType(Integer objType) {
+        this.objType = objType;
+    }
+
+    public String getObjCode() {
+        return objCode;
+    }
+
+    public void setObjCode(String objCode) {
+        this.objCode = objCode;
+    }
+
+    public String getObjName() {
+        return objName;
+    }
+
+    public void setObjName(String objName) {
+        this.objName = objName;
+    }
+
+    public Double getQuantity() {
+        return quantity;
+    }
+
+    public void setQuantity(Double quantity) {
+        this.quantity = quantity;
+    }
+
+    public Double getUseCost() {
+        return useCost;
+    }
+
+    public void setUseCost(Double useCost) {
+        this.useCost = useCost;
+    }
+}

+ 2 - 1
ems/ems-core/src/main/java/com/ruoyi/ems/mapper/ElecMeterHMapper.java

@@ -1,6 +1,7 @@
 package com.ruoyi.ems.mapper;
 
 import com.ruoyi.ems.domain.ElecMeterH;
+import com.ruoyi.ems.domain.ElecMeter;
 import com.ruoyi.ems.model.QueryMeter;
 import org.apache.ibatis.annotations.Param;
 
@@ -27,7 +28,7 @@ public interface ElecMeterHMapper {
      * @param queryMeter 查询计量条件
      * @return 用电计量-小时集合
      */
-    List<ElecMeterH> getElecMeterHByObj(QueryMeter queryMeter);
+    ElecMeter selectElecMeterSumHByDev(QueryMeter queryMeter);
 
     /**
      * 新增用电计量-小时

+ 12 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/mapper/EmsFacsMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.ems.mapper;
 
 import com.ruoyi.ems.domain.EmsFacs;
+import com.ruoyi.ems.model.BoundaryObj;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -36,6 +38,16 @@ public interface EmsFacsMapper {
     List<EmsFacs> selectEmsFacsList(EmsFacs emsFacs);
 
     /**
+     * 根据类别查询设施下的仪表
+     *
+     * @param category    设施类别
+     * @param subCategory 设施子类别
+     * @return
+     */
+    List<BoundaryObj> selectFacsWithMeter(@Param("category") String category,
+        @Param("subCategory") String subCategory);
+
+    /**
      * 新增能源设施/系统
      *
      * @param emsFacs 能源设施/系统

+ 13 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/model/BoundaryObj.java

@@ -41,6 +41,11 @@ public class BoundaryObj {
     private String objName;
 
     /**
+     * 绑定设备字符串
+     */
+    private String bindMeterDevs;
+
+    /**
      * 直接绑定的电表
      */
     private Set<String> bindElecMeterDevs = new HashSet<>();
@@ -79,6 +84,14 @@ public class BoundaryObj {
         this.objName = objName;
     }
 
+    public String getBindMeterDevs() {
+        return bindMeterDevs;
+    }
+
+    public void setBindMeterDevs(String bindMeterDevs) {
+        this.bindMeterDevs = bindMeterDevs;
+    }
+
     public Set<String> getBindElecMeterDevs() {
         return bindElecMeterDevs;
     }

+ 1 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/model/QueryIndex.java

@@ -21,6 +21,7 @@ import com.huashe.common.domain.BaseEntity;
  * @see [相关类/方法]
  * @since [产品/模块版本]
  */
+@Deprecated
 public class QueryIndex extends BaseEntity {
     /**
      * 区域编码

+ 54 - 6
ems/ems-core/src/main/java/com/ruoyi/ems/model/QueryMeter.java

@@ -33,14 +33,20 @@ public class QueryMeter extends BaseEntity implements Serializable {
     /** 设备编号 */
     private String deviceCode;
 
+    /** 设备编号集合*/
+    private Set<String> deviceCodes;
+
     /** 对象标签 */
     private Integer objTag;
 
     /** 对象类型 */
     private Integer objType;
 
-    /** 对象code集合*/
-    private Set<String> objCodes;
+    /** 对象code*/
+    private String objCode;
+
+    /** 对象名称*/
+    private String objName;
 
     /** 计量介质 */
     private Integer meterCls;
@@ -49,6 +55,16 @@ public class QueryMeter extends BaseEntity implements Serializable {
     private String year;
 
     /**
+     * 设施分类
+     */
+    private String facsCategory;
+
+    /**
+     * 设施子类
+     */
+    private String facsSubCategory;
+
+    /**
      * 排序方式
      */
     private String orderFlag = "ASC";
@@ -82,6 +98,14 @@ public class QueryMeter extends BaseEntity implements Serializable {
         this.deviceCode = deviceCode;
     }
 
+    public Set<String> getDeviceCodes() {
+        return deviceCodes;
+    }
+
+    public void setDeviceCodes(Set<String> deviceCodes) {
+        this.deviceCodes = deviceCodes;
+    }
+
     public Integer getObjTag() {
         return objTag;
     }
@@ -98,12 +122,20 @@ public class QueryMeter extends BaseEntity implements Serializable {
         this.objType = objType;
     }
 
-    public Set<String> getObjCodes() {
-        return objCodes;
+    public String getObjCode() {
+        return objCode;
     }
 
-    public void setObjCodes(Set<String> objCodes) {
-        this.objCodes = objCodes;
+    public void setObjCode(String objCode) {
+        this.objCode = objCode;
+    }
+
+    public String getObjName() {
+        return objName;
+    }
+
+    public void setObjName(String objName) {
+        this.objName = objName;
     }
 
     public Integer getMeterCls() {
@@ -122,6 +154,22 @@ public class QueryMeter extends BaseEntity implements Serializable {
         this.year = year;
     }
 
+    public String getFacsCategory() {
+        return facsCategory;
+    }
+
+    public void setFacsCategory(String facsCategory) {
+        this.facsCategory = facsCategory;
+    }
+
+    public String getFacsSubCategory() {
+        return facsSubCategory;
+    }
+
+    public void setFacsSubCategory(String facsSubCategory) {
+        this.facsSubCategory = facsSubCategory;
+    }
+
     public String getOrderFlag() {
         return orderFlag;
     }

+ 11 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/IBoundaryObjService.java

@@ -11,6 +11,8 @@
 package com.ruoyi.ems.service;
 
 import com.ruoyi.ems.model.BoundaryObj;
+import com.ruoyi.ems.domain.ElecMeter;
+import com.ruoyi.ems.model.QueryMeter;
 
 import java.util.List;
 
@@ -26,8 +28,17 @@ import java.util.List;
 public interface IBoundaryObjService {
     /**
      * 根据区域编码、对象类型和对象代码获取边界对象
+     *
      * @param areaCode 区域编码
      * @return 边界对象
      */
     BoundaryObj getBoundaryByArea(String areaCode);
+
+    /**
+     * 查询用电计量-根据边界对象
+     *
+     * @param queryMeter
+     * @return
+     */
+    List<ElecMeter> getMeterStatisticsByFacs(QueryMeter queryMeter);
 }

+ 2 - 9
ems/ems-core/src/main/java/com/ruoyi/ems/service/IElecMeterHService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.ems.service;
 
 import com.ruoyi.ems.domain.ElecMeterH;
+import com.ruoyi.ems.domain.ElecMeter;
 import com.ruoyi.ems.model.QueryMeter;
 
 import java.util.List;
@@ -21,20 +22,12 @@ public interface IElecMeterHService {
     List<ElecMeterH> selectElecMeterHList(QueryMeter queryMeter);
 
     /**
-     * 查询用电计量-根据边界对象
-     *
-     * @param queryMeter
-     * @return
-     */
-    List<ElecMeterH> listByBoundaryObj(QueryMeter queryMeter);
-
-    /**
      * 统计用电计量-根据边界对象
      *
      * @param queryMeter
      * @return
      */
-    ElecMeterH staByBoundaryObj(QueryMeter queryMeter);
+    ElecMeter staByMeterDev(QueryMeter queryMeter);
 
     /**
      * 新增用电计量-小时

+ 9 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/IEmsFacsService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.ems.service;
 
 import com.ruoyi.ems.domain.EmsFacs;
+import com.ruoyi.ems.model.BoundaryObj;
 import com.ruoyi.ems.model.QueryDevice;
 import com.ruoyi.ems.model.TreeEntity;
 
@@ -47,6 +48,14 @@ public interface IEmsFacsService {
     List<TreeEntity> getFacsDevTree(QueryDevice queryDevice);
 
     /**
+     * 根据设施类别获取绑定计量设备
+     * @param category 设施类别
+     * @param subCategory 设施子类别
+     * @return 绑定计量设备列表
+     */
+    List<BoundaryObj> getFacsWithMeterDev(String category, String subCategory);
+
+    /**
      * 新增能源设施/系统
      *
      * @param emsFacs 能源设施/系统

+ 62 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/BoundaryObjServiceImpl.java

@@ -13,11 +13,15 @@ package com.ruoyi.ems.service.impl;
 import com.huashe.common.exception.Assert;
 import com.huashe.common.exception.BusinessException;
 import com.ruoyi.ems.domain.Area;
+import com.ruoyi.ems.domain.ElecMeter;
 import com.ruoyi.ems.domain.MeterBoundaryRel;
 import com.ruoyi.ems.enums.MeterObjType;
 import com.ruoyi.ems.model.BoundaryObj;
+import com.ruoyi.ems.model.QueryMeter;
 import com.ruoyi.ems.service.IAreaService;
 import com.ruoyi.ems.service.IBoundaryObjService;
+import com.ruoyi.ems.service.IElecMeterHService;
+import com.ruoyi.ems.service.IEmsFacsService;
 import com.ruoyi.ems.service.IMeterBoundaryRelService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
@@ -49,6 +53,14 @@ public class BoundaryObjServiceImpl implements IBoundaryObjService {
     @Autowired
     private IAreaService areaService;
 
+    // 注入设施服务
+    @Autowired
+    private IEmsFacsService emsFacsService;
+
+    // 注入电表数据服务
+    @Autowired
+    private IElecMeterHService elecMeterHService;
+
     // 注入边界对象关系服务
     @Autowired
     private IMeterBoundaryRelService boundaryRelService;
@@ -87,6 +99,56 @@ public class BoundaryObjServiceImpl implements IBoundaryObjService {
     }
 
     /**
+     * 查询设施用电统计
+     *
+     * @param queryMeter 查询条件对象,用于指定查询条件
+     * @return 返回电表信息列表,如果未找到符合条件的数据,则返回空列表
+     */
+    @Override
+    public List<ElecMeter> getMeterStatisticsByFacs(QueryMeter queryMeter) {
+        List<ElecMeter> result = new ArrayList<>();
+        List<BoundaryObj> bObjs = emsFacsService.getFacsWithMeterDev(queryMeter.getFacsCategory(),
+            queryMeter.getFacsSubCategory());
+
+        if (CollectionUtils.isNotEmpty(bObjs)) {
+            for (BoundaryObj bObj : bObjs) {
+                ElecMeter meter = new ElecMeter();
+                meter.setAreaCode(queryMeter.getAreaCode());
+                meter.setObjType(bObj.getObjType());
+                meter.setObjCode(bObj.getObjCode());
+                meter.setObjName(bObj.getObjName());
+
+                if (CollectionUtils.isNotEmpty(bObj.getBindElecMeterDevs())) {
+                    ElecMeter staObj = getElecMeter(queryMeter, bObj);
+
+                    if (null != staObj) {
+                        meter.setQuantity(staObj.getQuantity());
+                        meter.setUseCost(staObj.getUseCost());
+                    }
+                }
+
+                result.add(meter);
+            }
+        }
+
+        return result;
+    }
+
+    private ElecMeter getElecMeter(QueryMeter queryMeter, BoundaryObj bObj) {
+        QueryMeter condition = new QueryMeter();
+        condition.setAreaCode(queryMeter.getAreaCode());
+        condition.setObjType(bObj.getObjType());
+        condition.setObjCode(bObj.getObjCode());
+        condition.setObjName(bObj.getObjName());
+        condition.setStartRecTime(queryMeter.getStartRecTime());
+        condition.setEndRecTime(queryMeter.getEndRecTime());
+        condition.setDeviceCodes(bObj.getBindElecMeterDevs());
+
+        ElecMeter meterRes = elecMeterHService.staByMeterDev(condition);
+        return meterRes;
+    }
+
+    /**
      * 递归构造边界-绑定电表 的树结构
      *
      * @param parentArea 根区域

+ 3 - 14
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/ElecMeterHServiceImpl.java

@@ -2,12 +2,12 @@ package com.ruoyi.ems.service.impl;
 
 import com.ruoyi.ems.domain.ElecMeterH;
 import com.ruoyi.ems.mapper.ElecMeterHMapper;
+import com.ruoyi.ems.domain.ElecMeter;
 import com.ruoyi.ems.model.QueryMeter;
 import com.ruoyi.ems.service.IElecMeterHService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -33,25 +33,14 @@ public class ElecMeterHServiceImpl implements IElecMeterHService {
     }
 
     /**
-     * 根据边界对象查询电表信息列表
-     *
-     * @param queryMeter 查询条件对象,用于指定查询条件
-     * @return 返回电表信息列表,如果未找到符合条件的数据,则返回空列表
-     */
-    @Override
-    public List<ElecMeterH> listByBoundaryObj(QueryMeter queryMeter) {
-        return Collections.emptyList();
-    }
-
-    /**
      * 统计用电计量-根据边界对象
      *
      * @param queryMeter 查询条件
      * @return 统计电量信息
      */
     @Override
-    public ElecMeterH staByBoundaryObj(QueryMeter queryMeter) {
-        return null;
+    public ElecMeter staByMeterDev(QueryMeter queryMeter) {
+        return elecMeterHMapper.selectElecMeterSumHByDev(queryMeter);
     }
 
     /**

+ 31 - 6
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/EmsFacsServiceImpl.java

@@ -14,6 +14,7 @@ import com.ruoyi.ems.enums.FacTypes;
 import com.ruoyi.ems.mapper.AdmEmsElecPgIndexMapper;
 import com.ruoyi.ems.mapper.AdmEmsIndexRangeMapper;
 import com.ruoyi.ems.mapper.EmsFacsMapper;
+import com.ruoyi.ems.model.BoundaryObj;
 import com.ruoyi.ems.model.QueryDevice;
 import com.ruoyi.ems.model.TreeEntity;
 import com.ruoyi.ems.service.IAreaService;
@@ -21,12 +22,14 @@ import com.ruoyi.ems.service.IEmsDeviceService;
 import com.ruoyi.ems.service.IEmsFacsService;
 import com.ruoyi.ems.util.AreaUtils;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -101,7 +104,8 @@ public class EmsFacsServiceImpl implements IEmsFacsService {
         if (StringUtils.isEmpty(queryDevice.getAreaCode())) {
             List<Area> areaTree = areaService.selectAreaTree("0", true);
             List<Area> areaList = AreaUtils.compressTree(areaTree);
-            Map<String, Area> areaMap = areaList.stream().collect(Collectors.toMap(Area::getAreaCode, Function.identity()));
+            Map<String, Area> areaMap = areaList.stream()
+                .collect(Collectors.toMap(Area::getAreaCode, Function.identity()));
 
             if (CollectionUtils.isNotEmpty(areaTree)) {
                 EmsFacs facsParam = new EmsFacs();
@@ -114,7 +118,8 @@ public class EmsFacsServiceImpl implements IEmsFacsService {
                     param.setAreaCode(area.getAreaCode());
 
                     List<EmsDevice> devices = deviceService.selectList(param);
-                    Map<String, List<EmsDevice>> deviceMap = devices.stream().collect(Collectors.groupingBy(EmsDevice::getRefFacs));
+                    Map<String, List<EmsDevice>> deviceMap = devices.stream()
+                        .collect(Collectors.groupingBy(EmsDevice::getRefFacs));
 
                     TreeEntity entity = new TreeEntity();
                     entity.setId(area.getAreaCode());
@@ -128,7 +133,8 @@ public class EmsFacsServiceImpl implements IEmsFacsService {
             Area area = areaService.selectAreaByCode(queryDevice.getAreaCode());
             List<Area> areaTree = areaService.selectAreaTree(queryDevice.getAreaCode(), true);
             List<Area> areaList = AreaUtils.compressTree(areaTree);
-            Map<String, Area> areaMap = areaList.stream().collect(Collectors.toMap(Area::getAreaCode, Function.identity()));
+            Map<String, Area> areaMap = areaList.stream()
+                .collect(Collectors.toMap(Area::getAreaCode, Function.identity()));
 
             if (null != area) {
                 EmsFacs facsParam = new EmsFacs();
@@ -141,7 +147,8 @@ public class EmsFacsServiceImpl implements IEmsFacsService {
                 param.setAreaCode(queryDevice.getAreaCode());
 
                 List<EmsDevice> devices = deviceService.selectList(param);
-                Map<String, List<EmsDevice>> deviceMap = devices.stream().collect(Collectors.groupingBy(EmsDevice::getRefFacs));
+                Map<String, List<EmsDevice>> deviceMap = devices.stream()
+                    .collect(Collectors.groupingBy(EmsDevice::getRefFacs));
 
                 TreeEntity entity = new TreeEntity();
                 entity.setId(area.getAreaCode());
@@ -155,7 +162,25 @@ public class EmsFacsServiceImpl implements IEmsFacsService {
         return retList;
     }
 
-    private List<TreeEntity> buildFacsDevSub(List<EmsFacs> facsList, Map<String, List<EmsDevice>> deviceMap, Map<String, Area> areaMap) {
+    @Override
+    public List<BoundaryObj> getFacsWithMeterDev(String category, String subCategory) {
+        List<BoundaryObj> facsMeterObjs = emsFacsMapper.selectFacsWithMeter(category, subCategory);
+
+        if (CollectionUtils.isNotEmpty(facsMeterObjs)) {
+            for (BoundaryObj obj : facsMeterObjs) {
+                String[] array = StringUtils.split(obj.getBindMeterDevs(), ",");
+                List<String> devList = ArrayUtils.isNotEmpty(array) ? Arrays.asList(array) : new ArrayList<>();
+
+                Set<String> bindDevs = devList.stream().map(String::trim).filter(s -> !s.isEmpty())
+                    .collect(Collectors.toSet());
+                obj.setBindElecMeterDevs(bindDevs);
+            }
+        }
+        return facsMeterObjs;
+    }
+
+    private List<TreeEntity> buildFacsDevSub(List<EmsFacs> facsList, Map<String, List<EmsDevice>> deviceMap,
+        Map<String, Area> areaMap) {
         List<TreeEntity> retList = new ArrayList<>();
 
         for (EmsFacs facs : facsList) {
@@ -163,7 +188,7 @@ public class EmsFacsServiceImpl implements IEmsFacsService {
             List<TreeEntity> subList = null;
             List<EmsDevice> devices = deviceMap.get(facs.getFacsCode());
 
-            if (CollectionUtils.isNotEmpty(devices)){
+            if (CollectionUtils.isNotEmpty(devices)) {
                 subList = new ArrayList<>();
 
                 for (EmsDevice device : devices) {

+ 22 - 26
ems/ems-core/src/main/resources/mapper/ems/ElecMeterHMapper.xml

@@ -20,6 +20,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime"    column="create_time"    />
     </resultMap>
 
+    <resultMap type="com.ruoyi.ems.domain.ElecMeter" id="ElecMeterResult">
+        <result property="areaCode"    column="area_code"    />
+        <result property="objType"    column="obj_type"    />
+        <result property="objCode"    column="obj_code"    />
+        <result property="objName"    column="obj_name"    />
+        <result property="quantity"    column="elec_quantity"    />
+        <result property="useCost"    column="use_elec_cost"    />
+    </resultMap>
+
     <sql id="selectElecMeterHVo">
         select id, area_code, device_code, record_time, `date`, `time`, time_index, elec_quantity, meter_type, meter_unit_price, use_elec_cost, create_time from adm_elec_meter_h
     </sql>
@@ -37,38 +46,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by m.record_time ${orderFlag}
     </select>
 
-    <select id="getElecMeterHByObj" parameterType="com.ruoyi.ems.model.QueryMeter" resultMap="ElecMeterHResult">
+    <select id="selectElecMeterSumHByDev" parameterType="com.ruoyi.ems.model.QueryMeter" resultMap="ElecMeterResult">
         select
-            m.id,
-            m.area_code,
-            m.device_code,
-            d.device_name,
-            m.record_time,
-            m.`date`,
-            m.`time`,
-            m.time_index,
+            area_code,
+            '${objType}' as obj_type,
+            '${objCode}' as obj_code,
+            '${objName}' as obj_code,
             sum(m.elec_quantity) as elec_quantity,
-            m.meter_type,
-            m.meter_unit_price,
             sum(m.use_elec_cost) as use_elec_cost
         from adm_elec_meter_h m
-            left join adm_meter_device d on m.device_code = d.device_code
         <where>
-            m.area_code = #{areaCode}
-            and m.device_code in (
-                select
-                    r.meter_device from adm_meter_boundary_rel r
-                where
-                    r.obj_type = #{objType}
-                    and r.meter_cls = #{meterCls}
-                    and r.boundary_obj in
-                    <foreach item="item" index="index" collection="objCodes" open="in (" separator=", " close=")">
-                        #{item}
-                    </foreach>
-            )
-            <if test="startRecTime != null and startRecTime != '' and endRecTime != null and endRecTime != ''"> and m.record_time between #{startRecTime} and #{endRecTime}</if>
+            and m.area_code = #{areaCode}
+            <if test="startRecTime != null and startRecTime != '' and endRecTime != null and endRecTime != ''">
+                and m.record_time between #{startRecTime} and #{endRecTime}
+            </if>
+            and m.device_code in
+              <foreach item="item" index="index" collection="deviceCodes" open="(" separator=", " close=")">
+                #{item}
+              </foreach>
         </where>
-        group by device_code, `date`, time_index
     </select>
 
     <insert id="insertElecMeterH" parameterType="com.ruoyi.ems.domain.ElecMeterH" useGeneratedKeys="true" keyProperty="id">

+ 27 - 0
ems/ems-core/src/main/resources/mapper/ems/EmsFacsMapper.xml

@@ -21,6 +21,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime"    column="update_time"    />
     </resultMap>
 
+    <resultMap type="com.ruoyi.ems.model.BoundaryObj" id="FacsBoundaryObjResult">
+        <result property="objType"    column="obj_type"    />
+        <result property="objCode"    column="obj_code"    />
+        <result property="objName"    column="obj_name"    />
+        <result property="bindMeterDevs"    column="meter_devices"    />
+    </resultMap>
+
     <sql id="selectEmsFacsVo">
         SELECT
             f.`id`, f.`facs_code`, f.`facs_name`, f.`facs_category`, f.`facs_subcategory`, f.`enable`, f.`ref_area`, f.`facs_model`, f.`create_time`, f.`update_time`,
@@ -47,6 +54,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="refArea != null and refArea != '' and refArea != '-1'"> and f.`ref_area` = #{refArea}</if>
         </where>
     </select>
+
+    <select id="selectFacsWithMeter" resultMap="FacsBoundaryObjResult">
+        SELECT
+            2 as obj_type,
+            e.facs_code as obj_code,
+            e.facs_name as obj_name,
+            e.facs_category,
+            e.facs_subcategory,
+            e.enable,
+            GROUP_CONCAT(DISTINCT r.meter_device ORDER BY r.meter_device ASC SEPARATOR ',') AS meter_devices
+        FROM
+            adm_ems_facs e
+                LEFT JOIN adm_meter_boundary_rel r ON e.facs_code = r.boundary_obj AND r.obj_type = 2 AND e.enable = 1
+        <where>
+            <if test="category != null and category != ''"> and e.facs_category = #{category}</if>
+            <if test="subCategory != null and subCategory != ''"> and e.facs_subcategory = #{subCategory}</if>
+        </where>
+        GROUP BY
+            e.facs_code, e.facs_category, e.facs_subcategory
+    </select>
     
     <select id="selectEmsFacsById" parameterType="Long" resultMap="EmsFacsResult">
         <include refid="selectEmsFacsVo"/>