From 2c00668800ba5d8f5b6100cbad95116008c2d2de Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Mon, 22 Jun 2026 11:39:01 +0800 Subject: [PATCH] =?UTF-8?q?docs(admin):=20=E6=88=BF=E5=8A=A1=E6=9C=88?= =?UTF-8?q?=E5=BA=A6=E5=AF=B9=E8=B4=A6=20=E6=9C=88=E5=BA=A6=E7=8E=AF?= =?UTF-8?q?=E6=AF=94+PDF=E5=AF=BC=E5=87=BA=20+=20=E7=BC=BA=E5=8F=A3?= =?UTF-8?q?=E7=AD=94=E5=A4=8D=20(PR=20#4202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...¦_月度环比+PDF导出_缺å£ç­”å¤-修改接å£-管ç†åŽå°.md | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 changelogs-v2/2026-06/22_4201_4202_房务月度对账_月度环比+PDF导出_缺å£ç­”å¤-修改接å£-管ç†åŽå°.md diff --git a/changelogs-v2/2026-06/22_4201_4202_房务月度对账_月度环比+PDF导出_缺å£ç­”å¤-修改接å£-管ç†åŽå°.md b/changelogs-v2/2026-06/22_4201_4202_房务月度对账_月度环比+PDF导出_缺å£ç­”å¤-修改接å£-管ç†åŽå°.md new file mode 100644 index 0000000..eddcbb2 --- /dev/null +++ b/changelogs-v2/2026-06/22_4201_4202_房务月度对账_月度环比+PDF导出_缺å£ç­”å¤-修改接å£-管ç†åŽå°.md @@ -0,0 +1,89 @@ +# ã€ä¿®æ”¹æŽ¥å£Â·ç®¡ç†åŽå°ã€‘房务月度对账 新增月度环比 + PDF 导出(mmg ledger 缺å£ç­”å¤) (#4202) + +> **PR**: #4202 | **å·¥å•**: #4201 | **æœåŠ¡**: hl-order-service-v3 | **æ›´æ–°æ—¶é—´**: 2026-06-22 + +## âš ï¸ å…³é”®è¯´æ˜Žï¼ˆå…ˆè¯»ï¼‰ + +针对 mmg å馈的「ledger 月度对账页原型有 4 å— UI 当å‰åŽç«¯æ— ç«¯ç‚¹ã€ç¼ºå£ï¼Œé€é¡¹ç­”å¤ + è½åœ°ï¼š + +- ✅ **环比**:已加,`GET /monthly` çš„ `overview.monthOverMonth`ï¼ˆè§ Â§2)。 +- ✅ **PDF 导出**:已加,`GET /monthly/export?format=pdf`ï¼ˆè§ Â§3)。 +- 🟢 **间夜**:åŽç«¯**一直就有** `overview.roomNights`,å‰ç«¯ç›´æŽ¥æ¢å¤ã€Œæœ¬æœˆé—´å¤œã€å¡å³å¯ï¼ˆæ— éœ€åŽç«¯æ”¹åŠ¨ï¼‰ã€‚ +- â¸ï¸ **预付核销 / 预付余é¢**:维æŒç§»é™¤ï¼ˆä¸Žæ—¢å®šã€Œé¢„付先ä¸åšã€ä¸€è‡´ï¼‰ã€‚ +- â¸ï¸ **毛利**:**本轮ä¸åš**,原型「毛利ã€å¡è¯·æš‚䏿¢å¤ï¼ŒåŽŸå› è§ Â§4(数æ®çœŸç›¸ï¼‰ã€‚ + +é‡‘é¢ / 环比比率字段å‡ä¸º **String**(åŽç«¯ `@JsonSerialize`),å‰ç«¯æŒ‰å­—符串收。 + +--- + +## 1. 月度环比(新增 `overview.monthOverMonth`) + +`GET /v3/admin/house/reconciliation/monthly?month=YYYY-MM` çš„ `data.overview` **新增**一个嵌套对象 `monthOverMonth`(与上月åŒå£å¾„对比): + +| 字段 | 类型 | 说明 | +|------|------|------| +| `prevMonth` | String | 上月(YYYY-MM,如 "2026-05") | +| `prevRoomNights` | Integer | 上月间夜åˆè®¡ | +| `roomNightsRatio` | String | 间夜环比 %(本月较上月);**上月为 0/æ— æ•°æ®æ—¶ä¸º `null`** | +| `prevTotalAmount` | String | 上月应付åˆè®¡ï¼ˆå…ƒï¼‰ | +| `totalAmountRatio` | String | 应付环比 %;上月为 0 æ—¶ `null` | +| `prevOrderCount` | Integer | ä¸Šæœˆè®¢å•æ•° | +| `orderCountRatio` | String | è®¢å•æ•°çŽ¯æ¯” %;上月为 0 æ—¶ `null` | + +- 环比å£å¾„:`环比% = (本月 − 上月) / 上月 × 100`,ä¿ç•™ 2 ä½å°æ•°ï¼Œç¬¦å·ä¿ç•™ï¼ˆä¸‹é™ä¸ºè´Ÿï¼Œå¦‚ `"-12.50"`)。 +- **`ratio` 为 `null` æ—¶å‰ç«¯æ˜¾ç¤ºã€Œâ€”ã€**(上月基数为 0 无法定义增长率,åŽç«¯ä¸è¿” 0% 或 ∞)。 +- `/monthly/export?format=xlsx` 的概览å—也追加了 3 行环比(间夜环比 / 应付环比 / è®¢å•æ•°çŽ¯æ¯”ï¼‰ã€‚ + +## 2. PDF 导出(`/monthly/export` 加 `format` å‚) + +å¤ç”¨æ—¢æœ‰å¯¼å‡ºç«¯ç‚¹ï¼Œ**新增å¯é€‰æŸ¥è¯¢å‚ `format`**: + +`GET /v3/admin/house/reconciliation/monthly/export?month=YYYY-MM&format=pdf` + +| format | 行为 | Content-Type | +|--------|------|-------------| +| ä¸ä¼  / `xlsx` | 原 Excel 导出(**å‘åŽå…¼å®¹ï¼Œè¡Œä¸ºä¸å˜**) | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` | +| `pdf` | PDF å¯¼å‡ºï¼ˆæ¦‚è§ˆå— + 环比 + 按酒店账å•表,A4) | `application/pdf` | +| 其它值 | 业务错误(HTTP 200 + `code:808171`) | `application/json` | + +- PDF 文件å `house-reconciliation-{month}.pdf`;中文正常(æœåŠ¡ç«¯ Chromium 渲染 HTML)。 +- å‰ç«¯ã€Œç”Ÿæˆ PDFã€æŒ‰é’®ç›´æŽ¥ `window.open` / 下载该 URL å³å¯ï¼ˆå¸¦ `format=pdf`)。 + +## 3. ä¸‰ä¸ªã€Œä¸æ¢å¤ã€é¡¹çš„æ˜Žç¡®ç­”å¤ + +- **间夜å¡**:`overview.roomNights`(本月)+ æ¯é…’店 `hotels[].roomNights` 一直都有,å‰ç«¯æ¢å¤å¡ç‰‡å³å¯ã€‚ +- **预付核销 tab / 预付余é¢å¡**:维æŒç§»é™¤ã€‚月度对账当å‰åªè¦†ç›–现结(CASH_PAID),预付维度属「先ä¸åšã€èŒƒå›´ã€‚ +- **毛利å¡**:本轮ä¸åšï¼Œ**è¯·æš‚ä¸æ¢å¤**。原因:月度对账是「按酒店应付ã€è§†è§’,ä½å®¿åŸŸæ•°æ®åªæœ‰**æˆæœ¬**ï¼ˆå®žé™…æˆæœ¬ / å议价 / 实际æˆäº¤ä»·ï¼‰ï¼Œ**全域没有「客户为ä½å®¿ä»˜äº†å¤šå°‘ã€çš„æŒ‰é…’店收入**(定制ä½å®¿æ”¶å…¥æ†åœ¨è®¢å•äº§å“æ€»ä»·é‡Œã€æœªæŒ‰é…’店/晚拆分)。原型「毛利 = æ”¶å…¥ − æˆæœ¬ã€ç¼ºæ”¶å…¥è¿™ä¸€åŠï¼ŒçœŸå”®å–毛利需产å“/财务先定义「订å•ä½å®¿æ”¶å…¥å¦‚何归集到酒店ã€çš„å£å¾„åŽæ‰èƒ½ç®—,届时å•独立项å†é€šçŸ¥ã€‚ + +## 4. curl 实测(2026-06-22 测试æœï¼Œå·²é€šè¿‡ç½‘关) + +```bash +# 1) 月度对账(å«çŽ¯æ¯”) +curl 'https://api.test.1814.love:9443/v3/admin/house/reconciliation/monthly?month=2026-06' \ + -H 'Authorization: Bearer ' +# → data.overview.monthOverMonth = {"prevMonth":"2026-05","prevRoomNights":0,"roomNightsRatio":null, +# "prevTotalAmount":"0","totalAmountRatio":null,"prevOrderCount":0,"orderCountRatio":null} +# (è¯¥æœˆæ— çŽ°ç»“æ•°æ®æ•…å„ ratio=nullï¼›æœ‰æ•°æ®æ—¶å¦‚ "20.00") + +# 2) PDF 导出 +curl 'https://api.test.1814.love:9443/v3/admin/house/reconciliation/monthly/export?month=2026-06&format=pdf' \ + -H 'Authorization: Bearer ' -o recon.pdf +# → 200 application/pdf, %PDF- 开头(实测 141KB) + +# 3) é»˜è®¤ä»æ˜¯ xlsx(å‘åŽå…¼å®¹) +curl '.../monthly/export?month=2026-06' -H 'Authorization: Bearer ' -o recon.xlsx # PK zip +# 4) éžæ³• format +curl '.../monthly/export?month=2026-06&format=csv' ... # → 200 {"code":808171,"message":"导出格å¼éžæ³•,ä»…æ”¯æŒ xlsx/pdf"} +``` + +## 5. å‰ç«¯å¤„ç†å»ºè®® + +- 「本月间夜ã€å¡ï¼šæ¢å¤ï¼Œè¯» `overview.roomNights`。 +- 「环比 %ã€ï¼šè¯» `overview.monthOverMonth.*Ratio`,为 `null` 显示「—ã€ï¼Œå¦åˆ™æ˜¾ç¤º `值 + "%"`(注æ„带符å·ï¼‰ã€‚ +- ã€Œç”Ÿæˆ PDFã€æŒ‰é’®ï¼šä¸‹è½½ `/monthly/export?month=...&format=pdf`。 +- 「毛利ã€å¡ / 「预付ã€ç›¸å…³ UIï¼šä¿æŒç§»é™¤ï¼ˆå¾…产å“决议)。 + +## 6. å½±å“评估 / 回滚 + +- **兼容性**:`overview` 加字段ã€å¯¼å‡ºåŠ  `format` å‚,**å‡å‘åŽå…¼å®¹**(旧å‰ç«¯ä¸è¯»æ–°å­—段 / ä¸ä¼  format 行为ä¸å˜ï¼‰ã€‚ +- **回滚**:revert PR #4202 釿–°éƒ¨ç½² hl-order-service-v3(无 DB è¿ç§»ï¼Œçº¯ä»£ç ï¼‰ã€‚