弹窗悬浮窗设置问题 :上下架后重新弹窗

需求#

1、用户登录状态只弹一次,未登录每次都弹

2、设置时间有效期

3、当运营对上架弹窗进行下架重新上架后进行弹窗

4、当新增弹窗并上架后重新弹窗

实现

1、时间有效期

这方面后台对时间做了限制,不允许时间有重叠,所以直接在数据库里查询即可:date BETWEEN START_TIME AND END_TIME
其中date改为now()也可,这里因为某些原因是在后台给的new Date()作为参数传入sql语句。

2、用户登录后每天只弹一次,未登录每次都弹

这方面一开始时是交由前端对cookie进行判断,但是会出现客户端登录注销后依旧弹窗的问题,所以后面交由后台处理返回标志位给前端来进行判断是否展示。
后台做的逻辑判断如下:
1:取出session中的户头号,判断是否为空。
2:若户头号为空,则返回给前台false。
3:若户头号不为空,进行之后的逻辑判断。
p.s.:对取得的弹窗信息进行判断,若没有取到值在最外层对flag设值不可见。以下不再重复。

3、当运营对上架弹窗进行下架重新上架后进行弹窗

这一块主要是对redis缓存进行操作,一开始想的是用数据库增加字段来记录,但是修改数据库表的流程比较麻烦,要提各种单,所以采用缓存的方式来解决。
首先流程是设置一个存相关信息的key,field采取弹窗id+":"+户头号的方式,那么date的值其实可以随便存了,只要有值就好,我这边存的是户头号。
那么每次调用弹窗的方法时,会首先走户头号是否为空的逻辑。以下情景设置在户头号不为空的逻辑。
首先从redis中取key下面所有的field的set集合,进行遍历,比较field与当前的id+":"+户头号的组合是否匹配,如果有匹配上的,那么就将flag返回false;如果未匹配上,就将flag返回true,并将id+":"+户头号的field存入弹窗的key值下面,并设置有效期为今天剩余的时间。
那么我们怎么跟踪上下架的状态呢?
在后台进行下架处理时,对时间进行跟踪,如果下架,那么从redis中取key下面所有的field的set集合,进行遍历,对field进行分割,将所有id匹配的field删除掉。这样的话前台再调用弹窗的方法时,就没有这个field就会进行弹窗处理。

4、当新增弹窗并上架后重新弹窗

这块的逻辑和上面的一样,就是会对id进行判断,如果不同则重新弹窗。

//前台代码
 if(CollectionUtils.isNotEmpty(dmoList)){
             //只获取一个值
             //这块因为之前没有做时间的限制,所以还未修改
             FundPopupSuspendDmo fundPopupSuspendDmo = dmoList.get(0);
             //将数据存入dto中
             fundPopSuspendDto.setImgUrl(fundPopupSuspendDmo.getPicAddress());
             fundPopSuspendDto.setLink(fundPopupSuspendDmo.getPicLinkAddress());
             //判断户头号是否为空
             if (!StringUtils.isBlank(accountNo)) {
                 Set<String> fieldSet = new HashSet<>();
                 //获取key值下面的field集合
                 fieldSet = cacheService.getFieldSet(FswsCacheConstants.FSWS_POPUP_CODE);
                 for (String checkSet: fieldSet) {
                     //如果field集合中有field与户头号加id相同,则设置弹窗不可见并返回
                     if(checkSet.equals(fundPopupSuspendDmo.getId()+":"+accountNo)){
                         fundPopSuspendDto.setShowSwitch(false);
                         return fundPopSuspendDto;
                     }
                  }
                 //缓存field集合中无相同值,将其存入缓存,并设置弹窗可见走判断流程
                 cacheService.set(FswsCacheConstants.FSWS_POPUP_CODE, fundPopupSuspendDmo.getId()+":"+accountNo, accountNo, 86400 - (int)DateUtils.getFragmentInSeconds(Calendar.getInstance(),Calendar.DATE));
                 fundPopSuspendDto.setShowSwitch(true);
                 return fundPopSuspendDto;
             }else{
                 //弹窗数据不为空且未登录则每次都弹窗
                 fundPopSuspendDto.setShowSwitch(true);
             }
//后台代码
    String id = fundPopupSuspendDmo.getId()+"";
            Set<String> popupSet = new HashSet<>();
        popupSet = cacheService.getFieldSet(FswsCacheConstants.FSWS_POPUP_CODE);
        for (String s :popupSet) {
            String[] hSet = s.split(":");
            if (id.equals(hSet[0])) {
                cacheService.delete(FswsCacheConstants.FSWS_POPUP_CODE, s);
            }
        }

写在最后:想到的方法不是最好的,但是可以解决问题。
很多地方因为前面的设计问题还未优化 ,待解决//TO-DO

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,981评论 3 119
  • 一个人,在家,自由铺天盖地,就像蜗牛住在壳里,自己做自己的老大。 鲁迅说:躲进小楼成一统,管他冬夏与春秋。 不用说...
    8724a133b8a3阅读 120评论 0 1
  • 上周五,学校组织留守儿童去黄河公园和地坑院游学,一早,我们六位‍老师就带着25名留守儿童出发了。对于这群特殊的...
    陕县2896杜媛媛阅读 312评论 1 1
  • 2018.4.5 星期五 雨 最近的状态真的很不好,无心恋爱,无心学习,感觉整个人处于一种很被动的状态 我不知道怎...
    小猫耳7_阅读 297评论 0 1
  • 或许是因为一杯酸奶,或许是你温柔的一句低语又或许是公交车上的某个瞬间,总之那一年让我无数次的想起你直到今天… 春暖...
    等一个人的酸奶阅读 331评论 0 1