|
@@ -11,6 +11,68 @@ 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;
|
|
|
+
|
|
|
+ // 根据计划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;
|
|
|
+ await stud.save();
|
|
|
+ i = i + 1;
|
|
|
+ _gender = stud.gender;
|
|
|
+ } else {
|
|
|
+ if (bedroom.gender === stud.gender) {
|
|
|
+ stud.bedroomid = bedroom.id;
|
|
|
+ await stud.save();
|
|
|
+ i = i + 1;
|
|
|
+ _gender = stud.gender;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (i < bedroom.number) {
|
|
|
+ if (_gender === stud.gender) {
|
|
|
+ stud.bedroomid = bedroom.id;
|
|
|
+ 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;
|
|
|
}
|
|
|
}
|
|
|
|