// Copyright 2023 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . package instances import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/userconfigs" "github.com/TeaOSLab/EdgeUser/internal/utils/dateutils" "github.com/TeaOSLab/EdgeUser/internal/web/actions/actionutils" "github.com/iwind/TeaGo/lists" "github.com/iwind/TeaGo/maps" timeutil "github.com/iwind/TeaGo/utils/time" ) type RenewAction struct { actionutils.ParentAction } func (this *RenewAction) RunGet(params struct { UserInstanceId int64 }) { userInstanceResp, err := this.RPC().UserADInstanceRPC().FindUserADInstance(this.UserContext(), &pb.FindUserADInstanceRequest{UserADInstanceId: params.UserInstanceId}) if err != nil { this.ErrorPage(err) return } var userInstance = userInstanceResp.UserADInstance if userInstance == nil { this.NotFound("userInstance", params.UserInstanceId) return } // 实例 var instanceMap = maps.Map{ "id": 0, } if userInstance.AdPackageInstance != nil { if userInstance.AdPackageInstance.IpAddresses == nil { userInstance.AdPackageInstance.IpAddresses = []string{} } instanceMap = maps.Map{ "id": userInstance.AdPackageInstance.Id, "ipAddresses": userInstance.AdPackageInstance.IpAddresses, } } // 产品 var packageMap = maps.Map{ "id": 0, } var packageId int64 if userInstance.AdPackageInstance != nil && userInstance.AdPackageInstance.AdPackage != nil { packageId = userInstance.AdPackageInstance.AdPackage.Id packageMap = maps.Map{ "id": userInstance.AdPackageInstance.AdPackage.Id, "summary": userInstance.AdPackageInstance.AdPackage.Summary, } } this.Data["userInstance"] = maps.Map{ "id": userInstance.Id, "periodId": userInstance.AdPackagePeriodId, "dayTo": dateutils.SplitYmd(userInstance.DayTo), "today": timeutil.Format("Y-m-d"), "isExpired": len(userInstance.DayTo) == 0 || userInstance.DayTo < timeutil.Format("Ymd"), "isAvailable": userInstance.IsAvailable, "instance": instanceMap, "package": packageMap, } // 价格选项 if packageId > 0 { pricesResp, err := this.RPC().ADPackagePriceRPC().FindADPackagePrices(this.UserContext(), &pb.FindADPackagePricesRequest{AdPackageId: packageId}) if err != nil { this.ErrorPage(err) return } var priceMaps = []maps.Map{} var allValidPeriodIds = []int64{} for _, price := range pricesResp.AdPackagePrices { allValidPeriodIds = append(allValidPeriodIds, price.AdPackagePeriodId) priceMaps = append(priceMaps, maps.Map{ "periodId": price.AdPackagePeriodId, "price": price.Price, }) } this.Data["prices"] = priceMaps // 有效期选项 var periodMaps = []maps.Map{} periodResp, err := this.RPC().ADPackagePeriodRPC().FindAllAvailableADPackagePeriods(this.UserContext(), &pb.FindAllAvailableADPackagePeriodsRequest{}) if err != nil { this.ErrorPage(err) return } for _, period := range periodResp.AdPackagePeriods { if !lists.ContainsInt64(allValidPeriodIds, period.Id) { continue } periodMaps = append(periodMaps, maps.Map{ "id": period.Id, "count": period.Count, "unit": period.Unit, "unitName": userconfigs.ADPackagePeriodUnitName(period.Unit), }) } this.Data["allPeriods"] = periodMaps } else { this.Data["allPeriods"] = []maps.Map{} this.Data["prices"] = []maps.Map{} } this.Show() }