完善流程部门权限并补充余值覆盖字段

This commit is contained in:
wkc
2026-06-08 17:15:01 +08:00
parent eef36ff0ec
commit f11d20abc7
22 changed files with 538 additions and 120 deletions

View File

@@ -0,0 +1,74 @@
# 流程列表支行管理员数据权限实施记录
## 修改日期
2026-05-18
## 需求范围
-`loan_pricing_workflow` 新增 `dept_id`,保存新创建流程的创建人机构号。
- `GET /loanPricing/workflow/list` 增加支行管理员数据权限:
- 超级管理员、角色名“管理员”或角色标识 `headAdmin` 查看全部流程。
- 角色名“支行管理员”或角色标识 `branchAdmin` 查看本人机构及下级机构创建的流程。
- 其他用户继续只查看本人 `create_by` 精确匹配的流程。
- 不回填历史流程数据,历史 `dept_id` 为空的数据不纳入支行管理员机构权限。
- 本次无前端代码改动。
## 修改内容
- 新增 `sql/add_workflow_dept_id_20260518.sql`,为流程表增加 `dept_id` 字段和 `idx_dept_id` 索引。
- 同步更新流程表建表脚本中的 `dept_id` 字段和索引定义。
- `LoanPricingWorkflow` 增加表字段 `deptId` 和列表内部权限字段 `dataScopeDeptId`
- `LoanPricingWorkflowServiceImpl.createLoanPricing` 在插入前写入当前登录人的 `deptId`
- `LoanPricingWorkflowServiceImpl.selectLoanPricingPage` 增加支行管理员分支:
- `headAdmin` 不加权限过滤。
- `branchAdmin` 写入当前登录人的 `dataScopeDeptId`
- 客户经理继续写入 `dataScopeCreateBy`
- `LoanPricingWorkflowMapper.xml` 增加基于 `lpw.dept_id``sys_dept.ancestors` 的本机构及下级机构过滤。
- 创建者查询参数仍按 `SUBSTRING_INDEX(lpw.create_by, '-', -1)` 只模糊匹配柜员号,并与数据权限条件取交集。
## 验证记录
- 单元测试通过:
```bash
mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingWorkflowServiceImplTest,LoanPricingWorkflowMapperXmlTest -Dsurefire.failIfNoSpecifiedTests=false test
```
- 后端打包通过:
```bash
mvn -pl ruoyi-admin -am clean package -DskipTests
```
- 已在开发库执行:
```bash
mysql ... loan-pricing < sql/add_workflow_dept_id_20260518.sql
```
- 数据库回查确认 `loan_pricing_workflow.dept_id``idx_dept_id` 已存在。
- API 验证通过:
- `8929999/headAdmin` 查询临时流程返回 6 条,包含全部测试数据。
- `8920100/branchAdmin` 查询临时流程返回 4 条,仅包含本机构、本人和下级机构数据。
- `8920001/客户经理` 查询临时流程返回 1 条,仅包含本人创建数据。
- `8920100/branchAdmin` 使用其他支行创建者 `8920201` 作为查询条件时返回 0 条,创建者查询参数不能扩大数据权限。
- 真实创建接口验证通过:
- `8920100/branchAdmin` 调用个人流程创建接口后,新流程落库 `dept_id=101``create_by=测试支行管理员-8920100`
- browser-use 真实页面验证通过:
- 支行管理员登录真实流程列表页,页面显示 `共 4 条`
- 页面只显示 `BRANCH_SCOPE_20260518_CREATE``BRANCH_SCOPE_20260518_SELF``BRANCH_SCOPE_20260518_SAME``BRANCH_SCOPE_20260518_CHILD`
- 页面未显示其他支行 `BRANCH_SCOPE_20260518_OTHER` 和普通客户经理本人 `BRANCH_SCOPE_20260518_MANAGER`
## 测试数据保留
- 按复测要求,本次验证保留测试用户和测试流程数据,不做清理。
- 保留临时用户:
- `8920100`,昵称 `测试支行管理员`,角色 `branchAdmin`,机构 `101`
- 保留流程数据:
- `BRANCH_SCOPE_20260518_SELF`,机构 `101`,创建者 `测试支行管理员-8920100`
- `BRANCH_SCOPE_20260518_SAME`,机构 `101`,创建者 `同支行客户经理-8920101`
- `BRANCH_SCOPE_20260518_CHILD`,机构 `103`,创建者 `下级客户经理-8920103`
- `BRANCH_SCOPE_20260518_OTHER`,机构 `102`,创建者 `其他支行客户经理-8920201`
- `BRANCH_SCOPE_20260518_MANAGER`,机构 `100`,创建者 `测试客户经理-8920001`
- `BRANCH_SCOPE_20260518_CREATE`,机构 `101`,创建者 `测试支行管理员-8920100`,由真实新增接口创建。

