lrf 2 سال پیش
والد
کامیت
1f96b89a93
3فایلهای تغییر یافته به همراه66 افزوده شده و 1 حذف شده
  1. 14 0
      app/controller/config/.statistics.js.js
  2. 47 0
      app/service/statistics.js
  3. 5 1
      app/z_router/statistics.js

+ 14 - 0
app/controller/config/.statistics.js.js

@@ -7,4 +7,18 @@ module.exports = {
       },
     },
   },
+  schoolStudentAge: {
+    parameters: {
+      query: {
+        school_id: 'school_id',
+      },
+    },
+  },
+  schoolSignCoach: {
+    parameters: {
+      query: {
+        school_id: 'school_id',
+      },
+    },
+  },
 };

+ 47 - 0
app/service/statistics.js

@@ -10,7 +10,54 @@ class StatisticsService extends CrudService {
   constructor(ctx) {
     super(ctx, 'statistics');
     this.billModel = this.ctx.model.Business.Bill;
+    this.rssModel = this.ctx.model.Relation.RelationStudentSchool;
+    this.rcsModel = this.ctx.model.Relation.RelationCoachSchool;
+    this.lessonCoachModel = this.ctx.model.Business.LessonCoach;
   }
+  // 学校统计 教练出勤率
+  async schoolSignCoach({ school_id }) {
+    // 查出这个学校下面的教练
+    const rList = await this.rcsModel.find({ school_id }).populate('coach_id', 'name');
+    const coachList = rList.map(i => i.coach_id);
+    const lcList = await this.lessonCoachModel.find({ school_id }, { coach_id: 1, is_sign: 1 });
+  }
+
+
+  // 学校统计:学员按岁数区间
+  async schoolStudentAge({ school_id }) {
+    // 年龄组
+    const ageList = [
+      [ null, 6 ],
+      [ 7, 9 ],
+      [ 10, 12 ],
+      [ 12, 18 ],
+      [ 19, 30 ],
+      [ 31, null ],
+    ];
+    const data = [];
+    let list = await this.rssModel.find({ school_id }).populate('student_id', 'age');
+    if (list.length > 0)list = JSON.parse(JSON.stringify(list));
+    for (const a of ageList) {
+      const start = _.head(a);
+      const end = _.last(a);
+      const obj = {};
+      if (start && end) obj.name = `${start}-${end}岁`;
+      else if (!start) obj.name = `${end}岁以下`;
+      else if (!end) obj.name = `${start}岁以上`;
+      const l = list.filter(f => {
+        const age = _.get(f, 'student_id.age');
+        if (start && end) return age >= start && age <= end;
+        else if (!start) return age <= end;
+        else if (!end) return age >= start;
+        return false;
+      });
+      obj.value = l.length;
+      data.push(obj);
+    }
+    return data;
+  }
+
+
   /**
    * 羽校总收入
    * 统计账单的 收入(类型为-1/-2) - 退款(至余额,2) 且 is_pay 为 1

+ 5 - 1
app/z_router/statistics.js

@@ -6,7 +6,11 @@ const routerRegister = require(regPath);
 const rkey = 'statistics';
 const ckey = 'statistics';
 const keyZh = '统计';
-const routes = [{ method: 'get', path: `${rkey}/schoolTotalIn`, controller: `${ckey}.schoolTotalIn`, name: `${ckey}schoolTotalIn`, zh: `${keyZh}-羽校总收入` }];
+const routes = [
+  { method: 'get', path: `${rkey}/schoolSignCoach`, controller: `${ckey}.schoolSignCoach`, name: `${ckey}schoolSignCoach`, zh: `${keyZh}-羽校,教练出勤率` },
+  { method: 'get', path: `${rkey}/schoolStudentAge`, controller: `${ckey}.schoolStudentAge`, name: `${ckey}schoolStudentAge`, zh: `${keyZh}-羽校,学员区间` },
+  { method: 'get', path: `${rkey}/schoolTotalIn`, controller: `${ckey}.schoolTotalIn`, name: `${ckey}schoolTotalIn`, zh: `${keyZh}-羽校总收入` },
+];
 
 module.exports = app => {
   routerRegister(app, routes, keyZh, rkey, ckey);