Browse Source

抄表统计

learshaw 4 tháng trước cách đây
mục cha
commit
32a1282286

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

@@ -1,5 +1,6 @@
 package com.ruoyi.ems.controller;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.huashe.common.domain.AjaxResult;
 import com.ruoyi.common.core.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.web.controller.BaseController;
@@ -9,10 +10,13 @@ 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.domain.EmsObjAttrValue;
+import com.ruoyi.ems.domain.FacsCategory;
 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.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -24,7 +28,12 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 用电计量-小时Controller
@@ -55,6 +64,55 @@ public class ElecMeterHController extends BaseController {
 
     /**
      * 查询设施用能统计数据
+     *
+     * @param queryMeter 查询条件
+     * @return
+     */
+    @GetMapping("/staByTime")
+    public AjaxResult staByTime(QueryMeter queryMeter) {
+        List<ElecMeter> list = elecMeterHService.staByTime(queryMeter);
+        JSONObject jsonObject = new JSONObject();
+
+        if (CollectionUtils.isNotEmpty(list)) {
+            Map<String, ElecMeter> map = list.stream()
+                .collect(Collectors.toMap(ElecMeter::getObjName, Function.identity()));
+            BigDecimal quantity = BigDecimal.ZERO;
+            BigDecimal useCost = BigDecimal.ZERO;
+
+            ElecMeter lowElec = map.computeIfAbsent("lowElec", k -> new ElecMeter("-1", "lowElec", 0.0, 0.0));
+            ElecMeter normalElec = map.computeIfAbsent("normalElec", k -> new ElecMeter("0", "normalElec", 0.0, 0.0));
+            ElecMeter highElec = map.computeIfAbsent("highElec", k -> new ElecMeter("1", "highElec", 0.0, 0.0));
+            ElecMeter peakElec = map.computeIfAbsent("peakElec", k -> new ElecMeter("-1", "peakElec", 0.0, 0.0));
+
+            quantity = quantity.add(new BigDecimal(String.valueOf(lowElec.getQuantity())));
+            useCost = useCost.add(new BigDecimal(String.valueOf(lowElec.getUseCost())));
+            quantity = quantity.add(new BigDecimal(String.valueOf(normalElec.getQuantity())));
+            useCost = useCost.add(new BigDecimal(String.valueOf(normalElec.getUseCost())));
+            quantity = quantity.add(new BigDecimal(String.valueOf(highElec.getQuantity())));
+            useCost = useCost.add(new BigDecimal(String.valueOf(highElec.getUseCost())));
+            quantity = quantity.add(new BigDecimal(String.valueOf(peakElec.getQuantity())));
+            useCost = useCost.add(new BigDecimal(String.valueOf(peakElec.getUseCost())));
+
+            jsonObject.put("total", new ElecMeter("total", "total", quantity.doubleValue(), useCost.doubleValue()));
+            jsonObject.put("lowElec", lowElec);
+            jsonObject.put("normalElec", normalElec);
+            jsonObject.put("highElec", highElec);
+            jsonObject.put("peakElec", peakElec);
+        }
+        else {
+            jsonObject.put("total", new ElecMeter("total", "total", 0.0, 0.0));
+            jsonObject.put("lowElec", new ElecMeter("-1", "lowElec", 0.0, 0.0));
+            jsonObject.put("normalElec", new ElecMeter("0", "normalElec", 0.0, 0.0));
+            jsonObject.put("highElec", new ElecMeter("1", "highElec", 0.0, 0.0));
+            jsonObject.put("peakElec", new ElecMeter("2", "peakElec", 0.0, 0.0));
+        }
+
+        return success(jsonObject);
+    }
+
+    /**
+     * 查询设施用能统计数据
+     *
      * @param queryMeter 查询条件
      * @return
      */
@@ -66,6 +124,7 @@ public class ElecMeterHController extends BaseController {
 
     /**
      * 查询设施用能统计数据
+     *
      * @param queryMeter 查询条件
      * @return
      */

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

@@ -38,6 +38,16 @@ public class ElecMeter {
     // 用电成本
     private Double useCost;
 
+    public ElecMeter() {
+    }
+
+    public ElecMeter(String objCode, String objName, Double quantity, Double useCost) {
+        this.objCode = objCode;
+        this.objName = objName;
+        this.quantity = quantity;
+        this.useCost = useCost;
+    }
+
     public String getAreaCode() {
         return areaCode;
     }

+ 7 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/mapper/ElecMeterHMapper.java

@@ -46,6 +46,13 @@ public interface ElecMeterHMapper {
     ElecMeter selectElecMeterSumByDev(QueryMeter queryMeter);
 
     /**
+     * 根据时间统计
+     * @param queryMeter 查询条件
+     * @return 统计
+     */
+    List<ElecMeter> selectStaByTime(QueryMeter queryMeter);
+
+    /**
      * 新增用电计量-小时
      *
      * @param elecMeterH 用电计量-小时

+ 7 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/IElecMeterHService.java

@@ -30,6 +30,13 @@ public interface IElecMeterHService {
     List<ElecMeterH> selectByMeterDevs(QueryMeter queryMeter);
 
     /**
+     * 统计用电计量-根据时间
+     * @param queryMeter 查询条件
+     * @return 用电统计
+     */
+    List<ElecMeter> staByTime(QueryMeter queryMeter);
+
+    /**
      * 统计用电计量-根据边界对象
      *
      * @param queryMeter 查询条件

+ 6 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/ElecMeterHServiceImpl.java

@@ -8,6 +8,7 @@ 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;
 
 /**
@@ -43,6 +44,11 @@ public class ElecMeterHServiceImpl implements IElecMeterHService {
         return elecMeterHMapper.selectElecMeterByDevs(queryMeter);
     }
 
+    @Override
+    public List<ElecMeter> staByTime(QueryMeter queryMeter) {
+        return elecMeterHMapper.selectStaByTime(queryMeter);
+    }
+
     /**
      * 统计用电计量-根据边界对象
      *

+ 24 - 0
ems/ems-core/src/main/resources/mapper/ems/ElecMeterHMapper.xml

@@ -116,6 +116,30 @@
         </where>
     </select>
 
+    <select id="selectStaByTime" parameterType="com.ruoyi.ems.model.QueryMeter" resultMap="ElecMeterResult">
+        SELECT
+            meter_type as obj_code,
+            CASE
+                WHEN meter_type = -1 THEN 'lowElec'
+                WHEN meter_type = 0 THEN 'normalElec'
+                WHEN meter_type = 1 THEN 'highElec'
+                WHEN meter_type = 2 THEN 'peakElec'
+                END AS obj_name,
+            ROUND(SUM(elec_quantity),2) AS elec_quantity,
+            ROUND(SUM(use_elec_cost),3) AS use_elec_cost
+        FROM
+            adm_elec_meter_h
+        <where>
+            <if test="startRecTime != null and startRecTime != '' and endRecTime != null and endRecTime != ''">
+                and record_time between #{startRecTime} and #{endRecTime}
+            </if>
+            <if test="areaCode != null and areaCode != '0'">
+                and area_code = #{areaCode}
+            </if>
+        </where>
+        GROUP BY meter_type
+    </select>
+
     <insert id="insertElecMeterH" parameterType="com.ruoyi.ems.domain.ElecMeterH" useGeneratedKeys="true"
             keyProperty="id">
         insert into adm_elec_meter_h