util.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. 'use strict';
  2. const _ = require('lodash');
  3. const moment = require('moment');
  4. const { CrudService } = require('naf-framework-mongoose/lib/service');
  5. const { ObjectId } = require('mongoose').Types;
  6. const fs = require('fs');
  7. class UtilService extends CrudService {
  8. constructor(ctx) {
  9. super(ctx);
  10. this.mq = this.ctx.mq;
  11. }
  12. async utilMethod(query, body) {
  13. const path = 'C:\\Users\\liuruifeng\\Desktop\\temp\\organization.json';
  14. let text = await fs.readFileSync(path, { encoding: 'utf-8' });
  15. text = JSON.parse(text);
  16. for (const i of text) {
  17. i.passwd = _.cloneDeep(i.password);
  18. delete i.password;
  19. }
  20. await fs.writeFileSync('C:\\Users\\liuruifeng\\Desktop\\temp\\no.json', JSON.stringify(text));
  21. // const path = 'C:\\Users\\liuruifeng\\Desktop\\temp\\expert.json';
  22. // let text = await fs.readFileSync(path, { encoding: 'utf-8' });
  23. // text = JSON.parse(text);
  24. // const ids = text.map(i => i.user_id.$oid);
  25. // const users = await this.ctx.model.Personal.find({ _id: ids }, '+password');
  26. // for (const i of text) {
  27. // const r = users.find(f => ObjectId(f._id).equals(i.user_id.$oid));
  28. // if (r) {
  29. // const { addr, office_phone, profession, name, phone } = r;
  30. // if (name)i.name = name;
  31. // if (phone)i.phone = phone;
  32. // if (addr)i.addr = addr;
  33. // if (office_phone)i.office_phone = office_phone;
  34. // if (profession)i.profession = profession;
  35. // }
  36. // const { img_path } = i;
  37. // const arr = [];
  38. // if (_.isString(img_path)) {
  39. // arr.push({ name: 'icon', url: img_path });
  40. // }
  41. // i.img_path = arr;
  42. // delete i.user_id;
  43. // }
  44. // await fs.writeFileSync('C:\\Users\\liuruifeng\\Desktop\\temp\\new-expert.json', JSON.stringify(text));
  45. // for (const obj of text) {
  46. // obj.channel_id = { $oid: obj.channel_id };
  47. // }
  48. // const path = 'C:\\Users\\liuruifeng\\Desktop\\temp\\export\\dock.json';
  49. // let text = await fs.readFileSync(path, { encoding: 'utf-8' });
  50. // text = JSON.parse(text);
  51. // const dockArr = [];
  52. // const dockUser = [];
  53. // for (const obj of text) {
  54. // const dock = _.pick(obj, [ '_id', 'room_id', 'password', 'title', 'start_time', 'end_time', 'province', 'place', 'adminuser', 'phone', 'sponsor', 'organizer', 'videodata', 'vipuser', 'desc', 'status' ]);
  55. // dockArr.push(dock);
  56. // const apply = _.get(obj, 'apply', []);
  57. // const { _id } = obj;
  58. // for (const a of apply) {
  59. // a.dock_id = _id;
  60. // a.user_id = { $oid: a.user_id };
  61. // dockUser.push(a);
  62. // }
  63. // }
  64. // // await fs.writeFileSync('C:\\Users\\liuruifeng\\Desktop\\temp\\export\\dock_data.json', JSON.stringify(dockArr));
  65. // const eupath = 'C:\\Users\\liuruifeng\\Desktop\\temp\\export\\expert,s_user.json';
  66. // let eutext = await fs.readFileSync(eupath, { encoding: 'utf-8' });
  67. // eutext = JSON.parse(eutext);
  68. // console.log(eutext.length);
  69. // for (const obj of text) {
  70. // if (_.isObject(obj.password)) continue;
  71. // const { password } = obj;
  72. // obj.password = { secret: password, mech: 'plain', createdAt: { $date: '2020-09-27T07:48:05.643Z' }, updatedAt: { $date: '2020-09-27T07:48:05.643Z' } };
  73. // }
  74. // await fs.writeFileSync('C:\\Users\\liuruifeng\\Desktop\\temp\\export\\role-5-rewrite.json', JSON.stringify(text));
  75. }
  76. dealQuery(query) {
  77. return this.turnFilter(this.turnDateRangeQuery(query));
  78. }
  79. /**
  80. * 将查询条件中模糊查询的标识转换成对应object
  81. * @param {Object} filter 查询条件
  82. */
  83. turnFilter(filter) {
  84. const str = /^%\S*%$/;
  85. const keys = Object.keys(filter);
  86. for (const key of keys) {
  87. const res = key.match(str);
  88. if (res) {
  89. const newKey = key.slice(1, key.length - 1);
  90. filter[newKey] = new RegExp(filter[key]);
  91. delete filter[key];
  92. }
  93. }
  94. return filter;
  95. }
  96. /**
  97. * 将时间转换成对应查询Object
  98. * @param {Object} filter 查询条件
  99. */
  100. turnDateRangeQuery(filter) {
  101. const keys = Object.keys(filter);
  102. for (const k of keys) {
  103. if (k.includes('@')) {
  104. const karr = k.split('@');
  105. // 因为是针对处理范围日期,所以必须只有,开始时间和结束时间
  106. if (karr.length === 2) {
  107. const type = karr[1];
  108. if (type === 'start') {
  109. filter[karr[0]] = {
  110. ..._.get(filter, karr[0], {}),
  111. $gte: filter[k],
  112. };
  113. } else {
  114. filter[karr[0]] = {
  115. ..._.get(filter, karr[0], {}),
  116. $lte: filter[k],
  117. };
  118. }
  119. delete filter[k];
  120. }
  121. }
  122. }
  123. return filter;
  124. }
  125. }
  126. module.exports = UtilService;