refactor(admin): 47 个 admin VO 续补 update 字段 (#2353/#2351)

PR #2348 漏扫严重 - 只看 controller/admin/ 子目录漏了 resource 服务大量按模块组织
的 Controller (scenic/hotel/restaurant/vehicle/staff/service/supplies/activity/cost)。
mmg 反馈 /admin/scenic/spots 缺 updatedAt 是表面,实际有 47 个 VO 受影响。
测试服 18/18 抽样验证通过。
这个提交包含在:
API Changelog Bot 2026-05-15 18:41:00 +08:00
父节点 94b50ffd74
当前提交 330fc6e1a2

查看文件

@ -0,0 +1,126 @@
# refactor(admin): 47 个 admin 查询接口 RespVO 续补 update 时间字段PR #2348 漏扫续修)
> **服务**: hl-resource-service / hl-user-service / hl-order-service-v2
> **PR**: #2353 (已合 dev,已部署测试服)
> **Issue**: #2351(续 #2346
> **日期**: 2026-05-15
> **影响范围**: 管理后台 hl-ui 47 个查询接口
---
## 给前端的话mmg 看这里)
⚠️ **重要**:上一份 changelog `15_refactor_admin_resp_vo_add_updatetime.md` 只覆盖了 14 个 VO,**远远不够**。本批续补 **47 个 VO**,涵盖 mmg 反馈的 `/admin/scenic/spots` 等接口。
### 字段名规律
- 大多数 `updateTime`(与 BaseDO 一致)
- guide / banner / topic / explore / file / task / wechat / album / arrival / review / material / scenic / hotel / restaurant / vehicle / activity / cost / staff / supplies / service 等模块 `updatedAt`(与各模块既有 `createdAt` 风格一致)
### 验证
经测试服 9443 网关 + admin token,**抽样 18/18 全过**(含 `/admin/scenic/spots`
| 接口 | 字段 | 实测值 |
|------|------|--------|
| /admin/scenic/spots | updatedAt | 2026-03-31 22:58:10 |
| /admin/vehicle/models | updatedAt | 2026-04-13 17:18:06 |
| /admin/service/items | updatedAt | 2026-03-07 11:36:35 |
| /admin/cost/items | updatedAt | 2026-02-17 22:45:59 |
| /admin/material/list | updatedAt | 2026-05-15 17:53:42 |
| /admin/banner | updatedAt | 2026-03-17 16:23:49 |
| /admin/explore/category | updatedAt | 2026-04-01 16:25:51 |
| /admin/task/boards | updatedAt | 2026-02-13 16:28:53 |
| /admin/file/list | updatedAt | 2026-05-12 10:36:02 |
| /admin/order/list | updateTime | 2026-05-09 11:48:00 |
| /admin/order/early-bird/list | updateTime | 2026-04-20 12:15:05 |
| /admin/payment/list | updateTime | 2026-05-09 11:47:44 |
| /admin/review/list | updatedAt | 2026-05-07 14:48:56 |
| /admin/contract/list | updateTime | 2026-05-07 14:43:45 |
| /admin/contract/templates | updateTime | 2026-02-25 13:01:07 |
| /admin/contract/scheme/list | updateTime | 2026-04-24 16:20:00 |
| /admin/contract/clause-template/list | updateTime | 2026-05-13 14:15:25 |
| /admin/insurance/products | updateTime | 2026-02-24 20:55:11 |
---
## 受影响的 47 个 VO
### hl-resource-service10 个,全 updatedAt
| 模块 | VO |
|------|-----|
| material | MaterialVO |
| activity | ActivityListVO |
| cost | CostItemListVO |
| hotel | HotelListVO |
| restaurant | RestaurantListVO |
| **scenic** | **ScenicSpotListVO** ← mmg 反馈的就是这个 |
| service | ServiceItemListVO |
| staff | StaffListVO |
| supplies | SuppliesListVO |
| vehicle | VehicleModelListVO |
### hl-user-service9 个)
- updatedAt 风格WechatGroupVO, BannerVO, ExploreCategoryVO, ExploreCategoryDetailVO, TopicVO, FileVO, BoardVO, SubtaskVO
- updateTime 风格MessageCategoryVO, NameItemRespVO
### hl-order-service-v228 个)
contract: ClauseTemplateVO, ContractSchemeAttachmentRespVO, ContractSchemeVO, ContractTemplateVO, ContractTourGuideRespVO, ContractVO
insurance: InsuranceOrderVO, InsuranceProductVO
order/album: AlbumFileVO, AlbumFolderVO
order/arrival: ArrivalPlanRespVO
order/assignment: VehicleAssignmentVO
order/core: OrderListVO, OrderVO
order/customize: CustomizeRequestVO
order/earlybird: EarlyBirdPlanVO
order/finance: AdminOrderDiscountVO, AdminOrderSurchargeVO, InvoiceVO
order/itinerary: ItineraryEditVO
order/review: AdminReportQueueItemRespVO, ReviewListVO, ReviewVO (3 个 updatedAt)
order/todo: OrderTodoVO
order/workorder: WorkOrderVO
payment: PaymentTransactionVO, RefundRecordVO
---
## 不在范围14 个 VO 撤回,前端不要期待这些有 update 字段)
DO/DB 表本身**没有 update_at 列**,是设计上的"一次写入即不变"实体:
- 资源服务 10 个 Tag/Ref 表MaterialRefVO / MaterialTagVO / ActivityTagVO / HotelTagVO / RestaurantTagVO / ScenicTagVO / ServiceTagVO / StaffTagVO / SuppliesTagVO / VehicleTagVO标签计数表无 update 需求)
- 用户服务 3 个FileRefVO关联表/ TimelineItemVOaudit log/ SendLogVO事件日志
- 订单服务 1 个ReviewImageVO评价图片表无 update 设计)
---
## 实现细节mmg 不用关心,归档备查)
### Service 层手动 set 修复 41 处(核心修复!)
本批 47 个 VO 中 41 个走"手动 `new + set`"路径(占 87%)。**如果只补 VO 不补 Service,字段恒 null**,看似改了实际没用。
CR 过程发现这个 bug 模式PR #2348 也犯过 14/4 占比),本次彻底排查所有 setter,每处都补
- 各 `XxxService.toListVO()` / `toVO()` 转换方法
- builder 风格的 service`.updatedAt(...)` 在 build() 前
特殊 3 处跨名桥接DO `updateTime` → VO `updatedAt`
- TopicService → `.updatedAt(topic.getUpdateTime())`
- ReviewDetailAssembler / ReviewCommandService / ReviewQueryService → `vo.setUpdatedAt(review.getUpdateTime())`
### 已知遗漏OrderTodoVO 部分路径)
`OrderTodoQueryService.mapActiveTodoToVOList:86``mapInsuranceToVOList:121` 走 mapper 自定义 SQL 返回的 `ActiveTodoDTO`/`InsuranceCompletedDTO`,DTO 本身无 update 字段,需先改 mapper SQL。
**影响**OrderTodoVO 在 list 页/详情页能看到 updateTime已补,仅"待办活跃"特定查询路径会 null。后续 mapper 改造专项处理。
### 前一批未补已修
PR #2348 本身的 14 个 VO 已都正常工作(本批未动那 14 个,请前端继续使用)。
---
## 总账
- PR #2348 (14 个) + PR #2353 (47 个) = **总共 61 个 admin VO 已补 update 字段**
- 总共 15 个 VO 因 DO/DB 设计无 update_at 撤回PR #2348: 1 个 GuideTagVO + PR #2353: 14 个)
- 总共 45 处 Service 手动 set 修复PR #2348: 4 处 + PR #2353: 41 处)