From 45a43c20a46f62df8fe75d70c8b7afc32af0c507 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Fri, 10 Jul 2026 23:27:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(backend):=20=E8=AE=A2=E5=8D=95=E5=88=97?= =?UTF-8?q?=E8=A1=A8=20user=5Fname=20=E5=9C=A8=20real=5Fname=20=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E5=9B=9E=E9=80=80=20username?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- backend/internal/service/pay.go | 6 +++++- backend/internal/service/pay_test.go | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/backend/internal/service/pay.go b/backend/internal/service/pay.go index 82fda24..afdeb77 100644 --- a/backend/internal/service/pay.go +++ b/backend/internal/service/pay.go @@ -741,7 +741,11 @@ func (s *PayService) ListPurchases(shopID uint64, page, pageSize int, status str return nil, err } for _, u := range users { - names[u.ID] = u.RealName + if u.RealName != "" { + names[u.ID] = u.RealName + } else { + names[u.ID] = u.Username + } } } diff --git a/backend/internal/service/pay_test.go b/backend/internal/service/pay_test.go index 0e7f69e..1451160 100644 --- a/backend/internal/service/pay_test.go +++ b/backend/internal/service/pay_test.go @@ -942,3 +942,25 @@ func TestListPurchases_UserNameJoin(t *testing.T) { assert.Equal(t, "王老板", byOtn["un-known"].UserName) assert.Empty(t, byOtn["un-missing"].UserName, "查不到用户留空") } + +// TestListPurchases_UserNameFallbackToUsername:real_name 为空(用户创建接口该字段可选)时, +// user_name 必须回退 username,不能显示空白。 +func TestListPurchases_UserNameFallbackToUsername(t *testing.T) { + db := testutil.SetupTestDB() + svc := newTestPaySvc(db, "http://pay.invalid") + shop := testutil.CreateTestShop(db, "PAY108") + user := testutil.CreateTestUser(db, shop.ID, "noreal", "pass", "admin") + // CreateTestUser 默认会填 real_name,显式置空才能命中回退分支。 + require.NoError(t, db.Model(user).Update("real_name", "").Error) + + base := time.Now().Add(-time.Hour) + createPurchaseFull(t, db, shop.ID, user.ID, "annual_pro", 599900, "un-noreal", "paid", "", base) + + list, err := svc.ListPurchases(shop.ID, 1, 20, "") + require.NoError(t, err) + byOtn := map[string]PurchaseListItem{} + for _, item := range list.Items { + byOtn[item.OutTradeNo] = item + } + assert.Equal(t, "noreal", byOtn["un-noreal"].UserName, "real_name 为空时应回退 username") +}