wheel-surf.js
3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const {Activity} = require('../../../db');
const mysqlCli = global.yoho.utils.mysqlCli;
class ActWheelSurfModel extends global.yoho.BaseModel {
constructor(ctx) {
super(ctx);
this.redis = global.yoho.redis;
this.client = this.redis.client;
}
list() {
return Activity.findAll({where: {type: 1}});
}
create(data) {
return Activity.create(data);
}
async actDelete(id) {
await Activity.destroy({where: {id}});
return true;
}
actInfo(act_id) {
return Activity.findOne({where: {id: act_id}});
}
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;';
}
});
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) {
return this.client.hgetallAsync(`turntable:${actId}`).then(conf => {
Object.keys(conf).forEach(key => {
if (conf[key] && !_.isNaN(Number(conf[key]))) {
conf[key] = Number(conf[key])
}
});
return conf;
});
}
setActConf(actId, confObj) {
confObj.id = 1;
return this.client.HMSET(`turntable:${actId}`, confObj);
}
getActPrize(actId, len = 7) {
return this.client.lrangeAsync(`turntable:${actId}:prize`, 0, len)
.then(async (prizes) => {
let left = 0;
for (let i = 0; i < prizes.length; i++) {
prizes[i] =JSON.parse(prizes[i]);
left = await this.client.getAsync(`turntable:${actId}:prize:${prizes[i].prize_idx}:stock`);
prizes[i].total_left = +left;
}
return prizes;
});
}
createActPrize(actId, prizesList) {
prizesList = prizesList || [];
let multi = this.client.multi();
prizesList.map((prize, idx) => {
prize.id = idx + 1;
multi.lpush(`turntable:${actId}:prize`, JSON.stringify(prize));
multi.set(`turntable:${actId}:prize:${prize.prize_idx}:stock`, prize.total_left);
});
return multi.execAsync();
}
updateActPrize(actId, prizesList) {
prizesList = prizesList || [];
let multi = this.client.multi();
prizesList.map((prize, idx) => {
multi.lset(`turntable:${actId}:prize`, idx, JSON.stringify(prize));
multi.set(`turntable:${actId}:prize:${prize.prize_idx}:stock`, prize.total_left);
});
return multi.execAsync();
}
}
module.exports = ActWheelSurfModel;