Commit Graph
161 Commits
Author SHA1 Message Date
yml2213 b1089f37b2 refactor(web): 拆分 PlatformRock 大屏为容器 + 9 个子组件(1306 → 最大 335 行)
- PlatformRock.tsx 335 行:保留全部 state、loadData/loadTokens、useEffect、
  handler 与顶层布局;默认导出名不变,App.tsx 的 lazy 导入未改
- platformRock/ 子目录:tokenColumns 329、RockStrategyCard 267、
  PurchaseTokenModal 183、RockTokenTable 156、RockMetricCards 124、
  VoucherPreviewModal 95、RockTokenFilterBar 76、UidEditModal 47、types.ts 6

state 归属与更新时机、请求次数与参数、useEffect 依赖语义均未改变;子组件 props
显式声明类型,无 any;行级异步 handler 随表格下沉,state setter 经显式类型 props 传入。

验证:
- SSR 快照 renderToString 拆分前后字节一致(40920 bytes)
- jsdom 交互差分:拆分前后 23 个检查点的 DOM 快照与 API 调用日志完全一致
  (覆盖采购、UID 修正、解冻、释放、熔断、筛选/搜索/翻页、保存配置、连通性测试)
- 原文件应保留的 230 行代码逐字命中
2026-10-06 19:43:29 +08:00
yml2213 c9e35d5d90 perf(web): 路由级懒加载,修复失效 useMemo 与 HMR 全页刷新
- 11 个页面改为 React.lazy;Login 与 MainLayout 保持同步加载(未登录用户与
  登录后首帧的必经路径);新增统一占位 RouteFallback,替换权限校验处重复的 div
  首屏静态资源 gzip 497.7 kB → 268.4 kB(-46.1%),>500 kB 体积警告消失
- PlatformUsers 的 columns/memberColumns/merchantColumns 每次渲染都重建,
  使依赖它们的 items 的 useMemo 完全失效;三个回调 useCallback 化、
  三个列定义 useMemo 化,让 memo 真正命中
- useAuth/AuthContext 拆到 store/authContext.ts,使 store/auth.tsx 只导出
  AuthProvider 组件,消除 react(only-export-components) 导致的 HMR 整页刷新
  (同步更新 7 处引用)
- MainLayout 未使用的 catch 参数清理

oxlint:5 warnings → 0 warnings / 0 errors。
2026-10-06 19:43:21 +08:00
yml2213 ae71bc99b8 refactor(handler): 按业务域拆分 merchant.go(847 → 最大 182 行)
纯文件级移动,无行为变更:
- merchant.go            结构体、构造函数与跨域共用辅助(mapKeys/pageParams)
- merchant_product.go    商品目录与分配
- merchant_order.go      订单、人工/测试下单与发货链接
- merchant_wallet.go     钱包、积分流水与管理员调账
- merchant_api_client.go API 客户端与回调订阅
- merchant_member.go     成员与角色
- merchant_platform.go   平台侧租户管理

校验:与 HEAD 的声明行 diff 为空,MerchantHandler 方法数 41 → 41。
2026-10-06 19:43:13 +08:00
yml2213 24fa6a97a0 refactor(delivery): 按职责拆分 delivery.go(1162 → 最大 249 行)
纯文件级移动,无行为变更:
- delivery.go            常量、DeliveryService 结构、构造与依赖注入
- delivery_types.go      对外 DTO 与 deliveryHTTPError
- delivery_provider.go   渠道取消/同步与 result_data 维护
- delivery_query.go      订单查询与发货状态构建
- delivery_bind.go       绑定与绑定结果查询
- delivery_submit.go     提交发货与提交阶段状态机
- deliveryGoodID 并入 delivery_helpers.go,链接管理并入 delivery_link.go

校验:拆分前后 55 个 func/type/const 声明完全一致(无缺失、无多出、无重复)。
2026-10-06 19:43:05 +08:00
yml2213 80e2bbf875 fix(rock): 上游地址改为以数据库配置为准,并消除 baseURL 数据竞争
GetConfig 从不把 rock_configs.base_url 回写到客户端,main.go 又硬编码了
https://0666.pro,导致后台改上游地址「保存那一刻生效、进程重启后失效」,
数据库里的值被静默忽略且无任何提示。

