Browse Source

增加统计学生数接口

liuyu 5 years ago
parent
commit
d212369541
3 changed files with 90 additions and 0 deletions
  1. 22 0
      app/controller/count.js
  2. 4 0
      app/router.js
  3. 64 0
      app/service/count.js

+ 22 - 0
app/controller/count.js

@@ -0,0 +1,22 @@
+'use strict';
+
+const _ = require('lodash');
+const Controller = require('egg').Controller;
+const { CrudController } = require('naf-framework-mongoose/lib/controller');
+
+// 教师申请讲课表管理
+class CountController extends Controller {
+
+  constructor(ctx) {
+    super(ctx);
+    this.service = this.ctx.service.count;
+  }
+
+  async countstudent() {
+    const data = await this.service.countstudent();
+    this.ctx.ok({ data });
+  }
+
+}
+
+module.exports = CountController;

+ 4 - 0
app/router.js

@@ -201,4 +201,8 @@ module.exports = app => {
   // 全年计划模板表设置路由
   // 全年计划模板表设置路由
   router.resources('trainmodel', '/api/train/trainmodel', controller.trainmodel); // index、create、show、destroy
   router.resources('trainmodel', '/api/train/trainmodel', controller.trainmodel); // index、create、show、destroy
   router.post('trainmodel', '/api/train/trainmodel/update/:id', controller.trainmodel.update);
   router.post('trainmodel', '/api/train/trainmodel/update/:id', controller.trainmodel.update);
+
+  // 统计查询设置路由
+  router.get('/api/train/count/countstudent', controller.count.countstudent);
+
 };
 };

+ 64 - 0
app/service/count.js

@@ -0,0 +1,64 @@
+'use strict';
+
+
+const assert = require('assert');
+const _ = require('lodash');
+const { ObjectId } = require('mongoose').Types;
+const moment = require('moment');
+const { CrudService } = require('naf-framework-mongoose/lib/service');
+const { BusinessError, ErrorCode } = require('naf-core').Error;
+
+class ApplyService extends CrudService {
+  constructor(ctx) {
+    super(ctx, 'count');
+    this.smodel = this.ctx.model.Student;
+    this.tmodel = this.ctx.model.Trainplan;
+    this.lmodel = this.ctx.model.Leave;
+  }
+
+  // 查询
+  async countstudent() {
+    // 取得当前年份计划信息
+    console.log(moment().format('YYYY'));
+    const plan = await this.tmodel.findOne({ year: moment().format('YYYY') });
+    if (!plan) {
+      throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '当前全年计划不存在');
+    }
+    // 根据计划取得当前年份下计划培训学生人数
+    const planstu = _.chain(plan.termnum).map('batchnum').flatten()
+      .map('number');
+    let _planstu = 0;
+    for (const el of planstu) {
+      _planstu = _.add(_planstu, parseInt(el));
+    }
+    const data = {};
+    data.planstu = _planstu;
+    // 根据计划取得学校上报的学生数
+    const schstus = await this.smodel.find({ planid: plan.id });
+    data.schstu = schstus.length;
+    // 取得计划内已培训的学生数
+    const trainstu = schstus.filter(item => item.openid !== null);
+    data.trainstu = trainstu.length;
+    // 取得计划内未培训的学生数
+    const notrainstu = schstus.filter(item => item.openid === null);
+    data.notrainstu = notrainstu.length;
+    // 取得学生请假数和退出数
+    const levelstus = [];
+    // 循环取得所有请假和退出的学生信息
+    for (const elm of trainstu) {
+      const level = await this.lmodel.findOne({ studentid: elm.id, status: '1' });
+      if (level) {
+        levelstus.push(level);
+      }
+    }
+    // 筛选出请假数和退出数
+    const levelqj = levelstus.filter(item => item.type === '0');
+    const levelexit = levelstus.filter(item => item.type === '1');
+    data.levelqj = levelqj.length;
+    data.levelexit = levelexit.length;
+    return data;
+  }
+
+}
+
+module.exports = ApplyService;