patentQuery.js 2.1 KB

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