Commit Graph
63 Commits
Author SHA1 Message Date
yml2213 8c12d1d448 fix(admin): 超管看不到下游订单——新增平台侧跨商户订单视图
问题:管理员首页 Dashboard 显示平台总量(37 单,跨全部商户),点进「发货订单」
却只有 29 单,两个数字互相矛盾且界面上没有任何解释。

根因是「平台管理员」在两套接口里语义不同:
- /api/dashboard:isPlatformAdmin 只看 JWT 角色 → 平台视角,跨商户聚合
- /api/merchant/*:Tenant 中间件强制落到单个 merchant_id → 商户成员视角。
  管理员唯一的成员关系是自营商户,于是被静默框定在商户 1
且 34 条 /platform/* 路由中没有任何订单入口,前端也没有商户切换器或上下文提示。

修复(不改动商户侧隔离语义):
- 新增 GET /api/platform/orders,support 按商户/状态/来源/关键字筛选,缺省为全部商户
- Service 抽出共用的 orderFilters 集中校验,ListOrders 与 ListPlatformOrders 并行;
  ListOrders 仍强制单商户,避免新增平台路径时顺手放宽商户侧可见范围
- FulfillmentOrder 增加 Merchant 关联字段,仅平台侧 Preload,商户侧响应结构不变
- 前端新增「下游订单(全部商户)」页与菜单项,「发货订单」更名为「发货订单(当前商户)」
- README 补充两个订单入口的说明,避免后来者重踩

验证:单测覆盖跨商户可见性、按商户筛选、筛选校验、以及商户侧隔离不回归;
实测新接口返回 37 单(自营 29 + 测试商户 8)且带商户信息,商户侧仍为 29 单且无 merchant 字段。
2026-10-06 20:28:41 +08:00
yml2213 7f984b0f4e fix(security): 告警渠道 webhook 与 Bark Device Key 响应脱敏
AlertNotifyChannel.Config 原先以真值返回。钉钉/飞书/企微的 webhook URL 与 Bark
的 device key 本身就是凭据,泄露即可直接向对应群或设备推送消息,而列表接口对
具备 recharge:manage 的商户成员可见。

- 新增 service.MaskAlertChannel(s):在 HTTP 响应层脱敏,只保留密钥末 4 位。
  webhook 保留域名与路径以便辨认是哪一台机器人(钉钉/企微的 token 在查询串,
  飞书的 uuid 在路径末段),Server 属主机地址不遮蔽
- UpdateAlertChannel 识别回传的脱敏占位值并沿用库中真实密钥,使「只改名称/开关」
  不会被掩码覆盖;填写新值则正常替换
- 脱敏刻意不放在 service 层:CheckLowBalanceAndNotify 复用 ListAlertChannels
  的结果真正去发消息,在那一层脱敏会直接打断告警发送
- 前端表单补充说明文案

验证:新增 6 组测试,覆盖脱敏规则、三种机器人 URL 形态、脱敏结果仍能通过校验、
掩码回传不覆盖真实密钥,以及「service 层必须返回真值」这条关键边界。
2026-10-06 19:49:11 +08:00
yml2213 44ec142395 style: 清理 gofmt 偏差
纯对齐与行尾空行调整,无逻辑变更。gofmt -l 现输出为空,
配合 make fmt 可将格式检查直接纳入 CI。
2026-10-06 19:43:43 +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
yml2213andCursor 4b8fc76f36 feat(rock): 绑定错误可直接改买家 UID,提货号继续留在原订单
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 17:47:02 +08:00
yml2213andCursor 717392b195 feat(rock): 未扫码绑定的使用中链接可释放回库存
历史残留绑定不再占住提货链接,退款后可以把还没扫上的库存分给下一单。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 22:13:17 +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 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 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 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 99a33675b0 优化商户管理, 增加商户名重置密码等等 2026-08-14 13:09:56 +08:00
yml2213 ee3e427ab7 作废链接和取消订单 2026-08-14 12:58:20 +08:00
yml2213 91c055c130 功能:平台管理员删除商户账号 2026-08-13 14:35:30 +08:00
yml2213 538be52636 修复:管理员默认商户与账户设置 2026-08-13 14:12:25 +08:00
yml2213 6dae7fafa8 功能:恢复商户账号分组查看 2026-08-13 13:39:37 +08:00
yml2213 cfdc12cf94 优化:平台管理员账号独立管理 2026-08-13 13:31:06 +08:00
yml2213 1f85add5e0 功能:优化账号分层与管理员初始化 2026-08-13 13:18:41 +08:00
yml2213 ac44fda08b 功能:增加订单搜索与状态筛选 2026-08-13 12:58:06 +08:00
yml2213 2b3a1b111b 功能:增加平台账号管理与管理员保护 2026-08-13 12:52:50 +08:00
yml2213 8c47b961e1 功能:完善登录安全与客服手动下单 2026-08-13 12:40:04 +08:00
yml2213 aea65a2fd3 feat: manage merchant members 2026-08-13 11:45:55 +08:00
yml2213 a4791decb0 feat: support merchant team roles and permissions 2026-08-13 11:41:34 +08:00
yml2213 b686a82e60 feat: add manual fulfillment order creation 2026-08-11 11:49:58 +08:00
yml2213 16b508eb9b 商户管理优化, 商户只能上架下架, 管理员可以编辑 2026-08-04 14:35:53 +08:00
yml2213 ca58c2bcaa 余额告警独立页面与多渠道通知:钉钉/飞书/企业微信/Bark,支持通知频率策略
- 告警设置拆分为独立页面,支持钉钉/飞书/企业微信/Bark/通用Webhook 多渠道
- 通知策略:低于阈值后按间隔重复提醒,达到最大次数停止,余额恢复自动重置
- 旧 webhook 配置自动迁移为通用渠道,渠道支持测试发送
- 优化告警话术:去商户ID展示、数字千分位格式化
2026-08-04 13:56:26 +08:00
yml2213 941e7ad79a 积分充值全流程落地:申请审核入账、凭证上传压缩转webp、管理员调账收权
- 新增积分充值申请与审核:商户提交充值申请(凭证图片必填,1元=100积分),
  管理员审核通过后事务内自动入账,幂等键防重复
- 新增通用图片上传组件 ImageUploader:canvas 压缩转 webp、预览、删除,
  后端按魔数校验图片格式并持久化到 data/uploads
- 管理员钱包调整改为按商户维度:移除商户侧调账接口,新增管理员
  平台商户积分调整与钱包流水查看
- 低余额 Webhook 告警配置持久化,充值入账/调账后自动检查推送
- 平台商户操作列移除进入/成员,积分充值页接入真实接口并修复金额单位换算
2026-08-04 13:03:29 +08:00
yml2213 e6f09eaf14 优化商品列表表格列宽与上架配置面板 2026-08-04 11:16:54 +08:00
yml2213 2e67e2cc3b 发货链接返回完整域名:DELIVERY_BASE_URL 未配置时按请求 scheme+Host 推导
- GetOrCreateDeliveryLink/RestoreDeliveryLink 增加 requestBaseURL 参数
- buildDeliveryURL 优先级:DELIVERY_BASE_URL → 请求域名 → 路径
- 支持 X-Forwarded-Proto 与 TLS 判断 https
2026-08-03 17:38:11 +08:00
yml2213 19ada1282e 新增查询绑定结果接口(自建发货页轮询角色信息)
- GET /api/client/v1/orders/{order_no}/delivery/bind-result?bind_uuid=xxx
- 返回 bound/game_account/role_name/game_channel;未绑定返回 bound=false(不报错,供轮询)
- 对接文档自建发货页模式新增该接口,注明轮询建议间隔
2026-08-03 17:10:50 +08:00
yml2213 f95075e2e4 data 透传闭环:发货数据回显、回调带回,并限制 2KB
- 「查询发货数据」响应新增 data(下单透传原样回显,供自建发货页预填/展示)
- 回调 payload 带回 data(下单传 → 回调收,商户对接免回查)
- 创建订单 data 限制最长 2048 字节
- 文档更新:data 用途(自建页预填/回调/上游查单约定字段)、发货数据与回调示例
- 单测覆盖 data 回显
2026-08-03 14:32:08 +08:00
yml2213 27a86f5311 回调优化为单地址 upsert 配置并支持重置密钥
- 回调订阅改为单记录 upsert:保存即覆盖(URL/事件/状态),自动停用其他订阅,无新增/删除
- 新增重置密钥:保存时传 rotate_secret=true 重新生成密钥并返回一次,解决密钥丢失无法找回
- 删除不再使用的 PATCH /callbacks/:id/status 路由及对应 handler/service 死代码
- 前端回调页改为内联表单(URL/事件/状态),新增重置密钥按钮(确认后展示新密钥一次)
- 补充单地址复用、disabled 不投递、密钥轮换测试
2026-08-03 11:23:46 +08:00
yml2213 7fe4a05ed7 优化api密钥 2026-08-03 10:38:06 +08:00
yml2213 9a3471cc61 优化钱包界面:改名积分明细,添加筛选功能,优化表格列宽
- 侧边栏和页面标题改为'积分明细'
- 新增关联单号、收支类型筛选功能
- 后端 ledger API 支持 reference_no 和 type 筛选参数
- 表格列宽优化,流水号完整展示,备注列限制宽度
- 隐藏固定 tab 模式下的商户介绍文字
2026-07-31 20:18:06 +08:00
yml2213 4aa5258c2d 统一发货口径并保护结果数据 2026-07-31 17:45:20 +08:00
yml2213 04130e5ec8 统一订单单状态模型 2026-07-31 17:02:19 +08:00
yml2213 30362f14bd 简化开放下单幂等参数 2026-07-31 15:25:26 +08:00
yml2213 949a0eb8f7 统一时间格式和时区 2026-07-31 12:57:17 +08:00
yml2213 761522e808 补商户发货API 2026-07-31 12:24:54 +08:00
yml2213 e4c1306216 完善发货链接签名和作废恢复 2026-07-31 11:43:13 +08:00
yml2213 6ca226ce4b 接入无感发货流程 2026-07-31 10:45:13 +08:00
yml2213 f29f3eb841 关闭公开注册并优化仪表盘 2026-07-31 09:39:18 +08:00
yml2213 ee956e2e01 优化发货接口对接流程 2026-07-30 23:44:50 +08:00
yml2213 a16e518b6c 优化开放接口日志分类 2026-07-30 21:07:10 +08:00
yml2213 9c3414607a 修复上游发货查询订单日志amount格式化错误(%f→%d) 2026-07-30 20:47:07 +08:00