mailSrv.lua 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. --[[
  2. Descripttion:邮件服务
  3. version:
  4. Author: Neo,Huang
  5. Date: 2022-08-17 16:04:20
  6. LastEditors: Neo,Huang
  7. LastEditTime: 2022-08-20 15:18:25
  8. --]]
  9. local timer = require("timer")
  10. local baseService = require("baseService")
  11. local util_mail = require("utils.util_mail")
  12. local lib_game_mysql = require("lib_game_mysql")
  13. local bagData = require("data.bag")
  14. local timerDelExpireMail = nil
  15. local timerExpireMail = nil
  16. local CMD = {}
  17. -- 清理过期邮件
  18. -- 过期后保留30天 - 永久邮件保留
  19. local function l_del_expire_mail()
  20. -- 全服/渠道邮件且有过期时间要马上删除
  21. local currTime = skynet_time()
  22. local sql =
  23. string.format(
  24. "delete from mdl_mail where (uid=0 or uid=-1) and expireTime >0 and expireTime < %s;",
  25. tostring(currTime)
  26. )
  27. local ret = lib_game_mysql:query(sql)
  28. -- 删除保留邮件
  29. local expireTime = currTime - 3600 * 24 * 30
  30. sql = string.format("delete from mdl_mail where expireTime >0 and expireTime < %s;", tostring(expireTime))
  31. ret = lib_game_mysql:query(sql)
  32. log.info("l_del_expire_mail sql[%s] ret[%s]", tostring(sql), tostring(ret))
  33. end
  34. -- 过期且有物品未领取
  35. local function l_expire_items_mail()
  36. local currTime = skynet_time()
  37. local sql =
  38. string.format(
  39. "SELECT * FROM `mdl_mail` WHERE expireTime < %s and JSON_LENGTH(items) > 0 limit 100;",
  40. tostring(currTime)
  41. )
  42. local ret = lib_game_mysql:query(sql)
  43. if ret.errno and ret.errno > 0 then
  44. log.error("l_expire_items_mail 获取过期物品邮件列表失败 ret[%s] sql[%s]", tostring(ret), tostring(sql))
  45. return
  46. end
  47. if not is_empty(ret) then
  48. for k, v in ipairs(ret) do
  49. local id = tonumber(v.id)
  50. local uid = tonumber(v.uid)
  51. -- 玩家邮件且未领取
  52. if not is_robot(uid) and not util_mail:user_is_awarded_mail(uid, id) then
  53. util_mail:user_add_award_mail(uid, id)
  54. -- 发放邮件物品
  55. local items = cjson_decode(v.items)
  56. local keyEvent = string.format("mail-expire-award-%s", tostring(id))
  57. bagData:add_items(uid, items, keyEvent)
  58. end
  59. end
  60. end
  61. end
  62. function CMD.onStart()
  63. timerDelExpireMail = timer.timeOut(60, l_del_expire_mail)
  64. timerExpireMail = timer.timeOut(60, l_expire_items_mail)
  65. end
  66. function CMD.onStop()
  67. -- 取消定时器
  68. timerDelExpireMail.func = nil
  69. timerExpireMail.func = nil
  70. end
  71. baseService.start(CMD, ".mailCenter", true)