diff --git a/game-server/app/servers/activity/handler/newHeroGachaHandler.ts b/game-server/app/servers/activity/handler/newHeroGachaHandler.ts index 1fd00314a..3c41b18e9 100644 --- a/game-server/app/servers/activity/handler/newHeroGachaHandler.ts +++ b/game-server/app/servers/activity/handler/newHeroGachaHandler.ts @@ -55,13 +55,8 @@ export class NewHeroGachaHandler { const { activityId, hid } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); + await ActivityNewHeroGachaModel.selectedHero(serverId, activityId, roleId, hid); - let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); - let { createTime } = await RoleModel.findByRoleId(roleId); - let playerData = new NewHeroGachaData(activityData, createTime); - for (let pageData of playerData.list) { - await ActivityNewHeroGachaModel.selectedHero(serverId, activityId, roleId, pageData.hid, pageData.hid == hid); - } return resResult(STATUS.SUCCESS); } @@ -134,9 +129,9 @@ export class NewHeroGachaHandler { if (!costResult) return resResult(STATUS.ACTIVITY_RES_NOT_ENOUGH); //记录数据 - await ActivityNewHeroGachaModel.addRecord(serverId, activityId, roleId, hid, count, JSON.stringify(resultList)); + await ActivityNewHeroGachaModel.addRecord(serverId, activityId, roleId, hid, count, JSON.stringify(resultList), floorReward); if (floorReward) {//抽中保底奖励,重置统计次数 - await ActivityNewHeroGachaModel.resetCount(serverId, activityId, roleId, hid, 0); + await ActivityNewHeroGachaModel.resetCount(serverId, activityId, roleId, 0); } // 给东西 diff --git a/game-server/app/services/activity/newHeroGachaService.ts b/game-server/app/services/activity/newHeroGachaService.ts index 3c1f093ac..d31a30105 100644 --- a/game-server/app/services/activity/newHeroGachaService.ts +++ b/game-server/app/services/activity/newHeroGachaService.ts @@ -21,7 +21,7 @@ export async function newHeroGachaActivity(serverId: number, roleId: string) { return null; } let activityData: ActivityModelType = activityDataArray[0]; - let playerRecord: ActivityNewHeroGachaModelType[] = await ActivityNewHeroGachaModel.findData(serverId, activityData.activityId, roleId); + let playerRecord: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findData(serverId, activityData.activityId, roleId); let { createTime } = await RoleModel.findByRoleId(roleId); let playerData = new NewHeroGachaData(activityData, createTime); playerData.setPlayerRecords(playerRecord); @@ -39,7 +39,7 @@ export async function newHeroGachaActivity(serverId: number, roleId: string) { */ export async function getPlayerNewHeroGachaData(activityId: number, serverId: number, roleId: string) { let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); - let playerRecord: ActivityNewHeroGachaModelType[] = await ActivityNewHeroGachaModel.findData(serverId, activityId, roleId); + let playerRecord: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findData(serverId, activityId, roleId); let { createTime } = await RoleModel.findByRoleId(roleId); let playerData = new NewHeroGachaData(activityData, createTime); diff --git a/shared/db/ActivityNewHeroGacha.ts b/shared/db/ActivityNewHeroGacha.ts index 6fe57e5c6..5d67d55ae 100644 --- a/shared/db/ActivityNewHeroGacha.ts +++ b/shared/db/ActivityNewHeroGacha.ts @@ -2,12 +2,16 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; export class Record { + @prop({ required: true }) + hid: number; // 选中的武将id @prop({ required: true }) count: number; // 次数 @prop({ required: true }) reward: string; // 奖励内容 @prop({ required: true }) time: Date; // 抽卡时间 + @prop({ required: true }) + hasGetFloor: boolean; // 是否抽到保底了 } /** @@ -23,44 +27,36 @@ export default class Activity_New_Hero_Gacha extends BaseModel { @prop({ required: true }) roleId: string; // 用户Id @prop({ required: true }) - selected: boolean; // 是否选中默认false - @prop({ required: true }) - hid: number; // 武将id + selectedHid: number; // 玩家选中的武将id @prop({ required: true }) count: number; // 抽卡次数,抽中大奖后重新统计 @prop({ required: true }) records: Record[]; // 抽卡历史记录 //重置统计次数 - public static async resetCount(serverId: number, activityId: number, roleId: string, hid: number, count: number) { - let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId, hid }, + public static async resetCount(serverId: number, activityId: number, roleId: string, count: number) { + let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId, }, { $set: { count } }, { upsert: true, new: true }).lean(true); return result; } //抽卡记录 - public static async addRecord(serverId: number, activityId: number, roleId: string, hid: number, count: number, reward: string) { - let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId, hid }, - { $inc: { count }, $push: { records: { count, reward, time: new Date() } } }, { upsert: true, new: true }).lean(true); + public static async addRecord(serverId: number, activityId: number, roleId: string, hid: number, count: number, reward: string, hasGetFloor: boolean) { + let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId }, + { $inc: { count }, $push: { records: { hid, count, reward, time: new Date(), hasGetFloor } } }, { upsert: true, new: true }).lean(true); return result; } //设置选中武将 - public static async selectedHero(serverId: number, activityId: number, roleId: string, hid: number, selected: boolean) { - let result: ActivityNewHeroGachaModelType[] = await ActivityNewHeroGachaModel.findOneAndUpdate( - { serverId, roleId, activityId, hid }, { $set: { selected } }, { upsert: true, new: true }).lean(true); - return result; - } - - //根据活动id查询活动数据 - public static async findDataByHid(serverId: number, activityId: number, roleId: string, hid: number) { - let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOne({ serverId, roleId, activityId, hid }).lean(true); + public static async selectedHero(serverId: number, activityId: number, roleId: string, selectedHid: number) { + let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate( + { serverId, roleId, activityId }, { $set: { selectedHid } }, { upsert: true, new: true }).lean(true); return result; } //根据活动id查询活动数据 public static async findData(serverId: number, activityId: number, roleId: string) { - let result: ActivityNewHeroGachaModelType[] = await ActivityNewHeroGachaModel.find({ serverId, roleId, activityId }).lean(true); + let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOne({ serverId, roleId, activityId }).lean(true); return result; } diff --git a/shared/domain/activityField/newHeroGachaField.ts b/shared/domain/activityField/newHeroGachaField.ts index e92fb62db..538df683f 100644 --- a/shared/domain/activityField/newHeroGachaField.ts +++ b/shared/domain/activityField/newHeroGachaField.ts @@ -51,13 +51,13 @@ export class NewHeroGachaData extends ActivityBase { } //解析玩家记录 - public setPlayerRecords(data: ActivityNewHeroGachaModelType[]) { + public setPlayerRecords(data: ActivityNewHeroGachaModelType) { + if (!data) { + return; + } for (let item of this.list) { - let index = data.findIndex(obj => { return obj.hid == item.hid }); - if (index != -1) { - item.count = data[index].count ? data[index].count : 0; - item.selected = data[index].selected ? data[index].selected : false; - } + item.count = data.count ? data.count : 0; + item.selected = (data && data.selectedHid == item.hid); } }