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 >= #{date} AND record_date < 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