完善结果总览模型区卡片展示与联动修复

This commit is contained in:
wkc
2026-03-20 14:02:18 +08:00
parent 726265fb70
commit 538fb9c9f3
10 changed files with 128 additions and 18 deletions

View File

@@ -43,4 +43,12 @@ public class CcdiProjectRiskModelPeopleQueryDTO {
.distinct()
.collect(Collectors.joining(","));
}
public Integer getModelCodesCount() {
String modelCodesCsv = getModelCodesCsv();
if (modelCodesCsv == null || modelCodesCsv.isBlank()) {
return 0;
}
return modelCodesCsv.split(",").length;
}
}

View File

@@ -199,14 +199,28 @@
<select id="selectRiskModelCardsByProjectId" resultType="com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardVO">
select
base.model_code,
max(base.model_name) as model_name,
count(1) as warning_count,
count(distinct base.staff_id_card) as people_count
models.model_code,
models.model_name,
coalesce(stats.warning_count, 0) as warning_count,
coalesce(stats.people_count, 0) as people_count
from (
<include refid="resolvedEmployeeRiskBaseSql"/>
) base
group by base.model_code
select
rule.model_code,
max(rule.model_name) as model_name
from ccdi_bank_tag_rule rule
where enabled = 1
group by rule.model_code
) models
left join (
select
base.model_code,
count(1) as warning_count,
count(distinct base.staff_id_card) as people_count
from (
<include refid="resolvedEmployeeRiskBaseSql"/>
) base
group by base.model_code
) stats on models.model_code = stats.model_code
order by warning_count desc, model_code asc
</select>
@@ -241,7 +255,7 @@
</if>
group by base.project_id, base.staff_id_card
<if test="query.modelCodes != null and query.modelCodes.size() > 0 and query.matchMode == 'ALL'">
having count(distinct base.model_code) = #{query.modelCodes.size}
having count(distinct base.model_code) = #{query.modelCodesCount}
</if>
order by max(base.staff_name) asc, base.staff_id_card asc
</select>

View File

@@ -21,9 +21,14 @@ class CcdiProjectOverviewMapperRiskModelCardsTest {
String xml = Files.readString(Path.of("src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml"));
assertTrue(xml.contains("<select id=\"selectRiskModelCardsByProjectId\""));
assertTrue(xml.contains("from ("));
assertTrue(xml.contains("from ccdi_bank_tag_rule"));
assertTrue(xml.contains("where enabled = 1"));
assertTrue(xml.contains("left join ("));
assertTrue(xml.contains("<include refid=\"resolvedEmployeeRiskBaseSql\"/>"));
assertTrue(xml.contains("coalesce(stats.warning_count, 0) as warning_count"));
assertTrue(xml.contains("coalesce(stats.people_count, 0) as people_count"));
assertTrue(xml.contains("count(1) as warning_count"));
assertTrue(xml.contains("count(distinct base.staff_id_card) as people_count"));
assertTrue(xml.contains("order by warning_count desc, model_code asc"));
}
}

View File

@@ -33,7 +33,8 @@ class CcdiProjectOverviewMapperRiskModelPeopleTest {
assertTrue(xml.contains("<select id=\"selectRiskModelPeoplePage\""));
assertTrue(xml.contains("query.modelCodes != null and query.modelCodes.size() > 0"));
assertTrue(xml.contains("query.matchMode == 'ALL'"));
assertTrue(xml.contains("count(distinct base.model_code) = #{query.modelCodes.size}"));
assertFalse(xml.contains("#{query.modelCodes.size}"));
assertTrue(xml.contains("count(distinct base.model_code) = #{query.modelCodesCount}"));
assertTrue(xml.contains("<bind name=\"projectId\" value=\"query.projectId\"/>"));
assertTrue(xml.contains("base.staff_name like concat('%', trim(#{query.keyword}), '%')"));
assertTrue(xml.contains("cast(base.staff_code as char) like concat('%', trim(#{query.keyword}), '%')"));