修复记录
This commit is contained in:
BIN
assets/异常账户.xlsx
Normal file
BIN
assets/异常账户.xlsx
Normal file
Binary file not shown.
@@ -21,6 +21,7 @@ services:
|
||||
context: .
|
||||
dockerfile: docker/mock/Dockerfile
|
||||
container_name: ccdi-lsfx-mock
|
||||
command: ["python", "main.py", "--rule-hit-mode", "subset"]
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- backend
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# NAS 部署 lsfx-mock-server subset 启动参数实施记录
|
||||
|
||||
## 变更目的
|
||||
|
||||
- 将 NAS 部署环境中的 `lsfx-mock-server` 启动方式显式固定为 `subset` 模式,避免容器启动时仅依赖应用默认值。
|
||||
|
||||
## 修改内容
|
||||
|
||||
- 修改根目录 `docker-compose.yml`
|
||||
- 在 `lsfx-mock-server` 服务上新增启动命令:
|
||||
- `python main.py --rule-hit-mode subset`
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 仅影响 NAS 部署链路使用的根目录 `docker-compose.yml`
|
||||
- 不修改 `lsfx-mock-server` 本地开发脚本
|
||||
- 不修改主系统前后端业务逻辑
|
||||
|
||||
## 核验方式
|
||||
|
||||
- 执行 `docker compose config`,确认渲染后的 `lsfx-mock-server` 服务命令包含 `--rule-hit-mode subset`
|
||||
@@ -0,0 +1,31 @@
|
||||
# 结果总览模型预警次数统计四列布局前端实施记录
|
||||
|
||||
## 本次改动
|
||||
|
||||
- 调整 [RiskModelSection.vue](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/src/views/ccdiProject/components/detail/RiskModelSection.vue) 中 `模型预警次数统计` 卡片区的桌面端栅格布局。
|
||||
- 将 `.model-card-grid` 的桌面端列数由 `repeat(5, minmax(0, 1fr))` 调整为 `repeat(4, minmax(0, 1fr))`,使桌面端固定每行 4 张卡片。
|
||||
- 保留现有响应式断点不变:
|
||||
- `1200px` 以下 2 列
|
||||
- `768px` 以下 1 列
|
||||
- 更新 [preliminary-check-model-card-grid.test.js](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/tests/unit/preliminary-check-model-card-grid.test.js) 断言,防止后续回退到 5 列。
|
||||
|
||||
## 验证结果
|
||||
|
||||
执行命令:
|
||||
|
||||
```bash
|
||||
cd ruoyi-ui
|
||||
node tests/unit/preliminary-check-model-card-grid.test.js
|
||||
npm run build:prod
|
||||
```
|
||||
|
||||
执行结果:
|
||||
|
||||
- 静态测试通过
|
||||
- 生产构建通过
|
||||
- 构建过程中仅有仓库原有体积告警,没有新增编译错误
|
||||
|
||||
## 补充说明
|
||||
|
||||
- 本次仅调整桌面端卡片区排版,不改动模型卡片数据、联动筛选和人员列表逻辑。
|
||||
- 本轮未启动前端开发服务进行手工联调,因此不存在新增前端进程需要关闭的情况。
|
||||
@@ -0,0 +1,21 @@
|
||||
# 左侧菜单宽度调整为 240px 前端实施记录
|
||||
|
||||
## 本次改动
|
||||
|
||||
- 调整 [variables.scss](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/src/assets/styles/variables.scss) 中全局侧栏宽度变量 `$base-sidebar-width`,将左侧菜单宽度从 `200px` 调整为 `240px`。
|
||||
- 保持现有侧栏展开、折叠、移动端抽屉和固定头部联动逻辑不变,由现有布局样式继续复用同一宽度变量。
|
||||
|
||||
## 实现方式
|
||||
|
||||
- 直接修改全局样式变量 `$base-sidebar-width`,让 [sidebar.scss](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/src/assets/styles/sidebar.scss) 和 [layout/index.vue](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/src/layout/index.vue) 中依赖该变量的侧栏宽度、主内容区偏移量、固定头部宽度同步生效。
|
||||
- 不额外新增局部覆盖样式,避免出现展开态、折叠态和移动端宽度不一致的问题。
|
||||
|
||||
## 验证情况
|
||||
|
||||
- 执行 `cd ruoyi-ui && npm run build:prod`,生产构建通过。
|
||||
- 构建过程中仅出现仓库原有的静态资源体积告警,没有新增编译错误或构建失败。
|
||||
|
||||
## 边界说明
|
||||
|
||||
- 本次仅调整左侧菜单展示宽度,不改动菜单数据、路由、权限、交互行为和页面内容布局逻辑。
|
||||
- 本轮未启动前端开发服务进行手工联调,因此不存在新增前端进程需要关闭的情况。
|
||||
@@ -0,0 +1,155 @@
|
||||
# 异常账户标签识别联调验证记录
|
||||
|
||||
## 1. 验证目标
|
||||
|
||||
- 验证异常账户模型在真实数据库中可稳定命中
|
||||
- 验证页面展示结果与数据库、后端聚合结果一致
|
||||
|
||||
## 2. 关联文档
|
||||
|
||||
- 后端实施计划:`docs/plans/backend/2026-03-31-abnormal-account-bank-tag-backend-implementation-plan.md`
|
||||
- 前端实施计划:`docs/plans/frontend/2026-03-31-abnormal-account-bank-tag-frontend-implementation-plan.md`
|
||||
|
||||
## 3. 验证环境
|
||||
|
||||
- 验证日期:2026-03-31
|
||||
- 后端地址:`http://127.0.0.1:62318`
|
||||
- 前端地址:`http://127.0.0.1:1026`
|
||||
- 数据库连接:以 `ruoyi-admin/src/main/resources/application-dev.yml` 为准
|
||||
|
||||
说明:
|
||||
|
||||
- MySQL MCP 当前连接的库与应用实际使用库不一致,本次最终 SQL 校验统一使用项目配置文件解析出的真实数据库连接执行,避免出现“页面有数据、MCP 无数据”的误判。
|
||||
|
||||
## 4. 数据准备
|
||||
|
||||
执行以下脚本补齐规则元数据与最小测试样本:
|
||||
|
||||
```bash
|
||||
bin/mysql_utf8_exec.sh sql/migration/2026-03-31-create-ccdi-account-info-and-abnormal-account-rules.sql
|
||||
bin/mysql_utf8_exec.sh sql/migration/2026-03-31-add-abnormal-account-rule-test-data.sql
|
||||
```
|
||||
|
||||
补齐后确认以下样本存在:
|
||||
|
||||
- 项目:`90331 / 异常账户规则测试项目`
|
||||
- 员工 A:`330101199001010001`
|
||||
- 员工 B:`330101199001010002`
|
||||
- 员工 C:`330101199001010003`
|
||||
- 员工 D:`330101199001010004`
|
||||
- 账户样本:4 条
|
||||
- 流水样本:7 条
|
||||
|
||||
## 5. SQL 校验结果
|
||||
|
||||
### 5.1 规则元数据
|
||||
|
||||
- `ABNORMAL_ACCOUNT / SUDDEN_ACCOUNT_CLOSURE / OBJECT / HIGH`
|
||||
- `ABNORMAL_ACCOUNT / DORMANT_ACCOUNT_LARGE_ACTIVATION / OBJECT / HIGH`
|
||||
|
||||
### 5.2 原始规则 SQL 命中结果
|
||||
|
||||
- `SUDDEN_ACCOUNT_CLOSURE`
|
||||
- 命中员工:`330101199001010001`
|
||||
- 账户:`6222000000000001`
|
||||
- 销户日期:`2026-03-20`
|
||||
- 销户前最后交易日:`2026-03-18`
|
||||
- 窗口累计交易金额:`180000.00`
|
||||
- 单笔最大金额:`70000.00`
|
||||
|
||||
- `DORMANT_ACCOUNT_LARGE_ACTIVATION`
|
||||
- 命中员工:`330101199001010002`
|
||||
- 账户:`6222000000000002`
|
||||
- 开户日期:`2025-01-01`
|
||||
- 首次交易日期:`2025-08-01`
|
||||
- 沉睡月数:`7`
|
||||
- 启用后累计交易金额:`550000.00`
|
||||
- 单笔最大金额:`300000.00`
|
||||
|
||||
结论:
|
||||
|
||||
- 仅员工 A 命中 `突然销户`
|
||||
- 仅员工 B 命中 `休眠账户大额启用`
|
||||
- 员工 C、员工 D 未误命中
|
||||
|
||||
## 6. 后端接口与落库验证
|
||||
|
||||
### 6.1 手动重算
|
||||
|
||||
调用:
|
||||
|
||||
```bash
|
||||
POST /login/test
|
||||
POST /ccdi/project/tags/rebuild
|
||||
```
|
||||
|
||||
入参:
|
||||
|
||||
```json
|
||||
{
|
||||
"projectId": 90331,
|
||||
"modelCode": "ABNORMAL_ACCOUNT"
|
||||
}
|
||||
```
|
||||
|
||||
返回:
|
||||
|
||||
- `code = 200`
|
||||
- `msg = 标签重算任务已提交`
|
||||
|
||||
### 6.2 任务与结果表
|
||||
|
||||
- 最新任务:`ccdi_bank_tag_task.id = 67`
|
||||
- 任务状态:`SUCCESS`
|
||||
- 命中数:`2`
|
||||
- `ccdi_bank_statement_tag_result` 中 `ABNORMAL_ACCOUNT` 结果数:`2`
|
||||
- `ccdi_project_overview_employee_result` 聚合结果数:`2`
|
||||
|
||||
### 6.3 总览接口返回
|
||||
|
||||
- 风险模型卡片返回:`异常账户 / warningCount=2 / peopleCount=2`
|
||||
- 风险人员总览返回:
|
||||
- 测试员工 A:`突然销户`
|
||||
- 测试员工 B:`休眠账户大额启用`
|
||||
- 项目分析详情返回:
|
||||
- 员工 A 的 `reasonDetail` 与 SQL 命中说明一致
|
||||
- 员工 B 的 `reasonDetail` 与 SQL 命中说明一致
|
||||
|
||||
## 7. 页面联调结果
|
||||
|
||||
通过前端页面 `http://127.0.0.1:1026/ccdiProject/detail/90331?tab=overview` 验证:
|
||||
|
||||
- 项目列表中 `异常账户规则测试项目` 显示 `已完成`
|
||||
- 项目列表中目标人数显示 `4`,预警人数显示 `2`
|
||||
- 结果总览风险人员区域显示:
|
||||
- `测试员工A / 突然销户`
|
||||
- `测试员工B / 休眠账户大额启用`
|
||||
- 风险模型区域显示模型卡片:
|
||||
- `异常账户 / 2 / 涉及 2 人`
|
||||
- 风险模型命中人员列表显示:
|
||||
- `测试员工A / 异常账户 / 突然销户`
|
||||
- `测试员工B / 异常账户 / 休眠账户大额启用`
|
||||
- 点击 `测试员工A` 的 `查看详情` 后,项目分析详情弹窗展示:
|
||||
- `异常对象摘要`
|
||||
- `测试员工A`
|
||||
- `员工对象`
|
||||
- `账户6222000000000001于2026-03-20销户,销户前30天内最后交易日2026-03-18,累计交易金额180000.00元,单笔最大金额70000.00元`
|
||||
- 风险详情页中的 `异常账户人员信息` 区块正常渲染占位文案,未因本轮后端接入报错
|
||||
|
||||
## 8. 发现与结论
|
||||
|
||||
### 8.1 验证结论
|
||||
|
||||
- 异常账户标签可以被正确识别
|
||||
- 数据库原始规则命中结果、后端聚合结果、前端页面展示结果三者一致
|
||||
|
||||
### 8.2 联调观察
|
||||
|
||||
- 打开项目分析详情弹窗时,前端控制台出现 2 条 Vue 告警:
|
||||
- `Duplicate keys detected: '关联人员往来-object'`
|
||||
- 该告警未阻断本次异常账户标签展示,但建议后续排查 `ProjectAnalysisAbnormalTab.vue` 中的 key 生成逻辑,避免详情弹窗在更多数据场景下出现渲染更新问题
|
||||
|
||||
## 9. 进程处理
|
||||
|
||||
- 本次验证复用了已运行的后端进程,未额外启动新的后端服务
|
||||
- 本次验证启动了前端开发服务,验证结束后需主动关闭
|
||||
@@ -36,7 +36,7 @@ $base-sub-menu-background:#000c17;
|
||||
$base-sub-menu-hover:#001528;
|
||||
*/
|
||||
|
||||
$base-sidebar-width: 200px;
|
||||
$base-sidebar-width: 240px;
|
||||
|
||||
// the :export directive is the magic sauce for webpack
|
||||
// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
|
||||
|
||||
@@ -428,7 +428,7 @@ export default {
|
||||
|
||||
.model-card-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ const source = fs.readFileSync(
|
||||
);
|
||||
|
||||
assert(
|
||||
source.includes("grid-template-columns: repeat(5, minmax(0, 1fr));"),
|
||||
"桌面端模型卡片应固定为每行 5 张"
|
||||
source.includes("grid-template-columns: repeat(4, minmax(0, 1fr));"),
|
||||
"桌面端模型卡片应固定为每行 4 张"
|
||||
);
|
||||
assert(
|
||||
source.includes("@media (max-width: 1200px)"),
|
||||
|
||||
Reference in New Issue
Block a user