Files
kefu/im/宠物模块整改上线记录-2026-09-07.md
Your NameandClaude Opus 5 3e6a4900e2 记录宠物模块整改的三期上线情况
以后排查时需要知道线上跑的是哪个二进制、哪些配置项是新加的、
哪几件事还卡在地图 key 与支付密钥上。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 11:48:00 +08:00

5.4 KiB
Raw Permalink Blame History

宠物模块整改上线记录(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 仍然关着,等规则与资质完备再开。