'use strict'; const assert = require('assert'); const _ = require('lodash'); const { ObjectId } = require('mongoose').Types; const { CrudService } = require('naf-framework-mongoose/lib/service'); const { BusinessError, ErrorCode } = require('naf-core').Error; class BedroomService extends CrudService { constructor(ctx) { super(ctx, 'bedroom'); this.model = this.ctx.model.Bedroom; this.umodel = this.ctx.model.Student; this.tmodel = this.ctx.model.Trainplan; } // 一键分寝 async apart(data) { const { trainplanid, termid, batchid } = data; assert(trainplanid, 'trainplanid不能为空'); assert(termid, 'termid不能为空'); assert(batchid, 'batchid不能为空'); // 根据计划id取得当前计划 const trainplan = await this.tmodel.findById({ id: trainplanid }); // 根据期id取得当前期信息 const term = trainplan.termnum.find(p => p.id === termid); // 根据批次id查询批次信息 const _batch = term.batchnum.find(p => p.id === batchid); // 查询所有寝室列表 const bedroomList = await this.model.find({ batch: _batch.batch }); // 循环所有当前批次下的寝室列表进行分寝处理 for (const bedroom of bedroomList) { // 判断当前寝室号是否已有 // 根据期id查找所有当期学生列表 const studentList = await this.getstudents(termid, batchid); const _stu = studentList.find(p => p.bedroomid === bedroom.id); if (bedroom.number !== _stu.length) { let i = 0; let _gender = ''; for (const stud of studentList) { if (i === 0) { if (!bedroom.gender) { stud.bedroomid = bedroom.id; stud.bedroom = bedroom.number; await stud.save(); i = i + 1; _gender = stud.gender; } else { if (bedroom.gender === stud.gender) { stud.bedroomid = bedroom.id; stud.bedroom = bedroom.number; await stud.save(); i = i + 1; _gender = stud.gender; } } } else if (i < bedroom.number) { if (_gender === stud.gender) { stud.bedroomid = bedroom.id; stud.bedroom = bedroom.number; await stud.save(); i = i + 1; } } else if (i === bedroom.number) { i = 0; break; } } } } } // 取得符合条件的学生列表 async getstudents(termid, batchid) { // 根据期id查找所有当期学生列表 const studentList = await this.umodel.find({ termid, batchid }); return studentList; } } module.exports = BedroomService;