1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package cn.chnmuseum.party.service;
import cn.chnmuseum.party.common.util.DateUtil80;
import cn.chnmuseum.party.model.PageViewRecord;
import cn.chnmuseum.party.model.PageViews;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
@Service
public class PublicService {
@Resource
private RedisTemplate redisTemplate;
@Resource
private IPageViewRecordService pageViewRecordService;
@Resource
private IPageViewsService pageViewsService;
/**
* 缓存页面访问量数据,超过5分钟或者数据量超过10条时直接插入数据库
*
* @param detailId 详情信息ID(具体的业务,网点,活动,产品ID)
* @param userId 用户ID
* @param bankId 网点ID
* @param type 页面类型:1-业务办理助手2-网点服务地图3-热门产品4-热门活动
*/
public void cacheData(String detailId, String userId, String bankId, Integer type) {
String recordsKey = "pageViewRecords";
String timeKey = "pageViewRecordsTime";
Date currDateTime = DateUtil80.getCurrDateTime();
Date currDate = DateUtil80.getCurrDate();
PageViewRecord pageViewRecord = new PageViewRecord();
pageViewRecord.setUserId(userId);
pageViewRecord.setBankId(bankId);
pageViewRecord.setCreateTime(currDateTime);//年月日时分秒
pageViewRecord.setType(type);
pageViewRecord.setDetailId(detailId);
redisTemplate.opsForSet().add(recordsKey, pageViewRecord);
if (!redisTemplate.hasKey(timeKey)) {
//没有时间戳标记说明是第一次进入
redisTemplate.opsForValue().set(timeKey, currDateTime);
} else {
//取出记录集合
Set<PageViewRecord> recordValues = redisTemplate.opsForSet().members(recordsKey);
int size = recordValues.size();
//取出时间判断和当前时间有没有超过5分钟
Date timeValue = (Date) redisTemplate.opsForValue().get(timeKey);
long disSecond = (currDateTime.getTime() - timeValue.getTime()) / 1000;
//缓存的数据量达到10条以上或者时间超过5分钟,进行数据存储
if (size >= 10 || disSecond >= 300) {
int typeOne = 0;
int typeTwo = 0;
int typeThree = 0;
int typeFour = 0;
//数据量达到10条以上,将数据插入数据库,并且清空redis
Iterator<PageViewRecord> iterator = recordValues.iterator();
while (iterator.hasNext()) {
//单条缓存的数据
PageViewRecord cacheValue = iterator.next();
pageViewRecord = new PageViewRecord();
pageViewRecord.setUserId(cacheValue.getUserId());
pageViewRecord.setBankId(cacheValue.getBankId());
pageViewRecord.setCreateTime(cacheValue.getCreateTime());
pageViewRecord.setType(cacheValue.getType());
pageViewRecord.setDetailId(cacheValue.getDetailId());
//将数据插入数据库
this.pageViewRecordService.save(pageViewRecord);
//记录每个页面的访问数量
if (cacheValue.getType() == 1) {
typeOne += 1;
} else if (cacheValue.getType() == 2) {
typeTwo += 1;
} else if (cacheValue.getType() == 3) {
typeThree += 1;
} else if (cacheValue.getType() == 4) {
typeFour += 1;
}
}
QueryWrapper<PageViews> viewsWrapper = new QueryWrapper<>();
PageViews pageViews = new PageViews();
if (typeOne != 0) {
viewsWrapper.eq("type", 1);
PageViews one = this.pageViewsService.getOne(viewsWrapper);
if (one != null) {
pageViews.setId(one.getId());
pageViews.setTimes(one.getTimes() + typeOne);
this.pageViewsService.updateById(pageViews);
} else {
pageViews.setType(1);
pageViews.setPageName("业务办理助手");
pageViews.setTimes(typeOne);
pageViews.setViewDate(currDate);
this.pageViewsService.save(pageViews);
}
}
if (typeTwo != 0) {
viewsWrapper = new QueryWrapper<>();
pageViews = new PageViews();
viewsWrapper.eq("view_date", currDate);
viewsWrapper.eq("type", 2);
PageViews one = this.pageViewsService.getOne(viewsWrapper);
if (one != null) {
pageViews.setId(one.getId());
pageViews.setTimes(one.getTimes() + typeTwo);
this.pageViewsService.updateById(pageViews);
} else {
pageViews.setType(2);
pageViews.setPageName("网点服务地图");
pageViews.setTimes(typeTwo);
pageViews.setViewDate(currDate);
this.pageViewsService.save(pageViews);
}
}
if (typeThree != 0) {
viewsWrapper = new QueryWrapper<>();
pageViews = new PageViews();
viewsWrapper.eq("view_date", currDate);
viewsWrapper.eq("type", 3);
PageViews one = this.pageViewsService.getOne(viewsWrapper);
if (one != null) {
pageViews.setId(one.getId());
pageViews.setTimes(one.getTimes() + typeThree);
this.pageViewsService.updateById(pageViews);
} else {
pageViews.setType(3);
pageViews.setPageName("热门产品");
pageViews.setTimes(typeThree);
pageViews.setViewDate(currDate);
this.pageViewsService.save(pageViews);
}
}
if (typeFour != 0) {
viewsWrapper = new QueryWrapper<>();
pageViews = new PageViews();
viewsWrapper.eq("view_date", currDate);
viewsWrapper.eq("type", 4);
PageViews one = this.pageViewsService.getOne(viewsWrapper);
if (one != null) {
pageViews.setId(one.getId());
pageViews.setTimes(one.getTimes() + typeFour);
this.pageViewsService.updateById(pageViews);
} else {
pageViews.setType(4);
pageViews.setPageName("热门活动");
pageViews.setTimes(typeFour);
pageViews.setViewDate(currDate);
this.pageViewsService.save(pageViews);
}
}
//插入数据库后清空redis
redisTemplate.opsForValue().set(timeKey, currDateTime);
redisTemplate.delete(recordsKey);
}
}
}
}