@@ -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 } )
refreshS tatus : number ; // 派遣任务是否显示 -1-刷掉 0-隐藏 1-显示
@prop ( { required : true } )
position : number ; // 本批 派遣任务当中的第几个任务
@prop ( { required : true , default : 0 , enum : TOWER_TASK_STATUS } )
s tatus : 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 creat eTasks( roleId : string , roleName : string , batchCode : string , taskIds : Array < number > , refreshStatus : number ) {
const tasksData = taskIds . map ( id = > {
public static async getPr eTasks( 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 ;
}