123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 'use strict';
- const _ = require('lodash');
- const moment = require('moment');
- const { CrudService } = require('naf-framework-mongoose/lib/service');
- const { ObjectId } = require('mongoose').Types;
- const { BusinessError, ErrorCode } = require('naf-core').Error;
- const fs = require('fs');
- class UtilService extends CrudService {
- constructor(ctx) {
- super(ctx);
- this.mq = this.ctx.mq;
- this.projectList = this.app.config.project;
- }
- async utilMethod(query, body) {}
- dealQuery(query) {
- return this.turnFilter(this.turnDateRangeQuery(query));
- }
- analyzeUrl() {
- const request = this.ctx.request;
- let { method, url } = request;
- method = _.lowerCase(method);
- if (url.includes('/api/m/site')) {
- // TODO 通过网站进来的,如果是GET方法=>计数;然后将site去掉
- url = url.replace('/site', '');
- }
- const nUrl = this.dealUrl(url);
- const res = { url: nUrl, method };
- // 处理body
- if (method === 'post' || method === 'delete') {
- res.body = this.ctx.request.body;
- }
- return res;
- }
- dealUrl(url) {
- let arr = url.split('/');
- // 前3个属于中间层入口,干掉,直接干掉
- arr = _.drop(arr, 3);
- // 取出项目
- const project = _.head(arr);
- const uri = `/${_.drop(arr, 1).join('/')}`;
- const prefix = this.projectList[project];
- if (!prefix) throw new BusinessError(ErrorCode.SERVICE_FAULT, '未设置该project');
- return `${prefix}${uri}`;
- }
- /**
- * 将查询条件中模糊查询的标识转换成对应object
- * @param {Object} filter 查询条件
- */
- turnFilter(filter) {
- const str = /^%\S*%$/;
- const keys = Object.keys(filter);
- for (const key of keys) {
- const res = key.match(str);
- if (res) {
- const newKey = key.slice(1, key.length - 1);
- filter[newKey] = new RegExp(filter[key]);
- delete filter[key];
- }
- }
- return filter;
- }
- /**
- * 将时间转换成对应查询Object
- * @param {Object} filter 查询条件
- */
- turnDateRangeQuery(filter) {
- const keys = Object.keys(filter);
- for (const k of keys) {
- if (k.includes('@')) {
- const karr = k.split('@');
- // 因为是针对处理范围日期,所以必须只有,开始时间和结束时间
- if (karr.length === 2) {
- const type = karr[1];
- if (type === 'start') {
- filter[karr[0]] = {
- ..._.get(filter, karr[0], {}),
- $gte: filter[k],
- };
- } else {
- filter[karr[0]] = {
- ..._.get(filter, karr[0], {}),
- $lte: filter[k],
- };
- }
- delete filter[k];
- }
- }
- }
- return filter;
- }
- }
- module.exports = UtilService;
|