lrf před 3 roky
rodič
revize
85780c9a3c

+ 44 - 39
app/controller/dock/config/.dockUser.js

@@ -1,68 +1,73 @@
 module.exports = {
   create: {
-    requestBody: [
-      "dock_id",
-      "user_id",
-      "user_name",
-      "user_phone",
-      "create_time",
-      "productList",
-      "status",
-      "remark",
-    ],
+    requestBody: ['dock_id', 'user_id', 'user_name', 'user_phone', 'create_time', 'productList', 'status', 'remark'],
   },
   destroy: {
-    params: ["!id"],
-    service: "delete",
+    params: ['!id'],
+    service: 'delete',
   },
   update: {
-    params: ["!id"],
-    requestBody: [
-      "dock_id",
-      "user_id",
-      "user_name",
-      "user_phone",
-      "create_time",
-      "productList",
-      "status",
-      "remark",
-    ],
+    params: ['!id'],
+    requestBody: ['dock_id', 'user_id', 'user_name', 'user_phone', 'create_time', 'productList', 'status', 'remark'],
   },
   show: {
     parameters: {
-      params: ["!id"],
+      params: ['!id'],
     },
-    service: "fetch",
+    service: 'fetch',
   },
   index: {
     parameters: {
       query: {
-        dock_id: "dock_id",
-        user_id: "user_id",
-        user_name: "user_name",
-        user_phone: "user_phone",
-        status: "status",
+        dock_id: 'dock_id',
+        user_id: 'user_id',
+        user_name: 'user_name',
+        user_phone: 'user_phone',
+        status: 'status',
       },
       // options: {
       //   "meta.state": 0 // 默认条件
       // },
     },
-    service: "query",
+    service: 'query',
     options: {
-      query: ["skip", "limit"],
-      sort: ["meta.createdAt"],
+      query: ['skip', 'limit'],
+      sort: ['meta.createdAt'],
       desc: true,
       count: true,
     },
   },
   goodCheck: {
-    params: ["!id"],
-    requestBody: ["good_id", "status"],
-    service: "goodCheck",
+    params: ['!id'],
+    requestBody: ['good_id', 'status'],
+    service: 'goodCheck',
   },
   userCheck: {
-    params: ["!id"],
-    requestBody: ["status"],
-    service: "userCheck",
+    params: ['!id'],
+    requestBody: ['status'],
+    service: 'userCheck',
+  },
+
+  getProductListByDockId: {
+    parameters: {
+      query: {
+        dock_id: 'dock_id',
+        type: 'productList.type',
+        name: '%productList.name%',
+        phone: 'productList.phone',
+        contacts: 'productList.contacts',
+        field: 'productList.field',
+        cooperation: 'productList.cooperation',
+      },
+      // options: {
+      //   "meta.state": 0 // 默认条件
+      // },
+    },
+    service: 'getProductListByDockId',
+    options: {
+      query: ['skip', 'limit'],
+      sort: ['meta.createdAt'],
+      desc: true,
+    },
   },
 };

+ 16 - 0
app/middleware/query_without_rewrite_controller.js

@@ -0,0 +1,16 @@
+'use strict';
+const _ = require('lodash');
+/**
+ * 针对重写service但是仍使用框架的controller处理数据的模式而产生的中间件
+ * {errcode:0,errmsg:'ok',data:{data:[],total:x}} 的数据形式而使用
+ * @param {Object} options 参数
+ */
+module.exports = options => {
+  return async function query_without_rewrite_controller(ctx, next) {
+    await next();
+    const body = ctx.body;
+    const { data, total } = body.data;
+    ctx.body.data = data;
+    ctx.body.total = total;
+  };
+};

+ 2 - 2
app/model/dock/dockUser.js

