内容访问统计
Showing
18 changed files
with
941 additions
and
0 deletions
1 | package com.topdraw.business.module.content.all.domain; | ||
2 | |||
3 | import cn.hutool.core.bean.BeanUtil; | ||
4 | import cn.hutool.core.bean.copier.CopyOptions; | ||
5 | import lombok.Data; | ||
6 | import lombok.experimental.Accessors; | ||
7 | import org.springframework.data.annotation.CreatedDate; | ||
8 | import org.springframework.data.annotation.LastModifiedDate; | ||
9 | import org.springframework.data.jpa.domain.support.AuditingEntityListener; | ||
10 | |||
11 | import javax.persistence.*; | ||
12 | import java.io.Serializable; | ||
13 | import java.sql.Timestamp; | ||
14 | |||
15 | /** | ||
16 | * @author XiangHan | ||
17 | * @date 2022-02-26 | ||
18 | */ | ||
19 | @Entity | ||
20 | @Data | ||
21 | @EntityListeners(AuditingEntityListener.class) | ||
22 | @Accessors(chain = true) | ||
23 | @Table(name="content_pv_uv") | ||
24 | public class ContentPVUV implements Serializable { | ||
25 | |||
26 | // ID | ||
27 | @Id | ||
28 | @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
29 | @Column(name = "id") | ||
30 | private Long id; | ||
31 | |||
32 | // 活动按钮id | ||
33 | @Column(name = "template_param_value_id", nullable = false) | ||
34 | private Long templateParamValueId; | ||
35 | |||
36 | @Column(name = "btn_name", nullable = false) | ||
37 | private String btnName; | ||
38 | |||
39 | // 显示用名称,表示哪个按钮或者内容 | ||
40 | @Column(name = "code", nullable = false) | ||
41 | private String code; | ||
42 | |||
43 | // 显示用名称,表示哪个按钮或者内容 | ||
44 | @Column(name = "name", nullable = false) | ||
45 | private String name; | ||
46 | |||
47 | // pv值 | ||
48 | @Column(name = "pv", nullable = false) | ||
49 | private Integer pv; | ||
50 | |||
51 | // uv值 | ||
52 | @Column(name = "uv", nullable = false) | ||
53 | private Integer uv; | ||
54 | |||
55 | @Column(name = "lp_id") | ||
56 | private Long lpId; | ||
57 | |||
58 | @Column(name = "site_id") | ||
59 | private Long siteId; | ||
60 | |||
61 | // 创建时间 | ||
62 | @CreatedDate | ||
63 | @Column(name = "create_time") | ||
64 | private Timestamp createTime; | ||
65 | |||
66 | // 更新时间 | ||
67 | @LastModifiedDate | ||
68 | @Column(name = "update_time") | ||
69 | private Timestamp updateTime; | ||
70 | |||
71 | public void copy(ContentPVUV source){ | ||
72 | BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); | ||
73 | } | ||
74 | } |
src/main/java/com/topdraw/business/module/content/all/repository/ContentPVUVRepository.java
0 → 100644
1 | package com.topdraw.business.module.content.all.repository; | ||
2 | |||
3 | import com.topdraw.business.module.content.all.domain.ContentPVUV; | ||
4 | import org.springframework.data.jpa.repository.JpaRepository; | ||
5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; | ||
6 | |||
7 | import java.util.Optional; | ||
8 | |||
9 | public interface ContentPVUVRepository extends JpaRepository<ContentPVUV, Long>, JpaSpecificationExecutor<ContentPVUV> { | ||
10 | |||
11 | Optional<ContentPVUV> findByTemplateParamValueIdAndCode(Long templateParamValueId, String code); | ||
12 | } |
1 | package com.topdraw.business.module.content.all.service; | ||
2 | |||
3 | import com.topdraw.business.module.content.all.domain.ContentPVUV; | ||
4 | |||
5 | public interface ContentPVUVService { | ||
6 | |||
7 | void create(ContentPVUV resources); | ||
8 | |||
9 | void update(ContentPVUV resources); | ||
10 | |||
11 | ContentPVUV findByBtnIdAndCode(Long btnId, String code); | ||
12 | |||
13 | } |
src/main/java/com/topdraw/business/module/content/all/service/impl/ContentPVUVServiceImpl.java
0 → 100644
1 | package com.topdraw.business.module.content.all.service.impl; | ||
2 | |||
3 | import com.topdraw.business.module.content.all.domain.ContentPVUV; | ||
4 | import com.topdraw.business.module.content.all.repository.ContentPVUVRepository; | ||
5 | import com.topdraw.business.module.content.all.service.ContentPVUVService; | ||
6 | import com.topdraw.utils.ValidationUtil; | ||
7 | import org.springframework.beans.factory.annotation.Autowired; | ||
8 | import org.springframework.stereotype.Service; | ||
9 | import org.springframework.transaction.annotation.Transactional; | ||
10 | |||
11 | @Service | ||
12 | public class ContentPVUVServiceImpl implements ContentPVUVService { | ||
13 | |||
14 | @Autowired | ||
15 | private ContentPVUVRepository contentPVUVRepository; | ||
16 | |||
17 | @Override | ||
18 | @Transactional(rollbackFor = Exception.class) | ||
19 | public void create(ContentPVUV resources) { | ||
20 | contentPVUVRepository.save(resources); | ||
21 | } | ||
22 | |||
23 | @Override | ||
24 | @Transactional(rollbackFor = Exception.class) | ||
25 | public void update(ContentPVUV resources) { | ||
26 | ContentPVUV PvUv = contentPVUVRepository.findById(resources.getId()).orElseGet(ContentPVUV::new); | ||
27 | ValidationUtil.isNull( PvUv.getId(),"PvUv","id",resources.getId()); | ||
28 | PvUv.copy(resources); | ||
29 | contentPVUVRepository.save(PvUv); | ||
30 | } | ||
31 | |||
32 | public ContentPVUV findByBtnIdAndCode(Long btnId, String code){ | ||
33 | return contentPVUVRepository.findByTemplateParamValueIdAndCode(btnId, code).orElseGet(ContentPVUV::new); | ||
34 | } | ||
35 | |||
36 | } |
1 | package com.topdraw.business.module.content.day.domain; | ||
2 | |||
3 | import cn.hutool.core.bean.BeanUtil; | ||
4 | import cn.hutool.core.bean.copier.CopyOptions; | ||
5 | import lombok.Data; | ||
6 | import lombok.experimental.Accessors; | ||
7 | import org.springframework.data.annotation.CreatedDate; | ||
8 | import org.springframework.data.annotation.LastModifiedDate; | ||
9 | import org.springframework.data.jpa.domain.support.AuditingEntityListener; | ||
10 | |||
11 | import javax.persistence.*; | ||
12 | import java.io.Serializable; | ||
13 | import java.sql.Timestamp; | ||
14 | |||
15 | /** | ||
16 | * @author XiangHan | ||
17 | * @date 2022-02-26 | ||
18 | */ | ||
19 | @Entity | ||
20 | @Data | ||
21 | @EntityListeners(AuditingEntityListener.class) | ||
22 | @Accessors(chain = true) | ||
23 | @Table(name="content_pv_uv_day") | ||
24 | public class ContentPVUVDay implements Serializable { | ||
25 | |||
26 | // ID | ||
27 | @Id | ||
28 | @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
29 | @Column(name = "id") | ||
30 | private Long id; | ||
31 | |||
32 | // 活动按钮id | ||
33 | @Column(name = "template_param_value_id", nullable = false) | ||
34 | private Long templateParamValueId; | ||
35 | |||
36 | @Column(name = "btn_name", nullable = false) | ||
37 | private String btnName; | ||
38 | |||
39 | // 显示用名称,表示哪个按钮或者内容 | ||
40 | @Column(name = "code", nullable = false) | ||
41 | private String code; | ||
42 | |||
43 | // 显示用名称,表示哪个按钮或者内容 | ||
44 | @Column(name = "name", nullable = false) | ||
45 | private String name; | ||
46 | |||
47 | // pv值 | ||
48 | @Column(name = "pv", nullable = false) | ||
49 | private Integer pv; | ||
50 | |||
51 | // uv值 | ||
52 | @Column(name = "uv", nullable = false) | ||
53 | private Integer uv; | ||
54 | |||
55 | @Column(name = "lp_id") | ||
56 | private Long lpId; | ||
57 | |||
58 | @Column(name = "site_id") | ||
59 | private Long siteId; | ||
60 | |||
61 | @Column(name = "day") | ||
62 | private String day; | ||
63 | |||
64 | // 创建时间 | ||
65 | @CreatedDate | ||
66 | @Column(name = "create_time") | ||
67 | private Timestamp createTime; | ||
68 | |||
69 | // 更新时间 | ||
70 | @LastModifiedDate | ||
71 | @Column(name = "update_time") | ||
72 | private Timestamp updateTime; | ||
73 | |||
74 | public void copy(ContentPVUVDay source){ | ||
75 | BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); | ||
76 | } | ||
77 | } |
src/main/java/com/topdraw/business/module/content/day/repository/ContentPVUVDayRepository.java
0 → 100644
1 | package com.topdraw.business.module.content.day.repository; | ||
2 | |||
3 | import com.topdraw.business.module.content.day.domain.ContentPVUVDay; | ||
4 | import org.springframework.data.jpa.repository.JpaRepository; | ||
5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; | ||
6 | |||
7 | import java.util.Optional; | ||
8 | |||
9 | public interface ContentPVUVDayRepository extends JpaRepository<ContentPVUVDay, Long>, JpaSpecificationExecutor<ContentPVUVDay> { | ||
10 | |||
11 | Optional<ContentPVUVDay> findByTemplateParamValueIdAndCodeAndDay(Long templateParamValueId, String code, String day); | ||
12 | } |
1 | package com.topdraw.business.module.content.day.service; | ||
2 | |||
3 | import com.topdraw.business.module.content.day.domain.ContentPVUVDay; | ||
4 | |||
5 | public interface ContentPVUVDayService { | ||
6 | |||
7 | void create(ContentPVUVDay resources); | ||
8 | |||
9 | void update(ContentPVUVDay resources); | ||
10 | |||
11 | ContentPVUVDay findByBtnIdAndCodeAndDay(Long btnId, String code, String day); | ||
12 | |||
13 | } |
src/main/java/com/topdraw/business/module/content/day/service/impl/ContentPVUVDayServiceImpl.java
0 → 100644
1 | package com.topdraw.business.module.content.day.service.impl; | ||
2 | |||
3 | import com.topdraw.business.module.content.day.domain.ContentPVUVDay; | ||
4 | import com.topdraw.business.module.content.day.repository.ContentPVUVDayRepository; | ||
5 | import com.topdraw.business.module.content.day.service.ContentPVUVDayService; | ||
6 | import com.topdraw.utils.ValidationUtil; | ||
7 | import org.springframework.beans.factory.annotation.Autowired; | ||
8 | import org.springframework.stereotype.Service; | ||
9 | import org.springframework.transaction.annotation.Transactional; | ||
10 | |||
11 | @Service | ||
12 | public class ContentPVUVDayServiceImpl implements ContentPVUVDayService { | ||
13 | |||
14 | @Autowired | ||
15 | private ContentPVUVDayRepository contentPVUVRepository; | ||
16 | |||
17 | @Override | ||
18 | @Transactional(rollbackFor = Exception.class) | ||
19 | public void create(ContentPVUVDay resources) { | ||
20 | contentPVUVRepository.save(resources); | ||
21 | } | ||
22 | |||
23 | @Override | ||
24 | @Transactional(rollbackFor = Exception.class) | ||
25 | public void update(ContentPVUVDay resources) { | ||
26 | ContentPVUVDay PvUv = contentPVUVRepository.findById(resources.getId()).orElseGet(ContentPVUVDay::new); | ||
27 | ValidationUtil.isNull( PvUv.getId(),"PvUv","id",resources.getId()); | ||
28 | PvUv.copy(resources); | ||
29 | contentPVUVRepository.save(PvUv); | ||
30 | } | ||
31 | |||
32 | public ContentPVUVDay findByBtnIdAndCodeAndDay(Long btnId, String code, String day){ | ||
33 | return contentPVUVRepository.findByTemplateParamValueIdAndCodeAndDay(btnId, code, day).orElseGet(ContentPVUVDay::new); | ||
34 | } | ||
35 | |||
36 | } |
1 | package com.topdraw.business.module.content.hour.domain; | ||
2 | |||
3 | import cn.hutool.core.bean.BeanUtil; | ||
4 | import cn.hutool.core.bean.copier.CopyOptions; | ||
5 | import lombok.Data; | ||
6 | import lombok.experimental.Accessors; | ||
7 | import org.springframework.data.annotation.CreatedDate; | ||
8 | import org.springframework.data.annotation.LastModifiedDate; | ||
9 | import org.springframework.data.jpa.domain.support.AuditingEntityListener; | ||
10 | |||
11 | import javax.persistence.*; | ||
12 | import java.io.Serializable; | ||
13 | import java.sql.Timestamp; | ||
14 | |||
15 | /** | ||
16 | * @author XiangHan | ||
17 | * @date 2022-02-26 | ||
18 | */ | ||
19 | @Entity | ||
20 | @Data | ||
21 | @EntityListeners(AuditingEntityListener.class) | ||
22 | @Accessors(chain = true) | ||
23 | @Table(name="content_pv_uv_hour") | ||
24 | public class ContentPVUVHour implements Serializable { | ||
25 | |||
26 | // ID | ||
27 | @Id | ||
28 | @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
29 | @Column(name = "id") | ||
30 | private Long id; | ||
31 | |||
32 | // 活动按钮id | ||
33 | @Column(name = "template_param_value_id", nullable = false) | ||
34 | private Long templateParamValueId; | ||
35 | |||
36 | @Column(name = "btn_name", nullable = false) | ||
37 | private String btnName; | ||
38 | |||
39 | // 显示用名称,表示哪个按钮或者内容 | ||
40 | @Column(name = "code", nullable = false) | ||
41 | private String code; | ||
42 | |||
43 | // 显示用名称,表示哪个按钮或者内容 | ||
44 | @Column(name = "name", nullable = false) | ||
45 | private String name; | ||
46 | |||
47 | // pv值 | ||
48 | @Column(name = "pv", nullable = false) | ||
49 | private Integer pv; | ||
50 | |||
51 | // uv值 | ||
52 | @Column(name = "uv", nullable = false) | ||
53 | private Integer uv; | ||
54 | |||
55 | @Column(name = "lp_id") | ||
56 | private Long lpId; | ||
57 | |||
58 | @Column(name = "site_id") | ||
59 | private Long siteId; | ||
60 | |||
61 | @Column(name = "day") | ||
62 | private String day; | ||
63 | |||
64 | @Column(name = "hour") | ||
65 | private Integer hour; | ||
66 | |||
67 | // 创建时间 | ||
68 | @CreatedDate | ||
69 | @Column(name = "create_time") | ||
70 | private Timestamp createTime; | ||
71 | |||
72 | // 更新时间 | ||
73 | @LastModifiedDate | ||
74 | @Column(name = "update_time") | ||
75 | private Timestamp updateTime; | ||
76 | |||
77 | public void copy(ContentPVUVHour source){ | ||
78 | BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); | ||
79 | } | ||
80 | } |
src/main/java/com/topdraw/business/module/content/hour/repository/ContentPVUVHourRepository.java
0 → 100644
1 | package com.topdraw.business.module.content.hour.repository; | ||
2 | |||
3 | import com.topdraw.business.module.content.hour.domain.ContentPVUVHour; | ||
4 | import org.springframework.data.jpa.repository.JpaRepository; | ||
5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; | ||
6 | |||
7 | import java.util.Optional; | ||
8 | |||
9 | public interface ContentPVUVHourRepository extends JpaRepository<ContentPVUVHour, Long>, JpaSpecificationExecutor<ContentPVUVHour> { | ||
10 | |||
11 | Optional<ContentPVUVHour> findByTemplateParamValueIdAndCodeAndDayAndHour(Long templateParamValueId, String code, String day, Integer hour); | ||
12 | } |
src/main/java/com/topdraw/business/module/content/hour/service/ContentPVUVHourService.java
0 → 100644
1 | package com.topdraw.business.module.content.hour.service; | ||
2 | |||
3 | import com.topdraw.business.module.content.hour.domain.ContentPVUVHour; | ||
4 | |||
5 | public interface ContentPVUVHourService { | ||
6 | |||
7 | void create(ContentPVUVHour resources); | ||
8 | |||
9 | void update(ContentPVUVHour resources); | ||
10 | |||
11 | ContentPVUVHour findByBtnIdAndCodeAndDayAndHour(Long btnId, String code, String day, Integer hour); | ||
12 | |||
13 | } |
src/main/java/com/topdraw/business/module/content/hour/service/impl/ContentPVUVHourServiceImpl.java
0 → 100644
1 | package com.topdraw.business.module.content.hour.service.impl; | ||
2 | |||
3 | import com.topdraw.business.module.content.hour.domain.ContentPVUVHour; | ||
4 | import com.topdraw.business.module.content.hour.repository.ContentPVUVHourRepository; | ||
5 | import com.topdraw.business.module.content.hour.service.ContentPVUVHourService; | ||
6 | import com.topdraw.utils.ValidationUtil; | ||
7 | import org.springframework.beans.factory.annotation.Autowired; | ||
8 | import org.springframework.stereotype.Service; | ||
9 | import org.springframework.transaction.annotation.Transactional; | ||
10 | |||
11 | @Service | ||
12 | public class ContentPVUVHourServiceImpl implements ContentPVUVHourService { | ||
13 | |||
14 | @Autowired | ||
15 | private ContentPVUVHourRepository contentPVUVRepository; | ||
16 | |||
17 | @Override | ||
18 | @Transactional(rollbackFor = Exception.class) | ||
19 | public void create(ContentPVUVHour resources) { | ||
20 | contentPVUVRepository.save(resources); | ||
21 | } | ||
22 | |||
23 | @Override | ||
24 | @Transactional(rollbackFor = Exception.class) | ||
25 | public void update(ContentPVUVHour resources) { | ||
26 | ContentPVUVHour PvUv = contentPVUVRepository.findById(resources.getId()).orElseGet(ContentPVUVHour::new); | ||
27 | ValidationUtil.isNull( PvUv.getId(),"PvUv","id",resources.getId()); | ||
28 | PvUv.copy(resources); | ||
29 | contentPVUVRepository.save(PvUv); | ||
30 | } | ||
31 | |||
32 | public ContentPVUVHour findByBtnIdAndCodeAndDayAndHour(Long btnId, String code, String day, Integer hour){ | ||
33 | return contentPVUVRepository.findByTemplateParamValueIdAndCodeAndDayAndHour(btnId, code, day, hour).orElseGet(ContentPVUVHour::new); | ||
34 | } | ||
35 | |||
36 | } |
1 | package com.topdraw.business.module.template.domain; | ||
2 | |||
3 | import cn.hutool.core.bean.BeanUtil; | ||
4 | import cn.hutool.core.bean.copier.CopyOptions; | ||
5 | import lombok.Data; | ||
6 | import lombok.experimental.Accessors; | ||
7 | import org.springframework.data.annotation.CreatedDate; | ||
8 | import org.springframework.data.annotation.LastModifiedDate; | ||
9 | import org.springframework.data.jpa.domain.support.AuditingEntityListener; | ||
10 | |||
11 | import javax.persistence.*; | ||
12 | import java.io.Serializable; | ||
13 | import java.sql.Timestamp; | ||
14 | |||
15 | /** | ||
16 | * @author zhang sheng xiang | ||
17 | * @date 2021-09-07 | ||
18 | */ | ||
19 | @Entity | ||
20 | @Data | ||
21 | @EntityListeners(AuditingEntityListener.class) | ||
22 | @Accessors(chain = true) | ||
23 | @Table(name = "tp_template_param_value") | ||
24 | public class TemplateParamValue implements Serializable { | ||
25 | |||
26 | // ID | ||
27 | @Id | ||
28 | @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
29 | @Column(name = "id") | ||
30 | private Long id; | ||
31 | |||
32 | // 名称 | ||
33 | @Column(name = "name") | ||
34 | private String name; | ||
35 | |||
36 | // 标识 | ||
37 | @Column(name = "code") | ||
38 | private String code; | ||
39 | |||
40 | //模板参数id | ||
41 | @Column(name = "template_param_id") | ||
42 | private Long templateParamId; | ||
43 | |||
44 | // 模板关联实体类型 1: 活动类型;2:专题类型;3:页面类型 | ||
45 | @Column(name = "content_type") | ||
46 | private Integer contentType; | ||
47 | |||
48 | // 模板关联实体id | ||
49 | @Column(name = "content_id") | ||
50 | private Long contentId; | ||
51 | |||
52 | // 参数类型 0:实体;1:常量;2:虚拟实体;3:图片 | ||
53 | @Column(name = "type", nullable = false) | ||
54 | private Integer type; | ||
55 | |||
56 | // 组键 | ||
57 | @Column(name = "`group`") | ||
58 | private String group; | ||
59 | |||
60 | // 组名称 | ||
61 | @Column(name = "group_name") | ||
62 | private String groupName; | ||
63 | |||
64 | // 实体类型(仅当参数类型为实体时有效) | ||
65 | @Column(name = "entity") | ||
66 | private String entity; | ||
67 | |||
68 | // 值(实体类型下为实体id,常量类型下为常量值,虚拟实体和图片此属性无效) | ||
69 | @Column(name = "`value`") | ||
70 | private String value; | ||
71 | |||
72 | // 资源标志符,供模板引擎识别调度 | ||
73 | @Column(name = "`uri`") | ||
74 | private String uri; | ||
75 | |||
76 | // 对象标识 | ||
77 | @Column(name = "obj_code") | ||
78 | private String objCode; | ||
79 | |||
80 | // 描述 | ||
81 | @Column(name = "description") | ||
82 | private String description; | ||
83 | |||
84 | // 图片 | ||
85 | @Column(name = "image") | ||
86 | private String image; | ||
87 | |||
88 | // 图片 | ||
89 | @Column(name = "images") | ||
90 | private String images; | ||
91 | |||
92 | // 顺序 | ||
93 | @Column(name = "sequence", nullable = false) | ||
94 | private Integer sequence; | ||
95 | |||
96 | @Column(name = "component_data") | ||
97 | private String componentData; | ||
98 | |||
99 | // 组内顺序 | ||
100 | @Column(name = "group_index") | ||
101 | private Integer groupIndex; | ||
102 | |||
103 | //事件类型 0:抽奖;1:投票;2:答题;3:闯关;4:签到(当entity是activity时生效) | ||
104 | @Column(name = "activity_type") | ||
105 | private Integer activity_type; | ||
106 | |||
107 | //当前页面标识 | ||
108 | @Column(name = "page_code") | ||
109 | private String pageCode; | ||
110 | |||
111 | @Column(name = "page_title") | ||
112 | private String pageTitle; | ||
113 | |||
114 | //展现形式 | ||
115 | @Column(name = "display_form") | ||
116 | private Integer displayForm; | ||
117 | |||
118 | @Column(name = "top") | ||
119 | private Integer top; | ||
120 | |||
121 | @Column(name = "`left`") | ||
122 | private Integer left; | ||
123 | |||
124 | @Column(name = "width") | ||
125 | private Integer width; | ||
126 | |||
127 | @Column(name = "height") | ||
128 | private Integer height; | ||
129 | |||
130 | // 创建时间 | ||
131 | @CreatedDate | ||
132 | @Column(name = "create_time") | ||
133 | private Timestamp createTime; | ||
134 | |||
135 | // 更新时间 | ||
136 | @LastModifiedDate | ||
137 | @Column(name = "update_time") | ||
138 | private Timestamp updateTime; | ||
139 | |||
140 | public void copy(TemplateParamValue source){ | ||
141 | BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); | ||
142 | } | ||
143 | } |
src/main/java/com/topdraw/business/module/template/repository/TemplateParamValueRepository.java
0 → 100644
1 | package com.topdraw.business.module.template.repository; | ||
2 | |||
3 | import com.topdraw.business.module.template.domain.TemplateParamValue; | ||
4 | import org.springframework.data.jpa.repository.JpaRepository; | ||
5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; | ||
6 | |||
7 | import java.util.List; | ||
8 | |||
9 | public interface TemplateParamValueRepository extends JpaRepository<TemplateParamValue, Long>, JpaSpecificationExecutor<TemplateParamValue> { | ||
10 | |||
11 | List<TemplateParamValue> findByIdIn(List<Long> ids); | ||
12 | } |
src/main/java/com/topdraw/business/module/template/service/impl/TemplateParamValueServiceImpl.java
0 → 100644
1 | package com.topdraw.business.module.template.service.impl; | ||
2 | |||
3 | import com.topdraw.business.module.template.domain.TemplateParamValue; | ||
4 | import com.topdraw.business.module.template.repository.TemplateParamValueRepository; | ||
5 | import com.topdraw.business.module.template.service.TemplateParamValueService; | ||
6 | import org.springframework.beans.factory.annotation.Autowired; | ||
7 | import org.springframework.stereotype.Service; | ||
8 | |||
9 | import java.util.List; | ||
10 | import java.util.Map; | ||
11 | import java.util.stream.Collectors; | ||
12 | |||
13 | @Service | ||
14 | public class TemplateParamValueServiceImpl implements TemplateParamValueService { | ||
15 | |||
16 | @Autowired | ||
17 | private TemplateParamValueRepository templateParamValueRepository; | ||
18 | |||
19 | public Map<Long, String> btnNames(List<Long> btnIds){ | ||
20 | List<TemplateParamValue> list = templateParamValueRepository.findByIdIn(btnIds); | ||
21 | Map<Long, String> result = list.stream().collect(Collectors.toMap(TemplateParamValue::getId, TemplateParamValue::getName)); | ||
22 | return result; | ||
23 | } | ||
24 | |||
25 | } |
1 | package com.topdraw.business.process.calculate.task; | ||
2 | |||
3 | import com.topdraw.business.module.content.all.domain.ContentPVUV; | ||
4 | import com.topdraw.business.module.content.all.service.ContentPVUVService; | ||
5 | import com.topdraw.business.module.content.day.domain.ContentPVUVDay; | ||
6 | import com.topdraw.business.module.content.day.service.ContentPVUVDayService; | ||
7 | import com.topdraw.business.module.content.hour.domain.ContentPVUVHour; | ||
8 | import com.topdraw.business.module.content.hour.service.ContentPVUVHourService; | ||
9 | import com.topdraw.business.module.template.service.TemplateParamValueService; | ||
10 | import com.topdraw.business.module.uv.all.domain.PvUv; | ||
11 | import com.topdraw.business.module.uv.all.service.PvUvService; | ||
12 | import com.topdraw.business.module.uv.day.domain.PvUvDay; | ||
13 | import com.topdraw.business.module.uv.day.service.PvUvDayService; | ||
14 | import com.topdraw.business.module.uv.hour.domain.PvUvHour; | ||
15 | import com.topdraw.business.module.uv.hour.service.PvUvHourService; | ||
16 | import com.topdraw.util.TimestampUtil; | ||
17 | import com.topdraw.utils.RedisUtils; | ||
18 | import com.topdraw.utils.StringUtils; | ||
19 | import lombok.extern.slf4j.Slf4j; | ||
20 | import org.apache.commons.collections4.CollectionUtils; | ||
21 | import org.springframework.beans.factory.annotation.Autowired; | ||
22 | import org.springframework.jdbc.core.JdbcTemplate; | ||
23 | import org.springframework.stereotype.Service; | ||
24 | import org.springframework.transaction.annotation.Propagation; | ||
25 | import org.springframework.transaction.annotation.Transactional; | ||
26 | |||
27 | import java.time.LocalDate; | ||
28 | import java.time.LocalDateTime; | ||
29 | import java.util.*; | ||
30 | import java.util.stream.Collectors; | ||
31 | |||
32 | @Service | ||
33 | @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) | ||
34 | @Slf4j | ||
35 | public class ContentCalculateTask { | ||
36 | |||
37 | @Autowired | ||
38 | private RedisUtils redisUtils; | ||
39 | @Autowired | ||
40 | private JdbcTemplate jdbcTemplate; | ||
41 | @Autowired | ||
42 | private ContentPVUVService contentPVUVService; | ||
43 | @Autowired | ||
44 | private ContentPVUVDayService contentPVUVDayService; | ||
45 | @Autowired | ||
46 | private ContentPVUVHourService contentPVUVHourService; | ||
47 | @Autowired | ||
48 | private TemplateParamValueService templateParamValueService; | ||
49 | |||
50 | public boolean calculateRedisData2Mysql(){ | ||
51 | //先查询所有内容信息(从redis中获取) | ||
52 | //循环所有内容, | ||
53 | Map<Object, Object> allContents = this.getAllContents(); | ||
54 | Set<Object> contentCodes = allContents.keySet(); | ||
55 | List<Long> btnIds = contentCodes.stream().map(item -> {return Long.parseLong(item.toString().split("#")[0]);}).collect(Collectors.toList()); | ||
56 | Map<Long, String> btnNames = templateParamValueService.btnNames(btnIds); | ||
57 | //查询btn name集合 | ||
58 | if (CollectionUtils.isNotEmpty(contentCodes)) { | ||
59 | for (Object item : contentCodes) { | ||
60 | String key = String.valueOf(item); | ||
61 | String[] split = key.split("#"); | ||
62 | if (split.length < 2) { | ||
63 | continue; | ||
64 | } | ||
65 | Long btnId = Long.parseLong(split[0]); | ||
66 | String contentCode = split[1]; | ||
67 | String name = allContents.get(item).toString(); | ||
68 | name = StringUtils.isNotEmpty(name) ? name : btnNames.get(btnId); | ||
69 | |||
70 | String day = LocalDate.now().toString(); | ||
71 | Integer hour = LocalDateTime.now().getHour(); | ||
72 | |||
73 | // 小时pv、uv值 | ||
74 | ContentPVUVHour pvUvHour1 = | ||
75 | this.contentPVUVHourService. | ||
76 | findByBtnIdAndCodeAndDayAndHour(btnId, contentCode, day, hour); | ||
77 | if (Objects.isNull(pvUvHour1.getId())) { | ||
78 | |||
79 | Integer hourPv = this.getHourPV(key); | ||
80 | Integer hourUv = this.getHourUV(key); | ||
81 | log.info("hourPv ==>> {}", hourPv); | ||
82 | log.info("hourUv ==>> {}", hourUv); | ||
83 | |||
84 | ContentPVUVHour pvUvHour = new ContentPVUVHour(); | ||
85 | pvUvHour.setDay(LocalDate.now().toString()); | ||
86 | pvUvHour.setHour(LocalDateTime.now().getHour()); | ||
87 | pvUvHour.setPv(hourPv); | ||
88 | pvUvHour.setUv(hourUv); | ||
89 | pvUvHour.setHour(hour); | ||
90 | pvUvHour.setDay(day); | ||
91 | pvUvHour.setTemplateParamValueId(btnId); | ||
92 | pvUvHour.setBtnName(btnNames.get(btnId)); | ||
93 | pvUvHour.setCode(contentCode); | ||
94 | pvUvHour.setName(name); | ||
95 | log.info("PvUvHour不存在,创建PvUvHour: {}", pvUvHour); | ||
96 | this.contentPVUVHourService.create(pvUvHour); | ||
97 | |||
98 | } | ||
99 | else { | ||
100 | |||
101 | Integer hourPv = this.getHourPV(key); | ||
102 | Integer hourUv = this.getHourUV(key); | ||
103 | |||
104 | log.info("访问每小时次数更新 redisPV: {}, dbPV: {}, redisUV: {}, dbUV: {}", hourPv, pvUvHour1.getPv(), hourUv, pvUvHour1.getUv()); | ||
105 | |||
106 | if (pvUvHour1.getPv() != hourPv || pvUvHour1.getUv() != hourUv) { | ||
107 | |||
108 | if (pvUvHour1.getPv() >= hourPv) { | ||
109 | hourPv = pvUvHour1.getPv(); | ||
110 | } | ||
111 | |||
112 | if (pvUvHour1.getUv() >= hourUv) { | ||
113 | hourUv = pvUvHour1.getUv(); | ||
114 | } | ||
115 | |||
116 | pvUvHour1.setPv(hourPv); | ||
117 | pvUvHour1.setUv(hourUv); | ||
118 | pvUvHour1.setUpdateTime(TimestampUtil.now()); | ||
119 | this.contentPVUVHourService.update(pvUvHour1); | ||
120 | } | ||
121 | |||
122 | } | ||
123 | |||
124 | // day pv、uv值 | ||
125 | ContentPVUVDay pvUvDay1 = this.contentPVUVDayService.findByBtnIdAndCodeAndDay(btnId, contentCode, day); | ||
126 | if(Objects.isNull(pvUvDay1.getId())){ | ||
127 | ContentPVUVDay pvUvDay = new ContentPVUVDay(); | ||
128 | pvUvDay.setTemplateParamValueId(btnId); | ||
129 | pvUvDay.setBtnName(btnNames.get(btnId)); | ||
130 | pvUvDay.setCode(contentCode); | ||
131 | pvUvDay.setName(name); | ||
132 | pvUvDay.setDay(day); | ||
133 | |||
134 | Integer dayPv = this.getDayPV(key); | ||
135 | Integer dayUv = this.getDayUV(key); | ||
136 | log.info("dayPv ==>> {}", dayPv); | ||
137 | log.info("dayUv ==>> {}", dayUv); | ||
138 | pvUvDay.setPv(dayPv); | ||
139 | pvUvDay.setUv(dayUv); | ||
140 | log.info("PvUvDay不存在,创建PvUvDay: {}", pvUvDay); | ||
141 | this.contentPVUVDayService.create(pvUvDay); | ||
142 | } | ||
143 | else { | ||
144 | |||
145 | Integer dayPv = this.getDayPV(key); | ||
146 | Integer dayUv = this.getDayUV(key); | ||
147 | log.info("dayPv ==>> {}", dayPv); | ||
148 | log.info("dayUv ==>> {}", dayUv); | ||
149 | |||
150 | log.info("访问每日次数更新 redisPV: {}, dbPV: {}, redisUV: {}, dbUV: {}", dayPv, pvUvDay1.getPv(), dayUv, pvUvDay1.getUv()); | ||
151 | |||
152 | if (pvUvDay1.getPv() != dayPv || pvUvDay1.getUv() != dayUv) { | ||
153 | |||
154 | if (pvUvDay1.getPv() >= dayPv) { | ||
155 | dayPv = pvUvDay1.getPv(); | ||
156 | } | ||
157 | |||
158 | if (pvUvDay1.getUv() >= dayUv) { | ||
159 | dayUv = pvUvDay1.getUv(); | ||
160 | } | ||
161 | |||
162 | pvUvDay1.setPv(dayPv); | ||
163 | pvUvDay1.setUv(dayUv); | ||
164 | pvUvDay1.setUpdateTime(TimestampUtil.now()); | ||
165 | this.contentPVUVDayService.update(pvUvDay1); | ||
166 | } | ||
167 | |||
168 | } | ||
169 | |||
170 | // all | ||
171 | ContentPVUV pvUv1 = this.contentPVUVService.findByBtnIdAndCode(btnId, contentCode); | ||
172 | if(Objects.isNull(pvUv1.getId())){ | ||
173 | ContentPVUV pvUv = new ContentPVUV(); | ||
174 | |||
175 | Integer allPV = this.getAllPV(key); | ||
176 | Integer allUv = this.getAllUV(key); | ||
177 | log.info("allPV ==>> {}", allPV); | ||
178 | log.info("allUv ==>> {}", allUv); | ||
179 | pvUv.setPv(allPV); | ||
180 | pvUv.setUv(allUv); | ||
181 | pvUv.setTemplateParamValueId(btnId); | ||
182 | pvUv.setBtnName(btnNames.get(btnId)); | ||
183 | pvUv.setCode(contentCode); | ||
184 | pvUv.setName(name); | ||
185 | log.info("PvUv不存在,创建PvUvALL: {}", pvUv); | ||
186 | this.contentPVUVService.create(pvUv); | ||
187 | |||
188 | } | ||
189 | else { | ||
190 | |||
191 | Integer allPV = this.getAllPV(key); | ||
192 | Integer allUv = this.getAllUV(key); | ||
193 | |||
194 | log.info("访问总次数更新 redisPV: {}, dbPV: {}, redisUV: {}, dbUV: {}", allPV, pvUv1.getPv(), allUv, pvUv1.getUv()); | ||
195 | |||
196 | if (pvUv1.getPv() != allPV || pvUv1.getUv() != allUv) { | ||
197 | |||
198 | if (pvUv1.getPv() >= allPV) { | ||
199 | allPV = pvUv1.getPv(); | ||
200 | } | ||
201 | |||
202 | if (pvUv1.getUv() >= allUv) { | ||
203 | allUv = pvUv1.getUv(); | ||
204 | } | ||
205 | |||
206 | pvUv1.setPv(allPV); | ||
207 | pvUv1.setUv(allUv); | ||
208 | pvUv1.setUpdateTime(TimestampUtil.now()); | ||
209 | this.contentPVUVService.update(pvUv1); | ||
210 | } | ||
211 | |||
212 | } | ||
213 | |||
214 | } | ||
215 | |||
216 | } | ||
217 | return true; | ||
218 | } | ||
219 | |||
220 | private Integer getHourPV(String item){ | ||
221 | int hour = LocalDateTime.now().getHour(); | ||
222 | String hourStr = ""; | ||
223 | if (hour < 10) { | ||
224 | hourStr = "0"+hour; | ||
225 | } else { | ||
226 | hourStr = String.valueOf(hour); | ||
227 | } | ||
228 | log.info("getHourPV ==>> key ==>> {}", "CONTENT_PV" + "|" + item +"|" + LocalDate.now()+"|"+hourStr); | ||
229 | Object hourBtnClickPV = this.redisUtils.hget("CONTENT_PV" + "|" + item +"|" + LocalDate.now()+"|"+hourStr, "ALL"); | ||
230 | if (Objects.nonNull(hourBtnClickPV)) { | ||
231 | return Integer.valueOf(hourBtnClickPV.toString()); | ||
232 | } | ||
233 | |||
234 | return 0; | ||
235 | } | ||
236 | |||
237 | private Integer getDayPV(String item){ | ||
238 | log.info("getDayPV ==>> key ==>> {}", "CONTENT_PV" + "|" + item + "|" + LocalDate.now()); | ||
239 | Object hourBtnClickPV = this.redisUtils.hget("CONTENT_PV" + "|" + item + "|" + LocalDate.now(), "ALL"); | ||
240 | if (Objects.nonNull(hourBtnClickPV)) { | ||
241 | return Integer.valueOf(hourBtnClickPV.toString()); | ||
242 | } | ||
243 | |||
244 | return 0; | ||
245 | } | ||
246 | |||
247 | private Integer getAllPV(String item){ | ||
248 | log.info("getAllPV ==>> key ==>> {}", "CONTENT_PV" + "|" + item); | ||
249 | Object hourBtnClickPV = this.redisUtils.hget("CONTENT_PV" + "|" + item, "ALL"); | ||
250 | if (Objects.nonNull(hourBtnClickPV)) { | ||
251 | return Integer.valueOf(hourBtnClickPV.toString()); | ||
252 | } | ||
253 | |||
254 | return 0; | ||
255 | } | ||
256 | |||
257 | private Integer getHourUV(String item){ | ||
258 | int hour = LocalDateTime.now().getHour(); | ||
259 | String hourStr = ""; | ||
260 | if (hour < 10) { | ||
261 | hourStr = "0"+hour; | ||
262 | } else { | ||
263 | hourStr = String.valueOf(hour); | ||
264 | } | ||
265 | log.info("getHourUV ==>> key ==>> {}", "CONTENT_UV" + "|" + item + "|" + LocalDate.now()+"|"+hourStr); | ||
266 | Object hourBtnClickUV = this.redisUtils.hget("CONTENT_UV" + "|" + item + "|" + LocalDate.now()+"|"+hourStr, "ALL"); | ||
267 | if (Objects.nonNull(hourBtnClickUV)) { | ||
268 | return Integer.valueOf(hourBtnClickUV.toString()); | ||
269 | } | ||
270 | |||
271 | return 0; | ||
272 | } | ||
273 | |||
274 | private Integer getDayUV(String item){ | ||
275 | log.info("getDayUV ==>> key ==>> {}", "CONTENT_UV" + "|" + item + "|" + LocalDate.now()); | ||
276 | Object hourBtnClickUV = this.redisUtils.hget("CONTENT_UV" + "|" + item + "|" + LocalDate.now(), "ALL"); | ||
277 | if (Objects.nonNull(hourBtnClickUV)) { | ||
278 | return Integer.valueOf(hourBtnClickUV.toString()); | ||
279 | } | ||
280 | |||
281 | return 0; | ||
282 | } | ||
283 | |||
284 | private Integer getAllUV(String item){ | ||
285 | log.info("getAllUV ==>> key ==>> {}", "CONTENT_UV" + "|" + item); | ||
286 | Object hourBtnClickUV = this.redisUtils.hget("CONTENT_UV" + "|" + item, "ALL"); | ||
287 | if (Objects.nonNull(hourBtnClickUV)) { | ||
288 | return Integer.valueOf(hourBtnClickUV.toString()); | ||
289 | } | ||
290 | |||
291 | return 0; | ||
292 | } | ||
293 | |||
294 | private Map<Object,Object> getAllContents(){ | ||
295 | log.info("getAllContents ==>> key ==>> {}", "CONTENT_BTN_CODE"); | ||
296 | Map<Object, Object> allContents = this.redisUtils.hmget("CONTENT_BTN_CODE"); | ||
297 | return allContents; | ||
298 | } | ||
299 | |||
300 | } |
1 | package com.topdraw.schedule; | ||
2 | |||
3 | import com.topdraw.business.process.calculate.task.ContentCalculateTask; | ||
4 | import com.topdraw.business.process.calculate.task.PvUvCalculateTask; | ||
5 | import lombok.extern.slf4j.Slf4j; | ||
6 | import org.springframework.beans.factory.annotation.Autowired; | ||
7 | import org.springframework.beans.factory.annotation.Value; | ||
8 | import org.springframework.scheduling.annotation.EnableScheduling; | ||
9 | import org.springframework.scheduling.annotation.Scheduled; | ||
10 | import org.springframework.stereotype.Component; | ||
11 | |||
12 | import java.time.LocalDateTime; | ||
13 | |||
14 | @Component | ||
15 | @Slf4j | ||
16 | @EnableScheduling | ||
17 | public class TransferContentScheduleTask { | ||
18 | |||
19 | @Autowired | ||
20 | private ContentCalculateTask contentCalculateTask; | ||
21 | |||
22 | @Value("${cronContent:0 0/5 * * * ?}") | ||
23 | private String cron; | ||
24 | |||
25 | public String cron(){ | ||
26 | return cron; | ||
27 | } | ||
28 | |||
29 | /** | ||
30 | * 统计pv、uv | ||
31 | */ | ||
32 | @Scheduled(cron = "#{transferContentScheduleTask.cron()}") | ||
33 | public void calculatePvUv2Mysql(){ | ||
34 | log.info("专题内容pv、uv统计 ===>>> 开始 !!!" + LocalDateTime.now()); | ||
35 | this.contentCalculateTask.calculateRedisData2Mysql(); | ||
36 | } | ||
37 | |||
38 | } |
-
Please register or sign in to post a comment