后台更新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进行页面的渲染。