|
@@ -17,54 +17,60 @@ class ExpertService extends CrudService {
|
|
|
const query = {};
|
|
|
if (code) query.code = code;
|
|
|
if (status) query['expert.status'] = status;
|
|
|
- if (name)query.name = name;
|
|
|
+ if (name) query.name = name;
|
|
|
if (phone) query.phone = phone;
|
|
|
if (company) {
|
|
|
- if (company === '中科系') query['expert.company'] = { $in: [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所' ] };
|
|
|
- else if (company === '其他')query['expert.company'] = { $nin: [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所', '吉林大学', '长春工业大学' ] };
|
|
|
- else query['expert.company'] = company;
|
|
|
+ if (company === '中科系') {
|
|
|
+ query['expert.company'] = { $in: [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所' ] };
|
|
|
+ } else if (company === '其他') {
|
|
|
+ query['expert.company'] = {
|
|
|
+ $nin: [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所', '吉林大学', '长春工业大学' ],
|
|
|
+ };
|
|
|
+ } else query['expert.company'] = company;
|
|
|
}
|
|
|
- // 因为聚合管道要兼容使用limit,所以当不传limit时,可能需要所有数据,要手动查出limit
|
|
|
- if (!limit) limit = await this.model.count();
|
|
|
- const aggArr = [
|
|
|
- { $match: { is_expert: true } },
|
|
|
- { $project: { name: 1, phone: 1, email: 1, code: 1, expert: 1 } },
|
|
|
- {
|
|
|
- $lookup: {
|
|
|
- from: 'expert',
|
|
|
- localField: '_id',
|
|
|
- foreignField: 'user_id',
|
|
|
- as: 'expert',
|
|
|
- },
|
|
|
- },
|
|
|
- { $unwind: '$expert' },
|
|
|
- { $match: query },
|
|
|
- ];
|
|
|
- const dataAggArr = _.cloneDeep(aggArr);
|
|
|
- if (skip) dataAggArr.push({ $skip: parseInt(skip) });
|
|
|
- if (limit > 0) dataAggArr.push({ $limit: parseInt(limit) });
|
|
|
- let data = await this.personal.aggregate(dataAggArr);
|
|
|
- data = data.map(i => {
|
|
|
- const { expert, ...info } = _.omit(i, [ '_id' ]);
|
|
|
- const object = { ...expert, ...info };
|
|
|
- return object;
|
|
|
- });
|
|
|
- const totalSearch = await this.personal.aggregate(aggArr);
|
|
|
+ const data = await this.model.find(query).skip(parseInt(skip)).limit(parseInt(limit));
|
|
|
+ const total = await this.model.count(query);
|
|
|
+ // // 因为聚合管道要兼容使用limit,所以当不传limit时,可能需要所有数据,要手动查出limit
|
|
|
+ // if (!limit) limit = await this.model.count();
|
|
|
+ // const aggArr = [
|
|
|
+ // { $match: { is_expert: true } },
|
|
|
+ // { $project: { name: 1, phone: 1, email: 1, code: 1, expert: 1 } },
|
|
|
+ // {
|
|
|
+ // $lookup: {
|
|
|
+ // from: 'expert',
|
|
|
+ // localField: '_id',
|
|
|
+ // foreignField: 'user_id',
|
|
|
+ // as: 'expert',
|
|
|
+ // },
|
|
|
+ // },
|
|
|
+ // { $unwind: '$expert' },
|
|
|
+ // { $match: query },
|
|
|
+ // ];
|
|
|
+ // const dataAggArr = _.cloneDeep(aggArr);
|
|
|
+ // if (skip) dataAggArr.push({ $skip: parseInt(skip) });
|
|
|
+ // if (limit > 0) dataAggArr.push({ $limit: parseInt(limit) });
|
|
|
+ // let data = await this.personal.aggregate(dataAggArr);
|
|
|
+ // data = data.map(i => {
|
|
|
+ // const { expert, ...info } = _.omit(i, [ '_id' ]);
|
|
|
+ // const object = { ...expert, ...info };
|
|
|
+ // return object;
|
|
|
+ // });
|
|
|
+ // const totalSearch = await this.personal.aggregate(aggArr);
|
|
|
|
|
|
- const total = _.get(_.head(totalSearch), 'total', 0);
|
|
|
+ // const total = _.get(_.head(totalSearch), 'total', 0);
|
|
|
return { data, total };
|
|
|
}
|
|
|
|
|
|
- async fetch({ user_id }) {
|
|
|
- const personal = await this.personal.findById(user_id, 'name phone email code');
|
|
|
- if (!personal) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到个人用户部分信息');
|
|
|
- let expert = await this.model.findOne({ user_id });
|
|
|
- if (!expert) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到专家部分信息');
|
|
|
- expert = JSON.parse(JSON.stringify(expert));
|
|
|
- const pinfo = _.omit(JSON.parse(JSON.stringify(personal)), [ '_id' ]);
|
|
|
- expert = { ...pinfo, ...expert };
|
|
|
- return expert;
|
|
|
- }
|
|
|
+ // async fetch({ user_id }) {
|
|
|
+ // const personal = await this.personal.findById(user_id, 'name phone email code');
|
|
|
+ // if (!personal) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到个人用户部分信息');
|
|
|
+ // let expert = await this.model.findOne({ user_id });
|
|
|
+ // if (!expert) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到专家部分信息');
|
|
|
+ // expert = JSON.parse(JSON.stringify(expert));
|
|
|
+ // const pinfo = _.omit(JSON.parse(JSON.stringify(personal)), [ '_id' ]);
|
|
|
+ // expert = { ...pinfo, ...expert };
|
|
|
+ // return expert;
|
|
|
+ // }
|
|
|
|
|
|
/**
|
|
|
* 创建用户
|
|
@@ -85,6 +91,40 @@ class ExpertService extends CrudService {
|
|
|
object.isdel = '1';
|
|
|
await object.save();
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改密码
|
|
|
+ * @param {Object} {id,password} 用户id和密码
|
|
|
+ */
|
|
|
+ async password({ id, password }) {
|
|
|
+ const object = await this.model.findById(id);
|
|
|
+ if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到用户的信息');
|
|
|
+ object.password = { secret: password };
|
|
|
+ await object.save();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 登陆
|
|
|
+ * @param {Object} params 登陆信息
|
|
|
+ * @property phone 手机号
|
|
|
+ * @property password 密码
|
|
|
+ */
|
|
|
+ async login({ phone, password, code }) {
|
|
|
+ const object = await this.model.findOne({ phone, isdel: '0' }, '+password');
|
|
|
+ if (!object) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到用户的信息');
|
|
|
+ const { password: op, status } = object;
|
|
|
+ const { secret } = op;
|
|
|
+ if (status !== '1') throw new BusinessError(ErrorCode.ACCESS_DENIED, '拒绝访问!');
|
|
|
+ if (secret !== password) throw new BusinessError(ErrorCode.BAD_PASSWORD, '密码错误');
|
|
|
+ const data = _.omit(JSON.parse(JSON.stringify(object)), [ 'meta', 'password', '__v' ]);
|
|
|
+ const { secret: secrets } = this.config.jwt;
|
|
|
+ const token = jwt.sign(data, secrets);
|
|
|
+ // 记录登陆
|
|
|
+ // let number = await this.redis.get('login_number') || 0;
|
|
|
+ // number++;
|
|
|
+ // await this.redis.set('login_number', number);
|
|
|
+ return token;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
module.exports = ExpertService;
|