MailModel = MailModel or BaseClass(EventDispatcher)
|
|
|
|
function MailModel:__init()
|
|
MailModel.Instance = self
|
|
|
|
self.mail_list = {} --邮件的基本信息列表
|
|
self.business_mail_list = {} --交易邮件的基本信息列表
|
|
self.mail_tab_index = 1
|
|
self.now_select_mail = nil --目前正在查看的邮件基本信息
|
|
self.select_mail_list = {} --被选中的邮件列表
|
|
self.attachment_time_list = {} --提取附件后的邮件列表,key为ID,value为提取时的时间
|
|
end
|
|
|
|
function MailModel:getInstance()
|
|
if MailModel.Instance == nil then
|
|
MailModel.New()
|
|
end
|
|
return MailModel.Instance
|
|
end
|
|
|
|
function MailModel:Clear()
|
|
self:CancelTimer()
|
|
self.now_select_mail = nil
|
|
self.select_mail_list = {}
|
|
end
|
|
|
|
function MailModel:SetAllMailList(list)
|
|
local mail_list = {}
|
|
local business_mail_list = {}
|
|
for k,v in pairs(list) do
|
|
if v.type == 5 then
|
|
table.insert(business_mail_list,v)
|
|
else
|
|
table.insert(mail_list,v)
|
|
end
|
|
end
|
|
self:SetMailList(mail_list)
|
|
self:SetBusinessMailList(business_mail_list)
|
|
end
|
|
|
|
|
|
|
|
--设置保存邮件的列表(接受所有存储在服务器的邮件,筛选出要显示的邮件)
|
|
function MailModel:SetMailList(list)
|
|
self.mail_list = list --邮件列表
|
|
local delete_index = {} --要删除的邮件的索引集合
|
|
for i, v in ipairs(self.mail_list) do
|
|
local gap = tonumber(v.effect_et) - TimeUtil:getServerTime() --获取信件存储剩余时间
|
|
if gap < 0 then
|
|
table.insert(delete_index, i)
|
|
end
|
|
end
|
|
--删除超出限制的邮件
|
|
local del_num = 0
|
|
for i, v in ipairs(delete_index) do
|
|
local index = v - del_num
|
|
table.remove(self.mail_list, index)
|
|
del_num = del_num + 1
|
|
end
|
|
self:SortFun(1)
|
|
self:Fire(MailEvent.UPDATE_MAIL_LIST) --更新邮件显示列表
|
|
end
|
|
|
|
function MailModel:SetBusinessMailList(list)
|
|
self.business_mail_list = list --邮件列表
|
|
local delete_index = {} --要删除的邮件的索引集合
|
|
for i, v in ipairs(self.business_mail_list) do
|
|
local gap = tonumber(v.effect_et) - TimeUtil:getServerTime() --获取信件存储剩余时间
|
|
if gap < 0 then
|
|
table.insert(delete_index, i)
|
|
end
|
|
end
|
|
--删除超出限制的邮件
|
|
local del_num = 0
|
|
for i, v in ipairs(delete_index) do
|
|
local index = v - del_num
|
|
table.remove(self.business_mail_list, index)
|
|
del_num = del_num + 1
|
|
end
|
|
self:SortFun(5)
|
|
self:Fire(MailEvent.UPDATE_MAIL_LIST) --更新邮件显示列表
|
|
end
|
|
|
|
function MailModel:GetMailList()
|
|
self.mail_list = self.mail_list or {}
|
|
|
|
local delete_index = {} --要删除的邮件的索引集合
|
|
for i, v in ipairs(self.mail_list) do
|
|
local gap = tonumber(v.effect_et) - TimeUtil:getServerTime() --获取信件存储剩余时间
|
|
if gap < 0 then
|
|
table.insert(delete_index, i)
|
|
end
|
|
end
|
|
|
|
--删除超出限制的邮件
|
|
local del_num = 0
|
|
for i, v in ipairs(delete_index) do
|
|
local index = v - del_num
|
|
table.remove(self.mail_list, index)
|
|
del_num = del_num + 1
|
|
end
|
|
self:SortFun(1)
|
|
|
|
return self.mail_list
|
|
end
|
|
|
|
function MailModel:GetBusinessMailList()
|
|
self.business_mail_list = self.business_mail_list or {}
|
|
|
|
local delete_index = {} --要删除的邮件的索引集合
|
|
for i, v in ipairs(self.business_mail_list) do
|
|
local gap = tonumber(v.effect_et) - TimeUtil:getServerTime() --获取信件存储剩余时间
|
|
if gap < 0 then
|
|
table.insert(delete_index, i)
|
|
end
|
|
end
|
|
|
|
--删除超出限制的邮件
|
|
local del_num = 0
|
|
for i, v in ipairs(delete_index) do
|
|
local index = v - del_num
|
|
table.remove(self.business_mail_list, index)
|
|
del_num = del_num + 1
|
|
end
|
|
self:SortFun(5)
|
|
|
|
return self.business_mail_list
|
|
end
|
|
|
|
--对邮件进行排序(按接受时间排序,最新收到的邮件最高)
|
|
--新 先是分为两部分,未读的在顶部,已读的在下面,两部分再分别按时间排序
|
|
function MailModel:SortFun(type)
|
|
local not_read = {}
|
|
local has_read = {}
|
|
|
|
if type == 5 then
|
|
for i,v in ipairs(self.business_mail_list) do
|
|
if v.state == 2 or ( v.is_attach == 1 and v.state ~= 3) then --未读
|
|
v.client_read_state = 0
|
|
table.insert(not_read, self.business_mail_list[i])
|
|
elseif v.state == 1 or v.state == 3 then --已读 和 已领取
|
|
v.client_read_state = 1
|
|
table.insert(has_read, self.business_mail_list[i])
|
|
end
|
|
end
|
|
else
|
|
for i,v in ipairs(self.mail_list) do
|
|
if v.state == 2 or ( v.is_attach == 1 and v.state ~= 3) then --未读
|
|
v.client_read_state = 0
|
|
table.insert(not_read, self.mail_list[i])
|
|
elseif v.state == 1 or v.state == 3 then --已读 和 已领取
|
|
v.client_read_state = 1
|
|
table.insert(has_read, self.mail_list[i])
|
|
end
|
|
end
|
|
end
|
|
|
|
-- not_read = self:SortMore(not_read)
|
|
-- has_read = self:SortMore(has_read)
|
|
for i,v in ipairs(has_read) do
|
|
table.insert(not_read, v)
|
|
end
|
|
|
|
local arg = {"important","client_read_state","time", "mail_id"}
|
|
local condition = {Array.UPPER,Array.LOWER,Array.UPPER, Array.UPPER}
|
|
SortTools.MoreKeysSorter(not_read, arg, condition)
|
|
|
|
|
|
if type == 5 then
|
|
self.business_mail_list = not_read
|
|
else
|
|
self.mail_list = not_read
|
|
end
|
|
end
|
|
|
|
function MailModel:SortMore(list)
|
|
if not list then return end
|
|
|
|
local arg = {"time", "mail_id"}
|
|
local condition = {Array.UPPER, Array.UPPER}
|
|
SortTools.MoreKeysSorter(list, arg, condition)
|
|
return list
|
|
end
|
|
|
|
--增加邮件
|
|
function MailModel:AddMailList(list)
|
|
if list then
|
|
for i, v in ipairs(list) do
|
|
if v.type == 5 then
|
|
table.insert(self.business_mail_list, v)
|
|
else
|
|
table.insert(self.mail_list, v)
|
|
end
|
|
end
|
|
end
|
|
self:SortFun(1)
|
|
self:SortFun(5)
|
|
self:Fire(MailEvent.UPDATE_MAIL_LIST)
|
|
end
|
|
|
|
--删除邮件
|
|
function MailModel:DeleteMail(mail_ids)
|
|
local is_find = false
|
|
if mail_ids then
|
|
for i = 1, #mail_ids do
|
|
for k, v in ipairs(self.mail_list) do
|
|
if v.mail_id == mail_ids[i].mail_id then
|
|
table.remove(self.mail_list, k)
|
|
is_find = true
|
|
break
|
|
end
|
|
end
|
|
for k, v in ipairs(self.business_mail_list) do
|
|
if v.mail_id == mail_ids[i].mail_id then
|
|
table.remove(self.business_mail_list, k)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
self:Clear()
|
|
self:SortFun(1)
|
|
self:SortFun(5)
|
|
-- self:Fire(MailEvent.UPDATE_MAIL_LIST)
|
|
end
|
|
end
|
|
|
|
--更改邮件的数据
|
|
function MailModel:UpdateMailData(data)
|
|
if data == nil then return end
|
|
if data.type ~= 5 then
|
|
for i, v in ipairs(self.mail_list) do
|
|
if v.mail_id == data.mail_id then
|
|
v.type = data.type
|
|
v.state = data.state
|
|
v.title = data.title
|
|
v.is_attach = data.is_attach
|
|
v.time = data.time
|
|
v.effect_et = data.effect_et
|
|
|
|
self:Fire(MailEvent.UPDATE_MAIL_ITEM, v)
|
|
break
|
|
end
|
|
end
|
|
elseif data.type == 5 then
|
|
for i, v in ipairs(self.business_mail_list) do
|
|
if v.mail_id == data.mail_id then
|
|
v.type = data.type
|
|
v.state = data.state
|
|
v.title = data.title
|
|
v.is_attach = data.is_attach
|
|
v.time = data.time
|
|
v.effect_et = data.effect_et
|
|
|
|
self:Fire(MailEvent.UPDATE_MAIL_ITEM, v)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--检查系统邮件的红点
|
|
function MailModel:CheckSystemMailRedDot()
|
|
local mail_list = self:GetMailList()
|
|
if not mail_list or #mail_list <= 0 then
|
|
return
|
|
end
|
|
local show = false
|
|
for i,v in ipairs(mail_list) do
|
|
if v.state == 2 or (v.state ~= 3 and v.is_attach == 1) then
|
|
show = true
|
|
break
|
|
end
|
|
end
|
|
return show
|
|
end
|
|
|
|
--检查交易邮件的红点
|
|
function MailModel:CheckBusinessMailRedDot()
|
|
local business_mail_list = self:GetBusinessMailList()
|
|
if not business_mail_list or #business_mail_list <= 0 then
|
|
return
|
|
end
|
|
local show = false
|
|
for i,v in ipairs(business_mail_list) do
|
|
if v.state == 2 or (v.state ~= 3 and v.is_attach == 1) then
|
|
show = true
|
|
break
|
|
end
|
|
end
|
|
return show
|
|
end
|
|
|
|
--判断邮件红点数量
|
|
function MailModel:GetMailRedNum( )
|
|
local red_num = 0
|
|
local mail_list = self:GetMailList()
|
|
local business_mail_list = self:GetBusinessMailList()
|
|
for i,v in ipairs(mail_list) do
|
|
if v.state == 2 or (v.state ~= 3 and v.is_attach == 1) then
|
|
red_num = red_num + 1
|
|
end
|
|
end
|
|
for i,v in ipairs(business_mail_list) do
|
|
if v.state == 2 or (v.state ~= 3 and v.is_attach == 1) then
|
|
red_num = red_num + 1
|
|
end
|
|
end
|
|
return red_num
|
|
end
|
|
|
|
--再处理一次邮件的详细信息 避免有些标题空白的情况
|
|
function MailModel:HandleMailDetail(vo)
|
|
if not vo then return end
|
|
local is_system_mail = false
|
|
|
|
if vo.title == nil or vo.title == "" then
|
|
for k,v in pairs(self.mail_list) do
|
|
if vo.mail_id == v.mail_id then
|
|
if v.type == 1 or v.type == 3 then
|
|
is_system_mail = true
|
|
end
|
|
end
|
|
end
|
|
|
|
if is_system_mail then
|
|
if vo.module_id and vo.sub_module_id then
|
|
local cfg
|
|
|
|
if vo.sub_module_id == 0 then
|
|
cfg = Config.Moduleid[vo.module_id]
|
|
vo.title = cfg.module_name.."内容"
|
|
vo.content = cfg.module_name.."内容"
|
|
else
|
|
cfg = Config.Modulesub[vo.module_id.."@"..vo.sub_module_id]
|
|
vo.title = cfg.sub_name.."内容"
|
|
vo.content = cfg.module_name.."内容"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return vo
|
|
end
|
|
|
|
-- 获取到邮件的类型
|
|
function MailModel:GetMailType(mail_id)
|
|
local type
|
|
if self.mail_list and mail_id then
|
|
for k,v in pairs(self.mail_list) do
|
|
if v and v.mail_id == mail_id then
|
|
type = v.type
|
|
return type
|
|
end
|
|
end
|
|
for k,v in pairs(self.business_mail_list) do
|
|
if v and v.mail_id == mail_id then
|
|
type = v.type
|
|
return type
|
|
end
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function MailModel:GetMailEffectTime(mail_id)
|
|
for k,v in pairs(self.business_mail_list) do
|
|
if mail_id ==v.mail_id then
|
|
return v.effect_et
|
|
end
|
|
end
|
|
for k,v in pairs(self.mail_list) do
|
|
if mail_id ==v.mail_id then
|
|
return v.effect_et
|
|
end
|
|
end
|
|
end
|
|
|
|
function MailModel:SortMailEffectTime()
|
|
self:CancelTimer()
|
|
local tb = {}
|
|
for k,v in pairs(self.business_mail_list) do
|
|
local temp = {}
|
|
temp.mail_id = v.mail_id
|
|
temp.runout_time = v.effect_et - TimeUtil:getServerTime()
|
|
table.insert(tb,temp)
|
|
end
|
|
for k,v in pairs(self.mail_list) do
|
|
local temp = {}
|
|
temp.mail_id = v.mail_id
|
|
temp.runout_time = v.effect_et - TimeUtil:getServerTime()
|
|
table.insert(tb,temp)
|
|
end
|
|
local sort_func = function ( a, b )
|
|
return a.runout_time < b.runout_time
|
|
end
|
|
table.sort(tb, sort_func)
|
|
local timer_func = function()
|
|
self:CancelTimer()
|
|
self:Fire(MailEvent.UPDATE_TOP_BAR_RED)
|
|
end
|
|
if tb and tb[1] and tb[1].runout_time>0 then
|
|
self.timer_id = GlobalTimerQuest:AddPeriodQuest(timer_func, tb[1].runout_time+2)
|
|
end
|
|
end
|
|
|
|
function MailModel:CancelTimer()
|
|
if self.timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.timer_id)
|
|
self.timer_id = nil
|
|
end
|
|
end
|