yml2213
|
7542d547bf
|
feat: 新增客服备用金台账与后台用户中文显示名
- 新增备用金账户、流水、支出、对账与权限
- 后台用户支持中文显示名并同步备用金姓名
- 审计、登录记录、任务及工单操作人优先展示中文名
- 补充备用金与人工支出方案文档
|
2026-10-18 13:55:24 +08:00 |
|
yml2213
|
412d219cca
|
feat(claim): 支持固定H5订单号领取与订单兑换有效性后台控制
- 数据库新增 099_order_claim_status.sql 迁移,扩展 claim_status、claim_status_reason 等字段
- 后端新增 /claims/h5/:orderNo、UID提交、分销提交接口,保留原有 token 接口双轨兼容
- 增加兑换有效性强拦截:暂停/关闭/退款/取消订单精准阻断并返回友好提示
- 后台新增 POST /admin/orders/:orderId/claim-status 接口与审计日志记录
- 前端管理后台(订单列表、详情页)支持 H5 兑换状态展示、一键复制链接及暂停/关闭/启用弹窗
- 前端领取页面适配 /h5/:orderNo 路由及暂停/关闭等状态的异常展示
- 验证方式:运行前后端类型检查、全量单元测试(后端 674、前端 132)及全量构建编译均通过
|
2026-10-10 18: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
|
c115f5e944
|
fix(claim): 修复后台手动关闭任务后领取链接未失效的缺陷
1. 鉴权层激活 CLAIM_TERMINAL_STATUSES:在 getClaimContext 中增加 task 状态校验,对 closed 与 expired 终态任务实施 410 拦截并自愈更新关联 Token;
2. 仓储层新增 closeClaimTokensByTaskId():支持按 taskId 批量更新所有非 closed 状态的 Token 为 closed,彻底杜绝多 Token 或重发链接导致的历史活跃残留;
3. 后台关闭任务流程闭环:closeAdminTask 显式触发 closeClaimTokensByTaskId,确保任务关闭时关联领取链接立即失效;
4. 补充 CLAIM_TERMINAL_STATUSES 单元测试与完整排查分析方案文档。
|
2026-09-20 14:06:48 +08:00 |
|
 yml2213andCursor
|
e20505bc8e
|
style: 修复 pre-push Prettier 格式检查失败
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-15 10:47:38 +08:00 |
|
 yml2213andCursor
