// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. //go:build plus package userPlans import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/finance/financeutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/maps" ) type IndexAction struct { actionutils.ParentAction } func (this *IndexAction) Init() { this.Nav("", "", "") } func (this *IndexAction) RunGet(params struct { Type string UserId int64 }) { if len(params.Type) == 0 { params.Type = "available" } this.Data["type"] = params.Type var total int64 = 0 // 有效 { countResp, err := this.RPC().UserPlanRPC().CountAllEnabledUserPlans(this.AdminContext(), &pb.CountAllEnabledUserPlansRequest{ IsAvailable: true, IsExpired: false, ExpiringDays: 0, UserId: params.UserId, }) if err != nil { this.ErrorPage(err) return } this.Data["countAvailable"] = countResp.Count if params.Type == "available" { total = countResp.Count } } // 过期 { countResp, err := this.RPC().UserPlanRPC().CountAllEnabledUserPlans(this.AdminContext(), &pb.CountAllEnabledUserPlansRequest{ IsAvailable: false, IsExpired: true, ExpiringDays: 0, UserId: params.UserId, }) if err != nil { this.ErrorPage(err) return } this.Data["countExpired"] = countResp.Count if params.Type == "expired" { total = countResp.Count } } // 7天过期 { countResp, err := this.RPC().UserPlanRPC().CountAllEnabledUserPlans(this.AdminContext(), &pb.CountAllEnabledUserPlansRequest{ IsAvailable: false, IsExpired: false, ExpiringDays: 7, UserId: params.UserId, }) if err != nil { this.ErrorPage(err) return } this.Data["countExpiring7"] = countResp.Count if params.Type == "expiring7" { total = countResp.Count } } // 30天过期 { countResp, err := this.RPC().UserPlanRPC().CountAllEnabledUserPlans(this.AdminContext(), &pb.CountAllEnabledUserPlansRequest{ IsAvailable: false, IsExpired: false, ExpiringDays: 30, UserId: params.UserId, }) if err != nil { this.ErrorPage(err) return } this.Data["countExpiring30"] = countResp.Count if params.Type == "expiring30" { total = countResp.Count } } // 列表 var page = this.NewPage(total) this.Data["page"] = page.AsHTML() var expiringDays = int32(0) if params.Type == "expiring7" { expiringDays = 7 } else if params.Type == "expiring30" { expiringDays = 30 } userPlansResp, err := this.RPC().UserPlanRPC().ListEnabledUserPlans(this.AdminContext(), &pb.ListEnabledUserPlansRequest{ IsAvailable: params.Type == "available", IsExpired: params.Type == "expired", ExpiringDays: expiringDays, UserId: params.UserId, Offset: page.Offset, Size: page.Size, }) if err != nil { this.ErrorPage(err) return } var userPlanMaps = []maps.Map{} for _, userPlan := range userPlansResp.UserPlans { // user var userMap = maps.Map{"id": 0} if userPlan.User != nil { userMap = maps.Map{ "id": userPlan.User.Id, "fullname": userPlan.User.Fullname, "username": userPlan.User.Username, } } // plan var planMap = maps.Map{"id": 0} if userPlan.Plan != nil { planMap = maps.Map{ "id": userPlan.Plan.Id, "name": userPlan.Plan.Name, } } // server var serverMaps = []maps.Map{} if len(userPlan.Servers) > 0 { for _, server := range userPlan.Servers { // 补足网站名称 if len(server.Name) == 0 && len(server.ServerNamesJSON) > 0 { var serverNames = []*serverconfigs.ServerNameConfig{} err = json.Unmarshal(server.ServerNamesJSON, &serverNames) if err == nil && len(serverNames) > 0 { server.Name = serverNames[0].FirstName() } } serverMaps = append(serverMaps, maps.Map{ "id": server.Id, "name": server.Name, "type": server.Type, }) } } userPlanMaps = append(userPlanMaps, maps.Map{ "id": userPlan.Id, "isOn": userPlan.IsOn, "name": userPlan.Name, "dayTo": userPlan.DayTo, "user": userMap, "plan": planMap, "servers": serverMaps, }) } this.Data["userPlans"] = userPlanMaps // 价格设置 priceConfig, err := financeutils.ReadPriceConfig(this.AdminContext()) if err != nil { this.ErrorPage(err) return } this.Data["canUsePlans"] = priceConfig != nil && priceConfig.EnablePlans this.Show() }