Commit 6a5e182c0535e229ca584cd50bec96211bdd8b5a
1 parent
9fbadb4777
Exists in
master
sales per customer
Showing 2 changed files with 84 additions and 0 deletions Side-by-side Diff
index.js
... | ... | @@ -54,4 +54,8 @@ app.get("/apikey/:apikey/sales/last-hour/per-chip-info/:hour", sales.getLastHour |
54 | 54 | app.get("/apikey/:apikey/sales/last-hour/per-product", sales.getLastHoursSalesPerProduct); |
55 | 55 | app.get("/apikey/:apikey/sales/last-hour/per-product/:hour", sales.getLastHoursSalesPerProduct); |
56 | 56 | |
57 | +app.get("/apikey/:apikey/sales/last-hour/per-customer", sales.getLastHoursSalesPerCustomer); | |
58 | +app.get("/apikey/:apikey/sales/last-hour/per-customer/:hour", sales.getLastHoursSalesPerCustomer); | |
59 | + | |
60 | + | |
57 | 61 | app.listen(config.listen_port); |
sales.js
... | ... | @@ -168,7 +168,87 @@ function getLastHoursSalesPerProduct(req, res, next) { |
168 | 168 | }); |
169 | 169 | } |
170 | 170 | |
171 | +function _getLastHoursSalesPerCustomer(hour, cb) { | |
172 | + let dbConnection = db.connection(); | |
173 | + if (!dbConnection) { | |
174 | + cb("db is not connected"); | |
175 | + return; | |
176 | + } | |
177 | + | |
178 | + let query = "select T_STORE_USER.FULL_NAME as CUSTOMER, COUNT(1) as TRX, sum(PRICE) as AMOUNT, to_char(max(TIME_START), 'YYYY-MM-DD HH24:MI:SS') as LAST_TS from T_TRANS left join T_STORE_USER ON T_STORE_USER.USER_NAME = T_TRANS.USER_NAME where TIME_START >= sysdate - :hour / 24 and (TRANS_STAT = '200' or TRANS_STAT = '1200') group by T_STORE_USER.FULL_NAME order by T_STORE_USER.FULL_NAME asc"; | |
179 | + dbConnection.execute(query, [hour], function(err, res) { | |
180 | + if (err) { | |
181 | + cb(err, null); | |
182 | + return; | |
183 | + } | |
184 | + | |
185 | + let retval = db.createResultObject(res); | |
186 | + | |
187 | + if (retval && retval.length > 0) { | |
188 | + cb(null, retval); | |
189 | + } | |
190 | + else { | |
191 | + cb(null, null); | |
192 | + } | |
193 | + }); | |
194 | +} | |
195 | + | |
196 | +function getLastHoursSalesPerCustomer(req, res, next) { | |
197 | + let hour = req.params.hour; | |
198 | + if (!hour) { | |
199 | + hour = 1; | |
200 | + } | |
201 | + | |
202 | + _getLastHoursSalesPerCustomer(hour, function(err, result) { | |
203 | + if (err) { | |
204 | + res.send(err.message); | |
205 | + return; | |
206 | + } | |
207 | + | |
208 | + if (req.query.format == 'csv') { | |
209 | + let fields = ['CUSTOMER', 'TRX', 'AMOUNT', 'LAST_TS'] | |
210 | + let csv = json2csv({data: result, fields: fields}); | |
211 | + | |
212 | + res.type('text'); | |
213 | + res.end(csv); | |
214 | + | |
215 | + } | |
216 | + else if (req.query.format == 'html') { | |
217 | + | |
218 | + let fields = [ | |
219 | + { | |
220 | + title: 'CUSTOMER', | |
221 | + isBold: true | |
222 | + }, | |
223 | + { | |
224 | + title: 'TRX', | |
225 | + isNumber: true | |
226 | + }, | |
227 | + { | |
228 | + title: 'AMOUNT', | |
229 | + isNumber: true | |
230 | + }, | |
231 | + { | |
232 | + title: 'LAST_TS' | |
233 | + } | |
234 | + ]; | |
235 | + | |
236 | + res.render( | |
237 | + 'table.html', | |
238 | + { | |
239 | + title: 'Sales per customer in ' + hour + ' hour(s)', | |
240 | + fields: fields, | |
241 | + rows: result | |
242 | + } | |
243 | + ); | |
244 | + | |
245 | + } else { | |
246 | + res.json(result); | |
247 | + } | |
248 | + }); | |
249 | +} | |
171 | 250 | |
172 | 251 | exports.init = init; |
173 | 252 | exports.getLastHoursSalesPerChipInfo = getLastHoursSalesPerChipInfo; |
174 | 253 | exports.getLastHoursSalesPerProduct = getLastHoursSalesPerProduct; |
254 | +exports.getLastHoursSalesPerCustomer = getLastHoursSalesPerCustomer; |