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 PlayerRecord = oo.class() PlayerRecord.recordList = {} function PlayerRecord:Init() self:CreateTable() end --跨天 function PlayerRecord:OnNewDay() self:CreateTable() end --5秒Timer function PlayerRecord:On5SecTimer() if not skynet.server.gameServer.curServerConfig then return end self:Save() end --创建表 function PlayerRecord: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 = nil for dbIndex = 1, skynet.server.gameConfig.DBInfoConfig.playerTableCount , 1 do sql = string.format(sqlUrl.createPlayerRecord , year , month , day ) skynet.server.db:QueryPlayer( dbIndex , sql ) end end --新增记录 function PlayerRecord:Add( userId , type , ... ) local p1,p2,p3,p4,p5,p6,p7,p8 = ... local dbIndex = math.floor(userId / 10000000) if not self.recordList[ dbIndex ] then self.recordList[ dbIndex ] = {} end local data = {} data.p1 = p1 data.p2 = p2 data.p3 = p3 data.p4 = p4 data.p5 = p5 data.p7 = p7 data.p8 = p8 table.insert( self.recordList[ dbIndex ] , { userId = userId , type = type , data = json:encode(data) } ) end --保存记录 function PlayerRecord:Save() 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 dbIndex, value in pairs(self.recordList) do local sql = string.format(sqlUrl.insertRecordToPlayerRecord1 , year , month ,day) local saveCount = 0 for k, v in pairs(value) do pararm = string.format(sqlUrl.insertRecordToPlayerRecord2 , v.userId , v.type , v.data) sql = sql .. pararm self.recordList[ dbIndex ][ k ] = nil saveCount = saveCount + 1 if saveCount >= skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then break end end if saveCount > 0 then sql = string.sub(sql , 1, -2 ) --去掉最后一个逗号 local dbData = skynet.server.db:QueryPlayer( dbIndex , sql ) if dbData and dbData.affected_rows then log.info(string.format("保存玩家数据记录 数据库索引 %d 应保存人数 %d 实际保存人数 %d 保存用时 %d 秒", dbIndex , saveCount , dbData.affected_rows , skynet.GetTime() - time )) end end end end skynet.server.playerRecord = PlayerRecord return PlayerRecord