local skynet = require "skynet" local oo = require "Class" local log = require "Log" local sqlUrl = require "SqlUrl" local serverId = tonumber(skynet.getenv "serverId") local db = require "DB" local json =require "json" local GameRecord = oo.class() GameRecord.recordList = {} function GameRecord:Init() self:CreateTable() end --跨天 function GameRecord:OnNewDay() self:CreateTable() end --5秒Timer function GameRecord:On5SecTimer() if not skynet.server.gameServer.curServerConfig or not skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then return end self:Save() end --创建表 function GameRecord:CreateTable() local time = skynet.GetTime() local year = os.date("*t", time).year local month = os.date("*t", time).month local day = os.date("*t", time).day local sql = string.format(sqlUrl.createGameRecord , year , month , day ) skynet.server.db:Query( "game" , sql ) end --新增记录 function GameRecord:Add( userId , type , ... ) if skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount or 0 > 0 then local p1,p2,p3,p4,p5,p6,p7,p8 = ... local data = {} data.p1 = p1 data.p2 = p2 data.p3 = p3 data.p4 = p4 data.p5 = p5 data.p7 = p7 data.p8 = p8 data.recordTime = skynet.server.common:GetStrTime(skynet.GetTime()) table.insert( self.recordList , { userId = userId , type = type , data = json:encode(data) } ) end end --保存记录 function GameRecord:Save() if skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount > 0 then local pararm = nil local time = skynet.GetTime() local year = os.date("*t", time).year local month = os.date("*t", time).month local day = os.date("*t", time).day for k, v in pairs(self.recordList) do local sql = string.format(sqlUrl.insertRecordToGameRecord1 , year , month ,day) local saveCount = 0 pararm = string.format(sqlUrl.insertRecordToGameRecord2 , v.userId , v.type , v.data) sql = sql .. pararm self.recordList[ k ] = nil saveCount = saveCount + 1 if saveCount >= skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then break end if saveCount > 0 then sql = string.sub(sql , 1, -2 ) --去掉最后一个逗号 local dbData = skynet.server.db:Query( "game" , sql ) if dbData and dbData.affected_rows then log.debug(string.format("保存游戏数据记录 应保存数量 %d 实际保存数量 %d 保存用时 %d 秒", saveCount , dbData.affected_rows , skynet.GetTime() - time )) end end end end end skynet.server.gameRecord = GameRecord return GameRecord