补充流程列表更新时间展示设计与计划
This commit is contained in:
120
doc/2026-03-28-workflow-update-time-list-backend-plan.md
Normal file
120
doc/2026-03-28-workflow-update-time-list-backend-plan.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# 流程列表更新时间展示后端实施计划
|
||||
|
||||
> **For agentic workers:** REQUIRED: Use superpowers:executing-plans to implement this plan in this repository. Do not use subagents. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 让流程列表接口返回 `updateTime`,并保持按更新时间倒序排序。
|
||||
|
||||
**Architecture:** 后端只调整列表专用 VO 和联表 SQL,让列表展示字段与现有 `ORDER BY lpw.update_time DESC` 对齐。不修改详情页、不改数据库结构、不变更列表其他字段。
|
||||
|
||||
**Tech Stack:** Spring Boot、MyBatis Plus、Lombok、Maven、XML Mapper
|
||||
|
||||
---
|
||||
|
||||
### Task 1: 为列表专用 VO 补充更新时间字段
|
||||
|
||||
**Files:**
|
||||
- Modify: `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java`
|
||||
- Test: `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java`
|
||||
|
||||
- [ ] **Step 1: 写失败测试约束 `updateTime` 字段存在**
|
||||
|
||||
在 `LoanPricingWorkflowListVOTest` 中新增一个最小测试,例如:
|
||||
|
||||
```java
|
||||
@Test
|
||||
void shouldExposeUpdateTimeField() {
|
||||
LoanPricingWorkflowListVO vo = new LoanPricingWorkflowListVO();
|
||||
Date now = new Date();
|
||||
vo.setUpdateTime(now);
|
||||
|
||||
assertEquals(now, vo.getUpdateTime());
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 运行测试确认在字段未添加前失败**
|
||||
|
||||
Run: `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=LoanPricingWorkflowListVOTest test`
|
||||
Expected: FAIL,提示 `updateTime` 相关 getter/setter 不存在。
|
||||
|
||||
- [ ] **Step 3: 在 VO 中新增 `updateTime`**
|
||||
|
||||
在 `LoanPricingWorkflowListVO` 中新增:
|
||||
|
||||
```java
|
||||
private Date updateTime;
|
||||
```
|
||||
|
||||
- [ ] **Step 4: 重新运行测试确认通过**
|
||||
|
||||
Run: `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=LoanPricingWorkflowListVOTest test`
|
||||
Expected: PASS
|
||||
|
||||
### Task 2: 让联表 SQL 返回更新时间
|
||||
|
||||
**Files:**
|
||||
- Modify: `ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml`
|
||||
- Test: `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java`
|
||||
|
||||
- [ ] **Step 1: 写失败测试约束列表分页结果透传 `updateTime`**
|
||||
|
||||
在 `LoanPricingWorkflowServiceImplTest` 中新增测试,例如:
|
||||
|
||||
```java
|
||||
@Test
|
||||
void shouldReturnPagedWorkflowListWithUpdateTime() {
|
||||
LoanPricingWorkflowListVO row = new LoanPricingWorkflowListVO();
|
||||
Date now = new Date();
|
||||
row.setUpdateTime(now);
|
||||
|
||||
Page<LoanPricingWorkflowListVO> pageResult = new Page<>(1, 10);
|
||||
pageResult.setRecords(List.of(row));
|
||||
|
||||
when(loanPricingWorkflowMapper.selectWorkflowPageWithRates(any(), any())).thenReturn(pageResult);
|
||||
|
||||
IPage<LoanPricingWorkflowListVO> result = loanPricingWorkflowService.selectLoanPricingPage(new Page<>(1, 10), new LoanPricingWorkflow());
|
||||
|
||||
assertEquals(now, result.getRecords().get(0).getUpdateTime());
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 运行测试确认在 SQL/VO 未对齐前失败**
|
||||
|
||||
Run: `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=LoanPricingWorkflowServiceImplTest test`
|
||||
Expected: 若 `updateTime` 尚未补齐,则失败。
|
||||
|
||||
- [ ] **Step 3: 在联表 SQL 中新增更新时间返回字段**
|
||||
|
||||
在 `LoanPricingWorkflowMapper.xml` 的 `SELECT` 中新增:
|
||||
|
||||
```xml
|
||||
lpw.update_time AS updateTime
|
||||
```
|
||||
|
||||
并保留:
|
||||
|
||||
```xml
|
||||
ORDER BY lpw.update_time DESC
|
||||
```
|
||||
|
||||
- [ ] **Step 4: 运行服务层测试确认通过**
|
||||
|
||||
Run: `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=LoanPricingWorkflowServiceImplTest test`
|
||||
Expected: PASS
|
||||
|
||||
- [ ] **Step 5: 运行模块测试确认无回归**
|
||||
|
||||
Run: `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false test`
|
||||
Expected: 模块测试通过。
|
||||
|
||||
- [ ] **Step 6: 补充后端实施记录**
|
||||
|
||||
Create: `doc/implementation-report-2026-03-28-workflow-update-time-list-backend.md`
|
||||
|
||||
至少写明:
|
||||
|
||||
```markdown
|
||||
- 列表专用 VO 已新增 `updateTime`
|
||||
- 联表 SQL 已返回 `lpw.update_time AS updateTime`
|
||||
- 列表继续按 `lpw.update_time DESC` 排序
|
||||
- 已完成后端模块测试验证
|
||||
```
|
||||
164
doc/2026-03-28-workflow-update-time-list-design.md
Normal file
164
doc/2026-03-28-workflow-update-time-list-design.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# 流程列表更新时间展示设计文档
|
||||
|
||||
## 1. 背景
|
||||
|
||||
当前流程列表页展示的是“创建时间”,但列表排序语义已经是按 `update_time` 倒序。这会导致页面展示字段与排序依据不一致。
|
||||
|
||||
本次需求是将流程列表中的“创建时间”替换为“更新时间”,并保持列表继续按更新时间排序。
|
||||
|
||||
## 2. 已确认约束
|
||||
|
||||
- 仅调整流程列表页时间列展示
|
||||
- 列表中不同时展示创建时间和更新时间
|
||||
- 后端列表链路继续按 `update_time` 倒序排序
|
||||
- 前端时间列改为展示 `updateTime`
|
||||
- 不修改详情页时间展示逻辑
|
||||
- 文档和计划统一保存在 `doc` 目录
|
||||
|
||||
## 3. 现状分析
|
||||
|
||||
当前列表链路情况如下:
|
||||
|
||||
1. 前端流程列表页时间列文案为“创建时间”
|
||||
2. 前端时间列绑定字段为 `createTime`
|
||||
3. 后端列表专用 SQL 已按 `lpw.update_time DESC` 排序
|
||||
4. 列表专用 VO 当前仅暴露 `createTime`
|
||||
|
||||
因此页面展示与实际排序依据不一致。
|
||||
|
||||
## 4. 方案对比
|
||||
|
||||
### 方案一:前后端统一切换为更新时间
|
||||
|
||||
做法:
|
||||
|
||||
- 前端将时间列文案改为“更新时间”
|
||||
- 前端字段绑定从 `createTime` 改为 `updateTime`
|
||||
- 后端列表专用 VO 增加 `updateTime`
|
||||
- 联表 SQL 返回 `lpw.update_time AS updateTime`
|
||||
- 排序继续保留 `ORDER BY lpw.update_time DESC`
|
||||
|
||||
优点:
|
||||
|
||||
- 展示语义与排序语义完全一致
|
||||
- 改动范围小
|
||||
- 不引入字段语义混乱
|
||||
|
||||
缺点:
|
||||
|
||||
- 无明显缺点
|
||||
|
||||
### 方案二:继续展示创建时间,只补充说明按更新时间排序
|
||||
|
||||
做法:
|
||||
|
||||
- 保持前端展示 `createTime`
|
||||
- 仅在文档或页面认知上说明排序按更新时间进行
|
||||
|
||||
优点:
|
||||
|
||||
- 改动最少
|
||||
|
||||
缺点:
|
||||
|
||||
- 不符合“列表中展示更新时间”的需求
|
||||
- 页面展示和排序逻辑仍不一致
|
||||
|
||||
### 方案三:后端把 `update_time` 映射到 `createTime`
|
||||
|
||||
做法:
|
||||
|
||||
- 前端继续绑定 `createTime`
|
||||
- 后端列表返回时用 `update_time` 填到 `createTime`
|
||||
|
||||
优点:
|
||||
|
||||
- 前端改动更少
|
||||
|
||||
缺点:
|
||||
|
||||
- 字段语义错误
|
||||
- 后续维护容易误解
|
||||
|
||||
## 5. 设计结论
|
||||
|
||||
采用方案一。
|
||||
|
||||
最终实现为:
|
||||
|
||||
- 流程列表页将“创建时间”替换为“更新时间”
|
||||
- 时间列字段绑定改为 `updateTime`
|
||||
- 后端列表专用 VO 补充 `updateTime`
|
||||
- 联表 SQL 返回 `lpw.update_time AS updateTime`
|
||||
- 排序继续按 `lpw.update_time DESC`
|
||||
|
||||
## 6. 后端设计
|
||||
|
||||
### 6.1 返回对象
|
||||
|
||||
列表专用返回对象 `LoanPricingWorkflowListVO` 增加:
|
||||
|
||||
- `private Date updateTime;`
|
||||
|
||||
保留现有字段不变。
|
||||
|
||||
### 6.2 SQL 设计
|
||||
|
||||
在列表专用 SQL 中:
|
||||
|
||||
- 新增 `lpw.update_time AS updateTime`
|
||||
- 保持 `ORDER BY lpw.update_time DESC`
|
||||
|
||||
不修改当前筛选条件。
|
||||
|
||||
## 7. 前端设计
|
||||
|
||||
在 `ruoyi-ui/src/views/loanPricing/workflow/index.vue` 中:
|
||||
|
||||
- 将时间列文案从“创建时间”改为“更新时间”
|
||||
- 将列绑定字段从 `createTime` 改为 `updateTime`
|
||||
- 模板中 `parseTime` 的参数改为 `scope.row.updateTime`
|
||||
|
||||
页面中只保留这一列,不再显示创建时间。
|
||||
|
||||
## 8. 边界与非目标
|
||||
|
||||
本次不包含以下内容:
|
||||
|
||||
- 不新增双时间列展示
|
||||
- 不修改详情页时间展示逻辑
|
||||
- 不修改数据库表结构
|
||||
- 不调整列表筛选项
|
||||
- 不改变分页行为
|
||||
|
||||
## 9. 风险与控制
|
||||
|
||||
风险点主要有两个:
|
||||
|
||||
1. 后端 VO 未补充 `updateTime`,前端会拿不到值
|
||||
2. 前端列头改了但仍绑定 `createTime`,会继续展示旧字段
|
||||
|
||||
控制方式:
|
||||
|
||||
- 同步修改 VO、SQL、前端模板三个位置
|
||||
- 保持排序语句不动,只对齐展示字段
|
||||
- 通过源码检查、后端测试和前端构建做验证
|
||||
|
||||
## 10. 验证方案
|
||||
|
||||
实施后需要完成以下验证:
|
||||
|
||||
1. 前端列表时间列文案为“更新时间”
|
||||
2. 前端列表时间列绑定字段为 `updateTime`
|
||||
3. 后端 `LoanPricingWorkflowListVO` 已定义 `updateTime`
|
||||
4. 后端联表 SQL 已返回 `lpw.update_time AS updateTime`
|
||||
5. 后端模块测试通过
|
||||
6. 前端生产构建通过
|
||||
|
||||
## 11. 实施范围
|
||||
|
||||
- 前端:流程列表页 1 个页面文件
|
||||
- 后端:列表 VO 与联表 SQL
|
||||
- 数据库:无改动
|
||||
|
||||
本次属于列表展示字段与排序语义对齐,不涉及业务流程变更。
|
||||
70
doc/2026-03-28-workflow-update-time-list-frontend-plan.md
Normal file
70
doc/2026-03-28-workflow-update-time-list-frontend-plan.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# 流程列表更新时间展示前端实施计划
|
||||
|
||||
> **For agentic workers:** REQUIRED: Use superpowers:executing-plans to implement this plan in this repository. Do not use subagents. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 将流程列表页中的“创建时间”替换为“更新时间”并展示 `updateTime`。
|
||||
|
||||
**Architecture:** 前端只修改流程列表页时间列文案和字段绑定,不新增双时间列,也不改其他列表列。页面展示字段与后端当前按更新时间排序的语义保持一致。
|
||||
|
||||
**Tech Stack:** Vue 2、Element UI、RuoYi 前端工程、npm
|
||||
|
||||
---
|
||||
|
||||
### Task 1: 替换流程列表时间列为更新时间
|
||||
|
||||
**Files:**
|
||||
- Modify: `ruoyi-ui/src/views/loanPricing/workflow/index.vue`
|
||||
|
||||
- [ ] **Step 1: 查看当前时间列实现**
|
||||
|
||||
Run: `sed -n '50,70p' ruoyi-ui/src/views/loanPricing/workflow/index.vue`
|
||||
Expected: 能看到当前列表存在“创建时间”列,且模板中绑定 `createTime`。
|
||||
|
||||
- [ ] **Step 2: 将时间列替换为更新时间**
|
||||
|
||||
将以下结构:
|
||||
|
||||
```vue
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="160">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
```
|
||||
|
||||
改为:
|
||||
|
||||
```vue
|
||||
<el-table-column label="更新时间" align="center" prop="updateTime" width="160">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.updateTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
```
|
||||
|
||||
- [ ] **Step 3: 重新检查源码确认文案和字段绑定**
|
||||
|
||||
Run: `rg -n '更新时间|创建时间|prop=\"updateTime\"|prop=\"createTime\"' ruoyi-ui/src/views/loanPricing/workflow/index.vue`
|
||||
Expected: 该列表时间列显示为“更新时间”并绑定 `updateTime`。
|
||||
|
||||
- [ ] **Step 4: 执行前端构建验证**
|
||||
|
||||
Run: `npm --prefix ruoyi-ui run build:prod`
|
||||
Expected: 构建成功,输出包含 `Build complete.`
|
||||
|
||||
- [ ] **Step 5: 补充前端实施记录**
|
||||
|
||||
Create: `doc/implementation-report-2026-03-28-workflow-update-time-list-frontend.md`
|
||||
|
||||
至少写明:
|
||||
|
||||
```markdown
|
||||
- 流程列表页时间列已从“创建时间”替换为“更新时间”
|
||||
- 列绑定已从 `createTime` 切换为 `updateTime`
|
||||
- 已完成前端构建验证
|
||||
```
|
||||
|
||||
- [ ] **Step 6: 如果为验证启动了前端进程,结束对应进程**
|
||||
|
||||
Run: `ps -ef | rg 'vue-cli-service|ruoyi-ui'`
|
||||
Expected: 若本次任务为验证启动了新的前端进程,验证结束后主动停止;对非本次启动的现有进程不做处理。
|
||||
@@ -0,0 +1,24 @@
|
||||
# 流程列表更新时间展示设计实施记录
|
||||
|
||||
## 实施时间
|
||||
- 2026-03-28
|
||||
|
||||
## 修改内容
|
||||
- 新增流程列表更新时间展示设计文档
|
||||
- 明确列表将“创建时间”替换为“更新时间”
|
||||
- 明确后端列表 VO 与联表 SQL 补充 `updateTime`
|
||||
- 明确排序继续按 `update_time DESC`
|
||||
|
||||
## 文档路径
|
||||
- `doc/2026-03-28-workflow-update-time-list-design.md`
|
||||
- `doc/implementation-report-2026-03-28-workflow-update-time-list-design.md`
|
||||
|
||||
## 设计结论
|
||||
- 前端列表只展示“更新时间”
|
||||
- 前端时间列绑定 `updateTime`
|
||||
- 后端列表专用 VO 增加 `updateTime`
|
||||
- 联表 SQL 返回 `lpw.update_time AS updateTime`
|
||||
|
||||
## 说明
|
||||
- 按仓库要求,本次先完成设计确认,再进入前后端实施计划
|
||||
- 仓库约束禁止启用 subagent,因此本次未执行基于 subagent 的设计文档复审流程
|
||||
@@ -0,0 +1,24 @@
|
||||
# 流程列表更新时间展示实施计划产出记录
|
||||
|
||||
## 实施时间
|
||||
- 2026-03-28
|
||||
|
||||
## 修改内容
|
||||
- 基于设计文档补充前端实施计划
|
||||
- 基于设计文档补充后端实施计划
|
||||
- 明确列表页时间列将从创建时间切换为更新时间
|
||||
|
||||
## 文档路径
|
||||
- `doc/2026-03-28-workflow-update-time-list-design.md`
|
||||
- `doc/2026-03-28-workflow-update-time-list-frontend-plan.md`
|
||||
- `doc/2026-03-28-workflow-update-time-list-backend-plan.md`
|
||||
- `doc/implementation-report-2026-03-28-workflow-update-time-list-plans.md`
|
||||
|
||||
## 计划结论
|
||||
- 前端计划只替换流程列表页时间列文案和字段绑定
|
||||
- 后端计划只调整列表专用 VO 与联表 SQL 的返回字段
|
||||
- 排序继续按 `update_time DESC`
|
||||
|
||||
## 说明
|
||||
- 按仓库要求,设计文档和实施计划均保存在 `doc` 目录
|
||||
- 仓库约束禁止启用 subagent,因此本次未执行基于 subagent 的计划文档复审流程
|
||||
Reference in New Issue
Block a user