1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 'use strict';
- const { CrudService } = require('naf-framework-mongoose-free/lib/service');
- const { BusinessError, ErrorCode } = require('naf-core').Error;
- const _ = require('lodash');
- const assert = require('assert');
- //
- class TryLessonApplyService extends CrudService {
- constructor(ctx) {
- super(ctx, 'trylessonapply');
- this.model = this.ctx.model.Apply.TryLessonApply;
- this.lessonStudentService = this.ctx.service.business.lessonStudent;
- }
- // 检查该学员是否可以报该节课
- async checkCanUse({ school_id, lesson_id, student_id }) {
- // 先检查是否用过试听机会
- let num = await this.model.count({ school_id, student_id, result: '1' });
- if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '您已试听过课程,无法再次申请');
- // 该学校,该节课,这名学员. 申请试听的申请状态为 未审核或审核通过时
- num = await this.model.count({ school_id, lesson_id, student_id, result: '0' });
- if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '本节课的试听申请在审核中,无法重复申请');
- num = await this.model.count({ school_id, lesson_id, student_id, result: '1' });
- if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '本节课的试听申请已通过,无法重复申请');
- return true;
- }
- async beforeCreate(body) {
- const { school_id, lesson_id, student_id } = body;
- await this.checkCanUse({ school_id, lesson_id, student_id });
- return body;
- }
- async beforeUpdate(filter, update) {
- // 不是 审核通过的情况就不需要继续检查是否使用过试听名额了
- if (update.result !== '1') return { filter, update };
- const data = await this.model.findById(filter.id);
- if (!data) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到数据');
- const { school_id, student_id } = data;
- const num = await this.model.count({ school_id, student_id, result: '1' });
- if (num > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '该学员已经在本校试听过课程,无法重复申请');
- return { filter, update };
- }
- // 处理审核成功的情况
- async afterUpdate(filter, body, data) {
- const { result } = data;
- // 审核不通过, 不处理
- if (result !== '1') return data;
- // 通过,则需要在 lessonStudent中添加数据
- const obj = _.pick(data, [ 'school_id', 'lesson_id', 'student_id' ]);
- obj.is_try = '1';
- await this.lessonStudentService.create(obj);
- return data;
- }
- }
- module.exports = TryLessonApplyService;
|