You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
3.2 KiB
161 lines
3.2 KiB
/**
|
|
* @class Platform 应用平台模型
|
|
*/
|
|
const BaseMod = require('./base')
|
|
const {
|
|
DateTime
|
|
} = require('../lib')
|
|
module.exports = class Platform extends BaseMod {
|
|
constructor() {
|
|
super()
|
|
this.tableName = 'app-platforms'
|
|
}
|
|
|
|
/**
|
|
* 获取平台信息
|
|
* @param {String} platform 平台代码
|
|
* @param {String} os 系统
|
|
*/
|
|
async getPlatform(platform, os) {
|
|
const cacheKey = 'uni-stat-platform-' + platform + '-' + os
|
|
let platformData = await this.getCache(cacheKey)
|
|
if (!platformData) {
|
|
const platformCode = this.getPlatformCode(platform, os)
|
|
const platformInfo = await this.getCollection(this.tableName).where({
|
|
code: platformCode
|
|
}).limit(1).get()
|
|
platformData = []
|
|
if (platformInfo.data.length > 0) {
|
|
platformData = platformInfo.data[0]
|
|
await this.setCache(cacheKey, platformData)
|
|
}
|
|
}
|
|
return platformData
|
|
}
|
|
|
|
/**
|
|
* 获取平台信息没有则创建
|
|
* @param {String} platform 平台代码
|
|
* @param {String} os 系统
|
|
*/
|
|
async getPlatformAndCreate(platform, os) {
|
|
if (!platform) {
|
|
return false
|
|
}
|
|
const platformInfo = await this.getPlatform(platform, os)
|
|
|
|
if (platformInfo.length === 0) {
|
|
const platformCode = this.getPlatformCode(platform, os)
|
|
const insertParam = {
|
|
code: platformCode,
|
|
name: platformCode,
|
|
create_time: new DateTime().getTime()
|
|
}
|
|
const res = await this.insert(this.tableName, insertParam)
|
|
if (res && res.id) {
|
|
return Object.assign(insertParam, {
|
|
_id: res.id
|
|
})
|
|
}
|
|
}
|
|
return platformInfo
|
|
}
|
|
|
|
/**
|
|
* 获取平台代码
|
|
* @param {String} platform 平台代码
|
|
* @param {String} os 系统
|
|
*/
|
|
getPlatformCode(platform, os) {
|
|
let platformCode = platform
|
|
|
|
//兼容客户端上报参数
|
|
switch(platform) {
|
|
//h5|web
|
|
case 'h5':
|
|
platformCode = 'web'
|
|
break
|
|
//微信小程序
|
|
case 'wx':
|
|
platformCode = 'mp-weixin'
|
|
break
|
|
//百度小程序
|
|
case 'bd':
|
|
platformCode = 'mp-baidu'
|
|
break
|
|
//支付宝小程序
|
|
case 'ali':
|
|
platformCode = 'mp-alipay'
|
|
break
|
|
//字节跳动小程序
|
|
case 'tt':
|
|
platformCode = 'mp-toutiao'
|
|
break
|
|
//qq小程序
|
|
case 'qq':
|
|
platformCode = 'mp-qq'
|
|
break
|
|
//快应用联盟
|
|
case 'qn':
|
|
platformCode = 'quickapp-webview-union'
|
|
break
|
|
//快应用(webview)
|
|
case 'qw':
|
|
platformCode = 'quickapp-webview'
|
|
break
|
|
//快应用华为
|
|
case 'qi':
|
|
platformCode = 'quickapp-webview-huawei'
|
|
break
|
|
//360小程序
|
|
case '360':
|
|
platformCode = 'mp-360'
|
|
break
|
|
//京东小程序
|
|
case 'jd':
|
|
platformCode = 'mp-jd'
|
|
break
|
|
//钉钉小程序
|
|
case 'dt':
|
|
platformCode = 'mp-dingtalk'
|
|
break
|
|
//快手小程序
|
|
case 'ks':
|
|
platformCode = 'mp-kuaishou'
|
|
break
|
|
//飞书小程序
|
|
case 'lark':
|
|
platformCode = 'mp-lark'
|
|
break
|
|
//原生应用
|
|
case 'n':
|
|
case 'app-plus':
|
|
case 'app':
|
|
os = this.getOsName(os)
|
|
if (os === 'ios') {
|
|
platformCode = 'ios'
|
|
} else {
|
|
platformCode = 'android'
|
|
}
|
|
break
|
|
}
|
|
return platformCode
|
|
}
|
|
|
|
/**
|
|
* 获取系统名称
|
|
* @param {Object} os系统标识
|
|
*/
|
|
getOsName(os) {
|
|
if(!os) {
|
|
return ''
|
|
}
|
|
//兼容老版上报参数
|
|
const osSetting = {
|
|
i: 'ios',
|
|
a: 'android'
|
|
}
|
|
return osSetting[os] ? osSetting[os] : os
|
|
}
|
|
}
|