'use strict'; const _ = require('lodash'); const moment = require('moment'); const { CrudService } = require('naf-framework-mongoose/lib/service'); const { ObjectId } = require('mongoose').Types; const fs = require('fs'); class UtilService extends CrudService { constructor(ctx) { super(ctx); this.mq = this.ctx.mq; } async utilMethod(query, body) { this.ctx.service.patent.patentearly.needWarning(); } dealQuery(filter, { skip, limit, sort, desc, projection } = {}) { // 处理排序 if (sort && _.isString(sort)) { sort = { [sort]: desc ? -1 : 1 }; } else if (sort && _.isArray(sort)) { sort = sort.map((f) => ({ [f]: desc ? -1 : 1 })).reduce((p, c) => ({ ...p, ...c }), {}); } const options = { skip, limit, sort, desc, projection }; filter = this.turnFilter(this.turnDateRangeQuery(filter)); return { filter, options }; } dealFilter(filter) { return this.turnFilter(this.turnDateRangeQuery(filter)); } /** * 将查询条件中模糊查询的标识转换成对应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') { if (filter[k] && filter[k] !== '') { filter[karr[0]] = { ..._.get(filter, karr[0], {}), $gte: filter[k], }; } } else { if (filter[k] && filter[k] !== '') { filter[karr[0]] = { ..._.get(filter, karr[0], {}), $lte: filter[k], }; } } delete filter[k]; } } } return filter; } } module.exports = UtilService;