questionnaire.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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, type } = data;
  16. assert(name, '问卷名称不能为空');
  17. assert(num, '问卷序号不能为空');
  18. assert(type, '问卷类型不能为空');
  19. return await this.questionnairemodel.create(data);
  20. }
  21. // 根据id删除问卷
  22. async delete({ id }) {
  23. await this.questionnairemodel.findByIdAndDelete(id);
  24. return 'deleted';
  25. }
  26. // 根据id更新问卷信息
  27. async update({ id }, data) {
  28. const { name, num, type, question } = data;
  29. const questionnaire = await this.questionnairemodel.findById(id);
  30. if (name) {
  31. questionnaire.name = name;
  32. }
  33. if (num) {
  34. questionnaire.num = num;
  35. }
  36. if (type) {
  37. questionnaire.type = type;
  38. }
  39. if (question) {
  40. questionnaire.question = question;
  41. }
  42. return await questionnaire.save();
  43. }
  44. // 查询
  45. async query({ skip, limit, ...num }) {
  46. const total = await (await this.questionnairemodel.find(num)).length;
  47. const data = await this.questionnairemodel.find(num).skip(Number(skip)).limit(Number(limit));
  48. const result = { total, data };
  49. return result;
  50. }
  51. // 查询详情
  52. async show({ id }) {
  53. const questionnaire = await this.questionnairemodel.findById(id);
  54. const questions = await questionnaire.question;
  55. const datas = [];
  56. // 根据问卷中保存的问卷题目id查询题目详情
  57. for (const code of questions) {
  58. const question = await this.questionmodel.findById(code);
  59. // 将查询出的题目放入一个数组中
  60. datas.push(question);
  61. }
  62. questionnaire.question = datas;
  63. // 将查询到的问卷id,名称,序号,查询到的问卷题目数组放到一个新的数据中
  64. const newdata = { id, name: questionnaire.name, num: questionnaire.num, type: questionnaire.type, question: datas };
  65. return newdata;
  66. }
  67. }
  68. module.exports = QuestionnaireService;