tryLessonApply.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. 'use strict';
  2. const { CrudService } = require('naf-framework-mongoose-free/lib/service');
  3. const { BusinessError, ErrorCode } = require('naf-core').Error;
  4. const _ = require('lodash');
  5. const assert = require('assert');
  6. //
  7. class TryLessonApplyService extends CrudService {
  8. constructor(ctx) {
  9. super(ctx, 'trylessonapply');
  10. this.model = this.ctx.model.Apply.TryLessonApply;
  11. this.lessonStudentService = this.ctx.service.business.lessonStudent;
  12. }
  13. // 检查该学员是否可以报该节课
  14. async checkCanUse({ school_id, lesson_id, student_id }) {
  15. // 先检查是否用过试听机会
  16. let num = await this.model.count({ school_id, student_id, result: '1' });
  17. if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '您已试听过课程,无法再次申请');
  18. // 该学校,该节课,这名学员. 申请试听的申请状态为 未审核或审核通过时
  19. num = await this.model.count({ school_id, lesson_id, student_id, result: '0' });
  20. if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '本节课的试听申请在审核中,无法重复申请');
  21. num = await this.model.count({ school_id, lesson_id, student_id, result: '1' });
  22. if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '本节课的试听申请已通过,无法重复申请');
  23. return true;
  24. }
  25. async beforeCreate(body) {
  26. const { school_id, lesson_id, student_id } = body;
  27. await this.checkCanUse({ school_id, lesson_id, student_id });
  28. return body;
  29. }
  30. async beforeUpdate(filter, update) {
  31. // 不是 审核通过的情况就不需要继续检查是否使用过试听名额了
  32. if (update.result !== '1') return { filter, update };
  33. const data = await this.model.findById(filter.id);
  34. if (!data) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到数据');
  35. const { school_id, student_id } = data;
  36. const num = await this.model.count({ school_id, student_id, result: '1' });
  37. if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '该学员已经在本校试听过课程,无法重复申请');
  38. return { filter, update };
  39. }
  40. // 处理审核成功的情况
  41. async afterUpdate(filter, body, data) {
  42. const { result } = data;
  43. // 审核不通过, 不处理
  44. if (result !== '1') return data;
  45. // 通过,则需要在 lessonStudent中添加数据
  46. const obj = _.pick(data, [ 'school_id', 'lesson_id', 'student_id' ]);
  47. obj.is_try = '1';
  48. await this.lessonStudentService.create(obj);
  49. return data;
  50. }
  51. }
  52. module.exports = TryLessonApplyService;