questionnaire.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use strict';
  2. const assert = require('assert');
  3. const _ = require('lodash');
  4. const { ObjectId } = require('mongoose').Types;
  5. const { CrudService } = require('naf-framework-mongoose/lib/service');
  6. const { BusinessError, ErrorCode } = require('naf-core').Error;
  7. class QuestionnaireService extends CrudService {
  8. constructor(ctx) {
  9. super(ctx, 'qusetionnaire');
  10. this.questionnairemodel = this.ctx.model.Questionnaire;
  11. this.questionmodel = this.ctx.model.Question;
  12. }
  13. // 插入问卷
  14. async create(data) {
  15. const { name, num } = data;
  16. assert(name, '问卷名称不能为空');
  17. assert(num, '问卷序号不能为空');
  18. return await this.questionnairemodel.create(data);
  19. }
  20. // 根据id删除问卷
  21. async delete({ id }) {
  22. await this.questionnairemodel.findByIdAndDelete(id);
  23. return 'deleted';
  24. }
  25. // 根据id更新问卷信息
  26. async update({ id }, data) {
  27. const questionnaire = await this.questionnairemodel.findById(id);
  28. if (questionnaire.name) {
  29. questionnaire.name = data.name;
  30. }
  31. if (questionnaire.num) {
  32. questionnaire.num = data.num;
  33. }
  34. questionnaire.question = data.question;
  35. return await questionnaire.save();
  36. }
  37. // 查询
  38. async query({ skip, limit, ...num }) {
  39. return await this.model.find(num).skip(Number(skip)).limit(Number(limit));
  40. }
  41. // 查询详情
  42. async show({ id }) {
  43. const questionnaire = await this.questionnairemodel.findById(id);
  44. const questions = await questionnaire.question;
  45. const datas = [];
  46. // 根据问卷中保存的问卷题目id查询题目详情
  47. for (const code of questions) {
  48. const question = await this.questionmodel.findById(code.questionid);
  49. // 将查询出的题目放入一个数组中
  50. datas.push(question);
  51. }
  52. questionnaire.question = datas;
  53. // 将查询到的问卷id,名称,序号,查询到的问卷题目数组放到一个新的数据中
  54. const newdata = { id, name: questionnaire.name, num: questionnaire.num, question: datas };
  55. return newdata;
  56. }
  57. }
  58. module.exports = QuestionnaireService;