80 lines
2.3 KiB
TypeScript
80 lines
2.3 KiB
TypeScript
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
|
|
}
|
|
}
|
|
}
|