天梯派遣功能
fix:
天梯挂机等bug修复
This commit is contained in:
liangtongchuan
2020-10-15 23:16:58 +08:00
parent 85940779d2
commit 31c1190e2c
7 changed files with 245 additions and 45 deletions

View File

@@ -22,6 +22,14 @@ function genCodeTmp(len) {
return code;
}
function getRefTime(curTime = new Date()) {
if (curTime.getHours() < 5) {
curTime.setDate(curTime.getDate() - 1);
}
curTime.setHours(5, 0, 0, 0);
return curTime;
}
/**
* 天梯派遣记录表
*/
@@ -29,59 +37,73 @@ function genCodeTmp(len) {
@index({ batchCode: 1 })
export default class TowerTaskRec extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
roleId: string; // 角色 id
@prop({ required: true })
roleName: string; // 角色名
@prop({ required: true})
batchCode: string; // 本批派遣任务唯一标识
@prop({ required: true, default: 0})
status: number; // 本批任务是否完成0-未完成1-已完成,2-已领取
@prop({ required: true, type: TowerTask, default: [] })
tasks: Array<TowerTask>; // 本批次任务列表
status: number; // 派遣任务当前状态0-可派遣1-已派遣2-已完成,3-已领取
@prop({ required: true, type: Number, default: [] })
heroes: Array<number>; // 此批派遣使用的全部武将
public static async getCurTask(roleId: string, lean = true) {
const curTime = new Date();
curTime.setHours(5, 0, 0, 0);
const rec = await TowerTaskRecModel.findOne({roleId, createdAt: {$gte: curTime}}).lean(lean);
return rec;
@prop({ required: true})
taskId: number; // 任务唯一 Id来自任务表
@prop({ required: true })
taskCode: string; // 服务器生成的任务唯一编号
@prop({ required: false })
sendTime: Date; // 派遣时间
public static async getCurTasks(roleId: string, lean = true) {
const refTime = getRefTime();
const recs = await TowerTaskRecModel.find({roleId, createdAt: {$gte: refTime}}).lean(lean);
return recs;
}
public static async createTask(roleId: string, roleName: string, taskIds: Array<number>, lean = true) {
public static async createTasks(roleId: string, roleName: string, taskIds: Array<number>, lean = true) {
const batchCode = genCodeTmp(8);
const tasksData = taskIds.map(id => {
const taskModel = new TowerTaskRecModel();
const taskCode = genCodeTmp(6);
const taskData = Object.assign(new TowerTask(), {id, taskCode});
const taskData = Object.assign(taskModel.toJSON(), {batchCode, taskId: id, taskCode, roleId, roleName});
return taskData;
});
const recDoc = new TowerTaskRecModel();
const update = Object.assign(recDoc.toJSON(), {tasks: tasksData, roleId, roleName});
const rec = await TowerTaskRecModel.findOneAndUpdate({roleId, batchCode}, update, {upsert: true, new: true}).lean(lean);
return rec;
const recs = await TowerTaskRecModel.insertMany(tasksData, {ordered: false});
return recs;
}
public static async updateTask(roleId: string, batchCode: string, tasks: Array<{taskCode:string, heroes: Array<number>}>, lean = true) {
let allHeroes = [];
tasks.forEach(task => {
allHeroes.concat(task.heroes);
})
const curRec = await TowerTaskRecModel.findOne({batchCode, heroes: {$nin: allHeroes}}).lean(lean);
if (!curRec) return null;
public static async getTasksByCode(batchCode: string, lean = true) {
const recs = await TowerTaskRecModel.find({batchCode}).lean(lean);
return recs;
}
let {status, tasks: recTasks, heroes: recHeroes} = curRec;
if (status == 2 || status == 1) return curRec;
public static async sendHeroes(roleId: string, batchCode: string, tasks: Array<{taskCode:string, heroes: Array<number>}>, sendTime: Date, lean = true) {
let recs = [];
const refTime = getRefTime();
for (let task of tasks) {
for (let recTask of recTasks) {
if (task.taskCode == recTask.taskCode) {
recTask.heroes = task.heroes;
recHeroes.concat(task.heroes);
}
}
const rec = await TowerTaskRecModel.findOneAndUpdate(
{batchCode, taskCode: task.taskCode, createdAt: {$gte: refTime}},
{heroes: task.heroes, status: 1, sendTime},
{new: true}).lean(lean);
recs.push(rec);
}
const newRec = await TowerTaskRecModel.findOneAndUpdate({batchCode}, {heroes: recHeroes, tasks: recTasks}, {new: true}).lean(lean);
return newRec;
return recs;
}
public static async finishTask(batchCode: string, tasks: Array<string>, lean = true) {
let recs = [];
const refTime = getRefTime();
for (let task of tasks) {
const rec = await TowerTaskRecModel.findOneAndUpdate(
{batchCode, taskCode: task},
{status: 3},
{new: true}).lean(lean);
recs.push(rec);
}
return recs;
}
}