任务:完成主要接口
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||
import { getCurWeekDate } from '../pubUtils/timeUtil';
|
||||
|
||||
/**
|
||||
* 玩家购买商店记录表,每个商品一条,每次刷新新建一条
|
||||
**/
|
||||
@modelOptions({ schemaOptions: { id: false } })
|
||||
@index({ roleId: 1, itemId: 1 })
|
||||
|
||||
export default class UserTask extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
roleId: string; // 玩家id
|
||||
|
||||
@prop({ required: true, default: 1 })
|
||||
mainTaskStage: number; // 主线所处在的阶段
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
dailyTaskPoint: number; // 每日任务的累计积分
|
||||
|
||||
@prop({ required: true })
|
||||
dailyTaskRefWeekly: Date; // 每日任务的每周刷新时间
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
dailyTaskPointWeekly: number; // 每日任务的每周活跃积分
|
||||
|
||||
@prop({ required: true, type: Number, default: [] })
|
||||
dailyTaskBox: number[]; // 每日任务每周已领取箱子
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
achievementPoint: number; // 成就积分
|
||||
|
||||
@prop({ required: true, type: Number, default: [] })
|
||||
achievementBox: number[]; // 成就已领取了的箱子
|
||||
|
||||
|
||||
public static async findByRole(roleId: string) {
|
||||
let curWeek = getCurWeekDate(1, 5);
|
||||
let rec: UserTaskType = await UserTaskModel.findOneAndUpdate({ roleId }, { $setOnInsert: {
|
||||
mainTaskStage: 1, dailyTaskPoint: 0, dailyTaskRefWeekly: curWeek, dailyTaskPointWeekly: 0, dailyTaskBox: [], achievementPoint: 0, achievementBox: []
|
||||
} }, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async resetDailyScore(roleId: string, point: number, curWeek: Date) {
|
||||
let rec: UserTaskType = await UserTaskModel.findOneAndUpdate({ roleId }, {
|
||||
$set: { dailyTaskRefWeekly: curWeek, dailyTaskPointWeekly: point, dailyTaskBox: [] },
|
||||
$inc: { dailyTaskPoint: point }
|
||||
}, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async incInfo(roleId: string, inc: UserTaskIncParam) {
|
||||
let rec: UserTaskType = await UserTaskModel.findOneAndUpdate({ roleId }, {
|
||||
$inc: inc
|
||||
}, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async decreaseDailyPoint(roleId: string, point: number) {
|
||||
let rec: UserTaskType = await UserTaskModel.findOneAndUpdate( { roleId, dailyTaskPoint: { $gte: point }}, { $inc: { dailyTaskPoint: -point } }, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async pushDailyBox(roleId: string, id: number, curWeek: Date, shouldRefresh: boolean) {
|
||||
let rec: UserTaskType;
|
||||
if(shouldRefresh) {
|
||||
rec = await UserTaskModel.findOneAndUpdate({ roleId }, {
|
||||
$set: { dailyTaskRefWeekly: curWeek, dailyTaskPointWeekly: 0, dailyTaskBox: [ id ] }
|
||||
}, { new: true }).lean()
|
||||
} else {
|
||||
rec = await UserTaskModel.findOneAndUpdate({ roleId }, { $push: { dailyTaskBox: id } }, { new: true }).lean();
|
||||
}
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async pushAchievementBox(roleId: string, id: number) {
|
||||
let rec = await UserTaskModel.findOneAndUpdate({ roleId }, { $push: { achievementBox: id } }, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
}
|
||||
|
||||
export const UserTaskModel = getModelForClass(UserTask);
|
||||
|
||||
export interface UserTaskType extends Pick<DocumentType<UserTask>, keyof UserTask> { }
|
||||
export type UserTaskParam = Partial<UserTaskType>;
|
||||
export type UserTaskIncParam = Pick<UserTaskParam, 'mainTaskStage'|'dailyTaskPoint'|'dailyTaskPointWeekly'|'achievementPoint'>;
|
||||
@@ -32,34 +32,33 @@ export default class UserTaskRec extends BaseModel {
|
||||
@prop({ required: true })
|
||||
count: number; // 达成次数
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
received: boolean; // 是否已领取
|
||||
@prop({ required: true, type: Number, default: [] })
|
||||
received: number[]; // 是否已领取
|
||||
|
||||
private static getRefreshCondition(type: number) {
|
||||
let today = getTodayZeroDate(5);
|
||||
|
||||
if(type == TASK_FUN_TYPE.DAILY) {
|
||||
return { createdAt: { $gte: today } };
|
||||
return { type, createdAt: { $gte: today } };
|
||||
} else {
|
||||
return {};
|
||||
return { type };
|
||||
}
|
||||
}
|
||||
|
||||
public static async setTaskRec(roleId: string, type: number, taskType: number, group: number, count: number) {
|
||||
let condition = this.getRefreshCondition(type);
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group, ...condition }, { $setOnInsert: { code: genCode(8), taskType, received: false }, $set: { count } }, { new: true, upsert: true }).lean();
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $set: { count } }, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async incTaskRec(roleId: string, type: number, taskType: number, group: number, count: number) {
|
||||
let condition = this.getRefreshCondition(type);
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group, ...condition }, { $setOnInsert: { code: genCode(8), taskType, received: false }, $inc: { count } }, { new: true, upsert: true }).lean();
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count } }, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async checkHistoryAndSetTaskRec(roleId: string, type: number, taskType: number, group: number, count: number) {
|
||||
let condition = this.getRefreshCondition(type);
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findOne({ roleId, type, group, ...condition }).lean();
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findByRoleAndGroup(roleId, type, group, taskType);
|
||||
if(rec) {
|
||||
if(rec.count < count) {
|
||||
rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count);
|
||||
@@ -70,7 +69,38 @@ export default class UserTaskRec extends BaseModel {
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async findByRoleAndType(roleId: string, type: number) {
|
||||
let condition = this.getRefreshCondition(type);
|
||||
let rec: UserTaskRecType[] = await UserTaskRecModel.find({ roleId, ...condition }).lean();
|
||||
let map = new Map<number, Map<number, UserTaskRecType>>(); // taskType => group => userTask
|
||||
for(let userTaskRec of rec) {
|
||||
let { taskType, group } = userTaskRec;
|
||||
if(!map.has(taskType)) {
|
||||
map.set(taskType, new Map<number, UserTaskRecType>());
|
||||
}
|
||||
map.get(taskType).set(group, userTaskRec);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public static async findByRoleAndGroup(roleId: string, type: number, taskType: number, group: number) {
|
||||
let condition = this.getRefreshCondition(type);
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findOne({ roleId, taskType, group, ...condition }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async receiveTask(roleId: string, type: number, taskType: number, group: number, id: number) {
|
||||
let condition = this.getRefreshCondition(type);
|
||||
let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, taskType, group, ...condition }, { $push: { received: id } }, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async getReceiveRec(roleId: string, type: number) {
|
||||
let condition = this.getRefreshCondition(type);
|
||||
let rec = await UserTaskRecModel.find({ roleId, ...condition }).lean();
|
||||
console.log(JSON.stringify(rec))
|
||||
return rec
|
||||
}
|
||||
}
|
||||
|
||||
export const UserTaskRecModel = getModelForClass(UserTaskRec);
|
||||
|
||||
Reference in New Issue
Block a user