117 lines
3.8 KiB
TypeScript
117 lines
3.8 KiB
TypeScript
import {ApiCall} from 'tsrpc';
|
|
import {HuoDongFun} from '../../../public/huodongfun';
|
|
import {christmas} from '../../../shared/protocols/event/christmas/PtlOpen';
|
|
import {PublicShared} from '../../../shared/public/public';
|
|
import {PayFun} from "../../../public/pay";
|
|
|
|
export class Yuandanfun {
|
|
/**配置 */
|
|
static async getCon(call: ApiCall) {
|
|
return (await HuoDongFun.gethdList(call, 14))[0]
|
|
}
|
|
|
|
/**获取我的数据 */
|
|
static async getData(call: ApiCall, hdid: number) {
|
|
|
|
let data = await G.mongodb.cEvent(`yuandan${hdid}`).findOne({uid: call.uid, type: `yuandan${hdid}`})
|
|
|
|
if (!data || !data.refreshTime || !PublicShared.chkSameDate(data.refreshTime, G.time)) {
|
|
// 刷新每日任务
|
|
data = (await G.mongodb.cEvent(`yuandan${hdid}`).findOneAndUpdate({uid: call.uid, type: `yuandan${hdid}`}, {
|
|
$set: {
|
|
gameNum: 0,
|
|
gift: {},
|
|
exchange: {},
|
|
taskfinish: [],
|
|
taskval: await this.getTaskVal(call),
|
|
qiandaoTime: data?.qiandaoTime || 0,
|
|
refreshTime: G.time
|
|
},
|
|
}, {upsert: true, returnDocument: 'after'})).value
|
|
this.refreshPayLog(call)
|
|
}
|
|
return data
|
|
}
|
|
|
|
static async refreshPayLog(call: ApiCall) {
|
|
let _hd = await this.getCon(call)
|
|
let payIds = _hd?.data?.gift?.filter(i=>i.payId).map(i=>i.payId)
|
|
PayFun.delPayLog(call.uid, ...payIds.map(i => {
|
|
return {payId: i, val: []}
|
|
}))
|
|
}
|
|
|
|
/**获取所有taskid 及对应的值 */
|
|
static async getTaskVal(call: ApiCall) {
|
|
let _initCon = await this.getCon(call)
|
|
let _tasks = _initCon.data.task
|
|
let _res = {}
|
|
for (let index = 0; index < Object.keys(_tasks).length; index++) {
|
|
const element = Object.keys(_tasks)[index];
|
|
let _tmp = _tasks[element]
|
|
_tmp["id"] = element
|
|
// 每日登录直接完成
|
|
if (_tmp.stype == "128") {
|
|
_res[element] = 1
|
|
} else {
|
|
_res[element] = 0
|
|
}
|
|
}
|
|
return _res
|
|
}
|
|
|
|
/**设置数据 */
|
|
static async setData(uid: string, hdid: number, set: {}) {
|
|
await G.mongodb.cEvent(`yuandan${hdid}`).updateOne(
|
|
{uid: uid, type: `yuandan${hdid}`},
|
|
set
|
|
)
|
|
}
|
|
|
|
/**设置任务 */
|
|
static async setTaskVal(call: ApiCall, stype: number, val: number, chkCall: Function, chkval: number = 0, isinc: number = 0, alchangeVal: Function, arg) {
|
|
// 活动过期,不计数
|
|
let _hd = await this.getCon(call)
|
|
if (!_hd) return
|
|
|
|
// let _mydata = await Christmasfun.getMyData(call, hdid)
|
|
let _tasks = _hd.data.task
|
|
|
|
let _setData = {
|
|
$inc: {},
|
|
$set: {}
|
|
}
|
|
let isset = 0
|
|
for (let indextask = 0; indextask < Object.keys(_tasks).length; indextask++) {
|
|
const ele = Object.keys(_tasks)[indextask];
|
|
// 具体任务配置
|
|
let _taskCon = _tasks[ele]
|
|
if (_taskCon.stype != stype) continue
|
|
|
|
let _pval = _taskCon.pval
|
|
// 不符合任务要求
|
|
if (!(await chkCall(_taskCon["cond"], chkval, arg))) continue
|
|
|
|
// 根据需求改写
|
|
val = await alchangeVal(call, _taskCon, val, arg)
|
|
|
|
isset = 1
|
|
if (isinc == 1) { // 累加
|
|
_setData["$inc"][`taskval.${ele}`] = val
|
|
} else {
|
|
_setData["$set"][`taskval.${ele}`] = val
|
|
}
|
|
}
|
|
|
|
// 设置任务
|
|
if (isset == 1) {
|
|
await G.mongodb.collection('event').updateOne(
|
|
{uid: call.uid, type: `yuandan${_hd.hdid}`},
|
|
_setData
|
|
)
|
|
}
|
|
}
|
|
|
|
|
|
}
|