优化线下结算筛选

This commit is contained in:
yml2213
2026-08-16 20:00:09 +08:00
parent c06e5aaafd
commit 58f11b2043
11 changed files with 212 additions and 59 deletions
+8 -7
View File
@@ -150,13 +150,14 @@ type OfflineSettlementRequest struct {
}
type AdminOrderQuery struct {
Page int
PageSize int
Keyword string
Status string
HandoffStatus string
HandoffMode string
SettlementStatus string
Page int
PageSize int
Keyword string
Status string
HandoffStatus string
HandoffMode string
SettlementStatus string
OfflineSettlementStatus string
}
type AuditMeta = auditlog.Meta
@@ -55,12 +55,13 @@ func parsePagination(c *gin.Context) (int, int) {
func parseAdminOrderQuery(c *gin.Context) AdminOrderQuery {
page, pageSize := parsePagination(c)
return AdminOrderQuery{
Page: page,
PageSize: pageSize,
Keyword: strings.TrimSpace(c.Query("keyword")),
Status: strings.TrimSpace(c.Query("status")),
HandoffStatus: strings.TrimSpace(c.Query("handoff_status")),
HandoffMode: strings.TrimSpace(c.Query("handoff_mode")),
SettlementStatus: strings.TrimSpace(c.Query("settlement_status")),
Page: page,
PageSize: pageSize,
Keyword: strings.TrimSpace(c.Query("keyword")),
Status: strings.TrimSpace(c.Query("status")),
HandoffStatus: strings.TrimSpace(c.Query("handoff_status")),
HandoffMode: strings.TrimSpace(c.Query("handoff_mode")),
SettlementStatus: strings.TrimSpace(c.Query("settlement_status")),
OfflineSettlementStatus: strings.TrimSpace(c.Query("offline_settlement_status")),
}
}
@@ -93,6 +93,9 @@ func applyAdminOrderFilters(db *gorm.DB, query AdminOrderQuery) *gorm.DB {
if query.SettlementStatus != "" {
db = db.Where("o.settlement_status = ?", query.SettlementStatus)
}
if query.OfflineSettlementStatus != "" {
db = db.Where("COALESCE(NULLIF(o.offline_settlement_status, ''), 'none') = ?", query.OfflineSettlementStatus)
}
if keyword := strings.TrimSpace(query.Keyword); keyword != "" {
like := "%" + keyword + "%"
if id, err := strconv.ParseUint(keyword, 10, 64); err == nil {
+7 -6
View File
@@ -136,12 +136,13 @@ type CancelRequest struct {
}
type AdminPickupQuery struct {
Page int
PageSize int
Keyword string
Status string
ShopName string
AccountSource string
Page int
PageSize int
Keyword string
Status string
ShopName string
AccountSource string
OfflineSettlementStatus string
}
type SellerPickupQuery struct {
@@ -54,12 +54,13 @@ func parsePagination(c *gin.Context) (int, int) {
func parseAdminQuery(c *gin.Context) AdminPickupQuery {
page, pageSize := parsePagination(c)
return AdminPickupQuery{
Page: page,
PageSize: pageSize,
Keyword: c.Query("keyword"),
Status: c.Query("status"),
ShopName: c.Query("shop_name"),
AccountSource: c.Query("account_source"),
Page: page,
PageSize: pageSize,
Keyword: c.Query("keyword"),
Status: c.Query("status"),
ShopName: c.Query("shop_name"),
AccountSource: c.Query("account_source"),
OfflineSettlementStatus: c.Query("offline_settlement_status"),
}
}
@@ -687,6 +687,9 @@ func (r *Repository) ListAdmin(ctx context.Context, query AdminPickupQuery) (*Pa
if accountSource := strings.TrimSpace(query.AccountSource); accountSource != "" {
db = db.Where("p.account_source = ?", accountSource)
}
if offlineSettlementStatus := strings.TrimSpace(query.OfflineSettlementStatus); offlineSettlementStatus != "" {
db = db.Where("p.offline_settlement_status = ?", offlineSettlementStatus)
}
if kw := strings.TrimSpace(query.Keyword); kw != "" {
like := "%" + kw + "%"
db = db.Where(
@@ -175,6 +175,32 @@ func TestRepositoryListAdminFiltersOwnerPhone(t *testing.T) {
}
}
func TestRepositoryListAdminFiltersOfflineSettlementStatus(t *testing.T) {
repo, db := newPickupTestRepo(t)
first := seedPickup(t, db, StatusCompleted)
if err := db.Model(&first).Updates(map[string]any{
"settlement_mode": SettlementModePlatformManaged,
"offline_settlement_status": OfflineSettlementStatusPending,
}).Error; err != nil {
t.Fatalf("设置待线下结算提号失败: %v", err)
}
second := first
second.ID = 0
second.PickupNo = "PK-OFFLINE-SETTLED-001"
second.OfflineSettlementStatus = OfflineSettlementStatusSettled
if err := db.Create(&second).Error; err != nil {
t.Fatalf("创建已线下结算提号失败: %v", err)
}
result, err := repo.ListAdmin(t.Context(), AdminPickupQuery{OfflineSettlementStatus: OfflineSettlementStatusPending})
if err != nil {
t.Fatalf("ListAdmin() error = %v", err)
}
if result.Total != 1 || len(result.Items) != 1 || result.Items[0].OfflineSettlementStatus != OfflineSettlementStatusPending {
t.Fatalf("待线下结算筛选结果 = %+v", result)
}
}
func TestRepositoryListShopNamesReturnsDistinctPlatformOptions(t *testing.T) {
repo, db := newPickupTestRepo(t)
first := seedPickup(t, db, StatusPickingUp)