12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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<typeof Achievement>;
- @Provide()
- export class AchievementService extends BaseService<modelType> {
- @InjectEntityModel(Achievement)
- model: modelType;
- @InjectEntityModel(Collection)
- cModel: ReturnModelType<typeof Collection>;
- @InjectEntityModel(User)
- uModel: ReturnModelType<typeof User>;
- // 成果列表
- 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 };
- }
- }
|