Commit e3ce928b authored by 王波's avatar 王波

养成类完成任务优化

parent 6fe57fb2
...@@ -73,7 +73,7 @@ export default class AwardsController { ...@@ -73,7 +73,7 @@ export default class AwardsController {
@checkParams(['activityId', 'prizeDataType']) @checkParams(['activityId', 'prizeDataType'])
@services([CommonAwardsService]) @services([CommonAwardsService])
@preCheck([checkActivityTime]) @preCheck([checkActivityTime])
async drawLotteryPrize( async drawLottery(
context: IContext<IParams>, context: IContext<IParams>,
{ userInfo }: IControllerInfos, { userInfo }: IControllerInfos,
[awardSer]: [CommonAwardsService] [awardSer]: [CommonAwardsService]
...@@ -97,7 +97,7 @@ export default class AwardsController { ...@@ -97,7 +97,7 @@ export default class AwardsController {
*/ */
@noCheckUser @noCheckUser
@services([CommonBaseService, CommonAwardsService]) @services([CommonBaseService, CommonAwardsService])
async endOfActivityRewards( async openPrize(
context: IContext<IParams>, context: IContext<IParams>,
{}, {},
[commonBaseService, commonAwardsService]: [CommonBaseService, CommonAwardsService] [commonBaseService, commonAwardsService]: [CommonBaseService, CommonAwardsService]
......
...@@ -30,7 +30,7 @@ export default class BaseController { ...@@ -30,7 +30,7 @@ export default class BaseController {
@checkParams(['itemIds']) @checkParams(['itemIds'])
@registeInfos(['session']) @registeInfos(['session'])
@services([CommonBaseService]) @services([CommonBaseService])
async getItemListByItemIds( async getTaobaoItemList(
context: IContext<IParams>, context: IContext<IParams>,
{ session }: IControllerInfos, { session }: IControllerInfos,
[baseService]: [CommonBaseService] [baseService]: [CommonBaseService]
......
...@@ -8,27 +8,4 @@ import { checkActivityTime, checkInviteId, checkHelpRecord, checkNewVip } from ' ...@@ -8,27 +8,4 @@ import { checkActivityTime, checkInviteId, checkHelpRecord, checkNewVip } from '
import { updateHelpRecord, updateVip } from '../utils/common/update' import { updateHelpRecord, updateVip } from '../utils/common/update'
import { getTask } from '../utils' import { getTask } from '../utils'
export default class Share { export default class Share {}
/**
* 完成分享
*/
@checkParams(['activityId', 'inviteId', 'isVip'])
@registeInfos(['vipInfo'])
@services([CommonGrowtaskService, CommonStatService])
@preCheck([checkActivityTime, checkInviteId, checkNewVip, checkHelpRecord])
@preUpdate([updateVip, updateHelpRecord])
async doHelp(
context: IContext<IParams>,
{ userInfo, activityInfo }: IControllerInfos,
[growTaskService, statService]: [CommonGrowtaskService, CommonStatService],
{ inviteUserInfo }: IPreCheckData
) {
// 如果邀请任务是每日的,则需要请求每日任务信息
const task = await growTaskService.getTask(context, inviteUserInfo.openId)
const result = await growTaskService.completeTask('invite', activityInfo, inviteUserInfo, task)
statService.addStat(STAT_TYPE.INITE_SUCCESS, userInfo)
return resultsModel.success(result)
}
}
...@@ -42,19 +42,20 @@ export default class Task { ...@@ -42,19 +42,20 @@ export default class Task {
* 商品相关任务 需要传itemId参数 * 商品相关任务 需要传itemId参数
* 积分兑换任务 需要传credits参数 * 积分兑换任务 需要传credits参数
*/ */
@checkParams(['activityId', 'key', 'itemId?', 'credits?']) @checkParams(['activityId', 'key', 'inviteId?', 'itemId?', 'isVip?', 'credits?'])
@registeInfos(['session', 'task']) @registeInfos(['session', 'task'])
@services([CommonGrowtaskService]) @services([CommonGrowtaskService])
@preCheck([checkActivityTime, checkGrowTaskLimit, checkExchangeCreditsTask]) @preCheck([checkActivityTime, checkGrowTaskLimit, checkExchangeCreditsTask])
async completeTask( async completeTask(
context: IContext<IParams>, context: IContext<IParams>,
{ userInfo, activityInfo, task }: IControllerInfos, { userInfo, activityInfo, task }: IControllerInfos,
[growTaskService]: [CommonGrowtaskService] [growTaskService]: [CommonGrowtaskService],
{ inviteUserInfo }: IPreCheckData
) { ) {
const { key: taskType } = context.data const { key: taskType } = context.data
// 更新user表 // 更新user表
const result = await growTaskService.completeTask(taskType, activityInfo, userInfo, task) const result = await growTaskService.completeTask(context.data.key, activityInfo, userInfo, task, inviteUserInfo)
return resultsModel.success(result) return resultsModel.success(result)
} }
......
...@@ -146,10 +146,12 @@ export default class TaskService extends UserService { ...@@ -146,10 +146,12 @@ export default class TaskService extends UserService {
async completeTask( async completeTask(
taskType: ITaskType, taskType: ITaskType,
activityInfo: IActivityInfo, activityInfo: IActivityInfo,
userInfo: IUserInfo, baseUserInfo: IUserInfo,
task: ITask = {}, task: ITask = {},
inviteUserInfo: IUserInfo,
customRecord: Object = {} customRecord: Object = {}
) { ) {
let userInfo = taskType === 'invite' ? inviteUserInfo : baseUserInfo
const today = getToday() const today = getToday()
const reward = activityInfo?.tasks?.[taskType]?.reward || 0 const reward = activityInfo?.tasks?.[taskType]?.reward || 0
const { tasks } = activityInfo const { tasks } = activityInfo
......
/** @format */
import { resultsModel } from '../../../sdk'
import { CODE_TYPES } from '../../../errorCode'
import { dbCount } from '../mongodb'
import { STAT_DB_NAME } from '../../../db'
import { STAT_TYPE } from '../../../constants'
/**
* 检查邀请记录
* doHelp接口
*
* @export
* @param {IContext<{ activityId: string; inviteId: string }>} context
* @return {*}
*/
export default async function checkHelpRecord(
context: IContext<{ activityId: string; inviteId: string; key: string }>,
{ userInfo }: IControllerInfos
) {
if (context.data.key === 'invite') {
const { inviteId } = userInfo
// 邀请成功有该用户信息
if (inviteId) return resultsModel.error(CODE_TYPES.ERROR_AREADY_INVITE_SUCCESS)
return { inviteId }
}
}
/** @format */
import { resultsModel } from '../../../sdk'
import { CODE_TYPES } from '../../../errorCode'
import { dbFindOne } from '../../common/mongodb'
import { USER_DB_NAME } from '../../../db'
import { getTask, getTodayCompleteGrowTask, getTodayCompleteTask, getTotalCompleteTask } from '../task'
import { TASK_RATE_TYPE } from '../../../constants'
/**
* 检查inviteId是否合法 返回邀请人的用户信息
*
* @export
* @param {IContext<{ activityId: string; inviteId: string }>} context
* @return {*}
*/
export default async function checkGrowInviteId(
context: IContext<{ activityId: string; inviteId: string; key: string }>,
{ activityInfo }: IControllerInfos
) {
const {
openId,
data: { activityId, inviteId, key }
} = context
if (key === 'invite') {
//如果类型为邀请
if (!inviteId) {
//如果邀请id不为空
// 自己邀请自己
if (openId === inviteId) return resultsModel.error(CODE_TYPES.ERROR_NO_INVITE_SELF)
// 获取邀请者信息
const inviteUserInfo = await dbFindOne<IUserInfo>(context, USER_DB_NAME, {
activityId,
openId: inviteId
})
// inviteId的用户信息查询不到, 则inviteId无效
if (!inviteUserInfo) return resultsModel.error(CODE_TYPES.ERROR_INVALID_INVITE_ID)
const {
tasks: { invite }
} = activityInfo
const { rateType, times } = invite
// 助力次数超限制
if (rateType === TASK_RATE_TYPE.EVERYDAY) {
const task = await getTask(context, inviteUserInfo.openId)
// 每日任务今天已经完成
const { todayCompleteTimes, todayTaskInfo } = getTodayCompleteGrowTask(key, task)
if (todayCompleteTimes >= times) {
return resultsModel.error(CODE_TYPES.ERROR_INVITE_TIMES_LIMIT)
}
}
if (rateType === TASK_RATE_TYPE.FOREVER) {
// 永久邀请任务超出次数
const { completeTimes } = getTotalCompleteTask(key, inviteUserInfo)
if (completeTimes >= times) {
return resultsModel.error(CODE_TYPES.ERROR_INVITE_TIMES_LIMIT)
}
}
return {
inviteUserInfo
}
} else {
return resultsModel.error(CODE_TYPES.ERROR_INVALID_INVITE_ID)
}
}
}
...@@ -14,6 +14,8 @@ import checkJoinId from './checkJoinId' ...@@ -14,6 +14,8 @@ import checkJoinId from './checkJoinId'
import checkOpenPrizeStatus from './checkOpenPrizeStatus' import checkOpenPrizeStatus from './checkOpenPrizeStatus'
import checkSign from './checkSign' import checkSign from './checkSign'
import checkGrowTaskLimit from './checkGrowTaskLimit' import checkGrowTaskLimit from './checkGrowTaskLimit'
import checkGrowInviteId from './checkGrowInviteId'
import checkGrowHelpRecord from './checkGrowHelpRecord'
const check = { const check = {
checkActivityTime, checkActivityTime,
...@@ -33,7 +35,9 @@ const check = { ...@@ -33,7 +35,9 @@ const check = {
checkGameTimes, checkGameTimes,
checkOpenPrizeStatus, checkOpenPrizeStatus,
checkSign, checkSign,
checkGrowTaskLimit checkGrowTaskLimit,
checkGrowInviteId,
checkGrowHelpRecord
} }
export default check export default check
...@@ -56,5 +60,7 @@ export { ...@@ -56,5 +60,7 @@ export {
checkGameTimes, checkGameTimes,
checkOpenPrizeStatus, checkOpenPrizeStatus,
checkSign, checkSign,
checkGrowTaskLimit checkGrowTaskLimit,
checkGrowInviteId,
checkGrowHelpRecord
} }
...@@ -3,7 +3,7 @@ import updateVip from './updateVip' ...@@ -3,7 +3,7 @@ import updateVip from './updateVip'
import updateSignTask from './updateSignTask' import updateSignTask from './updateSignTask'
import updateOrderGoods from './updateOrderGoods' import updateOrderGoods from './updateOrderGoods'
import updateFirstLoginToday from './updateFirstLoginToday' import updateFirstLoginToday from './updateFirstLoginToday'
import updateUserInfo, { reduceGameTimes, updateHelpRecord } from './updateUserInfo' import updateUserInfo, { reduceGameTimes, updateHelpRecord, updateGrowHelpRecord } from './updateUserInfo'
import updateSignGrowTask from './updateSignGrowTask' import updateSignGrowTask from './updateSignGrowTask'
import updateGrowOrderGoods from './updateGrowOrderGoods' import updateGrowOrderGoods from './updateGrowOrderGoods'
...@@ -16,7 +16,8 @@ const update = { ...@@ -16,7 +16,8 @@ const update = {
reduceGameTimes, reduceGameTimes,
updateHelpRecord, updateHelpRecord,
updateSignGrowTask, updateSignGrowTask,
updateGrowOrderGoods updateGrowOrderGoods,
updateGrowHelpRecord
} }
export default update export default update
...@@ -30,5 +31,6 @@ export { ...@@ -30,5 +31,6 @@ export {
reduceGameTimes, reduceGameTimes,
updateHelpRecord, updateHelpRecord,
updateSignGrowTask, updateSignGrowTask,
updateGrowOrderGoods updateGrowOrderGoods,
updateGrowHelpRecord
} }
...@@ -32,3 +32,16 @@ export async function updateHelpRecord( ...@@ -32,3 +32,16 @@ export async function updateHelpRecord(
} }
} }
} }
export async function updateGrowHelpRecord(
context: IContext<IParams>,
{ userInfo }: IControllerInfos
): Promise<IPreUpdateQuery | undefined> {
const { inviteId, key } = context.data
if (!userInfo || key !== 'invite' || !inviteId) return {}
return {
$set: {
inviteId
}
}
}
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