7.3 KiB
7.3 KiB
结果总览模型区联动筛选后端实施记录
本次改动
- 在
CcdiProjectOverviewController.java新增GET /ccdi/project/overview/risk-models/cards与GET /ccdi/project/overview/risk-models/people两个接口。 - 在
ICcdiProjectOverviewService.java与CcdiProjectOverviewServiceImpl.java补齐模型卡片与模型人员分页服务。 - 新增
CcdiProjectRiskModelPeopleQueryDTO.java及一组风险模型区 VO,用于承载卡片、分页行和命中标签结构。 - 在
CcdiProjectOverviewMapper.java与CcdiProjectOverviewMapper.xml新增模型卡片统计与模型人员分页 SQL。 - 新增或扩展
CcdiProjectOverviewControllerContractTest.java、CcdiProjectOverviewMapperRiskModelCardsTest.java、CcdiProjectOverviewMapperRiskModelPeopleTest.java、CcdiProjectOverviewServiceImplTest.java以覆盖契约、SQL 和服务封装。 - 根据 2026-03-20 线上分页异常,在
CcdiProjectOverviewMapper.xml的selectRiskModelPeoplePage增加<bind name="projectId" value="query.projectId"/>,并在CcdiProjectOverviewMapperRiskModelPeopleTest.java补充对应断言,防止再次出现参数绑定异常。 - 根据 2026-03-20 线上 MySQL 3065 异常,将
CcdiProjectOverviewMapper.xml中selectRiskModelNamesByScope从select distinct调整为group by scoped.model_code, scoped.model_name,并在CcdiProjectOverviewMapperRiskModelPeopleTest.java补充兼容性断言。 - 根据 2026-03-20 线上
matchMode=ALL的UnsupportedOperationException,在CcdiProjectRiskModelPeopleQueryDTO.java新增显式只读字段modelCodesCount,并将CcdiProjectOverviewMapper.xml中having count(distinct base.model_code) = #{query.modelCodes.size}改为#{query.modelCodesCount},同时更新CcdiProjectOverviewMapperRiskModelPeopleTest.java回归断言。 - 根据“模型触发次数为 0 也要展示卡片”的新要求,将
CcdiProjectOverviewMapper.xml中selectRiskModelCardsByProjectId从命中结果直聚合改为以ccdi_bank_tag_rule启用模型为主表、左连项目命中聚合,并更新CcdiProjectOverviewMapperRiskModelCardsTest.java回归断言。
处理说明
- 继续复用现有
CcdiProjectOverviewController + Service + Mapper结果总览链路,没有新增平行模块或补丁式接口。 - 模型卡片展示口径以
ccdi_bank_tag_rule中启用的全量模型定义为准,不再只返回已命中的模型;卡片命中统计与人员分页仍统一建立在“员工本人 + 亲属归并到员工名下”的基础归并 SQL 上,确保与既有风险人员口径一致。 - 人员分页中的员工工号使用
ccdi_base_staff.staff_id作为真实字段来源,并在 SQL 中转换为字符后映射到staffCode。 ANY模式通过模型范围过滤直接返回并集结果;ALL模式通过having count(distinct base.model_code) = #{query.modelCodesCount}约束交集结果,避免在 MyBatis 参数绑定阶段直接读取集合包装器属性。modelNames与hitTagList使用同上下文子查询回填,只返回当前筛选模型范围内的数据。- 风险模型人员分页复用公共归并 SQL 时,必须先把
query.projectId绑定到顶层projectId,否则resolvedEmployeeRiskBaseSql中的#{projectId}会在 MyBatis 分页查询阶段直接报绑定异常。 - 风险模型名称子查询需要按
model_code保序返回,但不能使用distinct + order by 非 select 列组合;这里改为group by scoped.model_code, scoped.model_name后再排序,以兼容当前 MySQL 配置。 - 风险模型卡片查询改为从
ccdi_bank_tag_rule先聚合出启用模型,再左连项目命中统计,warningCount/peopleCount统一通过coalesce(..., 0)回填,确保 0 次模型卡片也能展示。 - 服务层对
matchMode缺省值统一收口为ANY,并确保空列表返回空数组、分页行统一附加“查看详情”。
验证情况
- 已执行如下定向验证:
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewControllerContractTest
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperRiskModelCardsTest
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewMapperRiskModelPeopleTest
mvn test -pl ccdi-project -Dtest=CcdiProjectOverviewServiceImplTest
- 已执行结果总览相关总体验证:
mvn test -pl ccdi-project '-Dtest=CcdiProjectOverview*'
- 已执行重新打包与真实接口回归:
mvn -pl ruoyi-admin -am package -DskipTests
java -jar ruoyi-admin/target/ruoyi-admin.jar --server.port=62319
- 真实接口回归覆盖
/risk-models/cards、人员默认分页、单模型ANY、单模型ALL,项目42的实际返回均为code=200,其中卡片接口返回10张模型卡片,仅1张存在真实命中,其余9张为warningCount=0、peopleCount=0。 - 总体验证结果:22 个测试全部通过,0 failure,0 error;临时启动的
62319实例已在验证完成后关闭。