获取网站title
@GetMapping("/title")
public ResponseResult getWebSizeTitle() {
return sizeInfoService.getWebSizeTitle();
}
实现,有可能为空,第一次获取的时候,如果为空的话,跳转到设置页面让管理员设置即可。
@Override
public ResponseResult getWebSizeTitle() {
Setting title = settingDao.findOneByKey(Constants.Settings.WEB_SIZE_TITLE);
return ResponseResult.SUCCESS("获取网站title成功.").setData(title);
}
获取网站seo信息
@GetMapping("/seo")
public ResponseResult getWebSizeSeoInfo() {
return sizeInfoService.getSeoInfo();
}
SEO信息其实包括标题的,这里我们独立出来了,把描述和关键字一起了。
@Override
public ResponseResult putSeoInfo(String keywords, String description) {
//判断
if (TextUtils.isEmpty(keywords)) {
return ResponseResult.FAILED("关键字不可以为空.");
}
if (TextUtils.isEmpty(description)) {
return ResponseResult.FAILED("网站描述不可以为空.");
}
Setting descriptionFromDb = settingDao.findOneByKey(Constants.Settings.WEB_SIZE_DESCRIPTION);
if (descriptionFromDb == null) {
descriptionFromDb = new Setting();
descriptionFromDb.setId(idWorker.nextId() + "");
descriptionFromDb.setCreateTime(new Date());
descriptionFromDb.setUpdateTime(new Date());
descriptionFromDb.setKey(Constants.Settings.WEB_SIZE_DESCRIPTION);
}
descriptionFromDb.setValue(description);
settingDao.save(descriptionFromDb);
Setting keyWordsFromDb = settingDao.findOneByKey(Constants.Settings.WEB_SIZE_KEYWORDS);
if (keyWordsFromDb == null) {
keyWordsFromDb = new Setting();
keyWordsFromDb.setId(idWorker.nextId() + "");
keyWordsFromDb.setCreateTime(new Date());
keyWordsFromDb.setUpdateTime(new Date());
keyWordsFromDb.setKey(Constants.Settings.WEB_SIZE_KEYWORDS);
}
keyWordsFromDb.setValue(keywords);
settingDao.save(keyWordsFromDb);
return ResponseResult.SUCCESS("更新SEO信息成功.");
}
获取网站访问量
@GetMapping("/view_count")
public ResponseResult getWebSizeViewCount() {
return sizeInfoService.getSizeViewCount();
}
网站访问量获取实现
/**
* 这个是全网站的访问量,要做得细一点,还得分来源
* 这里只统计浏览量,只统计文章的浏览量,提供一个浏览量的统计接口(页面级的)
*
* @return 浏览量
*/
@Override
public ResponseResult getSizeViewCount() {
//先从redis里拿出来
String viewCountStr = (String) redisUtils.get(Constants.Settings.WEB_SIZE_VIEW_COUNT);
Setting viewCount = settingDao.findOneByKey(Constants.Settings.WEB_SIZE_VIEW_COUNT);
if (viewCount == null) {
viewCount = this.initViewItem();
settingDao.save(viewCount);
}
if (TextUtils.isEmpty(viewCountStr)) {
viewCountStr = viewCount.getValue();
redisUtils.set(Constants.Settings.WEB_SIZE_VIEW_COUNT, viewCountStr);
} else {
//把redis里的更新到数据里
viewCount.setValue(viewCountStr);
settingDao.save(viewCount);
}
Map<String, Integer> result = new HashMap<>();
result.put(viewCount.getKey(), Integer.valueOf(viewCount.getValue()));
return ResponseResult.SUCCESS("获取网站浏览量成功.").setData(result);
}
获取轮播图列表
@GetMapping("/loop")
public ResponseResult getLoops() {
return loopService.listLoops();
}
代码公用,判断角色和是否登录即可
@Override
public ResponseResult listLoops() {
Sort sort = new Sort(Sort.Direction.DESC, "createTime");
SobUser sobUser = userService.checkSobUser();
List<Looper> all;
if (sobUser == null || !Constants.User.ROLE_ADMIN.equals(sobUser.getRoles())) {
//只能获取到正常的category
all = loopDao.listLoopByState("1");
} else {
//查询
all = loopDao.findAll(sort);
}
return ResponseResult.SUCCESS("获取轮播图列表成功.").setData(all);
}
获取友情链接
@GetMapping("/friend_link")
public ResponseResult getLinks() {
return friendLinkService.listFriendLinks();
}
获取友情链接列表
@Override
public ResponseResult listFriendLinks() {
//创建条件
Sort sort = new Sort(Sort.Direction.DESC, "createTime", "order");
List<FriendLink> all;
SobUser sobUser = userService.checkSobUser();
if (sobUser == null || !Constants.User.ROLE_ADMIN.equals(sobUser.getRoles())) {
//只能获取到正常的category
all = friendLinkDao.listFriendLinkByState("1");
} else {
//查询
all = friendLinkDao.findAll(sort);
}
return ResponseResult.SUCCESS("获取列表成功.").setData(all);
}
更新页面访问量
/**
* 统计访问页,每个页面都统一次,PV,page view.
* 直接增加一个访问量,可以刷量
* 根据ip进行一些过滤,可以集成第三方的一个统计工具
* //
* 递增的统计
* 统计信息,通过redis来统计,数据也会保存在mysql里
* 不会每次都更新到Mysql里,当用户去获取访问量的时候,会更新一次
* 平时的调用,只增加redis里的访问量
* <p>
* redis时机:每个页面访问的时候,如果不在从mysql中读取数据,写到redis里
* 如果,就自增
* <p>
* mysql的时机,用户读取网站总访问量的时候,我们就读取一redis的,并且更新到mysql中
* 如果redis里没有,那就读取mysql写到reds里的
*/
@PutMapping("/view_count")
public void updateViewCount() {
sizeInfoService.updateViewCount();
}
相关说明看注释吧,这是有误差的,数量会比较好看。
/**
* 1、并发量
* 2、过滤相通的IP/ID
* 3、防止攻击,比如太频繁的访问,就提示请稍后重试.
*/
@Override
public void updateViewCount() {
//redis的更新时机:
Object viewCount = redisUtils.get(Constants.Settings.WEB_SIZE_VIEW_COUNT);
if (viewCount == null) {
Setting setting = settingDao.findOneByKey(Constants.Settings.WEB_SIZE_VIEW_COUNT);
if (setting == null) {
setting = this.initViewItem();
settingDao.save(setting);
}
redisUtils.set(Constants.Settings.WEB_SIZE_VIEW_COUNT, setting.getValue());
} else {
//自增
redisUtils.incr(Constants.Settings.WEB_SIZE_VIEW_COUNT, 1);
}
}