--[[ Descripttion:邮件服务 version: Author: Neo,Huang Date: 2022-08-17 16:04:20 LastEditors: Neo,Huang LastEditTime: 2022-08-20 15:18:25 --]] local timer = require("timer") local baseService = require("baseService") local util_mail = require("utils.util_mail") local lib_game_mysql = require("lib_game_mysql") local bagData = require("data.bag") local timerDelExpireMail = nil local timerExpireMail = nil local CMD = {} -- 清理过期邮件 -- 过期后保留30天 - 永久邮件保留 local function l_del_expire_mail() -- 全服/渠道邮件且有过期时间要马上删除 local currTime = skynet_time() local sql = string.format( "delete from mdl_mail where (uid=0 or uid=-1) and expireTime >0 and expireTime < %s;", tostring(currTime) ) local ret = lib_game_mysql:query(sql) log.info("l_del_expire_mail sql[%s] ret[%s]", tostring(sql), tostring(ret)) -- 删除保留邮件 local expireTime = currTime - 3600 * 24 * 30 sql = string.format("delete from mdl_mail where expireTime >0 and expireTime < %s;", tostring(expireTime)) ret = lib_game_mysql:query(sql) log.info("l_del_expire_mail sql[%s] ret[%s]", tostring(sql), tostring(ret)) end -- 过期且有物品未领取 local function l_expire_items_mail() local currTime = skynet_time() local sql = string.format( "SELECT * FROM `mdl_mail` WHERE expireTime < %s and JSON_LENGTH(items) > 0 limit 100;", tostring(currTime) ) log.info("l_expire_items_mail sql[%s]", tostring(sql)) local ret = lib_game_mysql:query(sql) if ret.errno and ret.errno > 0 then log.error("l_expire_items_mail 获取过期物品邮件列表失败 ret[%s] sql[%s]", tostring(ret), tostring(sql)) return end if not is_empty(ret) then for k, v in ipairs(ret) do local id = tonumber(v.id) local uid = tonumber(v.uid) -- 玩家邮件且未领取 if not is_robot(uid) and not util_mail:user_is_awarded_mail(uid, id) then util_mail:user_add_award_mail(uid, id) -- 发放邮件物品 local items = cjson_decode(v.items) local keyEvent = string.format("mail-expire-award-%s", tostring(id)) bagData:add_items(uid, items, keyEvent) end end end end function CMD.onStart() timerDelExpireMail = timer.timeOut(60, l_del_expire_mail) timerExpireMail = timer.timeOut(60, l_expire_items_mail) end function CMD.onStop() -- 取消定时器 timerDelExpireMail.func = nil timerExpireMail.func = nil end baseService.start(CMD, ".mailCenter", true)