@@ -8,10 +8,10 @@ const dock_user = {
   dock_id: { type: String }, // 展会id
   user_id: { type: String }, // 用户id
   user_name: { type: String }, // 用户姓名
-  user_phone: { type: String, }, // 用户电话
+  user_phone: { type: String }, // 用户电话
   create_time: { type: String }, // 申请时间
   productList: { type: Array }, // 参展项目
-  status: { type: String, default: "0" }, // 0-待审核;1-审核通过;-1-审核拒绝
+  status: { type: String, default: '0' }, // 0-待审核;1-审核通过;-1-审核拒绝
   remark: { type: String },
 };
 const schema = new Schema(dock_user, { toJSON: { virtuals: true } });

+ 40 - 4
app/service/dock/dockUser.js

@@ -11,6 +11,45 @@ class DockUserService extends CrudService {
     super(ctx, 'dock_user');
     this.model = this.ctx.model.Dock.DockUser;
   }
+  /**
+   * 根据展会id查询参展产品
+   * @param {Object} query 查询条件
+   * @param {Object} options 其他条件
+   * @property {String} dock_id 展会id
+   * @property {Object} condition 其他查询条件
+   */
+  async getProductListByDockId({ dock_id, ...condition }, { skip = 0, limit = 0 }) {
+    assert(dock_id, '缺少展会信息');
+    condition = this.dealFilter(condition);
+    // 先查展会下的所有产品
+    const pipeline = [{ $match: { dock_id } }];
+    // 只留产品列表
+    pipeline.push({ $project: { productList: 1 } });
+    // 将产品列表数组拆开成单项Object
+    pipeline.push({ $unwind: '$productList' });
+    // 其他针对产品的查询条件
+    pipeline.push({ $match: condition });
+    // 满足条件的总数
+    const totalRes = await this.model.aggregate([ ...pipeline, { $group: { _id: null, total: { $sum: 1 } } }]);
+    let total = 0;
+    if (totalRes.length > 0) {
+      const totalHead = _.head(totalRes);
+      total = _.get(totalHead, 'total');
+    }
+
+    // 分页的是产品,不是展会
+    if (limit) {
+      pipeline.push({ $skip: parseInt(skip) });
+      pipeline.push({ $limit: parseInt(limit) });
+    }
+    let data = await this.model.aggregate(pipeline);
+    data = data.map(i => {
+      const { productList } = i;
+      return productList;
+    });
+    data = _.compact(data);
+    return { data, total };
+  }
   async create(data) {
     const { dock_id, user_id } = data;
     let { productList } = data;
@@ -36,7 +75,6 @@ class DockUserService extends CrudService {
     }
     user.productList = user.productList.concat(productList);
     return await user.save();
-
   }
 
   async update({ id }, data) {
@@ -45,7 +83,7 @@ class DockUserService extends CrudService {
       data.productList = productList.map(i => {
         console.log(i.status);
         if (i.status === '1') data.status = '1';
-        if (!i._id)i._id = ObjectId();
+        if (!i._id) i._id = ObjectId();
         else i._id = ObjectId(i._id);
         return i;
       });
@@ -82,8 +120,6 @@ class DockUserService extends CrudService {
     object.status = status;
     await object.save();
   }
-
-
 }
 
 module.exports = DockUserService;

+ 1 - 0
app/z_router/dock/dockUser.js

@@ -4,6 +4,7 @@ const rkey = 'dockUser';
 const ckey = 'dock.dockUser';
 const keyZh = '展会用户';
 const routes = [
+  { method: 'get', path: `${rkey}/getProductListByDockId`, controller: `${ckey}.getProductListByDockId`, middleware: [ 'queryWithoutRewriteController' ], name: `${ckey}GetProductListByDockId`, zh: `${keyZh}-展会参展产品列表查询` },
   { method: 'post', path: `${rkey}/goodCheck/:id`, controller: `${ckey}.goodCheck`, name: `${ckey}goodCheck`, zh: `${keyZh}申请参展的产品审核` },
   { method: 'post', path: `${rkey}/userCheck/:id`, controller: `${ckey}.userCheck`, name: `${ckey}userCheck`, zh: `${keyZh}申请参展的用户审核` },
   { method: 'get', path: `${rkey}`, controller: `${ckey}.index`, name: `${ckey}Query`, zh: `${keyZh}列表查询` },