reloaded 5 سال پیش
والد
کامیت
73be537657
1فایلهای تغییر یافته به همراه52 افزوده شده و 35 حذف شده
  1. 52 35
      app/service/teaplan.js

+ 52 - 35
app/service/teaplan.js

@@ -46,29 +46,23 @@ class TeaplanService extends CrudService {
     // 根据全年计划表id查出对应的全年计划详细信息
     const trainplan = await this.tmodel.findById(trainplanid);
     // 将全年计划中的批次信息取出放在一个数组中
-    let batchList = [];
+    const batchList = [];
     for (const term of trainplan.termnum) {
       for (const batch of term.batchnum) {
         batchList.push(batch);
       }
     }
-    // 查询班主任全年计划表的全部信息
-    const teaplanList = await this.model.find();
+    // 查询本培训计划中班主任全年计划表的全部信息
+    const teaplanList = await this.model.find({ trainplanid });
     let noteaList = [];
-    batchList = _.slice(batchList, 0, 3);
     // 遍历所有批次信息
     for (const _batch of batchList) {
       // 遍历班主任全年计划表
       for (const teaplan of teaplanList) {
-        // 遍历班主任全年计划表中的不能上课的日期
-        for (const nodate of teaplan.nodate) {
-          // 如果不能上课的日期在该批次的开始时间和结束时间中,将该班主任加入不能上课的班主任数组中
-          if (moment(nodate).isBetween(_batch.startdate, _batch.enddate)) {
-            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) {
           // 遍历已分配的数据中该班主任的数据
@@ -77,12 +71,19 @@ class TeaplanService extends CrudService {
             const _class = await this.cmodel.findById(_teaInfo.classid);
             // 根据班级的批次id查出该班级的开始时间和结束时间
             const batchInfo = _.filter(batchList, item => item.id === _class.batchid);
-            // 如果该班级的开始时间或结束时间在当前遍历批次的开始时间和结束时间中,将该班主任加入不能上课的班主任数组中
-            if (moment(batchInfo.startdate).isBetween(_batch.startdate, _batch.enddate) || moment(batchInfo.enddate).isBetween(_batch.startdate, _batch.enddate)) {
+            // 如果该班级的开始时间和结束时间于当前遍历批次的开始时间和结束时间有重合部分,将该班主任加入不能上课的班主任数组中
+            if (await this.isrepeat(batchInfo.startdate, batchInfo.enddate, _batch.startdate, _batch.enddate)) {
               noteaList.push(teaplan);
             }
           }
         }
+        // 遍历班主任全年计划表中的不能上课的日期
+        for (const nodate of teaplan.nodate) {
+          // 如果不能上课的日期在该批次的开始时间和结束时间中,将该班主任加入不能上课的班主任数组中
+          if (moment(nodate).isBetween(_batch.startdate, _batch.enddate, null, '[]')) {
+            noteaList.push(teaplan);
+          }
+        }
       }
       // 将数组去重
       noteaList = _.uniqWith(noteaList, _.isEqual);
@@ -90,29 +91,10 @@ class TeaplanService extends CrudService {
       let teaList = _.difference(teaplanList, noteaList);
       // 将不能上课的班主任数组清空
       noteaList = [];
-      // 遍历该批次能上课的班主任列表
-      for (const teaplan of teaList) {
-        // 计算出每个班主任担任过班主任的次数
-        teaplan.teacount = await this.cmodel.count({ headteacherid: teaplan.headteacherid });
-      }
-      let departmentList = [];
-      // 遍历排序过的班主任数组
-      for (const teaplan of teaList) {
-        // 将班主任的部门放到一个数组中
-        const headteacher = await this.hmodel.findById(teaplan.headteacherid);
-        departmentList.push({ deparmentid: headteacher.department });
-        teaplan.deparmentid = headteacher.department;
-
-      }
-      // 将数组去重
-      departmentList = _.uniqWith(departmentList, _.isEqual);
+      const departmentList = await this.departmentcount(teaList);
       for (const department of departmentList) {
-        // 计算出能该批次能上课的班主任中各部门有多少人
-        const teacount = _.filter(teaList, item => item.deparmentid === department.deparmentid).length;
-        // 计算出各部门有多少人
-        const departmentcount = await this.hmodel.count({ department: department.deparmentid });
-        // 如果部门中能上课的班主任数量减去部门中人员的数量小于一,那么将能上课的班主任数组中部门为该部门的班主任移除一个
-        if ((departmentcount - teacount) < 1) {
+        // 如果部门中人员的数量减去能部门中上课的班主任数量小于一,那么将能上课的班主任数组中部门为该部门的班主任移除一个
+        if ((department.dcount - department.dnum) < 1) {
           let _noteaList = _.filter(teaList, item => item.deparmentid === department.deparmentid);
           _noteaList = _.orderBy(_noteaList, [ 'teacount' ], [ 'desc' ]);
           teaList = _.difference(teaList, _noteaList[0]);
@@ -136,6 +118,41 @@ class TeaplanService extends CrudService {
     return data;
   }
 
+  // 判断两个时间段是否有重合部分
+  async isrepeat(startdate1, enddate1, startdate2, enddate2) {
+    let result = true;
+    if (moment(enddate1).isSameOrBefore(startdate2)) {
+      result = false;
+    }
+    if (moment(startdate1).isSameOrAfter(enddate2)) {
+      result = false;
+    }
+    return result;
+  }
+
+  // 查询传递的班主任列表中每个部门的人数以及每个部门的总人数
+  // teaList 传递的教师列表  dnum 传递的教师列表中各部门的人数  dcount 各部门的总人数
+  async departmentcount(teaList) {
+    let departmentList = [];
+    for (const teaplan of teaList) {
+      // 将班主任的部门放到一个数组中
+      const headteacher = await this.hmodel.findById(teaplan.headteacherid);
+      departmentList.push({ deparmentid: headteacher.department });
+      teaplan.deparmentid = headteacher.department;
+
+    }
+    // 将数组去重
+    departmentList = _.uniqWith(departmentList, _.isEqual);
+    for (const department of departmentList) {
+      // 计算出能该批次能上课的班主任中各部门有多少人
+      const dnum = _.filter(teaList, item => item.deparmentid === department.deparmentid).length;
+      department.dnum = dnum;
+      // 计算出各部门有多少人
+      const dcount = await this.hmodel.count({ department: department.deparmentid });
+      department.dcount = dcount;
+    }
+    return departmentList;
+  }
 }
 
 module.exports = TeaplanService;