From 43aab58c9ecb1203770ba382efbdbae299ca87ec Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 26 十月 2026 15:12:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energy/EnergyRecordMapper.java |   67 +++++++++++++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energy/EnergyRecordMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energy/EnergyRecordMapper.java
new file mode 100644
index 0000000..9bc4d83
--- /dev/null
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energy/EnergyRecordMapper.java
@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.mes.dal.mysql.energy;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.mes.controller.admin.energy.vo.EnergyRecordPageReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.energy.vo.EnergyAnalysisReqVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.energy.EnergyRecordDO;
+import lombok.Data;
+import org.apache.ibatis.annotations.*;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Mapper
+public interface EnergyRecordMapper extends BaseMapperX<EnergyRecordDO> {
+    @Select("""
+        <script>
+        SELECT COALESCE(SUM(<choose><when test="rule.metric == 'AMOUNT' or rule.metric == 'MONTH_AMOUNT'">amount</when><otherwise>quantity</otherwise></choose>),0)
+        FROM mes_energy_record WHERE deleted=0 AND energy_type=#{rule.energyType}
+        <choose><when test="rule.metric == 'MONTH_QUANTITY' or rule.metric == 'MONTH_AMOUNT'">
+        AND record_date &gt;= #{date} AND record_date &lt; DATE_ADD(#{date}, INTERVAL 1 MONTH)
+        </when><otherwise>AND record_date=#{date}</otherwise></choose>
+        <if test="rule.usageArea != null and rule.usageArea != ''">AND usage_area=#{rule.usageArea}</if>
+        <if test="rule.productCategory != null and rule.productCategory != ''">AND product_category=#{rule.productCategory}</if>
+        </script>
+        """)
+    BigDecimal selectDailyValue(@Param("date") java.time.LocalDate date,
+            @Param("rule") cn.iocoder.yudao.module.mes.dal.dataobject.energy.EnergyAlertRuleDO rule);
+    default PageResult<EnergyRecordDO> selectPage(EnergyRecordPageReqVO req) {
+        return selectPage(req, new LambdaQueryWrapperX<EnergyRecordDO>()
+                .geIfPresent(EnergyRecordDO::getRecordDate, req.getStartDate())
+                .leIfPresent(EnergyRecordDO::getRecordDate, req.getEndDate())
+                .eqIfPresent(EnergyRecordDO::getEnergyType, req.getEnergyType())
+                .likeIfPresent(EnergyRecordDO::getUsageArea, req.getUsageArea())
+                .eqIfPresent(EnergyRecordDO::getProductCategory, req.getProductCategory())
+                .orderByDesc(EnergyRecordDO::getRecordDate, EnergyRecordDO::getId));
+    }
+
+    // 鎸夋暟鎹簱鍒嗙粍锛岄伩鍏嶅姞杞藉叏閮ㄥ彴璐︼紱绉熸埛鎷︽埅鍣ㄨ嚜鍔ㄦ坊鍔� tenant_id 鏉′欢銆�
+    @Select("""
+        <script>
+        SELECT energy_type AS energyType,
+          <choose><when test="req.groupBy == 'MONTH'">DATE_FORMAT(record_date, '%Y-%m')</when>
+          <otherwise>DATE_FORMAT(record_date, '%Y-%m-%d')</otherwise></choose> AS period,
+          usage_area AS usageArea, SUM(quantity) AS quantity, SUM(amount) AS amount,
+          COUNT(*) AS recordCount
+        FROM mes_energy_record
+        WHERE deleted = 0 AND record_date BETWEEN #{req.startDate} AND #{req.endDate}
+        <if test="req.energyType != null and req.energyType != ''">AND energy_type = #{req.energyType}</if>
+        <if test="req.usageArea != null and req.usageArea != ''">AND usage_area LIKE CONCAT('%', #{req.usageArea}, '%')</if>
+        <if test="req.productCategory != null and req.productCategory != ''">AND product_category = #{req.productCategory}</if>
+        GROUP BY energy_type, period, usage_area
+        ORDER BY period, energy_type, usage_area
+        </script>
+        """)
+    List<Aggregate> selectAnalysis(@Param("req") EnergyAnalysisReqVO req);
+
+    @Data
+    class Aggregate {
+        private String energyType;
+        private String period;
+        private String usageArea;
+        private BigDecimal quantity;
+        private BigDecimal amount;
+        private long recordCount;
+    }
+}

--
Gitblit v1.9.3