import BaseController from '../common/base.controller' import { router } from '../decorators/router' import { ActRecord } from '../models/ActRecord' import { BaseConst } from '../constants/BaseConst' import { ZError } from '../common/ZError' import { ItemInfo } from '../logic/ItemDef' import ItemCtrl from '../logic/ItemCtrl' import { BagItem } from '../models/BagItem' import assert from 'assert' export default class ActivityController extends BaseController { @router('post /api/:accountid/update_event') async generalEvent(req: any) { let { id, accountid } = req.params assert(id, 'id requiresd') let cfgMap = global.$cfg.get(BaseConst.INCOME) id = +id if (!cfgMap.has(id)) { throw new ZError(11, 'no cfg found') } let cfg = cfgMap.get(id) let day let rest = 0 if (cfg.repeat) { day = (new Date()).format('yyyy-MM-dd', true) } else { day = (new Date(0)).format('yyyy-MM-dd', true) } let record = (await ActRecord.findOrCreate({ accountid, actid: id, day })).doc if (!cfg.repeat && record.count > 0) { throw new ZError(12, 'already goted') } if (cfg.repeat && record.count >= cfg.frequency) { throw new ZError(13, 'reach today max count') } if (cfg.interval && (Date.now() - record.lasttime) < cfg.interval) { throw new ZError(14, '操作太快了') } record.count += 1 rest = cfg.frequency - record.count rest = rest <= 0 ? 0 : rest record.lasttime = Date.now() let arr0 = cfg.income.split('|') let itemStr for (let str of arr0) { let arr1 = str.split(':') let maxCount = 1 if (arr1.length >= 3) { maxCount = parseInt(arr1[2]) } if (record.count >= maxCount) { itemStr = `${arr1[0]}:${arr1[1]}` } } if (!itemStr) { throw new ZError(15, 'cfg error') } await record.save() const itemInfos: ItemInfo[] = ItemCtrl.getItemsByInfo(itemStr) let results if (id == 90001 || id == 90002) { const account = req.user results = await BagItem.parseCardItems(account, itemInfos) await account.save() } else { await BagItem.addItems(accountid, itemInfos) results = itemInfos } return { items: results, rest } } }