yml2213
e3a75fb2d7
feat(distribution): 默认结算冷却天数改为系统配置驱动
...
新建站点的默认冷却期原先硬编码 7 天(OnboardSite 字面量、DB 列默认、两套前端表单),
改一处要同时动三处。现统一到系统配置键 distribution.default_settlement_hold_days:
- systemconfig 注册该键(默认 7,0=立即释放,0-365 校验),纳入 admin 可见配置
- distribution 建站两条路径(CreateSite 未传值、OnboardSite 缺省)读取该配置,缺失或非法回落 7
- 新增 GET /admin/distribution/site-defaults 暴露当前有效默认值
- Vue / React 站点表单改为运行时拉取,拉取失败保持 7
- DB 列默认值保留作为兜底,站点级 settlement_hold_days 仍可单独覆盖
2026-09-10 18:54:23 +08:00
yml2213
dbe9aaabfe
feat(distribution): 移除生产环境资金冻结,测试与生产口径统一
...
liveMoneyMovementEnabled 按 APP_ENV 在生产冻结结算入账、站点提现与自动释放,
与测试环境行为不一致,且该开关在 APP_ENV 缺失时为 fail-open。本次整体移除:
- 删除 liveMoneyMovementEnabled 与 ErrLiveMoneyMovementFrozen
- MarkSettlementBatch / ApplySiteWithdrawal / AutoReleaseDueSettlements 去掉守卫
- handler 去掉 403 settlement_frozen 映射
- 测试改为断言生产环境结算入账与提现正常执行
2026-09-10 18:44:52 +08:00
yml2213 and Cursor
768902f2f7
feat(distribution): 补齐退款加价回退、本站自卖与开通默认规则
...
退款时压缩卖方加价,人工/自动批次仅完结单可入账,号主收入进主站钱包;仲裁后重算释放并支持作废未入账 DS。开通时四种模式按默认生效,对外口径合并为 35/40/25,不再单独展示通道费。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-10 18:13:46 +08:00
yml2213 and Cursor
e621722218
fix(admin): 主站分销管理按最新分成与释放口径改展示
...
规则页按模式展示收号/卖出/服务费,通道费标明主站承担;订单改为释放状态筛选;结算区分自动与人工批次。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-10 17:36:49 +08:00
yml2213 and Cursor
647fdc0b4a
feat(distribution): 通道费改主站承担,并按冷却期自动释放结算
...
利润不再扣支付通道费;站点可配置结算冷却期,到期自动入账,已释放后退款从收款站钱包回冲。同时修复当日自动批次无法追加、三方回冲打错钱包,以及测试库自增重置被 MySQL 统计缓存跳过的问题。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-10 17:11:58 +08:00
yml2213 and Cursor
47ceb53c09
test: 测试库改为模板克隆并纳入完整租号 e2e
...
每个包不再重复 DROP+迁移,清空改用 DELETE 并重置自增,go test ./... 从约 6 分钟降到十几秒。租号全链路改走 NewTestDB,去掉依赖额外 DSN 才会跑的过渡测试。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-10 15:46:18 +08:00
yml2213
cbd5412315
test: 后端测试从 SQLite 全面切换到 MySQL,与生产环境对齐
...
测试库不再使用 SQLite 内存库,改为每个测试包独立的 MySQL 库,
表结构由 backend/migrations 的真实迁移建立。
基础设施
- 新增 internal/database/testdb.go:NewTestDB() 保持原签名(28 处调用零改动),
内部连接 MySQL 测试库,首次调用重建库并执行全部真实迁移,之后每次调用清空全表
- 库名 = 测试库基础名 + 包目录名,同包共享、跨包隔离,使 go test ./... 可并发执行
(共用一库时各包会互相 DROP/CREATE 导致 database exists)
- 新增 NewDryRunDB():MySQL 方言 + DryRun,供断言 SQL 形态的 5 处测试使用
- 新增 AutoMigrateIfMissing():只对不存在的表 AutoMigrate,
避免改动迁移定义的索引与约束
- 新增 scripts/prepare-test-db.sh:建库与通配授权,可重复执行
- 33 处 sqlite.Open 全部替换,26 个测试文件改用 MySQL
- 删除 46 处手写 SQLite 方言 DDL(AUTOINCREMENT / INTEGER PRIMARY KEY / TEXT),
表统一由真实迁移建立
- go.mod 移除 gorm.io/driver/sqlite 与 mattn/go-sqlite3
- 删除生产代码里 distribution/repository.go 的 sqlite 方言分支(strftime)
对齐环境后暴露并修复的真实问题
- DATE(col) 在 MySQL 返回 DATE 类型,使 Date string 字段变成 RFC3339 时间串,
大盘日期会带出时间部分;28 处改为 DATE_FORMAT(col, '%Y-%m-%d')
- 系统自动创建分销结算批次时 created_by 写入 0,违反指向 admin_users 的外键,
生产会直接插入失败;改为写 NULL(新增 adminRef helper)
- MySQL DATETIME 仅到秒,静默截断 Go 侧写入的时间,
导致租用时长计算与结算时点回读比对偏差;
rental_orders 的 9 个业务时间列提到 DATETIME(6)
- 测试数据补齐严格模式要求的 NOT NULL 列、修正超出列长的取值、补齐外键父记录
迁移
- 000065 的 ALTER TABLE rental_orders 一并完成业务时间列精度调整,
feature 侧不再单开迁移文件
脚本与文档
- check.sh / check-backend-coverage.sh 去掉 -p 1 串行与 SQLite 相关注释
- 更新 docs/Repository层测试补充总结.md 的测试运行说明
2026-09-10 14:34:01 +08:00
yml2213
2b8c74a0f1
fix(auth): 用户会话版本默认值对齐 main,收敛 dev 血脉的 1 偏差
...
token_version 由 c91423a 引入时,model tag 与迁移 000052 一致都是 0;
TokenVersion 的显式赋值 1 只存在于 dev 分支的 85332df,main 上从未有过。
本次把用户侧(users 表)统一收敛到 0,管理员侧(admin_users)保持不动。
- model/user.go:TokenVersion 的 gorm tag 由 default:1 改为 default:0
- auth/repository.go:FindOrCreateByPhone / RegisterWithPassword 移除
显式 TokenVersion: 1,改由列默认值决定
行为收敛:此前 listing/mutation.go 的建号路径完全不显式赋值,
落库值取决于 DB 列默认值(本机 1 / 迁移定义 0),是真实的行为漂移来源;
现在三条建号路径结果一致,均为 0。
判定依据:引入该字段的提交是否自洽 + 该值是否在 main 上,
不以本机库的实际列定义为准(本地曾被手工改成 1)。
2026-09-10 13:26:16 +08:00
yml2213
7ffc3822f5
Merge branch 'main' into feature/distribution-system
...
合入 main 的推广追踪(adtracking)模块,并解决与分销业务的 8 处冲突。
冲突解决原则:两边的字段、菜单与路由全部保留,不删任何一方。
后端:
- model/order.go:保留分销字段注释块,追加 SourceTrackCode
- model/user.go:追加 RegisterTrackCode;TokenVersion 默认值保持 1
(与本库 users.token_version 列默认值一致)
- auth/repository.go:两处建号结构体同时写入 RegisterTrackCode 与 TokenVersion
- order/dto.go:OrderDTO 同时暴露 distribution_site_id 与 source_track_code;
CreateRequest 同时接受 distribution_site_code 与 track_code
- order/presenter.go:同时映射 DistributionSiteID 与 SourceTrackCode
前端:
- orders/api/orders.ts:createOrder 同时携带 distribution_site_code 与 track_code
- layouts/AdminLayout.vue:分销管理菜单组与推广追踪菜单组并列保留
- router/adminRoutes.ts:分销 4 条路由与 tracking-links 路由并列保留
迁移:feature 侧 000064-000067 已在前一提交顺延为 000065-000068,
为 main 的 000064_ad_tracking 让号,合并后编号 000063→000068 连续无重复。
2026-09-10 13:06:18 +08:00
yml2213 and Cursor
ee0e70ccad
fix(adtracking): 收紧成交口径、点击去重与生产落地页白名单
...
成交 GMV 排除已关闭订单,避免未支付关单被计入;点击按访客 5 秒、IP 1 秒双重去重;生产禁止 localhost 落地页,失效短码改用 QueryEscape。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-10 11:27:43 +08:00
yml2213
6a3611c1a8
fix(adtracking): 修复生产网关反代路由、成交态统计口径与安全加固
2026-09-10 11:17:40 +08:00
yml2213
2b11d70ebe
feat(adtracking): 新增推广链接追踪与数据大盘,支持自定义短码、注册与下单归因及二维码物料生成
...
1. 数据库新增 000064_ad_tracking.sql 迁移,创建 ad_tracking_links 和 ad_tracking_clicks 表,并在 users、rental_orders 增加归因字段
2. 后端新增 adtracking 模块,挂载 GET /r/:code 302 智能重定向、点击流水异步记录、转化率/GMV聚合统计及管理接口
3. 用户认证 (auth) 与订单创建 (order) 链路贯通,实现注册用户与订单成交推广短码全链路归因
4. 前端管理后台左侧新增【推广追踪】目录,支持大盘指标总览、推广链接 CRUD、状态启停、一键复制短链及二维码下载 (PNG)
2026-09-10 11:05:47 +08:00
yml2213
b16c45ce6f
fix(distribution): 修复分销结账退款分成计算逻辑与利润统计,优化分销订单表格列宽与展示体验
2026-09-09 19:34:04 +08:00
yml2213
dd38227b95
fix(order): 确保分站发布的商品被租用后号主在主站可见并能正常交接
2026-09-09 16:26:21 +08:00
yml2213
8b7a0c8059
fix(order): 修复超时与异常过渡态下的状态机流转及权限断层
2026-09-09 16:15:21 +08:00
yml2213
17d4f7be9e
fix(order): 支持待号主交接及异常状态下客服重置交接倒计时
2026-09-09 16:05:48 +08:00
yml2213
02d091434e
fix(order): 修复分销收号商品在主站租用后报订单不存在的问题
2026-09-09 15:24:56 +08:00
yml2213
f6ad7c34ee
feat(distribution): 重构分销后台为SaaS商户工作台并全面商业化优化
...
- 商品货架 (Accounts.tsx): 支持期望售价/固定金额/百分比多模式实时联动加价与批量调价,高亮100%独享溢价
- 订单中心 (Orders.tsx): 透传账号游戏租客信息,新增收益对账抽屉透明拆解底价、手续费、分成与自主溢价
- 结算与规则 (Settlements.tsx & Rules.tsx): 纠正角色倒错,商户视角展现周期对账单与分成合作政策
- 店铺装修 (SiteSettings.tsx): 废除手写JSON,提供横幅/公告/页脚可视化列表编辑器与前台实时模拟器
- 数据大盘 (Dashboard.tsx): 对齐最新订单字段,大字展示分销商净收益
- 后端数据层 (dto.go, repository.go, handler.go): 聚合计算分销商订单收益,支持商品与租客搜索
2026-09-09 14:44:02 +08:00
yml2213
9452cf608e
feat(distribution): 支持一键同步主站商品池并在货架区分货源归属
2026-09-09 13:44:50 +08:00
yml2213
cf4bea9b6d
test(distribution): add e2e scenario 1 test and fix tx deadlock in MarkSettlementBatch
2026-09-09 13:34:35 +08:00
yml2213
4aab9e7e33
fix(distribution): 分成改为分主站提价利润,分站自主提价溢价全额归卖方
...
- 文档:升级至 v0.7,固化号主保底、主站提价利润分账(35/40/25)与分站加价溢价独享逻辑
- 定价:修正货架兑换比例调价方向为调减比例提价(site_ratio = base_ratio - delta)
- 分账:分成基数剔除号主成本与分站加价,提价利润按规则切分,分站自主加价溢价 100% 归卖出方
- 前端:更新分销后台提价说明文案,提示调减比例提高售价且溢价归本站
2026-09-08 19:45:05 +08:00
yml2213
d762b33f54
refactor(distribution): 重写分销迁移并落地利润百分比分成与货架比例
...
将 000064-000078 合并为 064/065/066,默认规则改为收号 35%、卖出 40%、服务费 25%。
货架调价改为增加分站 1 元兑换哈夫币比例。sql-guard 仅保护 main 已发布迁移。
2026-09-08 19:02:58 +08:00
yml2213
48a2961245
fix(distribution): 收紧分销权限与货架状态,开通时创建站点金库
...
无站点成员不再视为超管;分站下架只改展示状态;装修、批量加价与提现参数对齐。
2026-09-08 17:45:05 +08:00
yml2213
31bf6dd3b6
fix(distribution): 修正商品归属回填、禁止全站灌货并拒绝无效站点头
...
用货架写入时间与上传来源回滚误标产地,不再依赖绝对时间戳;同步仅收本站上传与显式勾选。
2026-09-08 17:30:12 +08:00
yml2213
96bc6a4db6
fix(distribution): 货架加价打通前台、下单与卖方分成
...
分站公开列表和详情展示当前货架加价;下单写入 base_price / shelf_markup / markup_site_id 快照并计入实付。
支付分账改用快照加价,不再误用 PlatformFeeCent;结账不退加价,事后改价不影响历史订单。
2026-09-08 17:07:17 +08:00
yml2213
8521bf4753
fix(distribution): 修正分销模式判定与结算入账,冻结未确认分成
...
按买卖站点纯函数判定五种模式,分站卖主站货命中 two_party_platform_receive。
结算批次只收本站 site party,平台分成不再进入分销钱包;生产环境冻结结算入账与站点提现。
2026-09-08 16:52:09 +08:00
yml2213
2c4e87475a
feat(distribution): 完善分销收号资产双视图、商户提现、自主加价、品牌装修与数据大盘
2026-09-08 16:05:30 +08:00
yml2213
fd4e490ed3
feat(distribution): 完善分销站与主站业务数据及权益风控隔离,修复历史商品归属
2026-09-08 15:25:46 +08:00
yml2213
0fcb6a513f
feat(distribution): 支持分销上传来源追踪、主站审核展示与收售结算模式自动判定
2026-09-08 15:00:35 +08:00
yml2213
044b141e95
merge(main): 同步主站稳定性修复与优化
2026-09-08 13:16:40 +08:00
yml2213
33ee8408e9
fix(stability): 修复慢查询雪崩隐患、系统配置死锁与提号翻页错误
...
- 消除 system_configs 写锁争抢:使用读写锁与启动预热将默认配置初始化收敛为单例,杜绝读请求开事务导致的 Lock wait timeout exceeded
- 强化财务看板缓存:将 Redis 缓存有效期由 1 分钟延长为 5 分钟,接入 singleflight.Group 防并发击穿
- 修复提号列表 GORM 翻页 Bug:分离 Count 查询与列表查询构建,避免重复 Join 导致的 Error 1066
- 生产环境资源加固:docker-compose.prod.yml 中 MySQL 资源限制提升至 2.0 核 CPU、2G 内存
- 补充 systemconfig 并发测试与 pickup 分页 Count 回归测试
2026-09-07 19:45:11 +08:00
yml2213
4461e7929e
feat(distribution): 站内信与通知体系多租户独立分支隔离
...
- 新增 000071 数据库迁移:notifications 表支持 distribution_site_id 并自动回填历史分销订单通知
- 通知自动归属:在事务内根据订单或申诉自动关联当前分销站点 ID
- 隔离查询与已读控制:列表、未读统计与批量已读均严格按站点隔离,防止主站与分站交叉泄漏
- 前台界面联动:消息中心通知 Tab 及移动端/PC端站内信页面展示分站专属标识与精准过滤
2026-09-07 19:10:02 +08:00
yml2213
e024319860
feat(distribution): 分销站点消息中心与钱包提现多租户独立分支隔离
...
- 新增 000070 数据库迁移:支持 chat_conversations、wallet_accounts、wallet_ledger、withdrawal_requests 按 distribution_site_id 隔离
- 消息中心:会话列表、未读数统计、站点专属客服及订单群聊与主站实现双向完全隔离
- 资金账户与提现:独立按 (user_id, distribution_site_id) 建账,分销订单自动结算至对应分站钱包,提现与流水相互独立
- 前台界面:Axios 自动透传 X-Distribution-Site-Code,钱包、提现与消息页面呈现分站专属标牌与独立说明
2026-09-07 18:11:27 +08:00
yml2213
cdb236cc29
merge(main): 同步主站最新 UI 与审核优化代码并保持分销多租户隔离
2026-09-07 17:37:31 +08:00
yml2213
ecaf15417b
feat(distribution): 独立分销前台商城多租户体系、货源与订单数据严格隔离
2026-09-07 17:18:14 +08:00
yml2213
550b42eb22
feat(distribution): 独立分销后台账号体系、多租户隔离与主站后台分销管理GUI
...
- 独立账号鉴权:分销后台支持独立登录页面、Bearer+Cookie 双模鉴权与租户资料接口
- 多租户隔离:分销商成员强制锁定自身站点数据范围,防止横向越权;平台超管享有全局视界
- 一键开通分销商:平台端支持一键录入站点、管理员账号、分配角色并原子化初始化佣金规则
- 主后台分销分组:在主站后台增加「分销管理」导航分组,提供站点管理、规则配置、订单监控与结算管理 GUI
- 门禁与联调:补充完整单测,全量代码门禁 check.sh 100% 通过,dev.sh 支持前后端与分销后台一键同启
2026-09-07 15:45:53 +08:00
yml2213
5f0b43fe42
feat(finance): 资金出款支持按具体日期时间(时分秒)筛选
2026-09-07 13:46:48 +08:00
yml2213
3f86dd85ad
feat(admin): 优化商品审核工作台界面、截图凭证核验与按住速览体验
...
- 深度优化商品审核工作台:指标概览卡片、风险边条队列、标价管道联动、核心资产高密度展示、底部决策浮动 Dock、全套键盘快捷键
- 重构截图大图查看体验:移除旧版底部溢出的全局画廊,封装全屏居中弹窗 AdminListingReviewPreviewDialog,支持「按住速览(松手即关闭)」与「常驻弹窗(缩放/翻页/打码/原图)」双模交互
- 新增在线截图编辑器 ImageEditorDialog:支持平滑马赛克打码、自由裁剪与旋转保存
- 弹窗组件解耦:抽离审核拒绝、调价、全量核验、快捷键速查等子组件,严格控制单文件行数
- 后端支持:新增商品审核调整价格接口与配套单元测试
2026-09-07 13:29:01 +08:00
yml2213
23883d4be5
perf(listings): 优化详情页图片加载链路支持公开变体与分级秒开
2026-09-06 21:40:35 +08:00
yml2213
4b9e64e398
增加资金出款按操作人筛选
2026-09-06 14:03:40 +08:00
yml2213
369b0647bb
合并 main 分支并融合订单列表最小化与 SQL 治理
...
- Auth/权限中间件取 main 演进版(错误细分、token 来源),保留 dev 的用户 cookie 与登出撤销语义
- 后台订单列表:融合 main 的首页免 COUNT 优化与关键词索引路由,保留 dev 的最小化 AdminOrderListItemDTO(结账明细仍由详情接口返回,同步调整对应集成测试)
- 保留 dev 的 token_version 冻结/解冻递增与 main 的状态变化判断及通知
- 前端:保留 dev 登出接口与 main 的 fetchMe silent 参数、SSE 登录跳转;后台订单表按 dev 最小化 DTO 移除号主到手列
2026-09-05 11:43:13 +08:00
yml2213
cd719fc355
fix(query): 支持12位纯数字时间编号(如202609040184)商品编号的精准索引路由
2026-09-05 11:25:14 +08:00
yml2213
3162d15425
分销后台前端对接与结算明细接口
...
- 新增 GET /admin/distribution/settlement-batches/:id/items 明细查询
- distribution-admin 重构为 react-router 多页面:仪表盘/网站/规则(启停)/订单(筛选分页)/结算(创建/明细/结算)/支付通道(绑定解绑)/账号展示(上下架)
- axios 统一 401 提示,引导回主站后台登录;金额统一整数分格式化
- npm run build(tsc 严格模式) 通过
2026-09-05 11:17:43 +08:00
yml2213
ac777f5b16
补全分销分账结算闭环并修复站点越权
...
- 权限落库:新增 000066 迁移,注册 11 个 distribution:* 权限并授权 super_admin/ops/finance
- 越权修复:siteAccessAllowed 校验贯穿站点/规则/订单/展示/支付通道/结算全部按 ID 操作
- 分账闭环:SplitSettlement 按比例拆分分成基数,销售加价归卖出方,尾差记入 rounding_adjustment_cent 归平台;支付快照与退款重算均按拆分写入参与方金额
- 结算批次:创建时聚合周期内待结算订单生成明细并汇总金额,结算时校验明细与总额一致后联动置位财务快照
- 手工补数接口禁止覆盖已有快照并写入审计日志
- 杂项:二维码池校验站点启用状态且不吞真实 DB 错误;绑定支付通道校验商户配置存在;表探测改为 sync.Once 缓存
2026-09-05 11:12:44 +08:00
yml2213
ac67a91438
接入分销订单支付退款与站点隔离
2026-09-05 10:52:36 +08:00
yml2213
2ffa7a89b1
实现分销网后台基础功能与独立前端
2026-09-05 10:52:36 +08:00
yml2213
a9125b1939
perf(query): 全面治理后台跨表模糊查询慢SQL并升级SQL门禁守护
...
- 解决 MySQL 8.4 无法跨表 Index Merge 导致的索引失效与全表扫描问题
- 订单/提号/纠纷/用户/商品/会话列表实现智能意图路由分流直达单表唯一索引
- 剥离 COUNT(*) 阶段无关多表关联及标量子查询,实现首页条数快速短路
- check-sql-guard.sh 增加 forbid_pattern 拦截器与核心路由强校验防线
2026-09-05 10:37:04 +08:00
yml2213
ba5aa48c8f
优化财务仪表盘查询性能
2026-09-04 21:37:47 +08:00
yml2213
7a8773d25d
修复资金出款表排序规则冲突
2026-09-04 20:41:28 +08:00
yml2213
f1281a9734
修复资金出款查询异常
2026-09-04 19:05:35 +08:00