瀏覽代碼

清除垃圾数据

lrf 1 年之前
父節點
當前提交
b17cbc0a47
共有 1 個文件被更改,包括 38 次插入0 次删除
  1. 38 0
      app/schedule/clearApply.js

+ 38 - 0
app/schedule/clearApply.js

@@ -0,0 +1,38 @@
+'use strict';
+const Subscription = require('egg').Subscription;
+const { ObjectId } = require('mongoose').Types;
+class ClearApply extends Subscription {
+  // 通过 schedule 属性来设置定时任务的执行间隔等配置
+  static get schedule() {
+    return {
+      interval: '1h', // 1 分钟间隔
+      type: 'worker', // 指定所有的 worker 都需要执行
+    };
+  }
+
+  // 执行函数:清除错误申请(没有学科或者期,教师的申请数据)
+  async subscribe() {
+    const settingModel = this.ctx.model.Setting;
+    const applyModel = this.ctx.model.Apply;
+    const trainModel = this.ctx.model.Trainplan;
+    const teacherModel = this.ctx.model.Teacher;
+    const subjectModel = this.ctx.model.Subject;
+    const defaultSetting = await settingModel.findOne();
+    // 查出默认数据
+    const tranPlan = await trainModel.findOne({ _id: defaultSetting.planid }).lean();
+    const allTeacher = await teacherModel.find({}).lean();
+    const allSubject = await subjectModel.find({}).lean();
+    // 分两步:1,期id分开:不在任何一个计划中的&在计划中的; 2. 在计划中的.查看科目和授课教师是否存在.日子过没过期
+    const termids = tranPlan.termnum.map(i => ObjectId(i._id).toString());
+    const startDate = `${tranPlan.year}-01-01`;
+    const endDate = `${tranPlan.year}-12-31`;
+    const thisYearPlan = await applyModel.find({ date: { $gte: startDate, $lte: endDate } }).lean();
+    const inTermPlans = thisYearPlan.filter(f => termids.includes(f.termid));
+    const notInTermPlans = thisYearPlan.filter(f => !termids.includes(f.termid));
+    const errorList = inTermPlans.filter(f => !(allTeacher.find(t => ObjectId(t._id).equals(f.teacherid)) && allSubject.find(s => ObjectId(s._id).equals(f.subid))));
+    const deleteIds = [ ...errorList.map(i => ObjectId(i._id).toString()), ...notInTermPlans.map(i => ObjectId(i._id).toString()) ];
+    await applyModel.deleteMany({ _id: deleteIds });
+  }
+}
+
+module.exports = ClearApply;