yml2213
|
3ab897963d
|
perf(db): 打手端「我的订单」概览加覆盖索引与短缓存
这是数据库累计耗时第一的热路径:32 天 130 万次调用(0.5 次/秒),平均 99.8ms,
但名下订单多的打手会退化到 4.5~9 秒。EXPLAIN (ANALYZE) 定位到根因:
查询只用到 8126 个工单 id,规划器却选了「work_orders 全表顺序扫 + Hash Join」——
为几千个 id 扫 9.6 万行宽表(500MB),单这一步 4.1 秒。
1. 迁移 084:给查询真正需要的列建覆盖索引(id + INCLUDE status/assigned_worker_id/
reward_amount/acceptance_json)。把那次全表扫变成 index-only scan,代价从 31015 降到约 5k,
规划器自然改选索引;索引 34MB,是堆表的十五分之一。生产实测同一查询 14.5 秒 → 1.5 秒(冷缓存)。
试过用 LATERAL 强制回表,规划器会把它拉平成同样的 Hash Join,所以只能从索引侧解决。
迁移在事务内执行,故用普通 CREATE INDEX(不用 CONCURRENTLY)。
2. 概览读取加 5 秒短缓存:把"计算次数"与"页面轮询次数"解耦。
只缓存读取——会话校验与 settleOverdueWorkOrders(写副作用)每次照常执行,否则会漏结算。
验证:后端 532 项单测全绿(新增 1 项守卫,覆盖索引列与缓存位置都纳入断言)。
|
2026-10-01 13:12:42 +08:00 |
|
yml2213
|
1ca15e9025
|
perf(db): 统计金额落到列上、会话刷新节流、补齐保留与内存治理
背景:生产 32 天内 >500ms 慢查询从 2.4k/天涨到 1.3 万/天(09-26 尖峰 14.3 万),
pg_stat_statements 显示后台工单列表族占 57%、打手端 visible_orders 占 27%;
同时 backend 容器十天从 194MB 涨到 754MB(768MB 限额的 98%),贴顶后整体变慢。
1. 新增迁移 083:work_orders 增加派生列 source_order_amount_fen,并从
material_json.source.orderAmountFen 回填(只认 15 位以内整数,与 JS/SQL 口径一致)。
统计查询原来每行要解析 1.2KB JSON(全表约 132MB)且同一表达式求值两次,
生产实测 3.5~4.4 秒;改走派生列后 COALESCE 短路,未命中列的行才回退 JSON/orders.total_amount,
口径与改造前完全一致。写入点:createWorkOrder / updateWorkOrder 各一处,并加静态守卫。
2. worker_sessions.last_seen_at 从"每个请求都写"改为"5 分钟才写一次":
32 天被写了 3300 万次(占 DB 总时间 2.8%,并堆出 14% 死元组)。仍用一条语句返回鉴权有效性
(EXISTS target AS valid),不能因为不写就让上层 401。
3. 保留策略补上 work_order_events(71.7 万行 / 269MB,此前完全没纳入清理,只增不减),
新增配置 retention.workOrderEventDays(默认 180 天)与 WORK_ORDER_EVENT_RETENTION_DAYS 出口。
4. 内存治理:compose 后端限额 768m→1g 并显式设置 V8 老生代上限(--max-old-space-size=768),
避免贴 cgroup 上限后 GC 抖动;新增每 10 分钟的进程内存快照日志(rss/heapUsed/heapLimit),
用于区分"正常 GC 曲线"与"真泄漏"。
5. 限流桶加 5 万条硬上限:key 里含请求体字段(collect 的 orderNo)时可被构造成高基数,
只按过期清理挡不住内存增长。
验证:后端 530 项单测全绿(新增 11 项,含派生列/会话/保留的静态守卫与解析函数单测)。
|
2026-10-01 12:55:09 +08:00 |
|
yml2213
|
cb8b249e57
|
feat(worker-platform): 实现打手寄卖白名单权限控制与存量发布打手平滑过渡
1. 新增数据库迁移 082_worker_consignment_whitelist.sql,worker_users 表增加 can_consign 与 consignment_activated_at 字段,存量在 consignment_submissions 提报过的打手默认自动开启;
2. 打手端提报接口 publishWorkerConsignment 增加白名单权限服务端强校验拦截(403 consignment_permission_required);
3. 管理后台打手管理表格增加「寄卖权限」实时 Switch 开关列与打手详情抽屉权限展示,支持客服即时开通或关闭打手寄卖权限;
4. 打手端我要寄卖页面在未开通权限时展示专属白名单引导卡片,一键呼起联系客服开通寄卖弹窗;
5. 补充寄卖权限拦截与路由单测,前端59项单测与后端507项单测全部通过。
|
2026-09-21 13:30:33 +08:00 |
|
yml2213
|
0b4ee964ed
|
feat(pdd): 引入拼多多原始订单暂存仓 pdd_raw_orders 与两段式解耦流水线
1. 数据库新增 081_pdd_raw_orders.sql 迁移,创建 pdd_raw_orders 原始暂存表及索引;
2. 新增 pdd-raw-order-repo 仓储,支持原汁原味批量暂存、pending 单据消费、状态回填与重置;
3. 重构 pdd-sync-service 为采集暂存(Staging)与业务进单(Ingestion)两段式解耦流水线,实现断点续传;
4. 管理后台路由接入 raw-orders 原始流水查询及 replay 一键历史单重放 API。
|
2026-09-19 11:58:28 +08:00 |
|
yml2213
|
2e8c9715b6
|
fix(migration): 079 建冻结幂等索引前先去重历史重复冻结并退还多冻押金
生产首跑 079 在 uniq_worker_wallet_ledgers_consignment_publish_freeze
索引上 23505:历史存在同提报单两条 consignment_publish 冻结流水
(如提报单 5),正是该索引要防的二次冻结缺陷的脏数据产物。
与 079 处理重复绑定工单同套路——先清数据再加约束:
- 每组(worker+提报单)保留最早一条冻结流水,多余行仅改 payload
标记 consignment_publish_superseded(移出押金口径与索引范围,原行留审计)
- 多冻的钱退还钱包:退额 = LEAST(多冻总额, 冻结池实有),绝不无中生有;
写 deposit_release 修正流水(kind=consignment_publish_dedup_refund)
- 同一打手多条多余流水先按钱包聚合再退,避免 UPDATE..FROM 漏退
- 再建幂等索引
已在一次性 Postgres 完整复现生产路径验证:078+脏数据 → 079/080 迁移
成功、钱包退回多冻 ¥20、索引生效拦截第三次冻结
|
2026-09-17 13:34:39 +08:00 |
|
yml2213
|
563e548b2e
|
feat(consignment): 补齐寄卖前端权限门控,收口调拨状态与运营体验
权限门控(P1-8 剩余):
- 新增 resolveAdminPermission(sessionPermissions, code):会话接口的最新权限列表优先,
接口异常才回退登录时的本地快照;空数组也判无权限,避免"刚被收回权限仍能点"。
- 寄售仓库面板:consignment.manage 控制手动入库/编辑/作废/退单回库/匹配开关(无权限时开关禁用)。
- 寄卖提报面板:consignment.review 控制审核入库/驳回。
- 接单平台页:无 consignment.view 不渲染两个寄卖 tab,并把 URL/localStorage 的旧选择拉回工单页。
数据约束(P2-19 剩余):
- 迁移 080:allocation_status 历史非法值归位「待安排」(备注留痕)后加 CHECK(待安排/已安排),
并顺手修正 077 遗留的"收集链接/玩家提交"权限描述文案。
- 编辑接口拒绝直接改 allocationStatus(400 consignment_allocation_status_update_forbidden)。
运营体验:
- 两个面板补 isError 错误态与重试;审核通过/驳回加 confirmLoading 与提交中守卫(防双提交)。
- 待审徽标改用后端真实总数(原来只统计当前页);编辑弹窗押金不再兜底 ¥100(会误写押金)。
- 履约拦截弹窗冷静期文案不再硬编码"3 天",改为按商品规则设定。
- 核实并撤回"倒计时时区偏移"误报:deadlineAt 为带 Z 的 ISO,前端无偏移问题。
验证:后端 412 例(409 通过)、前端 21 例(新增 5 例权限解析)全绿,
typecheck / lint / format / check:sql / build 通过;迁移 001→080 在全新空库跑通并在 dev 库应用。
|
2026-09-16 20:39:52 +08:00 |
|
yml2213
|
632dddc4c3
|
fix(consignment): 下线 H5 收集链接渠道并封闭寄卖履约状态机
下线定向收集链接(H5 填报)整条线,提报统一走接单平台打手端:
- 删除前端 ConsignmentCollectPage、consignment-public 服务与 /consignment-collect/:token 路由
- 删除后端公开路由 routes/consignment.ts、consignment-public-service 与管理端 /consignment/links 三接口
- 迁移 079 删表 consignment_collect_links、删列 consignment_submissions.link_id,
source_type 的 collection_link 归并为 worker_portal 并替换 CHECK
修复手工入库/编辑的凭据与截图静默丢失:后端统一按 credentialsJson ?? credentials、
screenshotsJson ?? screenshots 读取(入库/编辑/审核入库三个入口)。
按"已验收一律禁止撤销"封闭状态机:
- 撤销寄售履约加状态白名单(in_progress|pending_acceptance|problem)+ 事务内 FOR UPDATE
锁单 + UPDATE 带 status 条件(0 行 409)+ 原因必填 + 清空指派/时限/验收草稿痕迹
- 库存改状态一律带条件:撤销要求 bound_work_order_id 命中本工单;作废/回库要求未被
进行中工单占用(被挡时提示具体工单号);079 加部分唯一索引并清理历史重复绑定
- 工单终止统一解绑回库:打手撤单/取消指派/退回大厅/撤单/打手退单申请/超时处置接入
releaseConsignmentInventoryBindingForWorkOrderWithClient(售后不改工单状态,无需接入)
- 回库路径保留运营的 allow_matching 开关设置(不再强制开启),前端文案同步更正
顺带修掉资金与归属的同源缺陷:
- 押金归属与重冻金额改取不可变的冻结核销行,审核改派不再"退给错人/向错人扣款"
- 新增 assigned_worker_id 拆开"卖家"与"被指派履约人",占库不再覆盖卖家
- PUT /inventories/:id 禁止直接改 status;发布接口补 requireActiveWorker
- 押金冻结/释放后补推钱包实时事件;迁移 079 给发布冻结加台账幂等唯一索引
验证:后端 401 测试/398 通过/3 skip(新增 5 例回归),前端 16 通过;
两侧 typecheck、lint:check、format:check 与 check:sql、build 全绿。
迁移 079 未经真实数据库执行(本环境无 Postgres),上库前请先 dry-run。
|
2026-09-16 20:05:49 +08:00 |
|
 yml2213andCursor
