'use strict'; const Base = require('../base'); /** * 用户统计 */ module.exports = class StatisticController extends Base { get loginValidate() { const that = this; return { user_id: that.ctx.rules.default(that.service.shop.getWebUserId()) .number(), }; } /** * 统计 * @return {Promise<*>} */ async statisticLogs() { const that = this; const transaction = await that.app.model.transaction(); try { // const dataParse = await that.ctx.postParse(); const dataParse = await that.ctx.validate(that.loginValidate, await that.ctx.anyParse()); // 2023/7/25 更新用户行为积分 const updateBean = await that.app.comoBean.instance({ intergral: that.app.Sequelize.literal('intergral + ' + 1), update_ttime: that.app.szjcomo.date('Y-m-d H:i:s'), }, { where: { user_id: dataParse.user_id }, transaction }); await that.app.comoBean.update(updateBean, that.app.model.Users, '用户积分更新失败,请稍候重试'); // 2023/7/25 记录用户行为事件 if (dataParse.type === 1) { // 商品浏览 // 2023/7/25 查询用户浏览商品记录 const result = await that.app.model.UsersProductBrowseLogs.findOne({ where: { user_id: dataParse.user_id, product_id: dataParse.product_id, }, }); if (result) { // 2023/7/26 update 商品浏览 const updateBrowse = await that.app.comoBean.instance({ browse_count: that.app.Sequelize.literal('browse_count + ' + 1), product_name: dataParse.product_name, browse_params: dataParse.browse_params ? dataParse.browse_params : '{}', update_time: that.app.szjcomo.date('Y-m-d H:i:s'), }, { where: { user_id: dataParse.user_id, product_id: dataParse.product_id }, transaction }); await that.app.comoBean.update(updateBrowse, that.app.model.UsersProductBrowseLogs, '商品浏览记录更新失败,请稍候重试'); } else { // 2023/7/26 create 商品浏览 const createBrowse = await that.app.comoBean.instance({ user_id: dataParse.user_id, product_id: dataParse.product_id, browse_count: 1, product_name: dataParse.product_name, browse_params: dataParse.browse_params ? dataParse.browse_params : '{}', update_time: that.app.szjcomo.date('Y-m-d H:i:s'), create_time: that.app.szjcomo.date('Y-m-d H:i:s'), }, { transaction }); await that.app.comoBean.create(createBrowse, that.app.model.UsersProductBrowseLogs, '商品浏览记录添加失败,请稍候重试'); } } else if (dataParse.type === 2) { // 动作记录 // 2023/7/25 查询用户行为记录 const result = await that.app.model.UsersEventLogs.findOne({ where: { user_id: dataParse.user_id, event_name: dataParse.event_name, }, }); if (result) { // 2023/7/26 update 用户行为 const updateBrowse = await that.app.comoBean.instance({ event_count: that.app.Sequelize.literal('event_count + ' + 1), event_params: dataParse.event_params ? dataParse.event_params : '{}', update_time: that.app.szjcomo.date('Y-m-d H:i:s'), }, { where: { user_id: dataParse.user_id, event_name: dataParse.event_name }, transaction }); await that.app.comoBean.update(updateBrowse, that.app.model.UsersEventLogs, '用户行为记录更新失败,请稍候重试'); } else { // 2023/7/26 create 用户行为 const createBrowse = await that.app.comoBean.instance({ user_id: dataParse.user_id, event_name: dataParse.event_name, event_count: 1, event_params: dataParse.event_params ? dataParse.event_params : '{}', update_time: that.app.szjcomo.date('Y-m-d H:i:s'), create_time: that.app.szjcomo.date('Y-m-d H:i:s'), }, { transaction }); await that.app.comoBean.create(createBrowse, that.app.model.UsersEventLogs, '用户行为记录添加失败,请稍候重试'); } } // 2023/7/26 事务提交 transaction.commit(); return that.ctx.appJson(that.app.szjcomo.appResult('SUCCESS', {}, false)); } catch (err) { console.log(err); if (transaction) { transaction.rollback(); } // return that.ctx.appJson(that.app.szjcomo.appResult(err.message)); } } /** * 用户行为统计记录 * @return {Promise<*>} */ async statisticLogsList() { const that = this; try { const dataParse = await that.ctx.anyParse(); // 2023/7/26 查询用户统计记录列表 const resultBrowse = await that.app.model.UsersProductBrowseLogs.findAll({ order: [[ 'browse_count', 'desc' ]], where: { user_id: dataParse.user_id }, }); const resultEvent = await that.app.model.UsersEventLogs.findAll({ order: [[ 'event_count', 'desc' ]], where: { user_id: dataParse.user_id }, }); return that.ctx.appJson(that.app.szjcomo.appResult('SUCCESS', { resultBrowse, resultEvent }, false)); } catch (err) { console.log(err); return that.ctx.appJson(that.app.szjcomo.appResult(err.message)); } } /** * 活跃用户列表 * @return {Promise<*>} */ async activeUsers() { const that = this; // const transaction = await that.app.model.transaction(); const seq = that.app.Sequelize; try { // const dataParse = await that.ctx.validate(that.loginValidate, await that.ctx.anyParse()); // const dataParse = await that.ctx.anyParse(); // 2023/7/26 查询 const users = await that.app.model.Users.findAll({ attributes: [ 'user_id', 'nickname', 'intergral', 'money', 'commission', 'headimgurl' ], order: [[ 'intergral', 'desc' ]], where: { intergral: { [seq.Op.gte]: 1 } }, }); return that.ctx.appJson(that.app.szjcomo.appResult('SUCCESS', { users }, false)); } catch (err) { console.log(err); return that.ctx.appJson(that.app.szjcomo.appResult(err.message)); } } };