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 }