fix: align business pages and detail drawers with prototype
This commit is contained in:
@@ -45,7 +45,7 @@ func (s *ChannelService) List(ctx context.Context, req *dto.ChannelQuery) (*dto.
|
||||
filter := business.ChannelFilter{Sources: sources, BusierUserID: req.BusierUserID, BusierAccount: strings.TrimSpace(req.BusierAccount), Keyword: strings.TrimSpace(req.Keyword), Level: req.Level, RegisterType: req.RegisterType, Status: req.Status, LockStatus: req.LockStatus, Effective: req.Effective}
|
||||
filter.Phone, filter.SettlementDays = strings.TrimSpace(req.Phone), req.SettlementDays
|
||||
filter.SortField, filter.Ascending = req.SortField, req.SortOrder == "asc"
|
||||
if filter.SortField != "" && filter.SortField != "createdAt" || filter.SettlementDays != nil && *filter.SettlementDays < 1 {
|
||||
if filter.SortField != "" && filter.SortField != "createdAt" && filter.SortField != "playerCount" && filter.SortField != "totalPayAmount" || filter.SettlementDays != nil && *filter.SettlementDays < 1 {
|
||||
return nil, business.ErrChannelInput
|
||||
}
|
||||
for _, pair := range []struct {
|
||||
@@ -70,7 +70,7 @@ func (s *ChannelService) List(ctx context.Context, req *dto.ChannelQuery) (*dto.
|
||||
out.StatusCounts = &dto.ChannelStatusCounts{Normal: result.StatusCounts.Normal, Locked: result.StatusCounts.Locked, Terminated: result.StatusCounts.Terminated}
|
||||
}
|
||||
for _, c := range result.Rows {
|
||||
out.Rows = append(out.Rows, &dto.ChannelResponse{ID: c.ID, SourceDB: c.SourceDB, PlatformName: business.PlatformName(c.SourceDB), Account: c.Account, Nickname: c.Nickname, Level: c.Level, ParentID: c.ParentID, ParentName: c.ParentName, RealName: c.RealName, RegisterType: c.RegisterType, BusierID: c.BusierID, BusierUserID: c.BusierUserID, BusierDisplayName: c.BusinessDisplayName(), Status: c.Status, LockStatus: c.LockStatus, GameCount: c.GameCount, PlayerCount: c.PlayerCount, TotalPayAmount: c.TotalPayAmount, Effective: c.QualifiedAt != nil, QualifiedAt: c.QualifiedAt, CreatedAt: c.CreatedUnix, LastLoginAt: c.LastLoginUnix, Phone: c.Phone, SettlementDays: c.SettlementDays})
|
||||
out.Rows = append(out.Rows, &dto.ChannelResponse{ID: c.ID, SourceDB: c.SourceDB, PlatformName: business.PlatformName(c.SourceDB), Account: c.Account, Nickname: c.Nickname, Level: c.Level, ParentID: c.ParentID, ParentName: c.ParentDisplayName(), RealName: c.RealName, RegisterType: c.RegisterType, BusierID: c.BusierID, BusierUserID: c.BusierUserID, BusierDisplayName: c.BusinessDisplayName(), Status: c.Status, LockStatus: c.LockStatus, GameCount: c.GameCount, PlayerCount: c.PlayerCount, TotalPayAmount: c.TotalPayAmount, Effective: c.QualifiedAt != nil, QualifiedAt: c.QualifiedAt, CreatedAt: c.CreatedUnix, LastLoginAt: c.LastLoginUnix, Phone: c.Phone, SettlementDays: c.SettlementDays})
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
@@ -28,7 +28,11 @@ func (s *ChannelPortraitService) Portrait(ctx context.Context, req *dto.ChannelP
|
||||
basic.ParentPromoteID = &parent.ID
|
||||
basic.ParentPromoteName = &parent.Account
|
||||
basic.ParentPromoteAccount = &parent.Account
|
||||
} else if parent := c.ParentDisplayName(); parent != "" {
|
||||
basic.ParentPromoteName = &parent
|
||||
}
|
||||
basic.Phone, basic.SettlementDays = c.Phone, c.SettlementDays
|
||||
basic.LockStatus, basic.LockStatusLabel = c.LockStatus, business.ChannelLockStatusLabel(c.LockStatus)
|
||||
out := &dto.ChannelPortraitResponse{Basic: basic, Period: p.Period, Available: p.Available, UnavailableReason: p.UnavailableReason, RegisterTrend: []*dto.PortraitTrend{}, PayTrend: []*dto.PortraitTrend{}, GameDistribution: []*dto.ChannelGameResponse{}, PayTiers: []*dto.ChannelPayTier{}}
|
||||
if m := p.Metrics; m != nil {
|
||||
out.Metrics = &dto.ChannelPortraitMetrics{Register: portraitMetricResponse(m.Register), PayAmount: portraitMetricResponse(m.PayAmount), PayRate: portraitMetricResponse(m.PayRate), Active: portraitMetricResponse(m.Active)}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package business
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"kra/internal/biz/business"
|
||||
"kra/internal/service/dto"
|
||||
)
|
||||
|
||||
type channelPortraitTransportFake struct{ result *business.ChannelPortrait }
|
||||
|
||||
func (f channelPortraitTransportFake) Portrait(context.Context, business.ChannelKey, string) (*business.ChannelPortrait, error) {
|
||||
return f.result, nil
|
||||
}
|
||||
|
||||
func TestChannelPortraitKeepsContactAndCooperationStatusSeparateFromAudit(t *testing.T) {
|
||||
level, auditStatus, days := 1, 1, 7
|
||||
for _, sample := range []struct {
|
||||
status int
|
||||
label string
|
||||
}{{0, "正常"}, {-1, "锁定"}, {-2, "解除合作"}} {
|
||||
channel := &business.Channel{ChannelKey: business.ChannelKey{SourceDB: "lx", ID: 100}, Account: "渠道账号", Level: &level, Status: &auditStatus, LockStatus: &sample.status, Phone: "13812345678", SettlementDays: &days, BusinessPath: []string{"一级商务", "所属商务"}}
|
||||
service := &ChannelPortraitService{uc: channelPortraitTransportFake{&business.ChannelPortrait{Basic: &business.ChannelPortraitBasic{Channel: channel}}}}
|
||||
result, err := service.Portrait(context.Background(), &dto.ChannelPortraitQuery{SourceDB: "lx", PromoteID: 100})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
b := result.Basic
|
||||
if b.LockStatusLabel != sample.label || b.StatusLabel != "正常" || b.Phone != channel.Phone || b.SettlementDays == nil || *b.SettlementDays != 7 || b.BusierDisplayName != "一级商务→所属商务" || b.ParentPromoteName == nil || *b.ParentPromoteName != "所属商务" {
|
||||
t.Fatalf("portrait metadata or status mismatch: %+v", b)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ func (s *BusinessPerformanceService) Export(ctx context.Context, req *dto.Perfor
|
||||
}
|
||||
}
|
||||
}
|
||||
appendRow("筛选结果去重合计", "上下级不重复计算", "", "", data.MatrixTotal, data.MatrixRate, data.MatrixTrend)
|
||||
appendRow("可见范围合计", "不随人员筛选变化,上下级不重复计算", "", "", data.MatrixTotal, data.MatrixRate, data.MatrixTrend)
|
||||
return ledgerWorkbook("商务绩效统计", headers, rows)
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,10 @@ type ChannelPortraitBasic struct {
|
||||
Account string `json:"account"`
|
||||
Nickname string `json:"nickname"`
|
||||
RealName string `json:"realName"`
|
||||
Phone string `json:"phone"`
|
||||
SettlementDays *int `json:"settlementDays"`
|
||||
LockStatus *int `json:"lockStatus"`
|
||||
LockStatusLabel string `json:"lockStatusLabel"`
|
||||
PromoteLevel *int `json:"promoteLevel"`
|
||||
PromoteLevelLabel string `json:"promoteLevelLabel"`
|
||||
Status *int `json:"status"`
|
||||
|
||||
Reference in New Issue
Block a user