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 |
|
 yml2213andCursor
|
768902f2f7
|
feat(distribution): 补齐退款加价回退、本站自卖与开通默认规则
退款时压缩卖方加价,人工/自动批次仅完结单可入账,号主收入进主站钱包;仲裁后重算释放并支持作废未入账 DS。开通时四种模式按默认生效,对外口径合并为 35/40/25,不再单独展示通道费。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-10 18:13:46 +08:00 |
|
 yml2213andCursor
|
e621722218
|
fix(admin): 主站分销管理按最新分成与释放口径改展示
规则页按模式展示收号/卖出/服务费,通道费标明主站承担;订单改为释放状态筛选;结算区分自动与人工批次。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-10 17:36:49 +08:00 |
|
 yml2213andCursor
|
647fdc0b4a
|
feat(distribution): 通道费改主站承担,并按冷却期自动释放结算
利润不再扣支付通道费;站点可配置结算冷却期,到期自动入账,已释放后退款从收款站钱包回冲。同时修复当日自动批次无法追加、三方回冲打错钱包,以及测试库自增重置被 MySQL 统计缓存跳过的问题。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-10 17:11:58 +08:00 |
|
 yml2213andCursor
|
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
|
f5b4f27dee
|
迁移改号:000064-000067 顺延为 000065-000068,为 main 的 000064_ad_tracking 让号
- 000064_distribution_init -> 000065
- 000065_order_list_least_privilege -> 000066
- 000066_file_upload_owners -> 000067
- 000067_seed_test_distribution_site -> 000068
- 不改 SQL 内容,仅让 goose 版本号与 main 的迁移序列不重叠
|
2026-09-10 13:02:22 +08:00 |
|
 yml2213andCursor
|
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
|
438267f611
|
fix(frontend): 修复distributionSite中ESLint无用赋值警告
|
2026-09-09 20:03:20 +08:00 |
|
yml2213
|
556e76942e
|
style(frontend): 自动格式化代码符合Prettier门禁规范
|
2026-09-09 20:01:23 +08:00 |
|
yml2213
|
423672e47b
|
fix(distribution-admin): 全面优化全站表格列宽、单号防折行、平台与状态中文化体验
|
2026-09-09 19:57:06 +08:00 |
|
yml2213
|
1c16f26ae0
|
fix(distribution-admin): 全面优化大盘、对账单、钱包与前台商城的列宽排版、中文化与防换行体验
|
2026-09-09 19:47:11 +08:00 |
|
yml2213
|
4098f8f50f
|
fix(distribution-admin): 优化商品与账号展示页面表格列宽、中文化及防换行体验
|
2026-09-09 19:40:31 +08:00 |
|
yml2213
|
dd709fc12c
|
fix(distribution-admin): 优化分销收号管理表格列宽与中文化,补全已结单货架状态
|
2026-09-09 19:38:07 +08:00 |
|
yml2213
|
b16c45ce6f
|
fix(distribution): 修复分销结账退款分成计算逻辑与利润统计,优化分销订单表格列宽与展示体验
|
2026-09-09 19:34:04 +08:00 |
|
yml2213
|
19b18324a2
|
fix(distribution-admin): 优化左侧导航栏为固定不随页面滚动,独立右侧主体滚动区
|
2026-09-09 16:32:56 +08:00 |
|
yml2213
|
dd38227b95
|
fix(order): 确保分站发布的商品被租用后号主在主站可见并能正常交接
|
2026-09-09 16:26:21 +08:00 |
|
yml2213
|
e9787e1c27
|
fix(frontend): 补充 OrderDetailView 缺失的 handoffFocused 响应式变量
|
2026-09-09 16:16:45 +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
|
aa466051ac
|
fix(distribution-admin): add missing useMember and getMe imports in Orders.tsx and clean remaining site selectors
|
2026-09-09 14:12:19 +08:00 |
|
yml2213
|
2384bb3820
|
fix(distribution-admin): bind site context to member and enhance shelf product filters
|
2026-09-09 14:06:29 +08:00 |
|
yml2213
|
80ed9e7897
|
fix(migration): 修正 wallet_accounts 插入字段,移除不存在的 total 统计列
|
2026-09-09 13:52:46 +08:00 |
|
yml2213
|
3b31b7f650
|
feat(distribution): 补齐默认测试分销站test_1与test_fx1数据,菜单名称对齐为分销站点管理
|
2026-09-09 13:51:26 +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
|
a61828c6ca
|
feat(dev): 增加独立分销前台端口5191、标签页会话隔离与免hosts二级域名支持
|
2026-09-08 13:39:12 +08:00 |
|
yml2213
|
74ef817c41
|
fix(migration): 修复 000070 中 wallet_accounts 唯一索引单列残存导致的复合索引缺失问题
|
2026-09-08 13:30:52 +08:00 |
|
yml2213
|
d178619fc7
|
fix(migration): 提升 000070 与 000071 迁移幂等性,兼容已存在的索引与字段
|
2026-09-08 13:20:50 +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
|
72b805c499
|
fix(types): 修复合并后的 Listing 类型引用与接口类型兼容
|
2026-09-07 17:37:49 +08:00 |
|