import * as _ from "underscore"; import { core } from "cgserver"; import { GCacheTool } from "cgserver"; import { MongoBaseModel } from "cgserver"; import { MongoBaseService } from "cgserver"; export enum ECoinRecord { Game=1,//游戏 Sys,//系统赠送 Compensation, Hold } export enum ECRState { None, //等待补偿 WaitingCompensation, //补偿完成 Done } export class CoinRecordModel extends MongoBaseModel { user_id=-1 game_name="" room_id=0 club_id=-1 pre_coin=0 aft_coin=0 type=ECoinRecord.Game coin=0 create_time=-1 } /** * 为了优化而存在的 */ export class DRCoinRecordModel extends MongoBaseModel { game_name="" room_id=0 club_id=-1 day_time=0 coin=0 } export let GDRCoinRecordSer:DRCoinRecordService = null class DRCoinRecordService extends MongoBaseService { } GDRCoinRecordSer = new DRCoinRecordService("dr_coin_record",DRCoinRecordModel) export let GCoinRecordSer:CoinRecordService = null class CoinRecordService extends MongoBaseService { protected async _addDR(game_name:string,room_id:number,club_id:number,coin:number) { let day_time = core.getTodayStartTime() let cache_key = game_name+"_"+room_id+"_"+day_time let id = GCacheTool.get(cache_key) if(!id) { let one = await GDRCoinRecordSer.get(null,{game_name:game_name,room_id:room_id,day_time:day_time}) if(!one) { let drcrm=new DRCoinRecordModel() drcrm.game_name=game_name drcrm.room_id=room_id drcrm.club_id=club_id drcrm.day_time=day_time drcrm.coin=coin let sr = await GDRCoinRecordSer.insert(drcrm) if(!sr.errcode&&sr.rs.insertedId) { drcrm._id=sr.rs.insertedId id=sr.rs.insertedId GCacheTool.add(cache_key,sr.rs.insertedId,24*60*60*1000) } } else { id = one._id } } if(id) { GDRCoinRecordSer.updateOne({$inc:{coin:coin}},{id:id}) } return } async addGame(user_id:number,game_name:string,room_id:number,club_id:number,pre_coin:number,aft_coin:number,coin:number) { let crm = new CoinRecordModel() crm.user_id=user_id crm.club_id=club_id crm.game_name=game_name crm.room_id=room_id crm.pre_coin=pre_coin crm.aft_coin=aft_coin crm.type=ECoinRecord.Game crm.coin=coin crm.create_time=Date.now() let sr = await this.insert(crm) if(sr.errcode||!sr.rs.insertedId) { return null } crm._id=sr.rs.insertedId if(crm) { this._addDR(game_name,room_id,club_id,-coin) } return crm } async addQuick(user_id:number,type:ECoinRecord,pre_coin:number,aft_coin:number,coin:number) { let crm = new CoinRecordModel() crm.user_id=user_id crm.pre_coin=pre_coin crm.aft_coin=aft_coin crm.type=type crm.coin=coin crm.create_time=Date.now() let sr = await this.insert(crm) if(sr.errcode||!sr.rs.insertedId) { return null } crm._id=sr.rs.insertedId return crm } } GCoinRecordSer = new CoinRecordService("coin_record",CoinRecordModel)