镇念塔:获取任务

This commit is contained in:
luying
2021-08-16 20:12:24 +08:00
parent 10265c6723
commit e1f4d7b52a
6 changed files with 184 additions and 98 deletions

View File

@@ -1,17 +1,8 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
function genCodeTmp(len) {
const chars = '123456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijklmnopqrstuvwxyz';
const charArr = chars.split('');
let code = '';
for (let i = 0; i < len; i++) {
code += charArr[Math.floor(Math.random() * charArr.length)];
}
return code;
}
import { TOWER_TASK_STATUS } from '../consts';
import { genCode } from '../pubUtils/util';
import { getZeroPointD } from '../pubUtils/timeUtil';
/**
* 天梯派遣记录表
@@ -24,16 +15,16 @@ export default class TowerTaskRec extends BaseModel {
@prop({ required: true })
roleName: string; // 角色名
@prop({ required: true})
@prop({ required: true })
batchCode: string; // 本批派遣任务唯一标识
@prop({ required: true, default: 0})
status: number; // 派遣任务当前状态0-可派遣1-已派遣2-已完成3-已领取
@prop({ required: true, default: 1})
refreshStatus: number; // 派遣任务是否显示 -1-刷掉 0-隐藏 1-显示
@prop({ required: true })
position: number; // 本批派遣任务当中的第几个任务
@prop({ required: true, default: 0, enum: TOWER_TASK_STATUS })
status: TOWER_TASK_STATUS; // 派遣任务当前状态0-可派遣1-已派遣2-已完成3-已领取
@prop({ required: true, type: Number, default: [] })
heroes: Array<number>; // 此批派遣使用的全部武将
@prop({ required: true})
@prop({ required: true })
taskId: number; // 任务唯一 Id来自任务表
@prop({ required: true })
taskCode: string; // 服务器生成的任务唯一编号
@@ -42,22 +33,50 @@ export default class TowerTaskRec extends BaseModel {
@prop({ required: false })
completeTime: Date; // 派遣结束时间
public static async getCurTasks(roleId: string, lean = true) {
const recs: TowerTaskRecType[] = await TowerTaskRecModel.find({roleId, refreshStatus: 1}).sort({createdAt: 1}).lean(lean);
public static async getCurTasks(roleId: string) {
let today = getZeroPointD();
const recs: TowerTaskRecType[] = await TowerTaskRecModel.find({ roleId, createdAt: { $gte: today } }).sort({ position: 1}).lean();
return recs;
}
public static async createTasks(roleId: string, roleName: string, batchCode: string, taskIds: Array<number>, refreshStatus: number) {
const tasksData = taskIds.map(id => {
public static async getPreTasks(roleId: string) {
let today = getZeroPointD();
const recs: TowerTaskRecType[] = await TowerTaskRecModel.find({ roleId, createdAt: { $lt: today }, status: TOWER_TASK_STATUS.DOINING }).sort({ position: 1}).lean();
return recs;
}
public static async getTaskByCode(roleId: string, taskCode: string) {
let today = getZeroPointD();
const recs: TowerTaskRecType = await TowerTaskRecModel.findOne({ roleId, taskCode, createdAt: { $gte: today } }).lean();
return recs;
}
public static async createTasks(roleId: string, roleName: string, batchCode: string, taskIds: Array<number>) {
const tasksData = taskIds.map((id, index) => {
const taskModel = new TowerTaskRecModel();
const taskCode = genCodeTmp(6);
const taskData = Object.assign(taskModel.toJSON(), {batchCode, taskId: id, taskCode, roleId, roleName, refreshStatus});
const taskCode = genCode(6);
const taskData = Object.assign(taskModel.toJSON(), {batchCode, taskId: id, taskCode, roleId, roleName, position: index + 1 });
return taskData;
});
const recs = await TowerTaskRecModel.insertMany(tasksData, {ordered: false});
return recs;
}
public static async createTask(roleId: string, roleName: string, batchCode: string, taskId: number, position: number) {
const taskModel = new TowerTaskRecModel();
const taskCode = genCode(6);
const taskData = Object.assign(taskModel.toJSON(), {batchCode, taskId, taskCode, roleId, roleName, position });
delete taskData._id;
const recs: TowerTaskRecType = await TowerTaskRecModel.findOneAndUpdate({ taskCode }, { $setOnInsert: taskData }, { new: true, upsert: true }).lean();
return recs;
}
public static async updateTask(roleId: string, batchCode: string, position: number, taskId: number) {
const recs: TowerTaskRecType = await TowerTaskRecModel.findOneAndUpdate({ roleId, batchCode, position, status: TOWER_TASK_STATUS.WAITING }, { $set: { taskId } }).lean();
return recs;
}
public static async getTasksByCode(batchCode: string, lean = true) {
const recs: TowerTaskRecType[] = await TowerTaskRecModel.find({batchCode}).lean(lean);
return recs;
@@ -67,8 +86,8 @@ export default class TowerTaskRec extends BaseModel {
let recs = new Array();
for (let {taskCode, heroes, completeTime} of tasks) {
const rec: TowerTaskRecType = await TowerTaskRecModel.findOneAndUpdate(
{batchCode, taskCode: taskCode, refreshStatus: 1},
{heroes: heroes, status: 1, sendTime, completeTime: new Date(sendTime.getTime() + completeTime * 1000)},
{ batchCode, taskCode: taskCode },
{heroes: heroes, status: TOWER_TASK_STATUS.DOINING, sendTime, completeTime: new Date(sendTime.getTime() + completeTime * 1000)},
{new: true}).lean(lean);
recs.push(rec);
@@ -76,7 +95,7 @@ export default class TowerTaskRec extends BaseModel {
return recs;
}
public static async finishTask(batchCode: string, tasks: Array<string>, _lean = true) {
public static async finishTask(batchCode: string, tasks: Array<string>) {
const recs:{ok: number, n:number, nModified:number} = await TowerTaskRecModel.updateMany({batchCode, taskCode: {$in:tasks}}, {status: 3, refreshStatus: -1});
return recs;
}