- 新增 model.RockDefaultBaseURL 统一默认值来源
- 新增 RockService.ApplyConfigToClient,启动时把 DB 地址同步到客户端
- UpdateConfig 改用 client.SetBaseURL 立即生效,不再直接写字段
- RockClient.baseURL 原为裸字段,被 HTTP 请求线程与库存巡检 goroutine 并发
  读写(数据竞争),改为 sync.RWMutex 保护并新增 BaseURL/SetBaseURL
- ClaimTokens/RefreshToken/RedeemSkin 的 Origin/Referer 跟随配置地址
- 空值回落默认地址,末尾斜杠自动裁剪

为保持该提交可编译,同一次改动把 rock_service.go(1177 行)按域拆分为
8 个文件(最大 221 行):rock_service / rock_bindlink / rock_stock /
rock_assign / rock_bindcheck / rock_redeem / rock_recover / rock_snapshot。
35 个声明块全部有归属,无遗漏无重复;迁移文件 012 受 checksum 保护故未改动。

验证:TestRockServiceBaseURLFromConfig 覆盖「改地址→立即生效→重启→仍生效」;
并发用例在 -race 下通过;全量测试通过。
2026-10-06 19:42:58 +08:00
yml2213 d423fc652c chore(build): 新增 make test/lint/fmt 并修复 testdb 连接串缺陷
- make test 自动拉起并等待 PostgreSQL 就绪;测试用临时 schema 隔离,不污染开发库
- 新增 make test-db / lint / fmt
- 修复 testdb.withSearchPath:原实现用 url.Values.Encode() 重编码整个查询串,
  把 TimeZone=Asia/Shanghai 变成 Asia%2FShanghai,pgx 原样传给服务端后报
  "unknown time zone Asia%2FShanghai",导致数据库起来后集成测试依然全挂。
  改为只追加 search_path,并补测试锁定该行为。
2026-10-06 19:42:49 +08:00
yml2213 d821fe13df fix(security): 分离 JWT 与数据加密密钥并新增启动安全体检
.env 中 JWT_SECRET 仍逐字节等于 .env.example 的示例值,且 DATA_ENCRYPTION_KEY
未设置、按 config.go 的回退逻辑实际等于 JWT_SECRET。任何见过仓库的人都能伪造
管理员 JWT,并解密库中全部 API Client / 回调密钥密文。

