活动:活动按照合集调整数据结构

This commit is contained in:
qiaoxin
2021-06-15 20:53:07 +08:00
parent 79d1c438d4
commit d794deffad
7 changed files with 154 additions and 13 deletions

View File

@@ -1,6 +1,6 @@
import { Application, BackendSession } from 'pinus';
import { resResult } from '../../../pubUtils/util';
import { ACTIVITY_TYPE, FIRST_GIFT_STATE, SERVER_OPEN_TIME, STATUS, TASK_TYPE } from '../../../consts';
import { ACTIVITY_TYPE, ACTIVITY_GROUP_TYPE, SERVER_OPEN_TIME, STATUS, TASK_TYPE } from '../../../consts';
import { firstGiftActivity, getPlayerFirstGiftData } from '../../../services/firstGiftService';
import { newPlayerSignInActivity, signInActivity, signInVIPActivity } from '../../../services/signInService';
import { growthFundActivity } from '../../../services/growthFundService';
@@ -24,6 +24,10 @@ import { getSelfServiceShopActivityData } from '../../../services/selfServiceSho
import { ActivitySelfServiceGoodsModel } from '../../../db/ActivitySelfServiceGoods';
import { dailyMealActivity } from '../../../services/dailyMealService';
import { dailyCoinActivity } from '../../../services/dailyCoinService';
import { ActivityGroupModel } from '../../../db/ActivityGroup';
import { ServerlistModel } from '../../../db/Serverlist';
import { getActivity } from '../../../services/activityService';
import { ActivityModel } from '../../../db/Activity';
// import { ActivityDailyChallengesModel } from '../../../db/ActivityDailyChallenges';
// import { isComplete } from '../../../pubUtils/taskUtil';
@@ -466,7 +470,27 @@ export class ActivityHandler {
}
}
return resResult(STATUS.SUCCESS, { playerActivityArray });
let { activityGroupId } = await ServerlistModel.findByServerId(serverId);
let groups = await ActivityGroupModel.findGroupsData(activityGroupId);
let playerGroupArray = [];
for (let groupData of groups) {
if (groupData.type !== ACTIVITY_GROUP_TYPE.UNKNOW) {
let playerActivityArray = [];
for (let activityId of groupData.activities) {
let activityData = await ActivityModel.findActivity(activityId);
if (activityData) {
let playerActivityData = await getActivity(serverId, roleId, activityId, activityData.type)
if (playerActivityData) playerActivityArray.push(playerActivityData);
}
}
playerGroupArray.push({
type: groupData.type,
activities: playerActivityArray,
});
}
}
return resResult(STATUS.SUCCESS, { playerActivityArray, playerGroupArray });
}
//测试活动任务数据

View File

