活动:30天任务支持多次重复购买

This commit is contained in:
qiaoxin
2021-06-02 11:20:18 +08:00
parent 58051529ad
commit 91ea547a34
5 changed files with 20 additions and 17 deletions
@@ -76,8 +76,8 @@ export class PopUpShopHandler {
if (!playerRecords) { if (!playerRecords) {
return resResult(STATUS.ACTIVITY_POP_UP_SHOP_EXPIRE); return resResult(STATUS.ACTIVITY_POP_UP_SHOP_EXPIRE);
} }
if (playerRecords.isBuy) { if (playerRecords.buyCount >= playerData.count) {
return resResult(STATUS.ACTIVITY_REWARDED); return resResult(STATUS.ACTIVITY_MAX_COUNT);
} }
if (playerData.condition > playerRecords.totalCount) { if (playerData.condition > playerRecords.totalCount) {
@@ -96,7 +96,9 @@ export class PopUpShopHandler {
let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.reward); let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.reward);
let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr)
playerData.isBuy = true; await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, id, playerData.taskType, 1);
playerData.buyCount += 1;
return resResult(STATUS.SUCCESS, Object.assign(result, { return resResult(STATUS.SUCCESS, Object.assign(result, {
param: { activityId, id }, param: { activityId, id },
item: playerData item: playerData
+5 -6
View File
@@ -42,13 +42,12 @@ export async function getPlayerPopUpShopData(activityId: number, serverId: numbe
let allPlayerShop = []; let allPlayerShop = [];
let allTaskData = JSON.parse(activityData.data); let allTaskData = JSON.parse(activityData.data);
for (let record of playerRecords) { for (let record of playerRecords) {
if (!record.isBuy) {//没有购买 if (record.isPush) {//没有购买
let index = allTaskData.findIndex(obj => { return obj && obj.id === record.id && obj.taskType === record.type }) let index = allTaskData.findIndex(obj => { return obj && obj.id === record.id && obj.taskType === record.type })
if (index != -1) { if (index != -1) {
let playerData = new PopUpShopData(allTaskData[index], activityData.activityId); let playerData = new PopUpShopData(allTaskData[index], activityData.activityId);
playerData.isBuy == false;
playerData.setPlayerRecords(record) playerData.setPlayerRecords(record)
if (playerData.condition <= record.totalCount) { if (playerData.buyCount < allTaskData[index].count) {
allPlayerShop.push(playerData) allPlayerShop.push(playerData)
} }
} }
@@ -92,16 +91,16 @@ export async function makePopUpShopReward(roleId: string, roleName: string, sid:
if (playerRecord.totalCount < playerData.condition) { if (playerRecord.totalCount < playerData.condition) {
return STATUS.ACTIVITY_TASK_UNCOMPLETED; return STATUS.ACTIVITY_TASK_UNCOMPLETED;
} }
if (!playerRecord.isBuy) { if (playerRecord.buyCount >= playerData.count) {
return STATUS.ACTIVITY_REWARDED; return STATUS.ACTIVITY_REWARDED;
} }
playerRecord = await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, playerData.id, playerData.taskType); playerRecord = await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, playerData.id, playerData.taskType, 1);
playerData.setPlayerRecords(playerRecord); playerData.setPlayerRecords(playerRecord);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.reward); let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.reward);
let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr)
playerData.isBuy = true;
return { return {
code: 0, code: 0,
data: Object.assign(result, { item: playerData, activityId: activityData.activityId }) data: Object.assign(result, { item: playerData, activityId: activityData.activityId })
+3 -3
View File
@@ -27,18 +27,18 @@ export default class Activity_Pop_Up_Shop extends BaseModel {
@prop({ required: true }) @prop({ required: true })
data: string; // 数据信息 data: string; // 数据信息
@prop({ required: true }) @prop({ required: true })
isBuy: boolean; // 是否购买 buyCount: number; // 购买次数
@prop({ required: true }) @prop({ required: true })
isPush: boolean; // 是否推送过 isPush: boolean; // 是否推送过
//购买记录 //购买记录
public static async addRecord(serverId: number, activityId: number, roleId: string, id: number, type: number) { public static async addRecord(serverId: number, activityId: number, roleId: string, id: number, type: number, buyCount: number) {
let nowDate = new Date(); let nowDate = new Date();
let result: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOneAndUpdate({ let result: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOneAndUpdate({
serverId, roleId, activityId, id, type, serverId, roleId, activityId, id, type,
beginTime: { $lt: nowDate }, endTime: { $gt: nowDate } beginTime: { $lt: nowDate }, endTime: { $gt: nowDate }
}, },
{ $set: { isBuy: true } }, { upsert: true, new: true }).lean(true); { $inc: { buyCount: buyCount } }, { upsert: true, new: true }).lean(true);
return result; return result;
} }
@@ -18,8 +18,9 @@ export class PopUpShopData {
taskParam: number; // 任务参数 taskParam: number; // 任务参数
condition: number; // 任务条件 condition: number; // 任务条件
totalCount: number; //一共完成次数 totalCount: number; //一共完成次数
count: number; //最大可购买次数
isBuy: boolean = false; //购买过 buyCount: number = 0; //已经购买过次数
beginTime: Date = null;//开始时间 beginTime: Date = null;//开始时间
endTime: Date = null;//结束时间 endTime: Date = null;//结束时间
beginTimeStamp: number = 0;//开始时间 beginTimeStamp: number = 0;//开始时间
@@ -30,7 +31,7 @@ export class PopUpShopData {
if (!data) { if (!data) {
return; return;
} }
this.isBuy = data.isBuy ? data.isBuy : false; this.buyCount = data.buyCount ? data.buyCount : 0;
this.beginTime = data.beginTime; this.beginTime = data.beginTime;
this.endTime = data.endTime; this.endTime = data.endTime;
this.beginTimeStamp = moment(data.beginTime).valueOf(); this.beginTimeStamp = moment(data.beginTime).valueOf();
@@ -52,10 +53,11 @@ export class PopUpShopData {
this.taskType = data.taskType; this.taskType = data.taskType;
this.taskParam = data.taskParam; this.taskParam = data.taskParam;
this.condition = data.condition; this.condition = data.condition;
this.isBuy = false; this.buyCount = 0;
this.beginTime = null; this.beginTime = null;
this.endTime = null; this.endTime = null;
this.totalCount = 0; this.totalCount = 0;
this.count = data.count;
} }
constructor(activityData: any, activityId: number) { constructor(activityData: any, activityId: number) {
+2 -2
View File
@@ -589,7 +589,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType:
let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount);
//推送 //推送
if (task.condition <= playerRecord.totalCount) { if (task.condition <= playerRecord.totalCount) {
await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime);
popShopData.setPlayerRecords(playerRecord) popShopData.setPlayerRecords(playerRecord)
pushMessage = pushMessage.concat(popShopData); pushMessage = pushMessage.concat(popShopData);
} }
@@ -597,7 +597,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType:
let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount);
//推送 //推送
if (task.condition <= playerRecord.totalCount) { if (task.condition <= playerRecord.totalCount) {
await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime);
popShopData.setPlayerRecords(playerRecord) popShopData.setPlayerRecords(playerRecord)
pushMessage = pushMessage.concat(popShopData); pushMessage = pushMessage.concat(popShopData);
} }