yml2213
|
b82f9c4063
|
fix(worker-platform): 补齐拼单份额超时自动处置机制与退回大厅流程
- 根因排查:此前超时扫描仅针对整单 in_progress,而拼单母单为 open 且 deadline_at 为空,导致打手超时的拼单份额无法被定时扫描命中与释放;
- 定时扫描:在 settleOverdueWorkOrders 中引入 listOverdueWorkOrderShares,自动扫描超时未提交资料的拼单份额(joined);
- 超时处置:新增 settleOverdueWorkOrderShare 事务处理,按母单 timeout_policy 释放或扣除押金,份额标记 cancelled,母单保持或恢复 open 状态重回抢单大厅,记录 timeout 事件并推送实时变更;
- 提交防呆:在打手提交拼单验收时检测个人份额是否已超时,超时则立即执行处置并拦截提交;
- 倒计时展示:在 mapWorkOrderForWorker 中根据 myShare.created_at + timeout_minutes 为拼单打手计算并展示个人履约截止时间;
- 质量验证:补齐拼单截止时间计算与处置链路测试,全量 676 个测试均通过,通过 npm run check 校验。
|
2026-10-11 14:53:56 +08:00 |
|
yml2213
|
d8ce40e346
|
feat(douyin-mashida): 彻底重构优化配置面板,支持一键填域名/订阅推送/网关自检并剔除冗余字段
- 剔除历史旧卡券时代废弃的 afterVerifyLink(去使用链接)与 afterVerifyMessage(通知正文)
- 面板新增一键填入当前域名、向开放平台一键订阅推送、停用推送以及网关连通与签名自检功能
- 业务配置重构为「基础接入与商户凭据」、「买家 H5 直充与发货私信」、「高级网关设置」三层清晰结构
- 后端与前端服务新增 /douyin-mashida/subscribe 与 /douyin-mashida/test-gateway 统一接口
验证方式:前端类型检查与打包构建通过,全量 132 项前端单测与 674 项后端单测全部通过
|
2026-10-10 20:05:46 +08:00 |
|
yml2213
|
4fce07a621
|
refactor(douyin-mashida)!: 纠偏——删掉自建的皮肤通道,改回复用 affiliate_dash
上一轮我把皮肤交付做成了「另建一套执行器 + 独立领取接口 + 只提交账号就结束」,
跟买家实际要走的过程不一致(真正的完成信号是「扫码绑定后的 UID == 买家填的 UID」),
而且核销还触发了老通知逻辑,给买家**又发了一条 /redeem** —— 买家收到两条链接。
本次按用户要求改回**完全复用仓库现成的 affiliate_dash 通道**(= 旧的快手皮肤自动发货)。
**删掉**
- 执行器 `douyin_mashida_skin`(含 registry/types/planner/bootstrap/路由白名单注册)
- `services/claim/claim-skin-service.ts`、`routes/claim-skin.ts`、`/api/v1/claim-skin` 挂载
- 迁移 096 的 `claim_submission_json` 全链路(task-repo / rows / inputs / task-detail /
admin-read-service 的 claimSubmission),并新增 **097 兜底迁移**把该列 DROP 掉
- 顺带清掉上一轮专为已删接口加的死代码(utils/http.ts 的 buildMessageSuccessPayload 等)
**改回复用**
- `resolveOrderItemClaimLink`:通用解析(只看订单项、不看执行器)→
`buildConfiguredClaimUrl(claimLinkBase, token)`;多履约单元取 task id 最小并告警;
**绝不回退** hash 形态的 `buildClaimUrl`
- `cert_link` 与付款后那条**唯一**消息共用同一个解析结果
- **核销后不再给抖音买家发第二条消息**(`shouldNotifyBuyerAfterVerify` 只放行非抖音 provider)
- 买家侧走既有流程:输 UID → 二维码 → 扫码绑定 → 比对 UID → delivered/REDEEMED;
在 delivered 分支 best-effort 核销平台券(幂等、失败只 warn,不拖慢买家响应)
- 后台回显链接改按 **order.provider** 判断(抖音用 `claimLinkBase`)
**SQL 守卫**:允许「删除历史迁移」,但强制要求「同时新增兜底迁移」配对
(修改历史迁移仍禁止),并把改动来源换成 `git status --porcelain`(否则未跟踪的新迁移看不见)
`npm run check`:tests 671 / pass 668 / fail 0 / skipped 3(含新增的物品图回退用例)
|
2026-10-09 16:13:39 +08:00 |
|
yml2213
|
56a8184576
|
feat(douyin-mashida): 皮肤自动发货(按内部 SKU 分流 + 领取链接 + 买家领取接口)
抖音码速达的皮肤类商品改为「自动发货 + 领取链接」:买家不用输订单号,点链接直接领。
**分流(按内部 SKU)**
- 平台闸门放行 `provider='douyin_mashida' && platform='doudian'`,走**独立分支**
(原有 91/快手路径一行未动,避免外溢)
- 判据:内部 SKU(`sku_order_list[].code`,即 order_items.sku_code)命中权威表
`AFFILIATE_DASH_SKU_MAPPING` → 新执行器 `douyin_mashida_skin`;未命中 → `manual_dispatch`
- 皮肤判定与商品图同源(都用那张权威表),保证「能路由 ⇒ 有图」
- 履约路由新增 `internal_sku` 匹配维度(`rules[].internalSku`,NFKC+去空白+小写,exact/contains);
旧规则缺 `matchField` 时默认 `product_name`,**归一化/优先级/回退顺序完全不变**
**执行器与领取 token**
- 新增 `douyin-mashida-skin-executor`:建 claim token、置 `link_generated/pending_claim`,
`resolveDeliveryLink` 返回本站路径式领取链接;注册进 registry、planner 分支、
bootstrap 种子 profile(`抖音皮肤自动发货`);进 `ROUTABLE_EXECUTOR_KEYS`
- token 粒度 = 一个履约单元一个(`claim_tokens.task_id` 唯一);一单多项时
cert_link/买家消息取 task id 最小的那个并告警
**cert_link 与发消息**
- 皮肤订单且该订单项已有 token 且配了 `claimLinkBase` → `cert_link = claimLinkBase/token`;
其它情况一律用 `certLink`(老行为不变)
- 领取链接**只认** `claimLinkBase`,绝不回退 `buildClaimUrl`/`orders.claimBaseUrl`
(那是 hash 形式的打手领取页,语义不同)
- 付款建单+发券成功后按 `messageTemplate`(`{link}/{sku}/{orderNo}/{productTitle}`)
经 `order.message` 发给买家;best-effort,失败只记 warn
**买家领取接口**
- `GET/POST /api/v1/claim-skin/:token`(限流、公开);详情含内部SKU/引流标题/商品图/
数量/金额/支付时间/动态表单字段;token 失效给明确 errorCode(404/410/409),不打 500
- 提交账号:先核销平台券再落记录(避免「记账了但券没核销」的资损),已提交幂等
**隐私**
- 买家游戏账号落 `fulfillment_tasks.claim_submission_json`(迁移 096),
**不进** `work_orders.material_json`(那是发给打手的素材);详情接口不返回券码明文/手机号/地址/open_id
|
2026-10-09 15:06:43 +08:00 |
|
yml2213
|
72606796b3
|
feat(douyin-mashida): 抖音码速达最小接入后端(消息建单/券码同步/兑换核销/退款作废)
- 签名:出网 md5(secret+Σ(名+值)+secret) 与推送 md5(secret+data+pub_time+topic+secret)
两套独立实现,含文档 golden 向量单测(与 91 大写 / affiliate_dash HMAC 都不通用)
- 进单:trade_TradePaid 推送 → 验签 → webhook_events 幂等 → order.orderDetail
→ upsertOrderFromSource(provider=douyin_mashida / platform=doudian)
- 精度:19 位订单号超出 JS 安全整数,JSON.parse 会把 p_id 抹成 ...000;
故解析后从原始 JSON 文本用正则抓回精确数字(单测同时证明"不修会错")
- 券码:迁移 094 redeem_certificates((provider,order_id) 唯一做发券幂等)
+ DYC 券码生成 + coupons.syncV2 同步(子单号优先、父单兜底)
- 兑换:POST /api/v1/redeem/lookup|confirm,按 orderNo+IP 限流;
核销成功后 order.message 通知买家(best-effort,失败只记错误日志)
- 退款/取消:作废未核销券;券已核销时打 WARN 资损告警(已消费不可回滚)
- 后台:GET/POST /api/v1/admin/platform-config/douyin-mashida,
secret 出参置空 + 掩码,掩码回写不覆盖原值
- 消息路由挂在全局 body parser 之前(app.ts),验签必须用 body 原始字符串
|
2026-10-09 12:00:50 +08:00 |
|
 yml2213andCursor