View File

@@ -0,0 +1,50 @@
# sys_user_role 角色关系 SQL 生成记录
## 修改日期
2026-05-20
## 需求范围
- 根据 `/Users/wkc/Downloads/892.xlsx``Sheet1` 生成 `sys_user_role` 插入语句。
- Excel 字段使用规则:`柜员号` 匹配 `sys_user.user_name` 后取 `sys_user.user_id``类型` 匹配 `sys_role.role_name` 后取 `sys_role.role_id`
- 未将 Excel 柜员号直接写入 `sys_user_role.user_id`
- 本次只生成 SQL 文件,未执行写入数据库。
## 输出文件
- `sql/insert_sys_user_role_892_20260519.sql`
## 数据统计
- Excel 有效数据行257 行。
- 管理员4 行。
- 支行管理员37 行。
- 客户经理213 行。
- Excel 中 3 个重复柜员号同时出现客户经理和支行管理员,本次按支行管理员优先处理,不插入客户经理角色。
## 重复柜员号
- `8922557`: 裘朝山 / 892220 / 客户经理 / Excel 第 26 行、裘朝山 / 892220 / 支行管理员 / Excel 第 117 行
- `8922667`: 徐华源 / 892080 / 客户经理 / Excel 第 66 行、徐华源 / 892080 / 支行管理员 / Excel 第 121 行
- `8923504`: 陈俊杰 / 892170 / 客户经理 / Excel 第 28 行、陈俊杰 / 892170 / 支行管理员 / Excel 第 118 行
- 处理规则:以上重复柜员号只保留在支行管理员插入语句中。
## 数据库映射确认
- 已查询开发库 `sys_role`,当前有效角色为:
- `管理员` -> `role_id=100`, `role_key=headAdmin`
- `客户经理` -> `role_id=101`, `role_key=common`
- `支行管理员` -> `role_id=102`, `role_key=branchAdmin`
- SQL 文件不硬编码 `role_id`,执行时按 `sys_role.role_name` 动态匹配,避免不同环境角色自增 ID 不一致。
- SQL 使用 `INSERT IGNORE`,重复执行不会重复写入相同 `(user_id, role_id)`
- SQL 不创建临时表,已按 `管理员``支行管理员``客户经理` 拆成三条独立插入语句,便于分角色执行和核对影响范围。
## 验证记录
- 已读取 Excel 并校验 `类型` 只包含 `管理员``支行管理员``客户经理`
- 已确认 `sys_user_role` 表结构为 `user_id``role_id` 联合主键。
- 已对开发库做不写入目标表的干跑校验257 行角色均可匹配,当前库 Excel 柜员号匹配到的有效用户数为 0。
- 批量执行该 SQL 前需先导入 Excel 对应用户,否则三条插入语句因匹配不到 `sys_user.user_name` 不会写入关系。
- 已按要求移除临时表建表、临时表插入和临时表删除语句。
- 已在事务内执行 SQL 脚本并 `ROLLBACK`,确认三条插入语句语法通过且未落库。

