123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- const Parse = getApp().Parse;
- const company = getApp().globalData.company;
- const uid = Parse.User.current()?.id
- let request = require('../../utils/request')
- const dateF = require('../../utils/date')
- /**
- * 计算运动累加状况-页面使用
- * @param {*} column 累加字段
- */
- async function getwalk(column) {
- let typeList = ['walk', 'run']
- let distance = 0
- for (let i in typeList) {
- let type = typeList[i]
- let d = await getData(column, type) || 0
- console.log(d)
- distance = distance + d
- }
- return distance < 0 ? 0 : distance
- }
- /**
- * 计算运动累加状况-getwalk使用
- * @param {*} column 累加字段 (未知则'distance')
- * @param {*} type 运动类型 walk/run(未知则不限制)
- */
- async function getData(column, type) {
- let todate = new Date(new Date().setHours(0, 0, 0, 0))
- let tomorrow = new Date(new Date(todate).setDate(todate.getDate() + 1))
- let todaySql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, todate)
- let yestodaySql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, tomorrow)
- let sql = `SELECT SUM(t1."num")- SUM(t1."ago_num") AS "sum"
- FROM(SELECT MAX(al."${column||'distance'}") AS "num" ,al."actData",(
- SELECT MAX(al2."${column||'distance'}")
- FROM "ActivityRunLog" al2
- WHERE al2."actData"=al."actData"
- AND al2."isDeleted" IS NOT TRUE
- ${type?`AND al2."type"='${type}'`:''}
- AND al2."createdAt" < '${todaySql}'
- AND al2."isDeleted" IS NOT TRUE
- )AS "ago_num"
- FROM "ActivityRunLog" al
- LEFT JOIN "ActivityData" ad ON ad."objectId"=al."actData"
- WHERE al."isDeleted" IS NOT TRUE
- AND al."createdAt" > '${todaySql}'
- AND al."createdAt" < '${yestodaySql}'
- AND al."company"='${company}'
- AND al."user"='${uid}'
- ${type?`AND al."type"='${type}'`:''}
- AND al."isDeleted" IS NOT TRUE
- AND ad."isDeleted" IS NOT TRUE
- ${type?`AND ad."type"='${type}'`:''}
- GROUP BY al."actData")t1`
- // console.log(sql)
- let data = await request.customSQL(sql)
- // console.log(data)
- return data[0].sum || 0
- }
- /**查看活动运动数据(当前活动对应运动是否结束) */
- async function getActSport(actId) {
- let actQuery = new Parse.Query('Activity')
- let act = await actQuery.get(actId)
- if (act?.get('endDate')) {
- }
- }
- /**对于活动超时未结束的运动,设置stage为end */
- async function setEndSport(actId) {
- let regQuery = new Parse.Query('ActivityRegister')
- regQuery.equalTo('company', company)
- regQuery.equalTo('user', uid)
- regQuery.notEqualTo('isDeleted', true)
- regQuery.equalTo('activity', actId)
- regQuery.select('booking')
- let reg = await regQuery.find()
- let overtimeReg = reg?.filter(item => {
- let now = new Date()
- let endTime = item?.get('booking')?.to
- if (!endTime) return true
- return now >= endTime
- })?.map(item => item?.id)
- console.log(overtimeReg)
- if (overtimeReg?.length <= 0) return
- let actQuery = new Parse.Query('ActivityData')
- actQuery.equalTo('company', company)
- actQuery.equalTo('user', uid)
- actQuery.notEqualTo('isDeleted', true)
- actQuery.containedIn('activity', overtimeReg)
- actQuery.select('objectId')
- let actData = await actQuery.find()
- for (let i in actData) {
- let act = actData[i]
- //获取最后一条运动过程记录
- let logQuery = new Parse.Query('ActivityRunLog')
- logQuery.equalTo('company', company)
- logQuery.equalTo('user', uid)
- logQuery.notEqualTo('isDeleted', true)
- logQuery.equalTo('actData', act?.id)
- logQuery.descending('createdAt')
- let endLog = await logQuery.first()
- endLog.set('stage', 'end')
- await endLog.save()
- act.set('steps', endLog?.get('steps') || 0)
- act.set('distance', endLog?.get('distance') || 0)
- act.set('matchSpeed', endLog?.get('matchSpeed') || 0)
- act.set('sportDate', endLog?.get('sportDate') || 0)
- act.set('burnCalories', endLog?.get('burnCalories') || 0)
- act.set('status', 'end')
- act.set('endDate', new Date())
- await act.save()
- }
- }
- /**
- * 获取排行榜
- * @param {*} type 运动类型
- * @param {*} fromto 时间范围 today/toweek/tomonth/空
- * @param {*} limit 默认20
- * @param {*} skip 默认0
- * @param {*} order 默认 DESC
- */
- async function getRanking(type, fromto, limit, skip,order) {
- let fromtoSql = ``
- switch (fromto) {
- case 'today':
- let todate = new Date(new Date().setHours(0, 0, 0, 0))
- let tomorrow = new Date(new Date(todate).setDate(todate.getDate() + 1))
- let todaySql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, todate)
- let yestodaySql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, tomorrow)
- fromtoSql = `AND ad."endDate" >= '${todaySql}' AND ad."endDate" < '${yestodaySql}'`
- break;
- case 'toweek':
- const today = new Date();
- const dayOfWeek = today.getDay();
- const thisSun = new Date(today);
- thisSun.setDate(today.getDate() + (0 - dayOfWeek));
- thisSun.setHours(0, 0, 0, 0);
- const nextSun = new Date(thisSun);
- nextSun.setDate(thisSun.getDate() + 7);
- let thisSunSql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, thisSun)
- let nextSunSql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, nextSun)
- fromtoSql = `AND ad."endDate" >= '${thisSunSql}' AND ad."endDate" < '${nextSunSql}'`
- break;
- case 'tomonth':
- const now = new Date();
- const toMon = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0);
- const nextMon = new Date(now.getFullYear(), now.getMonth() + 1, 1, 0, 0, 0);
- let toMonSql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, toMon)
- let nextMonSql = dateF.formatTime(`YYYY-mm-dd HH:MM:SS`, nextMon)
- fromtoSql = `AND ad."endDate" >= '${toMonSql}' AND ad."endDate" < '${nextMonSql}'`
- break;
- default:
- break;
- }
- let sql = `SELECT SUM(ad."steps") AS "totalSteps",SUM(ad."distance") AS "distance",SUM(ad."burnCalories") AS "burnCalories",SUM(ad."sportDate") AS "sportDate",ad."user",u."nickname",u."avatar"
- FROM "ActivityData" ad
- LEFT JOIN "_User" u ON u."objectId"=ad."user"
- WHERE ad."company"='${company}'
- AND ad."isDeleted" IS NOT TRUE
- AND ad."status" = 'end'
- ${type?`AND ad."type" = '${type}'`:''}
- ${fromtoSql}
- GROUP BY ad."user",u."nickname",u."avatar"
- ORDER BY SUM(ad."steps") ${order||'DESC'}
- LIMIT ${limit||20} OFFSET ${skip||0}`
- // console.log(sql)
- let data = await request.customSQL(sql)
- // console.log(data)
- return data
- }
- module.exports = {
- getwalk,
- setEndSport,
- getRanking
- };
|