| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
| | | } |