调整专项排查资产收入匹配口径

This commit is contained in:
wjj
2026-07-16 14:47:04 +08:00
parent 15aa9117c3
commit 4a7cfde4af
9 changed files with 315 additions and 72 deletions

View File

@@ -24,6 +24,15 @@ public class CcdiProjectFamilyAssetLiabilityListItemVO {
/** 家庭总年收入 */
private BigDecimal totalIncome;
/** 本人年收入 */
private BigDecimal selfIncome;
/** 配偶年收入 */
private BigDecimal spouseIncome;
/** 本人入职年限 */
private Integer employmentYears;
/** 家庭总资产 */
private BigDecimal totalAsset;
@@ -33,6 +42,12 @@ public class CcdiProjectFamilyAssetLiabilityListItemVO {
/** 收入负债对比金额 */
private BigDecimal comparisonAmount;
/** 可解释收入 */
private BigDecimal explainableIncome;
/** 资产收入倍数 */
private BigDecimal assetIncomeRatio;
/** 风险等级编码 */
private String riskLevelCode;

View File

@@ -15,6 +15,12 @@ public class CcdiProjectFamilyIncomeDetailVO {
/** 配偶年收入 */
private BigDecimal spouseIncome;
/** 本人入职年限 */
private Integer employmentYears;
/** 家庭总年收入 */
private BigDecimal totalIncome;
/** 可解释收入 */
private BigDecimal explainableIncome;
}

View File

@@ -227,6 +227,7 @@ public class CcdiProjectSpecialCheckServiceImpl implements ICcdiProjectSpecialCh
incomeDetail.setSelfIncome(BigDecimal.ZERO);
incomeDetail.setSpouseIncome(BigDecimal.ZERO);
incomeDetail.setTotalIncome(BigDecimal.ZERO);
incomeDetail.setExplainableIncome(BigDecimal.ZERO);
detail.setIncomeDetail(incomeDetail);
}

View File

@@ -9,9 +9,14 @@
<result property="staffName" column="staff_name"/>
<result property="deptName" column="dept_name"/>
<result property="totalIncome" column="total_income"/>
<result property="selfIncome" column="self_income"/>
<result property="spouseIncome" column="spouse_income"/>
<result property="employmentYears" column="employment_years"/>
<result property="totalAsset" column="total_asset"/>
<result property="totalDebt" column="total_debt"/>
<result property="comparisonAmount" column="comparison_amount"/>
<result property="explainableIncome" column="explainable_income"/>
<result property="assetIncomeRatio" column="asset_income_ratio"/>
<result property="riskLevelCode" column="risk_level_code"/>
<result property="riskLevelName" column="risk_level_name"/>
</resultMap>
@@ -95,7 +100,9 @@
javaType="com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyIncomeDetailVO">
<result property="selfIncome" column="income_self_income"/>
<result property="spouseIncome" column="income_spouse_income"/>
<result property="employmentYears" column="income_employment_years"/>
<result property="totalIncome" column="income_total_income"/>
<result property="explainableIncome" column="income_explainable_income"/>
</association>
<association property="assetDetail"
javaType="com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetDetailVO">
@@ -126,9 +133,14 @@
<result property="staffName" column="summary_staff_name"/>
<result property="deptName" column="summary_dept_name"/>
<result property="totalIncome" column="summary_total_income"/>
<result property="selfIncome" column="summary_self_income"/>
<result property="spouseIncome" column="summary_spouse_income"/>
<result property="employmentYears" column="summary_employment_years"/>
<result property="totalAsset" column="summary_total_asset"/>
<result property="totalDebt" column="summary_total_debt"/>
<result property="comparisonAmount" column="summary_comparison_amount"/>
<result property="explainableIncome" column="summary_explainable_income"/>
<result property="assetIncomeRatio" column="summary_asset_income_ratio"/>
<result property="riskLevelCode" column="summary_risk_level_code"/>
<result property="riskLevelName" column="summary_risk_level_name"/>
</association>
@@ -194,44 +206,58 @@
aggregated.staff_name,
aggregated.dept_name,
aggregated.total_income,
aggregated.self_income,
aggregated.spouse_income,
aggregated.employment_years,
aggregated.total_asset,
aggregated.total_debt,
aggregated.comparison_amount,
aggregated.explainable_income,
aggregated.asset_income_ratio,
case
when aggregated.missing_asset_info = 1 or aggregated.missing_debt_info = 1 then 'MISSING_INFO'
when comparison_amount &lt;= total_asset * 1.5 then 'NORMAL'
when comparison_amount &gt; total_asset * 1.5 and comparison_amount &lt;= total_asset * 3 then 'RISK'
when comparison_amount &gt; total_asset * 3 then 'HIGH'
when aggregated.missing_info = 1 then 'MISSING_INFO'
when aggregated.asset_income_ratio &lt;= 1.5 then 'NORMAL'
when aggregated.asset_income_ratio &gt; 1.5 and aggregated.asset_income_ratio &lt;= 3 then 'RISK'
when aggregated.asset_income_ratio &gt; 3 then 'HIGH'
else 'HIGH'
end as risk_level_code,
case
when aggregated.missing_asset_info = 1 or aggregated.missing_debt_info = 1 then '缺少信息'
when comparison_amount &lt;= total_asset * 1.5 then '正常'
when comparison_amount &gt; total_asset * 1.5 and comparison_amount &lt;= total_asset * 3 then '存在风险'
when comparison_amount &gt; total_asset * 3 then '高风险'
else '高风险'
when aggregated.missing_info = 1 then '缺少信息'
when aggregated.asset_income_ratio &lt;= 1.5 then '正常'
when aggregated.asset_income_ratio &gt; 1.5 and aggregated.asset_income_ratio &lt;= 3 then '关注'
when aggregated.asset_income_ratio &gt; 3 then '高关注'
else '高关注'
end as risk_level_name
from (
select
source.*,
case
when source.self_asset_record_count = 0
or source.spouse_staff_asset_record_count = 0 then 1
when source.self_income &lt;= 0
or source.employment_years is null
or source.total_asset &lt;= 0 then 1
else 0
end as missing_asset_info,
end as missing_info,
source.self_income * source.employment_years
+ source.spouse_income
+ source.total_debt as explainable_income,
source.self_income * source.employment_years
+ source.spouse_income
+ source.total_debt as comparison_amount,
case
when source.self_debt_record_count = 0
or source.spouse_staff_debt_record_count = 0 then 1
else 0
end as missing_debt_info,
when source.self_income &lt;= 0
or source.employment_years is null
or source.total_asset &lt;= 0
or (source.self_income * source.employment_years + source.spouse_income + source.total_debt) &lt;= 0 then null
else source.total_asset / (source.self_income * source.employment_years + source.spouse_income + source.total_debt)
end as asset_income_ratio,
case
when source.self_asset_record_count = 0
or source.spouse_staff_asset_record_count = 0
or source.self_debt_record_count = 0
or source.spouse_staff_debt_record_count = 0 then 4
when source.comparison_amount &lt;= source.total_asset * 1.5 then 1
when source.comparison_amount &lt;= source.total_asset * 3 then 2
when source.comparison_amount &gt; source.total_asset * 3 then 3
when source.self_income &lt;= 0
or source.employment_years is null
or source.total_asset &lt;= 0
or (source.self_income * source.employment_years + source.spouse_income + source.total_debt) &lt;= 0 then 0
when source.total_asset / (source.self_income * source.employment_years + source.spouse_income + source.total_debt) &lt;= 1.5 then 1
when source.total_asset / (source.self_income * source.employment_years + source.spouse_income + source.total_debt) &lt;= 3 then 2
when source.total_asset / (source.self_income * source.employment_years + source.spouse_income + source.total_debt) &gt; 3 then 3
else 3
end as risk_level_sort
from (
@@ -240,6 +266,12 @@
scope.staff_code,
scope.staff_name,
scope.dept_name,
coalesce(base_staff.annual_income, 0) as self_income,
coalesce(spouse.spouse_income, 0) as spouse_income,
case
when base_staff.hire_date is null then null
else greatest(1, ceiling(datediff(curdate(), base_staff.hire_date) / 365))
end as employment_years,
coalesce(base_staff.annual_income, 0) + coalesce(spouse.spouse_income, 0) as total_income,
coalesce((
select count(1)
@@ -294,15 +326,7 @@
from ccdi_debts_info debt
where debt.person_id = scope.staff_id_card
or (spouse.spouse_id_card is not null and debt.person_id = spouse.spouse_id_card)
), 0) as total_debt,
coalesce(base_staff.annual_income, 0)
+ coalesce(spouse.spouse_income, 0)
+ coalesce((
select sum(coalesce(debt.principal_balance, 0))
from ccdi_debts_info debt
where debt.person_id = scope.staff_id_card
or (spouse.spouse_id_card is not null and debt.person_id = spouse.spouse_id_card)
), 0) as comparison_amount
), 0) as total_debt
from (
<include refid="projectEmployeeScopeSql"/>
) scope
@@ -328,7 +352,9 @@
aggregated.dept_name,
aggregated.self_income as income_self_income,
aggregated.spouse_income as income_spouse_income,
aggregated.employment_years as income_employment_years,
aggregated.total_income as income_total_income,
aggregated.explainable_income as income_explainable_income,
aggregated.missing_self_asset_info as asset_missing_self_asset_info,
aggregated.self_total_asset as asset_self_total_asset,
aggregated.spouse_total_asset as asset_spouse_total_asset,
@@ -342,36 +368,61 @@
aggregated.staff_name as summary_staff_name,
aggregated.dept_name as summary_dept_name,
aggregated.total_income as summary_total_income,
aggregated.self_income as summary_self_income,
aggregated.spouse_income as summary_spouse_income,
aggregated.employment_years as summary_employment_years,
aggregated.total_asset as summary_total_asset,
aggregated.total_debt as summary_total_debt,
aggregated.comparison_amount as summary_comparison_amount,
aggregated.explainable_income as summary_explainable_income,
aggregated.asset_income_ratio as summary_asset_income_ratio,
case
when aggregated.missing_self_asset_info = 1 or aggregated.missing_self_debt_info = 1 then 'MISSING_INFO'
when comparison_amount &lt;= total_asset * 1.5 then 'NORMAL'
when comparison_amount &gt; total_asset * 1.5 and comparison_amount &lt;= total_asset * 3 then 'RISK'
when comparison_amount &gt; total_asset * 3 then 'HIGH'
when aggregated.missing_info = 1 then 'MISSING_INFO'
when aggregated.asset_income_ratio &lt;= 1.5 then 'NORMAL'
when aggregated.asset_income_ratio &gt; 1.5 and aggregated.asset_income_ratio &lt;= 3 then 'RISK'
when aggregated.asset_income_ratio &gt; 3 then 'HIGH'
else 'HIGH'
end as summary_risk_level_code,
case
when aggregated.missing_self_asset_info = 1 or aggregated.missing_self_debt_info = 1 then '缺少信息'
when comparison_amount &lt;= total_asset * 1.5 then '正常'
when comparison_amount &gt; total_asset * 1.5 and comparison_amount &lt;= total_asset * 3 then '存在风险'
when comparison_amount &gt; total_asset * 3 then '高风险'
else '高风险'
when aggregated.missing_info = 1 then '缺少信息'
when aggregated.asset_income_ratio &lt;= 1.5 then '正常'
when aggregated.asset_income_ratio &gt; 1.5 and aggregated.asset_income_ratio &lt;= 3 then '关注'
when aggregated.asset_income_ratio &gt; 3 then '高关注'
else '高关注'
end as summary_risk_level_name
from (
select
source.*,
case
when source.self_asset_record_count = 0
or source.spouse_staff_asset_record_count = 0 then 1
when source.self_income &lt;= 0
or source.employment_years is null
or source.total_asset &lt;= 0 then 1
else 0
end as missing_self_asset_info,
case
when source.self_debt_record_count = 0
or source.spouse_staff_debt_record_count = 0 then 1
else 0
end as missing_self_debt_info
end as missing_self_debt_info,
case
when source.self_income &lt;= 0
or source.employment_years is null
or source.total_asset &lt;= 0 then 1
else 0
end as missing_info,
source.self_income * source.employment_years
+ source.spouse_income
+ source.total_debt as explainable_income,
source.self_income * source.employment_years
+ source.spouse_income
+ source.total_debt as comparison_amount,
case
when source.self_income &lt;= 0
or source.employment_years is null
or source.total_asset &lt;= 0
or (source.self_income * source.employment_years + source.spouse_income + source.total_debt) &lt;= 0 then null
else source.total_asset / (source.self_income * source.employment_years + source.spouse_income + source.total_debt)
end as asset_income_ratio
from (
select
#{projectId} as project_id,
@@ -383,6 +434,10 @@
spouse.spouse_is_staff,
coalesce(base_staff.annual_income, 0) as self_income,
coalesce(spouse.spouse_income, 0) as spouse_income,
case
when base_staff.hire_date is null then null
else greatest(1, ceiling(datediff(curdate(), base_staff.hire_date) / 365))
end as employment_years,
coalesce(base_staff.annual_income, 0) + coalesce(spouse.spouse_income, 0) as total_income,
coalesce((
select count(1)
@@ -471,15 +526,7 @@
from ccdi_debts_info debt
where debt.person_id = scope.staff_id_card
or (spouse.spouse_id_card is not null and debt.person_id = spouse.spouse_id_card)
), 0) as total_debt,
coalesce(base_staff.annual_income, 0)
+ coalesce(spouse.spouse_income, 0)
+ coalesce((
select sum(coalesce(debt.principal_balance, 0))
from ccdi_debts_info debt
where debt.person_id = scope.staff_id_card
or (spouse.spouse_id_card is not null and debt.person_id = spouse.spouse_id_card)
), 0) as comparison_amount
), 0) as total_debt
from (
<include refid="projectEmployeeScopeSql"/>
) scope