123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 'use strict';
- const { CrudService } = require('naf-framework-mongoose/lib/service');
- const { BusinessError, ErrorCode } = require('naf-core').Error;
- const { ObjectId } = require('mongoose').Types;
- const assert = require('assert');
- const _ = require('lodash');
- const jwt = require('jsonwebtoken');
- // 培训问诊表
- class TrainliveService extends CrudService {
- constructor(ctx) {
- super(ctx, 'trainlive');
- this.model = this.ctx.model.TrainLive;
- }
- /**
- * 重写创建,room_id自动生成
- * @param {Object} body 数据
- */
- async create(body) {
- const last = await this.model.findOne().sort({ room_id: -1 });
- let room_id = '3001',
- password = '3001';
- if (last) {
- room_id = parseInt(_.get(last, 'room_id', '3000')) + 1;
- password = room_id;
- }
- body.room_id = room_id;
- body.password = password;
- return await this.model.create(body);
- }
- /**
- * 查询指定培训问诊的参会人员
- * @param {Object} {id} 培训问诊id
- */
- async userData({ id }) {
- const object = await this.model.findOne({ _id: ObjectId(id) }, 'user_data');
- if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
- return _.get(object, 'user_data');
- }
- /**
- * 培训问诊管理登陆
- * @param {Object} {room_id,password} 房间号,密码
- */
- async login({ room_id, password }) {
- const object = await this.model.findOne({ room_id });
- if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
- if (object.password !== password) throw new BusinessError(ErrorCode.BAD_PASSWORD, '密码错误!');
- const data = _.omit(JSON.parse(JSON.stringify(object)), [ 'meta', 'passwd', '__v' ]);
- const { secret: jwts } = this.config.jwt;
- const token = jwt.sign(data, jwts);
- return token;
- }
- /**
- * 为培训问诊添加参加用户
- * @param {Object} {id} 培训问诊的数据id
- * @param {Array} {users} 培训问诊的参加用户
- */
- async addUser({ id }, { users }) {
- const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
- if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
- object.user_data.push(...users);
- await object.save();
- }
- /**
- * 更改培训问诊下指定用户的数据
- * @param {Object} {id} 培训问诊的数据id
- * @param {Array} {users} 用户的数据
- */
- async updateUser({ id }, { users }) {
- const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
- if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
- for (const user of users) {
- const { _id, ...info } = user;
- if (_id) {
- // 存在_id,修改
- const oldData = object.user_data.id(ObjectId(_id));
- if (!oldData) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到培训问诊下指定的参会人员信息!');
- const keys = Object.keys(info);
- for (const key of keys) {
- oldData[key] = info[key];
- }
- }
- }
- await object.save();
- }
- /**
- *移除培训问诊下指定用户
- * @param {Object} {id} 培训问诊的数据id
- * @param {Object} {users} 用户的数据id集合
- */
- async deleteUser({ id }, { users }) {
- const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
- if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
- object.user_data = object.user_data.filter(f => !users.find(uf => ObjectId(uf).equals(f._id)));
- await object.save();
- }
- /**
- * 参会人员登陆
- * @param {Object} {id} 培训问诊的数据id
- * @param {Object} user 参会人员的信息,手机号和密码
- */
- async userLogin({ id }, { user_phone, user_password }) {
- assert(user_phone, '缺少登陆的参会人员 手机号');
- assert(user_password, '缺少登陆的参会人员 密码');
- const object = await this.model.findOne({ _id: ObjectId(id) }, '+ user_data');
- if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定的培训问诊信息!');
- const user = object.user_data.find(f => f.user_phone === user_phone);
- if (!user) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到培训问诊下该手机号的用户信息!');
- const is_login = this.ctx.session[`trainlive/${user._id}`];
- if (is_login) throw new BusinessError(ErrorCode.BUSINESS, '用户已登录');
- if (user.user_password !== user_password) throw new BusinessError(ErrorCode.BAD_PASSWORD, '用户密码错误!');
- this.ctx.session[`trainlive/${user._id}`] = user;
- const { secret: jwts } = this.config.jwt;
- const token = jwt.sign(JSON.parse(JSON.stringify(user)), jwts);
- return token;
- }
- /**
- * 延长用户登陆时效
- * @param {Object} {id} 用户id
- */
- async userLonger({ id }) {
- const is_login = this.ctx.session[`trainlive/${id}`];
- if (!is_login) throw new BusinessError(ErrorCode.BUSINESS, '用户登陆已失效,请重新登陆');
- }
- /**
- * 参会人员注销
- * @param {String} {id} 参会人员id
- */
- async userLogout({ id }) {
- this.ctx.session[`trainlive/${id}`] = null;
- }
- }
- module.exports = TrainliveService;
|