feat: 客商档案新增合规客商风险与金蝶黑名单落库字段及列表筛选
This commit is contained in:
+15
@@ -182,4 +182,19 @@ public class CustomerArchive extends TenantEntity {
|
||||
@Schema(description = "金蝶推送时间")
|
||||
private LocalDateTime kingdeeSyncTime;
|
||||
|
||||
@Schema(description = "合规客商风险等级(C101-1,每日定时刷新):0=低风险,1=中风险,2=高风险")
|
||||
private String hcsRiskLevel;
|
||||
|
||||
@Schema(description = "合规客商黑名单状态(C101-1,每日定时刷新):yes=是,no=否,handing=处理中")
|
||||
private String hcsBlackStatus;
|
||||
|
||||
@Schema(description = "合规客商风险最近查询时间(C101-1)")
|
||||
private LocalDateTime hcsRiskTime;
|
||||
|
||||
@Schema(description = "金蝶黑名单失信类别(A801-5 awrp_combofield_title,缺失兜底 awrp_combofield)")
|
||||
private String kingdeeBlackCategory;
|
||||
|
||||
@Schema(description = "金蝶黑名单列入事由(A801-5 awrp_textareafield)")
|
||||
private String kingdeeBlackReason;
|
||||
|
||||
}
|
||||
|
||||
+8
@@ -106,4 +106,12 @@ public class CustomerArchiveVO extends CustomerArchive {
|
||||
@Schema(description = "已付金额合计(元)")
|
||||
private BigDecimal usedFundLimit;
|
||||
|
||||
@TableField(exist = false)
|
||||
@Schema(description = "客商风险筛选值:blacklist黑名单/high高风险/middle中风险/low低风险")
|
||||
private String customerRisk;
|
||||
|
||||
@TableField(exist = false)
|
||||
@Schema(description = "客商风险明细(后台组装:合同系统风险等级+金蝶黑名单失信类别/列入事由)")
|
||||
private String hcsRiskDetail;
|
||||
|
||||
}
|
||||
|
||||
+27
@@ -54,6 +54,11 @@
|
||||
<result column="kingdee_status" property="kingdeeStatus"/>
|
||||
<result column="kingdee_fail_reason" property="kingdeeFailReason"/>
|
||||
<result column="kingdee_sync_time" property="kingdeeSyncTime"/>
|
||||
<result column="hcs_risk_level" property="hcsRiskLevel"/>
|
||||
<result column="hcs_black_status" property="hcsBlackStatus"/>
|
||||
<result column="hcs_risk_time" property="hcsRiskTime"/>
|
||||
<result column="kingdee_black_category" property="kingdeeBlackCategory"/>
|
||||
<result column="kingdee_black_reason" property="kingdeeBlackReason"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectCustomerArchivePage" resultMap="customerArchiveResultMap">
|
||||
@@ -108,6 +113,11 @@
|
||||
kingdee_status,
|
||||
kingdee_fail_reason,
|
||||
kingdee_sync_time,
|
||||
hcs_risk_level,
|
||||
hcs_black_status,
|
||||
hcs_risk_time,
|
||||
kingdee_black_category,
|
||||
kingdee_black_reason,
|
||||
(
|
||||
SELECT s.review_status
|
||||
FROM blade_customer_credit_score s
|
||||
@@ -171,6 +181,23 @@
|
||||
<if test="customer.createTimeEnd != null">
|
||||
AND create_time <= #{customer.createTimeEnd}
|
||||
</if>
|
||||
<!-- 客商风险筛选:黑名单优先,等级筛选排除黑名单避免重复命中 -->
|
||||
<if test="customer.customerRisk != null and customer.customerRisk != ''">
|
||||
<choose>
|
||||
<when test="customer.customerRisk == 'blacklist'">
|
||||
AND hcs_black_status = 'yes'
|
||||
</when>
|
||||
<when test="customer.customerRisk == 'high'">
|
||||
AND hcs_risk_level = '2' AND (hcs_black_status IS NULL OR hcs_black_status != 'yes')
|
||||
</when>
|
||||
<when test="customer.customerRisk == 'middle'">
|
||||
AND hcs_risk_level = '1' AND (hcs_black_status IS NULL OR hcs_black_status != 'yes')
|
||||
</when>
|
||||
<otherwise>
|
||||
AND hcs_risk_level = '0' AND (hcs_black_status IS NULL OR hcs_black_status != 'yes')
|
||||
</otherwise>
|
||||
</choose>
|
||||
</if>
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
|
||||
@@ -46,6 +46,11 @@ CREATE TABLE `blade_customer_archive` (
|
||||
`kingdee_status` varchar(20) NOT NULL DEFAULT 'none' COMMENT '金蝶协同状态:none未推送/exist金蝶已有/synced已推送/failed推送失败',
|
||||
`kingdee_fail_reason` varchar(500) NULL DEFAULT NULL COMMENT '金蝶推送失败原因',
|
||||
`kingdee_sync_time` datetime NULL DEFAULT NULL COMMENT '金蝶推送时间',
|
||||
`hcs_risk_level` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合规客商风险等级(C101-1,0=低风险/1=中风险/2=高风险)',
|
||||
`hcs_black_status` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合规客商黑名单状态(C101-1,yes=是/no=否/handing=处理中)',
|
||||
`hcs_risk_time` datetime DEFAULT NULL COMMENT '客商风险最近查询时间(C101-1)',
|
||||
`kingdee_black_category` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '金蝶黑名单失信类别(A801-5 awrp_combofield_title,缺失兜底 awrp_combofield)',
|
||||
`kingdee_black_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '金蝶黑名单列入事由(A801-5 awrp_textareafield)',
|
||||
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人',
|
||||
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
@@ -58,7 +63,9 @@ CREATE TABLE `blade_customer_archive` (
|
||||
UNIQUE KEY `uk_customer_archive_credit_code` (`tenant_id`, `unified_credit_code`, `is_deleted`) USING BTREE,
|
||||
KEY `idx_customer_archive_access` (`tenant_id`, `access_type`, `approval_status`) USING BTREE,
|
||||
KEY `idx_customer_archive_name` (`tenant_id`, `full_name`, `short_name`) USING BTREE,
|
||||
KEY `idx_kingdee_status` (`kingdee_status`) USING BTREE
|
||||
KEY `idx_kingdee_status` (`kingdee_status`) USING BTREE,
|
||||
KEY `idx_hcs_risk_level` (`hcs_risk_level`) USING BTREE,
|
||||
KEY `idx_hcs_black_status` (`hcs_black_status`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '客商档案';
|
||||
|
||||
-- ----------------------------
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
-- 客商档案:合规客商风险(C101-1)落库字段
|
||||
-- 用途:每日定时刷新合同期限内生效合同关联客商的风险等级/黑名单状态并落库,支持列表按客商风险筛选
|
||||
-- 口径:内部组织客商默认无风险不落值;筛选值映射 blacklist=黑名单/high=高风险/middle=中风险/low=低风险
|
||||
-- 幂等可重复执行:逐列/逐索引查 information_schema,已存在则跳过
|
||||
|
||||
-- ① 列 hcs_risk_level
|
||||
SET @ddl = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_customer_archive' AND COLUMN_NAME = 'hcs_risk_level') = 0,
|
||||
'ALTER TABLE `blade_customer_archive` ADD COLUMN `hcs_risk_level` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''合规客商风险等级(C101-1,0=低风险/1=中风险/2=高风险)'' AFTER `kingdee_sync_time`',
|
||||
'SELECT 1'));
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ② 列 hcs_black_status
|
||||
SET @ddl = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_customer_archive' AND COLUMN_NAME = 'hcs_black_status') = 0,
|
||||
'ALTER TABLE `blade_customer_archive` ADD COLUMN `hcs_black_status` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''合规客商黑名单状态(C101-1,yes=是/no=否/handing=处理中)'' AFTER `hcs_risk_level`',
|
||||
'SELECT 1'));
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ③ 列 hcs_risk_time
|
||||
SET @ddl = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_customer_archive' AND COLUMN_NAME = 'hcs_risk_time') = 0,
|
||||
'ALTER TABLE `blade_customer_archive` ADD COLUMN `hcs_risk_time` datetime DEFAULT NULL COMMENT ''客商风险最近查询时间(C101-1)'' AFTER `hcs_black_status`',
|
||||
'SELECT 1'));
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ④ 索引 idx_hcs_risk_level
|
||||
SET @ddl = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_customer_archive' AND INDEX_NAME = 'idx_hcs_risk_level') = 0,
|
||||
'ALTER TABLE `blade_customer_archive` ADD INDEX idx_hcs_risk_level (hcs_risk_level)',
|
||||
'SELECT 1'));
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ⑤ 索引 idx_hcs_black_status
|
||||
SET @ddl = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_customer_archive' AND INDEX_NAME = 'idx_hcs_black_status') = 0,
|
||||
'ALTER TABLE `blade_customer_archive` ADD INDEX idx_hcs_black_status (hcs_black_status)',
|
||||
'SELECT 1'));
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ⑥ 列 hcs_black_category / hcs_black_reason(A801-5 金蝶黑名单原始字段:失信类别、列入事由,明细文案由后台组装)
|
||||
SET @ddl = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_customer_archive' AND COLUMN_NAME = 'kingdee_black_category') = 0,
|
||||
'ALTER TABLE `blade_customer_archive` ADD COLUMN `kingdee_black_category` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''金蝶黑名单失信类别(A801-5 awrp_combofield_title,缺失兜底 awrp_combofield)'' AFTER `hcs_risk_time`',
|
||||
'SELECT 1'));
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @ddl = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'blade_customer_archive' AND COLUMN_NAME = 'kingdee_black_reason') = 0,
|
||||
'ALTER TABLE `blade_customer_archive` ADD COLUMN `kingdee_black_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''金蝶黑名单列入事由(A801-5 awrp_textareafield)'' AFTER `kingdee_black_category`',
|
||||
'SELECT 1'));
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
@@ -0,0 +1,89 @@
|
||||
-- 客商风险筛选字典 customer_risk(客商档案列表搜索栏「客商风险」下拉)。
|
||||
-- dict_key=筛选值(与后端列表筛选入参一致:blacklist/high/middle/low),dict_value=展示名称。
|
||||
-- 字典缺失时前端保留固定兜底选项,落库后各环境与前端兜底保持一致;id 由 UUID_SHORT() 动态生成,不写死,幂等可重复执行。
|
||||
|
||||
-- ① 字典父项
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000', 0, 'customer_risk', '-1', '客商风险', 1, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'customer_risk' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ② 子项:黑名单
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'customer_risk' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'customer_risk', 'blacklist', '黑名单', 1, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'customer_risk' AND dict_key = 'blacklist' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ③ 子项:高风险
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'customer_risk' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'customer_risk', 'high', '高风险', 2, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'customer_risk' AND dict_key = 'high' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ④ 子项:中风险
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'customer_risk' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'customer_risk', 'middle', '中风险', 3, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'customer_risk' AND dict_key = 'middle' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ⑤ 子项:低风险
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'customer_risk' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'customer_risk', 'low', '低风险', 4, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'customer_risk' AND dict_key = 'low' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ⑥ 客商风险等级字典 risk_level(C101-1 风险等级翻译,dictKey=等级 0/1/2):父项
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000', 0, 'risk_level', '-1', '客商风险等级', 1, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'risk_level' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ⑦ 子项:低风险(0)
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'risk_level' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'risk_level', '0', '低风险', 1, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'risk_level' AND dict_key = '0' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ⑧ 子项:中风险(1)
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'risk_level' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'risk_level', '1', '中风险', 2, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'risk_level' AND dict_key = '1' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ⑨ 子项:高风险(2)
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT UUID_SHORT(), '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'risk_level' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'risk_level', '2', '高风险', 3, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'risk_level' AND dict_key = '2' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
Reference in New Issue
Block a user