|
1 | 1 | package com.ujcms.cms.ext.web.backendapi; |
2 | 2 |
|
3 | | -import com.ujcms.cms.core.domain.Site; |
4 | | -import com.ujcms.cms.core.support.Contexts; |
5 | | -import com.ujcms.cms.core.support.UrlConstants; |
6 | | -import com.ujcms.cms.ext.domain.VisitStat; |
7 | | -import com.ujcms.cms.ext.domain.VisitTrend; |
8 | | -import com.ujcms.cms.ext.service.VisitStatService; |
9 | | -import com.ujcms.cms.ext.service.VisitTrendService; |
10 | | -import org.springframework.format.annotation.DateTimeFormat; |
11 | | -import org.springframework.lang.Nullable; |
12 | | -import org.springframework.security.access.prepost.PreAuthorize; |
13 | | -import org.springframework.web.bind.annotation.GetMapping; |
14 | | -import org.springframework.web.bind.annotation.RequestMapping; |
15 | | -import org.springframework.web.bind.annotation.RequestParam; |
16 | | -import org.springframework.web.bind.annotation.RestController; |
| 3 | +import static com.ujcms.cms.core.support.Constants.validPage; |
| 4 | +import static com.ujcms.cms.core.support.Constants.validPageSize; |
| 5 | +import static com.ujcms.cms.ext.domain.VisitStat.DAY_FORMATTER; |
| 6 | +import static com.ujcms.cms.ext.domain.VisitStat.HOUR_FORMATTER; |
| 7 | +import static com.ujcms.cms.ext.domain.VisitStat.MINUTE_FORMATTER; |
| 8 | +import static com.ujcms.cms.ext.domain.VisitStat.MONTH_FORMATTER; |
| 9 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_BROWSER; |
| 10 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_COUNTRY; |
| 11 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_DEVICE; |
| 12 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_OS; |
| 13 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_PROVINCE; |
| 14 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_SOURCE; |
| 15 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_SOURCE_TYPE; |
| 16 | +import static com.ujcms.cms.ext.domain.VisitStat.TYPE_VISITOR; |
| 17 | +import static com.ujcms.commons.db.MyBatis.springPage; |
17 | 18 |
|
18 | 19 | import java.time.LocalDate; |
19 | 20 | import java.time.OffsetDateTime; |
|
22 | 23 | import java.util.Map; |
23 | 24 | import java.util.Optional; |
24 | 25 |
|
25 | | -import static com.ujcms.cms.ext.domain.VisitStat.*; |
| 26 | +import org.springframework.data.domain.Page; |
| 27 | +import org.springframework.format.annotation.DateTimeFormat; |
| 28 | +import org.springframework.lang.Nullable; |
| 29 | +import org.springframework.security.access.prepost.PreAuthorize; |
| 30 | +import org.springframework.web.bind.annotation.GetMapping; |
| 31 | +import org.springframework.web.bind.annotation.RequestMapping; |
| 32 | +import org.springframework.web.bind.annotation.RequestParam; |
| 33 | +import org.springframework.web.bind.annotation.RestController; |
| 34 | + |
| 35 | +import com.ujcms.cms.core.domain.Site; |
| 36 | +import com.ujcms.cms.core.support.Contexts; |
| 37 | +import com.ujcms.cms.core.support.UrlConstants; |
| 38 | +import com.ujcms.cms.ext.domain.VisitPage; |
| 39 | +import com.ujcms.cms.ext.domain.VisitStat; |
| 40 | +import com.ujcms.cms.ext.domain.VisitTrend; |
| 41 | +import com.ujcms.cms.ext.service.VisitPageService; |
| 42 | +import com.ujcms.cms.ext.service.VisitStatService; |
| 43 | +import com.ujcms.cms.ext.service.VisitTrendService; |
26 | 44 |
|
27 | 45 | /** |
28 | 46 | * 访问统计 Controller |
|
34 | 52 | public class VisitController { |
35 | 53 | private final VisitTrendService visitTrendService; |
36 | 54 | private final VisitStatService visitStatService; |
| 55 | + private final VisitPageService visitPageService; |
37 | 56 |
|
38 | | - public VisitController(VisitTrendService visitTrendService, VisitStatService visitStatService) { |
| 57 | + public VisitController(VisitTrendService visitTrendService, VisitStatService visitStatService, VisitPageService visitPageService) { |
39 | 58 | this.visitTrendService = visitTrendService; |
40 | 59 | this.visitStatService = visitStatService; |
| 60 | + this.visitPageService = visitPageService; |
41 | 61 | } |
42 | 62 |
|
43 | 63 | @GetMapping("trend-stat") |
@@ -116,6 +136,63 @@ public List<VisitStat> sourceTypeStat( |
116 | 136 | @RequestParam(name = "end", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) { |
117 | 137 | return stat(TYPE_SOURCE_TYPE, begin, end); |
118 | 138 | } |
| 139 | + |
| 140 | + @GetMapping("visited-page-stat") |
| 141 | + @PreAuthorize("hasAnyAuthority('visitedPage:list','*')") |
| 142 | + public Page<VisitPage> visitedPageStat(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate begin, |
| 143 | + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end, |
| 144 | + Integer page, Integer pageSize) { |
| 145 | + Site site = Contexts.getCurrentSite(); |
| 146 | + return springPage(visitPageService.statByDate(site.getId(), VisitPage.TYPE_VISITED_URL, |
| 147 | + begin != null ? begin.format(DAY_FORMATTER) : null, |
| 148 | + end != null ? end.format(DAY_FORMATTER) : null, |
| 149 | + validPage(page), validPageSize(pageSize))); |
| 150 | + } |
| 151 | + |
| 152 | + @GetMapping("entry-page-stat") |
| 153 | + @PreAuthorize("hasAnyAuthority('entryPage:list','*')") |
| 154 | + public Page<VisitPage> entryPageStat(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate begin, |
| 155 | + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end, |
| 156 | + Integer page, Integer pageSize) { |
| 157 | + Site site = Contexts.getCurrentSite(); |
| 158 | + return springPage(visitPageService.statByDate(site.getId(), VisitPage.TYPE_ENTRY_URL, |
| 159 | + begin != null ? begin.format(DAY_FORMATTER) : null, |
| 160 | + end != null ? end.format(DAY_FORMATTER) : null, |
| 161 | + validPage(page), validPageSize(pageSize))); |
| 162 | + } |
| 163 | + |
| 164 | + @GetMapping("source-stat") |
| 165 | + @PreAuthorize("hasAnyAuthority('visitSource:list','*')") |
| 166 | + public Page<VisitStat> sourceStat(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate begin, |
| 167 | + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end, |
| 168 | + Integer page, Integer pageSize) { |
| 169 | + Site site = Contexts.getCurrentSite(); |
| 170 | + return springPage(visitStatService.statByDate(site.getId(), TYPE_SOURCE, |
| 171 | + begin != null ? begin.format(DAY_FORMATTER) : null, |
| 172 | + end != null ? end.format(DAY_FORMATTER) : null, |
| 173 | + validPage(page), validPageSize(pageSize))); |
| 174 | + } |
| 175 | + |
| 176 | + @GetMapping("device-stat") |
| 177 | + @PreAuthorize("hasAnyAuthority('visitDevice:list','*')") |
| 178 | + public List<VisitStat> deviceStat(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate begin, |
| 179 | + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) { |
| 180 | + return stat(TYPE_DEVICE, begin, end); |
| 181 | + } |
| 182 | + |
| 183 | + @GetMapping("os-stat") |
| 184 | + @PreAuthorize("hasAnyAuthority('visitOs:list','*')") |
| 185 | + public List<VisitStat> osStat(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate begin, |
| 186 | + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) { |
| 187 | + return stat(TYPE_OS, begin, end); |
| 188 | + } |
| 189 | + |
| 190 | + @GetMapping("browser-stat") |
| 191 | + @PreAuthorize("hasAnyAuthority('visitBrowser:list','*')") |
| 192 | + public List<VisitStat> browserStat(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate begin, |
| 193 | + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) { |
| 194 | + return stat(TYPE_BROWSER, begin, end); |
| 195 | + } |
119 | 196 |
|
120 | 197 | private List<VisitStat> stat(short type, @Nullable LocalDate begin, @Nullable LocalDate end) { |
121 | 198 | Site site = Contexts.getCurrentSite(); |
|
0 commit comments