|
@@ -0,0 +1,38 @@
|
|
|
+'use strict';
|
|
|
+const Subscription = require('egg').Subscription;
|
|
|
+const { ObjectId } = require('mongoose').Types;
|
|
|
+class ClearApply extends Subscription {
|
|
|
+
|
|
|
+ static get schedule() {
|
|
|
+ return {
|
|
|
+ interval: '1h',
|
|
|
+ type: '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();
|
|
|
+
|
|
|
+ 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;
|