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 { @Select(""" """) BigDecimal selectDailyValue(@Param("date") java.time.LocalDate date, @Param("rule") cn.iocoder.yudao.module.mes.dal.dataobject.energy.EnergyAlertRuleDO rule); default PageResult selectPage(EnergyRecordPageReqVO req) { return selectPage(req, new LambdaQueryWrapperX() .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(""" """) List 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; } }