From c2d0db5875597643369cea9dcff1133d7d63de26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=B6=E6=9E=84=E5=B8=88?= Date: Tue, 2 Jun 2026 21:00:52 -0700 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D(#143):=20=E9=82=80=E8=AF=B7?= =?UTF-8?q?=E6=9D=83=E7=9B=8A=E6=9F=A5=E8=AF=A2=E6=8E=92=E5=BA=8F=20invite?= =?UTF-8?q?eAndInviterIds=20=E6=B6=88=E9=99=A4=20map=20=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E5=BA=8F=20flake?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit inviteeAndInviterSet 是 map,按 range 收集到 slice 后顺序不固定, 传给 fillGiftBenefits 的 IN (?,?) 参数随之乱序,导致 sqlmock 按位置 匹配的单测 TestQueryBenefitsKeepsDirectInviteeGift 偶现失败(本地 10 次复现约 2-4 次)。 在收集后追加 slices.Sort,让生产代码本身的下游 SQL 参数稳定;同步把 测试期望改为升序。50 次重复 + race 全绿。 Co-authored-by: multica-agent --- internal/logic/admin/invite/benefits.go | 2 ++ internal/logic/admin/invite/benefits_test.go | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/logic/admin/invite/benefits.go b/internal/logic/admin/invite/benefits.go index 7c0fe66..d826f43 100644 --- a/internal/logic/admin/invite/benefits.go +++ b/internal/logic/admin/invite/benefits.go @@ -2,6 +2,7 @@ package invite import ( "context" + "slices" modellog "github.com/perfect-panel/server/internal/model/log" "github.com/perfect-panel/server/pkg/xerr" @@ -113,6 +114,7 @@ func QueryBenefits(ctx context.Context, db *gorm.DB, relations []InviteRelation) for userId := range inviteeAndInviterSet { inviteeAndInviterIds = append(inviteeAndInviterIds, userId) } + slices.Sort(inviteeAndInviterIds) if err := fillCommissionBenefits(ctx, db, result, orderToInvitee, inviteeToInviter, orderNos, inviterIds); err != nil { return nil, err diff --git a/internal/logic/admin/invite/benefits_test.go b/internal/logic/admin/invite/benefits_test.go index 322490c..844ae0a 100644 --- a/internal/logic/admin/invite/benefits_test.go +++ b/internal/logic/admin/invite/benefits_test.go @@ -25,7 +25,7 @@ func TestQueryBenefitsCountsFamilyOwnerGiftAsInviteeGift(t *testing.T) { WithArgs(33, int64(100), "family-order", 331, 332). WillReturnRows(sqlmock.NewRows([]string{"object_id", "content"})) mock.ExpectQuery("object_id IN"). - WithArgs(34, int64(900), int64(200), int64(100), "family-order"). + WithArgs(34, int64(100), int64(200), int64(900), "family-order"). WillReturnRows(sqlmock.NewRows([]string{"object_id", "content"}). AddRow(900, `{"type":341,"order_no":"family-order","amount":7,"balance":7,"remark":"邀请赠送"}`)) @@ -58,7 +58,7 @@ func TestQueryBenefitsKeepsDirectInviteeGift(t *testing.T) { WithArgs(33, int64(100), "direct-order", 331, 332). WillReturnRows(sqlmock.NewRows([]string{"object_id", "content"})) mock.ExpectQuery("object_id IN"). - WithArgs(34, int64(200), int64(100), "direct-order"). + WithArgs(34, int64(100), int64(200), "direct-order"). WillReturnRows(sqlmock.NewRows([]string{"object_id", "content"}). AddRow(200, `{"type":341,"order_no":"direct-order","amount":5,"balance":5,"remark":"邀请赠送"}`))