util.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. 'use strict';
  2. const _ = require('lodash');
  3. const moment = require('moment');
  4. const { CrudService } = require('naf-framework-mongoose/lib/service');
  5. class UtilService extends CrudService {
  6. constructor(ctx) {
  7. super(ctx);
  8. this.mq = this.ctx.mq;
  9. }
  10. async utilMethod(query, body) {
  11. const res = await this.ctx.model.Dock.aggregate([
  12. {
  13. $lookup: {
  14. from: 'dock_pw',
  15. localField: '_id',
  16. foreignField: 'dock_id',
  17. as: 'pw',
  18. },
  19. },
  20. ]);
  21. return res;
  22. }
  23. dealQuery(query) {
  24. return this.turnFilter(this.turnDateRangeQuery(query));
  25. }
  26. /**
  27. * 将查询条件中模糊查询的标识转换成对应object
  28. * @param {Object} filter 查询条件
  29. */
  30. turnFilter(filter) {
  31. const str = /^%\S*%$/;
  32. const keys = Object.keys(filter);
  33. for (const key of keys) {
  34. const res = key.match(str);
  35. if (res) {
  36. const newKey = key.slice(1, key.length - 1);
  37. filter[newKey] = new RegExp(filter[key]);
  38. delete filter[key];
  39. }
  40. }
  41. return filter;
  42. }
  43. /**
  44. * 将时间转换成对应查询Object
  45. * @param {Object} filter 查询条件
  46. */
  47. turnDateRangeQuery(filter) {
  48. const keys = Object.keys(filter);
  49. for (const k of keys) {
  50. if (k.includes('@')) {
  51. const karr = k.split('@');
  52. // 因为是针对处理范围日期,所以必须只有,开始时间和结束时间
  53. if (karr.length === 2) {
  54. const type = karr[1];
  55. if (type === 'start') {
  56. filter[karr[0]] = {
  57. ..._.get(filter, karr[0], {}),
  58. $gte: filter[k],
  59. };
  60. } else {
  61. filter[karr[0]] = {
  62. ..._.get(filter, karr[0], {}),
  63. $lte: filter[k],
  64. };
  65. }
  66. delete filter[k];
  67. }
  68. }
  69. }
  70. return filter;
  71. }
  72. }
  73. module.exports = UtilService;