修改奖励类型
This commit is contained in:
@ -17,7 +17,6 @@ import (
|
||||
_ "server/internal/logic/storeAdmin"
|
||||
_ "server/internal/logic/storeDesktopSetting"
|
||||
_ "server/internal/logic/storeRole"
|
||||
_ "server/internal/logic/storeTaskReward"
|
||||
_ "server/internal/logic/task"
|
||||
_ "server/internal/logic/upload"
|
||||
_ "server/internal/logic/user"
|
||||
|
||||
@ -17,6 +17,7 @@ type sReward struct{}
|
||||
|
||||
func init() {
|
||||
service.RegisterReward(New())
|
||||
service.RegisterReward(New())
|
||||
}
|
||||
|
||||
func New() service.IReward {
|
||||
@ -77,10 +78,7 @@ func (s *sReward) Create(ctx context.Context, in *model.RewardCreateIn) (out *mo
|
||||
id, err := dao.Rewards.Ctx(ctx).Data(do.Rewards{
|
||||
RewardTypeId: in.RewardTypeId,
|
||||
Name: in.Name,
|
||||
Description: in.Description,
|
||||
Source: in.Source,
|
||||
StoreId: in.StoreId,
|
||||
Value: in.Value,
|
||||
Status: in.Status,
|
||||
ValidFrom: in.ValidFrom,
|
||||
ValidTo: in.ValidTo,
|
||||
@ -98,7 +96,7 @@ func (s *sReward) Create(ctx context.Context, in *model.RewardCreateIn) (out *mo
|
||||
func (s *sReward) Update(ctx context.Context, in *model.RewardUpdateIn) (out *model.RewardUpdateOut, err error) {
|
||||
// 查询原始记录,确保存在,并获取 source 与 store_id 用于权限校验
|
||||
data, err := dao.Rewards.Ctx(ctx).
|
||||
Fields(dao.Rewards.Columns().Id, dao.Rewards.Columns().Source, dao.Rewards.Columns().StoreId).
|
||||
Fields(dao.Rewards.Columns().Id, dao.Rewards.Columns().StoreId).
|
||||
Where(do.Rewards{Id: in.Id}).One()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询奖励失败")
|
||||
@ -107,11 +105,6 @@ func (s *sReward) Update(ctx context.Context, in *model.RewardUpdateIn) (out *mo
|
||||
return nil, ecode.Params.Sub("奖励不存在")
|
||||
}
|
||||
|
||||
// 系统奖励(source=1)只能由管理员修改
|
||||
if data[dao.Rewards.Columns().Source].Int() == 1 && in.OperatorRole != consts.AdminRoleCode {
|
||||
return nil, ecode.Params.Sub("只有管理员可以修改系统奖励")
|
||||
}
|
||||
|
||||
storeId := data[dao.Rewards.Columns().StoreId].Int64()
|
||||
|
||||
// 权限校验(管理员跳过)
|
||||
@ -161,14 +154,12 @@ func (s *sReward) Update(ctx context.Context, in *model.RewardUpdateIn) (out *mo
|
||||
_, err = dao.Rewards.Ctx(ctx).
|
||||
Where(do.Rewards{Id: in.Id}).
|
||||
Data(do.Rewards{
|
||||
Name: in.Name,
|
||||
Description: in.Description,
|
||||
Value: in.Value,
|
||||
Status: in.Status,
|
||||
ValidFrom: in.ValidFrom,
|
||||
ValidTo: in.ValidTo,
|
||||
ExpireType: in.ExpireType,
|
||||
ExpireDays: in.ExpireDays,
|
||||
Name: in.Name,
|
||||
Status: in.Status,
|
||||
ValidFrom: in.ValidFrom,
|
||||
ValidTo: in.ValidTo,
|
||||
ExpireType: in.ExpireType,
|
||||
ExpireDays: in.ExpireDays,
|
||||
}).OmitEmptyData().Update()
|
||||
|
||||
if err != nil {
|
||||
@ -245,123 +236,13 @@ func (s *sReward) Delete(ctx context.Context, in *model.RewardDeleteIn) (out *mo
|
||||
// List 奖励列表
|
||||
|
||||
func (s *sReward) List(ctx context.Context, in *model.RewardListIn) (out *model.RewardListOut, err error) {
|
||||
var list []model.Reward
|
||||
orm := dao.Rewards.Ctx(ctx)
|
||||
|
||||
rewardCols := dao.Rewards.Columns()
|
||||
rewardTypeCols := dao.RewardTypes.Columns()
|
||||
|
||||
// ==== 权限校验 ====
|
||||
switch in.OperatorRole {
|
||||
case consts.AdminRoleCode:
|
||||
// 系统管理员只能查询 source = 1 的奖励
|
||||
orm = orm.Where(fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), 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("无门店权限")
|
||||
}
|
||||
// 商户和门店角色查询 source = 1 或 (source = 2 且 store_id = in.StoreId)
|
||||
orm = orm.Where(
|
||||
fmt.Sprintf(
|
||||
"(%s.%s = ? OR (%s.%s = ? AND %s.%s = ?))",
|
||||
dao.Rewards.Table(), rewardCols.Source,
|
||||
dao.Rewards.Table(), rewardCols.Source,
|
||||
dao.Rewards.Table(), rewardCols.StoreId,
|
||||
),
|
||||
1, 2, in.StoreId,
|
||||
)
|
||||
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.RewardTypeId != 0 {
|
||||
// 确保 reward_type_id 过滤独立应用
|
||||
orm = orm.Where(fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), rewardCols.RewardTypeId), in.RewardTypeId)
|
||||
}
|
||||
if in.Name != "" {
|
||||
orm = orm.WhereLike(rewardCols.Name, "%"+in.Name+"%")
|
||||
}
|
||||
|
||||
// ==== 总数统计 ====
|
||||
total, err := orm.Count()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// ==== 分页查询 + 联表字段 ====
|
||||
err = orm.Page(in.Page, in.Size).
|
||||
LeftJoin(
|
||||
dao.RewardTypes.Table(),
|
||||
fmt.Sprintf("%s.%s = %s.%s",
|
||||
dao.Rewards.Table(), rewardCols.RewardTypeId,
|
||||
dao.RewardTypes.Table(), rewardTypeCols.Id,
|
||||
),
|
||||
).
|
||||
Fields(fmt.Sprintf(
|
||||
"%s.*, %s.%s AS reward_type_name",
|
||||
dao.Rewards.Table(),
|
||||
dao.RewardTypes.Table(), rewardTypeCols.Name,
|
||||
)).
|
||||
OrderDesc(rewardCols.CreatedAt).
|
||||
Scan(&list)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &model.RewardListOut{
|
||||
List: list,
|
||||
Total: total,
|
||||
}, nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// GetLift 领取奖励
|
||||
func (s *sReward) GetLift(ctx context.Context, in *model.GetRewardIn) (out *model.GetRewardOut, err error) {
|
||||
|
||||
// 遍历奖励类型列表
|
||||
//for _, v := range in.RewradTypeId {
|
||||
// if v > 0 {
|
||||
// // 发背包+兑换
|
||||
//
|
||||
// }
|
||||
// if v > 0 {
|
||||
// // 直接发背包
|
||||
// }
|
||||
//}
|
||||
|
||||
activity, err := gamelife.GetGamelifeClient(ctx).RequestActivity(ctx, &model.QQNetbarActivityIn{PopenId: in.PopenId, ServiceName: consts.GetGift, GiftParam: model.GiftParam{
|
||||
TaskId: in.TaskId,
|
||||
AreaId: in.AreaId,
|
||||
|
||||
@ -10,6 +10,8 @@ import (
|
||||
"server/internal/model/do"
|
||||
"server/internal/service"
|
||||
"server/utility/ecode"
|
||||
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type sRewardType struct {
|
||||
@ -25,328 +27,192 @@ func New() service.IRewardType {
|
||||
|
||||
// Create 创建奖励类型
|
||||
func (s *sRewardType) Create(ctx context.Context, in *model.RewardTypeCreateIn) (out *model.RewardTypeCreateOut, err error) {
|
||||
// 创建时,source为1的奖励类型只能由管理员创建
|
||||
// 商户和门店管理员创建奖励时需要判断是有拥有 storeId 的权限
|
||||
|
||||
// 检查 source=1 的奖励类型只能由管理员创建
|
||||
if in.Source == 1 && in.OperatorRole != consts.AdminRoleCode {
|
||||
return nil, ecode.Params.Sub("只有管理员可以创建 source=1 的奖励类型")
|
||||
if err = checkRewardTypePermission(ctx, in.OperatorRole, in.OperatorId, in.Source, in.StoreId); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 根据角色和权限检查
|
||||
switch in.OperatorRole {
|
||||
case consts.MerchantRoleCode:
|
||||
// 检查商户是否有该门店权限
|
||||
exist, err := dao.MerchantAdmins.Ctx(ctx).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,
|
||||
).Where(
|
||||
do.MerchantAdmins{Id: in.OperatorId},
|
||||
).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
|
||||
case consts.StoreRoleCode:
|
||||
// 检查门店是否有权限
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).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,
|
||||
).Where(
|
||||
do.StoreAdmins{Id: in.OperatorId},
|
||||
).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
data := do.RewardTypes{
|
||||
Name: in.Name,
|
||||
Source: in.Source,
|
||||
StoreId: in.StoreId,
|
||||
TencentTypeId: in.TencentTypeId,
|
||||
}
|
||||
|
||||
id, err := dao.RewardTypes.Ctx(ctx).Data(do.RewardTypes{
|
||||
Name: in.Name,
|
||||
Description: in.Description,
|
||||
Source: in.Source,
|
||||
StoreId: in.StoreId,
|
||||
}).OmitEmptyData().InsertAndGetId()
|
||||
id, err := dao.RewardTypes.Ctx(ctx).OmitEmptyData().Data(data).InsertAndGetId()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &model.RewardTypeCreateOut{
|
||||
Id: id,
|
||||
}, nil
|
||||
return &model.RewardTypeCreateOut{Id: id}, nil
|
||||
}
|
||||
|
||||
// Update 更新奖励类型
|
||||
func (s *sRewardType) Update(ctx context.Context, in *model.RewardTypeUpdateIn) (out *model.RewardTypeUpdateOut, err error) {
|
||||
// 查询原始记录,确保存在,并获取 store_id 和 source 字段用于权限判断
|
||||
value, err := dao.RewardTypes.Ctx(ctx).
|
||||
Fields(dao.RewardTypes.Columns().Id, dao.RewardTypes.Columns().Source, dao.RewardTypes.Columns().StoreId).
|
||||
Where(do.RewardTypes{Id: in.Id}).One()
|
||||
info, err := dao.RewardTypes.Ctx(ctx).WherePri(in.Id).One()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询奖励类型失败")
|
||||
return nil, err
|
||||
}
|
||||
if value.IsEmpty() {
|
||||
if info == nil {
|
||||
return nil, ecode.Params.Sub("奖励类型不存在")
|
||||
}
|
||||
|
||||
// source=1 的奖励类型只能由管理员修改
|
||||
source := info["source"].Int()
|
||||
storeId := info["store_id"].Int64()
|
||||
|
||||
if value[dao.RewardTypes.Columns().Source].Int() == 1 && in.OperatorRole != consts.AdminRoleCode {
|
||||
return nil, ecode.Params.Sub("只有管理员可以修改的系统奖励类型")
|
||||
if err = checkRewardTypePermission(ctx, in.OperatorRole, in.OperatorId, source, storeId); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 权限校验(管理员跳过)
|
||||
switch in.OperatorRole {
|
||||
case consts.MerchantRoleCode:
|
||||
exist, err := dao.MerchantAdmins.Ctx(ctx).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), value[dao.RewardTypes.Columns().StoreId].Int(),
|
||||
).Where(
|
||||
do.MerchantAdmins{Id: in.OperatorId},
|
||||
).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
|
||||
case consts.StoreRoleCode:
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).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), value[dao.RewardTypes.Columns().StoreId].Int(),
|
||||
).Where(
|
||||
do.StoreAdmins{Id: in.OperatorId},
|
||||
).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
updateData := g.Map{}
|
||||
if in.Name != "" {
|
||||
updateData["name"] = in.Name
|
||||
}
|
||||
|
||||
// 执行更新(不允许更新 store_id 和 source)
|
||||
_, err = dao.RewardTypes.Ctx(ctx).
|
||||
Where(do.RewardTypes{Id: in.Id}).
|
||||
Data(do.RewardTypes{
|
||||
Name: in.Name,
|
||||
Description: in.Description,
|
||||
Status: in.Status,
|
||||
}).OmitEmptyData().
|
||||
Update()
|
||||
if len(updateData) == 0 {
|
||||
return nil, ecode.Params.Sub("无可更新字段")
|
||||
}
|
||||
|
||||
_, err = dao.RewardTypes.Ctx(ctx).WherePri(in.Id).Data(updateData).Update()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("更新奖励类型失败")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &model.RewardTypeUpdateOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
return &model.RewardTypeUpdateOut{Success: true}, nil
|
||||
}
|
||||
|
||||
// Delete 删除奖励类型
|
||||
// Delete 删除奖励类型(逻辑删除)
|
||||
func (s *sRewardType) Delete(ctx context.Context, in *model.RewardTypeDeleteIn) (out *model.RewardTypeDeleteOut, err error) {
|
||||
// 查询原始记录,确保存在,并获取 store_id 和 source 字段用于权限判断
|
||||
value, err := dao.RewardTypes.Ctx(ctx).
|
||||
Fields(dao.RewardTypes.Columns().Id, dao.RewardTypes.Columns().Source, dao.RewardTypes.Columns().StoreId).
|
||||
Where(do.RewardTypes{Id: in.Id}).
|
||||
One()
|
||||
info, err := dao.RewardTypes.Ctx(ctx).WherePri(in.Id).One()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询奖励类型失败")
|
||||
return nil, err
|
||||
}
|
||||
if value.IsEmpty() {
|
||||
if info.IsEmpty() {
|
||||
return nil, ecode.Params.Sub("奖励类型不存在")
|
||||
}
|
||||
|
||||
// source=1 的奖励类型只能由管理员删除
|
||||
if value[dao.RewardTypes.Columns().Source].Int() == 1 && in.OperatorRole != consts.AdminRoleCode {
|
||||
return nil, ecode.Params.Sub("只有管理员可以删除的系统奖励类型")
|
||||
source := info["source"].Int()
|
||||
storeId := info["store_id"].Int64()
|
||||
|
||||
if err = checkRewardTypePermission(ctx, in.OperatorRole, in.OperatorId, source, storeId); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 权限校验(管理员跳过)
|
||||
switch in.OperatorRole {
|
||||
case consts.MerchantRoleCode:
|
||||
exist, err := dao.MerchantAdmins.Ctx(ctx).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),
|
||||
value[dao.RewardTypes.Columns().StoreId].Int(),
|
||||
).Where(
|
||||
do.MerchantAdmins{Id: in.OperatorId},
|
||||
).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
|
||||
case consts.StoreRoleCode:
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).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),
|
||||
value[dao.RewardTypes.Columns().StoreId].Int(),
|
||||
).Where(
|
||||
do.StoreAdmins{Id: in.OperatorId},
|
||||
).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
}
|
||||
|
||||
// 执行删除(软删除)
|
||||
_, err = dao.RewardTypes.Ctx(ctx).Where(do.RewardTypes{Id: in.Id}).Delete()
|
||||
_, err = dao.RewardTypes.Ctx(ctx).WherePri(in.Id).Data(g.Map{
|
||||
"deleted_at": gtime.Now(),
|
||||
}).Update()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("删除奖励类型失败")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &model.RewardTypeDeleteOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
return &model.RewardTypeDeleteOut{Success: true}, nil
|
||||
}
|
||||
|
||||
// List 获取奖励类型列表
|
||||
// List 获取奖励类型列表(支持分页、过滤)
|
||||
func (s *sRewardType) List(ctx context.Context, in *model.RewardTypeListIn) (out *model.RewardTypeListOut, err error) {
|
||||
list := make([]model.RewardType, 0)
|
||||
orm := dao.RewardTypes.Ctx(ctx)
|
||||
mod := dao.RewardTypes.Ctx(ctx).Where("deleted_at IS NULL")
|
||||
|
||||
// 根据角色和权限构建查询条件
|
||||
switch in.OperatorRole {
|
||||
case 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()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
case consts.AdminRoleCode:
|
||||
// 系统管理员只能看系统奖励类型
|
||||
mod = mod.Where("source", 1)
|
||||
|
||||
// 追加限制:source = 1 或 store_id = 当前门店
|
||||
orm = orm.Where(
|
||||
fmt.Sprintf("%s.%s = ?", dao.RewardTypes.Table(), dao.RewardTypes.Columns().Source),
|
||||
1,
|
||||
).WhereOr(
|
||||
fmt.Sprintf("%s.%s IN (?)", dao.RewardTypes.Table(), dao.RewardTypes.Columns().StoreId),
|
||||
g.Slice{in.StoreId},
|
||||
)
|
||||
case consts.MerchantRoleCode:
|
||||
// 校验商户是否对该门店有权限
|
||||
if err = checkRewardTypePermission(ctx, in.OperatorRole, in.OperatorId, 2, in.StoreId); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 只查询该门店的奖励类型(source=2且store_id=指定门店)
|
||||
mod = mod.Where("source", 2).WhereIn("store_id", in.StoreId)
|
||||
|
||||
case consts.StoreRoleCode:
|
||||
// 检查门店是否有权限
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).
|
||||
Where(do.StoreAdmins{Id: in.OperatorId}).
|
||||
// 校验门店权限
|
||||
if err = checkRewardTypePermission(ctx, in.OperatorRole, in.OperatorId, 2, in.StoreId); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mod = mod.Where("source", 2).Where("store_id", in.StoreId)
|
||||
|
||||
default:
|
||||
return nil, ecode.Params.Sub("无效的操作角色")
|
||||
}
|
||||
|
||||
// 其余过滤条件
|
||||
if in.Name != "" {
|
||||
mod = mod.WhereLike("name", "%"+in.Name+"%")
|
||||
}
|
||||
if in.Source > 0 {
|
||||
mod = mod.Where("source", in.Source)
|
||||
}
|
||||
|
||||
count, err := mod.Count()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
records, err := mod.Page(in.Page, in.Size).Order("id DESC").All()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var list []model.RewardType
|
||||
if err = records.Structs(&list); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
out = &model.RewardTypeListOut{
|
||||
Total: count,
|
||||
List: list,
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func checkRewardTypePermission(ctx context.Context, role string, operatorId int64, source int, storeId int64) error {
|
||||
switch role {
|
||||
case consts.AdminRoleCode:
|
||||
if source != 1 {
|
||||
return ecode.Params.Sub("系统管理员只能操作系统奖励类型")
|
||||
}
|
||||
case consts.MerchantRoleCode:
|
||||
exist, err := dao.MerchantAdmins.Ctx(ctx).
|
||||
LeftJoin(
|
||||
dao.Stores.Table(),
|
||||
fmt.Sprintf(
|
||||
"%s.%s = %s.%s",
|
||||
dao.StoreAdmins.Table(), dao.StoreAdmins.Columns().StoreId,
|
||||
dao.Stores.Table(), dao.Stores.Columns().Id,
|
||||
),
|
||||
fmt.Sprintf("%s.%s = %s.%s",
|
||||
dao.Stores.Table(), dao.Stores.Columns().MerchantId,
|
||||
dao.MerchantAdmins.Table(), dao.MerchantAdmins.Columns().MerchantId),
|
||||
).
|
||||
Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), in.StoreId).
|
||||
Where(fmt.Sprintf("%s.%s = ?", dao.MerchantAdmins.Table(), dao.MerchantAdmins.Columns().Id), operatorId).
|
||||
Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), storeId).
|
||||
Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
||||
return ecode.Fail.Sub("检查商户权限异常")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("无门店权限")
|
||||
return ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
|
||||
// 追加限制:source = 1 或 store_id = 当前门店
|
||||
orm = orm.Where(
|
||||
fmt.Sprintf("%s.%s = ?", dao.RewardTypes.Table(), dao.RewardTypes.Columns().Source),
|
||||
1,
|
||||
).WhereOr(
|
||||
fmt.Sprintf("%s.%s IN (?)", dao.RewardTypes.Table(), dao.RewardTypes.Columns().StoreId),
|
||||
g.Slice{in.StoreId},
|
||||
)
|
||||
if source != 2 {
|
||||
return ecode.Params.Sub("商户只能操作本系统奖励类型")
|
||||
}
|
||||
case consts.StoreRoleCode:
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).
|
||||
LeftJoin(
|
||||
dao.Stores.Table(),
|
||||
fmt.Sprintf("%s.%s = %s.%s",
|
||||
dao.Stores.Table(), dao.Stores.Columns().Id,
|
||||
dao.StoreAdmins.Table(), dao.StoreAdmins.Columns().StoreId),
|
||||
).
|
||||
Where(fmt.Sprintf("%s.%s = ?", dao.StoreAdmins.Table(), dao.StoreAdmins.Columns().Id), operatorId).
|
||||
Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), storeId).
|
||||
Exist()
|
||||
if err != nil {
|
||||
return ecode.Fail.Sub("检查门店权限异常")
|
||||
}
|
||||
if !exist {
|
||||
return ecode.Params.Sub("无门店权限")
|
||||
}
|
||||
if source != 2 {
|
||||
return ecode.Params.Sub("门店只能操作本系统奖励类型")
|
||||
}
|
||||
default:
|
||||
return ecode.Params.Sub("无效的操作角色")
|
||||
}
|
||||
|
||||
// 其他筛选
|
||||
if in.Status != 0 {
|
||||
orm = orm.Where(
|
||||
fmt.Sprintf("%s.%s = ?", dao.RewardTypes.Table(), dao.RewardTypes.Columns().Status),
|
||||
in.Status,
|
||||
)
|
||||
}
|
||||
if in.Name != "" {
|
||||
orm = orm.WhereLike(
|
||||
fmt.Sprintf("%s.%s", dao.RewardTypes.Table(), dao.RewardTypes.Columns().Name),
|
||||
"%"+in.Name+"%",
|
||||
)
|
||||
}
|
||||
|
||||
// 查询总数
|
||||
count, err := orm.Count()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if in.OperatorRole == consts.AdminRoleCode {
|
||||
orm = orm.LeftJoin(dao.Stores.Table(), fmt.Sprintf(
|
||||
"%s.%s = %s.%s",
|
||||
dao.RewardTypes.Table(), dao.RewardTypes.Columns().StoreId,
|
||||
dao.Stores.Table(), dao.Stores.Columns().Id),
|
||||
).Fields(fmt.Sprintf("%s.*, %s.%s %s",
|
||||
dao.RewardTypes.Table(), dao.Stores.Table(), dao.Stores.Columns().Name, "storeName"))
|
||||
}
|
||||
|
||||
// 查询分页数据
|
||||
err = orm.Page(in.Page, in.Size).
|
||||
OrderAsc(fmt.Sprintf("%s.%s", dao.RewardTypes.Table(), dao.RewardTypes.Columns().Source)).
|
||||
Scan(&list)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &model.RewardTypeListOut{
|
||||
List: list,
|
||||
Total: count,
|
||||
}, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1,142 +0,0 @@
|
||||
package storeTaskReward
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"server/internal/consts"
|
||||
"server/internal/dao"
|
||||
"server/internal/model"
|
||||
"server/internal/model/do"
|
||||
"server/internal/service"
|
||||
"server/utility/ecode"
|
||||
)
|
||||
|
||||
type sStoreTaskReward struct {
|
||||
}
|
||||
|
||||
func New() service.IStoreTaskReward {
|
||||
return &sStoreTaskReward{}
|
||||
}
|
||||
func init() {
|
||||
service.RegisterStoreTaskReward(New())
|
||||
}
|
||||
func (s *sStoreTaskReward) Create(ctx context.Context, in *model.StoreTaskRewardCreateIn) (out *model.StoreTaskRewardCreateOut, err error) {
|
||||
if in.OperatorRole != consts.MerchantRoleCode && in.OperatorRole != consts.StoreRoleCode {
|
||||
return nil, ecode.Params.Sub("仅允许商户或门店角色操作")
|
||||
}
|
||||
|
||||
// 检查操作者是否有该门店的操作权限
|
||||
switch in.OperatorRole {
|
||||
case 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()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("校验商户权限失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("商户无操作该门店权限")
|
||||
}
|
||||
|
||||
case consts.StoreRoleCode:
|
||||
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("门店管理员无权限")
|
||||
}
|
||||
}
|
||||
|
||||
id, err := dao.StoreTaskRewards.Ctx(ctx).Data(do.StoreTaskRewards{
|
||||
StoreId: in.StoreId,
|
||||
TaskId: in.TaskId,
|
||||
RewardId: in.RewardId,
|
||||
}).InsertAndGetId()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("创建门店任务奖励失败, err:" + err.Error())
|
||||
}
|
||||
return &model.StoreTaskRewardCreateOut{Id: id}, nil
|
||||
}
|
||||
|
||||
func (s *sStoreTaskReward) Delete(ctx context.Context, in *model.StoreTaskRewardDeleteIn) (out *model.StoreTaskRewardDeleteOut, err error) {
|
||||
if in.OperatorRole != consts.MerchantRoleCode && in.OperatorRole != consts.StoreRoleCode {
|
||||
return nil, ecode.Params.Sub("仅允许商户或门店角色操作")
|
||||
}
|
||||
|
||||
// 检查操作者是否有该门店的操作权限
|
||||
value, err := dao.StoreTaskRewards.Ctx(ctx).WherePri(in.Id).Fields(dao.StoreTaskRewards.Columns().StoreId).Value()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询门店任务奖励失败, err:" + err.Error())
|
||||
}
|
||||
if value.IsEmpty() {
|
||||
return nil, ecode.Params.Sub("门店任务奖励不存在")
|
||||
}
|
||||
switch in.OperatorRole {
|
||||
case 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), value.Int64()).
|
||||
Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("校验商户权限失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("商户无操作该门店权限")
|
||||
}
|
||||
|
||||
case consts.StoreRoleCode:
|
||||
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), value.Int64()).
|
||||
Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("校验门店权限失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("门店管理员无权限")
|
||||
}
|
||||
}
|
||||
_, err = dao.StoreTaskRewards.Ctx(ctx).WherePri(in.Id).Delete()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("删除门店任务奖励失败")
|
||||
}
|
||||
|
||||
return &model.StoreTaskRewardDeleteOut{Success: true}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user