From cb2bbc7d463920461e8b7ab367979f1aa897af11 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Sat, 18 Jul 2026 18:02:42 +0800 Subject: [PATCH] =?UTF-8?q?docs(house):=20=E4=BA=A4=E6=8E=A5=E5=BE=85?= =?UTF-8?q?=E6=9C=80=E7=BB=88=E7=A1=AE=E8=AE=A4=E6=B4=BE=E7=94=9F=E5=BE=85?= =?UTF-8?q?=E5=8A=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...¾…办新增待最终确认派生项-修改接å£-管ç†åŽå°.md | 213 ++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 changelogs-v2/2026-07/61_5053_房务待办新增待最终确认派生项-修改接å£-管ç†åŽå°.md diff --git a/changelogs-v2/2026-07/61_5053_房务待办新增待最终确认派生项-修改接å£-管ç†åŽå°.md b/changelogs-v2/2026-07/61_5053_房务待办新增待最终确认派生项-修改接å£-管ç†åŽå°.md new file mode 100644 index 0000000..d35e7d3 --- /dev/null +++ b/changelogs-v2/2026-07/61_5053_房务待办新增待最终确认派生项-修改接å£-管ç†åŽå°.md @@ -0,0 +1,213 @@ +# ã€å‰ç«¯å¯¹æŽ¥Â·ç®¡ç†åŽå°ã€‘æˆ¿åŠ¡å¾…åŠžæ–°å¢žâ€œå¾…æœ€ç»ˆç¡®è®¤â€æ´¾ç”Ÿé¡¹ + +> Issue: [wx/HL#5053](https://git.1814.love:8443/wx/HL/issues/5053) +> +> PR: [wx/HL#5059](https://git.1814.love:8443/wx/HL/pulls/5059) +> +> åˆå¹¶æäº¤: `989318c3925b` +> +> æœåŠ¡: `hl-order-service-v3` / `hl-user-service` +> +> 日期: 2026-07-18 +> +> å½±å“范围: 房务“待处ç†â€åˆ—表ã€å¾…办类型筛选ã€è®¢å•è¯¦æƒ…è·³è½¬ã€æˆ¿åŠ¡å·¥ä½œå°å¾…办统计 + +## 一ã€å¯¹æŽ¥ç»“论 + +1. 房务“待处ç†â€é¡µçš„å”¯ä¸€ä¸»æ•°æ®æºä»æ˜¯ `GET /v3/admin/order/todos`,ä¸è¦æ”¹ç”¨ä»»ä½• `my-claims` 接å•列表接å£ã€‚`my-claims` ä¸è¿”回完整的待办类型èšåˆï¼Œä¸èƒ½æ›¿ä»£å¾…办接å£ã€‚ +2. å¾…åŠžæŽ¥å£æ–°å¢žå¯é€‰ç±»åž‹ `PENDING_FINALIZE`,中文标签为“待最终确认â€ã€‚它是查询时派生的虚拟待办,ä¸è½ `house_todo`,因此 `derived=true`ã€æ ‡ç­¾çº§ `todoId=null`。 +3. 当剿ˆ¿åŠ¡æŒæœ‰çš„ active ä½å®¿éœ€æ±‚处于 `status=PROCESSING`ã€`houseStatus=PENDING_FINALIZE` 时,接å£è¿”回该派生项;最终确认åŽéœ€æ±‚进入 `DONE/CONFIRMED`,该项从列表ã€ç­›é€‰ç»“果和统计中自然消失。 +4. `list[].todoTypes[]` 是一订å•多标签的æƒå¨æ•°æ®ã€‚点击 `PENDING_FINALIZE` 标签时必须使用该标签自己的 `requirementId`,ä¸èƒ½ä¾èµ–èšåˆè¡Œé¡¶å±‚ `requirementId`。 +5. 派生项ä¸å¯è°ƒç”¨å¾…办 `RESOLVE`。用户应打开 `OrderDetailModal` 完æˆâ€œæœ€ç»ˆç¡®è®¤â€ï¼ŒæˆåŠŸåŽåˆ·æ–°å¾…办列表与工作å°ä»ªè¡¨ç›˜ã€‚ +6. æˆ¿åŠ¡å·¥ä½œå° `GET /admin/profile/dashboard` çš„ `todoSummary` åŒæ­¥æ–°å¢žå¤§å†™é”® `PENDING_FINALIZE`。 +7. 本次没有修改 `hl-ui`;下文列出的现有å‰ç«¯ç­›é€‰å’Œæ ‡ç­¾çº§å‚数问题需由å‰ç«¯å¤„ç†ã€‚ + +## 二ã€å¾…办接å£å˜åŒ– + +### 2.1 请求 + +```http +GET /v3/admin/order/todos?scope=mine&status=OPEN&page=1&pageSize=20 +Authorization: Bearer +``` + +åªçœ‹â€œå¾…æœ€ç»ˆç¡®è®¤â€æ—¶ï¼š + +```http +GET /v3/admin/order/todos?scope=mine&status=OPEN&todoType=PENDING_FINALIZE&page=1&pageSize=20 +Authorization: Bearer +``` + +æŸ¥è¯¢å‚æ•°å是 `todoType`ï¼Œä¸æ˜¯ `type`。`todoType` 支æŒé€—å·åˆ†éš”多选。 + +### 2.2 å“应示例 + +```json +{ + "code": 200, + "data": { + "list": [ + { + "id": null, + "orderId": "2000000000000000001", + "orderNo": "HL202607180001", + "todoType": "PENDING_FINALIZE", + "todoTypeLabel": "待最终确认", + "title": "待最终确认", + "urgency": "normal", + "status": "OPEN", + "derived": true, + "requirementId": "2000000000000000101", + "orderTodoCount": 1, + "todoTypes": [ + { + "typeCode": "PENDING_FINALIZE", + "typeLabel": "待最终确认", + "urgency": "normal", + "count": 1, + "derived": true, + "todoId": null, + "requirementId": "2000000000000000101", + "unreadCount": null + } + ] + } + ], + "total": 1, + "stats": { + "PENDING_FINALIZE": 1 + } + } +} +``` + +字段规则: + +| 字段 | å‰ç«¯è§„则 | +|---|---| +| `list[].todoTypes[]` | 一订å•多待办类型的æƒå¨æ ‡ç­¾æ•°ç»„,必须完整渲染。 | +| `todoTypes[].typeCode` | 新增å¯é€‰å€¼ `PENDING_FINALIZE`。 | +| `todoTypes[].typeLabel` | 直接展示åŽç«¯ä¸­æ–‡â€œå¾…最终确认â€ã€‚ | +| `todoTypes[].derived` | `true` 表示虚拟待办,由æºä¸šåŠ¡çŠ¶æ€è‡ªç„¶æ¶ˆå¤±ã€‚ | +| `todoTypes[].todoId` | `PENDING_FINALIZE` 固定为 `null`ï¼Œç¦æ­¢è°ƒç”¨ `RESOLVE`。 | +| `todoTypes[].requirementId` | 打开该标签对应房务详情时使用;雪花 ID 按字符串é€ä¼ ã€‚ | +| `list[].requirementId` | åªå…¼å®¹èšåˆè¡Œä¸»æ ‡ç­¾ï¼›ä¸€è¡Œå¤šæ ‡ç­¾æ—¶ä¸èƒ½æ›¿ä»£æ ‡ç­¾çº§å­—段。 | +| `stats.PENDING_FINALIZE` | å½“å‰ scope 内“待最终确认â€éœ€æ±‚数;无数æ®ä¹Ÿè¿”回 `0`。 | + +`stats` æ˜¯å½“å‰ scope 的完整分类计数,ä¸å› æœ¬æ¬¡ `todoType` facet 收窄;因此筛选结果 `total` å¯ä»¥æ˜¯ `1`ï¼ŒåŒæ—¶å…¶ä»–统计槽ä»ä¿ç•™å…¶çœŸå®žå€¼ã€‚ + +### 2.3 生命周期 + +```text +当剿ˆ¿åŠ¡ + active requirement +status=PROCESSING + houseStatus=PENDING_FINALIZE + → /todos 出现 PENDING_FINALIZE 派生标签 + → 用户从该标签进入订å•详情并执行最终确认 + → status=DONE + houseStatus=CONFIRMED + → /todosã€todoType facetã€stats å’Œ dashboard ä¸­è¯¥é¡¹å‡æ¶ˆå¤±/å½’é›¶ +``` + +该链路ä¸åˆ›å»º `house_todo` è®°å½•ï¼Œä¹Ÿä¸æ”¹å˜æ—¢æœ‰æŒä¹…化待办的 RESOLVE 语义。 + +## ä¸‰ã€æˆ¿åŠ¡å·¥ä½œå°ç»Ÿè®¡å˜åŒ– + +房务角色调用: + +```http +GET /admin/profile/dashboard?period=today +Authorization: Bearer +``` + +`data.todoSummary` 新增: + +```json +{ + "total": 4, + "PENDING_FINALIZE": 1 +} +``` + +- é”®å固定为大写 `PENDING_FINALIZE`ï¼Œä¸Žå¾…åŠžæŽ¥å£ `stats`ã€`todoTypes[].typeCode` 共用åŒä¸€å¸¸é‡ã€‚ +- 最终确认åŽè¯¥å€¼å½’é›¶ï¼›å‰ç«¯åˆ·æ–°åˆ—è¡¨æ—¶åº”åŒæ—¶åˆ·æ–°å·¥ä½œå°æ•°æ®æˆ–使对应查询缓存失效。 + +## å››ã€å‰ç«¯å¿…须处ç†çš„现有问题 + +### 4.1 筛选器混用了“房务状æ€â€å’Œâ€œå¾…办类型†+ +å½“å‰ `src/views/housekeeper/todos/index.vue:220-227` 把以下值放在åŒä¸€ä¸ª `STATUS_OPTIONS` 中: + +```text +HOTEL_REPLY_TIMEOUT / PENDING_ARRANGE / +CLAIMING / IN_INQUIRY / PENDING_FINALIZE / EXCEPTION +``` + +ä½†åŒæ–‡ä»¶ `:370` 固定请求 `status=OPEN`,`:374` åˆæŠŠæ‰€æœ‰éžâ€œå…¨éƒ¨â€é€‰é¡¹éƒ½ä½œä¸º `todoType`,最终由 `:386` 请求待办接å£ã€‚ + +- `HOTEL_REPLY_TIMEOUT`ã€`PENDING_ARRANGE`ã€`PENDING_FINALIZE` æ˜¯åˆæ³• `HouseTodoType`。 +- `CLAIMING`ã€`EXCEPTION` 是房务业务状æ€ï¼Œä¸æ˜¯å¾…办类型,作为 `todoType` 请求会得到空结果。 +- `IN_INQUIRY` å·²ä¸å†æ˜¯é¡¶å±‚房务状æ€ï¼Œä¹Ÿä¸æ˜¯å¾…办类型。 + +å‰ç«¯åº”删除这三个无效 `todoType` 选项;如产å“ç¡®å®žéœ€è¦æŒ‰æˆ¿åŠ¡çŠ¶æ€ç­›é€‰ï¼Œåº”å¦è¡Œä½¿ç”¨å£°æ˜Žæ”¯æŒè¯¥å‚æ•°çš„æ•°æ®æºï¼Œä¸èƒ½ç»§ç»­æ··ä¼ ç»™ `/todos.todoType`。 + +åŒæ—¶ï¼Œ`src/api/housekeeper/todos.js:53` 的注释ä»å†™ `params.type`,实际页é¢å’ŒåŽç«¯å‡ä½¿ç”¨ `params.todoType`ï¼›è¯·åŒæ­¥ä¿®æ­£æ–‡æ¡£æ³¨é‡Šï¼ŒAPI è°ƒç”¨æœ¬èº«ä»æ˜¯ `:66-67` çš„ `/v3/admin/order/todos`。 + +### 4.2 标签级 `requirementId` 在映射时丢失 + +å½“å‰ `src/views/housekeeper/todos/index.vue:290-313` 把 `todoTypes[]` æ˜ å°„æˆ `reasonTags` æ—¶åªä¿ç•™äº† `typeCode/label/derived`,未ä¿ç•™æ ‡ç­¾è‡ªå·±çš„ `requirementId`ï¼›`:267` å’Œ `:453` åªä½¿ç”¨èšåˆè¡Œé¡¶å±‚ `requirementId`。 + +一订å•多标签时,顶层字段属于“主标签â€ï¼Œä¸ä¿è¯å°±æ˜¯ç”¨æˆ·ç‚¹å‡»çš„ `PENDING_FINALIZE` 标签。建议ä¿ç•™æ ‡ç­¾å­—段并按点击项分å‘: + +```js +const pendingFinalizeTag = row.todoTypes.find( + (item) => item.typeCode === 'PENDING_FINALIZE' +) + +openOrderDetail({ + orderId: row.orderId, + requirementId: pendingFinalizeTag?.requirementId, + claimScope: 'mine', +}) +``` + +实际组件ä»åº”å¤ç”¨çŽ°æœ‰ `OrderDetailModal`,传入: + +```vue + +``` + +所有 ID 凿Œ‰å­—符串处ç†ï¼Œç¦æ­¢è½¬ä¸º JavaScript `Number`。 + +### 4.3 完æˆåŠ¨ä½œ + +`PENDING_FINALIZE` 的处ç†å…¥å£æ˜¯è®¢å•详情内“最终确认â€ï¼Œä¸æ˜¯å¾…办 `RESOLVE`: + +1. 从点击标签å–å¾— `orderId + todoTypes[].requirementId`。 +2. 以 `claimScope=mine` 打开 `OrderDetailModal`。 +3. 用户执行一次“最终确认â€ã€‚ +4. æˆåŠŸåŽåˆ·æ–° `/v3/admin/order/todos` å’Œ `/admin/profile/dashboard`。 +5. 列表行ã€ç­›é€‰è®¡æ•°å’Œå·¥ä½œå°å¾½ç« åº”åŒæ­¥æ¶ˆå¤±/归零。 + +## 五ã€å·²å®Œæˆçš„åŽç«¯ä¸Žæµ‹è¯•çŽ¯å¢ƒéªŒè¯ + +- PR #5059 å·²åˆå¹¶åˆ° `dev-v3`,åˆå¹¶æäº¤ä¸º `989318c3925b`。 +- `hl-order-service-v3` TEST 部署任务 `fd8522fe` æˆåŠŸï¼Œ`8086/8186` åŒå®žä¾‹å¥åº·ã€‚ +- `hl-user-service` TEST 部署任务 `372a9f3e` æˆåŠŸï¼Œ`8081/8181` åŒå®žä¾‹å¥åº·ã€‚ +- 网关 API å®žæµ‹ï¼šè¿›å…¥å¾…æœ€ç»ˆç¡®è®¤å‰ `PENDING_FINALIZE=0`;测试需求进入 `PROCESSING/PENDING_FINALIZE` åŽï¼Œåˆ—表ã€facetã€`stats` å’Œ dashboard å‡ä¸º `1`;最终确认åŽå‡æ¢å¤ä¸º `0`。 +- TEST DB 对账:派生项出现时没有新增 `house_todo(PENDING_FINALIZE)`;最终确认åŽéœ€æ±‚为 `DONE/CONFIRMED`ï¼Œä¸¤æ™šé…æˆ¿ä»ä¸º `CONFIRMED`ï¼Œæˆ¿åŠ¡å½’å±žå’Œé…æˆ¿æ•°æ®å‡ä¿ç•™ã€‚ +- 真实调试 Chrome 已验è¯â€œå¾…æœ€ç»ˆç¡®è®¤â€æ ‡ç­¾å¯è§ã€ç­›é€‰åªå‰©ç›®æ ‡è®¢å•ã€æœ€ç»ˆç¡®è®¤åŽåˆ—表空æ€ï¼›æµè§ˆå™¨éªŒæ”¶ä»…作为å‰ç«¯å¯¹æŽ¥å‚è€ƒï¼Œä¸æ”¹å˜ä¸Šè¿°æŽ¥å£å¥‘约。 + +## å…­ã€å‰ç«¯éªŒæ”¶æ¸…å• + +- [ ] “待处ç†â€é¡µä»…以 `GET /v3/admin/order/todos` ä¸ºä¸»æ•°æ®æºã€‚ +- [ ] `STATUS_OPTIONS` ä¸å†æŠŠ `CLAIMING/IN_INQUIRY/EXCEPTION` 作为 `todoType` å‘é€ã€‚ +- [ ] 使用 `todoType=PENDING_FINALIZE` å¯ç­›å‡ºâ€œå¾…最终确认â€è®¢å•。 +- [ ] 完整渲染 `list[].todoTypes[]`,显示åŽç«¯ `typeLabel`。 +- [ ] 映射和点击事件ä¿ç•™ `todoTypes[].requirementId`。 +- [ ] 以 `orderId + 标签级 requirementId + claimScope=mine` 打开 `OrderDetailModal`。 +- [ ] 派生标签ä¸è°ƒç”¨å¾…办 `RESOLVE`。 +- [ ] 最终确认æˆåŠŸåŽåˆ·æ–°å¾…办列表和 dashboardï¼Œæ ‡ç­¾ä¸Žè®¡æ•°åŒæ­¥æ¶ˆå¤±ã€‚ +- [ ] 所有雪花 ID 凿Œ‰å­—符串é€ä¼ ã€‚