You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.2 KiB
Lua
136 lines
3.2 KiB
Lua
local skynet = require "skynet"
|
|
local cjson = require "cjson"
|
|
local dateutils = require "dateutils"
|
|
require "functions"
|
|
|
|
--邮件模型
|
|
|
|
local mailmodel = {}
|
|
|
|
function mailmodel:init(mails)
|
|
self.mails = {}
|
|
for i, v in ipairs(mails) do
|
|
self.mails[checkint(v.id)] = v
|
|
end
|
|
end
|
|
|
|
function mailmodel:newmail(mail)
|
|
self.mails[checkint(mail.id)] = mail
|
|
end
|
|
|
|
function mailmodel:checkunread(tp)
|
|
for i,v in pairs(self.mails) do
|
|
if v.tp == tp and (v.status == 0 or v.receive == 0) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function mailmodel:checkread(tp)
|
|
for i,v in pairs(self.mails) do
|
|
if v.tp == tp and v.status == 1 then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function mailmodel:getmail(id)
|
|
return self.mails[id]
|
|
end
|
|
|
|
function mailmodel:readbyid(id)
|
|
local mail = self:getmail(id)
|
|
assert(mail~=nil, "邮件不存在")
|
|
mail.status = 1
|
|
local ok = skynet.call(".maild", "lua", "readmail",id, {status=1})
|
|
assert(ok, "修改邮件失败")
|
|
end
|
|
|
|
function mailmodel:receivereward(id)
|
|
local mail = self:getmail(id)
|
|
assert(mail~=nil, "邮件不存在")
|
|
mail.receive = 1
|
|
local ok = skynet.call(".maild", "lua", "readmail",id, {receive=1})
|
|
assert(ok, "修改邮件失败")
|
|
end
|
|
|
|
|
|
function mailmodel:getallrewards()
|
|
local rewards = {}
|
|
for _, v in pairs(self.mails) do
|
|
if v.status == 0 then
|
|
local rws = v.rewards
|
|
if #rws > 0 then
|
|
for _, reward in ipairs(rws) do
|
|
table.insert(rewards, reward)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return rewards
|
|
end
|
|
|
|
|
|
function mailmodel:readall(tp)
|
|
for i,v in pairs(self.mails) do
|
|
if v.tp == tp then
|
|
v.status = 1
|
|
v.receive = 1
|
|
end
|
|
end
|
|
local ok = skynet.call(".maild", "lua", "readallmail", UID, tp, {status=1, receive=1})
|
|
DEBUG("readall ok = ", ok)
|
|
assert(ok, "修改邮件失败")
|
|
end
|
|
|
|
function mailmodel:delmailbyid(id)
|
|
self.mails[id] = nil
|
|
local ok = skynet.call(".maild", "lua", "delone", id)
|
|
assert(ok, "删除邮件失败")
|
|
end
|
|
|
|
function mailmodel:delreadall(tp)
|
|
local removes = {}
|
|
for k,v in pairs(self.mails) do
|
|
if v.tp == tp and v.status == 1 then
|
|
table.insert(removes, k)
|
|
end
|
|
end
|
|
|
|
for _,v in ipairs(removes) do
|
|
self.mails[v] = nil
|
|
end
|
|
|
|
local ok = skynet.call(".maild", "lua", "delreadall", UID, tp)
|
|
assert(ok, "删除邮件失败")
|
|
end
|
|
|
|
function mailmodel:serialize()
|
|
local resp = {}
|
|
local system_mails = {}
|
|
local daily_mails = {}
|
|
local game_mails = {}
|
|
for i,v in pairs(self.mails) do
|
|
v.params = table.array(v.params or {})
|
|
v.rewards = table.array(v.rewards or {})
|
|
v.receive = checkint(v.receive)
|
|
if v.tp == "system" then
|
|
table.insert(system_mails, v)
|
|
end
|
|
if v.tp == "daily" then
|
|
table.insert(daily_mails, v)
|
|
end
|
|
if v.tp == "game" then
|
|
table.insert(game_mails, v)
|
|
end
|
|
end
|
|
resp.system_mails = table.array(system_mails)
|
|
resp.daily_mails = table.array(daily_mails)
|
|
resp.game_mails = table.array(game_mails)
|
|
return resp
|
|
end
|
|
|
|
return mailmodel
|