|
@@ -16,19 +16,49 @@ class ScoreService extends CrudService {
|
|
|
|
|
|
async create(data) {
|
|
|
const { teacherid, score } = data;
|
|
|
+ const res = await this.model.create(data);
|
|
|
+ this.computedScore({ teacherid });
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ async update({ id, score }) {
|
|
|
+ const r = await this.model.findById(id);
|
|
|
+ if (r) {
|
|
|
+ // 修改分数,重置状态,下面重新计算
|
|
|
+ r.score = score;
|
|
|
+ await r.save();
|
|
|
+ }
|
|
|
+ this.computedScore({ teacherid: r.teacherid });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据教师id计算教师分数
|
|
|
+ async computedScore({ teacherid }) {
|
|
|
+ assert(teacherid, '没有教师信息,无法计算分数');
|
|
|
const teacher = await this.tmodel.findById(teacherid);
|
|
|
- let newscore;
|
|
|
- if (!teacher.xsscore) {
|
|
|
- newscore = score;
|
|
|
+ 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, 'studentid');
|
|
|
+ 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 {
|
|
|
- const xsscore = teacher.xsscore;
|
|
|
- const number = await this.model.count({ teacherid });
|
|
|
- newscore = (Number(xsscore) * number + Number(score)) / (number + 1);
|
|
|
-
|
|
|
+ score = _.round(_.divide(stuScoreTotal * 1, teaScoreList.length), 2);
|
|
|
}
|
|
|
- teacher.xsscore = newscore;
|
|
|
+ teacher.xsscore = score;
|
|
|
await teacher.save();
|
|
|
- return await this.model.create(data);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|