|
4a3b4ec14d
|
refactor(fulfillment): 固化 91 中文名→英文 SKU 权威映射表
91 继续用中文编码;解析优先查内置常量表,配置仅作临时覆盖,Admin 改为展示权威表。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-14 20:33:42 +08:00 |
|
 yml2213andCursor
|
b3aad0044c
|
refactor(fulfillment): 移除飞飞/乐玩通道,仅保留 affiliate_dash
新单只路由 affiliate_dash(未命中走 manual_dispatch);历史飞飞/乐玩任务保留只读 stub,避免订单重同步失败。同步清理 cloudtentacles 调度、Admin 写路径与相关 env。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-14 17:29:47 +08:00 |
|
yml2213
|
447d501f7b
|
修复快手appSecret意外修改问题
|
2026-09-13 10:42:32 +08:00 |
|
yml2213
|
5c7c3e14e3
|
统一前后端代码格式化配置
|
2026-08-16 17:27:12 +08:00 |
|
yml2213
|
316ee6d135
|
履约配置页 affiliate-dash 覆盖收尾:preferredMatchEnabled 开关补入平台配置 UI
- 分析结论:履约路由面板已含 affiliate_dash(开关/优先级/规则),职责划分成立
- 缺口修复:指定匹配优先开关此前无 UI 入口,现平台配置 affiliate-dash tab 增加 Switch
- 后端 effective 透出 preferredMatchEnabled;前端类型/panel 补齐
- 前后端 typecheck 通过,224 测试全绿
|
2026-08-05 17:52:14 +08:00 |
|
yml2213
|
3284fed7a1
|
新增 affiliate_dash 履约配置与商品映射(阶段 3)
- bootstrap CORE_PROFILES + routing ROUTABLE/DEFAULT_PRIORITY 接入 affiliate_dash
- planner 上下文 affiliateDash 块 + resolveDynamicAffiliateDashProfile
- product-resolution: 91 productNo→sku 映射匹配(skuMapping) + snapshot.affiliateDash
- prepare 前余额预检(getAffiliateDashWallet)
- AFFILIATE_DASH_SKU_MAPPING_JSON env 注入
- admin 后端接口(GET/POST 配置、match、products、wallet)+ 前端 Tabs 面板
- 联调:模拟 91 进单命中 affiliate_dash 路由, 未命中回退;前后端 typecheck + 212 测试通过
|
2026-08-05 15:08:41 +08:00 |
|
yml2213
|
3196e1ccdc
|
修复 kuaishou-lewan 多账号健康检查与平台配置展示
恢复 health 任务对全部账号的合并监控,补齐 React 后台多账号 UI 与账号选择,并将用户可见文案统一为 kuaishou-lewan。
|
2026-07-10 21:43:32 +08:00 |
|
yml2213
|
8bcd9bbd81
|
收紧后端 TypeScript:统一 Json 类型与 TaskContext 契约
关闭 allowJs;集中 JsonObject 定义并替换分散 any 别名;parseTaskContext 返回 TaskContext;任务详情 API 标注 AdminTaskDetailView;测试减少 as any。
|
2026-07-10 15:52:05 +08:00 |
|
yml2213
|
3642ad8aec
|
配置改为数据库存储
将运行时 JSON 配置迁入 app_config_entries,启动时从文件导入并删除源文件。
|
2026-07-10 09:14:12 +08:00 |
|
yml2213
|
ffbc19a9db
|
移除快手小店以及 api
|
2026-07-09 21:03:39 +08:00 |
|
yml2213
|
4d5b0d6fc6
|
优化履约路由并重命名乐玩通道
|
2026-07-09 10:49:33 +08:00 |
|
yml2213
|
ec23eb6af6
|
支持快手行业电子凭证多店铺授权
|
2026-07-08 14:13:15 +08:00 |
|
yml2213
|
2380e28bcc
|
移除行业凭证回调开关
|
2026-07-08 11:38:11 +08:00 |
|
yml2213
|
3940e59df6
|
补充行业凭证授权换 token
|
2026-07-07 23:17:16 +08:00 |
|
yml2213
|
81bfd8b078
|
增加行业凭证后台 token 配置
|
2026-07-07 23:00:24 +08:00 |
|
yml2213
|
177f72dd2c
|
优化feifei商品名映射
|
2026-07-07 15:12:48 +08:00 |
|
yml2213
|
6af2fe2e23
|
拆分feifei配置并修复商品查询
|
2026-07-07 14:59:22 +08:00 |
|
yml2213
|
92d819c616
|
增加feifei履约配置界面
|
2026-07-07 14:02:56 +08:00 |
|
yml
|
9172e1f98e
|
优化角色显示和订单查询
|
2026-05-31 19:54:21 +08:00 |
|
yml2213
|
9219ad18a5
|
增加订单号查询
|
2026-05-31 17:39:17 +08:00 |
|
yml
|
e8ba48d74f
|
设置云触手默认登录设备
|
2026-05-28 13:05:44 +08:00 |
|
yml
|
837e1c6e66
|
清理旧履约模型残留
|
2026-05-27 14:22:23 +08:00 |
|
yml
|
c1f3a48634
|
支持cloudtentacles覆盖规则
|
2026-05-27 13:25:15 +08:00 |
|
yml
|
c7e2a225bc
|
删除旧履约配置逻辑
|
2026-05-27 13:12:07 +08:00 |
|
yml
|
dd6776c4e4
|
简化履约匹配并支持mock订单测试
|
2026-05-27 12:55:44 +08:00 |
|
yml2213
|
e8010728a4
|
增加履约高级配置
|
2026-05-26 22:56:41 +08:00 |
|
yml2213
|
604f1bbf54
|
增加发货记录查询功能-1
|
2026-05-26 15:01:02 +08:00 |
|
yml2213
|
6e85002724
|
优化履约账号优先级配置
|
2026-05-26 12:44:01 +08:00 |
|
yml2213
|
d126b35579
|
优化后端代码质量基础
|
2026-05-26 10:48:30 +08:00 |
|
yml2213
|
5c7e145766
|
完成后端类型与平台配置目录分组
|
2026-05-26 09:10:11 +08:00 |
|
yml2213
|
7aef1a6d50
|
开启后端严格空值检查
|
2026-05-26 08:45:06 +08:00 |
|
yml2213
|
dea3023825
|
优化后端鉴权与日志安全
|
2026-05-26 08:21:11 +08:00 |
|
yml
|
0caa38e690
|
清理旧消息和历史命名
|
2026-05-25 22:03:07 +08:00 |
|
yml
|
e7aa194dde
|
删除咸鱼旧链路
|
2026-05-25 21:46:39 +08:00 |
|
yml
|
9aafddd624
|
断开快手后端旧依赖
|
2026-05-25 21:12:03 +08:00 |
|
yml
|
d58d483944
|
优化监控任务多账号配置
|
2026-05-25 17:44:42 +08:00 |
|
yml
|
30728c40be
|
增加xpush
|
2026-05-25 17:20:18 +08:00 |
|
yml
|
28c8575a11
|
优化 cloudtentacles 多账号管理与任务展示
|
2026-05-25 16:48:23 +08:00 |
|
yml
|
17a615b8de
|
deduplicate task parsing and masking helpers
|
2026-05-21 18:50:07 +08:00 |
|
yml
|
acd5c0d50e
|
后端迁移测试文件
|
2026-05-21 17:39:34 +08:00 |
|
yml
|
ce6a6af820
|
后端迁移云触手平台底座
|
2026-05-21 16:19:41 +08:00 |
|
yml
|
889be72125
|
后端迁移云触手后台编排
|
2026-05-21 16:16:14 +08:00 |
|
yml
|
a09b2d38de
|
后端迁移平台配置聚合服务
|
2026-05-21 16:14:21 +08:00 |
|
yml
|
104c5408d7
|
后端迁移平台配置服务入口
|
2026-05-21 16:11:44 +08:00 |
|
yml
|
37214d6b40
|
后端迁移平台配置云触手展示
|
2026-05-21 16:08:33 +08:00 |
|