teacher.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. 'use strict';
  2. const assert = require('assert');
  3. const _ = require('lodash');
  4. const { CrudService } = require('naf-framework-mongoose/lib/service');
  5. const { BusinessError, ErrorCode } = require('naf-core').Error;
  6. class TeacherService extends CrudService {
  7. constructor(ctx) {
  8. super(ctx, 'teacher');
  9. this.model = this.ctx.model.Teacher;
  10. this.umodel = this.ctx.model.User;
  11. }
  12. // 创建教师用户
  13. async create(data) {
  14. const { name, password, phone, id_number } = data;
  15. assert(name, '姓名不能为空');
  16. assert(password, '密码不能为空');
  17. assert(phone, '手机号不能为空');
  18. assert(id_number, '身份证号不能为空');
  19. // 检查是否已经注册
  20. const teacher = await this.model.findOne({ id_number });
  21. if (teacher) {
  22. throw new BusinessError(ErrorCode.DATA_EXIST, '已经注册,无需重复注册');
  23. }
  24. // 插入数据时默认状态为0
  25. const newdata = { ...data, status: '0' };
  26. newdata.password = { secret: password };
  27. const entity = await this.model.create(newdata);
  28. return await this.fetch({ id: entity.id });
  29. }
  30. // 根据id删除教师信息
  31. async delete({ id }) {
  32. await this.model.findByIdAndDelete(id);
  33. return 'deleted';
  34. }
  35. // 根据状态删除教师信息
  36. async deleteByStatus({ status }) {
  37. const teacher = await this.model.findOne(status);
  38. this.model.deleteOne(teacher);
  39. return 'deleted';
  40. }
  41. // 根据id更新信息
  42. async update({ id }, data) {
  43. const teacher = await this.model.findById(id);
  44. if (data.name) {
  45. teacher.name = data.name;
  46. }
  47. if (data.phone) {
  48. teacher.phone = data.phone;
  49. }
  50. if (data.id_number) {
  51. teacher.id_number = data.id_number;
  52. }
  53. if (data.password) {
  54. teacher.password = { secret: data.password };
  55. }
  56. teacher.gender = data.gender;
  57. teacher.profession_number = data.profession_number;
  58. teacher.profession_number_file = data.profession_number_file;
  59. teacher.school_code = data.school_code;
  60. teacher.school_name = data.school_name;
  61. teacher.email = data.email;
  62. teacher.openid = data.openid;
  63. teacher.age = data.age;
  64. teacher.birthday = data.birthday;
  65. teacher.entry_time = data.entry_time;
  66. teacher.job = data.job;
  67. teacher.major = data.major;
  68. teacher.subid = data.subid;
  69. teacher.status = data.status;
  70. teacher.file_score = data.file_score;
  71. teacher.is_etiquette_teacher = data.is_etiquette_teacher;
  72. teacher.interview_score = data.interview_score;
  73. teacher.student_score = data.student_score;
  74. return await teacher.save();
  75. }
  76. // 根据参数查询信息
  77. async query({ skip, limit, ...number }) {
  78. const total = await this.model.find(number);
  79. const teacher = await this.model.find(number).skip(Number(skip)).limit(Number(limit));
  80. const result = { total, teacher };
  81. return result;
  82. }
  83. // 查询详情
  84. async fetchTeacher({ id }) {
  85. // 将文件拼到查询到的数据后
  86. return await this.model.findById(id, '+file');
  87. }
  88. async status(data) {
  89. const { teachersid, status, remark } = data;
  90. for (const teacherid of teachersid) {
  91. const teacher = await this.model.findById(teacherid);
  92. teacher.status = status;
  93. await teacher.save();
  94. let detail = '';
  95. if (status === '1') {
  96. detail = '您的账号身份已确认,请尽快登录账号上传课件资料附件';
  97. // 状态更新后创建教师用户
  98. const newdata = { name: teacher.name, mobile: teacher.phone, type: '3', uid: teacher.id };
  99. newdata.passwd = teacher.password;
  100. await this.umodel.create(newdata);
  101. } else if (status === '4') {
  102. detail = '您已通过审核被正式录入教师库';
  103. }
  104. const moment = require('moment');
  105. let date = new Date();
  106. date = moment(date).format('YYYY-MM-DD HH:mm:ss');
  107. await this.ctx.service.weixin.sendTemplateMsg(this.ctx.app.config.REVIEW_TEMPLATE_ID, teacher.openid, '您有一个新的通知', detail, date, remark);
  108. }
  109. }
  110. }
  111. module.exports = TeacherService;