fix(distribution): 修复收号站订单详情权限、专属支付通道路由、大盘统计与仲裁积分隔离

- 修复 FindOrder 在收号站模式(two_party_distributor_receive / three_party)下的 403 权限判定,放行参与方站点成员并精准计算收益
- 串联 distribution_site_payment_channels 至 payment.Start 核心支付发起流程,分销订单优先使用绑定的专属商户通道
- 修复数据大盘 GetDashboardAnalytics 趋势中 ReceivedCount 恒为 0 的问题,并对齐今日订单与 GMV 统计
- 修复 dispute/arbitration.go 仲裁完成时向分销租客发放成长积分的泄漏风险
- 提现管理新增 distribution_site_name/distribution_site_code 字段并在后台列表与详情弹窗中区分展示分销站
- GetPublicSiteInfo 增加 X-Distribution-Site-Code 请求头兜底支持
This commit is contained in:
yml2213
2026-09-11 10:31:14 +08:00
parent 6acdead0f0
commit 9ae763dee6
15 changed files with 427 additions and 84 deletions
@@ -74,6 +74,31 @@ func TestDistributionOrderSnapshotAndQueries(t *testing.T) {
if _, err := repo.FindOrder(t.Context(), 0, order.ID); err != nil {
t.Fatal(err)
}
// 验证分销站成员管理员可查看本站参与的订单
adminUser := model.AdminUser{Username: "dist_admin", Status: "active"}
if err := db.Create(&adminUser).Error; err != nil {
t.Fatal(err)
}
if err := db.Create(&model.DistributionSiteMember{SiteID: site.ID, AdminUserID: adminUser.ID, MemberType: "site_operator", Status: "active"}).Error; err != nil {
t.Fatal(err)
}
detail, err := repo.FindOrder(t.Context(), adminUser.ID, order.ID)
if err != nil {
t.Fatalf("FindOrder by site member failed: %v", err)
}
if detail.DistributorEarningCent != 1000 || detail.DistributorRole != "receive" {
t.Fatalf("unexpected detail for site member: %+v", detail)
}
// 验证未关联站点的管理员无法查看
otherAdmin := model.AdminUser{Username: "other_admin", Status: "active"}
if err := db.Create(&otherAdmin).Error; err != nil {
t.Fatal(err)
}
if _, err := repo.FindOrder(t.Context(), otherAdmin.ID, order.ID); err != ErrSiteAccessDenied {
t.Fatalf("expected ErrSiteAccessDenied, got: %v", err)
}
}
func TestDistributionPaymentChannelAndSettlementBatch(t *testing.T) {
@@ -862,6 +887,9 @@ func TestDistributionReceivedListingsAndWallet(t *testing.T) {
if analytics.TotalReceivedCount != 1 || analytics.AvailableBalanceCent != 2500 {
t.Fatalf("unexpected analytics: %+v", analytics)
}
if len(analytics.TrendDays) == 0 || analytics.TrendDays[len(analytics.TrendDays)-1].ReceivedCount != 1 {
t.Fatalf("expected trend today ReceivedCount=1, got: %+v", analytics.TrendDays)
}
}
func TestPlatformSellSettlementCreditsOnlySiteShare(t *testing.T) {