MobilizationModel = MobilizationModel or BaseClass(BaseVo, true) local MobilizationModel = MobilizationModel MobilizationModel.REQUEST_INFO = "MobilizationModel.REQUEST_INFO" MobilizationModel.OPEN_MOBILIZATION_VIEW = "MobilizationModel.OPEN_MOBILIZATION_VIEW"--打开主界面 MobilizationModel.UPDATE_MOBILIZATION_VIEW = "MobilizationModel.UPDATE_MOBILIZATION_VIEW"--更新主界面 MobilizationModel.REQUEST_INFO = "MobilizationModel.REQUEST_INFO"--请求协议 function MobilizationModel:__init() MobilizationModel.Instance = self self:Reset() end function MobilizationModel:Reset() self.view_info = {}--界面信息 self.tab_red_dot_info = {}--主页签红点信息 self.sub_tab_red_dot_info = {}--子页签红点信息 self.act_day = {}--活动天数 self:InitCfg()--初始化配置 end function MobilizationModel:getInstance() if MobilizationModel.Instance == nil then MobilizationModel.Instance = MobilizationModel.New() end return MobilizationModel.Instance end --初始化配置 function MobilizationModel:InitCfg( ) self.mobilization_task_cfg = {}--每日任务配置 local mobilization_task_cfg = DeepCopy(Config.Mobilizetask) for k,v in pairs(mobilization_task_cfg) do local data = v if not self.mobilization_task_cfg[v.subtype] then self.mobilization_task_cfg[v.subtype] = {} end if not self.mobilization_task_cfg[v.subtype][v.day] then self.mobilization_task_cfg[v.subtype][v.day] = {} end self.mobilization_task_cfg[v.subtype][v.day][v.task_type] = data end self.mobilization_task_award_cfg = {}--任务奖励配置 local mobilization_task_award_cfg = DeepCopy(Config.Mobilizetaskaward) for k,v in pairs(mobilization_task_award_cfg) do local data = v data.gain_con = stringtotable(data.gain_con) data.desc = Trim(data.desc) data.gain_desc = Trim(data.gain_desc) data.reward = stringtotable(data.reward) data.gain_link = stringtotable(data.gain_link) if not self.mobilization_task_award_cfg[v.task_type] then self.mobilization_task_award_cfg[v.task_type] = {} end self.mobilization_task_award_cfg[v.task_type][v.task_id] = data end self.mobilization_task_day_cfg = {}--全天奖励配置 local mobilization_task_day_cfg = DeepCopy(Config.Mobilizetaskday) for k,v in pairs(mobilization_task_day_cfg) do local data = v data.reward = stringtotable(data.reward) data.show_model = stringtotable(data.show_model) if not self.mobilization_task_day_cfg[v.subtype] then self.mobilization_task_day_cfg[v.subtype] = {} end self.mobilization_task_day_cfg[v.subtype][#self.mobilization_task_day_cfg[v.subtype] + 1] = data end self.mobilization_task_type_cfg = {}--任务类型配置 local mobilization_task_type_cfg = DeepCopy(Config.Mobilizetasktype) for k,v in pairs(mobilization_task_type_cfg) do local data = v data.task_string = Trim(data.task_string)--任务关键词 data.desc = Trim(data.desc)--任务描述 data.link = stringtotable(data.link)--完成跳转 self.mobilization_task_type_cfg[v.task_type] = data end end --获得任务奖励配置 function MobilizationModel:GetTaskAwardCfg( task_type,award_id ) if task_type and not award_id then return self.mobilization_task_award_cfg[task_type] elseif task_type then return self.mobilization_task_award_cfg[task_type][award_id] end end --获得任务类型配置 function MobilizationModel:GetTaskTypeCfg( task_type ) return self.mobilization_task_type_cfg[task_type] end --获得每日任务配置 function MobilizationModel:GetDayTaskCfg( sub_type,day ) if day and self.mobilization_task_day_cfg[sub_type] then local day = self:GetCurActDay(sub_type) or 1 for i,v in ipairs(self.mobilization_task_day_cfg[sub_type]) do if v.day <= day and v.end_day >= day then return v end end elseif not day and self.mobilization_task_day_cfg[sub_type] then return self.mobilization_task_day_cfg[sub_type] end end --获得每天的任务总配置 function MobilizationModel:GetTaskCfg( sub_type,day ) if sub_type and day then local task_cfg_list = {} for i,v in pairs(Config.Mobilizetask) do if v.day <= day and v.end_day >= day and sub_type == v.subtype then task_cfg_list[#task_cfg_list + 1] = v end end return task_cfg_list else return self.mobilization_task_cfg[sub_type] end end --检查主界面红点 function MobilizationModel:CheckMainIconRedDot(sub_type) local bool = false local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION if sub_type then local icon_sub_type = base_type*1000 + sub_type if sub_type >= 10001 then icon_sub_type = base_type*100000 + sub_type end local red_info = self.tab_red_dot_info[sub_type] if red_info and TableSize(red_info) > 0 then for k,v in pairs(red_info) do if v then bool = true break end end end GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, icon_sub_type, bool) end end --检测全民动员活动图标是否需要开启[兼顾设置全民动员活动内部的活动列表] function MobilizationModel:CheckIconBoolOpen(sub_type) local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type) local level = RoleManager.Instance.mainRoleInfo.level local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type) local is_open = false local end_time = 0 local icon_sub_type = base_type*1000 + sub_type if sub_type >= 10001 then icon_sub_type = base_type*100000 + sub_type end if act_list and act_list.etime then local have_time = TimeUtil:getServerTime( ) - act_list.stime if have_time > 0 then self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600) end end_time = act_list.etime - TimeUtil:getServerTime() end_time = end_time%(24*3600) is_open = end_time > 0 if GetModuleIsOpen(331,base_type) then if is_open then local cur_day = self:GetCurActDay(sub_type) local end_day = cur_day for k,v in pairs(Config.Mobilizetaskday) do if v.day <= cur_day and v.end_day >= cur_day then end_day = v.end_day end end local str = nil local server_info = self:GetServerInfo(sub_type) local sec = act_list.stime + end_day*24*3600 - TimeUtil:getServerTime( ) if server_info and server_info.list then local cur_day = self:GetCurActDay(sub_type) local cur_day_data = server_info.list[cur_day] local task_cfg = self:GetDayTaskCfg(sub_type,cur_day) if task_cfg and cur_day_data then local cur = HtmlColorTxt(cur_day_data.complete_day_task_num, cur_day_data.complete_day_task_num < task_cfg.need_num and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK) str = string.format("进度 %s/%s", cur,task_cfg.need_num) if cur_day_data.complete_day_task_num >= task_cfg.need_num then str = nil sec = -1 end end end --2021.8.2日鸿杰说双服屏蔽 str = nil sec = -1 ActivityIconManager:getInstance():addIcon(icon_sub_type, sec, str) else ActivityIconManager:getInstance():deleteIcon(icon_sub_type) end else -- print("huangcong:MobilizationModel [62]: ",key) end else ActivityIconManager:getInstance():deleteIcon(icon_sub_type) end end --设置全民动员信息 function MobilizationModel:SetMobilizationInfo( scmd ) self.view_info[scmd.sub_type] = {} local list = {} local task_list = nil local sort_func = function ( a, b ) return a.id < b.id end local task_type_complete_list = {}--任务完成列表 local day_task_num = 0--任务总数量 local complete_day_task_num = 0--任务完成总数量 for i,v in ipairs(scmd.list) do task_list = {} task_type_complete_list = {} complete_day_task_num = 0--任务完成总数量 day_task_num = 0--任务总数量 for ii,vv in pairs(v.task_list) do if not task_list[vv.task_type] then task_list[vv.task_type] = {} end task_list[vv.task_type][vv.id] = vv if not task_type_complete_list[vv.task_type] then task_type_complete_list[vv.task_type] = 0 end task_type_complete_list[vv.task_type] = task_type_complete_list[vv.task_type] + (vv.state == 2 and 1 or 0) day_task_num = day_task_num + 1 complete_day_task_num = (vv.state == 2 and 1 or 0) + complete_day_task_num end v.complete_day_task_num = complete_day_task_num v.day_task_num = day_task_num v.task_list = task_list v.task_type_complete_list = task_type_complete_list local day = self:GetCurActDay(scmd.sub_type) or 1 v.day = day if v.start_day <= day and v.end_day >= day then list[day] = v end end scmd.list = list self.view_info[scmd.sub_type] = scmd self:CheckGroupBuyingRed(scmd.sub_type) end function MobilizationModel:GetCurDayTaskTypePro( sub_type,day,task_type ) local cur_pro = 0 local scmd = self:GetServerInfo(sub_type) if scmd and scmd.list and scmd.list[day] and scmd.list[day].task_type_complete_list then cur_pro = scmd.list[day].task_type_complete_list[task_type] or 0 end return cur_pro end --检查团购的红点并刷新主界面图标红点 function MobilizationModel:CheckGroupBuyingRed( sub_type ) local scmd = self:GetServerInfo(sub_type) if not scmd then return end self.tab_red_dot_info[scmd.sub_type] = {}--主页签红点信息 self.sub_tab_red_dot_info[scmd.sub_type] = {}--子页签红点信息 local sort_id = 0 -- print("huangcong:MobilizationModel [start:249] scmd.list:", scmd.list) -- PrintTable(scmd.list) -- print("huangcong:MobilizationModel [end]") for i,v in pairs(scmd.list) do self.tab_red_dot_info[scmd.sub_type][v.day] = v.total_state == 1 for ii,vv in pairs(v.task_list) do if not self.sub_tab_red_dot_info[scmd.sub_type][v.day] then self.sub_tab_red_dot_info[scmd.sub_type][v.day] = {} end for iii,vvv in pairs(vv) do sort_id = nil local cfg_list = self:GetTaskCfg(scmd.sub_type,v.day) local cfg = nil if cfg_list then for l,n in pairs(cfg_list) do if vvv.task_type == n.task_type then cfg = n break end end end if cfg then sort_id = cfg.sort if not self.tab_red_dot_info[scmd.sub_type][v.day] then self.tab_red_dot_info[scmd.sub_type][v.day] = vvv.state == 1 and vvv.finish_pro == 1 end if not self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] then self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] = vvv.state == 1 and vvv.finish_pro == 1 end if self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] and self.tab_red_dot_info[scmd.sub_type][v.day] then break end end end end end -- print("huangcong:MobilizationModel [start:243] :", self.sub_tab_red_dot_info) -- PrintTable(self.sub_tab_red_dot_info) -- print("huangcong:MobilizationModel [end]") --找到当前天数对应的团购类型 local base_type = CustomActivityModel.CustomActBaseType.KF_GROUP_BUYING local act_list = CustomActivityModel:getInstance():getAllActListByBaseType(base_type) or {} local group_buying_sub_type = nil if not self.tab_red_dot_info[sub_type] then self.tab_red_dot_info[sub_type] = {} end if act_list then for i,v in pairs(act_list) do for ii,vv in ipairs(v.condition_list) do if vv[1] == "custom_act" then if not self.tab_red_dot_info[sub_type][tonumber(vv[4])] then--这里主页签还是没有红点就要加上团购的红点 local bool = KfActivityModel:getInstance().act_red_dot_info[base_type] and KfActivityModel:getInstance().act_red_dot_info[base_type][v.sub_type] or false self.tab_red_dot_info[sub_type][tonumber(vv[4])] = bool end break end end end end self:CheckMainIconRedDot(sub_type) end --获得全民动员信息 function MobilizationModel:GetServerInfo( sub_type ) return self.view_info[sub_type] end --获得页签信息 function MobilizationModel:GetTabInfo( ) return self.act_base_list end --获得活动当前天数 function MobilizationModel:GetCurActDay( sub_type ) local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type) local level = RoleManager.Instance.mainRoleInfo.level local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type) local is_open = false local end_time = 0 if act_list and act_list.etime then local have_time = TimeUtil:getServerTime( ) - act_list.stime if have_time > 0 then self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600) end end return self.act_day[sub_type] or 1 end --检测全民动员活动是否开启 function MobilizationModel:CheckActOpen(sub_type) local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type) local level = RoleManager.Instance.mainRoleInfo.level local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type) local is_open = false local end_time = 0 if act_list and act_list.etime then local have_time = TimeUtil:getServerTime( ) - act_list.stime if have_time > 0 then self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600) end local icon_sub_type = base_type*1000 + sub_type if sub_type >= 10001 then icon_sub_type = base_type*100000 + sub_type end end_time = act_list.etime - TimeUtil:getServerTime() is_open = end_time > 0 if GetModuleIsOpen(331,base_type) then if is_open then return true end end end return true end