lrf402788946 3 роки тому
батько
коміт
b3714a2390
1 змінених файлів з 77 додано та 75 видалено
  1. 77 75
      app/service/score.js

+ 77 - 75
app/service/score.js

@@ -1,75 +1,77 @@
-'use strict';
-
-
-const assert = require('assert');
-const _ = require('lodash');
-const { ObjectId } = require('mongoose').Types;
-const { CrudService } = require('naf-framework-mongoose/lib/service');
-const { BusinessError, ErrorCode } = require('naf-core').Error;
-
-class ScoreService extends CrudService {
-  constructor(ctx) {
-    super(ctx, 'score');
-    this.model = this.ctx.model.Score;
-    this.tmodel = this.ctx.model.Teacher;
-  }
-
-  async create(data) {
-    const { lessonid, stuid, teacherid, score, remark } = data;
-    let res = await this.model.findOne({ stuid, lessonid, teacherid });
-    if (res) {
-      if (score) res.score = score;
-      if (remark)res.remark = remark;
-      res = await res.save();
-    } else {
-      res = await this.model.create(data);
-    }
-    // const res = await this.model.create(data);
-    this.computedScore({ teacherid });
-    return res;
-  }
-
-
-  async update({ id, score, remark }) {
-    const r = await this.model.findById(id);
-    if (r) {
-      // 修改分数,重置状态,下面重新计算
-      r.score = score;
-      r.remark = remark;
-      await r.save();
-    }
-    this.computedScore({ teacherid: r.teacherid });
-  }
-
-  // 根据教师id计算教师分数
-  async computedScore({ teacherid }) {
-    assert(teacherid, '没有教师信息,无法计算分数');
-    const teacher = await this.tmodel.findById(teacherid);
-    if (!teacher) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '没有找到教师信息');
-    const { beforescore } = teacher;
-    let teaScoreList = await this.model.find({ teacherid });
-    // 判断有没有学生给评分
-    if (teaScoreList.length <= 0) return;
-    teaScoreList = teaScoreList.map(i => {
-      i.score = i.score * 1;
-      return i;
-    });
-    teaScoreList = _.uniqBy(teaScoreList, 'stuid');
-    teaScoreList = _.orderBy(teaScoreList, [ 'score' ], [ 'desc' ]);
-    teaScoreList = _.drop(teaScoreList);
-    teaScoreList = _.dropRight(teaScoreList);
-    const stuScoreTotal = teaScoreList.reduce((p, n) => p + (n.score * 1 || 0), 0);
-    let score = 0;
-    if (beforescore) {
-      score = _.round(_.divide(beforescore * 1 + stuScoreTotal * 1, (teaScoreList.length || 0) + 1), 2);
-    } else {
-      score = _.round(_.divide(stuScoreTotal * 1, teaScoreList.length), 2);
-    }
-    teacher.xsscore = score;
-    await teacher.save();
-
-  }
-
-}
-
-module.exports = ScoreService;
+'use strict';
+
+
+const assert = require('assert');
+const _ = require('lodash');
+const { ObjectId } = require('mongoose').Types;
+const { CrudService } = require('naf-framework-mongoose/lib/service');
+const { BusinessError, ErrorCode } = require('naf-core').Error;
+
+class ScoreService extends CrudService {
+  constructor(ctx) {
+    super(ctx, 'score');
+    this.model = this.ctx.model.Score;
+    this.tmodel = this.ctx.model.Teacher;
+  }
+
+  async create(data) {
+    const { lessonid, stuid, teacherid, score, remark } = data;
+    let res = await this.model.findOne({ stuid, lessonid, teacherid });
+    if (res) {
+      if (score) res.score = score;
+      if (remark)res.remark = remark;
+      res = await res.save();
+    } else {
+      res = await this.model.create(data);
+    }
+    // const res = await this.model.create(data);
+    this.computedScore({ teacherid });
+    return res;
+  }
+
+
+  async update({ id, score, remark }) {
+    const r = await this.model.findById(id);
+    if (r) {
+      // 修改分数,重置状态,下面重新计算
+      r.score = score;
+      r.remark = remark;
+      await r.save();
+    }
+    this.computedScore({ teacherid: r.teacherid });
+  }
+
+  // 根据教师id计算教师分数
+  async computedScore({ teacherid }) {
+    assert(teacherid, '没有教师信息,无法计算分数');
+    const teacher = await this.tmodel.findById(teacherid);
+    if (!teacher) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '没有找到教师信息');
+    const { beforescore } = teacher;
+    let teaScoreList = await this.model.find({ teacherid });
+    // 判断有没有学生给评分
+    if (teaScoreList.length <= 0) return;
+    teaScoreList = teaScoreList.map(i => {
+      i.score = i.score * 1;
+      return i;
+    });
+    // 2021-06-04修改:过滤6分以下的恶意评分
+    teaScoreList = teaScoreList.filter(f => f.score > 6);
+    teaScoreList = _.uniqBy(teaScoreList, 'stuid');
+    teaScoreList = _.orderBy(teaScoreList, [ 'score' ], [ 'desc' ]);
+    teaScoreList = _.drop(teaScoreList);
+    teaScoreList = _.dropRight(teaScoreList);
+    const stuScoreTotal = teaScoreList.reduce((p, n) => p + (n.score * 1 || 0), 0);
+    let score = 0;
+    if (beforescore) {
+      score = _.round(_.divide(beforescore * 1 + stuScoreTotal * 1, (teaScoreList.length || 0) + 1), 2);
+    } else {
+      score = _.round(_.divide(stuScoreTotal * 1, teaScoreList.length), 2);
+    }
+    teacher.xsscore = score;
+    await teacher.save();
+
+  }
+
+}
+
+module.exports = ScoreService;