|
4a6215e816
|
feat(consignment): 苏尔南寄卖接入打手端押金履约
打手可直接提报寄卖,关联 worker 与履约押金后指派交枪;后台去掉旧收集链接管理,提报审核与库存/工单流程对齐接单平台。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-15 16:00:33 +08:00 |
|
yml2213
|
1aa6dba931
|
feat(consignment): 新增和平精英寄卖库存管理、定向收集审核与工单智能匹配履约
|
2026-09-14 11:39:15 +08:00 |
|
yml2213
|
061a5d897f
|
feat(worker-platform): add worker withdrawal blacklist and admin actions
|
2026-09-13 11:32:42 +08:00 |
|
yml2213
|
d1e06f362e
|
feat(category): 接单平台支持二级分类目录与接单大厅联动展示及限额优化
|
2026-09-12 18:45:56 +08:00 |
|
yml2213
|
4c6c53d818
|
优化后台任务与订单按订单号搜索性能
|
2026-09-04 21:58:44 +08:00 |
|
yml2213
|
84a8f138d4
|
优化接单平台工单查询性能
|
2026-09-04 21:22:35 +08:00 |
|
yml2213
|
bf167d98ed
|
新增财务角色与财务报表并完善后台权限
|
2026-09-02 13:58:03 +08:00 |
|
yml2213
|
de63daf1ac
|
优化订单履约分流与后台筛选
|
2026-09-02 11:59:38 +08:00 |
|
yml2213
|
b832279c1f
|
feat: split worker login device limits by type
|
2026-08-30 21:58:13 +08:00 |
|
yml2213
|
535cefd4de
|
修复:恢复 PostgreSQL 集成测试并规范工单搜索条件
|
2026-08-30 17:04:35 +08:00 |
|
yml2213
|
79d8f84ac9
|
perf: optimize worker order query hot paths
|
2026-08-30 15:30:46 +08:00 |
|
yml2213
|
02c9de8b9c
|
feat(ops): 数据保留清理、CORS 白名单与上传失败回滚
- 新增每日数据保留清理任务:按保留期清空原始报文、删除过期
事件/审计记录,批量幂等可重跑;067 迁移补齐清理索引并清理
冗余索引,check-sql-guard 增加防线
- 生产 CORS 改为显式来源白名单(CORS_ALLOWED_ORIGINS),禁用
通配符,非通配响应补充 Vary: Origin
- 文件上传任一步失败时回滚已上传对象,清理失败记录 warn 日志
- 新增 HTTP/CORS 与 PostgreSQL 集成测试;若干文件仅 prettier 重排
|
2026-08-30 13:59:01 +08:00 |
|
yml2213
|
04dc363320
|
修复押金与待解冻资金处理
|
2026-08-28 22:22:26 +08:00 |
|
yml2213
|
f20ff3018f
|
feat(打手): 支持个人追加免押额度
|
2026-08-28 21:36:54 +08:00 |
|
yml2213
|
e680792161
|
feat(接单): 好友赠送冷却支持分钟单位
|
2026-08-28 20:17:47 +08:00 |
|
yml2213
|
e189811617
|
将退单审核文案明确为打手退单
|
2026-08-23 18:19:47 +08:00 |
|
yml2213
|
003c3e9208
|
统一取消订单申请审核文案
|
2026-08-23 18:13:37 +08:00 |
|
yml2213
|
75d94140ed
|
增加接单工单客服备注
|
2026-08-23 17:51:40 +08:00 |
|
yml2213
|
844f071aab
|
修复提现申请冻结余额
|
2026-08-23 16:51:32 +08:00 |
|
yml2213
|
3df271b30c
|
后台新增RBAC权限模型支持按角色配置接单管理权限
- 新增 admin_roles/admin_permissions/admin_role_permissions 三表与种子数据(059迁移)
- 接单平台全部管理路由从固定角色切换为细粒度权限校验
- 撤单按动作二次校验:退回大厅与取消订单分别要求对应权限
- 管理员账号页新增角色权限配置卡片(admin专属,带审计日志)
- 权限更新走事务保证原子性;session实时解析权限确保修改立即生效
|
2026-08-23 16:04:10 +08:00 |
|
yml2213
|
1b8e02dd17
|
增加数据库慢查询观测与索引防线并收窄打手拼单分页查询
|
2026-08-22 18:40:11 +08:00 |
|
yml2213
|
2224dd06d3
|
打手端待审撤单与未处理反馈订单归入问题单分组并标注来源角标
|
2026-08-22 15:04:30 +08:00 |
|
yml2213
|
6ac77c0124
|
售后处置为补救完成或问题不成立时自动退还原追缴金额
|
2026-08-22 13:54:58 +08:00 |
|
yml2213
|
7f6a291628
|
新增验收报酬待解冻配置并修复待解冻结算漏入队与重复释放流水
|
2026-08-22 13:38:17 +08:00 |
|
yml2213
|
6aec4a7b40
|
新增好友赠送验收模式支持打手资料提交加好友冷却与模板配置
|
2026-08-22 11:19:49 +08:00 |
|
yml2213
|
ba35d27976
|
新增打手改昵称卡功能默认一张且一年冷却
|
2026-08-22 10:20:10 +08:00 |
|
yml2213
|
f4d32a7c07
|
增加售后相关的
|
2026-08-21 14:30:00 +08:00 |
|
yml2213
|
874b093a4b
|
新增大厅订单容量控制
|
2026-08-21 14:02:30 +08:00 |
|
yml2213
|
2fbfaa0143
|
展示打手提现统计
|
2026-08-21 00:05:04 +08:00 |
|
yml2213
|
361b84931f
|
完善支付宝提现收款码
|
2026-08-21 00:00:05 +08:00 |
|
yml2213
|
b5d46b2381
|
全项目数据库性能优化
|
2026-08-20 23:04:52 +08:00 |
|
yml2213
|
92afc32525
|
测试修复-1
|
2026-08-20 22:45:19 +08:00 |
|
yml2213
|
942cbcab68
|
完善账号冻结与VIP免审核
|
2026-08-20 20:42:03 +08:00 |
|
yml2213
|
e05a6797a3
|
新增接单模板价格同步
|
2026-08-20 20:24:00 +08:00 |
|
yml2213
|
20b1066ba3
|
新增打手问题反馈
|
2026-08-20 19:56:10 +08:00 |
|
yml2213
|
e504b3a207
|
新增打手撤单审核
|
2026-08-20 19:43:03 +08:00 |
|
yml2213
|
12ca943170
|
优化打手注册和列表筛选
|
2026-08-20 09:52:51 +08:00 |
|
yml2213
|
7b92d6b219
|
增加每日接单排行榜
|
2026-08-19 18:55:04 +08:00 |
|
yml2213
|
323b9ea34c
|
增加后台会话撤销并统一拼单业务状态
|
2026-08-18 18:36:48 +08:00 |
|
yml2213
|
b2eaf3b6c7
|
修复接单注册审核与拼单状态校验
|
2026-08-18 18:16:48 +08:00 |
|
yml2213
|
ee79195f47
|
完善拼单状态与份额验收流程
|
2026-08-18 18:02:43 +08:00 |
|
yml2213
|
cbfc9bff03
|
修复映射迁移重复执行
|
2026-08-18 15:10:03 +08:00 |
|
yml2213
|
cf874b5429
|
优化模板匹配展示并修复映射迁移
|
2026-08-18 15:04:42 +08:00 |
|