'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;