Commit Graph
148 Commits
Author SHA1 Message Date
yml2213 0173efb277 feat(pdd): 店铺连续同步失败 3 次后熔断,停止自动重试
背景:生产上「木塔网游专营店」Cookie 已过期,每约 24 秒重试一次、每轮刷一条 ERROR 日志,
持续数天。Cookie 失效不会自愈,继续重试只刷日志、白白占用同步周期。

行为:
  - 失败 1~2 次:累计计数,继续重试;
  - 第 3 次:熔断,打一条显式 ERROR(含"更新 Cookie 会自动恢复"提示);
  - 熔断后:自动同步直接跳过,不再刷错误日志;
  - 恢复:更新 Cookie(后台编辑或浏览器插件)自动解除;手动同步成功一次亦可。
  熔断状态持久化在店铺配置里,容器重启后依然生效。

改动:
  - pdd-source-config-service:阈值常量 + consecutiveFailures/syncSuspendedAt/
    syncSuspendedReason 持久化字段 + 纯函数 resolvePddStoreFailureState /
    applyPddStoreBreakerState / isPddStoreSyncSuspended / shouldResetPddSyncBreaker。
  - pdd-sync-service:syncAllPddStores 跳过熔断店铺并上报 suspendedCount;
    syncStoreOrders 失败记录、成功清零(健康店铺不产生额外配置写)。
  - pdd-order-sync-job:上报熔断数,且存在熔断店铺时强制留在 INFO 级
    (否则"全部店铺已停同步"会因新单为 0 被降级成 debug 而不可见)。
  - 前端加「已熔断 · 停止重试」标签与类型字段。

顺带修掉一个隐患:saveAdminPddStore 收的是 Partial 载荷,normalizePddStoreItem
会为缺失字段产出 undefined,导致一次「只改店铺名」的保存就把熔断洗掉。
由 applyPddStoreBreakerState 回填既有状态解决。