|
745eeaee35
|
fix(admin): 恢复任务重试/转人工/人工完结等后台写接口
删除咸鱼链路时误删了 retry、mark-manual-review、complete-manual-dispatch、regenerate-claim-link;现按 affiliate_dash + manual_dispatch 语义恢复,历史下线通道可人工完结但不可自动重试。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-14 17:32:26 +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
|
5c7c3e14e3
|
统一前后端代码格式化配置
|
2026-08-16 17:27:12 +08:00 |
|
yml2213
|
b0c77e5842
|
修复 lewan 换绑:旧号被 CT 回收时自动新取号出链
退号失败(含权限不足)不再卡住换绑,默认跳过并重新取号生成绑链;
CT 错误返回补充账号/vn 诊断信息,避免误判为后台角色权限问题。
|
2026-07-11 12:13:07 +08:00 |
|
yml2213
|
792680bd19
|
重构 lewan 履约:拆分发货模块并统一 registry 入口
将 task-finalization 拆为 dispatch/stock/return/redeem/confirm 等用例,
claim 与 admin 经 executor registry 调用;admin 退号仅清理虚拟号不核销。
|
2026-07-10 22:23:26 +08:00 |
|
yml2213
|
2fade9aba9
|
开放客服 kuaishou-lewan 换绑角色权限
与刷新角色一致,换绑改用 canOperateAssistedTask,
不开放重试/发货/退号等完整任务生命周期能力。
|
2026-07-10 18:30:50 +08:00 |
|
yml2213
|
042574dea3
|
继续收紧 TypeScript:ClaimIdentity 契约与 flow 出口类型
- 新增 types/claim-identity,统一 ClaimIdentity / Payload / AdminSummary
- 导出 KuaishouCloudFlow、KuaishouFeifeiFlow 作为 normalize 出口
- 生产路径 JsonObject 统一从 types/json 导入,去掉 rebind as any
- 前后端 claimIdentity 类型字段对齐
|
2026-07-10 15:56:25 +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
|
ca5433ada4
|
优化客服权限
|
2026-07-10 12:00:23 +08:00 |
|
yml2213
|
90fe910d1c
|
统一自动发货逻辑
后台准备和发货复用统一履约服务,更新提示文案。
|
2026-07-09 21:12:23 +08:00 |
|
yml2213
|
ffbc19a9db
|
移除快手小店以及 api
|
2026-07-09 21:03:39 +08:00 |
|
yml2213
|
01171c1761
|
修正快手行业电子凭证核销参数
|
2026-07-09 19:46:40 +08:00 |
|
yml2213
|
4d5b0d6fc6
|
优化履约路由并重命名乐玩通道
|
2026-07-09 10:49:33 +08:00 |
|
yml2213
|
9a6d083096
|
修复历史电子凭证任务操作入口
|
2026-07-08 17:44:32 +08:00 |
|
yml2213
|
3ad7c2e50e
|
优化快手电子凭证发码和手动处理
|
2026-07-08 17:28:01 +08:00 |
|
yml2213
|
904ecc9303
|
修改领取顺序,先核销
|
2026-05-31 11:58:12 +08:00 |
|
yml
|
1c50569ea9
|
添加快手 Cloud 换绑角色功能
|
2026-05-30 11:23:52 +08:00 |
|
yml
|
ccc350cfea
|
优化任务状态投影和部署文档
|
2026-05-28 11:12:40 +08:00 |
|
yml
|
dd6776c4e4
|
简化履约匹配并支持mock订单测试
|
2026-05-27 12:55:44 +08:00 |
|
yml2213
|
dfcc8982c6
|
优化快手云领取发货校验
|
2026-05-26 16:24:50 +08:00 |
|
yml2213
|
fb89110ff1
|
优化订单列表ui, 增加任务关闭
|
2026-05-26 13:34:12 +08:00 |
|
yml2213
|
6e85002724
|
优化履约账号优先级配置
|
2026-05-26 12:44:01 +08:00 |
|
yml2213
|
5c7e145766
|
完成后端类型与平台配置目录分组
|
2026-05-26 09:10:11 +08:00 |
|
yml2213
|
36dfc46884
|
优化后端目录命名与模块归位
|
2026-05-26 08:57:19 +08:00 |
|
yml2213
|
dea3023825
|
优化后端鉴权与日志安全
|
2026-05-26 08:21:11 +08:00 |
|
yml
|
2c7464b1eb
|
删除库存和旧回调管理
|
2026-05-25 23:07:19 +08:00 |
|
yml
|
2103416c7b
|
中性化库存凭据类型
|
2026-05-25 22:11:30 +08:00 |
|
yml
|
0caa38e690
|
清理旧消息和历史命名
|
2026-05-25 22:03:07 +08:00 |
|
yml
|
e7aa194dde
|
删除咸鱼旧链路
|
2026-05-25 21:46:39 +08:00 |
|
yml
|
17a615b8de
|
deduplicate task parsing and masking helpers
|
2026-05-21 18:50:07 +08:00 |
|
yml
|
16200b422b
|
后端迁移后台管理快手Cloud写侧
|
2026-05-21 17:05:54 +08:00 |
|
yml
|
cbf6b90313
|
后端迁移后台管理任务写操作
|
2026-05-21 17:02:50 +08:00 |
|
yml
|
41a2360adf
|
后端迁移后台管理共享读辅助
|
2026-05-21 16:55:42 +08:00 |
|
yml
|
2d3a279805
|
后端迁移后台管理库存写操作
|
2026-05-21 16:53:08 +08:00 |
|
yml
|
a27467bfad
|
后端迁移后台管理写侧基础工具
|
2026-05-21 16:51:32 +08:00 |
|
yml2213
|
91d74b3e59
|
修复小店核销bug, 链接10分钟
|
2026-05-14 16:31:56 +08:00 |
|
yml2213
|
486ba14dc4
|
优化连接过期验证与戒色信息-1
|
2026-05-14 14:42:30 +08:00 |
|
yml
|
a27b772b79
|
拆分后台写操作服务模块
|
2026-05-04 16:27:07 +08:00 |
|