@@ -64,6 +64,7 @@ export class DailyCoinHandler {
let allConsume: Array<ItemInter> = []
let allReward: Array<RewardParam> = [];
let role = await RoleModel.findByRoleId(roleId)
let rateArray = [];//暴击记录
for (let i = 1; i <= count; i++) {
let index = curIndex + i;
console.log('第几次抽奖', index)
@@ -75,7 +76,7 @@ export class DailyCoinHandler {
allConsume = allConsume.concat(consume)
}
let rate = playerData.getRate()//翻几倍
rateArray.push(rate);
let rewardItem: CoinRewardFormulaItem = playerData.findCoinRewardFormulaItem(index);
let lv = role.lv;//玩家等级
let coinRewardCount = eval(rewardItem.rewardFormula);
@@ -86,10 +87,12 @@ export class DailyCoinHandler {
reward.count = reward.count * rate;
}
allReward = allReward.concat(baseRewardParamArr);
if (playerData.isExtra(index)) {//额外奖励
let extraIndex = playerData.isExtra(index);
if (extraIndex != -1) {//额外奖励
let extraRewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.extraReward);
console.log('额外奖励', JSON.stringify(extraRewardParamArr))
allReward = allReward.concat(extraRewardParamArr);
let extraReward = extraRewardParamArr[extraIndex];
console.log('额外奖励', JSON.stringify(extraReward))
allReward.push(extraReward);
}
}
@@ -125,7 +128,7 @@ export class DailyCoinHandler {
let exchangeCount = playerData.exchangeCount + count;
return resResult(STATUS.SUCCESS, Object.assign(result, {
param: { activityId, count },
item: { exchangeCount },
item: { exchangeCount, recordMsg: `${count}&${consumeGold}&${addCoin}`, rateArray },
}));
}

View File

@@ -0,0 +1,97 @@
import { ACTIVITY_TYPE } from '../consts';
import { getPlayerFirstGiftData } from './firstGiftService';
import { getPlayerSignInData, } from './signInService';
import { getPlayerGrowthFundData, } from './growthFundService';
import { getPlayerLimitPackageData, } from './limitPackageService';
import { getPlayerDailyGiftsData } from './dailyGiftsService';
import { getPlayerYuanbaoShopData, } from './yuanbaoService';
import { getPlayerMonthlyTicketData, } from './monthlyTicketService';
import { getPlayerRechargeMoneyData, } from './rechargeMoneyService';
import { getPlayerThirtyDaysData, playerThirtyDaysActivityDays, } from './thirtyDaysService';
import { getPlayerVipRechargeMoneyData, } from './vipRechargeMoneyService';
import { getPlayerActivityData, } from './selfServiceShopActivityService';
import { ActivitySelfServiceGoodsModel } from '../db/ActivitySelfServiceGoods';
/**
* 获取活动数据
*
* @param {number} serverId 区Id
* @param {number} activityId 活动Id
* @param {string} roleId 角色Id
*
*/
export async function getActivity(serverId: number, roleId: string, activityId: number, activityType: number) {
let activityData = null;
switch (activityType) {
case ACTIVITY_TYPE.SIGN_IN://签到 4
case ACTIVITY_TYPE.SIGN_IN_VIP://高级签到 5
case ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN://新手签到 25
{
activityData = await getPlayerSignInData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.GROWTH_FUND_MAIN://成长基金 6
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP://高阶成长基金 7
case ACTIVITY_TYPE.GROWTH_FUND_TOWER://镇念塔成长基金 8
case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP://高阶镇念塔成长基金 9
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE://精英成长基金 10
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP://高阶精英成长基金 11
{
activityData = await getPlayerGrowthFundData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.THIRTY_DAYS://30天目标活动 12
{
let data = await getPlayerThirtyDaysData(activityId, serverId, roleId);
let todayIndex = await playerThirtyDaysActivityDays(roleId);
activityData = { playerData: data, todayIndex }
break;
}
case ACTIVITY_TYPE.SELF_SERVICE_SHOP://自选商店 糜家商队 13
{
let data = await getPlayerActivityData(activityId, serverId, roleId);
let playerGoods = await ActivitySelfServiceGoodsModel.findData(activityId, roleId, data.roundIndex, true);
activityData = { playerData: data, playerGoods: playerGoods ? playerGoods : [] }
break;
}
case ACTIVITY_TYPE.FIRST_GIFT://首冲礼包活动 14
{
activityData = await getPlayerFirstGiftData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_DAILY://每日限购礼包RMB购买礼包 16
case ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_WEEKLY://每周限购礼包RMB购买礼包 17
{
activityData = await getPlayerLimitPackageData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.YUAN_BAO_SHOP://元宝商店 18
{
activityData = await getPlayerYuanbaoShopData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.MONTHLY_TICKET_1://月卡1 19
case ACTIVITY_TYPE.MONTHLY_TICKET_2://月卡2 20
{
activityData = await getPlayerMonthlyTicketData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.RECHARGE_MONEY://累计充值RMB活动 21
{
activityData = await getPlayerRechargeMoneyData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.DAILY_RMB_GIFTS://每日特惠RMB购买一次性购买7天礼包 22
{
activityData = await getPlayerDailyGiftsData(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.VIP_RECHARGE_MONEY://vip累计充值活动 26
{
activityData = await getPlayerVipRechargeMoneyData(activityId, serverId, roleId);
break;
}
}
return activityData;
}

View File

@@ -1,6 +1,7 @@
import { ACTIVITY_TYPE, DAILY_MEAL_TYPE } from '../consts';
import { ActivityModel, ActivityModelType } from '../db/Activity';
import { ActivityDailyCoinModel, ActivityDailyCoinModelType } from '../db/ActivityDailyCoin';
import { ActivityGroupModel } from '../db/ActivityGroup';
import { ServerlistModel } from '../db/Serverlist';
import { DailyCoinData } from '../domain/activityField/dailyCoinField';

View File

@@ -1,4 +1,12 @@
/**
* 活动类型
*/
export enum ACTIVITY_GROUP_TYPE {
UNKNOW = 0, // 未知类型
FESTIVAL = 1, // 节日活动合集
}
/**
* 活动类型

View File

@@ -22,6 +22,8 @@ export default class Activity_Group extends BaseModel {
endTime: Date; // 里面的activity的最晚的时间
@prop({ required: true, type: Number })
serverIds: number[]; // 关联服务器列表
@prop({ required: true })
type: number; // 类型 ACTIVITY_GROUP_TYPE
//查询组
@@ -34,6 +36,12 @@ export default class Activity_Group extends BaseModel {
return result;
}
//查询组
public static async findGroupsData(groupIds: number[]) {
let result: ActivityGroupModelType[] = await ActivityGroupModel.find({ groupId: { $in: groupIds } }).lean();
return result;
}
//查询组
public static async findGroupData(groupId: number) {
let result: ActivityGroupModelType = await ActivityGroupModel.findOne({ groupId }).lean();
@@ -71,9 +79,9 @@ export default class Activity_Group extends BaseModel {
private static async updateTime(groupId: number, aids: number[]) {
let activities = await ActivityModel.findActivityByIds(aids);
let beginTime = undefined, endTime = undefined;
for(let activity of activities) {
if(!beginTime || activity.beginTime < beginTime) beginTime = activity.beginTime;
if(!endTime || activity.endTime > endTime) endTime = activity.endTime;
for (let activity of activities) {
if (!beginTime || activity.beginTime < beginTime) beginTime = activity.beginTime;
if (!endTime || activity.endTime > endTime) endTime = activity.endTime;
}
let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId },
{ $set: { beginTime, endTime } }, { new: true }).lean(true);
@@ -85,7 +93,7 @@ export default class Activity_Group extends BaseModel {
public static async pullByActivityIds(activities: number[], uid = 1) {
await ActivityModel.updateGroupId(activities, 0, uid);
let activityGroups = await ActivityGroupModel.find({ activities: { $in: activities } });
for(let { groupId } of activityGroups) {
for (let { groupId } of activityGroups) {
let result = await ActivityGroupModel.findOneAndUpdate({ groupId }, { $pull: { activities: { $in: activities } } }, { new: true }).lean(true);
await this.updateTime(result.groupId, result.activities);
}
@@ -108,7 +116,7 @@ export default class Activity_Group extends BaseModel {
//查询
public static async findByCondition(page: number, pageSize: number, serverId: number = 0, current: boolean = false, groupId: number = 0) {
let searchObj = {};
if (serverId != 0) searchObj['serverIds'] = { $elemMatch:{$eq:serverId} };
if (serverId != 0) searchObj['serverIds'] = { $elemMatch: { $eq: serverId } };
if (groupId != 0) searchObj['groupId'] = groupId;
if (current) {
searchObj['beginTime'] = { $lte: new Date };

View File

@@ -66,7 +66,7 @@ export class DailyCoinData extends ActivityBase {
public isExtra(index: number) {
let arr = splitString(this.extraRewardCount, '&');
return arr.indexOf(index) != -1;
return arr.indexOf(index);
}
public findConsumeExchangeFormulaItem(index: number) {