Commit Graph
70 Commits
Author SHA1 Message Date
yml2213andCursor e20505bc8e style: 修复 pre-push Prettier 格式检查失败
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 10:47:38 +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 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 25b89bb503 优化:降低访问日志噪声并增加日志文件轮转 2026-08-30 16:59:11 +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 d56189fe59 完善数据库备份恢复链路 2026-08-23 14:39:30 +08:00
yml2213 6d7f9b5f3f 准备迁移1 2026-08-23 12:54:38 +08:00
yml2213 90ff15b627 短信发送失败增加冷却防连点限流并配置trust proxy恢复真实客户端IP 2026-08-22 19:10:06 +08:00
yml2213 1b8e02dd17 增加数据库慢查询观测与索引防线并收窄打手拼单分页查询 2026-08-22 18:40:11 +08:00
yml2213 15396822b5 本地Mock自定义店铺自动记忆沉淀为下拉可选项 2026-08-22 14:31:34 +08:00
yml2213 874b093a4b 新增大厅订单容量控制 2026-08-21 14:02:30 +08:00
yml2213 e6ab139071 修复容器测试并补订单回归 2026-08-21 12:29:19 +08:00
yml2213 b5d46b2381 全项目数据库性能优化 2026-08-20 23:04:52 +08:00
yml2213 6539e0fb21 新增打手端滚动公告 2026-08-20 20:04:43 +08:00
yml2213 c2305d419e 关闭旧商品匹配默认回退 2026-08-18 13:50:56 +08:00
yml2213 5330b55b75 完善接单平台通知配置 2026-08-17 13:54:01 +08:00
yml2213 9ed2e0d4fe 打手端流转记录改为后台配置开关控制,默认关闭
- 新增 WORKER_ORDER_TIMELINE_VISIBLE 配置(默认 false):打手端订单详情不展示流转记录
- 打手端 events 接口按开关拦截(关闭时 403)
- profile 接口下发 orderTimelineVisible 供前端判断
- 管理端流转记录不受影响,始终可见
2026-08-16 19:42:16 +08:00
yml2213 5c7c3e14e3 统一前后端代码格式化配置 2026-08-16 17:27:12 +08:00
yml2213 bc2909d6f2 打手端迁移至独立子域名 2026-08-16 16:08:38 +08:00
yml2213 e097ddad3d 支持领取链接长期有效 2026-08-11 14:06:29 +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 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 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 2227cda73d 修复打手短信验证码发送 2026-08-02 15:12:02 +08:00
yml2213 6e635b2499 优化后端-接单平台部分逻辑 2026-07-28 14:06:31 +08:00
yml2213 f0ba0fe17f 修复接单平台并发、分页与补资料 2026-07-28 10:15:44 +08:00
yml2213 a2587eda01 完善接单平台上传与物品规则 2026-07-25 15:56:18 +08:00
yml2213 01f46e4fc7 对接日志默认仅记录告警与错误
新增 LOG_INTEGRATION_LEVEL(默认 warn),压低 integration-*.log 体积;
失败类文案自动提升为 error,避免异常被过滤。
2026-07-10 21:17:55 +08:00
yml2213 3642ad8aec 配置改为数据库存储
将运行时 JSON 配置迁入 app_config_entries,启动时从文件导入并删除源文件。
2026-07-10 09:14:12 +08:00
yml2213 2380e28bcc 移除行业凭证回调开关 2026-07-08 11:38:11 +08:00
yml2213 81bfd8b078 增加行业凭证后台 token 配置 2026-07-07 23:00:24 +08:00
yml2213 92d819c616 增加feifei履约配置界面 2026-07-07 14:02:56 +08:00
yml2213 ddfa6c278f 接入多发货平台与电子凭证 2026-07-07 12:06:19 +08:00
yml2213 a27419a0b2 feat: 实现快手电子凭证三个出站回调接口
- 新增 send-callback-service.ts: 卡券发码回调 (eticket/send)
- 新增 consume-callback-service.ts: 核销回调 (eticket/consume)
- 新增 destroy-callback-service.ts: 销毁回调 (eticket/destroy)
- 三个回调均在对应入站接口处理成功后异步触发(fire-and-forget)
- 共享 sendCallbackEnabled 开关控制,默认关闭
- 新增 accessToken 配置项(OAuth获取)
- 新增 scripts/curl-send-callback.ts: 手动测试 curl 生成脚本
- docker-compose 添加 KUASHOU_INDUSTRY_ACCESS_TOKEN / SEND_CALLBACK_ENABLED 环境变量
2026-07-02 13:44:25 +08:00
yml2213 f38efa2edf 行业电子凭证接入
- 新增 4 个回调接口:send-code/destroy-code/query-code/consume-code
- 支持快手开放平台 MD5/HMAC_SHA256 签名验签
- send-code 回调自动创建 order/order_items/fulfillment_tasks/profiles
- consume-code 回调与既有 flow.consume 结构兼容
- isKuaishouCloudTask 同时匹配 kuaishou-industry executor_key
- claim 页面自动验证行业凭证 task,跳过核销码输入
- 退回时行业 task 跳过快手核销 API
- 新增 KUASHOU_INDUSTRY_* 环境变量配置
2026-06-30 17:33:51 +08:00
yml2213 693f4de45a 通知商家发码-ok 2026-06-30 15:57:58 +08:00
yml e8ba48d74f 设置云触手默认登录设备 2026-05-28 13:05:44 +08:00
yml e4c9873c8d 优化日志切分和保留策略 2026-05-28 12:32:13 +08:00
yml2213 a2bce8b272 增强后端 TypeScript 严格类型检查 2026-05-26 10:07:19 +08:00
yml2213 6d9f267593 统一91卡券环境变量命名 2026-05-26 09:56:52 +08:00
yml2213 779287f662 精简环境变量配置 2026-05-26 09:48:05 +08:00
yml e7aa194dde 删除咸鱼旧链路 2026-05-25 21:46:39 +08:00
yml 946f21039b [Snow Team] Merge config-fixer's work with conflict resolution 2026-05-21 23:20:40 +08:00
yml 0567da414c prep: commit previous optimization changes before team merge 2026-05-21 23:17:28 +08:00
yml 799de32428 [Snow Team] config-fixer: auto-commit work 2026-05-21 23:16:59 +08:00
yml 7513958a4c 优化配置文件 2026-05-21 19:29:00 +08:00
yml 84ca9cac09 后端拆分运行时配置模块 2026-05-21 14:06:49 +08:00
yml e812ea2cc4 refactor(ocr): remove subprocess mode — HTTP only
- ocr.js: Removed all subprocess/spawn logic (spawn, fs, path, process
  imports, resolveWorkerCommand, buildPythonPath, buildWorkerError,
  callOcrViaSubprocess, resolveOcrMode, runOcrCommand, etc.)
  HTTP is now the only mode. Added validation when OCR_BASE_URL is not
  configured. ~281 lines → ~80 lines.
