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

fix

parent 4b53d97b
...@@ -4,7 +4,8 @@ import { ...@@ -4,7 +4,8 @@ import {
checkActivityTime, checkActivityTime,
checkGrowTaskLimit, checkGrowTaskLimit,
checkExchangeCreditsTask, checkExchangeCreditsTask,
checkRemainTimes checkRemainTimes,
checkGrowInviteId
} from '../../utils/common/check' } from '../../utils/common/check'
import { updateVip, updateSignGrowTask, updateGrowOrderGoods } from '../../utils/common/update' import { updateVip, updateSignGrowTask, updateGrowOrderGoods } from '../../utils/common/update'
import customUtil from '../../utils/custom' import customUtil from '../../utils/custom'
...@@ -36,17 +37,19 @@ export default class TaskController { ...@@ -36,17 +37,19 @@ export default class TaskController {
@checkParams(['activityId', 'key']) @checkParams(['activityId', 'key'])
@registeInfos(['session', 'task']) @registeInfos(['session', 'task'])
@services([CommonGrowtaskService]) @services([CommonGrowtaskService])
@preCheck([checkActivityTime, checkGrowTaskLimit, checkExchangeCreditsTask]) @preCheck([checkActivityTime, checkGrowInviteId, checkGrowTaskLimit, checkExchangeCreditsTask])
async completeTask( async completeTask(
context: IContext<IParams>, context: IContext<IParams>,
{ activityInfo, userInfo, session, task }: IControllerInfos, { activityInfo, userInfo, session, task }: IControllerInfos,
[commonGrowtaskService]: [CommonGrowtaskService] [commonGrowtaskService]: [CommonGrowtaskService],
{ inviteUserInfo }: IPreCheckData
) { ) {
const commonGrowtaskCompleteTaskResult1 = await commonGrowtaskService.completeTask( const commonGrowtaskCompleteTaskResult1 = await commonGrowtaskService.completeTask(
context.data.key, context.data.key,
activityInfo, activityInfo,
userInfo, userInfo,
task task,
inviteUserInfo
) )
return resultsModel.success({ return resultsModel.success({
...commonGrowtaskCompleteTaskResult1 ...commonGrowtaskCompleteTaskResult1
......
...@@ -9,7 +9,8 @@ import { ...@@ -9,7 +9,8 @@ import {
checkGrowTaskLimit, checkGrowTaskLimit,
checkExchangeCreditsTask, checkExchangeCreditsTask,
checkRemainTimes, checkRemainTimes,
checkInviteId checkInviteId,
checkGrowInviteId
} from '../utils/common/check' } from '../utils/common/check'
import { preUpdate } from '../decorator/common' import { preUpdate } from '../decorator/common'
import { updateVip, updateSignGrowTask, updateGrowOrderGoods } from '../utils/common/update' import { updateVip, updateSignGrowTask, updateGrowOrderGoods } from '../utils/common/update'
...@@ -45,7 +46,7 @@ export default class Task { ...@@ -45,7 +46,7 @@ export default class Task {
@checkParams(['activityId', 'key', 'inviteId?', 'itemId?', 'isVip?', 'credits?']) @checkParams(['activityId', 'key', 'inviteId?', 'itemId?', 'isVip?', 'credits?'])
@registeInfos(['session', 'task']) @registeInfos(['session', 'task'])
@services([CommonGrowtaskService]) @services([CommonGrowtaskService])
@preCheck([checkActivityTime, checkGrowTaskLimit, checkExchangeCreditsTask]) @preCheck([checkActivityTime, checkGrowInviteId, checkGrowTaskLimit, checkExchangeCreditsTask])
async completeTask( async completeTask(
context: IContext<IParams>, context: IContext<IParams>,
{ userInfo, activityInfo, task }: IControllerInfos, { userInfo, activityInfo, task }: IControllerInfos,
......
...@@ -13,6 +13,7 @@ import { ...@@ -13,6 +13,7 @@ import {
} from '../utils/common/check/' } from '../utils/common/check/'
import { preUpdate } from '../decorator/common' import { preUpdate } from '../decorator/common'
import { updateVip, updateSignTask, updateOrderGoods } from '../utils/common/update' import { updateVip, updateSignTask, updateOrderGoods } from '../utils/common/update'
import { CODE_TYPES } from '../errorCode'
export default class Task { export default class Task {
/** /**
...@@ -42,20 +43,23 @@ export default class Task { ...@@ -42,20 +43,23 @@ export default class Task {
* 商品相关任务 需要传itemId参数 * 商品相关任务 需要传itemId参数
* 积分兑换任务 需要传credits参数 * 积分兑换任务 需要传credits参数
*/ */
@checkParams(['activityId', 'key', 'itemId?', 'credits?', 'inviteId?']) @checkParams(['activityId', 'key', 'itemId?', 'credits?', 'inviteId?', 'isVip?'])
@registeInfos(['session']) @registeInfos(['session'])
@services([CommonTaskService]) @services([CommonTaskService])
@preCheck([checkActivityTime, checkTaskLimit, checkExchangeCreditsTask]) @preCheck([checkActivityTime, checkInviteId, checkTaskLimit, checkExchangeCreditsTask])
async completeTask( async completeTask(
context: IContext<IParams>, context: IContext<IParams>,
{ userInfo, activityInfo }: IControllerInfos, { userInfo, activityInfo }: IControllerInfos,
[taskService]: [CommonTaskService] [taskService]: [CommonTaskService],
{ inviteUserInfo }: IPreCheckData
) { ) {
const { key: taskType } = context.data const { key: taskType, isVip } = context.data
// 更新user表 // 更新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) return resultsModel.success(result)
} }
......
...@@ -69,7 +69,7 @@ export default class TaskService extends UserService { ...@@ -69,7 +69,7 @@ export default class TaskService extends UserService {
times, times,
url: taskType === 'member' ? generateVipUrl(formatVipCbUrl(this.context)) : link, url: taskType === 'member' ? generateVipUrl(formatVipCbUrl(this.context)) : link,
todayCompleteTimes, todayCompleteTimes,
completeTimes, completeTimes: rateType === TASK_RATE_TYPE.EVERYDAY ? todayCompleteTimes : completeTimes,
status: setTaskStatus(userInfo, taskType, rateType, times), status: setTaskStatus(userInfo, taskType, rateType, times),
waitReceive: remainTimes?.[taskType] waitReceive: remainTimes?.[taskType]
} }
...@@ -117,7 +117,7 @@ export default class TaskService extends UserService { ...@@ -117,7 +117,7 @@ export default class TaskService extends UserService {
* @returns {boolean} * @returns {boolean}
* @memberof TaskService * @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 today = getToday()
const reward = activityInfo?.tasks?.[taskType]?.reward || 0 const reward = activityInfo?.tasks?.[taskType]?.reward || 0
let { let {
...@@ -128,31 +128,15 @@ export default class TaskService extends UserService { ...@@ -128,31 +128,15 @@ export default class TaskService extends UserService {
// 邀请任务由被邀请人完成,单独处理 // 邀请任务由被邀请人完成,单独处理
const { _id: srcId, openId: srcOpenId, userNick: srcUserNick, member: srcMember } = userInfo const { _id: srcId, openId: srcOpenId, userNick: srcUserNick, member: srcMember } = userInfo
if (taskType === 'invite') { 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 (userInfo?.inviteId) return CODE_TYPES.ERROR_AREADY_INVITE_SUCCESS
// 是否是新会员助力 // 是否是新会员助力
if (!isVip) return CODE_TYPES.ERROR_NO_VIP if (!isVip) return CODE_TYPES.ERROR_NO_VIP
const isNewVip = !userInfo?.member?.flag && isVip const isNewVip = !userInfo?.member?.flag && isVip
if (!isNewVip) return CODE_TYPES.ERROR_INVITE 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 openId = inviteId
userInfo = inviteUserInfo userInfo = inviteUserInfo as IUserInfo
} }
// 完成任务 // 完成任务
......
...@@ -15,13 +15,21 @@ import { TASK_RATE_TYPE } from '../../../constants' ...@@ -15,13 +15,21 @@ import { TASK_RATE_TYPE } from '../../../constants'
* @return {*} * @return {*}
*/ */
export default async function checkInviteId( export default async function checkInviteId(
context: IContext<{ activityId: string; inviteId: string }>, context: IContext<{ activityId: string; inviteId: string, key: string }>,
{ activityInfo }: IControllerInfos { activityInfo }: IControllerInfos
) { ) {
const { const {
openId, openId,
data: { activityId, inviteId } data: { activityId, inviteId, key }
} = context } = 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) if (openId === inviteId) return resultsModel.error(CODE_TYPES.ERROR_NO_INVITE_SELF)
...@@ -40,7 +48,7 @@ export default async function checkInviteId( ...@@ -40,7 +48,7 @@ export default async function checkInviteId(
} = activityInfo } = activityInfo
const { rateType, times } = invite const { rateType, times } = invite
const { todayCompleteTimes } = getTodayCompleteTask('invites', inviteUserInfo) const { todayCompleteTimes } = getTodayCompleteTask('invite', inviteUserInfo)
// 助力次数超限制 // 助力次数超限制
if (rateType === TASK_RATE_TYPE.EVERYDAY && todayCompleteTimes >= times) { if (rateType === TASK_RATE_TYPE.EVERYDAY && todayCompleteTimes >= times) {
......
...@@ -7,17 +7,17 @@ import { JOIN_DB_NAME } from '../../../db' ...@@ -7,17 +7,17 @@ import { JOIN_DB_NAME } from '../../../db'
export default async function checkJoinId(context: IContext<IParams>) { export default async function checkJoinId(context: IContext<IParams>) {
const { openId } = context const { openId } = context
const { id, activityId } = context.data const { gameId, activityId } = context.data
if (!id) { if (!gameId) {
return resultsModel.error(CODE_TYPES.PARAMS_ERROR, `缺少id参数`) 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?.submitTime) return resultsModel.error(CODE_TYPES.PARAMS_ERROR, `重复提交游戏!`)
if (joinInfo?.openId !== openId) 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 { return {
joinInfo 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