feat(energy-record): 新增能源消耗记录的时间范围查询和设备信息关联功能

- 在 EmsEnergyRecordBo 中添加 recordStartDate、recordEndDate 用于时间范围筛选
- 添加 meterCode、energyName、model、manufacturer、meterStatus 等模糊查询字段
- 集成 DateTimeFormat 注解支持日期格式化
- 在 EmsEnergyRecordMapper 中新增 selectVoPagePlus 方法实现关联查询
- 通过 XML 配置实现能源记录与计量表、能源类型的左连接查询
- 在 EmsEnergyRecordServiceImpl 中重构查询逻辑支持多表关联和时间段筛选
- 在 EmsEnergyRecordVo 中扩展表计和能源相关展示字段
This commit is contained in:
2026-04-20 13:54:39 +08:00
parent 14e28a0169
commit be59e4cc79
5 changed files with 134 additions and 2 deletions

View File

@@ -8,6 +8,7 @@ import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 能源消耗记录业务对象 ems_energy_record
@@ -45,6 +46,19 @@ public class EmsEnergyRecordBo extends BaseEntity {
*/
private Date recordDate;
/**
* 统计日期开始时间yyyy-MM-dd不含时分秒
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date recordStartDate;
/**
* 统计日期结束时间yyyy-MM-dd不含时分秒
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date recordEndDate;
/**
* 记录人ID
*/
@@ -55,5 +69,29 @@ public class EmsEnergyRecordBo extends BaseEntity {
*/
private String remark;
/**
* 表计编号(模糊查询)
*/
private String meterCode;
/**
* 能源名称(模糊查询)
*/
private String energyName;
/**
* 设备型号(模糊查询)
*/
private String model;
/**
* 制造商(模糊查询)
*/
private String manufacturer;
/**
* 设备状态0=在用,1=停用,2=维护
*/
private Integer meterStatus;
}

View File

@@ -67,5 +67,46 @@ public class EmsEnergyRecordVo {
@ExcelProperty(value = "备注")
private String remark;
/**
* 表计编号
*/
private String meterCode;
/**
* 设备型号
*/
private String meterModel;
/**
* 制造商
*/
private String meterManufacturer;
/**
* 设备状态0=在用,1=停用,2=维护
*/
private Integer meterStatus;
/**
* 能源名称
*/
private String energyName;
/**
* 能源单位
*/
private String energyUnit;
/**
* 能源编号
*/
private String energyCode;
/**
* 能源描述
*/
private String energyDescription;
}

View File

@@ -1,8 +1,11 @@
package com.klp.ems.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.ems.domain.EmsEnergyRecord;
import com.klp.ems.domain.vo.EmsEnergyRecordVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 能源消耗记录Mapper接口
@@ -12,4 +15,5 @@ import com.klp.common.core.mapper.BaseMapperPlus;
*/
public interface EmsEnergyRecordMapper extends BaseMapperPlus<EmsEnergyRecordMapper, EmsEnergyRecord, EmsEnergyRecordVo> {
Page<EmsEnergyRecordVo> selectVoPagePlus(Page<Object> build,@Param("ew") QueryWrapper<EmsEnergyRecord> qw);
}

View File

@@ -1,11 +1,13 @@
package com.klp.ems.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.ems.domain.bo.EmsEnergyRecordBo;
@@ -43,11 +45,33 @@ public class EmsEnergyRecordServiceImpl implements IEmsEnergyRecordService {
*/
@Override
public TableDataInfo<EmsEnergyRecordVo> queryPageList(EmsEnergyRecordBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<EmsEnergyRecord> lqw = buildQueryWrapper(bo);
Page<EmsEnergyRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
QueryWrapper<EmsEnergyRecord> qw = buildQueryWrapperPlus(bo);
Page<EmsEnergyRecordVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), qw);
return TableDataInfo.build(result);
}
private QueryWrapper<EmsEnergyRecord> buildQueryWrapperPlus(EmsEnergyRecordBo bo) {
QueryWrapper<EmsEnergyRecord> qw = Wrappers.query();
// 主表字段查询(使用别名 er
qw.eq(bo.getMeterId() != null, "er.meter_id", bo.getMeterId());
qw.eq(bo.getEnergyId() != null, "er.energy_id", bo.getEnergyId());
qw.eq(bo.getConsumption() != null, "er.consumption", bo.getConsumption());
qw.eq(bo.getRecordDate() != null, "er.record_date", bo.getRecordDate());
qw.eq(bo.getRecordedBy() != null, "er.recorded_by", bo.getRecordedBy());
// 时间段筛选recordStartDate <= recordDate <= recordEndDate
qw.ge(bo.getRecordStartDate() != null, "er.record_date", bo.getRecordStartDate());
qw.le(bo.getRecordEndDate() != null, "er.record_date", bo.getRecordEndDate());
// 逻辑删除
qw.eq("er.del_flag", "0");
// 默认排序:按统计日期倒序
qw.orderByDesc("er.record_date");
return qw;
}
/**
* 查询能源消耗记录列表
*/
@@ -64,6 +88,9 @@ public class EmsEnergyRecordServiceImpl implements IEmsEnergyRecordService {
lqw.eq(bo.getEnergyId() != null, EmsEnergyRecord::getEnergyId, bo.getEnergyId());
lqw.eq(bo.getConsumption() != null, EmsEnergyRecord::getConsumption, bo.getConsumption());
lqw.eq(bo.getRecordDate() != null, EmsEnergyRecord::getRecordDate, bo.getRecordDate());
// 时间段筛选recordDateStart <= recordDate <= recordDateEnd
lqw.ge(bo.getRecordStartDate() != null, EmsEnergyRecord::getRecordDate, bo.getRecordStartDate());
lqw.le(bo.getRecordEndDate() != null, EmsEnergyRecord::getRecordDate, bo.getRecordEndDate());
lqw.eq(bo.getRecordedBy() != null, EmsEnergyRecord::getRecordedBy, bo.getRecordedBy());
return lqw;
}

View File

@@ -18,6 +18,28 @@
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
</resultMap>
<select id="selectVoPagePlus" resultType="com.klp.ems.domain.vo.EmsEnergyRecordVo">
SELECT
er.energy_record_id,
er.meter_id,
er.energy_id,
er.consumption,
er.record_date,
er.recorded_by,
er.remark,
m.meter_code AS meterCode,
m.model AS meterModel,
m.manufacturer AS meterManufacturer,
m.status AS meterStatus,
et.name AS energyName,
et.unit AS energyUnit,
et.code AS energyCode,
et.description AS energyDescription
FROM ems_energy_record er
LEFT JOIN ems_meter m ON er.meter_id = m.meter_id AND m.del_flag = '0'
LEFT JOIN ems_energy_type et ON er.energy_id = et.energy_type_id AND et.del_flag = '0'
${ew.customSqlSegment}
</select>
</mapper>