diff --git a/internal/const/const.go b/internal/const/const.go index 6804d0ce..606752a0 100644 --- a/internal/const/const.go +++ b/internal/const/const.go @@ -19,7 +19,7 @@ const ( // 其他节点版本号,用来检测是否有需要升级的节点 NodeVersion = "0.3.7" - UserNodeVersion = "0.2.0" + UserNodeVersion = "0.2.1" AuthorityNodeVersion = "0.0.2" MonitorNodeVersion = "0.0.3" DNSNodeVersion = "0.2.0" diff --git a/internal/db/models/accounts/user_account_dao.go b/internal/db/models/accounts/user_account_dao.go index a02b5a76..98f5c538 100644 --- a/internal/db/models/accounts/user_account_dao.go +++ b/internal/db/models/accounts/user_account_dao.go @@ -108,7 +108,7 @@ func (this *UserAccountDAO) UpdateUserAccount(tx *dbs.Tx, accountId int64, delta if account == nil { return errors.New("invalid account id '" + types.String(accountId) + "'") } - var userId = int64(account.Id) + var userId = int64(account.UserId) var deltaFloat64 = float64(delta) if deltaFloat64 < 0 && account.Total < -deltaFloat64 { return errors.New("not enough account quota to decrease") @@ -235,3 +235,18 @@ func (this *UserAccountDAO) PayBills(tx *dbs.Tx) error { return nil } + +// CheckUserAccount 检查用户账户 +func (this *UserAccountDAO) CheckUserAccount(tx *dbs.Tx, userId int64, accountId int64) error { + exists, err := this.Query(tx). + Pk(accountId). + Attr("userId", userId). + Exist() + if err != nil { + return err + } + if !exists { + return models.ErrNotFound + } + return nil +} diff --git a/internal/db/models/user_features.go b/internal/db/models/user_features.go index 88a1cad8..50d1de85 100644 --- a/internal/db/models/user_features.go +++ b/internal/db/models/user_features.go @@ -50,6 +50,11 @@ var ( Code: "finance", Description: "开启费用账单相关功能", }, + { + Name: "套餐", + Code: "plan", + Description: "用户可以购买和管理套餐", + }, } ) diff --git a/internal/db/models/user_plan_dao.go b/internal/db/models/user_plan_dao.go index 118b0a54..f2705313 100644 --- a/internal/db/models/user_plan_dao.go +++ b/internal/db/models/user_plan_dao.go @@ -86,11 +86,17 @@ func (this *UserPlanDAO) FindEnabledUserPlan(tx *dbs.Tx, userPlanId int64, cache } // CountAllEnabledUserPlans 计算套餐数量 -func (this *UserPlanDAO) CountAllEnabledUserPlans(tx *dbs.Tx, isAvailable bool, isExpired bool, expiringDays int32) (int64, error) { +func (this *UserPlanDAO) CountAllEnabledUserPlans(tx *dbs.Tx, userId int64, isAvailable bool, isExpired bool, expiringDays int32) (int64, error) { var query = this.Query(tx). State(UserPlanStateEnabled). - Where("userId IN (SELECT id FROM " + SharedUserDAO.Table + " WHERE state=1)"). Where("planId IN (SELECT id FROM " + SharedPlanDAO.Table + " WHERE state=1)") + + if userId > 0 { + query.Attr("userId", userId) + } else { + query.Where("userId IN (SELECT id FROM " + SharedUserDAO.Table + " WHERE state=1)") + } + var today = timeutil.Format("Y-m-d") if isAvailable { query.Gte("dayTo", today) @@ -110,10 +116,11 @@ func (this *UserPlanDAO) CountAllEnabledUserPlans(tx *dbs.Tx, isAvailable bool, func (this *UserPlanDAO) ListEnabledUserPlans(tx *dbs.Tx, userId int64, isAvailable bool, isExpired bool, expiringDays int32, offset int64, size int64) (result []*UserPlan, err error) { var query = this.Query(tx). State(UserPlanStateEnabled). - Where("userId IN (SELECT id FROM " + SharedUserDAO.Table + " WHERE state=1)"). Where("planId IN (SELECT id FROM " + SharedPlanDAO.Table + " WHERE state=1)") if userId > 0 { query.Attr("userId", userId) + } else { + query.Where("userId IN (SELECT id FROM " + SharedUserDAO.Table + " WHERE state=1)") } var today = timeutil.Format("Y-m-d") if isAvailable { @@ -198,6 +205,22 @@ func (this *UserPlanDAO) FindAllEnabledPlansForServer(tx *dbs.Tx, userId int64, return } +// CheckUserPlan 检查用户套餐 +func (this *UserPlanDAO) CheckUserPlan(tx *dbs.Tx, userId int64, userPlanId int64) error { + exists, err := this.Query(tx). + Pk(userPlanId). + Attr("userId", userId). + State(UserPlanStateEnabled). + Exist() + if err != nil { + return err + } + if !exists { + return ErrNotFound + } + return nil +} + // NotifyUpdate 通知更新 func (this *UserPlanDAO) NotifyUpdate(tx *dbs.Tx, userPlanId int64) error { serverId, err := SharedServerDAO.FindEnabledServerIdWithUserPlanId(tx, userPlanId)