HJ_Server/src/public/huodongfun.ts
2023-12-21 16:42:43 +08:00

147 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {ApiCall} from 'tsrpc';
import {ReqAddHuoDong} from '../monopoly/protocols/PtlAddHuoDong';
import {PublicShared} from '../shared/public/public';
import {UserFun} from './user';
const HUODONG_SHUJUKU = "hdinfo";
export class HuoDongFun {
/**插入活动数据 */
static async addHuoDong(info: ReqAddHuoDong) {
let result = (await G.mongodb.collection(HUODONG_SHUJUKU).insertOne(info)).insertedId.toHexString();
return result;
}
/**删除活动数据 */
static async delHD(hdid: number) {
let result = await G.mongodb.collection(HUODONG_SHUJUKU).deleteOne({hdid: hdid})
return result
}
/**查看所有活动数据 包括不符合时间的活动 */
static async catAllHD(where: { [id: string]: any }) {
let result = await G.mongodb.collection(HUODONG_SHUJUKU).find(where).toArray()
return result
}
/**
* 获取所有符合时间的活动(默认根据实际结束时间查询)
* 1.可根据 htype 查询
* 2.永久活动的 rtime etime stime 全为0
* 3.ttype 为 4 屏蔽活动
*/
static async gethdList(call: ApiCall, htype: number = 0) {
let _zeroTime = PublicShared.getToDayZeroTime(call.conn.gud.cTime)
let _pDay = Number((G.time - _zeroTime) / 86400)
let openTime = PublicShared.getToDayZeroTime(G.openTime)
let _sDay = Number((G.time - openTime) / 86400)
// ttype为0 根据开服时间计算ttype为1根据用户注册时间计算
let _where = {
$or: [
{
ttype: 0,
$or: [{stime: {$lte: _sDay}, etime: {$gte: _sDay}}, {stime: {$lte: G.time}, etime: {$gte: G.time}}]
},
{
ttype: 1,
stime: {$lte: _pDay},
etime: {$gte: _pDay}
}]
}
if (htype != 0) _where["htype"] = htype
let _res = await this.catAllHD(_where)
let result = []
for (let index = 0; index < _res.length; index++) {
const element = _res[index];
// 算出符合注册时间的活动时间
let initTime = element.ttype ? call.conn.gud.cTime : openTime
if (element.stime < 99999999) {
element.stime = PublicShared.getToDayZeroTime(initTime + 24 * 3600 * element.stime)
element.rtime = PublicShared.getToDayZeroTime(initTime + 24 * 3600 * element.rtime) - 1
element.etime = PublicShared.getToDayZeroTime(initTime + 24 * 3600 * element.etime) - 1
}
let _st = PublicShared.fmtTime(element["stime"])
let _rt = PublicShared.fmtTime(element["rtime"])
element["showtime"] = _st + " - " + _rt
result.push(element)
}
return await this.chkOpenHd(call, result)
}
// 活动开启条件
static async chkOpenHd(call: ApiCall, hds) {
let _res = []
for (let index = 0; index < hds.length; index++) {
const element = hds[index];
if (element.opencond) {
let [isOpen, tips] = PublicShared.getOpenCond(call, element.opencond)
if (isOpen) _res.push(element)
} else {
_res.push(element)
}
}
return _res
}
/**根据hdid 获取对应的活动 */
static async getHdidInfo(call: ApiCall, hdid: number) {
let _where: {} = {
hdid: hdid
}
let result = await G.mongodb.collection(HUODONG_SHUJUKU).findOne(_where)
if (result && Object.keys(result).length > 0) {
let openTime = PublicShared.getToDayZeroTime(G.openTime)
let initTime = result.ttype ? call.conn.gud.cTime : openTime
if (result.stime < 99999999) {
result.stime = PublicShared.getToDayZeroTime(initTime + 24 * 3600 * result.stime)
result.rtime = PublicShared.getToDayZeroTime(initTime + 24 * 3600 * result.rtime) - 1
result.etime = PublicShared.getToDayZeroTime(initTime + 24 * 3600 * result.etime) - 1
}
let _st = PublicShared.fmtTime(result["stime"])
let _rt = PublicShared.fmtTime(result["rtime"])
result["showtime"] = _st + " - " + _rt
}
if (result && result._id) delete result._id
return result
}
/**增加游戏内活动 */
static async fmtHD() {
let _r = await G.mongodb.collection(HUODONG_SHUJUKU).findOne({});
if (_r && Object.keys(_r).length > 0) return;
let _con = G.gc.huodong
let [_addHd, _openTime] = [[], PublicShared.getToDayZeroTime(G.openTime)]
for (let index = 0; index < _con.length; index++) {
const element = _con[index];
if (element["ttype"] == 0) {
if (element["stime"] == -1) { // 永久活动
element["stime"] = 0
element["rtime"] = 0
element["etime"] = 0
element["showtime"] = "永久"
} else { // 不是永久活动,直接使用传输时间;检测显示时间
// element.stime = PublicShared.getToDayZeroTime(_openTime + 24 * 3600 * element.stime)
// element.rtime = Number(PublicShared.getToDayZeroTime(_openTime + 24 * 3600 * element.rtime)) + 24 * 3600 - 1
// element.etime = Number(PublicShared.getToDayZeroTime(_openTime + 24 * 3600 * element.etime)) + 24 * 3600 - 1
// let _st = PublicShared.fmtTime(element["stime"])
// let _rt = PublicShared.fmtTime(element["rtime"])
// element["showtime"] = _st + " - " + _rt
}
} else if (element["ttype"] == 1) {
element["showtime"] = "根据玩家注册时间,游戏返回时复写"
}
_addHd.push(element)
}
if (_addHd.length > 0) await G.mongodb.collection(HUODONG_SHUJUKU).insertMany(_addHd);
return
}
}