验证:9 项熔断单测(含局部保存不洗状态、Cookie 变更解除熔断)。
2026-10-03 14:27:38 +08:00
yml2213andCursor 1239393fc2 perf: 筛选统计去掉 JSON 兜底,并补上 orders 覆盖索引
去掉 work_orders 堆访问后,JOIN 会把 orders 整表扫进 Hash Right Join。
领取页在快照新鲜时不再打上游;快手出网统一 10 秒超时。倒计时改为自适应间隔。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-01 15:05:38 +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 5e59a5fdb1 fix(order-service): 修复包含 Emoji 和孤立代理字符的订单在 PostgreSQL jsonb 下报错导致死循环重试进单的问题
1. 在 utils/json.ts 新增 sanitizeWellFormedUnicode、deepSanitizeUnicode 和 safeJsonStringify,自动清理空字节 (\0) 并将畸变孤立 UTF-16 代理字符 (Lone Surrogates) 安全转换为规范字符,杜绝 PostgreSQL jsonb 解析错误;
2. 拼多多订单映射器与通用进单服务 (order-service) 全面接入 Unicode 深度清洗与安全序列化,确保买家昵称/留言中的各类特殊 Emoji 和生僻字符平滑落库;
3. 数据库仓储层 (order-repo / order-item-repo) 针对 raw_payload_json、spec_json、item_snapshot_json 等 jsonb 字段增加兜底安全序列化保护;
4. 补充 utils/json.test.ts 与 pdd-order-mapper.test.ts 单元测试,覆盖畸变字符与空字节场景。
2026-09-19 11:40:02 +08:00
yml2213andCursor acfe7fd07e style: 修复订单与调度相关 Prettier 格式
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 13:48:43 +08:00
yml2213andCursor 40278a68fc chore(logging): 降噪 PDD 同步与发单消费者常态日志
将无新单/全跳过的处理完成日志降到 debug,并压缩 decisions 详情,避免 app 日志被按日切碎。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 13:48:30 +08:00
yml2213andCursor b7d246e5b9 fix(admin): 任务列表商品名与执行器标签改为中文展示
建单时不再把英文 sku 写入商品名,列表按映射反查中文名,并将 Affiliate Dash 等标签本地化。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 13:03:47 +08:00
yml2213andCursor 8eef95fe97 style: 修复 affiliate-dash http-client Prettier 格式
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 12:05:18 +08:00
yml2213andCursor 8e996e01fb fix(pdd): 停止旧单刷匹配日志,并修复订单列表商品显示为 0
同步时已有工单/匹配结果未变不再写日志;列表按 Number(order_id) 挂 items,并补齐 PDD goods_name 回退与嵌套商品解析。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 12:05:02 +08:00
yml2213andCursor 2e197f93e0 fix(claim): 透出 affiliate_dash 上游错误,便于排查提交 UID 失败
上游 4xx 不再一律打成 502 兜底文案;affiliate_dash 依赖错误优先展示真实 message。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 11:51:32 +08:00
yml2213andCursor e20505bc8e style: 修复 pre-push Prettier 格式检查失败
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 10:47:38 +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 0cbcb89dd8 feat(pdd): add realistic Bézier mouse trajectory simulation to generate 700+ char anti-content tokens 2026-09-14 14:03:07 +08:00
yml2213 f35e47e419 fix(pdd): integrate official sandboxed anti-content engine to resolve 40002 WAF error 2026-09-14 13:44:55 +08:00
yml2213 4f97275c80 fix(pdd-extension): 拼多多官方接口频控(40002)容错与轻量探测,避免有效 Cookie 被拒 2026-09-14 13:09:16 +08:00
yml2213 a47661e67e fix(pdd-extension): 增强 MMS Cookie 多维嗅探与 PASS_ID 校验,新增插件运行日志与升级 v1.1.0 2026-09-14 12:50:54 +08:00
yml2213 9fb27b0ad2 feat(pdd): 拼多多订单支持 out_sku_sn 匹配与浏览器插件加密保活
- 拼多多进单 Cookie 失效即时拦截与告警修复(支持 43001 会话过期等错误识别)
- 拼多多订单映射优先使用 out_sku_sn(外部商家编码)作为商品规格与工单匹配核心字段
- 新增 Chrome/Edge 浏览器扩展 (Manifest V3),支持端到端 RSA-OAEP + AES-256-GCM 信封加密自动保活
- 后台店铺管理新增插件配对面板、专属密钥管理与一键导入配置 JSON
2026-09-14 12:24:48 +08:00
yml2213 fea82bff36 style(backend): 格式化代码并修复floating-promises以通过pre-push检查 2026-09-12 17:46:47 +08:00
yml2213 8cc3aa2a35 fix(pdd): 拼多多商品名称仅展示规格spec,过滤冗长原标题 2026-09-12 16:53:30 +08:00
yml2213 ede9a87b97 feat(pdd): 支持根据数据库已有订单自适应翻页拉取,防高峰漏单
1. 新增数据库批量排查已有订单接口 findExistingPlatformOrderIds,利用 B-Tree 索引毫秒级判定当前页订单是否存在;
2. 优化 syncStoreOrders 支持自适应翻页拉取:当第 1 页全部为新订单时,自适应向后递增翻页拉取(支持 maxPages 默认 5 页,平滑限速 300ms);
3. 翻页终止自适应判定:当拉取到包含数据库已有旧订单的页面时立即 break 停止翻页,兼顾高性能与不漏单;
4. 扩展全局配置支持 maxPages(自适应最大翻页页数),支持后台管理员在 UI 设置与立即拉单参数联动;
5. 新增单元测试 pdd-sync-service.test.ts,验证全部新订单自适应翻页与命中已有订单提前终止行为。
2026-09-12 16:25:37 +08:00
yml2213 c8f7e48746 feat(pdd-cookie): 持久化保存Cookie校验状态时间并在失效时发送内部告警通知 2026-09-12 15:26:40 +08:00
yml2213 ffa3374483 feat(pdd-sync): 默认拉取已发货订单并支持配置单次拉单上限与抓取状态 2026-09-12 15:16:39 +08:00
yml2213 44e752d205 feat(pdd-ui): 新增管理后台拼多多店铺CRUD与Cookie有效性实时检测功能
1. 订单快照优化 (pdd-order-mapper.ts):
   - 在 item_snapshot_json 中完整保留拼多多原始报文快照全量字段,确保无信息截断。

