|
@@ -83,6 +83,102 @@ class TeaplanService extends CrudService {
|
|
|
}
|
|
|
|
|
|
async divide({ trainplanid }) {
|
|
|
+ const data = [];
|
|
|
+ // 根据全年计划表id查出对应的全年计划详细信息
|
|
|
+ const trainplan = await this.tmodel.findById(trainplanid);
|
|
|
+ // 将全年计划中的批次信息取出放在一个数组中
|
|
|
+ const batchList = [];
|
|
|
+ for (const term of trainplan.termnum) {
|
|
|
+ for (const batch of term.batchnum) {
|
|
|
+ batchList.push(batch);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 查询本培训计划中班主任全年计划表的全部信息
|
|
|
+ const teaplanList = await this.model.find({ trainplanid });
|
|
|
+ // 查询所有班主任信息
|
|
|
+ const headteacherList = await this.hmodel.find();
|
|
|
+ for (const teaplan of teaplanList) {
|
|
|
+ // 过滤出班主任信息表中id为此班主任全年计划信息班主任id的数据
|
|
|
+ const headteacherInfo = _.filter(headteacherList, item => item.id === teaplan.headteacherid);
|
|
|
+ // 如果班主任信息列表中班主任上报了班主任全年计划,将其移除
|
|
|
+ if (headteacherInfo.length >= 1) {
|
|
|
+ _.remove(headteacherList, item => item.id === teaplan.headteacherid);
|
|
|
+ teaplan.department = headteacherInfo[0].department;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 遍历班主任信息,将班主任的id放在headteacherid字段中
|
|
|
+ for (const headteacher of headteacherList) {
|
|
|
+ headteacher.headteacherid = headteacher.id;
|
|
|
+ }
|
|
|
+ const teaList = _.concat(teaplanList, headteacherList);
|
|
|
+ let noteaList = [];
|
|
|
+ // 遍历所有批次信息
|
|
|
+ for (const batch of batchList) {
|
|
|
+ let _teaList = [];
|
|
|
+ for (const teaplan of teaList) {
|
|
|
+ if (teaplan.nodate && (teaplan.nodate).length > 0) {
|
|
|
+ // 遍历班主任全年计划表中的不能上课的日期
|
|
|
+ for (const nodate of teaplan.nodate) {
|
|
|
+ // 如果不能上课的日期在该批次的开始时间和结束时间中,将该班主任从班主任列表中删除
|
|
|
+ if (moment(nodate).isBetween(batch.startdate, batch.enddate, null, '[]')) {
|
|
|
+ noteaList.push(teaplan);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 过滤出已分配的数据中该班主任的数据
|
|
|
+ const teaInfo = _.filter(data, item => item.headteacherid === teaplan.headteacherid);
|
|
|
+ // 计算出每个班主任担任过班主任的次数
|
|
|
+ teaplan.teacount = await this.cmodel.count({ headteacherid: teaplan.headteacherid }) + teaInfo.length;
|
|
|
+ // 如果已分配的数据中该班主任的数据长度大于0
|
|
|
+ if (teaInfo.length > 0) {
|
|
|
+ // 遍历已分配的数据中该班主任的数据
|
|
|
+ for (const _teaInfo of teaInfo) {
|
|
|
+ // 查询该班主任已分配的数据中的班级信息
|
|
|
+ const _class = await this.cmodel.findById(_teaInfo.classid);
|
|
|
+ // 根据班级的批次id查出该班级的开始时间和结束时间
|
|
|
+ const batchInfo = _.filter(batchList, item => item.id === _class.batchid);
|
|
|
+ // 如果该班级的开始时间和结束时间于当前遍历批次的开始时间和结束时间有重合部分,将该班主任加入不能上课的班主任数组中
|
|
|
+ if (await this.isrepeat(batchInfo.startdate, batchInfo.enddate, batch.startdate, batch.enddate)) {
|
|
|
+ noteaList.push(teaplan);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 将数组去重
|
|
|
+ noteaList = _.uniqWith(noteaList, _.isEqual);
|
|
|
+ // 将班主任全年计划表过滤,去除在不能上课的班主任数组中已存在的数据
|
|
|
+ _teaList = _.difference(teaList, noteaList);
|
|
|
+ // 将不能上课的班主任数组清空
|
|
|
+ noteaList = [];
|
|
|
+ const departmentList = await this.departmentcount(_teaList);
|
|
|
+ for (const department of departmentList) {
|
|
|
+ // 如果部门中人员的数量减去能部门中上课的班主任数量小于一,那么将能上课的班主任数组中部门为该部门的班主任移除一个
|
|
|
+ if ((department.dcount - department.dnum) < 1) {
|
|
|
+ let _noteaList = _.filter(_teaList, item => item.deparment === department.deparmentid);
|
|
|
+ _noteaList = _.orderBy(_noteaList, [ 'teacount' ], [ 'desc' ]);
|
|
|
+ _teaList = _.difference(_teaList, _noteaList[0]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 将该批次最终筛选出的能上课的班主任数组按每个班主任担任过班主任的次数倒序排序
|
|
|
+ _teaList = _.orderBy(_teaList, [ 'teacount' ], [ 'asc' ]);
|
|
|
+
|
|
|
+ }
|
|
|
+ // 查出该批次下所有的班级
|
|
|
+ const classList = await this.cmodel.find({ batchid: batch.id });
|
|
|
+ // 循环该批次下所有的班级
|
|
|
+ let index = 0;
|
|
|
+ for (const _class of classList) {
|
|
|
+ if (_teaList.length > 0 && _teaList[index]) {
|
|
|
+ data.push({ classid: _class.id, headteacherid: _teaList[index].headteacherid, teacount: _teaList[index].teacount });
|
|
|
+ } else {
|
|
|
+ data.push({ classid: _class.id, headteacherid: undefined });
|
|
|
+ }
|
|
|
+ index = index + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ async adivide({ trainplanid }) {
|
|
|
const data = [];
|
|
|
// 根据全年计划表id查出对应的全年计划详细信息
|
|
|
const trainplan = await this.tmodel.findById(trainplanid);
|
|
@@ -138,7 +234,7 @@ class TeaplanService extends CrudService {
|
|
|
for (const headteacher of headteacherList) {
|
|
|
headteacher.headteacherid = headteacher.id;
|
|
|
// 过滤出已分配的数据中该班主任的数据
|
|
|
- const teaInfo = _.filter(data, item => item.headteacherid === headteacher.id);
|
|
|
+ const teaInfo = _.filter(data, item => item.headteacherid === headteacher.headteacherid);
|
|
|
// 计算出每个班主任担任过班主任的次数
|
|
|
headteacher.teacount = await this.cmodel.count({ headteacherid: headteacher.id }) + teaInfo.length;
|
|
|
// 如果已分配的数据中该班主任的数据长度大于0
|
|
@@ -174,6 +270,8 @@ class TeaplanService extends CrudService {
|
|
|
}
|
|
|
// 将该批次最终筛选出的能上课的班主任数组按每个班主任担任过班主任的次数倒序排序
|
|
|
teaList = _.orderBy(teaList, [ 'teacount' ], [ 'asc' ]);
|
|
|
+ console.log(teaList);
|
|
|
+
|
|
|
// 查出该批次下所有的班级
|
|
|
const classList = await this.cmodel.find({ batchid: _batch.id });
|
|
|
// 循环该批次下所有的班级
|
|
@@ -207,21 +305,13 @@ class TeaplanService extends CrudService {
|
|
|
async departmentcount(teaList) {
|
|
|
let departmentList = [];
|
|
|
for (const teaplan of teaList) {
|
|
|
- // 将班主任的部门放到一个数组中
|
|
|
- if (!teaplan.department) {
|
|
|
- const headteacher = await this.hmodel.findById(teaplan.headteacherid);
|
|
|
- departmentList.push({ deparmentid: headteacher.department });
|
|
|
- teaplan.deparmentid = headteacher.department;
|
|
|
- } else {
|
|
|
- departmentList.push({ deparmentid: teaplan.department });
|
|
|
- teaplan.deparmentid = teaplan.department;
|
|
|
- }
|
|
|
+ departmentList.push({ deparmentid: teaplan.department });
|
|
|
}
|
|
|
// 将数组去重
|
|
|
departmentList = _.uniqWith(departmentList, _.isEqual);
|
|
|
for (const department of departmentList) {
|
|
|
// 计算出能该批次能上课的班主任中各部门有多少人
|
|
|
- const dnum = _.filter(teaList, item => item.deparmentid === department.deparmentid).length;
|
|
|
+ const dnum = _.filter(teaList, item => item.department === department.deparmentid).length;
|
|
|
department.dnum = dnum;
|
|
|
// 计算出各部门有多少人
|
|
|
const dcount = await this.hmodel.count({ department: department.deparmentid });
|