feat(稷下学宫): 修改每周学分进度奖励

This commit is contained in:
zhangxk
2023-09-08 21:25:39 +08:00
parent 7faeeb10e1
commit 77d30f8722
11 changed files with 285 additions and 30 deletions

View File

@@ -123,7 +123,7 @@ export default class RougelikeChara extends BaseModel {
await RougelikeCharaModel.bulkWrite(updateArr.map((param) => {
delete param._id;
const { gameCode, charaCode } = param
return { updateOne: { filter: { gameCode, charaCode }, update: { $set: { ...param } } } }
return { updateOne: { filter: { gameCode, charaCode }, update: { $set: { ...param } }, upsert: true } }
}))
}

View File

@@ -43,6 +43,7 @@ export default class RougelikeExtend extends BaseModel {
const result: RougelikeExtendType = await RougelikeExtendModel.findOne({ roleId, limitId }).lean(lean);
return result;
}
}
export const RougelikeExtendModel = getModelForClass(RougelikeExtend);

View File

@@ -1,3 +1,6 @@
import { SHOP_REFRESH_TYPE } from '../consts';
import { gameData } from '../pubUtils/data';
import { getZeroPointOfTimeD } from '../pubUtils/timeUtil';
import BaseModel from './BaseModel';
import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose';
@@ -103,6 +106,30 @@ export default class RougelikeRecord extends BaseModel {
return result;
}
public static async getLastMaxLv(roleId: string) {
let endTime = getZeroPointOfTimeD(Date.now() - 86400000, SHOP_REFRESH_TYPE.WEEKLY);
let startTime = new Date(endTime.getTime() - (86400000 * 7));
const result: RougelikeRecordType[] = await RougelikeRecordModel.find({ roleId, updatedAt: { $gt: startTime, $lt: endTime } }).lean(true);
let lastMaxLv = 1;
for (const { grade = 1 } of result) {
lastMaxLv = Math.max(lastMaxLv, grade);
}
return lastMaxLv;
}
public static async getLastMaxLvMap(roleIds: string[]) {
let endTime = getZeroPointOfTimeD(Date.now() - 86400000, SHOP_REFRESH_TYPE.WEEKLY);
let startTime = new Date(endTime.getTime() - (86400000 * 7));
const result: RougelikeRecordType[] = await RougelikeRecordModel.find({ roleId: { $in: roleIds }, updatedAt: { $gt: startTime, $lt: endTime } }).lean(true);
let lastMaxLvMap = new Map<string, number>();
for (const { roleId, grade } of result) {
if (!grade) continue;
let tempLv = lastMaxLvMap.has(roleId) ? lastMaxLvMap.get(roleId) : 1;
lastMaxLvMap.set(roleId, Math.max(tempLv, grade));
}
return lastMaxLvMap;
}
};
export const RougelikeRecordModel = getModelForClass(RougelikeRecord);
export interface RougelikeRecordType extends Pick<DocumentType<RougelikeRecord>, keyof RougelikeRecord> { };

View File

@@ -48,6 +48,11 @@ export default class RougelikeScore extends BaseModel {
return result;
}
public static async findByRefTime(refTime: Date) {
let result: RougelikeScoreType[] = await RougelikeScoreModel.find({ refTime }).lean();
return result;
}
public static async receiveAll(_ids: string[], maxNum: number) {
await RougelikeScoreModel.updateMany({ _id: { $in: _ids } }, { $set: { receiveNum: maxNum } });
}
@@ -59,6 +64,16 @@ export default class RougelikeScore extends BaseModel {
return result;
}
public static async bulkWriteUpdate(updateArr: RougelikeScorePara[]) {
if (updateArr.length == 0) return;
await RougelikeScoreModel.bulkWrite(updateArr.map((param) => {
delete param._id;
const { roleId, refTime } = param
return { updateOne: { filter: { roleId, refTime }, update: { $set: { ...param } }, upsert: true } }
}))
}
}
export const RougelikeScoreModel = getModelForClass(RougelikeScore);