2. 后端 Cookie 有效性校验接口 (pdd-client.ts, platform-config/pdd.ts):
   - 新增 PddClient.testCookie 与 POST /api/v1/admin/platform-config/pdd/test-cookie 接口。
   - 支持通过轻量接口请求即时测试 Cookie 合法性,精准识别有效状态(返回在线订单数)与失效/频控状态。

3. 前端管理面板开发 (PddPlatformPanel.tsx, AdminPlatformShopsPage.tsx):
   - 在平台配置页面新增【拼多多 (PDD)】专属 Tab 面板。
   - 提供拼多多全局同步开关与轮询间隔配置。
   - 支持店铺完整 CRUD:添加店铺、编辑店铺、删除店铺、启用/停用切换。
   - 支持弹窗内即时【测试此 Cookie 有效性】(无需先保存即可验证)及列表行内一键测活与单店铺立即同步。
2026-09-12 14:27:40 +08:00
yml2213 424c320183 feat(pdd): 原生内嵌拼多多多店铺订单同步子服务与anti-content纯算引擎
1. 纯算引擎 (pdd-anti-content.ts):
   - 100% 纯 TypeScript 原生还原 0as anti-content 算法,零 npm 依赖(仅基于 Node.js 原生 zlib 与 crypto)。
   - 包含 22 个环境特征 Tag TLV 组包、zlib 标准压缩、4 字节尾部扰动盐与 64 字符动态位移 Base64 编码,单次耗时 < 0.1ms。

2. MMS 接口客户端与数据映射 (pdd-client.ts, pdd-order-mapper.ts):
   - 基于原生 fetch 实现高可用 MMS 请求,支持拼多多网关毫秒级服务器时间校准 (/api/server/_stm)。
   - 实现拼多多订单状态与字段规范映射为平台 SourceOrderEvent,精准保留买家留言与充值账号信息。

3. 多店铺配置与防风控错峰调度 (pdd-source-config-service.ts, pdd-sync-service.ts):
   - 支持多店铺账号配置持久化(PostgreSQL app_config_entries 与本地 JSON 双模兜底)。
   - 实现店铺间轻量错峰拉取机制,避免并发峰值触发平台 40002 频控。

4. 内存级自动进单与派单流转:
   - 拉取新订单后在 Node.js 内存中直接调用 upsertOrderFromSource(),自动完成 orders/order_items 入库、商品规则匹配与打手大厅工单 (work_orders) 实时广播。

5. 调度器与管理端 API (scheduler-service.ts, platform-config/pdd.ts):
   - 注册 pdd_order_sync 定时任务(默认 20s 轮询),提供管理端店铺配置查看、保存、删除及手动立即同步接口。
   - 所有新增代码均遵循中英双语注释规范,并通过类型检查与单元测试。
