|
|
- 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
|