Merge branch 'dev-ui' into dev

This commit is contained in:
wkc
2026-04-16 14:42:01 +08:00
33 changed files with 5262 additions and 15 deletions

View File

@@ -0,0 +1,437 @@
# 账户库管理设计方案
## 1. 背景与目标
当前系统在“信息维护”下已具备员工信息维护、员工亲属关系维护等基础档案能力,但尚未形成独立的“账户库管理”。现有员工表 `ccdi_base_staff` 与员工亲属关系表 `ccdi_staff_fmy_relation` 中均不承载完整账户信息,无法满足后续账户台账维护、手工补录、导入和账户分析展示的需要。
本次设计目标如下:
- 在“信息维护”菜单下新增“账户库管理”
- 支持维护员工本人账户与员工亲属账户
- 账户静态档案与分析结果分表存储
- 页面风格沿用现有维护页交互方式
- 第一版仅考虑当前有效账户分析结果,不保留多版本分析历史
本次明确不做以下事项:
- 不扩展朋友、同事、司机、秘书等非亲属关系
- 不修改“员工亲属关系维护”现有业务命名
- 不增加额外脱敏展示字段
- 不展开后端实现设计
## 2. 设计原则
- 主表只描述“谁持有了什么账户”
- 分析表只描述“该账户的交易画像和风险等级”
- 员工本人账户依附员工表
- 亲属账户依附员工亲属关系表
- 页面录入时允许在一个弹窗中同时维护主表和分析表信息
- 第一版以人工维护为主,分析字段允许手工录入或后续导入覆盖
## 3. 数据模型
### 3.1 关系说明
- 员工主表:`ccdi_base_staff`
- 员工亲属关系表:`ccdi_staff_fmy_relation`
- 账户主表:`ccdi_account_info`
- 账户分析表:`ccdi_account_analysis`
关系约束如下:
- 一个员工可有多个本人账户
- 一个员工亲属关系记录可有多个账户
- 一个账户仅归属于一个员工或一个亲属关系记录
- 一个账户在第一版仅对应一条当前分析记录
### 3.2 归属规则
-`is_self_account = 1` 时:
- `staff_id` 必填
- `relation_id` 为空
-`is_self_account = 0` 时:
- `staff_id` 必填
- `relation_id` 必填
- `relation_id` 对应的亲属记录应属于该 `staff_id`
## 4. 表结构设计
### 4.1 账户主表 `ccdi_account_info`
用途:存储账户静态档案、开户信息、归属关系和生效状态。
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|------|------|
| id | BIGINT | 是 | 自增 | 主键 |
| staff_id | BIGINT | 是 | - | 员工ID对应 `ccdi_base_staff.staff_id` |
| relation_id | BIGINT | 否 | NULL | 亲属关系ID对应 `ccdi_staff_fmy_relation.id` |
| account_no | VARCHAR(200) | 是 | - | 账户号码,按业务要求加密存储 |
| account_type | VARCHAR(30) | 是 | - | `BANK/SECURITIES/PAYMENT/OTHER` |
| account_name | VARCHAR(100) | 是 | - | 账户名称 |
| open_bank | VARCHAR(100) | 是 | - | 开户银行、证券公司或支付平台 |
| bank_code | VARCHAR(20) | 否 | NULL | 金融机构代码 |
| currency | CHAR(3) | 是 | `CNY` | 币种ISO 4217 标准 |
| is_self_account | BOOLEAN | 是 | TRUE | 是否本人账户 |
| status | INT | 是 | 1 | 状态1-有效0-无效 |
| effective_date | DATE | 是 | 当前日期 | 生效日期 |
| invalid_date | DATE | 否 | NULL | 失效日期 |
| data_source | VARCHAR(30) | 是 | `MANUAL` | 数据来源MANUAL、IMPORT、SYNC |
| remark | VARCHAR(500) | 否 | NULL | 备注 |
| create_by | VARCHAR(64) | 是 | - | 创建人 |
| create_time | DATETIME | 是 | 当前时间 | 创建时间 |
| update_by | VARCHAR(64) | 否 | NULL | 更新人 |
| update_time | DATETIME | 否 | 当前时间 | 更新时间 |
说明:
- `relation_id` 为空表示员工本人账户
- `relation_id` 不为空表示员工亲属账户
- 本次不增加账户号码 hash 字段与脱敏展示字段
### 4.2 账户分析表 `ccdi_account_analysis`
用途:存储账户交易画像、金额特征和风险等级。
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|------|------|
| id | BIGINT | 是 | 自增 | 主键 |
| account_id | BIGINT | 是 | - | 账户ID对应 `ccdi_account_info.id` |
| analysis_months | INT | 是 | 6 | 统计月数 |
| stat_start_date | DATE | 否 | NULL | 统计开始日期 |
| stat_end_date | DATE | 否 | NULL | 统计结束日期 |
| avg_month_txn_count | INT | 否 | 0 | 月均交易笔数 |
| avg_month_txn_amount | DECIMAL(18,2) | 否 | 0.00 | 月均交易金额 |
| txn_frequency_level | VARCHAR(20) | 否 | `MEDIUM` | 交易频率LOW、MEDIUM、HIGH |
| debit_single_max_amount | DECIMAL(18,2) | 否 | NULL | 借方单笔交易最高额 |
| credit_single_max_amount | DECIMAL(18,2) | 否 | NULL | 贷方单笔交易最高额 |
| debit_daily_max_amount | DECIMAL(18,2) | 否 | NULL | 借方日累计交易最高额 |
| credit_daily_max_amount | DECIMAL(18,2) | 否 | NULL | 贷方日累计交易最高额 |
| txn_risk_level | VARCHAR(10) | 否 | `MEDIUM` | 交易风险等级 |
| remark | VARCHAR(500) | 否 | NULL | 分析备注 |
| create_by | VARCHAR(64) | 是 | - | 创建人 |
| create_time | DATETIME | 是 | 当前时间 | 创建时间 |
| update_by | VARCHAR(64) | 否 | NULL | 更新人 |
| update_time | DATETIME | 否 | 当前时间 | 更新时间 |
说明:
- 第一版以“一户一条当前分析记录”为目标
- 后续如果需要保留历史分析版本,可新增 `is_latest``analysis_batch_no` 或改造唯一约束
## 5. 索引与约束建议
### 5.1 `ccdi_account_info`
- 主键:`PRIMARY KEY (id)`
- 索引:`idx_staff_id (staff_id)`
- 索引:`idx_relation_id (relation_id)`
- 索引:`idx_account_type (account_type)`
- 索引:`idx_open_bank (open_bank)`
- 索引:`idx_is_self_account (is_self_account)`
- 索引:`idx_status (status)`
### 5.2 `ccdi_account_analysis`
- 主键:`PRIMARY KEY (id)`
- 唯一索引:`uk_account_id (account_id)`
- 索引:`idx_txn_risk_level (txn_risk_level)`
### 5.3 校验规则
- `invalid_date` 不得早于 `effective_date`
- `analysis_months` 应大于 0
- 金额字段不得为负数
- 若账户为本人账户,则不允许选择亲属
- 若账户为亲属账户,则必须选定亲属关系记录
## 6. DDL 草案
```sql
CREATE TABLE IF NOT EXISTS `ccdi_account_info` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`staff_id` BIGINT(20) NOT NULL COMMENT '员工ID',
`relation_id` BIGINT(20) DEFAULT NULL COMMENT '员工亲属关系ID员工本人账户为空',
`account_no` VARCHAR(200) NOT NULL COMMENT '账户号码(加密存储)',
`account_type` VARCHAR(30) NOT NULL COMMENT '账户类型BANK/SECURITIES/PAYMENT/OTHER',
`account_name` VARCHAR(100) NOT NULL COMMENT '账户名称',
`open_bank` VARCHAR(100) NOT NULL COMMENT '开户银行/证券公司/支付平台',
`bank_code` VARCHAR(20) DEFAULT NULL COMMENT '金融机构代码',
`currency` CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT '币种',
`is_self_account` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否本人账户1-是 0-否',
`status` INT(11) NOT NULL DEFAULT 1 COMMENT '状态1-有效 0-无效',
`effective_date` DATE NOT NULL COMMENT '生效日期',
`invalid_date` DATE DEFAULT NULL COMMENT '失效日期',
`data_source` VARCHAR(30) NOT NULL DEFAULT 'MANUAL' COMMENT '数据来源',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(64) NOT NULL COMMENT '创建人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_staff_id` (`staff_id`),
KEY `idx_relation_id` (`relation_id`),
KEY `idx_account_type` (`account_type`),
KEY `idx_open_bank` (`open_bank`),
KEY `idx_is_self_account` (`is_self_account`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账户主表';
```
```sql
CREATE TABLE IF NOT EXISTS `ccdi_account_analysis` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`account_id` BIGINT(20) NOT NULL COMMENT '账户ID',
`analysis_months` INT(11) NOT NULL DEFAULT 6 COMMENT '统计月数',
`stat_start_date` DATE DEFAULT NULL COMMENT '统计开始日期',
`stat_end_date` DATE DEFAULT NULL COMMENT '统计结束日期',
`avg_month_txn_count` INT(11) DEFAULT 0 COMMENT '月均交易笔数',
`avg_month_txn_amount` DECIMAL(18,2) DEFAULT 0.00 COMMENT '月均交易金额',
`txn_frequency_level` VARCHAR(20) DEFAULT 'MEDIUM' COMMENT '交易频率等级',
`debit_single_max_amount` DECIMAL(18,2) DEFAULT NULL COMMENT '借方单笔最高额',
`credit_single_max_amount` DECIMAL(18,2) DEFAULT NULL COMMENT '贷方单笔最高额',
`debit_daily_max_amount` DECIMAL(18,2) DEFAULT NULL COMMENT '借方日累计最高额',
`credit_daily_max_amount` DECIMAL(18,2) DEFAULT NULL COMMENT '贷方日累计最高额',
`txn_risk_level` VARCHAR(10) DEFAULT 'MEDIUM' COMMENT '交易风险等级',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '分析备注',
`create_by` VARCHAR(64) NOT NULL COMMENT '创建人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_account_id` (`account_id`),
KEY `idx_txn_risk_level` (`txn_risk_level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账户分析表';
```
## 7. 页面原型设计
### 7.1 菜单位置
新增菜单:
- 父级:信息维护
- 名称:账户库管理
- 建议顺序:放在“员工亲属关系维护”后、“招聘信息管理”前
### 7.2 列表页
#### 查询区
- 员工姓名
- 归属类型:本人 / 亲属
- 关系类型
- 关系人姓名
- 账户类型
- 开户机构
- 风险等级
- 状态
#### 操作区
- 新增
- 导入
- 导出
#### 表格字段
- 员工姓名
- 归属类型
- 关系类型
- 关系人姓名
- 账户号码
- 账户名称
- 账户类型
- 开户机构
- 币种
- 是否本人账户
- 月均交易笔数
- 月均交易金额
- 交易频率等级
- 交易风险等级
- 生效日期
- 状态
- 创建时间
- 操作
#### 列表页低保真线框
```text
+----------------------------------------------------------------------------------+
| 账户库管理 |
+----------------------------------------------------------------------------------+
| 员工姓名 [________] 归属类型 [本人/亲属] 关系类型 [____] 关系人姓名 [________] |
| 账户类型 [____] 开户机构 [________] 风险等级 [____] 状态 [有效/无效] |
| [搜索] [重置] |
+----------------------------------------------------------------------------------+
| [新增] [导入] [导出] |
+----------------------------------------------------------------------------------+
| 员工姓名 | 归属类型 | 关系类型 | 关系人姓名 | 账号 | 账户名称 | 账户类型 | ... |
|----------------------------------------------------------------------------------|
| 张三 | 本人 | - | - | 6222 | 工资卡 | BANK | ... |
| 张三 | 亲属 | 配偶 | 李四 | 6217 | 储蓄卡 | BANK | ... |
| ... |
+----------------------------------------------------------------------------------+
| 分页 |
+----------------------------------------------------------------------------------+
```
### 7.3 新增/编辑弹窗
#### 一、归属信息
- 归属类型
- 员工选择
- 关系人选择
- 关系类型
- 是否本人账户
交互规则:
- 归属类型为“本人”时,关系人选择和关系类型隐藏
- 归属类型为“亲属”时,先选员工,再加载该员工亲属列表
- 是否本人账户根据归属类型自动带出,只读显示
#### 二、账户信息
- 账户号码
- 账户类型
- 账户名称
- 开户机构
- 银行代码
- 币种
- 生效日期
- 失效日期
- 状态
- 备注
#### 三、分析信息
- 统计月数
- 统计开始日期
- 统计结束日期
- 月均交易笔数
- 月均交易金额
- 交易频率等级
- 借方单笔最高额
- 贷方单笔最高额
- 借方日累计最高额
- 贷方日累计最高额
- 交易风险等级
- 分析备注
#### 弹窗低保真线框
```text
+--------------------------------------------------------------+
| 新增账户 [X] |
+--------------------------------------------------------------+
| 一、归属信息 |
| 归属类型 [本人/亲属] |
| 员工 [请选择员工____________________] |
| 关系人 [请选择关系人__________________] |
| 关系类型 [自动带出______________________] |
| 是否本人 [是/否,只读] |
+--------------------------------------------------------------+
| 二、账户信息 |
| 账户号码 [____________________________] |
| 账户类型 [BANK/SECURITIES/PAYMENT/OTHER] |
| 账户名称 [____________________________] |
| 开户机构 [____________________________] |
| 银行代码 [________________] 币种 [CNY] |
| 生效日期 [yyyy-MM-dd] 失效日期 [yyyy-MM-dd] |
| 状态 [有效/无效] |
| 备注 [____________________________________________] |
+--------------------------------------------------------------+
| 三、分析信息 |
| 统计月数 [6] |
| 开始日期 [yyyy-MM-dd] 结束日期 [yyyy-MM-dd] |
| 月均笔数 [____] 月均金额 [__________] |
| 频率等级 [LOW/MEDIUM/HIGH] 风险等级 [LOW/MEDIUM/HIGH] |
| 借方单笔最高 [________] 贷方单笔最高 [________] |
| 借方日累计最高 [________] 贷方日累计最高 [________] |
| 分析备注 [____________________________________________] |
+--------------------------------------------------------------+
| [取消] [确定] |
+--------------------------------------------------------------+
```
### 7.4 详情弹窗
详情页建议与新增/编辑弹窗结构一致,全部字段只读展示,避免维护两套信息布局。
## 8. 导入模板建议
建议导入模板字段如下:
- 员工柜员号
- 员工姓名
- 归属类型
- 关系人姓名
- 关系类型
- 账户号码
- 账户类型
- 账户名称
- 开户机构
- 银行代码
- 币种
- 生效日期
- 失效日期
- 统计月数
- 月均交易笔数
- 月均交易金额
- 交易频率等级
- 借方单笔最高额
- 贷方单笔最高额
- 借方日累计最高额
- 贷方日累计最高额
- 交易风险等级
- 备注
导入校验建议:
- 本人账户时,不允许填写关系人姓名
- 亲属账户时,关系人姓名不能为空
- 若员工不存在,则导入失败
- 若亲属不存在,则导入失败
## 9. 菜单 SQL 草案
```sql
SET @parent_menu_id = (
SELECT menu_id
FROM sys_menu
WHERE menu_name = '信息维护' AND parent_id = 0
LIMIT 1
);
INSERT INTO sys_menu (
menu_name, parent_id, order_num, path, component, is_frame, is_cache,
menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark
) VALUES (
'账户库管理', @parent_menu_id, 5, 'accountInfo', 'ccdiAccountInfo/index', 1, 0,
'C', '0', '0', 'ccdi:accountInfo:list', 'money', 'admin', NOW(), '', NULL, '账户库管理菜单'
);
SET @menu_id = LAST_INSERT_ID();
INSERT INTO sys_menu (
menu_name, parent_id, order_num, path, component, is_frame, is_cache,
menu_type, visible, status, perms, icon, create_by, create_time, remark
) VALUES
('账户查询', @menu_id, 1, '', '', 1, 0, 'F', '0', '0', 'ccdi:accountInfo:query', '#', 'admin', NOW(), ''),
('账户新增', @menu_id, 2, '', '', 1, 0, 'F', '0', '0', 'ccdi:accountInfo:add', '#', 'admin', NOW(), ''),
('账户修改', @menu_id, 3, '', '', 1, 0, 'F', '0', '0', 'ccdi:accountInfo:edit', '#', 'admin', NOW(), ''),
('账户删除', @menu_id, 4, '', '', 1, 0, 'F', '0', '0', 'ccdi:accountInfo:remove', '#', 'admin', NOW(), ''),
('账户导入', @menu_id, 5, '', '', 1, 0, 'F', '0', '0', 'ccdi:accountInfo:import', '#', 'admin', NOW(), ''),
('账户导出', @menu_id, 6, '', '', 1, 0, 'F', '0', '0', 'ccdi:accountInfo:export', '#', 'admin', NOW(), '');
```
## 10. 后续落地建议
如果本方案确认,可按以下顺序实施:
1. 先建两张表并补菜单 SQL
2. 再补前端列表页与弹窗原型
3. 最后对接后端接口与导入导出
当前方案适合作为第一版基础模型,后续若需要接入自动打标或保留历史分析结果,可在 `ccdi_account_analysis` 上继续扩展,而不破坏 `ccdi_account_info` 主档结构。

View File

@@ -0,0 +1,96 @@
# 账户库管理交接记录
日期2026-04-10
## 当前状态
- 前端原型页:`ruoyi-ui/src/views/ccdiAccountInfoPrototype/index.vue`
- 本地预览路由:`/ccdiAccountInfo`
- 原型页入口路由:`/prototype/account-library`
- 当前截图:`docs/plans/fullstack/account-library-preview-2026-04-10.png`
- 真实数据库:`ccdi.ccdi_account_info``ccdi.ccdi_account_result`
- 当前实现仍是前端静态原型,尚未接真实后端接口。
## 本次已落地
1. `ccdi_account_info` 已新增字段:
- 字段名:`bank_scope`
- 类型:`VARCHAR(20) NOT NULL DEFAULT 'INTERNAL'`
- 含义:`INTERNAL-行内EXTERNAL-行外`
- 当前已有 21 条账户数据均为 `INTERNAL`
2. `ccdi_account_result.trans_risk_level` 默认值已改为 `LOW`
3. 前端原型已恢复“账户范围”:
- 查询区支持按“行内/行外”筛选
- 表格展示“账户范围”
- 新增/编辑弹窗可选择“账户范围”
- 行内账户的分析信息默认只展示,语义上由 T+1 自动同步维护
- 行外账户的分析信息允许手工维护
4. 前端原型兼容当前数据库 `account_type = DEBIT` 的老数据:
- `DEBIT` 展示为“借记卡账户”
- 仍保留 `BANK``SECURITIES``PAYMENT``OTHER` 作为后续扩展选项
5. 关系类型口径已按员工亲属关系统一为:
- 配偶、父亲、母亲、子女、兄弟姐妹、朋友、同事、其他
## 字段对应
### `ccdi_account_info`
| 页面字段 | 前端字段 | 数据库字段 | 说明 |
| --- | --- | --- | --- |
| 账户号码 | `accountNo` | `account_no` | 账号 |
| 账户类型 | `accountType` | `account_type` | 当前库里有 `DEBIT` |
| 账户范围 | `bankScope` | `bank_scope` | `INTERNAL` 行内,`EXTERNAL` 行外 |
| 账户姓名 | `accountName` | `account_name` | 账户户名/所属姓名 |
| 所属人类型 | `ownerType` | `owner_type` | 员工、员工关系人、外部人员 |
| 所属人标识 | `staffId` / `relationId` | `owner_id` | 后续接口需按类型取值 |
| 开户机构 | `openBank` | `bank` | 开户行/机构 |
| 银行代码 | `bankCode` | `bank_code` | 机构代码 |
| 币种 | `currency` | `currency` | 默认 `CNY` |
| 状态 | `status` | `status` | `1` 正常,`2` 已销户 |
| 生效日期 | `effectiveDate` | `effective_date` | 开户/生效日期 |
| 失效日期 | `invalidDate` | `invalid_date` | 销户/失效日期 |
### `ccdi_account_result`
| 页面字段 | 前端字段 | 数据库字段 | 说明 |
| --- | --- | --- | --- |
| 是否实控账户 | `isActualControl` | `is_self_account` | `1` 是,`0` 否 |
| 月均交易笔数 | `avgMonthTxnCount` | `monthly_avg_trans_count` | 交易画像 |
| 月均交易金额 | `avgMonthTxnAmount` | `monthly_avg_trans_amount` | 交易画像 |
| 频率等级 | `txnFrequencyLevel` | `trans_freq_type` | `LOW``MEDIUM``HIGH` |
| 借方单笔最高额 | `debitSingleMaxAmount` | `dr_max_single_amount` | 交易画像 |
| 贷方单笔最高额 | `creditSingleMaxAmount` | `cr_max_single_amount` | 交易画像 |
| 借方日累计最高额 | `debitDailyMaxAmount` | `dr_max_daily_amount` | 交易画像 |
| 贷方日累计最高额 | `creditDailyMaxAmount` | `cr_max_daily_amount` | 交易画像 |
| 风险等级 | `txnRiskLevel` | `trans_risk_level` | 默认 `LOW` |
## 后端同步判断
仓库里当前没有找到已成型的 `CcdiAccountInfo` 后端 Controller、Entity、Mapper、Service 或前端 API 文件,所以本次没有强行新建完整后端 CRUD。
后续如果正式接后端接口,需要同步增加:
- Entity/DTO/VO 字段:`bankScope`
- Mapper XML 或 MyBatis Plus 查询条件:支持 `bank_scope`
- 新增/编辑接口:写入 `bank_scope`
- 列表接口:返回 `bank_scope`
- 行内账户:分析结果从同步任务/T+1结果表维护
- 行外账户:允许页面写入或更新 `ccdi_account_result`
## 本地启动说明
前端可以在 `ruoyi-ui` 下启动:
```bash
npm run dev
```
当前环境里没有检测到 `java``mvn``mvnw`,所以这台机器不能直接用命令启动后端。后端正常需要 Java 21 和 Maven然后启动端口按配置是 `62318`
## 明天切换对话可以这样说
继续做 `C:\Users\20696\Desktop\初核\ccdi` 这个仓库的“账户库管理”。请先阅读 `docs/plans/fullstack/2026-04-10-account-library-handoff.md`,然后检查以下本地改动:前端原型 `ruoyi-ui/src/views/ccdiAccountInfoPrototype/index.vue`、路由 `ruoyi-ui/src/router/index.js`、白名单 `ruoyi-ui/src/permission.js`、关系枚举 `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/enums/RelationType.java`、SQL 脚本 `sql/migration/2026-04-10-split-ccdi-account-info.sql`。数据库 `ccdi_account_info` 已新增 `bank_scope``ccdi_account_result.trans_risk_level` 默认值已是 `LOW`。下一步优先判断是否要做真实后端 CRUD/API 联调,而不是继续只改静态原型。

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 KiB

View File

@@ -0,0 +1,219 @@
# 账户库管理验收清单
## 1. 验收目标
确认“账户库管理”页面已满足本轮最小闭环范围,包含:
- 菜单可见
- 页面可打开
- 列表查询正常
- 新增、编辑、删除正常
- 导入、导出正常
- 导入模板可下载
- 字段口径与数据库一致
- 页面样式与其他“信息维护”页面保持一致
## 2. 验收前提
验收前需先确认:
- 前端服务已启动
- 后端服务已启动
- Redis 可连接
- 数据库使用开发库 `116.62.17.81:3307/ccdi`
- 当前账号具备“账户库管理”菜单与按钮权限
建议验收入口:
- 菜单入口:`信息维护 -> 账户库管理`
- 路由入口:`/maintain/accountInfo`
## 3. 基础可用性验收
### 3.1 菜单与路由
- [ ] 左侧“信息维护”下可见“账户库管理”
- [ ] 点击“账户库管理”可正常进入页面
- [ ] 页面打开后无白屏、无 404、无 `No static resource`
- [ ] 页面刷新后仍可正常进入
### 3.2 页面样式
- [ ] 页面背景、卡片、表头颜色与其他“信息维护”页面一致
- [ ] 页面顶部不再显示“信息维护 / 账户库管理”说明卡片
- [ ] 搜索区、工具栏、表格、分页布局正常
- [ ] 右上角搜索折叠工具栏可正常使用
## 4. 查询列表验收
### 4.1 列表展示
- [ ] 页面默认可加载账户列表
- [ ] 表格列显示完整,无错位、无遮挡
- [ ] 列表包含“证件号”列
- [ ] “所属人类型”列能正确显示:员工、员工关系人、中介、外部人员
- [ ] “账户类型”列能正确显示:银行账户、证券账户、支付账户、其他
- [ ] “账户范围”列能正确显示:行内、行外
- [ ] 风险等级、频率等级、状态色块显示正常
### 4.2 查询条件
- [ ] “所属人类型”筛选在最前面
- [ ] 可按员工姓名查询
- [ ] 可按账户范围查询
- [ ] 可按关系类型查询
- [ ] 可按账户姓名查询
- [ ] 可按账户类型查询
- [ ] 可按是否实控查询
- [ ] 可按风险等级查询
- [ ] 可按状态查询
- [ ] “搜索”后结果正确
- [ ] “重置”后条件恢复默认
## 5. 新增验收
### 5.1 新增弹窗
- [ ] 点击“新增”可打开弹窗
- [ ] 弹窗内“所属人类型”可选:员工、员工关系人、中介、外部人员
- [ ] 默认新增账户范围为“行外”
- [ ] 账户类型下拉仅有:
- [ ] `BANK`
- [ ] `SECURITIES`
- [ ] `PAYMENT`
- [ ] `OTHER`
### 5.2 所属人逻辑
- [ ] 选择“员工”时,可选择员工姓名
- [ ] 选择“员工”后可自动带出证件号
- [ ] 选择“员工关系人”时,可先选员工,再选关系人
- [ ] 选择“员工关系人”后可自动带出关系类型、关系人证件号
- [ ] 选择“中介”时,可手工录入中介名称和证件号
- [ ] 选择“外部人员”时,可手工录入姓名和证件号
### 5.3 保存验证
- [ ] 必填项为空时有校验提示
- [ ] 保存成功后列表可看到新增数据
- [ ] 刷新页面后新增数据仍存在
## 6. 编辑验收
- [ ] 点击“编辑”可打开已有记录
- [ ] 已有字段可正确回显
- [ ] 可修改基础信息并保存成功
- [ ] 保存后列表显示更新内容
- [ ] 刷新页面后修改结果仍存在
## 7. 删除验收
- [ ] 点击“删除”有确认提示
- [ ] 确认删除后提示成功
- [ ] 删除后列表不再显示该数据
- [ ] 刷新页面后该数据仍已删除
## 8. 详情验收
- [ ] 点击“详情”可打开只读弹窗
- [ ] 基础信息、归属信息、分析信息都可查看
- [ ] 详情弹窗内字段与列表、数据库保持一致
## 9. 批量维护验收
### 9.1 工具栏能力
- [ ] 页面工具栏包含“导入”“导出”按钮
- [ ] 按钮风格、位置与其他“信息维护”页面一致
- [ ] 权限控制正常,无权限时按钮不显示
### 9.2 导入功能
- [ ] 点击“导入”可打开上传弹窗
- [ ] 点击“下载模板”可下载 Excel 模板
- [ ] 上传合法模板后可返回导入结果
- [ ] 导入成功后页面列表可看到更新结果
### 9.3 导出功能
- [ ] 点击“导出”可按当前筛选条件导出 Excel
- [ ] 导出文件可正常打开
- [ ] 导出列与页面口径一致
## 10. 数据口径验收
### 9.1 页面与数据库字段映射
- [ ] `ccdi_account_info.account_id -> 页面主键 id`
- [ ] `ccdi_account_info.owner_type -> 所属人类型`
- [ ] `ccdi_account_info.owner_id -> 证件号`
- [ ] `ccdi_account_info.account_no -> 账户号码`
- [ ] `ccdi_account_info.account_type -> 账户类型`
- [ ] `ccdi_account_info.bank_scope -> 账户范围`
- [ ] `ccdi_account_info.account_name -> 账户姓名`
- [ ] `ccdi_account_info.bank -> 开户机构`
- [ ] `ccdi_account_info.bank_code -> 银行代码`
- [ ] `ccdi_account_info.currency -> 币种`
- [ ] `ccdi_account_info.status -> 状态`
- [ ] `ccdi_account_info.effective_date -> 生效日期`
- [ ] `ccdi_account_info.invalid_date -> 失效日期`
- [ ] `ccdi_account_result.is_self_account -> 是否实控账户`
- [ ] `ccdi_account_result.monthly_avg_trans_count -> 月均交易笔数`
- [ ] `ccdi_account_result.monthly_avg_trans_amount -> 月均交易金额`
- [ ] `ccdi_account_result.trans_freq_type -> 频率等级`
- [ ] `ccdi_account_result.trans_risk_level -> 风险等级`
### 9.2 当前口径确认
- [ ] `owner_id` 口径为“证件号”
- [ ] `owner_type` 仅有:`EMPLOYEE / RELATION / INTERMEDIARY / EXTERNAL`
- [ ] `account_type` 仅有:`BANK / SECURITIES / PAYMENT / OTHER`
- [ ] 行内账户分析信息只读
- [ ] 行外账户分析信息支持人工维护
## 11. 测试数据验收
建议至少核对以下场景各 1 条:
- [ ] 员工 + 银行账户 + 行外
- [ ] 员工关系人 + 证券账户 + 行外
- [ ] 中介 + 支付账户 + 行外
- [ ] 外部人员 + 其他账户 + 行外
建议重点核对:
- [ ] 中介支付账户账号表现为手机号样式
- [ ] 证件号列显示正确
- [ ] 不存在本轮新增测试数据被重复插入两次的情况
## 12. 异常与兼容性验收
- [ ] 后端不可用时,前端错误提示可理解
- [ ] 页面没有明显控制台报错
- [ ] 分页切换正常
- [ ] 搜索后再点详情/编辑不报错
- [ ] 移动端窄屏下页面不出现严重错位
## 13. 本轮验收结论
### 12.1 验收结果
- [ ] 通过
- [ ] 有问题需整改
### 12.2 问题记录
| 序号 | 问题描述 | 严重程度 | 是否已修复 | 备注 |
|---|---|---|---|---|
| 1 | | | | |
| 2 | | | | |
| 3 | | | | |
### 12.3 验收签字
| 角色 | 姓名 | 日期 | 结果 |
|---|---|---|---|
| 业务验收 | | | |
| 产品/需求 | | | |
| 开发确认 | | | |
| 测试确认 | | | |

View File

@@ -0,0 +1,119 @@
# 账户库管理验收记录
## 验收时间
- 日期2026-04-14
- 验收方式:代码检查 + 数据库核对 + 页面在线验收 + 真实接口联调
## 验收结论
本轮“账户库管理”页面已完成最小闭环与批量维护能力验收,字段口径、菜单挂载、批量导入导出、测试数据、页面收口均已完成,正式页联调通过。
## 已通过项
### 1. 页面与样式
- 已删除顶部“信息维护 / 账户库管理”说明卡片
- 页面背景、主卡片、表头样式已收回到信息维护页常见灰白体系
- 已补 `right-toolbar`
- 搜索区域支持显隐
- 工具栏、操作列风格已向若依现有页面对齐
- 页面工具栏已补“导入”“导出”按钮,风格与中介库等页面保持一致
### 2. 字段口径
- `owner_id` 已按“证件号”口径处理
- `owner_type` 仅支持:
- `EMPLOYEE`
- `RELATION`
- `INTERMEDIARY`
- `EXTERNAL`
- `account_type` 仅支持:
- `BANK`
- `SECURITIES`
- `PAYMENT`
- `OTHER`
- 新增默认账户范围为“行外”
- 列表已展示“证件号”列
- 所属人类型筛选已移动到最前面
### 3. 批量维护能力
- 已补导入模板下载接口:`POST /ccdi/accountInfo/importTemplate`
- 已补导入接口:`POST /ccdi/accountInfo/importData`
- 已补导出接口:`POST /ccdi/accountInfo/export`
- 已补按钮权限:
- `ccdi:accountInfo:import`
- `ccdi:accountInfo:export`
- 已补管理员角色菜单授权
本次在线验收结果:
- 导入模板下载成功,生成文件:`logs/account-info-import-template-check.xlsx`
- 导出成功,生成文件:`logs/account-info-export-check.xlsx`
- 合法导入样例成功,结果为“共 1 条,成功 1 条,失败 0 条”
- 非法导入样例会在导入结果中提示失败数量,失败原因校验正常
### 4. 数据与测试样例
已核对本轮补充的 4 条测试数据,且未重复插入:
| account_id | owner_type | owner_id | account_no | account_type | bank_scope |
|---|---|---|---|---|---|
| 30 | RELATION | 330101199104010101 | ZQ330101199104010101 | SECURITIES | EXTERNAL |
| 31 | INTERMEDIARY | 330101197901010055 | 13700000035 | PAYMENT | EXTERNAL |
| 32 | EXTERNAL | 91330100EXT20260413 | wx-ext-20260413-001 | OTHER | EXTERNAL |
| 33 | EMPLOYEE | 330101199001010001 | 622202440000010001 | BANK | EXTERNAL |
补充说明:
- `account_no` 维度未发现本轮测试数据重复插入
- 页面中“看起来重复”的旧数据,主要来自历史库里原本存在的同人多卡记录
### 5. 菜单与权限
- 已补菜单 SQL`sql/migration/2026-04-13-add-ccdi-account-info-menu.sql`
- 前端已补按钮权限:
- `ccdi:accountInfo:add`
- `ccdi:accountInfo:edit`
- `ccdi:accountInfo:remove`
- `ccdi:accountInfo:import`
- `ccdi:accountInfo:export`
### 6. 真实联调结果
本次已在正式页完成真实联调,结果如下:
- `/ccdi/accountInfo/list` 可正常返回真实库数据
- 详情接口可用
- 新增接口可用
- 编辑接口可用
- 删除接口可用
- 导入模板接口可用
- 导入接口可用
- 导出接口可用
- `ccdi_account_info``ccdi_account_result` 联表映射正确
## 当前可查看页面
当前正式页已可访问:
- `http://localhost/maintain/accountInfo`
说明:
- 此地址为“真前端 + 真后端 + 真数据库”联调页
- 页面当前显示的账户数据为开发库真实数据
- 可继续用于业务验收
## 最终判断
- 页面功能验收:通过
- 数据口径验收:通过
- 批量维护验收:通过
- 真实联调环境验收:通过
## 建议下一步
1. 由业务侧继续在线验收页面与数据口径
2. 如后续确认需要,再继续补导入模板说明或批量校验规则优化