From 11bbd163c5f250c3576c0cb1e4db4a1d38448b86 Mon Sep 17 00:00:00 2001
From: liqi <qi.li@yoho.cn>
Date: Tue, 30 Oct 2018 17:21:38 +0800
Subject: [PATCH] 中奖用户导出功能添加

---
 apps/admin/controllers/wheel-surf.js      | 39 ++++++++++++++++++++++++++++++++++-----
 apps/admin/models/wheel-surf.js           | 54 +++++++++++++-----------------------------------------
 apps/admin/router.js                      |  1 +
 apps/api/models/wheel-surf.js             |  2 +-
 public/vue/wheel-surf/prize-sent-list.vue |  2 +-
 5 files changed, 50 insertions(+), 48 deletions(-)

diff --git a/apps/admin/controllers/wheel-surf.js b/apps/admin/controllers/wheel-surf.js
index ee1bb9b..db548a0 100644
--- a/apps/admin/controllers/wheel-surf.js
+++ b/apps/admin/controllers/wheel-surf.js
@@ -3,8 +3,10 @@
  * @author: leo <qi.li@yoho.cn>
  * @date: 26/09/2018
  */
+const moment = require('moment');
 const wheelSurfModel = require('../models/wheel-surf');
 const valid = require('../../../utils/validator');
+const {excel_export} = require('../../../utils/excel');
 
 const whSurfController = {
   entry(req, res) {
@@ -266,15 +268,42 @@ const whSurfController = {
   userFind: async function(req, res) {
     let obj = req.body;
 
-    let result = await req.ctx(wheelSurfModel).userFind(obj);
+    // let result = await req.ctx(wheelSurfModel).userFind(obj);
 
     return res.json({
       code: 200,
-      data: {
-        list: result[1],
-        total: result[0]
-      }
+      data: {}
+    });
+  },
+
+  exportRecords: async function(req, res) {
+    let result = await req.ctx(wheelSurfModel).exportRecords(req.query.actId);
+
+    let excelConf = {
+      name: 'mysheet',
+      cols: ['用户UID', '奖品类型', '奖品名称', '中奖时间'],
+      rows: []
+    };
+
+    let temp = [];
+
+    result.forEach(item => {
+      temp = [];
+      temp.push(item.uid);
+      temp.push(item.type);
+      temp.push(item.name);
+      temp.push(moment(+item.time).format('YYYY-MM-DD HH:mm:ss'));
+      excelConf.rows.push(temp);
     });
+
+    return excel_export({
+      title: excelConf.cols,
+      data: excelConf.rows,
+      fileName: 'ActivityUserList',
+      sheetName: excelConf.name,
+      res
+    });
+
   }
 };
 
diff --git a/apps/admin/models/wheel-surf.js b/apps/admin/models/wheel-surf.js
index b890a45..b89644b 100644
--- a/apps/admin/models/wheel-surf.js
+++ b/apps/admin/models/wheel-surf.js
@@ -29,49 +29,21 @@ class ActWheelSurfModel extends global.yoho.BaseModel {
   userFind(obj) {
     let pageNo = obj.pageNo || 1;
     let pageSize = obj.pageSize || 20;
+  }
 
-    obj.start = (pageNo - 1) * pageSize;
-    obj.page = pageSize;
-
-    let sql = `select u.uid, u.act_id act_id, u.prize_id prize_id, u.create_time create_time,a.title title,p.name name,p.type type ,p.value value,p.img img
-            from act_wheel_surf_user u , act_wheel_surf_prize p ,activity a where u.prize_id = p.id and u.act_id =:act_id and a.id=:act_id`;
-    let arr = Object.keys(obj);
-
-    let countSql = `select count(1) total
-            from act_wheel_surf_user u , act_wheel_surf_prize p where u.prize_id = p.id and u.act_id =:act_id`;
-
-    arr.forEach(function(value, index) {
-      if (!obj[value]) {
-        return;
-      }
-
-      switch (value) {
-        case 'type':
-          sql += ' and p.type=:type';
-          countSql += ' and p.type=:type';
-          break;
-        case 'title':
-          sql += ' and a.title=:title';
-          break;
-        case 'uid':
-          sql += ' and u.uid=:uid';
-          countSql += ' and u.uid=:uid';
-          break;
-        case 'name':
-          sql += ' and p.name=:name';
-          countSql += ' and p.name=:name';
-          break;
-      }
-      if (index === arr.length - 1) {
-        sql += ' order by u.create_time desc limit :start, :page;';
-      }
+  async exportRecords(actId) {
+    let len = await this.client.llenAsync(`turntable:${actId}:prize:user`);
+    return this.client.lrangeAsync(`turntable:${actId}:prize:users`, 0, len - 1).then(prizes => {
+      return prizes.map(prize => {
+        prize = prize.split(':::');
+        return {
+          uid: prize[0],
+          type: prize[1],
+          name: prize[2],
+          time: prize[3]
+        }
+      });
     });
-
-    try {
-      return Promise.all([mysqlCli.query(countSql, obj).then(res => {return res[0].total}), mysqlCli.query(sql, obj)]);
-    } catch (e) {
-      return Promise.reject({code: 305, result: false, msg: '服务错误,请稍等'});
-    }
   }
 
   getActConf(actId) {
diff --git a/apps/admin/router.js b/apps/admin/router.js
index 1fb3d68..c98a3fb 100644
--- a/apps/admin/router.js
+++ b/apps/admin/router.js
@@ -105,6 +105,7 @@ router.get('/wheelSurf/api/prize/list', wheelSurf.prizeFindByActId);
 router.post('/wheelSurf/api/prize/create', wheelSurf.prizeCreate);
 router.post('/wheelSurf/api/prize/update', wheelSurf.prizeUpdate);
 router.post('/wheelSurf/api/prize/userFind', wheelSurf.userFind);
+router.get('/wheelSurf/api/prize/exportRecords', wheelSurf.exportRecords);
 
 
 router.get('/wheelSurf/*', wheelSurf.entry);
diff --git a/apps/api/models/wheel-surf.js b/apps/api/models/wheel-surf.js
index 0e698f2..b32dcf6 100644
--- a/apps/api/models/wheel-surf.js
+++ b/apps/api/models/wheel-surf.js
@@ -308,7 +308,7 @@ class ActWheelSurfModelRedis extends global.yoho.BaseModel {
           this.client.zaddAsync(
             `turntable:${obj.act_id}:user:${obj.uid}:prize`, score, `${JSON.stringify(getPrize)}:::${score}`),
           this.client.lpushAsync(
-            `turntable:${obj.act_id}:prize:users`, `${obj.uid}:::${prizeType[getPrize.type]}:::${getPrize.name}:::${JSON.stringify(getPrize)}`)
+            `turntable:${obj.act_id}:prize:users`, `${obj.uid}:::${prizeType[getPrize.type]}:::${getPrize.name}:::${score}`)
         ]);
 
         if (result) {
diff --git a/public/vue/wheel-surf/prize-sent-list.vue b/public/vue/wheel-surf/prize-sent-list.vue
index d2b658c..48482fa 100644
--- a/public/vue/wheel-surf/prize-sent-list.vue
+++ b/public/vue/wheel-surf/prize-sent-list.vue
@@ -109,7 +109,7 @@
           this.list(params);
         },
         output() {
-          console.log('output')
+          window.open(`/admin/wheelSurf/api/prize/exportRecords?actId=${this.actId}`, '_blank');
         }
       },
       created() {
--
libgit2 0.24.0