lrf402788946 пре 4 година
родитељ
комит
9b3889aa1a
1 измењених фајлова са 89 додато и 89 уклоњено
  1. 89 89
      app/service/users/product.js

+ 89 - 89
app/service/users/product.js

@@ -1,89 +1,89 @@
-'use strict';
-const { CrudService } = require('naf-framework-mongoose/lib/service');
-const { ObjectId } = require('mongoose').Types;
-// 产品
-class ProductService extends CrudService {
-  constructor(ctx) {
-    super(ctx, 'product');
-    this.model = this.ctx.model.Product;
-    this.patent = this.ctx.model.Patent;
-    this.roadShow = this.ctx.model.RoadShow;
-    this.personal = this.ctx.model.Personal;
-    this.expert = this.ctx.model.Expert;
-    this.organization = this.ctx.model.Organization;
-  }
-  async query({ skip = 0, limit = 0, ...query } = {}) {
-    if (query.name) {
-      query['%name%'] = query.name;
-      delete query.name;
-    }
-    query = this.ctx.service.util.util.dealQuery(query);
-    const { code, company, ...oq } = query;
-    let res = [];
-    let total = 0;
-    if (!code) {
-      if (!company) {
-        res = await this.model.find(query).skip(parseInt(skip)).limit(parseInt(limit));
-        total = await this.model.count(query);
-      } else {
-      // 处理company特殊的情况
-        let nquery = {};
-        if (company === '中科系') nquery.company = [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所' ];
-        else if (company === '其他')nquery.company = { $nin: [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所', '吉林大学', '长春工业大学' ] };
-        else nquery.company = company;
-        nquery = { ...oq, ...nquery };
-        res = await this.model.find(nquery).skip(parseInt(skip)).limit(parseInt(limit));
-        total = await this.model.count(nquery);
-      }
-
-    } else {
-      // 使用code查出个人,专家,机构下的产品,skip和limit限制的是最后产品,而不是角色那部分
-      let pl = await this.personal.find({ code }, '_id');
-      if (pl.length > 0)pl = JSON.parse(JSON.stringify(pl));
-      let el = await this.expert.find({ code }, '_id');
-      if (el.length > 0)el = JSON.parse(JSON.stringify(el));
-      let ol = await this.organization.find({ code }, '_id');
-      if (ol.length > 0)ol = JSON.parse(JSON.stringify(ol));
-      const ids = pl.map(i => i._id).concat(el.map(i => i._id).concat(ol.map(i => i._id)));
-      if (ids.length > 0) {
-        res = await this.model.find({ ...oq, user_id: ids }).skip(parseInt(skip)).limit(parseInt(limit));
-        total = await this.model.count({ ...oq, user_id: ids });
-      }
-    }
-    return { data: res, total };
-  }
-
-  async indexQuery() {
-    // product,limit=>6;status=>2;type=>0/1/2
-    // 科技需求
-    const require = await this.getSample('model', 6, { type: '0', status: '2' });
-    // 技术成果
-    const achieve = await this.getSample('model', 6, { type: '1', status: '2' });
-    // 商务服务
-    const serve = await this.getSample('model', 5, { type: '2', status: '2' });
-    // 专利:patent limit=>6
-    const patent = await this.getSample('patent');
-    // 专家:expert:limit=>8
-    const expert = await this.getSample('expert', 8);
-    // 专家需要姓名
-    const ids = expert.map(i => i.user_id);
-    const personal = await this.personal.find({ _id: ids }, 'name');
-    for (const exp of expert) {
-      const r = await personal.find(f => ObjectId(f._id).equals(exp.user_id));
-      if (r) exp.name = r.name;
-    }
-    // 路演:roadShow:limit=>5
-    const roadShow = await this.getSample('roadShow', 5);
-    return { require, achieve, serve, patent, expert, roadShow };
-  }
-
-  async getSample(model, limit = 6, match = {}) {
-    const res = await this[model].aggregate([
-      { $match: match },
-      { $sample: { size: parseInt(limit) } },
-    ]);
-    return res;
-  }
-}
-
-module.exports = ProductService;
+'use strict';
+const { CrudService } = require('naf-framework-mongoose/lib/service');
+const { ObjectId } = require('mongoose').Types;
+// 产品
+class ProductService extends CrudService {
+  constructor(ctx) {
+    super(ctx, 'product');
+    this.model = this.ctx.model.Product;
+    this.patent = this.ctx.model.Dock.Patent;
+    this.roadShow = this.ctx.model.RoadShow;
+    this.personal = this.ctx.model.Personal;
+    this.expert = this.ctx.model.Expert;
+    this.organization = this.ctx.model.Organization;
+  }
+  async query({ skip = 0, limit = 0, ...query } = {}) {
+    if (query.name) {
+      query['%name%'] = query.name;
+      delete query.name;
+    }
+    query = this.ctx.service.util.util.dealQuery(query);
+    const { code, company, ...oq } = query;
+    let res = [];
+    let total = 0;
+    if (!code) {
+      if (!company) {
+        res = await this.model.find(query).skip(parseInt(skip)).limit(parseInt(limit));
+        total = await this.model.count(query);
+      } else {
+      // 处理company特殊的情况
+        let nquery = {};
+        if (company === '中科系') nquery.company = [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所' ];
+        else if (company === '其他')nquery.company = { $nin: [ '中科院长春分院', '中国科学院东北地理与农业生态研究所', '中国科学院长春应用化学研究所', '中科院长春光学精密机械与物理研究所', '吉林大学', '长春工业大学' ] };
+        else nquery.company = company;
+        nquery = { ...oq, ...nquery };
+        res = await this.model.find(nquery).skip(parseInt(skip)).limit(parseInt(limit));
+        total = await this.model.count(nquery);
+      }
+
+    } else {
+      // 使用code查出个人,专家,机构下的产品,skip和limit限制的是最后产品,而不是角色那部分
+      let pl = await this.personal.find({ code }, '_id');
+      if (pl.length > 0)pl = JSON.parse(JSON.stringify(pl));
+      let el = await this.expert.find({ code }, '_id');
+      if (el.length > 0)el = JSON.parse(JSON.stringify(el));
+      let ol = await this.organization.find({ code }, '_id');
+      if (ol.length > 0)ol = JSON.parse(JSON.stringify(ol));
+      const ids = pl.map(i => i._id).concat(el.map(i => i._id).concat(ol.map(i => i._id)));
+      if (ids.length > 0) {
+        res = await this.model.find({ ...oq, user_id: ids }).skip(parseInt(skip)).limit(parseInt(limit));
+        total = await this.model.count({ ...oq, user_id: ids });
+      }
+    }
+    return { data: res, total };
+  }
+
+  async indexQuery() {
+    // product,limit=>6;status=>2;type=>0/1/2
+    // 科技需求
+    const require = await this.getSample('model', 6, { type: '0', status: '2' });
+    // 技术成果
+    const achieve = await this.getSample('model', 6, { type: '1', status: '2' });
+    // 商务服务
+    const serve = await this.getSample('model', 5, { type: '2', status: '2' });
+    // 专利:patent limit=>6
+    const patent = await this.getSample('patent');
+    // 专家:expert:limit=>8
+    const expert = await this.getSample('expert', 8);
+    // 专家需要姓名
+    const ids = expert.map(i => i.user_id);
+    const personal = await this.personal.find({ _id: ids }, 'name');
+    for (const exp of expert) {
+      const r = await personal.find(f => ObjectId(f._id).equals(exp.user_id));
+      if (r) exp.name = r.name;
+    }
+    // 路演:roadShow:limit=>5
+    const roadShow = await this.getSample('roadShow', 5);
+    return { require, achieve, serve, patent, expert, roadShow };
+  }
+
+  async getSample(model, limit = 6, match = {}) {
+    const res = await this[model].aggregate([
+      { $match: match },
+      { $sample: { size: parseInt(limit) } },
+    ]);
+    return res;
+  }
+}
+
+module.exports = ProductService;