活动:成长基金添加购买记录

This commit is contained in:
qiaoxin
2021-04-30 16:01:49 +08:00
parent 73e3836a54
commit a29b88d91d
6 changed files with 101 additions and 5 deletions

View File

@@ -52,6 +52,10 @@ export class SevenDaysHandler {
let playerData = await getPlayerGrowthFundData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
if (playerData.isVipActivity() && !playerData.isBuy(pageIndex)) {//vip高阶活动需要购买
return resResult(STATUS.ACTIVITY_NEED_BUY);
}
let growthFundItemData: GrowthFundItem = playerData.findGrowthFundItem(pageIndex, cellIndex);
if (!growthFundItemData) {
return resResult(STATUS.ACTIVITY_DATA_ERROR);

View File

@@ -1,6 +1,7 @@
import { ACTIVITY_TYPE, TASK_TYPE } from '../consts';
import { ActivityModel, ActivityModelType } from '../db/Activity';
import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../db/ActivityGrowthFund';
import { ActivityBuyRecordsModel, ActivityBuyRecordsModelType } from '../db/ActivityBuyRecords';
import { RoleModel } from '../db/Role';
import { GrowthFundData, GrowthFundItem } from '../domain/activityField/growthFundField';
@@ -12,8 +13,17 @@ import { GrowthFundData, GrowthFundItem } from '../domain/activityField/growthFu
* @param {string} roleId 角色Id
*
*/
/*ACTIVITY_TYPE类型
GROWTH_FUND_MAIN = 6, // 主线成长基金
GROWTH_FUND_MAIN_VIP = 7, // 主线成长基金(高阶)
GROWTH_FUND_TOWER = 8, // 镇念塔成长基金
GROWTH_FUND_TOWER_VIP = 9, // 镇念塔成长基金(高阶)
GROWTH_FUND_MAIN_ELITE = 10, // 精英成长基金
GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶)
*/
export async function growthFundActivity(type: number, serverId: number, roleId: string) {
let activityArray: ActivityModelType[] = await (await ActivityModel.findActivityByType(type, true)).sort((a, b) => {
let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(type, true)
activityArray = activityArray.sort((a, b) => {
return a.acvitityId - b.acvitityId
});
for (let i = 0; i < activityArray.length; i++) {
@@ -40,6 +50,10 @@ export async function getPlayerGrowthFundData(activityId: number, serverId: numb
let playerData = new GrowthFundData(activityData);
playerData.setPlayerRecords(playerRecords);
if (playerData.isVipActivity()) {//vip高阶需要购买
let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activityData.acvitityId, roleId);
playerData.initBuyRecords(buyRecords);
}
let activityType = activityData.type;
switch (activityType) {

View File

@@ -11,8 +11,11 @@ export enum ACTIVITY_TYPE {
SIGN_IN = 4, // 签到活动
SIGN_IN_VIP = 5, // 签到活动(高级)
GROWTH_FUND_MAIN = 6, // 主线成长基金
GROWTH_FUND_TOWER = 7, // 镇念塔成长基金
GROWTH_FUND_MAIN_ELITE = 8, // 精英成长基金
GROWTH_FUND_MAIN_VIP = 7, // 主线成长基金(高阶)
GROWTH_FUND_TOWER = 8, // 镇念塔成长基金
GROWTH_FUND_TOWER_VIP = 9, // 镇念塔成长基金(高阶)
GROWTH_FUND_MAIN_ELITE = 10, // 精英成长基金
GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶)
}
/**

View File

@@ -347,6 +347,7 @@ export const STATUS = {
ACTIVITY_DAY_INDEX_OVER: { code: 50010, simStr: '心急吃不了热豆腐' },
ACTIVITY_EXPIRE: { code: 50011, simStr: '活动到期,刷新' },
ACTIVITY_GROWTH_FUND_END: { code: 50012, simStr: '成长基金活动结束' },
ACTIVITY_NEED_BUY: { code: 50012, simStr: '成长基金需要购买' },
// GM后台相关状态 60000 - 69999
GM_ERR_PASSWORD: { code: 60001, simStr: '账号或密码错误' },
GM_MISS_API: { code: 60002, simStr: '未找到该接口' },

View File

@@ -0,0 +1,48 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
/**
* 活动购买记录
*/
@index({ roleId: 1 })
export default class ActivityBuyRecords extends BaseModel {
@prop({ required: true })
acvitityId: number; // 活动Id
@prop({ required: true })
roleId: string; // 用户Id
@prop({ required: true })
type: number; // 活动类型
@prop({ required: true })
pageIndex: number; // 第几页(成长基金使用)
//添加购买记录
public static async addRecord(acvitityId: number, roleId: string, type: number, pageIndex: number, lean = true) {
let result: ActivityBuyRecordsModelType = await ActivityBuyRecordsModel.findOneAndUpdate({ roleId, acvitityId, type, pageIndex },
{}, { upsert: true, new: true }).lean(lean);
return result;
}
//根据活动id查询数据
public static async findRecordsByActivityId(acvitityId: number, roleId: string, lean = true) {
let result: ActivityBuyRecordsModelType[] = await ActivityBuyRecordsModel.find({ roleId, acvitityId }).lean(lean);
return result;
}
//查询第几页的活动数据
public static async findDataBypageIndex(acvitityId: number, type: number, roleId: string, pageIndex: number, lean = true) {
let result: ActivityBuyRecordsModelType[] = await ActivityBuyRecordsModel.find({ roleId, type, acvitityId, pageIndex }).lean(lean);
return result;
}
//删除活动购买记录
public static async deleteActivity(acvitityId: number, roleId: string, pageIndex: number, cellIndex: number) {
await ActivityBuyRecordsModel.deleteMany({ roleId, acvitityId, pageIndex, cellIndex });
}
}
export const ActivityBuyRecordsModel = getModelForClass(ActivityBuyRecords);
export interface ActivityBuyRecordsModelType extends Pick<DocumentType<ActivityBuyRecords>, keyof ActivityBuyRecords> { }
export type ActivityBuyRecordsModelTypeParam = Partial<ActivityBuyRecordsModelType>; // 将所有字段变成可选项

View File

@@ -1,5 +1,6 @@
import { TASK_TYPE, ACTIVITY_RESOURCES_TYPE } from '../../consts';
import { TASK_TYPE, ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE } from '../../consts';
import { ActivityModelType } from '../../db/Activity';
import { ActivityBuyRecordsModelType } from '../../db/ActivityBuyRecords';
import { ActivityGrowthFundModelType } from '../../db/ActivityGrowthFund';
import { RewardInter } from '../../pubUtils/interface';
import { parseGoodStrWithType, parseHeroStrWithType, splitString } from '../../pubUtils/util';
@@ -21,6 +22,7 @@ export class GrowthFundItem {
isComplete: boolean = false; //是否完成任务
isReceive: boolean = false; //是否领取过奖励
constructor(data: any) {
this.pageIndex = data.pageIndex;
this.cellIndex = data.cellIndex;
@@ -61,6 +63,21 @@ export class GrowthFundItem {
// 成长基金活动数据
export class GrowthFundData extends ActivityBase {
list: Array<GrowthFundItem> = [];
price: number = 0;//高阶价格
buyRecords: Array<number> = [];//高阶购买记录
//是否是高阶,需要购买
public isVipActivity() {
return this.type == ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP
|| this.type == ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP
|| this.type == ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP
}
//是否购买page
public isBuy(pageIndex: number) {
let index = this.buyRecords.findIndex(obj => { return obj == pageIndex });
return index != -1;
}
//全部领取完成
public isComplete() {
@@ -88,8 +105,17 @@ export class GrowthFundData extends ActivityBase {
}
}
//高阶版购买记录
public initBuyRecords(buyRecords: ActivityBuyRecordsModelType[]) {
for (let obj of buyRecords) {
this.buyRecords.push(obj.pageIndex);
}
}
public initData(data: string) {
let arr = JSON.parse(data);
let dataObj = JSON.parse(data);
this.price = dataObj.price;
let arr = dataObj.data;
for (let obj of arr) {
this.list.push(new GrowthFundItem(obj))
}