Commit Graph
138 Commits
Author SHA1 Message Date
yml2213andCursor 768902f2f7 feat(distribution): 补齐退款加价回退、本站自卖与开通默认规则
退款时压缩卖方加价,人工/自动批次仅完结单可入账,号主收入进主站钱包;仲裁后重算释放并支持作废未入账 DS。开通时四种模式按默认生效,对外口径合并为 35/40/25,不再单独展示通道费。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 18:13:46 +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 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
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 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 d762b33f54 refactor(distribution): 重写分销迁移并落地利润百分比分成与货架比例
将 000064-000078 合并为 064/065/066,默认规则改为收号 35%、卖出 40%、服务费 25%。
货架调价改为增加分站 1 元兑换哈夫币比例。sql-guard 仅保护 main 已发布迁移。
2026-09-08 19:02:58 +08:00
yml2213 2c4e87475a feat(distribution): 完善分销收号资产双视图、商户提现、自主加价、品牌装修与数据大盘 2026-09-08 16:05:30 +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 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 3f86dd85ad feat(admin): 优化商品审核工作台界面、截图凭证核验与按住速览体验
- 深度优化商品审核工作台:指标概览卡片、风险边条队列、标价管道联动、核心资产高密度展示、底部决策浮动 Dock、全套键盘快捷键
- 重构截图大图查看体验:移除旧版底部溢出的全局画廊,封装全屏居中弹窗 AdminListingReviewPreviewDialog,支持「按住速览(松手即关闭)」与「常驻弹窗(缩放/翻页/打码/原图)」双模交互
- 新增在线截图编辑器 ImageEditorDialog:支持平滑马赛克打码、自由裁剪与旋转保存
- 弹窗组件解耦:抽离审核拒绝、调价、全量核验、快捷键速查等子组件,严格控制单文件行数
- 后端支持:新增商品审核调整价格接口与配套单元测试
2026-09-07 13:29:01 +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 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 576cadcafa 适配 dev 基线:迁移改号 000064/65 并移除 backupmonitor 残留 2026-09-05 10:54:07 +08:00
yml2213 2ffa7a89b1 实现分销网后台基础功能与独立前端 2026-09-05 10:52:36 +08:00
yml2213 208f12ddb4 完善本地质量门禁与资金链路测试 2026-09-02 13:50:19 +08:00
yml2213 327a03672a 修复冻结用户即时下线 2026-08-30 21:19:47 +08:00
yml2213 c156c478d8 优化后台高频查询性能 2026-08-29 00:16:16 +08:00
yml2213 c87883cc65 完善订单交接结账流程留痕 2026-08-28 23:48:32 +08:00
yml2213 a9a9127076 新增退款待审核角标提醒 2026-08-28 23:10:07 +08:00
yml2213 16237dcefc fix(chat): 修复一键清理未读失败 2026-08-25 19:32:04 +08:00
yml2213 52dcb18c96 perf(chat): 分页客服会话并拆分统计查询 2026-08-25 19:21:38 +08:00
yml2213 d95b95211c fix(chat): 提升二维码 OCR 稳定性 2026-08-25 16:59:05 +08:00
yml2213 8f6356a3d7 fix(chat): 优化后台限流与 SSE 日志 2026-08-25 16:20:58 +08:00
yml2213 80e329a604 增加 运营开支 2026-08-20 16:06:05 +08:00
yml2213 c91423a19b 修复冻结用户强制下线 2026-08-18 20:02:21 +08:00
yml2213 f67ee12d72 新增备份监控与定时配置 2026-08-16 23:53:50 +08:00
yml2213 85332df2bd 订单接口最小化与私有文件访问加固
- 订单列表使用独立最小 DTO 并分页,号主待办提供独立接口与统计
- 用户 token 增加版本控制,冻结/改密/退出即时撤销会话
- 移除 URL token 传参,SSE 与接口统一使用 HttpOnly Cookie
- 私有文件按上传归属与业务关联授权,收款凭证转私有访问并校验归属
- 公开商品接口返回最小字段,隐藏号主身份与内部状态
- 每日清理超过 30 天未关联业务的上传归属,上传归属失败时补偿删除对象
2026-08-16 21:47:46 +08:00
yml2213 80e55ba281 支持提号完成后财务调整 2026-08-16 19:52:12 +08:00
yml2213 d2429618f4 支持迁移对象存储到 OSS 2026-08-16 12:19:51 +08:00
yml2213 4c1fe7439d 新增客服一键交接功能 2026-08-15 17:27:35 +08:00
yml2213 8fb7d3bac0 feat(pickup): support platform managed offline settlement 2026-08-09 20:20:39 +08:00
yml2213 9511b580e4 新增撞车订单人工退款 2026-07-31 21:57:35 +08:00
yml2213 88d74aca7d 重构日志与可观测性体系
新增单行文本编码器与结构化 GORM 日志,统一错误记录与请求日志策略,收紧日志文件权限并修复按天切分与压缩,支付回调参数脱敏,生产强制阿里云短信,RequestID 校验防注入,日志文案中文化。
2026-07-29 16:19:35 +08:00
yml2213 99e8eb28af 实现外部商品调价 2026-07-26 19:17:09 +08:00
yml2213 6b44ab599d 增加线下提号店铺管理 2026-07-26 18:19:12 +08:00
yml2213 c594b543d1 完善租客等级免押与积分管理 2026-07-26 18:07:10 +08:00
yml2213 379536e5c5 新增其他线下出款记账 2026-07-26 17:13:08 +08:00
yml2213 dbe0cda2c6 新增资金出款查询与财务统计 2026-07-26 16:18:31 +08:00
yml2213 9ccc16e068 支持客服主动发起申诉 2026-07-26 09:54:27 +08:00
yml2213 4bc25b87d8 修复平台代管订单流程 2026-07-25 19:17:19 +08:00
yml2213 9bb57b7094 优化线下提号利润修改 2026-07-25 14:53:11 +08:00
yml2213 6450b31129 撞车订单新增「接待中」状态,支持后台接待标记
已支付订单可标记为接待中,避免重复跟进;完成/取消覆盖接待中状态,前后台同步展示与筛选。
2026-07-19 16:08:41 +08:00
yml2213 a4189db4ca 业务更名为撞车并切换crash路由
用户可见文案与页面/API路径改为撞车与crash,保留mohong表与权限码兼容;移动端入口去掉租/撞图标。
2026-07-16 21:19:35 +08:00
yml2213 e07532a188 移除摸大红支付后建群逻辑,仅保留扫码与复制
支付成功只固化客服二维码与订单文案;同步清理迁移、配置与前后端相关字段。
2026-07-16 19:52:40 +08:00
yml2213 6d61027318 新增摸大红业务并修复后台链接按钮白字
支持分类筛选、搜索、下单支付建群与固定二维码;合并迁移种子数据;后台表格编辑/详情链接恢复主题色可见。
2026-07-16 18:08:18 +08:00
yml2213 b96d6141f5 用户管理增加余额调账功能
支持后台加减可用余额并写入资金流水与审计,优化操作列按钮样式。
2026-07-13 21:30:38 +08:00
yml2213 090a90a268 添加订单押金暂扣与归还 2026-07-05 19:35:57 +08:00