- JWT_SECRET 与 DATA_ENCRYPTION_KEY 改为各自独立的强随机值
- 新增 Config.SecurityWarnings():示例密钥 / 未分离 / release 下开调试日志均告警
- 新增 cmd/reencrypt_secrets:默认只预演,-apply 才写库;幂等,坏数据不中断整轮
- 新增 docs/密钥轮换说明.md;.gitignore 忽略 .env.bak*
- release 模式下关闭 OPEN_API_DEBUG
2026-10-06 19:42:42 +08:00
yml2213andCursor a2c4eb59b6 fix(dlc): 发货重试不再改写订单号
代练仓按原单号回查能不能发货。随机后缀查不到,正式单会失败。已有队列时应续发原单,不能换号。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 18:45:08 +08:00
yml2213andCursor c85b9f4173 feat(rock): 同一提货号过期后重取二维码
轮询绑定时向 0666 换一条新的活动链接,提货号不变。下游只展示返回的链接。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 18:08:27 +08:00
yml2213andCursor 4b8fc76f36 feat(rock): 绑定错误可直接改买家 UID,提货号继续留在原订单
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 17:47:02 +08:00
yml2213andCursor 0967ecc5db feat(rock): 库存列表直接显示 0666 编号和完整提取码
本地序号和上游编号不是同一个,按 0666 上的编号就能对上库存和兑换记录。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 11:49:47 +08:00
yml2213 3741f5ae73 feat(rock): 实现方案B智能自愈,支持买家手滑填错UID时确认为扫码角色UID自愈绑定 2026-10-06 11:04:44 +08:00
yml2213andCursor 717392b195 feat(rock): 未扫码绑定的使用中链接可释放回库存
历史残留绑定不再占住提货链接,退款后可以把还没扫上的库存分给下一单。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 22:13:17 +08:00
yml2213andCursor 4c68103217 feat(routing): 渠道配置页把 Rock 作为独立履约策略展示
最新的 Rock 商品之前被算进第一平台,配置里也无法单独选择 Rock 库存池。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 21:15:20 +08:00
yml2213andCursor 8c43fb4569 fix(delivery): 将第一平台发货出站超时调到 30 秒
常态提交约 11 秒,15 秒上限会在上游偶发变慢时提前断开,可能把仍在处理的订单记成失败。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 19:57:07 +08:00
yml2213 4f23ae389d fix(rock): 补充买家更新UID时Token期望UID同步更新,保障自建发货页重入一致性 2026-10-05 19:31:43 +08:00
yml2213 9e260059ee feat(rock): 关联业务工单升级为双单号清晰展示(系统工单号 + 创建商户单号)
1. 后端批量反查商户单号:在 RockService.ListTokens 中支持批量反查关联订单创建时由调用方传入的 ClientOrderNo(商户单号),并拓展支持通过商户单号进行全局关键词模糊搜索;
2. 管理后台双单号排版升级:在 Rock 管理表格中将「关联业务工单」升级为双行呈现——第一行高亮展示内部统一系统工单号 (FO2026...),第二行辅助展示外部电商/商户原始单号 (如 test4 / 拼多多单号),两行均支持一键独立复制;
3. 单元测试全覆盖:补充商户单号自动挂载关联与按商户单号模糊检索的自动化单测,确保对单溯源精准无误。
2026-10-05 19:18:52 +08:00
yml2213 262376e603 fix(ui): 修复侧边栏选中高亮状态并为凭据列添加商品精致缩略图
1. 修复侧边栏导航选中高亮丢失:在 MainLayout 的 getSelectedKey 路由映射中补齐 /platform-rock 与 /platform-products,确保进入页面时左侧「商品管理」父菜单自动展开,「Rock发货与库存风控」高亮激活,并增加品牌蓝内嵌发光细条指示;
2. 凭证列新增商品微光缩略图:在 Rock 管理表格的「发货结果图片」列左侧加入 44x44 的圆角立绘小缩略图,支持悬浮微光放大动效与点击一键弹出深海蓝发货凭据大图预览。
2026-10-05 19:13:59 +08:00
yml2213 604c9d1912 fix(delivery): 提货页买家字段优先展示识别到的真实游戏角色昵称
1. 优化买家身份呈现:当外部订单未传递 buyer_name 时,不再展示单薄的横杠 "-",而是优先展示扫码识别到的游戏角色名(如「罡舍」);
2. 完善多级兜底回退:依次按 游戏角色名 -> 外部买家昵称 -> 游戏UID 优先级回退,确保买家打开提货页具备强烈的游戏角色归属感。
2026-10-05 19:08:03 +08:00
yml2213 5c3fd92738 fix(delivery): 提货详情页自动回填 Rock 绑定的游戏角色名与区服
1. 解决提货页历史已交付订单缺失角色名的问题:在 buildDeliveryState 中新增自动回溯机制,若订单 ResultData 缺失角色名或区服,自动从关联的 rock_tokens 表提取 actual_role_name 与 actual_channel;
2. 自动修正并持久化:回填成功后自动修补至 fulfillment_orders.result_data,确保后续无需重复反查,提货页与凭据大图立即可见真实游戏昵称。
2026-10-05 19:03:50 +08:00
yml2213 372a13e86d fix(delivery): 隐藏上游单号并对齐无角色发货结果展示
1. 隐藏内部与上游单号:彻底移除提货页面顶部展示的内部工单号 (FO2026...),以及凭据图片中生成的官方单号行与表格凭证单号,防止暴露上游平台来源;
2. 对齐无角色发货结果展示:当订单无游戏角色名(为空或为 "-")时,提货页面结果卡片与 Canvas 生成的深海蓝凭据大图统一不渲染游戏角色项,消除多余占位横杠;
3. 两端信息项保持完全一致:提货结果卡片与发货凭据图片统一按照「游戏区服 -> 兑换账号/UID -> 时间」一致排版,干净清爽。
2026-10-05 18:59:36 +08:00
yml2213 bf3f3a3626 feat(delivery-voucher): 优化发货凭据为一键复制深海蓝高清图并补齐商品本地图片
1. 管理后台 Rock 表格优化:将原「官方发货凭证(FulfillId)」列升级为「发货结果图片」列,提供一键「复制结果图」与「高清预览」Modal,点击即可自动生成凭据大图并直接写入剪贴板(支持在微信/QQ客服聊天框中直接 Ctrl+V 粘贴图片);
2. 商品图片本地缓存与展示修复:从官方 HAR 提取黑色 ROCK 长袖 T 恤与蓝色运动服上衣高清立绘(rock_black_tshirt.webp / rock_blue_sportswear.webp),优化 productImage 自动识别与 Delivery 提货页图片自适应居中,彻底消除灰色占位块;
3. 标杆级发货凭据绘制重构:参考腾讯官方电竞风格设计,重构 640x960 视网膜双倍高清 Canvas 凭据绘制(深海蓝微光渐变背景、顶部微光加粗「兑换成功」、正圆形双层光环立绘、详细角色区服参数对齐、底部翡翠绿发光胶囊按钮),全方位超越 0666 官方粗糙原图;
4. 履约结果字段持久化:后端发货成功后同步持久化角色名、游戏大区与 UID 至 fulfillment_orders 结果报文,确保提货页区服与角色信息完整呈现。
2026-10-05 18:52:41 +08:00
yml2213 78e2fe4c6a fix(delivery): 禁用Rock二次生成二维码并治理上游110001频控报错
1. 业务防乱(专属通道锁定):提货页面一旦生成二维码后,直接禁用'重新生成二维码'按钮并锁定游戏UID输入框,杜绝Token浪费与绑定混乱;
2. 频控治理(前端3秒冷却):手动点击'检查扫码状态'增加3秒倒计时防抖冷却,且对'过于频繁/110001'错误进行平滑提示,不再触发大红报错;
3. 频控治理(后端瞬时防抖与软降级):RockService增加800ms内存并发安全防抖缓存,当上游返回110001时自动优雅降级返回等待扫码状态,不抛出HTTP 400错误。
2026-10-05 18:25:35 +08:00
yml2213 08a0e74cd0 fix(rock): 修复空闲库存为0时误将已分配订单判定为补货中并拦截发货的严重漏洞
1. 根因修复(状态机死锁):当一笔订单分配了池中最后一个可用Token后,空闲库存降为0。原PrepareDelivery仅检查AvailableStock<=0,导致已锁定Token的订单在发货校验时被误判为'库存补充中'并硬性拦截发货;
2. 逻辑重构:PrepareDelivery增加已预占Token识别,若当前订单已持有using或bound状态的专属Token,直接豁免空闲库存校验,放行扫码与发货;
3. 协议对齐:在ClaimTokens与RefreshToken中补全Origin与Referer请求头;
4. 单元测试与方案文档:新增TestRockProvider_PrepareDelivery_ZeroStockWithAssignedToken用例,5项Rock专项单测与全量Service测试100%全绿通过,方案文档追加7.5节证据与复盘记录。
2026-10-05 18:19:40 +08:00
yml2213 1df60e5fd5 fix(rock-ui): 修复Rock平台凭据配置项被浏览器误识别触发密码自动填充的问题
1. 根因防御(账密陷阱 Honeypot):在配置表单头部注入隐藏的 dummy username/password 输入框,阻断 Chrome/Edge 密码管理器将 BaseURL 和 BearerToken 误判为网站登录凭据;
2. 属性隔离:为 Base URL 和 Bearer Token 分别显式指定独有 name、id 以及 autoComplete 属性(off / new-password);
3. 样式重置:在全局 CSS 中添加 autofill 伪类样式重置,清除浏览器默认侵入的淡蓝/黄色背景色。
2026-10-05 16:41:16 +08:00
yml2213 83870843ed fix(rock): 修复兑换发货401未鉴权错误与买家角色名提取解析
1. 根因修复(兑换发货鉴权):对比原生平台发货抓包证实 POST /api/redeem/:id 必须携带 Authorization: Bearer <token>,Origin 及 Referer 头,补齐相关请求头彻底杜绝 401 报错;
2. 根因修复(角色昵称解析):逆向解构 0666.pro 响应报文,将角色名提取从错误的 binding.role_name 切换为 token.bound_account,消除提货页角色名显示为 '-' 的问题;
3. 协议对齐(响应结构重构):将 RockRedeemResponse 与真实上游返回对齐(包含 token 与 status 结构),剔除臆想的 delivery 字段;
4. 单元测试与方案文档:更新单测覆盖鉴权与字段映射断言,在方案文档 7.4 节录入实测抓包报文镜像比对表。
2026-10-05 16:30:18 +08:00
yml2213 befe50b3e5 feat(rock): 支持手动采购指定数量通用 Token 弹窗与实时积分试算
1. 新增手动采购 Modal 弹窗,支持自由输入指定数量(InputNumber)与快捷胶囊选择(10/20/50/100/全部可购);
2. 动态联动 0666.pro 实时积分余额,提供单价折算(21点/个)、预计消耗与结余防超支校验;
3. PageHeader 采购按钮与指标看板无缝唤起采购弹窗,采购完成后自动关闭并刷新数据。
2026-10-05 15:54:27 +08:00
yml2213 7e5cbaf65e fix(rock): 兼容 0666.pro 接口 points 字段字符串与数值自适应解析
1. 新增 FlexibleFloat64 类型,解决上游 /api/me 响应中 points 为字符串(如 '8271.2')导致反序列化失败的问题;
2. 服务层与数据库快照存储统一调用 Float64() 保持类型严谨;
3. 单元测试补充真实上游字符串响应场景并全绿通过。
2026-10-05 15:42:00 +08:00
yml2213 80554555d3 style(platform-rock): 深度重构 Rock 管理大屏 UI,全面对齐平台设计规范
1. 页面容器对标 PlatformProducts 规范,移除内层冗余白底外壳,优化整体边距与排版;
2. 废弃原生低质感 Statistic 标签,全面改用 metric-card 高质感统计看板(可用库存、错单阻断、交付总量、上游积分);
3. 重构通道控制与 0666.pro 凭据面板,增加通道呼吸状态条与软熔断一键切换 Banner,表单分栏结构化展示;
4. 筛选工具栏与库存审计表格全面升级,增加 UID 强一致校验高亮对比与错单解冻重置操作。
2026-10-05 15:36:45 +08:00
yml2213 611c658a8a fix(merchant-products): 严格锁定商品价格与库存编辑权限,仅对平台超级管理员开放
1. 前端 ProductsTab 增加 canEditPricing={isAdmin} 显式权限透传,仅超级管理员可见【编辑】按钮,普通分销商/商户完全隐藏;
2. 后端 UpdateProduct 接口补充 middleware.GetRole(c) != model.RoleAdmin 强校验,普通分销商发起请求直接 403 阻断;
3. 保障平台商品进货成本与对外积分售价的权威性,杜绝下游分销商私自篡改价格与库存风险。
2026-10-05 15:14:33 +08:00
yml2213 0dff9d892e feat(merchant-products): 开放商品编辑功能,支持超级管理员与商户修改售价积分、成本价与库存模式
1. 后端 Handler 新增 UpdateProduct 方法,并在 /api/merchant/products/:id 注册 PATCH 路由,支持修改商品显示名称、对外售价积分、成本价与库存;
2. 前端商户中心 merchantApi 扩充 updateProduct 接口对接;
3. 商品列表(ProductsTab)操作列新增【编辑】按钮与模态框,提供商品名称、对外售价(积分)、成本价(积分)、无限库存/指定限量模式及上架状态编辑功能;
4. 修复超级管理员在自营或商户商品列表中无法自由调价与调整库存的交互缺失问题。
2026-10-05 15:10:21 +08:00
yml2213 ef7f67dd0c feat(fulfillment): 接入Rock发货平台(0666.pro)代理履约、通用库存池与UID强一致风控
1. 数据库新增 012_rock_fulfillment 迁移,创建 rock_configs 配置表与 rock_tokens 通用库存表,补齐黑色ROCK长袖T恤与蓝色运动服上衣商品目录;
2. 封装 RockClient 与 RockService,实现 0666.pro 平台 Bearer Token 极简连通校验、批量采购50个入库、水位监控巡检与自动补货;
3. 新增 RockProvider 实现标准履约路由,引入 Anti-Ghost 旧绑定基线比对与 UID 强一致门禁,扫错号硬阻断并记录为 mismatch 状态;
4. 针对黑色ROCK与蓝色运动服实现动态发货(绑定后发货前动态选择 skin),并提取腾讯官方发货流水号 fulfillId 对账;
5. 新增全局自动发货总开关(Kill Switch),支持一键软熔断降级转人工接单处理;
6. 前端新增 PlatformRock 管理大屏,提供总开关切换、Token配置与连通测试、库存监控、一键补货及错单解冻重置。
2026-10-05 14:56:11 +08:00
yml2213 46ec3574ae fix(delivery): 治理上游 BFF 单 IP 频控限流与高频轮询雪崩问题
1. 透传分布式客户端 IP(X-Forwarded-For):signProxy 发包自动透传客户端 IP 与订单散列 IP,穿透上游 Nginx 限流层,避免生产服务器单出口 IP(124.223.12.34)被全盘限流(HTTP 429);
2. 频控限流立即避让禁止盲目重试:429 与“请求过于频繁”明确判定为不可重试错误,signProxy 立即返回,消除 8.2 秒长挂与 3 倍放大重试流量;
3. 优化轮询频次与频控冷却:accountBound 未扫码缓存 TTL 提升至 5 秒(削减 60% 轮询 QPS),遭遇频控时拉长缓存避让至 15 秒并由前端平滑等待,给上游充分恢复窗口。
2026-09-18 19:52:53 +08:00
yml2213 af0822949d fix(delivery): 修复 DLC 正式下单重复提交与发货并发冲突问题
1. DLC 正式下单接口禁用传输层自动重试:/public/users/orders 属于非幂等状态变更接口,发生频控或抖动时由上层回调与状态同步接管,严禁盲目原单号重试导致上游抛出“该子订单已处理,请勿重复提交”;
2. 扩充队列防重与已有记录识别:识别上游“该订单已有发货记录/已处理”错误,重新建队时自动追加独立重试单号(_xxxx)并透传至正式下单,避免单号污染冲突;
3. 上游回调支持重试单号兼容:HandleShipNotify 在精准匹配未命中时,自动按下划线前缀匹配主订单号(FO..._xxxx -> FO...),保障重试单回调正常交付;
4. 加强提交并发锁防护:在 35 秒活跃执行窗口内对 in_progress 阶段实行严格并发互斥,避免上游 Webhook 提前推回失败状态导致后续重试穿透产生并发打架;提单失败时显式重置 provider_order_stage 释放锁。
2026-09-18 16:19:37 +08:00
yml2213 40194fa7e5 fix(delivery): 增加绑定缓存防频控、发货队列防重试死锁、终止无效回调重试 2026-09-18 15:26:09 +08:00
yml2213 ec76844da8 feat(log): 全面重构日志系统,支持日志级别、去除ANSI乱码并抑制高频轮询 2026-09-18 15:04:38 +08:00
yml2213 20bde97d7a fix(delivery): add transient retry, fix queue deadlock, and gate delivery submit by scan auth 2026-09-18 14:49:54 +08:00
yml2213andCursor 848d3da809 fix(delivery): 绑定失败回退 DLC,并补齐乐玩角色名展示
乐玩写接口失败时清除渠道锁定改试 DLC;免扫码/查绑/提交路径回传 role_name 与 game_channel。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 12:39:53 +08:00
yml2213andCursor 6c41834274 fix(delivery): 乐玩不可用时回退 DLC,避免提交 UID 绑定失败
legacy 双渠道配置升为 priority;显式 lewan 且具备 DLC 时允许回退,缓解 LEWAN_* 未注入导致的 bind 失败。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 11:51:32 +08:00
yml2213andCursor 7df1330b65 fix(docker): 向 backend 容器注入乐玩 LEWAN_* 环境变量
Docker 启动时未透传 .env 中的乐玩密钥,导致容器内始终提示 AccessKey/SecretKey 未配置。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 11:04:18 +08:00
yml2213andCursor 6dc2375a79 chore(catalog): 清理 LEWAN_ 列表过滤与商品图 UUID 历史回退
商品列表不再过滤镜像 SKU;图片只按英文 SKU 解析,修正 DLC 预设文案。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 20:33:42 +08:00
yml2213andCursor c2d8228512 fix(delivery): 硬化自动发货可靠性,避免双发与无限 Webhook 重试
恢复 ship_failed 可重试 UI;DLC 断点续传 queue;乐玩未绑定禁止进 delivering;Webhook 原子 nonce 与业务拒绝回 200。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 20:13:29 +08:00
yml2213andCursor df1a170d44 refactor(catalog): 废弃 LEWAN_ 镜像,统一英文 SKU 与积分价,商品图按 SKU 缓存
对外目录只保留英文主 sku;迁移硬删镜像并校准 1元=100积分;发货页/凭证优先使用 local {sku}.webp。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 20:00:26 +08:00
yml2213 bf9614569e feat: 优化发货凭证与字段兼容,隐藏内部积分展示并增强DLC角色解析 2026-09-14 17:37:53 +08:00
yml2213 5f642eb7a6 feat: 优化发货交付页面与凭据生成,支持一键复制结果图片及官方商品图片本地缓存
- 交付界面重构:隐藏内部订单号、流水号与发货渠道,展示聚焦于买家游戏UID、角色名与交付时间
- 发货结果凭据生成:采用 Canvas 生成高清发货存证图,优化存证说明文案与自适应排版
- 一键复制图片:支持直接将结果凭证图片写入系统剪贴板,方便客服在聊天窗口快捷粘贴
- 官方图片本地化缓存:全量下载乐玩商品官方主图并建立本地持久化路由,规避外部源站跨域及破损问题
- 修复乐玩渠道角色UID提取与履约状态幂等回填逻辑
2026-09-14 17:19:12 +08:00
yml2213andCursor f7f48d0feb 功能:接入乐玩开放平台双渠道路由,并修复渠道锁定与 Webhook 可靠性
在保持 DLC 默认零破坏的前提下,支持 priority/仅乐玩/仅 DLC 履约策略与后台 GUI 配置;同步补齐 Prepare 渠道落库、乐玩订单取消、Webhook 验签与失败重试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 15:48:03 +08:00
yml2213 a314f3f51b 修复:发货创建队列与补全接口透传 h5_prefix 和商品信息,解决上游报错缺少渠道标识
- 上游 /public/users/orders-queue (POST/PATCH) 补充传递 h5_prefix、goods_no 和 goods_name
- delivery.go submit 流程透传商品 SKU 与商品名称至队列相关方法
- 解决上游创建订单报"缺少渠道标识 h5_prefix,无法校验第三方订单状态"的故障
2026-09-08 12:44:45 +08:00
yml2213 114dcdf7d8 优化:订单列表发货链接列固定在最右侧,滚动时保持可见 2026-08-14 14:28:20 +08:00
yml2213 b76d8dc257 功能:发货链接支持永久有效,默认 TTL=0
- DELIVERY_LINK_TTL_MINUTES 设为 0 或负数时链接永久有效(expires_at 存 NULL),
  默认值由 120 改为 0,本地 .env 同步改为永久
- 新增 delivery_link_generated_at 列区分从未生成与永久链接,兼容历史数据
- 永久链接授权仅校验 HMAC 签名、不校验过期(exp=0),作废/恢复语义不变
- 前端链接有效期列对永久链接显示"永久有效"
2026-08-14 14:26:06 +08:00
yml2213 11bce9c87e 优化:已交付订单保留复制/打开发货链接,去掉作废操作
- 已交付订单仍可复用未过期链接查看兑换结果,但不再生成/续期新链接
- 商户后台已交付订单仅显示复制/打开,已作废/已过期单独标识
- 发货中/已取消订单不展示链接操作,避免无效按钮
2026-08-14 13:19:27 +08:00