[P1] 数据聚合服务使用错误的预警表查询奖励和会见记录 #5

Open
opened 2026-01-18 17:04:43 +08:00 by tangweijie · 0 comments
Owner

问题描述

DataAggregationServiceImpl 中存在数据源使用错误的问题,奖励记录和会见记录查询使用了预警表的 Mapper。

涉及文件

  • backend/yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/service/evaluationreport/impl/DataAggregationServiceImpl.java

问题详情

1. 奖励记录使用 WarningMapper 查询 (P1)

文件: DataAggregationServiceImpl.java:362-408

@Override
public IPage<Map<String, Object>> getRewardRecords(Long prisonerId, Integer pageNo, Integer pageSize) {
    try {
        Page<WarningDO> page = new Page<>(pageNo, pageSize);
        IPage<WarningDO> resultPage = warningMapper.selectPage(page,
                new LambdaQueryWrapper<WarningDO>()
                        .eq(WarningDO::getPrisonerId, prisonerId)
                        .eq(WarningDO::getType, 2) // 2-监管预警作为奖励
                        .orderByDesc(WarningDO::getCreateTime));
        // ...
    }
}

使用 WarningMapper 查询预警类型为"监管预警"(type=2)的记录作为奖励记录。

2. 会见记录使用 WarningMapper 查询 (P1)

文件: DataAggregationServiceImpl.java:410-456

@Override
public IPage<Map<String, Object>> getVisitRecords(Long prisonerId, Integer pageNo, Integer pageSize) {
    try {
        Page<WarningDO> page = new Page<>(pageNo, pageSize);
        IPage<WarningDO> resultPage = warningMapper.selectPage(page,
                new LambdaQueryWrapper<WarningDO>()
                        .eq(WarningDO::getPrisonerId, prisonerId)
                        .eq(WarningDO::getType, 6) // 6-其他
                        .orderByDesc(WarningDO::getCreateTime));
        // ...
    }
}

使用 WarningMapper 查询预警类型为"其他"(type=6)的记录作为会见记录。

3. getDataSourceFromDimension 参数未使用 (P2)

文件: DataAggregationServiceImpl.java:500-502

private String getDataSourceFromDimension(EvaluationDimensionDO dimension) {
    return "prisoner,score,consumption,questionnaire,risk,violation,reward,visit";
}

方法参数 dimension 未被使用,聚合逻辑完全硬编码。

影响

  • 奖励记录和会见记录使用了预警表的数据,语义不正确
  • 业务逻辑混淆,预警数据不应被当作奖励/会见数据使用
  • 可能导致统计结果不准确
  • 数据源配置无法根据维度动态调整

建议修复

  1. 确认是否有独立的奖励记录表 (prison_reward) 和会见记录表 (prison_visit)
  2. 如果有,使用正确的 Mapper 进行查询
  3. 如果没有,需要创建对应的数据表或使用其他数据源
  4. 修改 getDataSourceFromDimension 方法,根据 dimension 的配置动态返回数据源

优先级

P1 (High)

标签

bug, backend, logic-error

## 问题描述 `DataAggregationServiceImpl` 中存在数据源使用错误的问题,奖励记录和会见记录查询使用了预警表的 Mapper。 ## 涉及文件 - `backend/yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/service/evaluationreport/impl/DataAggregationServiceImpl.java` ## 问题详情 ### 1. 奖励记录使用 WarningMapper 查询 (P1) **文件**: `DataAggregationServiceImpl.java:362-408` ```java @Override public IPage<Map<String, Object>> getRewardRecords(Long prisonerId, Integer pageNo, Integer pageSize) { try { Page<WarningDO> page = new Page<>(pageNo, pageSize); IPage<WarningDO> resultPage = warningMapper.selectPage(page, new LambdaQueryWrapper<WarningDO>() .eq(WarningDO::getPrisonerId, prisonerId) .eq(WarningDO::getType, 2) // 2-监管预警作为奖励 .orderByDesc(WarningDO::getCreateTime)); // ... } } ``` 使用 `WarningMapper` 查询预警类型为"监管预警"(type=2)的记录作为奖励记录。 ### 2. 会见记录使用 WarningMapper 查询 (P1) **文件**: `DataAggregationServiceImpl.java:410-456` ```java @Override public IPage<Map<String, Object>> getVisitRecords(Long prisonerId, Integer pageNo, Integer pageSize) { try { Page<WarningDO> page = new Page<>(pageNo, pageSize); IPage<WarningDO> resultPage = warningMapper.selectPage(page, new LambdaQueryWrapper<WarningDO>() .eq(WarningDO::getPrisonerId, prisonerId) .eq(WarningDO::getType, 6) // 6-其他 .orderByDesc(WarningDO::getCreateTime)); // ... } } ``` 使用 `WarningMapper` 查询预警类型为"其他"(type=6)的记录作为会见记录。 ### 3. getDataSourceFromDimension 参数未使用 (P2) **文件**: `DataAggregationServiceImpl.java:500-502` ```java private String getDataSourceFromDimension(EvaluationDimensionDO dimension) { return "prisoner,score,consumption,questionnaire,risk,violation,reward,visit"; } ``` 方法参数 `dimension` 未被使用,聚合逻辑完全硬编码。 ## 影响 - 奖励记录和会见记录使用了预警表的数据,语义不正确 - 业务逻辑混淆,预警数据不应被当作奖励/会见数据使用 - 可能导致统计结果不准确 - 数据源配置无法根据维度动态调整 ## 建议修复 1. 确认是否有独立的奖励记录表 (prison_reward) 和会见记录表 (prison_visit) 2. 如果有,使用正确的 Mapper 进行查询 3. 如果没有,需要创建对应的数据表或使用其他数据源 4. 修改 `getDataSourceFromDimension` 方法,根据 `dimension` 的配置动态返回数据源 ## 优先级 P1 (High) ## 标签 bug, backend, logic-error
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tangweijie/xlcp-backend#5
No description provided.