diff --git a/api/reward/reward.go b/api/reward/reward.go index a022606..55a29d6 100644 --- a/api/reward/reward.go +++ b/api/reward/reward.go @@ -12,6 +12,7 @@ import ( type IRewardV1 interface { List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) + ListInternetCharge(ctx context.Context, req *v1.ListInternetChargeReq) (res *v1.ListRes, err error) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error) Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error) diff --git a/api/reward/v1/reward.go b/api/reward/v1/reward.go index 5396dee..d303b8d 100644 --- a/api/reward/v1/reward.go +++ b/api/reward/v1/reward.go @@ -15,6 +15,16 @@ type ListReq struct { RewardTypeId int64 `json:"rewardTypeId" dc:"奖励类型ID"` } +type ListInternetChargeReq struct { + g.Meta `path:"/reward/internetCharge" method:"get" tags:"Backend/Reward" summary:"(系统、商户、门店后台)获取网费奖励列表"` + Name string `json:"name" dc:"名称"` + Page int `json:"page" dc:"页数"` + Size int `json:"size" dc:"每页数量"` + Status int `json:"status" dc:"状态"` + StoreId int64 `json:"storeId" dc:"门店ID"` + RewardTypeId int64 `json:"rewardTypeId" dc:"奖励类型ID"` +} + type ListRes struct { List interface{} `json:"list" dc:"奖励列表"` Total int `json:"total" dc:"总数"` diff --git a/internal/logic/reward/reward.go b/internal/logic/reward/reward.go index b3e70fd..9cda271 100644 --- a/internal/logic/reward/reward.go +++ b/internal/logic/reward/reward.go @@ -348,6 +348,84 @@ func (s *sReward) List(ctx context.Context, in *model.RewardListIn) (out *model. }, nil } +// ListInternetCharge 网费奖励列表 +func (s *sReward) ListInternetCharge(ctx context.Context, in *model.RewardListIn) (out *model.InternetChargeRewardListOut, err error) { + + rewardCols := dao.Rewards.Columns() + orm := dao.Rewards.Ctx(ctx).LeftJoin( + dao.RewardTypes.Table(), + fmt.Sprintf( + "%s.%s = %s.%s", + dao.Rewards.Table(), dao.Rewards.Columns().RewardTypeId, + dao.RewardTypes.Table(), dao.RewardTypes.Columns().Id, + ), + ).Fields(fmt.Sprintf("%s.*,%s.name as reward_type_name", dao.Rewards.Table(), dao.RewardTypes.Table())) + switch in.OperatorRole { + case consts.AdminRoleCode: + // 系统管理员只能查询 source = 1 的奖励 + orm = orm.Where(rewardCols.Source, 1) + case consts.MerchantRoleCode, consts.StoreRoleCode: + // 合并商户和门店角色权限校验 + var exist bool + if in.OperatorRole == consts.MerchantRoleCode { + exist, err = dao.MerchantAdmins.Ctx(ctx). + Where(do.MerchantAdmins{Id: in.OperatorId}). + LeftJoin( + dao.Stores.Table(), + fmt.Sprintf("%s.%s = %s.%s", + dao.MerchantAdmins.Table(), dao.MerchantAdmins.Columns().MerchantId, + dao.Stores.Table(), dao.Stores.Columns().MerchantId, + ), + ). + Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), in.StoreId). + Exist() + } else { + exist, err = dao.StoreAdmins.Ctx(ctx). + Where(do.StoreAdmins{Id: in.OperatorId}). + LeftJoin( + dao.Stores.Table(), + fmt.Sprintf("%s.%s = %s.%s", + dao.StoreAdmins.Table(), dao.StoreAdmins.Columns().StoreId, + dao.Stores.Table(), dao.Stores.Columns().Id, + ), + ). + Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), in.StoreId). + Exist() + } + if err != nil { + return nil, ecode.Fail.Sub("检查操作者权限异常") + } + if !exist { + return nil, ecode.Params.Sub("无门店权限") + } + orm = orm.Where(rewardCols.Source, 2) + default: + return nil, ecode.Params.Sub("无效的角色") + } + + // ==== 其他查询条件 ==== + if in.Status != 0 { + orm = orm.Where(fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), rewardCols.Status), in.Status) + } + + if in.Name != "" { + orm = orm.WhereLike(rewardCols.Name, "%"+in.Name+"%") + } + + // ==== 总数统计 ==== + list := make([]model.InternetChargeReward, 0) + var total int + err = orm.Where(dao.Rewards.Columns().RewardTypeId, 1).Fields("rewards.name,rewards.grant_quantity").ScanAndCount(&list, &total, false) + if err != nil { + return nil, err + } + + return &model.InternetChargeRewardListOut{ + List: list, + Total: total, + }, nil +} + // GetLift 领取奖励 // func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *model.GetRewardOut, err error) { // diff --git a/internal/model/reward.go b/internal/model/reward.go index fd2d81b..cbf0caa 100644 --- a/internal/model/reward.go +++ b/internal/model/reward.go @@ -33,6 +33,14 @@ type Reward struct { UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间 DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"删除时间(软删除)"` // 删除时间(软删除) } + +type InternetChargeReward struct { + g.Meta `orm:"table:rewards"` + Id int64 `json:"id" orm:"id" description:"奖励ID"` // 奖励ID + Name string `json:"name" orm:"name" description:"奖励名称"` // 奖励名称 + GrantQuantity uint64 `json:"grantQuantity" orm:"grant_quantity" description:"每次发放个数"` // 每次发放个数 +} + type SimpleReward struct { g.Meta `orm:"table:rewards"` Id int64 `json:"id" orm:"id" description:"奖励ID"` // 奖励ID @@ -156,6 +164,11 @@ type RewardListOut struct { Total int } +type InternetChargeRewardListOut struct { + List []InternetChargeReward + Total int +} + // RewardCallbackIn 任务奖励领取回调入参 type RewardCallbackIn struct { Uid string `json:"uid" ` // 用户账号 diff --git a/internal/service/reward.go b/internal/service/reward.go index 920b298..09ca4b4 100644 --- a/internal/service/reward.go +++ b/internal/service/reward.go @@ -20,6 +20,8 @@ type ( Delete(ctx context.Context, in *model.RewardDeleteIn) (out *model.RewardDeleteOut, err error) // List 奖励列表 List(ctx context.Context, in *model.RewardListIn) (out *model.RewardListOut, err error) + // ListInternetCharge 网费奖励列表 + ListInternetCharge(ctx context.Context, in *model.RewardListIn) (out *model.InternetChargeRewardListOut, err error) // GetLift 领取奖励 // func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *model.GetRewardOut, err error) { // diff --git a/utility/myCasbin/casbin.go b/utility/myCasbin/casbin.go index 979bd56..abde6e8 100644 --- a/utility/myCasbin/casbin.go +++ b/utility/myCasbin/casbin.go @@ -104,6 +104,7 @@ func init() { enforcer.AddPolicy("store", "/x/rewardType/*", "DELETE", "删除奖励类型") enforcer.AddPolicy("store", "/x/reward", "GET", "获取奖励列表") + enforcer.AddPolicy("store", "/x/reward/internetCharge", "GET", "获取网费奖励列表") enforcer.AddPolicy("store", "/x/reward", "POST", "添加奖励") enforcer.AddPolicy("store", "/x/reward", "PUT", "更新奖励") enforcer.AddPolicy("store", "/x/reward/*", "DELETE", "删除奖励")