import { Provide } from '@midwayjs/decorator'; import { InjectEntityModel } from '@midwayjs/typegoose'; import { ReturnModelType } from '@typegoose/typegoose'; import { BaseService } from 'free-midway-component'; import { Achievement } from '../../entity/platform/achievement.entity'; import { Collection } from '../../entity/platform/collection.entity'; import { User } from '../../entity/system/user.entity'; import { get } from 'lodash'; type modelType = ReturnModelType; @Provide() export class AchievementService extends BaseService { @InjectEntityModel(Achievement) model: modelType; @InjectEntityModel(Collection) cModel: ReturnModelType; @InjectEntityModel(User) uModel: ReturnModelType; // 成果列表 async list(query) { const { skip = 0, limit = 0, is_use, status, ...condition } = query; const { one, two, thr, four, five, six } = condition; const info: any = { is_use, status }; if (one) info.technology = { $in: one }; if (two) info.field = { $in: two }; if (thr) info.mature = { $in: thr }; if (four) info.sell = { $in: four }; if (five) { if (five === '1') info.money = '面议'; if (five === '2') info.money = { $gte: '1', $lte: '10' }; if (five === '3') info.money = { $gte: '10', $lte: '20' }; if (five === '4') info.money = { $gte: '20', $lte: '100' }; if (five === '5') info.money = { $gte: '100', $lte: '500' }; if (five === '6') info.money = { $gte: '500', $lte: '1000' }; if (five === '7') info.money = { $gte: '1000' }; } if (six) info.area = { $in: six }; const data = await this.model.find(info).skip(skip).limit(limit).lean(); for (const val of data) { if (get(val, 'user')) { // 查询成果发布者 const userData = await this.uModel.findById(val.user).lean(); if (userData) Object.assign(val, { userName: userData.nick_name }); } } const total = await this.model.count(info); return { data, total }; } // 成果详情 async detail(id) { const user = this.ctx.user; const data = { userInfo: {}, is_collection: false }; const arr = await this.model.findById(id).lean(); if (arr && get(arr, 'user')) { // 查询成果发布者 const userData = await this.uModel.findById(arr.user).lean(); if (userData) data.userInfo = { name: userData.nick_name || '', phone: userData.phone || '' }; } if (arr && get(arr, '_id')) { if (user && user._id) { // 查询是否收藏该成果 const collection = await this.cModel.findOne({ user: user._id, source: arr._id }).lean(); if (collection) data.is_collection = true; } } return { ...arr, ...data }; } }