trainlive.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. 'use strict';
  2. const { CrudService } = require('naf-framework-mongoose/lib/service');
  3. const { BusinessError, ErrorCode } = require('naf-core').Error;
  4. const { ObjectId } = require('mongoose').Types;
  5. const assert = require('assert');
  6. const _ = require('lodash');
  7. // 培训问诊表
  8. class TrainliveService extends CrudService {
  9. constructor(ctx) {
  10. super(ctx, 'trainlive');
  11. this.model = this.ctx.model.Trainlive;
  12. }
  13. /**
  14. * 重写创建,room_id自动生成
  15. * @param {Object} body 数据
  16. */
  17. async create(body) {
  18. const last = await this.model.findOne().sort({ room_id: -1 });
  19. let room_id = '3001',
  20. password = '3001';
  21. if (last) {
  22. room_id = parseInt(_.get(last, 'room_id', '3000')) + 1;
  23. password = room_id;
  24. }
  25. body.room_id = room_id;
  26. body.password = password;
  27. return await this.model.create(body);
  28. }
  29. /**
  30. * 查询指定培训问诊的参会人员
  31. * @param {Object} {id} 培训问诊id
  32. */
  33. async userData({ id }) {
  34. const object = await this.model.findOne({ _id: ObjectId(id) }, 'user_data');
  35. if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
  36. return _.get(object, 'user_data');
  37. }
  38. /**
  39. * 培训问诊管理登陆
  40. * @param {Object} {room_id,password} 房间号,密码
  41. */
  42. async login({ room_id, password }) {
  43. const object = await this.model.findOne({ room_id });
  44. if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
  45. if (object.password !== password) throw new BusinessError(ErrorCode.BAD_PASSWORD, '密码错误!');
  46. return object;
  47. }
  48. /**
  49. * 为培训问诊添加参加用户
  50. * @param {Object} {id} 培训问诊的数据id
  51. * @param {Array} {users} 培训问诊的参加用户
  52. */
  53. async addUser({ id }, { users }) {
  54. const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
  55. if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
  56. object.user_data.push(...users);
  57. await object.save();
  58. }
  59. /**
  60. * 更改培训问诊下指定用户的数据
  61. * @param {Object} {id} 培训问诊的数据id
  62. * @param {Array} {users} 用户的数据
  63. */
  64. async updateUser({ id }, { users }) {
  65. const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
  66. if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
  67. for (const user of users) {
  68. const { _id, ...info } = user;
  69. if (_id) {
  70. // 存在_id,修改
  71. const oldData = object.user_data.id(ObjectId(_id));
  72. if (!oldData) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到培训问诊下指定的参会人员信息!');
  73. const keys = Object.keys(info);
  74. for (const key of keys) {
  75. oldData[key] = info[key];
  76. }
  77. }
  78. }
  79. await object.save();
  80. }
  81. /**
  82. *移除培训问诊下指定用户
  83. * @param {Object} {id} 培训问诊的数据id
  84. * @param {Object} {users} 用户的数据id集合
  85. */
  86. async deleteUser({ id }, { users }) {
  87. const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
  88. if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
  89. object.user_data = object.user_data.filter(f => !users.find(uf => ObjectId(uf).equals(f._id)));
  90. await object.save();
  91. }
  92. /**
  93. * 参会人员登陆
  94. * @param {Object} {id} 培训问诊的数据id
  95. * @param {Object} user 参会人员的信息,手机号和密码
  96. */
  97. async userLogin({ id }, { user_phone, user_password }) {
  98. assert(user_phone, '缺少登陆的参会人员 手机号');
  99. assert(user_password, '缺少登陆的参会人员 密码');
  100. const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
  101. if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
  102. const user = object.user_data.find(f => f.user_phone === user_phone);
  103. if (!user) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到培训问诊下该手机号的用户信息!');
  104. // const is_login = await this.app.redis.get(`trainlive/${user._id}`);
  105. const is_login = this.ctx.session[`trainlive/${user._id}`];
  106. if (is_login) throw new BusinessError(ErrorCode.BUSINESS, '用户已登录');
  107. if (user.user_password !== user_password) throw new BusinessError(ErrorCode.BAD_PASSWORD, '用户密码错误!');
  108. this.ctx.session[`trainlive/${user._id}`] = user;
  109. // await this.app.redis.set(`trainlive/${user._id}`, user);
  110. return user;
  111. }
  112. /**
  113. * 延长用户登陆时效
  114. * @param {Object} {id} 用户id
  115. */
  116. async userLonger({ id }) {
  117. const is_login = this.ctx.session[`trainlive/${id}`];
  118. if (!is_login) throw new BusinessError(ErrorCode.BUSINESS, '用户登陆已失效,请重新登陆');
  119. }
  120. /**
  121. * 参会人员注销
  122. * @param {String} {id} 参会人员id
  123. */
  124. async userLogout({ id }) {
  125. this.ctx.session[`trainlive/${id}`] = null;
  126. // await this.app.redis.del(`trainlive/${id}`);
  127. }
  128. }
  129. module.exports = TrainliveService;