2026-09-12 14:12:11 +08:00
yml2213 076b113ae5 feat(kuaishou-industry): 实现电子凭证自动核销推进器与查码流程优化
- 新增 voucher-auto-consume-service,对非发单平台大厅待发布任务实现生成即核销与发码成功闭环核销
- 严格保留发单平台待发布工单(pending_material/unassigned)在大厅发布时核销逻辑
- manual-executor 在任务生成进入 MANUAL_REVIEW 时直接触发核销
- send-code-service 在发码出站回调成功后自动调度非大厅任务的凭证核销
- 优化 query-code-service 查码接口,避免发码初期误报 4012002 订单不存在
- 标记废弃 kuaishou_feifei 渠道模块
- 补齐 voucher-auto-consume-service 单元测试用例
2026-09-10 10:01:40 +08:00
yml2213 de63daf1ac 优化订单履约分流与后台筛选 2026-09-02 11:59:38 +08:00
yml2213 2aa8769661 改造实时事件缓存同步 2026-08-17 17:32:02 +08:00
yml2213 18dad9b0fe 增加订单实时状态同步 2026-08-17 14:51:51 +08:00
yml2213 81ae04dae0 接入 ESLint 并清理未使用代码
- 前后端接入 ESLint 10 扁平配置(typescript-eslint 类型感知检查 + react-hooks/react-refresh),新增 lint / lint:check / lint:fix 脚本并纳入 check 链路
- 清理全部 no-unused-vars 与 no-useless-assignment 警告,修复 floating promises、正则转义等问题
- 删除确认无引用的死代码(markKuaishouCloudBindUrlRefreshFailed、未使用 helper 等)
2026-08-16 18:04:55 +08:00
yml2213 5c7c3e14e3 统一前后端代码格式化配置 2026-08-16 17:27:12 +08:00
yml2213 a7de443cb9 优化 不在频繁报错 试 91 订单失败 2026-08-10 16:51:45 +08:00
yml2213 bcde47ef97 彻底修复 lewan 自动发货问题-8-8-2 2026-08-08 23:43:29 +08:00
yml2213 6e41d7e0db 彻底修复 lewan 自动发货问题-8-8 2026-08-08 23:08:05 +08:00
yml2213 e8eab6e689 fix(kuaishou-industry): 修复电子凭证发货回调并发导致 807000 获取并发锁失败
同一 oid 的发货回调可能被多个来源并发调度(内存重试链 timer、worker_scan
兜底扫描、快手重复推送 send-code 后的再次调度),快手侧对同一 oid 有并发锁,
并发请求会返回 807000「获取并发锁失败」。

- runKuaishouIndustrySendCallbackForOid 增加进程内 in-flight 互斥,
  正在执行时其它调度直接跳过,由当前执行链路决定成功或按 backoff 重试
  (try/finally 保证所有 return 路径释放)
- listKuaishouIndustryVouchersForSendCallbackRetry 增加 maxAttempts 参数
  及 SQL 条件 COALESCE(send_callback_attempt_count,0) < ,缩小扫描集
2026-08-05 20:05:43 +08:00
yml2213 769d41655a 优化履约匹配:指定匹配(91中文名→sku映射)最高优先 + 映射键归一化
- 91 商品编码全部为中文名(幸运币90个等),运营按中文名→affiliate_dash sku 配置显式映射
- resolveFulfillmentRoute 新增 preferredExecutorKey:映射命中强制优先(规则之前),停用/不可用回退原逻辑
- matchAffiliateDashSku 归一化:NFKC 全角→半角、去空白、小写,先精确再遍历
- preferredMatchEnabled 配置(默认 true,可一键回退,不耽误现有 cloud/feifei 生产)
- 测试 +9(221 全绿);行为验证:映射命中/全角/空格命中,未映射回退
2026-08-05 16:44:37 +08:00
yml2213 7fc3d60588 新增 affiliate_dash 回调路由与幂等去重(阶段 5)
- POST /api/v1/open/affiliate-dash:验签 → 查任务(404 重试) → webhook_events 幂等闸门 → 状态同步
- migration 013:webhook_events(provider+event_id 唯一)
- task-repo findAffiliateDashTaskByOrder(仿 feifei 同构 SQL)
- notify-service:去重闸门在找到任务之后,任务未匹配不被 eventId 永久拦截
- typecheck + 212 测试通过;前置错误分支脚本验证通过
2026-08-05 16:07:33 +08:00
yml2213 867ffd2f3c 新增 affiliate_dash 履约 executor(阶段 2)
- executor 常量/守卫 + affiliate-dash-executor(preparePaidTask/resolveDeliveryLink)
- 履约业务实现:prepareAffiliateDashTask(幂等建单, client_order_no=task_no, data 透传 91单号/game_account)
  + syncAffiliateDashTaskStatus(状态合并: delivering→redeeming / delivered→核销→redeemed /
  ship_failed→retry_pending / cancelled→closed)
