mailSrv.lua 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. log.info("l_del_expire_mail sql[%s] ret[%s]", tostring(sql), tostring(ret))
  29. -- 删除保留邮件
  30. local expireTime = currTime - 3600 * 24 * 30
  31. sql = string.format("delete from mdl_mail where expireTime >0 and expireTime < %s;", tostring(expireTime))
  32. ret = lib_game_mysql:query(sql)
  33. log.info("l_del_expire_mail sql[%s] ret[%s]", tostring(sql), tostring(ret))
  34. end
  35. -- 过期且有物品未领取
  36. local function l_expire_items_mail()
  37. local currTime = skynet_time()
  38. local sql =
  39. string.format(
  40. "SELECT * FROM `mdl_mail` WHERE expireTime < %s and JSON_LENGTH(items) > 0 limit 100;",
  41. tostring(currTime)
  42. )
  43. log.info("l_expire_items_mail sql[%s]", tostring(sql))
  44. local ret = lib_game_mysql:query(sql)
  45. if ret.errno and ret.errno > 0 then
  46. log.error("l_expire_items_mail 获取过期物品邮件列表失败 ret[%s] sql[%s]", tostring(ret), tostring(sql))
  47. return
  48. end
  49. if not is_empty(ret) then
  50. for k, v in ipairs(ret) do
  51. local id = tonumber(v.id)
  52. local uid = tonumber(v.uid)
  53. -- 玩家邮件且未领取
  54. if not is_robot(uid) and not util_mail:user_is_awarded_mail(uid, id) then
  55. util_mail:user_add_award_mail(uid, id)
  56. -- 发放邮件物品
  57. local items = cjson_decode(v.items)
  58. local keyEvent = string.format("mail-expire-award-%s", tostring(id))
  59. bagData:add_items(uid, items, keyEvent)
  60. end
  61. end
  62. end
  63. end
  64. function CMD.onStart()
  65. timerDelExpireMail = timer.timeOut(60, l_del_expire_mail)
  66. timerExpireMail = timer.timeOut(60, l_expire_items_mail)
  67. end
  68. function CMD.onStop()
  69. -- 取消定时器
  70. timerDelExpireMail.func = nil
  71. timerExpireMail.func = nil
  72. end
  73. baseService.start(CMD, ".mailCenter", true)