Commit e3bc7785 authored by 杨梦雅's avatar 杨梦雅

fix

parent 4b53d97b
......@@ -4,7 +4,8 @@ import {
checkActivityTime,
checkGrowTaskLimit,
checkExchangeCreditsTask,
checkRemainTimes
checkRemainTimes,
checkGrowInviteId
} from '../../utils/common/check'
import { updateVip, updateSignGrowTask, updateGrowOrderGoods } from '../../utils/common/update'
import customUtil from '../../utils/custom'
......@@ -36,17 +37,19 @@ export default class TaskController {
@checkParams(['activityId', 'key'])
@registeInfos(['session', 'task'])
@services([CommonGrowtaskService])
@preCheck([checkActivityTime, checkGrowTaskLimit, checkExchangeCreditsTask])
@preCheck([checkActivityTime, checkGrowInviteId, checkGrowTaskLimit, checkExchangeCreditsTask])
async completeTask(
context: IContext<IParams>,
{ activityInfo, userInfo, session, task }: IControllerInfos,
[commonGrowtaskService]: [CommonGrowtaskService]
[commonGrowtaskService]: [CommonGrowtaskService],
{ inviteUserInfo }: IPreCheckData
) {
const commonGrowtaskCompleteTaskResult1 = await commonGrowtaskService.completeTask(
context.data.key,
activityInfo,
userInfo,
task
task,
inviteUserInfo
)
return resultsModel.success({
...commonGrowtaskCompleteTaskResult1
......
......@@ -9,7 +9,8 @@ import {
checkGrowTaskLimit,
checkExchangeCreditsTask,
checkRemainTimes,
checkInviteId
checkInviteId,
checkGrowInviteId
} from '../utils/common/check'
import { preUpdate } from '../decorator/common'
import { updateVip, updateSignGrowTask, updateGrowOrderGoods } from '../utils/common/update'
......@@ -45,7 +46,7 @@ export default class Task {
@checkParams(['activityId', 'key', 'inviteId?', 'itemId?', 'isVip?', 'credits?'])
@registeInfos(['session', 'task'])
@services([CommonGrowtaskService])
@preCheck([checkActivityTime, checkGrowTaskLimit, checkExchangeCreditsTask])
@preCheck([checkActivityTime, checkGrowInviteId, checkGrowTaskLimit, checkExchangeCreditsTask])
async completeTask(
context: IContext<IParams>,
{ userInfo, activityInfo, task }: IControllerInfos,
......
......@@ -13,6 +13,7 @@ import {
} from '../utils/common/check/'
import { preUpdate } from '../decorator/common'
import { updateVip, updateSignTask, updateOrderGoods } from '../utils/common/update'
import { CODE_TYPES } from '../errorCode'
export default class Task {
/**
......@@ -42,20 +43,23 @@ export default class Task {
* 商品相关任务 需要传itemId参数
* 积分兑换任务 需要传credits参数
*/
@checkParams(['activityId', 'key', 'itemId?', 'credits?', 'inviteId?'])
@checkParams(['activityId', 'key', 'itemId?', 'credits?', 'inviteId?', 'isVip?'])
@registeInfos(['session'])
@services([CommonTaskService])
@preCheck([checkActivityTime, checkTaskLimit, checkExchangeCreditsTask])
@preCheck([checkActivityTime, checkInviteId, checkTaskLimit, checkExchangeCreditsTask])
async completeTask(
context: IContext<IParams>,
{ userInfo, activityInfo }: IControllerInfos,
[taskService]: [CommonTaskService]
[taskService]: [CommonTaskService],
{ inviteUserInfo }: IPreCheckData
) {
const { key: taskType } = context.data
const { key: taskType, isVip } = context.data
// 更新user表
const result = await taskService.completeTask(taskType, activityInfo, userInfo)
const result = await taskService.completeTask(taskType, activityInfo, userInfo, inviteUserInfo)
if((result as ICodeType)?.code){
return resultsModel.error(result as ICodeType)
}
return resultsModel.success(result)
}
......
......@@ -69,7 +69,7 @@ export default class TaskService extends UserService {
times,
url: taskType === 'member' ? generateVipUrl(formatVipCbUrl(this.context)) : link,
todayCompleteTimes,
completeTimes,
completeTimes: rateType === TASK_RATE_TYPE.EVERYDAY ? todayCompleteTimes : completeTimes,
status: setTaskStatus(userInfo, taskType, rateType, times),
waitReceive: remainTimes?.[taskType]
}
......@@ -117,7 +117,7 @@ export default class TaskService extends UserService {
* @returns {boolean}
* @memberof TaskService
*/
async completeTask(taskType: ITaskType, activityInfo: IActivityInfo, userInfo: IUserInfo, customRecord: Object = {}) {
async completeTask(taskType: ITaskType, activityInfo: IActivityInfo, userInfo: IUserInfo, customRecord: Object = {}, inviteUserInfo = {}) {
const today = getToday()
const reward = activityInfo?.tasks?.[taskType]?.reward || 0
let {
......@@ -128,31 +128,15 @@ export default class TaskService extends UserService {
// 邀请任务由被邀请人完成,单独处理
const { _id: srcId, openId: srcOpenId, userNick: srcUserNick, member: srcMember } = userInfo
if (taskType === 'invite') {
if (!inviteId) return CODE_TYPES.ERROR_INVALID_INVITE_ID
if (openId === inviteId) return CODE_TYPES.ERROR_NO_INVITE_SELF
// 已经助力过
if (userInfo?.inviteId) return CODE_TYPES.ERROR_AREADY_INVITE_SUCCESS
// 是否是新会员助力
if (!isVip) return CODE_TYPES.ERROR_NO_VIP
const isNewVip = !userInfo?.member?.flag && isVip
if (!isNewVip) return CODE_TYPES.ERROR_INVITE
const { _id, tasks: { invite } } = activityInfo
// 获取邀请者信息
const inviteUserInfo = await this.userdao.findOne<IUserInfo>({
activityId: _id,
openId: inviteId
})
// inviteId的用户信息查询不到, 则inviteId无效
if(!inviteUserInfo) return CODE_TYPES.ERROR_INVALID_INVITE_ID
const { rateType, times } = invite
const { todayCompleteTimes } = getTodayCompleteTask('invite', inviteUserInfo)
// 助力次数超限制
if (rateType === TASK_RATE_TYPE.EVERYDAY && todayCompleteTimes >= times) {
return CODE_TYPES.ERROR_INVITE_TIMES_LIMIT
}
openId = inviteId
userInfo = inviteUserInfo
userInfo = inviteUserInfo as IUserInfo
}
// 完成任务
......
......@@ -15,14 +15,22 @@ import { TASK_RATE_TYPE } from '../../../constants'
* @return {*}
*/
export default async function checkInviteId(
context: IContext<{ activityId: string; inviteId: string }>,
context: IContext<{ activityId: string; inviteId: string, key: string }>,
{ activityInfo }: IControllerInfos
) {
const {
openId,
data: { activityId, inviteId }
data: { activityId, inviteId, key }
} = context
// 非任务
if(key !== 'invite'){
return
}
// 无效的inviteId
if (!inviteId) return CODE_TYPES.ERROR_INVALID_INVITE_ID
// 自己邀请自己
if (openId === inviteId) return resultsModel.error(CODE_TYPES.ERROR_NO_INVITE_SELF)
......@@ -40,7 +48,7 @@ export default async function checkInviteId(
} = activityInfo
const { rateType, times } = invite
const { todayCompleteTimes } = getTodayCompleteTask('invites', inviteUserInfo)
const { todayCompleteTimes } = getTodayCompleteTask('invite', inviteUserInfo)
// 助力次数超限制
if (rateType === TASK_RATE_TYPE.EVERYDAY && todayCompleteTimes >= times) {
......
......@@ -7,17 +7,17 @@ import { JOIN_DB_NAME } from '../../../db'
export default async function checkJoinId(context: IContext<IParams>) {
const { openId } = context
const { id, activityId } = context.data
if (!id) {
return resultsModel.error(CODE_TYPES.PARAMS_ERROR, `缺少id参数`)
const { gameId, activityId } = context.data
if (!gameId) {
return resultsModel.error(CODE_TYPES.PARAMS_ERROR, `缺少gameId参数`)
}
const joinInfo = await dbFindOne<IJoinRecord>(context, JOIN_DB_NAME, { _id: id, activityId })
const joinInfo = await dbFindOne<IJoinRecord>(context, JOIN_DB_NAME, { _id: gameId, activityId })
if (joinInfo?.submitTime) return resultsModel.error(CODE_TYPES.PARAMS_ERROR, `重复提交游戏!`)
if (joinInfo?.openId !== openId) return resultsModel.error(CODE_TYPES.PARAMS_ERROR, `无权限提交!`)
if (!joinInfo) return resultsModel.error(CODE_TYPES.SYSTEM_ERROR, '本局id不存在')
if (!joinInfo) return resultsModel.error(CODE_TYPES.SYSTEM_ERROR, '本局gameId不存在')
return {
joinInfo
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment