123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- function ad_welfare(local_AD_data,pagecode) {
- //三期最终有效福利广告广告计划、材料数据集合
- var ad_welfare_data = {};
- var welfare_plans = local_AD_data.welfare_plans || '';
- var welfare_materials = local_AD_data.welfare_materials || '';
- //福利广告点击次数的缓存;
- var clickcount = localStorage.getItem('clickcounts') || 0;
- localStorage.setItem('clickcounts',clickcount);
- //用户奇偶性广告计划为空不渲染福利广告判断;
- if(typeof Array.isArray != "function") {
- Array.isArray = function(obj){
- return Object.prototype.toString.call(obj) == "[object Array]";
- }
- }
- if(!welfare_plans||!welfare_materials||Array.isArray(welfare_plans)||Array.isArray(welfare_materials)){
- return ;
- }
- var nowTime = parseInt(new Date().getTime()/1000);
- var Welfare_PLANS = Welfare_PLANSobj(welfare_plans,nowTime);
- //随机广告计划
- var lastWelfare_plans = roundwelfare(Welfare_PLANS);
- //lastWelfare_plans 最终执行的随机广告计划合并到ad_welfare_data.welfare_PLANS中
- ad_welfare_data["welfare_PLANS"] = lastWelfare_plans;
- //todaymaterial 已渲染的素材对象 {id:{id:{}}}
- var todaymaterial =JSON.parse(localStorage.getItem('todaymaterial'))||{};
- // var nowwelfare_materials = [{……},{……}]; 无渲染的素材数组;
- var nowwelfare_materials = norepeat_materials_arr(welfare_materials,todaymaterial,nowTime);
- //有效期内素材数组按照权重值高到低排序
- nowwelfare_materials.sort(HsortL);
- //广告计划和素材在ad_welfare_data的welfare_plans和welfare_materials属性中
- ad_welfare_data["welfare_MATERIALS"] = HL_materials(ad_welfare_data,nowwelfare_materials);
- var ad_welfare_dataplanskey = Object.keys(ad_welfare_data.welfare_PLANS)[0];
- var plans_obj = ad_welfare_data.welfare_PLANS;
- //每天点击过一次福利广告发的时间戳;
- var onlyclicktime = localStorage.getItem('onlyclicktime')||0;
- //记录有效广告素材的个数
- var Welfare_PLANS_length = nowwelfare_materials.length+Object.keys(todaymaterial).length;
- //当下发次数大于素材个数时,缓存的素材个数达到素材个数,清空缓存;
- if(Object.keys(todaymaterial).length==Welfare_PLANS_length){
- localStorage.removeItem('todaymaterial');
- var local_AD_data = JSON.parse(localStorage.getItem('local_AD_data'));
- ad_welfare(local_AD_data,pagecode);
- }
- var plans_id = Object.keys(plans_obj)[0];
- //后台需要5次容错率
- if(clickcount >=parseInt(plans_obj[plans_id].day_receive_num)+5 ){
- return ;
- }
- // plans_obj[plans_id].day_receive_num+5
- //渲染广告素材
- welfareshow(ad_welfare_data,pagecode, plans_obj,onlyclicktime,todaymaterial,clickcount,Welfare_PLANS_length);
- }
- function Welfare_PLANSobj(welfare_plans,nowTime){
- //对比有效时间和权重值,筛选当前执行的广告计划
- var welfare_plansIndex = Object.keys(welfare_plans);
- var nowWelfare_plans = {};
- var nowWeight = 0;
- for(var i = 0;i<welfare_plansIndex.length;i++){
- var welfare_plansKey = welfare_plansIndex[i];
- if(welfare_plans[welfare_plansKey].show_starttime<nowTime&&nowTime<welfare_plans[welfare_plansKey].show_endtime){
- //有效期内的广告计划
- var objstore = {};
- objstore[welfare_plansKey] = welfare_plans[welfare_plansKey];
- $.extend(nowWelfare_plans,objstore);
- if(welfare_plans[welfare_plansKey].weight>nowWeight){
- //权重值最大的数值
- nowWeight = welfare_plans[welfare_plansKey].weight;
- }
- }else{
- continue;
- }
- }
- //没有有效广告结束函数执行
- var nowWelfare_planskeys = Object.keys(nowWelfare_plans);
- if(nowWelfare_planskeys.length==0){
- return ;
- }
- //权重值都最高的广告计划有可能多个;
- //当nowWelfare_plans中有1个或以的上广告计划
- if(nowWelfare_planskeys.length!=0){
- var Welfare_PLANSobj = {};
- for(var j=0;j<nowWelfare_planskeys.length;j++){
- var nowWelfare_plansname = nowWelfare_planskeys[j];
- if( nowWelfare_plans[nowWelfare_plansname].weight==nowWeight){
- var objs = {};
- objs[nowWelfare_plansname] = nowWelfare_plans[nowWelfare_plansname];
- $.extend(Welfare_PLANSobj,objs);
- }
- }
- }
- return Welfare_PLANSobj;
- }
- //过滤掉每天渲染过的素材对象
- function norepeat_materials_arr(welfare_materials,todaymaterial,nowTime){
- var materials_arr = [];
- var welfare_materialskeys = Object.keys(welfare_materials);
- for(var j=0; j<welfare_materialskeys.length;j++){
- var materialskeysname = welfare_materialskeys[j]
- if(welfare_materials[materialskeysname].show_starttime<nowTime&&nowTime<welfare_materials[materialskeysname].show_endtime){
- var objs = {};
- objs[materialskeysname] = welfare_materials[materialskeysname];
- if( materialskeysname in todaymaterial){
- continue;
- }else{
- materials_arr.push(objs);
- }
- }else{
- continue;
- }
- }
- return materials_arr;
- }
- //根据有效广告素材数组->得出按权重值建字典数组;
- function HL_materials(ad_welfare_data,nowwelfare_materials){
- var sort_welfare_materials = {};
- for(var k=0;k<nowwelfare_materials.length;k++){
- var itemindexname= Object.keys(nowwelfare_materials[k])[0];
- var weightkey = nowwelfare_materials[k][itemindexname].weight;
- if(weightkey in sort_welfare_materials){
- sort_welfare_materials[weightkey].push(nowwelfare_materials[k]);
- }else{
- sort_welfare_materials[weightkey] = [];
- sort_welfare_materials[weightkey].push(nowwelfare_materials[k]);
- }
- }
- return sort_welfare_materials;
- }
- function welfareshow(ad_welfare_data,pagecode, plans_obj,onlyclicktime,todaymaterial,clickcount,Welfare_PLANS_length){
- //判断是否当天内渲染素材,不是当天内渲染清除之前的
- //每天最后一次下发福利广告的时间戳;
- var lastshowtime;
- if(Boolean(localStorage.getItem("lastshowtime"))){
- lastshowtime = localStorage.getItem("lastshowtime");
- }else{
- localStorage.setItem("lastshowtime",new Date().getTime());
- lastshowtime = localStorage.setItem("lastshowtime",new Date().getTime());
- }
- if(lastshowtime>new Date(new Date().toLocaleDateString()).getTime()){
- localStorage.setItem("lastshowtime",new Date().getTime());
- lastshowtime = localStorage.getItem("lastshowtime");
- }else{
- localStorage.removeItem('todaymaterial');
- var local_AD_data = localStorage.getItem('local_AD_data');
- ad_welfare(local_AD_data,pagecode);
- }
- //此时渲染的目标素材
- var TagMaterial = roundmaterial(ad_welfare_data.welfare_MATERIALS);
- if(Object.keys(TagMaterial)<1){
- return ;
- }
- var plans_id = Object.keys(plans_obj)[0];
- var materal_id = Object.keys(TagMaterial)[0];
- var link_url = TagMaterial[materal_id].link_game;
- if(lastshowtime>new Date(new Date().toLocaleDateString()).getTime()){
- if(clickcount >parseInt(plans_obj[plans_id].day_receive_num)+5 || materal_id in todaymaterial ){
- return ;
- }
- }
- switch(pagecode){
- //最近阅读
- case 'recent_read':read_render(plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length);break;
- //签到
- case 'my':my_sign(plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length);break;
- //章节页
- case 'book_reading':reading_book(plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length);break;
- //充值
- case 'charge':changepay(plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length);break;
- }
- }
- function read_render(plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length){
- //根据具体广告素材渲染【最近阅读页】
- var readposition = 26;
- $(".ad_welfare").show();
- _sendLogShow(plans_id,readposition,materal_id);
- $('.ad_welfare').unbind().bind('click',function(e){
- e.stopPropagation();
- $(this).hide();
- welfare_after(TagMaterial,plans_obj,plans_id,materal_id,readposition,onlyclicktime,link_url,clickcount,Welfare_PLANS_length);
- })
- }
- function my_sign (plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length){
- //根据具体广告素材渲染【签到页面】
- var readposition = 24;
- $(".ad_welfare").hide().show();
- _sendLogShow(plans_id,readposition,materal_id);
- $('.ad_welfare').unbind().bind('click',function(e){
- e.stopPropagation();
- $(".ad_welfare").hide();
- welfare_after(TagMaterial,plans_obj,plans_id,materal_id,readposition,onlyclicktime,link_url,clickcount,Welfare_PLANS_length)
- })
- }
- //点击后执行……(toast显示,)
- function welfare_after(TagMaterial,plans_obj,plans_id,materal_id,readposition,onlyclicktime,link_url,clickcount,Welfare_PLANS_length){
- //点击次数增1;
- // debugger;
- ++clickcount;
- localStorage.removeItem('clickcounts',clickcount);
- localStorage.setItem('clickcounts',clickcount);
- $(".ad_welfare_toast").text("参与互动活动后,可自动领取"+plans_obj[Object.keys(plans_obj)[0]].give_kandian+"书币");
- $(".ad_welfare_toast").show();
- _sendLogClick(plans_id,readposition,materal_id);
- todaymaterialupdate(TagMaterial,plans_obj,plans_id,materal_id,clickcount,Welfare_PLANS_length);
- onlyclickajax(onlyclicktime);
- setTimeout(function(){
- $(".ad_welfare_toast").hide();
- location.href = link_url + "?uid=" + simpleAD.userId + "&channel_id=" + simpleAD.channelId + "&ad_plan=" + plans_id;
- },3000);
- }
- function reading_book(plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length){
- //根据具体广告素材渲染【章节页】
- if(parseInt(window.ad_chapter_index)<parseInt(plans_obj[Object.keys(plans_obj)[0]].float_pop_chapter_num)){
- return ;
- }
- var readposition = 23;
- var imgsrc =plans_obj[plans_id].float_pop_icon || '' ;
- if(!imgsrc){
- return ;
- }
- $('.ad_welfare_float_pop')[0].src = imgsrc;
- var bannertime = new Date().getTime();
- var lastbantime = localStorage.getItem("bannerouttime")||0;
- //测试环境改为5分钟后显示,产品需求15分钟
- if(bannertime-lastbantime>15*60*1000){
- $(".ad_welfare").hide().show();
- }else{
- return ;
- }
- //10秒后关闭弹窗
- var timeout = setTimeout(function(){
- $(".ad_welfare").hide();
- //记录关闭后的banner时间戳
- localStorage.removeItem("bannerouttime");
- localStorage.setItem("bannerouttime",new Date().getTime());
- },10000);
- _sendLogShow(plans_id,readposition,materal_id);
- $('.ad_welfareclick,.ad_welfare').unbind().bind('click',function(e){
- e.stopPropagation();
- localStorage.removeItem("bannerouttime");
- localStorage.setItem("bannerouttime",new Date().getTime());
- $('.ad_welfare').hide();
- welfare_after(TagMaterial,plans_obj,plans_id,materal_id,readposition,onlyclicktime,link_url,clickcount,Welfare_PLANS_length)
- })
- }
- function changepay (plans_obj,TagMaterial,plans_id,materal_id,link_url,onlyclicktime,clickcount,Welfare_PLANS_length){
- //根据具体广告素材渲染【充值页面】
- var readposition = 25;
- var imgsr = plans_obj[plans_id].recharge_pop_icon || '';
- if(!imgsr){
- $(".ad_welfaregload").hide();
- return ;
- }
- $(".ad_welfaregload").hide().show();
- $('.ad_welfareclick')[0].src =imgsr;
- _sendLogShow(plans_id,readposition,materal_id);
- $(".closealert").unbind().bind('click',function(e){
- e.stopPropagation();
- $(".ad_welfaregload").hide();
- })
- $('.ad_welfareclick').unbind().bind('click',function(e){
- e.stopPropagation();
- $(".ad_welfaregload").hide();
- welfare_after(TagMaterial,plans_obj,plans_id,materal_id,readposition,onlyclicktime,link_url,clickcount,Welfare_PLANS_length)
- })
- }
- //一天内上报第一次点击福利广告的uid、channel_id;
- function onlyclickajax(onlyclicktime){
- if(onlyclicktime>new Date(new Date().toLocaleDateString()).getTime()){
- return ;
- }else{
- //判断来到第二天福利广告的点击次数清零,以及发送一次请求报点;
- localStorage.removeItem('clickcounts');
- localStorage.setItem('clickcounts',1);
- $.ajax({
- type: 'POST',
- url: "/api/aduserapi/welfaredot",
- data: {
- uid: simpleAD.userId,
- channel_id: simpleAD.channelId
- },
- success: function (res) {
- if(res.code == 1 ){
- localStorage.removeItem("onlyclicktime");
- localStorage.setItem("onlyclicktime",new Date().getTime());
- }
- },
- error: function (error) {
-
- }
- })
- }
- }
- //一天内展示不重复的素材次数
- function todaymaterialupdate(TagMaterial,plans_obj,plans_id,materal_id,clickcount,Welfare_PLANS_length){
- var todaymaterial =JSON.parse(localStorage.getItem('todaymaterial')) || {} ;
- if(Object.keys(todaymaterial).length<=0){
- $.extend(todaymaterial,TagMaterial);
- localStorage.setItem("todaymaterial",JSON.stringify(todaymaterial));
- localStorage.removeItem('lastshowtime');
- localStorage.setItem('lastshowtime',new Date().getTime());
- }
- // Object.keys(todaymaterial).length<plans_obj[plans_id].day_receive_num
- // clickcount<plans_obj[plans_id].day_receive_num+5
- if( todaymaterial && clickcount<parseInt(plans_obj[plans_id].day_receive_num)+5 ){
- if(materal_id in todaymaterial){
- return ;
- }else{
- $.extend(todaymaterial,TagMaterial);
- localStorage.setItem("todaymaterial",JSON.stringify(todaymaterial));
- localStorage.removeItem('lastshowtime');
- localStorage.setItem('lastshowtime',new Date().getTime());
- }
- }
- }
- //筛选目标素材函数
- // var TagMaterial = roundmaterial(ad_welfare_data.welfare_MATERIALS,showmaterial);
- // {0: Array(1), 10: Array(1), 15: Array(1)}
- // 0: [{…}]
- // 10: [{…}]
- // 15: [{…}]
- function roundmaterial(welfareObj){
- var welfareObjkeys = Object.keys(welfareObj).sort((a,b)=>{return b-a});
- var targetmaterial = {}
- for(var i=0;i<welfareObjkeys.length;i++){
- var roundN = Math.floor(Math.random()*welfareObj[welfareObjkeys[i]].length);
- var targetmaterial = welfareObj[welfareObjkeys[i]][roundN];
- break;
- }
- return targetmaterial;
- }
- //比较函数
- function HsortL(n1,n2) {
- var n1name = Object.keys(n1)[0];
- var n2name = Object.keys(n2)[0];
- return n2[n2name].weight-n1[n1name].weight;
- }
- //在某一对象中随机返回一键值对
- function roundwelfare(obj){
- var objkeys = Object.keys(obj);
- var objkeylength = objkeys.length;
- var roundIndex = Math.floor(Math.random()*objkeylength);
- var objkeyname = objkeys[roundIndex];
- var objs = {}
- objs[objkeyname] = obj[objkeyname];
- return objs;
- }
- function _sendLogShow(adIds,position,mId){
- cpslog([702, {
- map: {
- ad_ids:parseInt(adIds),
- position:position,
- material_id:mId,
- ad_type:'welfare',
- channel_id: simpleAD.channelId,
- user_id:simpleAD.userId
- }
- }, 'ad_sys_show']);
- }
- function _sendLogClick(adIds,position,mId){
- cpslog([702, {
- map: {
- ad_ids:parseInt(adIds),
- position:position,
- material_id:mId,
- ad_type:'welfare',
- channel_id: simpleAD.channelId,
- user_id:simpleAD.userId
- }
- }, 'ad_sys_click']);
- }
|