patentQuery.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. const _ = require('lodash');
  3. const findUserByCode = async (ctx, code) => {
  4. const { code: qcode } = ctx.query;
  5. const http = ctx.service.util.httpUtil;
  6. const basePrefix = ctx.app.config.httpPrefix.base;
  7. const res = await http.cget(`${basePrefix}/personal`, { code: code ? code : qcode });
  8. if (res) return res;
  9. };
  10. const findOrgByCode = async ctx => {
  11. const { code } = ctx.query;
  12. const http = ctx.service.util.httpUtil;
  13. const basePrefix = ctx.app.config.httpPrefix.base;
  14. const adminRes = await http.cget(`${basePrefix}/admin`, { code });
  15. if (!adminRes) return [];
  16. const ids = [];
  17. for (const r of adminRes) {
  18. const pr = await http.cget(`${basePrefix}/admin`, { role: '2', pid: r._id });
  19. const list = pr.map(i => i.code);
  20. ids.push(...list);
  21. }
  22. return ids;
  23. };
  24. const role2Search = async (ctx, code) => {
  25. // target:查询和 code有关的平台用户
  26. const res = await findUserByCode(ctx, code);
  27. const user_ids = res.map(i => i._id);
  28. return user_ids;
  29. };
  30. const role1Search = async ctx => {
  31. // target:查询和code有关的平台用户 和 与code有关的机构用户下的平台用户
  32. let res = [];
  33. // p1: 查询平台用户
  34. const p1 = await role2Search(ctx);
  35. res.push(...p1);
  36. // p2:和code有关的机构用户下的平台用户
  37. const orgCodes = await findOrgByCode(ctx);
  38. for (const code of orgCodes) {
  39. console.log(code);
  40. const l = await role2Search(ctx, code);
  41. res.push(...l);
  42. }
  43. res = _.uniq(res);
  44. return res;
  45. };
  46. module.exports = options => {
  47. return async function patentQuery(ctx, next) {
  48. console.log('function in patentquery middleware');
  49. const query = ctx.query;
  50. const { code, role, user_id } = query;
  51. if (code && role) {
  52. let res;
  53. if (role === '1') res = await role1Search(ctx);
  54. else if (role === '2') res = await role2Search(ctx);
  55. delete ctx.query.code;
  56. delete ctx.query.role;
  57. ctx.query.user_id = { $elemMatch: { user_id: { $in: res } } };
  58. } else if (user_id) {
  59. ctx.query.user_id = { $elemMatch: { user_id: { $in: [ user_id ] } } };
  60. }
  61. console.log(ctx.query.user_id);
  62. await next();
  63. };
  64. };