- registry 注册 + 测试(212 全绿)
- 真实建单联调通过(线上 skin.khhao.com,幂等不重复扣款)
- 修复 POST /orders 响应 data.order 映射层级
2026-08-05 14:56:36 +08:00
yml2213 a6ba5f1c7f 新增 affiliate_dash 发货平台客户端与签名(阶段 1)
- 平台配置接入:runtime-config/types/defaults/env-overrides/app-config-keys 增加 affiliateDash
- affiliate-dash 平台客户端:请求签名(§3.1 app_key+body_sha256)、回调验签(§3.2 timingSafeEqual)、
  http-client 封装(超时/错误归一/全链路日志)、订单/交付/钱包/商品接口封装
- 单测 12/12 + 全量 211 通过,真实联调拉取线上商品 33 个验证签名链路
- 新增 affiliate_dash 对接文档 v2(含契约验证结论与深度分析)
2026-08-05 14:51:40 +08:00
yml2213 4bd2c174c5 快手发码数据接入发单平台工单侧
- 新增 sync-work-orders-from-send-code 服务:91 先到则回填 shopId/补建工单/凭证回填 material_json;91 未到则兜底建单建工单
- order-service 与 ninetyone order-service 改用 findLatestOrderByPlatformOrderId,放宽 shopId 查重避免重复建单
- work-order-repo 新增 listWorkOrdersByPlatformOrderId 供兜底查重
- send-code-service 挂接同步逻辑并吞错,不影响发码主流程
- ProductRulesPanel 新增店铺列
- .gitignore 忽略 send_code/ 与 .reasonix/
2026-08-05 11:22:24 +08:00
yml2213 9c0d43535e Merge remote-tracking branch 'origin/main' into dev 2026-08-01 19:27:19 +08:00
yml2213 70e64155bc 拆分接单平台超长文件,按域组织代码
- worker-platform-service.ts (2733行) 拆为 worker-service/admin-service/mappers + index 聚合
- worker-platform-repo.ts (2456行) 拆为 repositories/worker-platform/ 目录(types/shared/worker-repo/work-order-repo)
- AdminWorkerPlatformPage.tsx (2784行) 拆为主页面 + panels/ 目录(7 个面板文件)
- 引用方统一改指向 index 聚合,行为不变
2026-08-01 16:44:20 +08:00
yml2213 9053a06481 有效期改成 30 天 2026-07-27 13:08:48 +08:00
yml2213 a2587eda01 完善接单平台上传与物品规则 2026-07-25 15:56:18 +08:00
yml2213 d7f9918d06 增加卡券销毁冻结状态校验 2026-07-23 11:32:57 +08:00
yml2213 3d760f987c 优化券码操作类型, 增加手动销毁 2026-07-12 18:46:30 +08:00
yml2213 b0c77e5842 修复 lewan 换绑:旧号被 CT 回收时自动新取号出链
退号失败(含权限不足)不再卡住换绑,默认跳过并重新取号生成绑链;
CT 错误返回补充账号/vn 诊断信息,避免误判为后台角色权限问题。
2026-07-11 12:13:07 +08:00
yml2213 50d32be0ea 降低云触手 bind_info 限频(110001)命中率
识别中文过于频繁错误并指数退避;bind_info 加长间隔与短缓存;
领取轮询放慢并去掉同轮重复 probe,减轻上游压力。
2026-07-10 21:07:19 +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