后台更新APP的不同场景的背景图

 

1.需求分析

1.后台管理三大场景背景图片,前台进行数据的展示。

2.根据场景背景图片设置的不同,向前台展示不同风格的背景。

3.根据具体的节日或者运营需要,可以更新不同的主题。    

2.设计要点

1.后台通过配合对三大场景进行图片的配置。

2.通过将需要展示的图片放入到缓存中,福才放到系统初始化中,在用户的初始化过程中,直接拿到相应的背景图。

3.主要流程图

4. 主要接口定义

4.1.查询三大场景的固定列表

主要内容:

1.获取后台管理的背景主页。

2.主页分为两部分:上面为固定主题,下面为正在使用的主题(正在使用的为默认背景的时候从未使用的背景中倒序选择一套数据)。

}

4.2 .下一页:获取未使用的场景列表

4.3.对于数据库的增、删、改。

 

5.通过定时器向缓存推送一条背景主题(dubbo接口)

//刷新数据到缓存

         @Override

         public void addUseSceneToRedis() {

                    //1.缓存中有数据(1.看是否是默认主题(是的话去库中查找是否有数据,有的话替换默认,没有返回默认)

                    //2.看时间是否过期(过期重新从数据库中获取一条,否则返回当前数据))

                    //3.缓存中没有数据(从库中获取一条数据放入缓存)

}

 

//刷新数据到缓存
    @Override
    public void addUseSceneToRedis() {
        //1.缓存中有数据(1.看是否是默认主题(是的话去库中查找是否有数据,有的话替换默认,没有返回默认)
        //2.看时间是否过期(过期重新从数据库中获取一条,否则返回当前数据))
        //3.缓存中没有数据(从库中获取一条数据放入缓存)
        //第一步
        IKvCache<String> kvCache = cacheFactory.getKvCache("theme", cacheConfig, String.class);
        String threeSceneDto = kvCache.get("themeInfo");
        JSONObject parse = (JSONObject) JSON.parse(threeSceneDto);
        if (threeSceneDto != null) {
            //是否为默认主题
            logger.info("缓存有数据:addUseSceneToRedis cache hava data is" + threeSceneDto);
            Integer status = (Integer) parse.get("status");
            if (status == 0) {//是默认主题
                try {
                    ThreeSceneDto scene = threeSceneService.selectOneThreeScene();
                    logger.info("缓存中数据为默认主题:重新获取数据addUseSceneToRedis cache  is default :get a new data" + scene.toString());
                    if (scene != null) {
                        //如果找到符合条件的数据放入缓存
                        kvCache.put("themeInfo", JsonUtils.objectToJson(scene));
                    } else {
                        //没有符合条件数据
                        kvCache.put("themeInfo", threeSceneDto);
                    }
                } catch (Exception e) {
                    logger.error("默认主题存在时出现的异常 default Scene exist", e);
                    e.printStackTrace();
                }
            } else {
                //非默认主题,看时间是否过期
                String endTime1 = (String) parse.get("endTime");
                long endTime = Long.valueOf(endTime1);
                //获取当前时间的时间戳
                long currentTimeMillis = System.currentTimeMillis();
                if (endTime < currentTimeMillis) {
                    try {
                        ThreeSceneDto scene = threeSceneService.selectOneThreeScene();
                        logger.info("缓存数据过期:重新获取default theme timeout : get a  new data" + scene.toString());
                        if (scene != null) {
                            //如果找到符合条件的数据放入缓存
                            kvCache.put("themeInfo", JsonUtils.objectToJson(scene));
                        } else {
                            //非默认主题过期,且没有替代的主题,将默认的主题返回
                            ThreeSceneDto threScene = new ThreeSceneDto();
                            logger.info("将默认主题加入缓存:default theme again use" + threScene.toString());
                            threScene.setStatus(0);
                            List<ThreeSceneDto> defaultScene = threeSceneService.selectThreeSceneTheme(threScene);
                            ThreeSceneDto sceneDto = defaultScene.get(0);//获取倒序第一条数据
                            kvCache.put("themeInfo", JsonUtils.objectToJson(sceneDto));
                        }
                    } catch (Exception e) {
                        logger.error("默认主题存在且判断时间时出现的异常 default Scene exist", e);
                        e.printStackTrace();
                    }
                }
            }
        } else {
            //缓存没有数据重新添加一条
            try {
                ThreeSceneDto scene = threeSceneService.selectOneThreeScene();
                logger.info("缓存没有数据重新添加一条:cache no data" + scene.toString());
                if (scene != null) {
                    //如果找到符合条件的数据放入缓存
                    kvCache.put("themeInfo", JsonUtils.objectToJson(scene));
                } else {
                    //缓存中没有数据,并且数据库中没有找到有效的主题 ,选择默认主题
                    ThreeSceneDto threScene = new ThreeSceneDto();
                    logger.info("缓存中没有数据,并且数据库中没有找到有效的主题 ,选择默认主题:cache no data get default Theme " + threScene.toString());
                    threScene.setStatus(0);
                    List<ThreeSceneDto> defaultScene = threeSceneService.selectThreeSceneTheme(threScene);
                    ThreeSceneDto sceneDto = defaultScene.get(0);//获取倒序第一条数据
                    kvCache.put("themeInfo", JsonUtils.objectToJson(sceneDto));
                }
            } catch (Exception e) {
                logger.error("默认主题不存在时出现的异常 default Scene no exist", e);
                e.printStackTrace();
            }
        }
    }

 

6.数据库定义

字段

是否索引

描述

ID

主键

THEME

主题名字

START_TIME

开始时间

END_TIME

结束时间

STATUS

状态

JOB

在职

HOME

在家

SCHOOL

在校

CREATE_TIME

创建时间

IS_DEL

是否删除

 

7.缓存设计

1.模块名为:fas-social-backend-threescene

2.数据存储条数为1000条,时间为永不过期。

3.缓存主要用在向前段展示的时候,每半个小时刷新一下缓存中的数据。

8.测试

Postman接口测试.

 

9.背景图显示过程

1.通过xxl_job定时器每半个小时去调用一个addUseSceneToRedis()方法,更新缓存中的数据。

2.用户每次登陆的时候,用户模块去缓存中根据key获取数据.(数据类型起初为实体bean对象,后来为了解耦变为json字符串)。

3.前台IOS和安卓端获取到三大场景(在职、在家、在校)url后,将url传递给H5后,H5进行页面的渲染。

 

猜你喜欢

转载自blog.csdn.net/Tank_666/article/details/82634316
今日推荐