- default.cjs: Removed projectRoot from ocr config (kept path import
  for data.root)
- runtime.js: Removed OCR_PROJECT_ROOT env var parsing
- runtime-config.js: Removed projectRoot from ocr type definition

All 5 exports preserved: recognizeTencentCaptcha,
recognizeImageCaptcha, batchRecognizeTencentCaptcha,
warmupLocalOcrWorker, closeLocalOcrWorker
2026-05-19 23:29:42 +08:00
yml bc5fd4212d feat(backend): refactor OCR client to support HTTP + subprocess dual mode
- runtime-config.js: add baseUrl field to ocr type definition
- default.cjs: add ocr.baseUrl default (empty string = subprocess mode)
- runtime.js: add OCR_BASE_URL env var parsing
- ocr.js: add HTTP mode (when OCR_BASE_URL set) alongside existing subprocess mode
  - resolveOcrMode() detects mode from runtimeConfig.ocr.baseUrl
  - callOcrViaHttp() calls FastAPI endpoints directly with payload
  - warmupOcrViaHttp() calls /health endpoint for HTTP mode warmup
  - callOcrRequest() routes between HTTP and subprocess based on mode
  - All 5 original exports preserved (recognizeTencentCaptcha, etc.)
  - Subprocess mode remains backward compatible (default when no OCR_BASE_URL)
2026-05-19 23:09:30 +08:00
yml2213 89ffc9b087 再跳回第 1 步 2026-05-14 16:07:17 +08:00