View File

@@ -0,0 +1,38 @@
# 对公余值覆盖字段实施记录
## 背景
对公新增流程需要在“贷款信息”分组补充“余值覆盖”开关,字段名为 `resCover`,提交到后端和模型调用时使用 `0/1` 值。
## 修改内容
1. 前端企业新增弹窗 `CorporateCreateDialog.vue`
- 在“贷款信息”分组新增“余值覆盖”开关。
- 表单默认值为 `false`
- 提交时转换为 `resCover: '1'``resCover: '0'`
2. 后端字段链路
- `CorporateLoanPricingCreateDTO` 增加 `resCover`
- `LoanPricingWorkflow` 增加 `resCover`,对应数据库字段 `res_cover`
- `LoanPricingConverter` 将 DTO 字段写入流程实体。
- `ModelInvokeDTO` 增加 `resCover`
- `LoanPricingModelService` 在企业模型调用前将 `resCover` 归一化为 `0/1`
3. 页面展示
- 企业流程详情页展示“余值覆盖”。
4. SQL
- 新增 `sql/add_res_cover_20260522.sql`
- 同步更新 `sql/loan_pricing_workflow.sql``sql/loan_pricing_schema_20260328.sql``sql/loan_pricing_prod_init_20260331.sql`
## 验证结果
- 已执行前端字段静态断言:`npm run test:corporate-create-input-params`,通过。
- 已执行前端详情字段静态断言:`npm run test:corporate-display-fields`,通过。
- 已执行后端单测:`mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingModelServiceTest,LoanPricingWorkflowServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test`,通过。
- 已执行后端打包:`mvn -pl ruoyi-admin -am -DskipTests package`,通过。
- 已执行开发库 SQL`sql/add_res_cover_20260522.sql`,回查 `loan_pricing_workflow.res_cover``varchar(10)`
- 已启动真实前端页面,通过浏览器打开企业新增弹窗,确认“贷款信息”分组中展示“余值覆盖”开关,且位置在“企业标识”分组之前。
- 已用临时后端端口发起企业创建接口,响应中 `resCover``1`,后端外部模型调用日志确认请求参数包含 `"resCover":"1"`
- 接口验证产生的测试流程数据已清理,回查 `cust_isn = 'RES_COVER_TEST_20260522'` 的流程记录数为 `0`
- 测试时启动的前端和临时后端进程已关闭。

View File

@@ -0,0 +1,28 @@
# 取消贷款定价页面脱敏展示后端实施记录
## 需求范围
- 取消贷款定价流程页面展示层的客户名称、证件号码脱敏效果。
- 列表、详情、模型输出基本信息返回完整展示值。
- 保留流程表客户名称、证件号码存储加密,以及创建、编辑、模型调用链路中的加解密逻辑。
## 实施内容
- 调整 `LoanPricingWorkflowServiceImpl` 分页列表返回逻辑,客户名称解密后直接返回。
- 调整 `LoanPricingWorkflowServiceImpl` 详情返回逻辑,流程主信息中的客户名称、证件号码解密后直接返回。
- 取消个人、企业模型输出基本信息中的客户名称、证件号码返回前脱敏处理。
- 删除不再使用的贷款定价专用展示脱敏服务及对应单元测试。
- 更新工作流服务单元测试,验证列表、详情、个人模型输出、企业模型输出均返回完整展示值。
## 未改动内容
- 未修改数据库表结构和数据迁移脚本。
- 未修改 `SensitiveFieldCryptoService` 存储加解密逻辑。
- 未修改登录、密码传输加密逻辑。
- 未修改通用 `@Sensitive` 脱敏机制。
- 未修改前端业务代码。
## 验证计划
- 执行 `LoanPricingWorkflowServiceImplTest`,确认返回展示值与原加解密边界符合预期。
- 启动真实前后端页面,进入贷款定价流程列表与详情页,确认页面展示完整客户名称和证件号码。