调整奖励列表接口查询逻辑
This commit is contained in:
@ -20,6 +20,7 @@ func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListR
|
|||||||
StoreId: req.StoreId,
|
StoreId: req.StoreId,
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Status: req.Status,
|
Status: req.Status,
|
||||||
|
RewardTypeId: req.RewardTypeId,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@ -243,100 +243,105 @@ func (s *sReward) Delete(ctx context.Context, in *model.RewardDeleteIn) (out *mo
|
|||||||
}
|
}
|
||||||
|
|
||||||
// List 奖励列表
|
// List 奖励列表
|
||||||
|
|
||||||
func (s *sReward) List(ctx context.Context, in *model.RewardListIn) (out *model.RewardListOut, err error) {
|
func (s *sReward) List(ctx context.Context, in *model.RewardListIn) (out *model.RewardListOut, err error) {
|
||||||
var list []model.Reward
|
var list []model.Reward
|
||||||
orm := dao.Rewards.Ctx(ctx)
|
orm := dao.Rewards.Ctx(ctx)
|
||||||
|
|
||||||
// 根据角色和权限构建查询条件
|
rewardCols := dao.Rewards.Columns()
|
||||||
|
rewardTypeCols := dao.RewardTypes.Columns()
|
||||||
|
|
||||||
|
// ==== 权限校验 ====
|
||||||
switch in.OperatorRole {
|
switch in.OperatorRole {
|
||||||
case consts.MerchantRoleCode:
|
case consts.AdminRoleCode:
|
||||||
// 检查商户是否有该门店权限
|
// 系统管理员只能查询 source = 1 的奖励
|
||||||
exist, err := dao.MerchantAdmins.Ctx(ctx).
|
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}).
|
Where(do.MerchantAdmins{Id: in.OperatorId}).
|
||||||
LeftJoin(
|
LeftJoin(
|
||||||
dao.Stores.Table(),
|
dao.Stores.Table(),
|
||||||
fmt.Sprintf(
|
fmt.Sprintf("%s.%s = %s.%s",
|
||||||
"%s.%s = %s.%s",
|
|
||||||
dao.MerchantAdmins.Table(), dao.MerchantAdmins.Columns().MerchantId,
|
dao.MerchantAdmins.Table(), dao.MerchantAdmins.Columns().MerchantId,
|
||||||
dao.Stores.Table(), dao.Stores.Columns().MerchantId,
|
dao.Stores.Table(), dao.Stores.Columns().MerchantId,
|
||||||
),
|
),
|
||||||
).
|
).
|
||||||
Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), in.StoreId).
|
Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), in.StoreId).
|
||||||
Exist()
|
Exist()
|
||||||
if err != nil {
|
} else {
|
||||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
exist, err = dao.StoreAdmins.Ctx(ctx).
|
||||||
}
|
|
||||||
if !exist {
|
|
||||||
return nil, ecode.Params.Sub("无门店权限")
|
|
||||||
}
|
|
||||||
orm = orm.Where(
|
|
||||||
fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), dao.Rewards.Columns().Source),
|
|
||||||
1,
|
|
||||||
).WhereOr(
|
|
||||||
fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), dao.Rewards.Columns().StoreId),
|
|
||||||
in.StoreId,
|
|
||||||
)
|
|
||||||
|
|
||||||
case consts.StoreRoleCode:
|
|
||||||
// 检查门店是否有权限
|
|
||||||
exist, err := dao.StoreAdmins.Ctx(ctx).
|
|
||||||
Where(do.StoreAdmins{Id: in.OperatorId}).
|
Where(do.StoreAdmins{Id: in.OperatorId}).
|
||||||
LeftJoin(
|
LeftJoin(
|
||||||
dao.Stores.Table(),
|
dao.Stores.Table(),
|
||||||
fmt.Sprintf(
|
fmt.Sprintf("%s.%s = %s.%s",
|
||||||
"%s.%s = %s.%s",
|
|
||||||
dao.StoreAdmins.Table(), dao.StoreAdmins.Columns().StoreId,
|
dao.StoreAdmins.Table(), dao.StoreAdmins.Columns().StoreId,
|
||||||
dao.Stores.Table(), dao.Stores.Columns().Id,
|
dao.Stores.Table(), dao.Stores.Columns().Id,
|
||||||
),
|
),
|
||||||
).
|
).
|
||||||
Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), in.StoreId).
|
Where(fmt.Sprintf("%s.%s = ?", dao.Stores.Table(), dao.Stores.Columns().Id), in.StoreId).
|
||||||
Exist()
|
Exist()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ecode.Fail.Sub("检查操作者权限出现异常")
|
return nil, ecode.Fail.Sub("检查操作者权限异常")
|
||||||
}
|
}
|
||||||
if !exist {
|
if !exist {
|
||||||
return nil, ecode.Params.Sub("无门店权限")
|
return nil, ecode.Params.Sub("无门店权限")
|
||||||
}
|
}
|
||||||
|
// 商户和门店角色查询 source = 1 或 (source = 2 且 store_id = in.StoreId)
|
||||||
orm = orm.Where(
|
orm = orm.Where(
|
||||||
fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), dao.Rewards.Columns().Source),
|
fmt.Sprintf(
|
||||||
1,
|
"(%s.%s = ? OR (%s.%s = ? AND %s.%s = ?))",
|
||||||
).WhereOr(
|
dao.Rewards.Table(), rewardCols.Source,
|
||||||
fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), dao.Rewards.Columns().StoreId),
|
dao.Rewards.Table(), rewardCols.Source,
|
||||||
in.StoreId,
|
dao.Rewards.Table(), rewardCols.StoreId,
|
||||||
|
),
|
||||||
|
1, 2, in.StoreId,
|
||||||
)
|
)
|
||||||
|
default:
|
||||||
|
return nil, ecode.Params.Sub("无效的角色")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ==== 其他查询条件 ====
|
||||||
if in.Status != 0 {
|
if in.Status != 0 {
|
||||||
orm = orm.Where(do.Rewards{Status: in.Status})
|
orm = orm.Where(fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), rewardCols.Status), in.Status)
|
||||||
}
|
|
||||||
if in.StoreId != 0 {
|
|
||||||
orm = orm.Where(do.Rewards{StoreId: in.StoreId})
|
|
||||||
}
|
}
|
||||||
if in.RewardTypeId != 0 {
|
if in.RewardTypeId != 0 {
|
||||||
orm = orm.Where(do.Rewards{RewardTypeId: in.RewardTypeId})
|
// 确保 reward_type_id 过滤独立应用
|
||||||
|
orm = orm.Where(fmt.Sprintf("%s.%s = ?", dao.Rewards.Table(), rewardCols.RewardTypeId), in.RewardTypeId)
|
||||||
}
|
}
|
||||||
if in.Name != "" {
|
if in.Name != "" {
|
||||||
orm = orm.WhereLike(dao.Rewards.Columns().Name, "%"+in.Name+"%")
|
orm = orm.WhereLike(rewardCols.Name, "%"+in.Name+"%")
|
||||||
}
|
|
||||||
if in.RewardTypeId != 0 {
|
|
||||||
orm = orm.Where(do.Rewards{RewardTypeId: in.RewardTypeId})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ==== 总数统计 ====
|
||||||
total, err := orm.Count()
|
total, err := orm.Count()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
err = orm.Page(in.Page, in.Size).LeftJoin(
|
|
||||||
|
// ==== 分页查询 + 联表字段 ====
|
||||||
|
err = orm.Page(in.Page, in.Size).
|
||||||
|
LeftJoin(
|
||||||
dao.RewardTypes.Table(),
|
dao.RewardTypes.Table(),
|
||||||
fmt.Sprintf(
|
fmt.Sprintf("%s.%s = %s.%s",
|
||||||
"%s.%s = %s.%s",
|
dao.Rewards.Table(), rewardCols.RewardTypeId,
|
||||||
dao.Rewards.Table(), dao.Rewards.Columns().RewardTypeId,
|
dao.RewardTypes.Table(), rewardTypeCols.Id,
|
||||||
dao.RewardTypes.Table(), dao.RewardTypes.Columns().Id,
|
|
||||||
),
|
),
|
||||||
).Fields(fmt.Sprintf("%s.*, %s.%s %s", dao.Rewards.Table(), dao.RewardTypes.Table(), dao.RewardTypes.Columns().Name, "reward_type_name")).OrderDesc(dao.Rewards.Columns().CreatedAt).Scan(&list)
|
).
|
||||||
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &model.RewardListOut{
|
return &model.RewardListOut{
|
||||||
List: list,
|
List: list,
|
||||||
Total: total,
|
Total: total,
|
||||||
|
|||||||
Reference in New Issue
Block a user