归档贷款定价流程相关的 OpenSpec 变更

- 归档 add-loan-pricing-workflow:完成流程后端 API
- 归档 add-loan-pricing-frontend:完成前端列表和详情页面
- 归档 add-loan-pricing-create:完成前端创建功能
- 新增规范文件:loan-pricing-workflow 和 loan-pricing-workflow-ui
- 更新前端 API 和页面组件(新增创建流程功能)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
wkc
2026-01-20 18:20:23 +08:00
parent 4511f91e91
commit f2448ff97f
15 changed files with 656 additions and 7 deletions

View File

@@ -0,0 +1,33 @@
# Change: 添加利率定价流程创建功能
## Why
当前 `add-loan-pricing-frontend` 变更已实现流程列表查询和详情查看功能,但缺少创建新流程的能力。业务人员需要能够通过 Web 界面发起新的利率定价申请,而不是直接调用后端 API。
## What Changes
- 修改前端页面组件 `ruoyi-ui/src/views/loanPricing/workflow/index.vue`
- 添加"新增"按钮(带权限控制 `loanPricing:workflow:create`
- 添加创建流程表单对话框
- 实现表单验证逻辑
- 实现表单提交功能
- 新增前端 API 接口函数:
- `createWorkflow(data)` - 创建利率定价流程
- 新增数据库菜单权限:
- 添加创建权限 `loanPricing:workflow:create`
## Impact
- **Affected specs:** 修改 `loan-pricing-workflow-ui` 能力规格
- **Affected code:**
- **修改 `ruoyi-ui/src/api/loanPricing/workflow.js`** - 新增创建接口
- **修改 `ruoyi-ui/src/views/loanPricing/workflow/index.vue`** - 添加创建功能
- **修改 `sys_menu` 表** - 添加创建权限按钮
## Dependencies
- 依赖已完成的 `add-loan-pricing-workflow` 后端变更(提供创建 API
- 依赖已完成的 `add-loan-pricing-frontend` 前端变更(提供列表和详情页面)
- 后端 API 接口文档位于 `doc/api/loan-pricing-workflow-api.md`接口1发起利率定价流程

View File

@@ -0,0 +1,94 @@
# Capability: loan-pricing-workflow-ui
利率定价流程前端用户界面能力。
## MODIFIED Requirements
### Requirement: 流程列表查询
系统 SHALL 提供利率定价流程列表查询页面,支持分页和多条件筛选,并支持创建新流程。
#### Scenario: 查询流程列表
- **WHEN** 用户已登录系统且具有 `loanPricing:workflow:list` 权限,访问"利率定价管理 > 流程列表"菜单
- **THEN** 系统显示利率定价流程列表页面,包含查询表单(客户名称模糊查询、创建者、机构号筛选)、搜索和重置按钮、新增按钮(带权限控制)、数据表格(业务方流水号、客户名称、客户类型、担保方式、申请金额、贷款利率、创建时间、创建者)、分页组件、操作列(包含"查看"按钮)
#### Scenario: 使用筛选条件查询
- **WHEN** 用户在流程列表页面输入客户名称或选择创建者/机构号,点击搜索按钮
- **THEN** 系统根据筛选条件查询并更新列表数据
#### Scenario: 重置筛选条件
- **WHEN** 用户已设置筛选条件,点击重置按钮
- **THEN** 系统清空所有筛选条件并重新查询全部数据
### Requirement: 流程详情查看
系统 SHALL 提供流程详情查看功能,以对话框形式展示完整的流程信息。
#### Scenario: 查看流程详情
- **WHEN** 用户在流程列表页面且具有 `loanPricing:workflow:query` 权限,点击列表中某条记录的"查看"按钮
- **THEN** 系统弹出详情对话框,展示完整的流程信息(基本信息:业务方流水号、机构编码、客户内码、客户名称、证件类型;业务信息:客户类型、担保方式、申请金额、贷款利率、贷款用途;业务标识:中间业务标识、企业标识;抵质押信息:抵质押类型、是否三方所有;其他信息:创建时间、创建者、更新时间、更新者)
### Requirement: 菜单和权限配置
系统 SHALL 在数据库中正确配置菜单项和权限,确保用户可以访问功能。
#### Scenario: 菜单显示和导航
- **WHEN** 用户已登录系统且具有利率定价流程相关权限
- **THEN** 系统在左侧菜单栏显示"利率定价管理"一级菜单,展开后显示"流程列表"二级菜单项
#### Scenario: 菜单路由配置
- **WHEN** 用户点击"流程列表"菜单项,系统处理路由跳转
- **THEN** 系统导航至 `/loanPricing/workflow` 路径,加载对应的前端组件
### Requirement: API 接口集成
前端 SHALL 正确调用后端 API 接口获取数据和提交创建请求。
#### Scenario: 列表接口调用
- **WHEN** 用户访问流程列表页面,页面初始化或用户执行查询操作
- **THEN** 前端调用 `GET /loanPricing/workflow/list` 接口,传入分页和筛选参数
#### Scenario: 详情接口调用
- **WHEN** 用户点击查看按钮,前端获取选中记录的业务方流水号
- **THEN** 前端调用 `GET /loanPricing/workflow/{serialNum}` 接口获取详情数据
#### Scenario: 创建接口调用
- **WHEN** 用户填写完创建表单并点击确定按钮
- **THEN** 前端调用 `POST /loanPricing/workflow/create` 接口,传入表单数据,成功后关闭对话框并刷新列表
## ADDED Requirements
### Requirement: 流程创建
系统 SHALL 提供创建新利率定价流程的功能,通过表单对话框收集必要信息。
#### Scenario: 打开创建表单
- **WHEN** 用户在流程列表页面且具有 `loanPricing:workflow:create` 权限,点击"新增"按钮
- **THEN** 系统弹出创建流程表单对话框,显示所有必填和可选字段
#### Scenario: 表单字段显示
- **WHEN** 用户打开创建流程表单对话框
- **THEN** 系统显示以下字段分组:
- 基本信息:客户内码(必填)、客户名称、客户类型(必填,下拉选择:个人/企业)、证件类型
- 贷款信息:申请金额(必填)、贷款利率(必填)、担保方式(必填,下拉选择:信用/保证/抵押/质押、贷款用途下拉选择consumer/business
- 中间业务标识(个人):个人快捷支付(开关)、个人电费代扣(开关)
- 中间业务标识(企业):企业电费代扣(开关)、企业水费代扣(开关)
- 企业标识净身企业开关、开立基本结算账户开关、制造业企业开关、省农担担保贷款开关、纳税信用等级A级开关、县级及以上农业龙头企业开关、普惠小微借款人开关
- 抵质押信息:抵质押类型(下拉选择:一线/一类/二类)、抵质押物三方所有(开关)、是否有经营佐证(开关)
- 固定字段机构编码隐藏固定值931000、运行模式隐藏固定值1
#### Scenario: 表单验证
- **WHEN** 用户填写表单并点击确定按钮
- **THEN** 系统验证必填字段:客户内码、客户类型、担保方式、申请金额、贷款利率,如有缺失则显示错误提示
#### Scenario: 提交创建成功
- **WHEN** 用户填写完必填字段并点击确定按钮,后端返回成功响应
- **THEN** 系统关闭对话框,显示成功提示消息,刷新列表数据
#### Scenario: 取消创建
- **WHEN** 用户点击取消按钮或对话框关闭按钮
- **THEN** 系统关闭对话框,不保存数据,不刷新列表
#### Scenario: 新增按钮权限控制
- **WHEN** 用户不具有 `loanPricing:workflow:create` 权限
- **THEN** 系统不显示"新增"按钮

View File

@@ -0,0 +1,39 @@
# Tasks: 添加利率定价流程创建功能
## Implementation Tasks
### 1. 新增前端 API 接口
- [x]`ruoyi-ui/src/api/loanPricing/workflow.js` 中添加 `createWorkflow(data)` 函数
- [x] 函数调用 `POST /loanPricing/workflow/create` 接口
### 2. 修改前端页面组件
- [x] 在页面工具栏区域添加"新增"按钮
- [x] 按钮配置权限控制 `v-hasPermi="['loanPricing:workflow:create']"`
- [x] 添加创建流程表单对话框组件
- [x] 实现表单字段(参照 API 文档接口1的请求参数
- 必填字段:机构编码(固定931000)、运行模式(固定1)、客户内码、客户类型、担保方式、申请金额、贷款利率
- 可选字段:客户名称、证件类型、贷款用途
- 业务标识字段:中间业务标识(个人快捷支付、个人电费代扣、企业电费代扣、企业水费代扣)
- 企业标识字段净身企业、开立基本结算账户、制造业企业、省农担担保贷款、纳税信用等级A级、县级及以上农业龙头企业、普惠小微借款人
- 抵质押信息字段:抵质押类型、抵质押物三方所有、是否有经营佐证
- [x] 实现表单验证规则
- [x] 实现 `handleAdd` 方法(打开对话框)
- [x] 实现 `submitForm` 方法(提交表单)
- [x] 实现 `cancelCreate` 方法(取消/关闭对话框)
- [x] 实现 `reset` 方法(重置表单)
### 3. 配置数据库菜单权限
- [x] 准备 SQL 插入语句,在 `sys_menu` 表中添加创建按钮权限:
- menu_id: 2003, menu_name: 流程创建, parent_id: 2001
- perms: `loanPricing:workflow:create`
- [x] 执行 SQL 插入语句
- [x] 关联管理员角色到新菜单权限
### 4. 验证和测试
- [x] 代码实现完成,等待用户启动前端服务进行测试
- [ ] 启动前端开发服务器
- [ ] 验证"新增"按钮是否显示
- [ ] 测试打开创建表单对话框
- [ ] 测试表单验证功能
- [ ] 测试提交创建成功后刷新列表
- [ ] 测试取消和关闭对话框功能

View File

@@ -0,0 +1,25 @@
# Change: 添加利率定价流程前端管理界面
## Why
后端利率定价流程 API 已实现(参见 `add-loan-pricing-workflow` 变更),但缺少对应的前端管理界面。业务人员需要通过 Web 界面查询利率定价流程列表、查看流程详情,而不能直接调用后端 API。
## What Changes
- 新增前端 API 接口模块 `ruoyi-ui/src/api/loanPricing/workflow.js`
- 新增前端页面组件 `ruoyi-ui/src/views/loanPricing/workflow/index.vue`
- 在数据库 `sys_menu` 表中配置菜单项,确保页面可以正常访问
- 配置路由和权限,使用户可以通过菜单导航访问功能
## Impact
- **Affected specs:** 新增 `loan-pricing-workflow-ui` 能力规格
- **Affected code:**
- **新增 `ruoyi-ui/src/api/loanPricing/workflow.js`** - API 接口定义
- **新增 `ruoyi-ui/src/views/loanPricing/workflow/index.vue`** - 列表和详情页面组件
- **修改 `sys_menu` 表** - 添加菜单配置数据
## Dependencies
- 依赖已完成的 `add-loan-pricing-workflow` 后端变更
- 后端 API 接口文档位于 `doc/api/loan-pricing-workflow-api.md`

View File

@@ -0,0 +1,53 @@
# Capability: loan-pricing-workflow-ui
利率定价流程前端用户界面能力。
## ADDED Requirements
### Requirement: 流程列表查询
系统 SHALL 提供利率定价流程列表查询页面,支持分页和多条件筛选。
#### Scenario: 查询流程列表
- **WHEN** 用户已登录系统且具有 `loanPricing:workflow:list` 权限,访问"利率定价管理 > 流程列表"菜单
- **THEN** 系统显示利率定价流程列表页面,包含查询表单(客户名称模糊查询、创建者、机构号筛选)、搜索和重置按钮、数据表格(业务方流水号、客户名称、客户类型、担保方式、申请金额、贷款利率、创建时间、创建者)、分页组件、操作列(包含"查看"按钮)
#### Scenario: 使用筛选条件查询
- **WHEN** 用户在流程列表页面输入客户名称或选择创建者/机构号,点击搜索按钮
- **THEN** 系统根据筛选条件查询并更新列表数据
#### Scenario: 重置筛选条件
- **WHEN** 用户已设置筛选条件,点击重置按钮
- **THEN** 系统清空所有筛选条件并重新查询全部数据
### Requirement: 流程详情查看
系统 SHALL 提供流程详情查看功能,以对话框形式展示完整的流程信息。
#### Scenario: 查看流程详情
- **WHEN** 用户在流程列表页面且具有 `loanPricing:workflow:query` 权限,点击列表中某条记录的"查看"按钮
- **THEN** 系统弹出详情对话框,展示完整的流程信息(基本信息:业务方流水号、机构编码、客户内码、客户名称、证件类型;业务信息:客户类型、担保方式、申请金额、贷款利率、贷款用途;业务标识:中间业务标识、企业标识;抵质押信息:抵质押类型、是否三方所有;其他信息:创建时间、创建者、更新时间、更新者)
### Requirement: 菜单和权限配置
系统 SHALL 在数据库中正确配置菜单项和权限,确保用户可以访问功能。
#### Scenario: 菜单显示和导航
- **WHEN** 用户已登录系统且具有利率定价流程相关权限
- **THEN** 系统在左侧菜单栏显示"利率定价管理"一级菜单,展开后显示"流程列表"二级菜单项
#### Scenario: 菜单路由配置
- **WHEN** 用户点击"流程列表"菜单项,系统处理路由跳转
- **THEN** 系统导航至 `/loanPricing/workflow` 路径,加载对应的前端组件
### Requirement: API 接口集成
前端 SHALL 正确调用后端 API 接口获取数据。
#### Scenario: 列表接口调用
- **WHEN** 用户访问流程列表页面,页面初始化或用户执行查询操作
- **THEN** 前端调用 `GET /loanPricing/workflow/list` 接口,传入分页和筛选参数
#### Scenario: 详情接口调用
- **WHEN** 用户点击查看按钮,前端获取选中记录的业务方流水号
- **THEN** 前端调用 `GET /loanPricing/workflow/{serialNum}` 接口获取详情数据

View File

@@ -0,0 +1,41 @@
# Tasks: 添加利率定价流程前端管理界面
## Implementation Tasks
### 1. 创建前端 API 接口模块
- [x] 创建 `ruoyi-ui/src/api/loanPricing/` 目录
- [x] 创建 `workflow.js` 文件,实现以下 API 函数:
- `listWorkflow(query)` - 查询利率定价流程列表
- `getWorkflow(serialNum)` - 根据业务方流水号查询详情
### 2. 创建前端页面组件
- [x] 创建 `ruoyi-ui/src/views/loanPricing/workflow/` 目录
- [x] 创建 `index.vue` 页面组件,包含:
- 查询表单区域(支持客户名称、创建者、机构号筛选)
- 数据表格区域(显示流程列表)
- 分页组件
- 详情对话框(点击查看按钮弹出)
- [x] 实现以下功能:
- 页面加载时自动查询列表
- 搜索和重置功能
- 点击"查看"按钮弹出详情对话框
- 详情对话框展示完整的流程信息
### 3. 配置数据库菜单
- [x] 准备 SQL 插入语句,在 `sys_menu` 表中添加菜单项:
- 一级菜单利率定价管理menu_type='M'
- 二级菜单流程列表menu_type='C',对应前端组件路径)
- [x] 设置正确的权限标识perms字段
- 列表查询权限:`loanPricing:workflow:list`
- 详情查询权限:`loanPricing:workflow:query`
- [x] 执行 SQL 插入语句
- [x] 关联管理员角色到新菜单
### 4. 验证和测试
- [x] 配置完成,等待用户启动前端服务进行测试
- [ ] 启动前端开发服务器(`npm run dev`
- [ ] 使用 admin 账号登录系统
- [ ] 验证菜单是否正常显示
- [ ] 测试列表查询功能
- [ ] 测试搜索筛选功能
- [ ] 测试详情查看功能

View File

@@ -0,0 +1,24 @@
# Change: 添加利率定价流程管理功能
## Why
当前系统缺少利率定价流程的管理能力。业务人员需要能够发起利率定价申请、查询历史定价记录、查看定价详情。这是贷款定价系统的核心功能需求。
## What Changes
- 创建新的 Maven 模块 `ruoyi-loan-pricing` 用于利率定价相关功能
- 新增利率定价流程的发起接口
- 新增利率定价流程的列表查询接口(支持分页和多条件筛选)
- 新增根据业务方流水号查看详情的接口
- 创建数据库表存储利率定价流程数据
- 添加对应的实体类、Mapper、Service、Controller
## Impact
- **Affected specs:** 新增 `loan-pricing-workflow` 能力规格
- **Affected code:**
- **新增 `ruoyi-loan-pricing` Maven 模块** - 包含 Domain、Mapper、Service
- 修改 `pom.xml` 添加新模块依赖
- 新增 `ruoyi-admin` 模块下的 Controller
- 新增数据库表和 MyBatis XML 映射文件
- 新增前端 API 接口定义和页面组件(待后续阶段实现)

View File

@@ -0,0 +1,73 @@
## ADDED Requirements
### Requirement: 利率定价流程发起
系统 SHALL 提供利率定价流程发起接口,允许业务人员创建新的利率定价申请。
#### Scenario: 成功发起利率定价流程
- **WHEN** 业务人员提交包含必填字段(custIsn、custType、guarType、applyAmt、loanRate)的完整申请
- **THEN** 系统自动生成业务方流水号(serialNum)并保存记录,返回成功响应
#### Scenario: 自动生成业务方流水号
- **WHEN** 发起利率定价流程时
- **THEN** 系统使用时间戳自动生成唯一的业务方流水号,无需用户输入
#### Scenario: 记录创建和更新信息
- **WHEN** 利率定价流程创建成功
- **THEN** 系统自动记录创建者、创建时间、更新者、更新时间
#### Scenario: 字段验证-必填字段
- **WHEN** 提交的申请缺少必填字段(custIsn、custType、guarType、applyAmt、loanRate)
- **THEN** 系统返回参数验证失败的错误信息
#### Scenario: 字段验证-固定值字段
- **WHEN** 提交的申请中 orgCode 非 "931000" 或 runType 非 "1"
- **THEN** 系统返回参数验证失败的错误信息
#### Scenario: 字段验证-枚举值
- **WHEN** 提交的申请中 custType 不是"个人"或"企业"
- **THEN** 系统返回参数验证失败的错误信息
#### Scenario: 字段验证-担保方式
- **WHEN** 提交的申请中 guarType 不是"信用"、"保证"、"抵押"、"质押"之一
- **THEN** 系统返回参数验证失败的错误信息
### Requirement: 利率定价流程列表查询
系统 SHALL 提供利率定价流程列表查询接口,支持分页和多条件筛选。
#### Scenario: 默认按更新时间倒序排列
- **WHEN** 业务人员查询利率定价流程列表
- **THEN** 结果按更新时间(update_time)倒序排列
#### Scenario: 支持分页查询
- **WHEN** 业务人员指定页码和每页数量查询列表
- **THEN** 系统返回对应页的数据及总记录数
#### Scenario: 按创建者筛选
- **WHEN** 业务人员按创建者筛选查询
- **THEN** 系统返回该创建者创建的利率定价流程记录
#### Scenario: 按客户名称筛选
- **WHEN** 业务人员按客户名称(custName)模糊查询
- **THEN** 系统返回客户名称包含查询条件的记录
#### Scenario: 按机构号筛选
- **WHEN** 业务人员按机构号(orgCode)筛选查询
- **THEN** 系统返回该机构号的利率定价流程记录
#### Scenario: 组合条件筛选
- **WHEN** 业务人员同时指定多个筛选条件
- **THEN** 系统返回同时满足所有条件的记录
### Requirement: 利率定价流程详情查询
系统 SHALL 提供根据业务方流水号查询流程详情的接口。
#### Scenario: 根据业务方流水号查询详情
- **WHEN** 业务人员提供有效的业务方流水号(serialNum)
- **THEN** 系统返回该流程的所有字段信息
#### Scenario: 查询不存在的流水号
- **WHEN** 业务人员查询的业务方流水号不存在
- **THEN** 系统返回"记录不存在"的错误信息

View File

@@ -0,0 +1,78 @@
## 1. 创建新 Maven 模块
- [x] 1.1 创建 `ruoyi-loan-pricing` 模块目录结构
- [x] 1.2 创建 `ruoyi-loan-pricing/pom.xml`
- 继承父 pom
- 添加 `ruoyi-common` 依赖
- 添加 MyBatis Plus 依赖
- 添加 Spring Boot 相关依赖
- [x] 1.3 修改根 `pom.xml`
-`<modules>` 中添加 `ruoyi-loan-pricing` 模块
-`dependencyManagement` 中添加模块依赖管理
- [x] 1.4 修改 `ruoyi-admin/pom.xml`
- 添加 `ruoyi-loan-pricing` 模块依赖
## 2. 数据库设计与实现
- [x] 2.1 设计利率定价流程数据库表结构
- 包含所有必需字段(24个字段)
- 添加主键、索引
- 添加审计字段(create_by, create_time, update_by, update_time)
- [x] 2.2 创建数据库表 SQL 脚本
## 3. 后端实体类开发
- [x] 3.1 在 `ruoyi-loan-pricing` 模块中创建 `LoanPricingWorkflow` 实体类
- 使用 `@Data` 注解
- 使用 `@TableName` 映射数据库表名
- 所有字段添加数据库映射注解
- 手动添加审计字段(createBy, createTime, updateBy, updateTime)
- [x] 3.2 添加字段验证注解(@NotNull@NotBlank等)
## 4. 后端 Mapper 层开发
- [x] 4.1 在 `ruoyi-loan-pricing` 模块中创建 `LoanPricingWorkflowMapper` 接口
- 继承 MyBatis Plus 的 `BaseMapper<LoanPricingWorkflow>`
- 定义自定义查询方法(如果需要)
- [x] 4.2 创建 MyBatis XML 映射文件(如果需要自定义 SQL)
## 5. 后端 Service 层开发
- [x] 5.1 在 `ruoyi-loan-pricing` 模块中创建 `ILoanPricingWorkflowService` 接口
- 定义发起流程方法 `createLoanPricing`
- 定义列表查询方法 `selectLoanPricingList`
- 定义详情查询方法 `selectLoanPricingBySerialNum`
- [x] 5.2 创建 `LoanPricingWorkflowServiceImpl` 实现类
- 实现业务逻辑
- 生成业务方流水号(时间戳)
- 实现分页查询
- 实现多条件筛选
## 6. 后端 Controller 层开发
- [x] 6.1 在 `ruoyi-admin` 模块中创建 `LoanPricingWorkflowController` 控制器
- 添加 `@RestController``@RequestMapping` 注解
- 添加 SpringDoc/OpenAPI 注解用于生成 API 文档
- 实现发起接口 `POST /loanPricing/workflow/create`
- 实现列表查询接口 `GET /loanPricing/workflow/list`
- 实现详情查询接口 `GET /loanPricing/workflow/{serialNum}`
- [x] 6.2 添加操作日志注解 `@Log`
- [x] 6.3 添加 SpringDoc 注解生成 API 文档
- 使用 `@Tag` 定义控制器标签
- 使用 `@Operation` 定义接口描述
- 使用 `@Parameter` 定义参数说明
## 7. 测试与验证
- [x] 7.1 编写单元测试(可选)
- [x] 7.2 使用 Postman 或 Swagger UI 进行接口测试
- [x] 7.3 验证所有场景(成功和失败场景)
## 8. 文档与配置
- [x] 8.1 确认 MyBatis Plus 配置正确
- [x] 8.2 确认数据库表已创建
- [x] 8.3 验证 API 文档自动生成
- 访问 `/swagger-ui.html` 确认接口文档已生成
- 验证接口描述、参数说明、响应示例完整
- [x] 8.4 创建 API 接口文档 Markdown 文件