From 3e6a4900e2332b1be56cba5255b8cc405c7f1aa3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 7 Sep 2026 11:48:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=AE=A0=E7=89=A9=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=95=B4=E6=94=B9=E7=9A=84=E4=B8=89=E6=9C=9F=E4=B8=8A?= =?UTF-8?q?=E7=BA=BF=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 以后排查时需要知道线上跑的是哪个二进制、哪些配置项是新加的、 哪几件事还卡在地图 key 与支付密钥上。 Co-Authored-By: Claude Opus 5 --- im/宠物模块整改上线记录-2026-09-07.md | 81 +++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 im/宠物模块整改上线记录-2026-09-07.md diff --git a/im/宠物模块整改上线记录-2026-09-07.md b/im/宠物模块整改上线记录-2026-09-07.md new file mode 100644 index 0000000..3e04c0d --- /dev/null +++ b/im/宠物模块整改上线记录-2026-09-07.md @@ -0,0 +1,81 @@ +# 宠物模块整改上线记录(2026-09-07) + +九条整改分三期做完,全部发到两台服务器。这份记录留给以后排查用:改了什么、 +线上跑的是哪个版本、哪些事情还卡在外部条件上。 + +## 线上版本 + +| | im.bchongw.com(47.106.181.28) | xim.bchongw.com(8.219.70.152) | +| --- | --- | --- | +| 后端二进制 | `add78d4fa08e1b4c00c5a13531ce6669d4431be7ff70b5c81f3188c64a539479` | 同左 | +| 发布路径 | `/www/server/xingyu-im/bt/xingyu-api` | `releases/pet-feed-20260907-112223` ← `current` | +| 管理端 | `/www/wwwroot/xingyu-admin/releases/20260907-112424` | `/www/wwwroot/xim-admin/releases/20260907-112410` | +| 迁移 | 037 – 041 全部已应用 | 同左 | + +提交:`ebf7189`(一期)、`a889cb4`(三期)。二期是纯客户端改动,服务端没有发版。 + +## 三期分别改了什么 + +### 一期:把发布这条链路跑通 + +- **定位**:`createPetAddress` 不再强制坐标。拿不到定位也能存地址,标成「未核验定位」, + 这条地址的打卡照常做,只是不比对距离。客户端给了三条退路:直接取 → 去系统设置开权限 → + 地图选点。根因是 `manifest.json` 里 `distribute.sdkConfigs` 是空的 `{}`,App 端没有地图 SDK。 +- **推荐价**:新增 `GET /api/v1/pet/feed-price`,按物种基准价 × 城市系数 + 时长加价算建议单价, + 规则在 `pet.feed_price_suggest_json` 里,改一次不用发版。用户改过就以他填的为准。 +- **先付后发**:发布页底部常驻合计,主按钮是「支付并发布」,走 `创建 → 下单 → 支付`。 + 没付成的任务留在「我的任务」可继续支付,超过 `pet.feed_unpaid_close_hours`(24 小时) + 由后台 worker 关闭。 +- **选宠物**:换成带头像的卡片选择器,缺免疫记录或照片当场标黄。 + +### 二期:界面与地址 + +- `components/PetSheet.vue` 底部抽屉替掉报名接单、发起申诉两处 `uni.showModal({editable:true})`。 +- 任务详情默认只展开今天与未完成的上门,其余折叠;打卡胶囊只有接单的喂养者可点。 +- `src/static/regions.json`(34 省 / 344 市 / 3273 区县,121KB,来自公开数据集 province-city-china,MIT) + 加 `components/RegionPicker.vue` 三级联动,用在发布代喂、送养、配种、喂养者四处; + 只有详细地址仍然手填。城市编码跟着提交,宠物页三个频道都能按城市筛。 + +### 三期:退款、后台增改删、悬赏 + +- **退款**:`pet_feed_refunds` 每笔一行,可分多次退到退完;`refunded_cent` 在任务与订单上同步累加。 + 渠道接通时按金额原路退回并带独立幂等键 `feed:<任务>:<时间戳>`;沙箱支付、手工托管、 + 没有渠道流水号的一律登记为「线下已退」。已结算的任务必须显式勾选「平台承担」才能退, + 喂养者余额不会被倒扣。 +- **后台增改删**:宠物可代建 / 编辑 / 软删(有进行中任务的删不掉,删除时相关送养配种一并下架 + 并通知本人);送养与配种可改文案城市、可下架、可软删;代喂任务可改备注、可取消 + (托管中的钱必须先退)。所有写操作进审计日志。 +- **悬赏**:`pet_feed_tasks.tip_cent`。悬赏跟着任务一起托管,结算时全额给喂养者, + 平台服务费只算基础报酬。上限 `pet.feed_tip_max_cent`(默认 200 元)。 + +## 新增的配置项 + +| 配置键 | 默认值 | 作用 | +| --- | --- | --- | +| `pet.feed_price_suggest_json` | 见迁移 040 | 推荐单价规则:物种基准价、城市系数、时长加价 | +| `pet.feed_unpaid_close_hours` | 24 | 创建后多少小时未支付自动关闭 | +| `pet.feed_checkin_min_gap_seconds` | 120 | 到达与喂食打卡的最小间隔,防摆拍 | +| `pet.address_purge_days` | 7 | 任务结束多少天后抹掉地址明文 | +| `pet.feed_tip_max_cent` | 20000 | 单个任务的悬赏上限 | + +管理端「宠物模块 → 宠物设置」里可以直接改,改完立即生效。 + +## 上线后的核对(两台都跑过) + +- 迁移 039 / 040 / 041 均已应用,新列 `pet_feed_tasks.tip_cent`、`pet_feed_tasks.refunded_cent`、 + `orders.refunded_cent`、`pet_addresses.emergency_cipher`、`pet_addresses.vet_hospital` 都在。 +- 地址城市码为空的记录 0 条;按 `cityCode=440300` 筛选命中全部招募中任务。 +- 余额与流水对不上的账户 0 个。 +- 超过 24 小时未支付的任务 0 个。 +- 自动确认在真实数据上跑过:示例数据里那个「待确认」任务超期后被后台自动结算给喂养者, + 账本与余额仍然一致。 + +## 还卡在外部条件上的 + +1. **地图 key(高德或腾讯)**:`manifest.json` 的 `sdkConfigs.maps` 需要 iOS / Android 两个 appkey。 + 没有它,地图选点会提示不可用,另外两条定位路径正常。 +2. **支付渠道密钥**:两台仍是 `payment.mode=sandbox`,渠道密钥全空。所以「支付并发布」在灰度期 + 要靠客服在管理端手工标记已托管,退款走「线下已退」登记。密钥到位后自动接上真实通道,代码不用改。 +3. **手机端重新打包**:一期二期的界面改动都在客户端,要在 HBuilderX 里重新编译发版。 +4. **保险自动投保**:方案里写了,但要先谈承保方,代码只留了 `insurance_no` 字段。 +5. **配种撮合**:功能已经跑通,但 `pet.mating_enabled` 仍然关着,等规则与资质完备再开。