feat(oa): 添加财务模块主表分页查询功能

- 新增 selectMainPageList 方法用于主表分页查询
- 在 SysOaFinanceMapper.xml 中添加对应的 SQL 查询语句
- 修改 selectPageFinanceList 实现,先查询主表数据再批量查询子表数据
- 通过 financeId 分组将子表数据封装到对应的主表记录中
- 修复查询条件中的字段前缀问题,统一使用表别名 sof
This commit is contained in:
2026-03-13 15:11:45 +08:00
parent febcf3ec8a
commit 4d4ab32ab1
3 changed files with 48 additions and 3 deletions

View File

@@ -37,6 +37,8 @@ public interface SysOaFinanceMapper extends BaseMapperPlus<SysOaFinanceMapper, S
})
Page<SysOaFinanceVo> selectPageFinanceList(@Param("page") Page<SysOaFinanceVo> page, @Param(Constants.WRAPPER) Wrapper<SysOaFinance> queryWrapper);
Page<SysOaFinanceVo> selectMainPageList(@Param("page") Page<SysOaFinanceVo> page, @Param(Constants.WRAPPER) Wrapper<SysOaFinance> queryWrapper);
/**
* 项目进出账查询

View File

@@ -59,8 +59,24 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
*/
@Override
public TableDataInfo<SysOaFinanceVo> selectPageFinanceList(SysOaFinanceBo bo, PageQuery pageQuery) {
Page<SysOaFinanceVo> sysOaFinanceVoPage = baseMapper.selectPageFinanceList(pageQuery.build(), this.buildQueryWrapper(bo));
return TableDataInfo.build(sysOaFinanceVoPage);
// 先查询主表分页数据
Page<SysOaFinanceVo> mainPage = baseMapper.selectMainPageList(pageQuery.build(), this.buildQueryWrapper(bo));
List<SysOaFinanceVo> records = mainPage.getRecords();
if (records != null && !records.isEmpty()) {
// 获取所有主表ID
List<Long> financeIds = records.stream().map(SysOaFinanceVo::getFinanceId).collect(java.util.stream.Collectors.toList());
// 批量查询子表数据
List<SysOaDetail> details = sysOaDetailMapper.selectList(new LambdaQueryWrapper<SysOaDetail>()
.in(SysOaDetail::getFinanceId, financeIds));
// 按financeId分组
Map<Long, List<SysOaDetail>> detailMap = details.stream().collect(java.util.stream.Collectors.groupingBy(SysOaDetail::getFinanceId));
// 封装子表数据
for (SysOaFinanceVo vo : records) {
vo.setDetailList(detailMap.getOrDefault(vo.getFinanceId(), new ArrayList<>()));
}
}
mainPage.setRecords(records);
return TableDataInfo.build(mainPage);
}
/**
@@ -201,7 +217,7 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
lqw.eq(Objects.nonNull(bo.getReceiveAccountId()) && bo.getReceiveAccountId()!=-1L, "sof.receive_account_id", bo.getReceiveAccountId());
lqw.between(bo.getBeginCreateTime()!= null && bo.getEndCreateTime()!= null,
"sof.create_time", bo.getBeginCreateTime(), bo.getEndCreateTime());
lqw.orderByDesc("create_time");
lqw.orderByDesc("sof.create_time");
return lqw;
}

View File

@@ -97,6 +97,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment}
</select>
<select id="selectMainPageList" resultMap="SysOaFinanceResult">
select sof.finance_id,
sof.project_id,
sof.finance_title,
sof.finance_parties,
sof.pay_type,
sof.finance_type,
sof.finance_time,
sof.make_ratio,
sof.make_price,
sof.make_time,
sof.make_explain,
sof.accessory,
sof.remark as finance_remark,
sof.create_by,
sof.create_time,
sof.update_by,
sof.update_time,
sof.out_type,
sof.cost_category,
sof.signing_company,
sof.payment_progress_id,
sof.status
from sys_oa_finance sof
${ew.getCustomSqlSegment}
</select>
<select id="selectFinanceList" resultMap="SysOaFinanceResult">
select sof.finance_id,
sof.project_id,