123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- const Core = require('@alicloud/pop-core');
- const { Op } = require('sequelize');
- const moment = require('moment');
- const _ = require('lodash');
- const Sample = require('../db/models/sample');
- const Clue = require('../db/models/clue');
- const Business = require('../db/models/business');
- const Area = require('../db/models/area');
- const redis = require('../utils/redis');
- const { fill, onSuccess, onError } = require('../utils');
- const sequelize = require('sequelize');
- const model = {
- async home() {
- const [sCount, sReserves, sVolume, clueCount, bCount, clueList7, busList] = await Promise.all([
- Sample.count({ where: {} }),
- Sample.aggregate('reserves', 'sum', { where: {} }),
- Sample.aggregate('volume', 'sum', { where: {} }),
- Clue.count({ where: { type: 2 } }),
- Business.count({ where: {} }),
- Clue.findAll({
- where: {
- type: 2,
- createdAt: {
- [Op.gte]: moment().subtract(7, 'day').startOf('day'),
- [Op.lte]: moment().endOf('day'),
- },
- },
- all: true,
- }),
- Business.findAll({
- attributes: [[sequelize.fn('count', sequelize.col('province_id')), 'psum']],
- group: ['province_id'],
- order: [[sequelize.literal('psum'), 'DESC']],
- }),
- ]);
- // 近7天咨询量
- const clue7 = [];
- for (let i = 0; i < 7; i++) {
- clue7.unshift({ title: moment().subtract(i, 'day').format('MM-DD'), count: 0 });
- }
- if (clueList7.length) {
- for (let i = 0; i < clueList7.length; i++) {
- const { createdAt } = clueList7[i];
- const a = moment().diff(createdAt, 'day');
- clue7[6 - a].count += 1;
- }
- }
- const bus = await fill(busList, fillBus);
- return onSuccess({ sCount, sReserves, sVolume, clueCount, bCount, clue7, bus });
- },
- async smsCode(obj) {
- const expire = 300;
- const { phone } = obj;
- const time = await redis.pttl(`smsCode:${phone}`);
- // const time = await getPttl(`smsCode:${phone}`);
- if (time && time > 240000) {
- return onError('一分钟内发送一次');
- }
- const code = 100000 + Math.round(Math.random() * 899999);
- try {
- const client = new Core({
- accessKeyId: 'LTAI5tBzbbZosUBciGory8jA',
- accessKeySecret: 'hH5vtcwnCR17Slv8KWXrtF9OmgL06s',
- // securityToken: '<your-sts-token>', // use STS Token
- endpoint: 'https://dysmsapi.aliyuncs.com',
- apiVersion: '2017-05-25',
- });
- const params = {
- PhoneNumbers: phone, // 接收短信的手机号码
- SignName: '伏羲碳惠交易平台', // 短信签名名称
- TemplateCode: 'SMS_461080515', // 短信模板CODE
- TemplateParam: `{ "code":${code} }`,
- };
- const requestOption = {
- method: 'POST',
- };
- const data = await client.request('SendSms', params, requestOption);
- console.log(data);
- if (data.Code === 'OK') {
- await redis.set(`smsCode:${phone}`, code);
- await redis.expire(`smsCode:${phone}`, expire);
- return onSuccess(data, '发送成功');
- }
- return onError('发送失败请重试', data);
- } catch (error) {
- console.log(error);
- return onError('发送失败请重试');
- }
- },
- };
- async function fillBus(data) {
- if (data) {
- const { cityId, provinceId } = data;
- const pItem = await Area.findOne({ where: { id: provinceId } });
- data.provinceName = pItem.name;
- }
- return { title: data.provinceName, count: data.psum };
- }
- module.exports = model;
|