Commit 88796c9249ad5e1fa9ce7f8e3114c71f7d2b50b0
Merge remote-tracking branch 'origin/test'
Showing
31 changed files
with
1201 additions
and
11 deletions
fw-valhalla-dao/src/main/java/cn/fw/valhalla/dao/mapper/PubCluePoolMapper.java
@@ -2,6 +2,8 @@ package cn.fw.valhalla.dao.mapper; | @@ -2,6 +2,8 @@ package cn.fw.valhalla.dao.mapper; | ||
2 | 2 | ||
3 | import cn.fw.valhalla.domain.db.pub.PubCluePool; | 3 | import cn.fw.valhalla.domain.db.pub.PubCluePool; |
4 | import cn.fw.valhalla.domain.dto.FollowPoolDTO; | 4 | import cn.fw.valhalla.domain.dto.FollowPoolDTO; |
5 | +import cn.fw.valhalla.domain.dto.PubCluePoolReportDTO; | ||
6 | +import cn.fw.valhalla.domain.dto.PubCluePoolReportQueryDTO; | ||
5 | import cn.fw.valhalla.domain.query.FollowPoolQueryVO; | 7 | import cn.fw.valhalla.domain.query.FollowPoolQueryVO; |
6 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 8 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
7 | import org.apache.ibatis.annotations.Param; | 9 | import org.apache.ibatis.annotations.Param; |
@@ -37,4 +39,11 @@ public interface PubCluePoolMapper extends BaseMapper<PubCluePool> { | @@ -37,4 +39,11 @@ public interface PubCluePoolMapper extends BaseMapper<PubCluePool> { | ||
37 | * @return | 39 | * @return |
38 | */ | 40 | */ |
39 | Long followListCount(@Param("condition") FollowPoolQueryVO queryVO); | 41 | Long followListCount(@Param("condition") FollowPoolQueryVO queryVO); |
42 | + | ||
43 | + /** | ||
44 | + * 查询站岗分配 | ||
45 | + * @param dto | ||
46 | + * @return | ||
47 | + */ | ||
48 | + List<PubCluePoolReportDTO> countPubCluePoolList(PubCluePoolReportQueryDTO dto); | ||
40 | } | 49 | } |
fw-valhalla-dao/src/main/java/cn/fw/valhalla/dao/mapper/PublicPoolMapper.java
@@ -2,6 +2,8 @@ package cn.fw.valhalla.dao.mapper; | @@ -2,6 +2,8 @@ package cn.fw.valhalla.dao.mapper; | ||
2 | 2 | ||
3 | import cn.fw.valhalla.domain.db.pool.PublicPool; | 3 | import cn.fw.valhalla.domain.db.pool.PublicPool; |
4 | import cn.fw.valhalla.domain.dto.PublicPoolDTO; | 4 | import cn.fw.valhalla.domain.dto.PublicPoolDTO; |
5 | +import cn.fw.valhalla.domain.dto.PublicPoolReportDTO; | ||
6 | +import cn.fw.valhalla.domain.dto.PublicPoolReportQueryDTO; | ||
5 | import cn.fw.valhalla.domain.query.PublicPoolQueryVO; | 7 | import cn.fw.valhalla.domain.query.PublicPoolQueryVO; |
6 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 8 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
7 | import org.apache.ibatis.annotations.Param; | 9 | import org.apache.ibatis.annotations.Param; |
@@ -41,4 +43,11 @@ public interface PublicPoolMapper extends BaseMapper<PublicPool> { | @@ -41,4 +43,11 @@ public interface PublicPoolMapper extends BaseMapper<PublicPool> { | ||
41 | * @return | 43 | * @return |
42 | */ | 44 | */ |
43 | List<String> queryIdListByShops(@Param("shopIds") List<Long> shopIds); | 45 | List<String> queryIdListByShops(@Param("shopIds") List<Long> shopIds); |
46 | + | ||
47 | + /** | ||
48 | + * 查询公共池来源统计 | ||
49 | + * @param dto | ||
50 | + * @return | ||
51 | + */ | ||
52 | + List<PublicPoolReportDTO> countPublicPoolList(PublicPoolReportQueryDTO dto); | ||
44 | } | 53 | } |
fw-valhalla-dao/src/main/java/cn/fw/valhalla/dao/mapper/PublicReportDataMapper.java
0 → 100644
1 | +package cn.fw.valhalla.dao.mapper; | ||
2 | + | ||
3 | +import cn.fw.valhalla.domain.db.PublicReportData; | ||
4 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
5 | +import org.springframework.stereotype.Repository; | ||
6 | + | ||
7 | +/** | ||
8 | + * @author : kurisu | ||
9 | + * @className : SecretReportHistoryMapper | ||
10 | + * @description : 公共池报表数据(初次抽取)mapper | ||
11 | + * @date: 2021-02-21 14:54 | ||
12 | + */ | ||
13 | +@Repository | ||
14 | +public interface PublicReportDataMapper extends BaseMapper<PublicReportData> { | ||
15 | + | ||
16 | +} |
fw-valhalla-dao/src/main/java/cn/fw/valhalla/dao/mapper/StammkundePoolMapper.java
@@ -2,6 +2,8 @@ package cn.fw.valhalla.dao.mapper; | @@ -2,6 +2,8 @@ package cn.fw.valhalla.dao.mapper; | ||
2 | 2 | ||
3 | import cn.fw.valhalla.domain.db.pool.StammkundePool; | 3 | import cn.fw.valhalla.domain.db.pool.StammkundePool; |
4 | import cn.fw.valhalla.domain.dto.StammkundePoolDTO; | 4 | import cn.fw.valhalla.domain.dto.StammkundePoolDTO; |
5 | +import cn.fw.valhalla.domain.dto.StammkundePoolReportDTO; | ||
6 | +import cn.fw.valhalla.domain.dto.StammkundePoolReportQueryDTO; | ||
5 | import cn.fw.valhalla.domain.query.StammkundePoolQueryVO; | 7 | import cn.fw.valhalla.domain.query.StammkundePoolQueryVO; |
6 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 8 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
7 | import org.apache.ibatis.annotations.Param; | 9 | import org.apache.ibatis.annotations.Param; |
@@ -32,4 +34,13 @@ public interface StammkundePoolMapper extends BaseMapper<StammkundePool> { | @@ -32,4 +34,13 @@ public interface StammkundePoolMapper extends BaseMapper<StammkundePool> { | ||
32 | * @return | 34 | * @return |
33 | */ | 35 | */ |
34 | Long stammkundeListCount(@Param("condition") StammkundePoolQueryVO queryVO); | 36 | Long stammkundeListCount(@Param("condition") StammkundePoolQueryVO queryVO); |
37 | + | ||
38 | + | ||
39 | + | ||
40 | + /** | ||
41 | + * 查询渠道到店统计 | ||
42 | + * @param dto | ||
43 | + * @return | ||
44 | + */ | ||
45 | + List<StammkundePoolReportDTO> countStammkundePoolList(StammkundePoolReportQueryDTO dto); | ||
35 | } | 46 | } |
fw-valhalla-dao/src/main/resources/mapper/PubCluePoolMapper.xml
@@ -180,4 +180,36 @@ | @@ -180,4 +180,36 @@ | ||
180 | </if> | 180 | </if> |
181 | </where> | 181 | </where> |
182 | </select> | 182 | </select> |
183 | + | ||
184 | + | ||
185 | + <select id="countPubCluePoolList" resultType="cn.fw.valhalla.domain.dto.PubCluePoolReportDTO" parameterType="cn.fw.valhalla.domain.dto.PubCluePoolReportQueryDTO"> | ||
186 | + SELECT | ||
187 | + shop_id, | ||
188 | + shop_name, | ||
189 | + adviser_id, | ||
190 | + adviser_name, | ||
191 | + COUNT(*) total | ||
192 | + FROM | ||
193 | + pub_clue_pool | ||
194 | + <where> | ||
195 | + group_id = #{groupId} | ||
196 | + <if test="startDate != null"> | ||
197 | + and create_time <![CDATA[ >= ]]> #{startDate} | ||
198 | + </if> | ||
199 | + <if test="endDate != null"> | ||
200 | + and create_time <![CDATA[ <= ]]> #{endDate} | ||
201 | + </if> | ||
202 | + <if test="sourceTypes != null and sourceTypes.size > 0 "> | ||
203 | + AND source_type IN | ||
204 | + <foreach collection="sourceTypes" item="v" separator=" , " open="(" close=")"> | ||
205 | + #{v} | ||
206 | + </foreach> | ||
207 | + </if> | ||
208 | + </where> | ||
209 | + GROUP BY | ||
210 | + shop_id, | ||
211 | + adviser_id | ||
212 | + </select> | ||
213 | + | ||
214 | + | ||
183 | </mapper> | 215 | </mapper> |
fw-valhalla-dao/src/main/resources/mapper/PublicPoolMapper.xml
@@ -165,4 +165,27 @@ | @@ -165,4 +165,27 @@ | ||
165 | </if> | 165 | </if> |
166 | </where> | 166 | </where> |
167 | </select> | 167 | </select> |
168 | + | ||
169 | + | ||
170 | + <select id="countPublicPoolList" resultType="cn.fw.valhalla.domain.dto.PublicPoolReportDTO" parameterType="cn.fw.valhalla.domain.dto.PublicPoolReportQueryDTO"> | ||
171 | + SELECT | ||
172 | + `type`, | ||
173 | + shop_id, | ||
174 | + shop_name, | ||
175 | + COUNT(*) total | ||
176 | + FROM | ||
177 | + public_pool | ||
178 | + WHERE | ||
179 | + group_id = #{groupId} | ||
180 | + <if test="startDate != null"> | ||
181 | + and create_time <![CDATA[ >= ]]> #{startDate} | ||
182 | + </if> | ||
183 | + <if test="endDate != null"> | ||
184 | + and create_time <![CDATA[ <= ]]> #{endDate} | ||
185 | + </if> | ||
186 | + GROUP BY | ||
187 | + shop_id,`type` | ||
188 | + </select> | ||
189 | + | ||
190 | + | ||
168 | </mapper> | 191 | </mapper> |
fw-valhalla-dao/src/main/resources/mapper/PublicReportDataMapper.xml
0 → 100644
fw-valhalla-dao/src/main/resources/mapper/StammkundePoolMapper.xml
@@ -245,4 +245,38 @@ | @@ -245,4 +245,38 @@ | ||
245 | </if> | 245 | </if> |
246 | </where> | 246 | </where> |
247 | </select> | 247 | </select> |
248 | + | ||
249 | + | ||
250 | + <select id="countStammkundePoolList" resultType="cn.fw.valhalla.domain.dto.StammkundePoolReportDTO" parameterType="cn.fw.valhalla.domain.dto.StammkundePoolReportQueryDTO"> | ||
251 | + SELECT | ||
252 | + shop_id, | ||
253 | + adviser_id, | ||
254 | + adviser_name, | ||
255 | + COUNT(*) total | ||
256 | + FROM | ||
257 | + stammkunde_pool | ||
258 | + <where> | ||
259 | + group_id = #{groupId} | ||
260 | + <if test="fromPublic != null"> | ||
261 | + and from_public = #{fromPublic} | ||
262 | + </if> | ||
263 | + <if test="startDate != null"> | ||
264 | + and create_time <![CDATA[ >= ]]> #{startDate} | ||
265 | + </if> | ||
266 | + <if test="endDate != null"> | ||
267 | + and create_time <![CDATA[ <= ]]> #{endDate} | ||
268 | + </if> | ||
269 | + <if test="sourceSets != null and sourceSets.size > 0 "> | ||
270 | + AND sources IN | ||
271 | + <foreach collection="sourceSets" item="v" separator=" , " open="(" close=")"> | ||
272 | + #{v} | ||
273 | + </foreach> | ||
274 | + </if> | ||
275 | + </where> | ||
276 | + GROUP BY | ||
277 | + shop_id, | ||
278 | + adviser_id | ||
279 | + </select> | ||
280 | + | ||
281 | + | ||
248 | </mapper> | 282 | </mapper> |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/db/PublicReportData.java
0 → 100644
1 | +package cn.fw.valhalla.domain.db; | ||
2 | + | ||
3 | +import cn.fw.common.data.entity.BaseAuditableTimeEntity; | ||
4 | +import lombok.Data; | ||
5 | + | ||
6 | +import java.time.LocalDate; | ||
7 | + | ||
8 | +/** | ||
9 | + * 公共池报表数据(初次抽取)(PublicReportData)实体类 | ||
10 | + * @author makejava | ||
11 | + * @since 2023-05-12 16:09:45 | ||
12 | + */ | ||
13 | +@Data | ||
14 | +public class PublicReportData extends BaseAuditableTimeEntity<PublicReportData, Long> { | ||
15 | + /** | ||
16 | + * 数据日期 | ||
17 | + */ | ||
18 | + private LocalDate dataDate; | ||
19 | + /** | ||
20 | + * 数据维度: 10门店,20人员,99来源 | ||
21 | + */ | ||
22 | + private String reportDimension; | ||
23 | + /** | ||
24 | + * 来源类型 1:首保 2:流失 3:主动放弃 (店,来源) | ||
25 | + */ | ||
26 | + private Integer type; | ||
27 | + /** | ||
28 | + * 用户id | ||
29 | + */ | ||
30 | + private Long userId; | ||
31 | + /** | ||
32 | + * 用户名称 | ||
33 | + */ | ||
34 | + private String userName; | ||
35 | + /** | ||
36 | + * 门店id | ||
37 | + */ | ||
38 | + private Long shopId; | ||
39 | + /** | ||
40 | + * 门店名称 | ||
41 | + */ | ||
42 | + private String shopName; | ||
43 | + /** | ||
44 | + * 月初始数(店,来源) | ||
45 | + */ | ||
46 | + private Integer monthInitial; | ||
47 | + /** | ||
48 | + * 日新增(店,来源) | ||
49 | + */ | ||
50 | + private Integer dayIncrease; | ||
51 | + /** | ||
52 | + * 月新增(店,来源) | ||
53 | + */ | ||
54 | + private Integer monthIncrease; | ||
55 | + /** | ||
56 | + * 截止当前(店,来源) | ||
57 | + */ | ||
58 | + private Integer currentQuantity; | ||
59 | + /** | ||
60 | + * 日站岗分配(店,人) | ||
61 | + */ | ||
62 | + private Integer dayStandQuantity; | ||
63 | + /** | ||
64 | + * 月站岗分配(店,人) | ||
65 | + */ | ||
66 | + private Integer monthStandQuantity; | ||
67 | + /** | ||
68 | + * 日自然到店成交((店,人)) | ||
69 | + */ | ||
70 | + private Integer dayNaturalQuantity; | ||
71 | + /** | ||
72 | + * 月自然到店成交((店,人)) | ||
73 | + */ | ||
74 | + private Integer monthNaturalQuantity; | ||
75 | + /** | ||
76 | + * 集团id | ||
77 | + */ | ||
78 | + private Long groupId; | ||
79 | + | ||
80 | + public PublicReportData() { | ||
81 | + } | ||
82 | + | ||
83 | + public PublicReportData(String reportDimension, Long groupId) { | ||
84 | + this.reportDimension = reportDimension; | ||
85 | + this.groupId = groupId; | ||
86 | + } | ||
87 | +} | ||
88 | + |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/db/pool/StammkundePool.java
@@ -77,4 +77,8 @@ public class StammkundePool extends BaseAuditableTimeEntity<StammkundePool, Long | @@ -77,4 +77,8 @@ public class StammkundePool extends BaseAuditableTimeEntity<StammkundePool, Long | ||
77 | * 集团id | 77 | * 集团id |
78 | */ | 78 | */ |
79 | private Long groupId; | 79 | private Long groupId; |
80 | + /** | ||
81 | + * 公共池来源【针对自然进店的标识】 | ||
82 | + */ | ||
83 | + private Boolean fromPublic; | ||
80 | } | 84 | } |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/dto/PubCluePoolReportDTO.java
0 → 100644
1 | +package cn.fw.valhalla.domain.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +/** | ||
6 | + * @author : kurisu | ||
7 | + * @className : FollowClueDTO | ||
8 | + * @description : 查询站岗分配聚合 | ||
9 | + * @date: 2020-11-20 15:27 | ||
10 | + */ | ||
11 | +@Data | ||
12 | +public class PubCluePoolReportDTO { | ||
13 | + | ||
14 | + /** | ||
15 | + * 门店id | ||
16 | + */ | ||
17 | + private Long shopId; | ||
18 | + | ||
19 | + /** | ||
20 | + * 门店名称 | ||
21 | + */ | ||
22 | + private String shopName; | ||
23 | + | ||
24 | + /** | ||
25 | + * 顾问id | ||
26 | + */ | ||
27 | + private Long adviserId; | ||
28 | + | ||
29 | + /** | ||
30 | + * 顾问名称 | ||
31 | + */ | ||
32 | + private String adviserName; | ||
33 | + | ||
34 | + /** | ||
35 | + * 统计值 | ||
36 | + */ | ||
37 | + private Long total; | ||
38 | +} |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/dto/PubCluePoolReportQueryDTO.java
0 → 100644
1 | +package cn.fw.valhalla.domain.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import java.time.LocalDateTime; | ||
6 | +import java.util.Set; | ||
7 | + | ||
8 | +/** | ||
9 | + * @author : kurisu | ||
10 | + * @className : FollowClueDTO | ||
11 | + * @description : 查询站岗分配聚合 | ||
12 | + * @date: 2020-11-20 15:27 | ||
13 | + */ | ||
14 | +@Data | ||
15 | +public class PubCluePoolReportQueryDTO { | ||
16 | + | ||
17 | + private LocalDateTime startDate; | ||
18 | + | ||
19 | + private LocalDateTime endDate; | ||
20 | + | ||
21 | + private Set<Integer> sourceTypes; | ||
22 | + | ||
23 | + private Long groupId; | ||
24 | + | ||
25 | + public PubCluePoolReportQueryDTO() { | ||
26 | + } | ||
27 | + | ||
28 | + public PubCluePoolReportQueryDTO(Long groupId) { | ||
29 | + this.groupId = groupId; | ||
30 | + } | ||
31 | +} |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/dto/PublicPoolReportDTO.java
0 → 100644
1 | +package cn.fw.valhalla.domain.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +/** | ||
6 | + * @author : kurisu | ||
7 | + * @className : FollowClueDTO | ||
8 | + * @description : 查询分配聚合 | ||
9 | + * @date: 2020-11-20 15:27 | ||
10 | + */ | ||
11 | +@Data | ||
12 | +public class PublicPoolReportDTO { | ||
13 | + | ||
14 | + /** | ||
15 | + * 类型 1:首保 2:流失 3:主动放弃 | ||
16 | + */ | ||
17 | + private Integer type; | ||
18 | + | ||
19 | + /** | ||
20 | + * 门店id | ||
21 | + */ | ||
22 | + private Long shopId; | ||
23 | + | ||
24 | + /** | ||
25 | + * 门店名称 | ||
26 | + */ | ||
27 | + private String shopName; | ||
28 | + | ||
29 | + /** | ||
30 | + * 统计值 | ||
31 | + */ | ||
32 | + private Long total; | ||
33 | +} |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/dto/PublicPoolReportQueryDTO.java
0 → 100644
1 | +package cn.fw.valhalla.domain.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import java.time.LocalDateTime; | ||
6 | + | ||
7 | +/** | ||
8 | + * @author : kurisu | ||
9 | + * @className : FollowClueDTO | ||
10 | + * @description : 查询分配聚合 | ||
11 | + * @date: 2020-11-20 15:27 | ||
12 | + */ | ||
13 | +@Data | ||
14 | +public class PublicPoolReportQueryDTO { | ||
15 | + | ||
16 | + private LocalDateTime startDate; | ||
17 | + | ||
18 | + private LocalDateTime endDate; | ||
19 | + | ||
20 | + private Long groupId; | ||
21 | + | ||
22 | + public PublicPoolReportQueryDTO() { | ||
23 | + } | ||
24 | + | ||
25 | + public PublicPoolReportQueryDTO(Long groupId) { | ||
26 | + this.groupId = groupId; | ||
27 | + } | ||
28 | +} |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/dto/StammkundePoolReportDTO.java
0 → 100644
1 | +package cn.fw.valhalla.domain.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +/** | ||
6 | + * @author : kurisu | ||
7 | + * @className : FollowClueDTO | ||
8 | + * @description : 查询分配聚合 | ||
9 | + * @date: 2020-11-20 15:27 | ||
10 | + */ | ||
11 | +@Data | ||
12 | +public class StammkundePoolReportDTO { | ||
13 | + | ||
14 | + /** | ||
15 | + * 门店id | ||
16 | + */ | ||
17 | + private Long shopId; | ||
18 | + | ||
19 | + /** | ||
20 | + * 顾问id | ||
21 | + */ | ||
22 | + private Long adviserId; | ||
23 | + | ||
24 | + /** | ||
25 | + * 顾问名称 | ||
26 | + */ | ||
27 | + private String adviserName; | ||
28 | + | ||
29 | + /** | ||
30 | + * 统计值 | ||
31 | + */ | ||
32 | + private Long total; | ||
33 | +} |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/dto/StammkundePoolReportQueryDTO.java
0 → 100644
1 | +package cn.fw.valhalla.domain.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import java.time.LocalDateTime; | ||
6 | +import java.util.Set; | ||
7 | + | ||
8 | +/** | ||
9 | + * @author : kurisu | ||
10 | + * @className : FollowClueDTO | ||
11 | + * @description : 查询分配聚合 | ||
12 | + * @date: 2020-11-20 15:27 | ||
13 | + */ | ||
14 | +@Data | ||
15 | +public class StammkundePoolReportQueryDTO { | ||
16 | + | ||
17 | + private LocalDateTime startDate; | ||
18 | + | ||
19 | + private LocalDateTime endDate; | ||
20 | + | ||
21 | + private Set<Integer> sourceSets; | ||
22 | + | ||
23 | + /** | ||
24 | + * 公共池来源【针对自然进店的标识】 | ||
25 | + */ | ||
26 | + private Boolean fromPublic; | ||
27 | + | ||
28 | + private Long groupId; | ||
29 | + | ||
30 | + public StammkundePoolReportQueryDTO() { | ||
31 | + } | ||
32 | + | ||
33 | + public StammkundePoolReportQueryDTO(Long groupId) { | ||
34 | + this.groupId = groupId; | ||
35 | + } | ||
36 | +} |
fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/enums/ValhallaReportDimension.java
0 → 100644
1 | +package cn.fw.valhalla.domain.enums; | ||
2 | + | ||
3 | +import com.fasterxml.jackson.annotation.JsonCreator; | ||
4 | +import lombok.AllArgsConstructor; | ||
5 | +import lombok.Getter; | ||
6 | + | ||
7 | +/** | ||
8 | + * 维度 | ||
9 | + * <p> | ||
10 | + * create at 2020-07-14 | ||
11 | + * | ||
12 | + * @author zhangjj | ||
13 | + */ | ||
14 | +@AllArgsConstructor | ||
15 | +public enum ValhallaReportDimension { | ||
16 | + /** | ||
17 | + * 门店 | ||
18 | + */ | ||
19 | + D10("10"), | ||
20 | + /** | ||
21 | + * 人员 | ||
22 | + */ | ||
23 | + D20("20"), | ||
24 | + /** | ||
25 | + * 来源 | ||
26 | + */ | ||
27 | + D60("60"), | ||
28 | + ; | ||
29 | + | ||
30 | + /** | ||
31 | + * 值 | ||
32 | + */ | ||
33 | + @Getter | ||
34 | + private final String value; | ||
35 | + | ||
36 | + @JsonCreator | ||
37 | + public static ValhallaReportDimension ofValue(final String value) { | ||
38 | + for (final ValhallaReportDimension instance : ValhallaReportDimension.values()) { | ||
39 | + if (instance.getValue().equals(value)) { | ||
40 | + return instance; | ||
41 | + } | ||
42 | + } | ||
43 | + return null; | ||
44 | + } | ||
45 | +} |
fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/debug/DebugController.java
0 → 100644
1 | +package cn.fw.valhalla.controller.debug; | ||
2 | + | ||
3 | +import cn.fw.common.web.annotation.ControllerMethod; | ||
4 | +import cn.fw.data.base.domain.common.Message; | ||
5 | +import cn.fw.security.auth.client.annotation.Authorization; | ||
6 | +import cn.fw.security.auth.client.annotation.IgnoreAuth; | ||
7 | +import cn.fw.security.auth.client.enums.AuthType; | ||
8 | +import cn.fw.valhalla.common.utils.DateUtil; | ||
9 | +import cn.fw.valhalla.service.report.PublicReportBizService; | ||
10 | +import lombok.RequiredArgsConstructor; | ||
11 | +import lombok.extern.slf4j.Slf4j; | ||
12 | +import org.springframework.validation.annotation.Validated; | ||
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; | ||
17 | + | ||
18 | +import java.time.LocalDate; | ||
19 | +import java.util.Date; | ||
20 | +import java.util.Objects; | ||
21 | + | ||
22 | +import static cn.fw.common.web.util.ResultBuilder.success; | ||
23 | + | ||
24 | +/** | ||
25 | + * @author : kurisu | ||
26 | + * @className : DebugController | ||
27 | + * @description : 调试接口 | ||
28 | + * @date: 2020-10-22 11:06 | ||
29 | + */ | ||
30 | +@Slf4j | ||
31 | +@RestController | ||
32 | +@RequiredArgsConstructor | ||
33 | +@IgnoreAuth | ||
34 | +@Authorization(AuthType.APP) | ||
35 | +@Validated | ||
36 | +@RequestMapping("/valhalla/debug") | ||
37 | +public class DebugController { | ||
38 | + private final PublicReportBizService publicReportBizService; | ||
39 | + | ||
40 | + @GetMapping("/run/publicReportData") | ||
41 | + @ControllerMethod("公共池报表数据准备") | ||
42 | + public Message<Void> publicReportData(@RequestParam(required = false) Long groupId, | ||
43 | + @RequestParam(required = false)Date date) { | ||
44 | + if (Objects.isNull(groupId)) { | ||
45 | + groupId = 2L; | ||
46 | + } | ||
47 | + if (Objects.isNull(date)) { | ||
48 | + publicReportBizService.extracting(LocalDate.now().minusDays(1),groupId); | ||
49 | + } else { | ||
50 | + publicReportBizService.extracting(DateUtil.date2LocalDate(date),groupId); | ||
51 | + } | ||
52 | + return success(); | ||
53 | + } | ||
54 | +} |
fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/task/ReportPrepareTask.java
@@ -31,20 +31,18 @@ public class ReportPrepareTask { | @@ -31,20 +31,18 @@ public class ReportPrepareTask { | ||
31 | /** | 31 | /** |
32 | * 保持率进站率报表数据准备 | 32 | * 保持率进站率报表数据准备 |
33 | */ | 33 | */ |
34 | - @Scheduled(cron = "0 0 0 ? * * ") | 34 | + @Scheduled(cron = "30 0 0 ? * * ") |
35 | public void extractingData() { | 35 | public void extractingData() { |
36 | -// CompletableFuture.runAsync(() -> retentionRatioBizService.extracting(DateUtil.startDate(new Date())), ThreadPoolUtil.getInstance().getExecutor()); | ||
37 | retentionRatioBizService.extracting(DateUtil.startDate(new Date())); | 36 | retentionRatioBizService.extracting(DateUtil.startDate(new Date())); |
38 | } | 37 | } |
39 | 38 | ||
40 | /** | 39 | /** |
41 | - * 公共池报表数据准备 | 40 | + * 公共池报表数据准备,0点30分抽取 |
42 | */ | 41 | */ |
43 | @Scheduled(cron = "0 30 0 ? * * ") | 42 | @Scheduled(cron = "0 30 0 ? * * ") |
44 | public void extractingPublicData() { | 43 | public void extractingPublicData() { |
45 | final List<GroupDTO> groupList = oopService.allGroup(); | 44 | final List<GroupDTO> groupList = oopService.allGroup(); |
46 | - final LocalDate now = LocalDate.now(); | ||
47 | - | 45 | + final LocalDate now = LocalDate.now().minusDays(1); |
48 | for (GroupDTO group : groupList) { | 46 | for (GroupDTO group : groupList) { |
49 | try { | 47 | try { |
50 | publicReportBizService.extracting(now, group.getId()); | 48 | publicReportBizService.extracting(now, group.getId()); |
fw-valhalla-service/src/main/java/cn/fw/valhalla/component/producer/CustomerChangeProducer.java
1 | package cn.fw.valhalla.component.producer; | 1 | package cn.fw.valhalla.component.producer; |
2 | 2 | ||
3 | +import cn.fw.valhalla.domain.vo.customer.CustomerDetailVO; | ||
3 | import cn.fw.valhalla.sdk.result.CustomerInfoDto; | 4 | import cn.fw.valhalla.sdk.result.CustomerInfoDto; |
5 | +import cn.fw.valhalla.service.bus.cust.CustomerBizService; | ||
4 | import lombok.extern.slf4j.Slf4j; | 6 | import lombok.extern.slf4j.Slf4j; |
5 | import org.apache.rocketmq.spring.core.RocketMQTemplate; | 7 | import org.apache.rocketmq.spring.core.RocketMQTemplate; |
8 | +import org.springframework.beans.BeanUtils; | ||
6 | import org.springframework.beans.factory.annotation.Autowired; | 9 | import org.springframework.beans.factory.annotation.Autowired; |
7 | import org.springframework.stereotype.Component; | 10 | import org.springframework.stereotype.Component; |
8 | import org.springframework.web.bind.annotation.RequestMapping; | 11 | import org.springframework.web.bind.annotation.RequestMapping; |
9 | 12 | ||
13 | +import java.util.Objects; | ||
14 | + | ||
10 | /** | 15 | /** |
11 | * @author kurisu | 16 | * @author kurisu |
12 | */ | 17 | */ |
@@ -15,11 +20,19 @@ import org.springframework.web.bind.annotation.RequestMapping; | @@ -15,11 +20,19 @@ import org.springframework.web.bind.annotation.RequestMapping; | ||
15 | public class CustomerChangeProducer { | 20 | public class CustomerChangeProducer { |
16 | @Autowired | 21 | @Autowired |
17 | private RocketMQTemplate rocketMQTemplate; | 22 | private RocketMQTemplate rocketMQTemplate; |
23 | + @Autowired | ||
24 | + private CustomerBizService customerBizService; | ||
18 | 25 | ||
19 | @RequestMapping(value = "send") | 26 | @RequestMapping(value = "send") |
20 | public void send(CustomerInfoDto customerInfoDto) { | 27 | public void send(CustomerInfoDto customerInfoDto) { |
21 | try { | 28 | try { |
22 | log.info("售后保有客信息变更mq: body:[{}]", customerInfoDto); | 29 | log.info("售后保有客信息变更mq: body:[{}]", customerInfoDto); |
30 | + if (Objects.isNull(customerInfoDto.getGroupId())) { | ||
31 | + log.warn("售后保有客信息变更mq集团id为空"); | ||
32 | + return; | ||
33 | + } | ||
34 | + CustomerDetailVO detailByVin = customerBizService.getDetailByVin(customerInfoDto.getFrameNo(), customerInfoDto.getGroupId()); | ||
35 | + BeanUtils.copyProperties(detailByVin, customerInfoDto); | ||
23 | rocketMQTemplate.syncSend(CustomerInfoDto.TOPIC + ":*", customerInfoDto); | 36 | rocketMQTemplate.syncSend(CustomerInfoDto.TOPIC + ":*", customerInfoDto); |
24 | } catch (Exception e) { | 37 | } catch (Exception e) { |
25 | e.printStackTrace(); | 38 | e.printStackTrace(); |
fw-valhalla-service/src/main/java/cn/fw/valhalla/component/producer/RenewalSwitchProducer.kt
@@ -4,7 +4,6 @@ import cn.fw.valhalla.common.utils.DateUtil | @@ -4,7 +4,6 @@ import cn.fw.valhalla.common.utils.DateUtil | ||
4 | import cn.fw.valhalla.domain.enums.FollowTypeEnum | 4 | import cn.fw.valhalla.domain.enums.FollowTypeEnum |
5 | import cn.fw.valhalla.domain.enums.SettingTypeEnum | 5 | import cn.fw.valhalla.domain.enums.SettingTypeEnum |
6 | import cn.fw.valhalla.domain.vo.setting.SettingVO | 6 | import cn.fw.valhalla.domain.vo.setting.SettingVO |
7 | -import cn.fw.valhalla.sdk.result.CustomerDistributedMQ | ||
8 | import cn.fw.valhalla.sdk.result.RenewalSwitchMQ | 7 | import cn.fw.valhalla.sdk.result.RenewalSwitchMQ |
9 | import cn.fw.valhalla.service.bus.setting.SettingBizService | 8 | import cn.fw.valhalla.service.bus.setting.SettingBizService |
10 | import cn.fw.valhalla.service.bus.setting.strategy.SettingStrategy | 9 | import cn.fw.valhalla.service.bus.setting.strategy.SettingStrategy |
@@ -51,7 +50,7 @@ class RenewalSwitchProducer( | @@ -51,7 +50,7 @@ class RenewalSwitchProducer( | ||
51 | log.info("发送续保跟进切换mq消息。vin:{}", vin) | 50 | log.info("发送续保跟进切换mq消息。vin:{}", vin) |
52 | try { | 51 | try { |
53 | val mq = RenewalSwitchMQ(FollowTypeEnum.IR.value, vin, DateUtil.localDate2Date(deadline), groupId) | 52 | val mq = RenewalSwitchMQ(FollowTypeEnum.IR.value, vin, DateUtil.localDate2Date(deadline), groupId) |
54 | - rocketMQTemplate.syncSend(CustomerDistributedMQ.TOPIC + ":*", mq) | 53 | + rocketMQTemplate.syncSend(RenewalSwitchMQ.TOPIC + ":*", mq) |
55 | } catch (e: Exception) { | 54 | } catch (e: Exception) { |
56 | log.info("发送保有客分配结束mq消息失败!", e) | 55 | log.info("发送保有客分配结束mq消息失败!", e) |
57 | } | 56 | } |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/cust/CustomerChangeBizService.java
@@ -54,6 +54,7 @@ import org.springframework.util.CollectionUtils; | @@ -54,6 +54,7 @@ import org.springframework.util.CollectionUtils; | ||
54 | import java.time.LocalDateTime; | 54 | import java.time.LocalDateTime; |
55 | import java.util.*; | 55 | import java.util.*; |
56 | import java.util.concurrent.TimeUnit; | 56 | import java.util.concurrent.TimeUnit; |
57 | +import java.util.function.Consumer; | ||
57 | 58 | ||
58 | import static cn.fw.common.businessvalidator.Validator.BV; | 59 | import static cn.fw.common.businessvalidator.Validator.BV; |
59 | 60 | ||
@@ -397,9 +398,8 @@ public class CustomerChangeBizService extends AbstractCustomerService { | @@ -397,9 +398,8 @@ public class CustomerChangeBizService extends AbstractCustomerService { | ||
397 | 398 | ||
398 | if (Objects.isNull(customer.getAdviserId()) && Objects.isNull(customer.getShopId())) { | 399 | if (Objects.isNull(customer.getAdviserId()) && Objects.isNull(customer.getShopId())) { |
399 | publicPoolService.removeByCustomerId(customer.getId(), customer.getGroupId()); | 400 | publicPoolService.removeByCustomerId(customer.getId(), customer.getGroupId()); |
400 | - create(customer, adviserId, shopId); | 401 | + create(customer, adviserId, shopId, r -> r.setFromPublic(Boolean.TRUE)); |
401 | } | 402 | } |
402 | - | ||
403 | return updated; | 403 | return updated; |
404 | } | 404 | } |
405 | 405 | ||
@@ -421,6 +421,10 @@ public class CustomerChangeBizService extends AbstractCustomerService { | @@ -421,6 +421,10 @@ public class CustomerChangeBizService extends AbstractCustomerService { | ||
421 | 421 | ||
422 | 422 | ||
423 | private void create(Customer customer, Long adviserId, Long shopId) { | 423 | private void create(Customer customer, Long adviserId, Long shopId) { |
424 | + create(customer, adviserId, shopId, null); | ||
425 | + } | ||
426 | + | ||
427 | + private void create(Customer customer, Long adviserId, Long shopId, Consumer<StammkundePool> cs) { | ||
424 | StammkundePool stammkundePool = createSimpleInfo(customer, adviserId); | 428 | StammkundePool stammkundePool = createSimpleInfo(customer, adviserId); |
425 | stammkundePool.setSources(StammkundeSourcesEnum.NATURAL); | 429 | stammkundePool.setSources(StammkundeSourcesEnum.NATURAL); |
426 | stammkundePool.setShopId(shopId); | 430 | stammkundePool.setShopId(shopId); |
@@ -428,6 +432,9 @@ public class CustomerChangeBizService extends AbstractCustomerService { | @@ -428,6 +432,9 @@ public class CustomerChangeBizService extends AbstractCustomerService { | ||
428 | stammkundePool.setAktiv(Boolean.TRUE); | 432 | stammkundePool.setAktiv(Boolean.TRUE); |
429 | stammkundePool.setActivationTime(new Date()); | 433 | stammkundePool.setActivationTime(new Date()); |
430 | stammkundePool.setCreateTime(new Date()); | 434 | stammkundePool.setCreateTime(new Date()); |
435 | + if (cs != null) { | ||
436 | + cs.accept(stammkundePool); | ||
437 | + } | ||
431 | stammkundePoolService.save(stammkundePool); | 438 | stammkundePoolService.save(stammkundePool); |
432 | } | 439 | } |
433 | 440 |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/PubCluePoolService.java
@@ -2,6 +2,8 @@ package cn.fw.valhalla.service.data; | @@ -2,6 +2,8 @@ package cn.fw.valhalla.service.data; | ||
2 | 2 | ||
3 | import cn.fw.valhalla.domain.db.pub.PubCluePool; | 3 | import cn.fw.valhalla.domain.db.pub.PubCluePool; |
4 | import cn.fw.valhalla.domain.dto.FollowPoolDTO; | 4 | import cn.fw.valhalla.domain.dto.FollowPoolDTO; |
5 | +import cn.fw.valhalla.domain.dto.PubCluePoolReportDTO; | ||
6 | +import cn.fw.valhalla.domain.dto.PubCluePoolReportQueryDTO; | ||
5 | import cn.fw.valhalla.domain.query.FollowPoolQueryVO; | 7 | import cn.fw.valhalla.domain.query.FollowPoolQueryVO; |
6 | import com.baomidou.mybatisplus.extension.service.IService; | 8 | import com.baomidou.mybatisplus.extension.service.IService; |
7 | 9 | ||
@@ -20,4 +22,11 @@ public interface PubCluePoolService extends IService<PubCluePool> { | @@ -20,4 +22,11 @@ public interface PubCluePoolService extends IService<PubCluePool> { | ||
20 | List<FollowPoolDTO> followList(FollowPoolQueryVO queryVO); | 22 | List<FollowPoolDTO> followList(FollowPoolQueryVO queryVO); |
21 | 23 | ||
22 | long followListCount(FollowPoolQueryVO queryVO); | 24 | long followListCount(FollowPoolQueryVO queryVO); |
25 | + | ||
26 | + /** | ||
27 | + * 查询站岗分配 | ||
28 | + * @param dto | ||
29 | + * @return | ||
30 | + */ | ||
31 | + List<PubCluePoolReportDTO> countPubCluePoolList(PubCluePoolReportQueryDTO dto); | ||
23 | } | 32 | } |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/PublicPoolService.java
@@ -2,6 +2,8 @@ package cn.fw.valhalla.service.data; | @@ -2,6 +2,8 @@ package cn.fw.valhalla.service.data; | ||
2 | 2 | ||
3 | import cn.fw.valhalla.domain.db.pool.PublicPool; | 3 | import cn.fw.valhalla.domain.db.pool.PublicPool; |
4 | import cn.fw.valhalla.domain.dto.PublicPoolDTO; | 4 | import cn.fw.valhalla.domain.dto.PublicPoolDTO; |
5 | +import cn.fw.valhalla.domain.dto.PublicPoolReportDTO; | ||
6 | +import cn.fw.valhalla.domain.dto.PublicPoolReportQueryDTO; | ||
5 | import cn.fw.valhalla.domain.query.PublicPoolQueryVO; | 7 | import cn.fw.valhalla.domain.query.PublicPoolQueryVO; |
6 | import com.baomidou.mybatisplus.extension.service.IService; | 8 | import com.baomidou.mybatisplus.extension.service.IService; |
7 | import org.springframework.transaction.annotation.Transactional; | 9 | import org.springframework.transaction.annotation.Transactional; |
@@ -74,4 +76,11 @@ public interface PublicPoolService extends IService<PublicPool> { | @@ -74,4 +76,11 @@ public interface PublicPoolService extends IService<PublicPool> { | ||
74 | * @return | 76 | * @return |
75 | */ | 77 | */ |
76 | List<String> queryIdListByShops(List<Long> shopIds); | 78 | List<String> queryIdListByShops(List<Long> shopIds); |
79 | + | ||
80 | + /** | ||
81 | + * 查询公共池来源统计 | ||
82 | + * @param dto | ||
83 | + * @return | ||
84 | + */ | ||
85 | + List<PublicPoolReportDTO> countPublicPoolList(PublicPoolReportQueryDTO dto); | ||
77 | } | 86 | } |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/PublicReportDataService.java
0 → 100644
1 | +package cn.fw.valhalla.service.data; | ||
2 | + | ||
3 | +import cn.fw.valhalla.domain.db.PublicReportData; | ||
4 | +import com.baomidou.mybatisplus.extension.service.IService; | ||
5 | + | ||
6 | +/** | ||
7 | + * @author : kurisu | ||
8 | + * @className : PublicReportDataService | ||
9 | + * @description : 公共池报表数据(初次抽取) | ||
10 | + * @date: 2021-02-21 14:58 | ||
11 | + */ | ||
12 | +public interface PublicReportDataService extends IService<PublicReportData> { | ||
13 | + | ||
14 | +} |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/StammkundePoolService.java
@@ -3,6 +3,8 @@ package cn.fw.valhalla.service.data; | @@ -3,6 +3,8 @@ package cn.fw.valhalla.service.data; | ||
3 | import cn.fw.valhalla.domain.db.pool.StammkundePool; | 3 | import cn.fw.valhalla.domain.db.pool.StammkundePool; |
4 | import cn.fw.valhalla.domain.dto.StammkundeDto; | 4 | import cn.fw.valhalla.domain.dto.StammkundeDto; |
5 | import cn.fw.valhalla.domain.dto.StammkundePoolDTO; | 5 | import cn.fw.valhalla.domain.dto.StammkundePoolDTO; |
6 | +import cn.fw.valhalla.domain.dto.StammkundePoolReportDTO; | ||
7 | +import cn.fw.valhalla.domain.dto.StammkundePoolReportQueryDTO; | ||
6 | import cn.fw.valhalla.domain.enums.DefeatReasonEnum; | 8 | import cn.fw.valhalla.domain.enums.DefeatReasonEnum; |
7 | import cn.fw.valhalla.domain.query.StammkundePoolQueryVO; | 9 | import cn.fw.valhalla.domain.query.StammkundePoolQueryVO; |
8 | import com.baomidou.mybatisplus.extension.service.IService; | 10 | import com.baomidou.mybatisplus.extension.service.IService; |
@@ -96,4 +98,11 @@ public interface StammkundePoolService extends IService<StammkundePool> { | @@ -96,4 +98,11 @@ public interface StammkundePoolService extends IService<StammkundePool> { | ||
96 | * @param groupId | 98 | * @param groupId |
97 | */ | 99 | */ |
98 | void removeByCustomerId(@NonNull Long customerId, @NonNull Long groupId); | 100 | void removeByCustomerId(@NonNull Long customerId, @NonNull Long groupId); |
101 | + | ||
102 | + /** | ||
103 | + * 查询渠道到店统计 | ||
104 | + * @param dto | ||
105 | + * @return | ||
106 | + */ | ||
107 | + List<StammkundePoolReportDTO> countStammkundePoolList(StammkundePoolReportQueryDTO dto); | ||
99 | } | 108 | } |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/impl/PubCluePoolServiceImpl.java
@@ -3,6 +3,8 @@ package cn.fw.valhalla.service.data.impl; | @@ -3,6 +3,8 @@ package cn.fw.valhalla.service.data.impl; | ||
3 | import cn.fw.valhalla.dao.mapper.PubCluePoolMapper; | 3 | import cn.fw.valhalla.dao.mapper.PubCluePoolMapper; |
4 | import cn.fw.valhalla.domain.db.pub.PubCluePool; | 4 | import cn.fw.valhalla.domain.db.pub.PubCluePool; |
5 | import cn.fw.valhalla.domain.dto.FollowPoolDTO; | 5 | import cn.fw.valhalla.domain.dto.FollowPoolDTO; |
6 | +import cn.fw.valhalla.domain.dto.PubCluePoolReportDTO; | ||
7 | +import cn.fw.valhalla.domain.dto.PubCluePoolReportQueryDTO; | ||
6 | import cn.fw.valhalla.domain.query.FollowPoolQueryVO; | 8 | import cn.fw.valhalla.domain.query.FollowPoolQueryVO; |
7 | import cn.fw.valhalla.service.data.PubCluePoolService; | 9 | import cn.fw.valhalla.service.data.PubCluePoolService; |
8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 10 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
@@ -10,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; | @@ -10,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; | ||
10 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
11 | 13 | ||
12 | import java.util.ArrayList; | 14 | import java.util.ArrayList; |
15 | +import java.util.Collections; | ||
13 | import java.util.List; | 16 | import java.util.List; |
14 | import java.util.Optional; | 17 | import java.util.Optional; |
15 | 18 | ||
@@ -37,4 +40,14 @@ public class PubCluePoolServiceImpl extends ServiceImpl<PubCluePoolMapper, PubCl | @@ -37,4 +40,14 @@ public class PubCluePoolServiceImpl extends ServiceImpl<PubCluePoolMapper, PubCl | ||
37 | public long followListCount(FollowPoolQueryVO queryVO) { | 40 | public long followListCount(FollowPoolQueryVO queryVO) { |
38 | return Optional.ofNullable(getBaseMapper().followListCount(queryVO)).orElse(0L); | 41 | return Optional.ofNullable(getBaseMapper().followListCount(queryVO)).orElse(0L); |
39 | } | 42 | } |
43 | + | ||
44 | + /** | ||
45 | + * 查询站岗分配 | ||
46 | + * @param dto | ||
47 | + * @return | ||
48 | + */ | ||
49 | + @Override | ||
50 | + public List<PubCluePoolReportDTO> countPubCluePoolList(PubCluePoolReportQueryDTO dto){ | ||
51 | + return Optional.ofNullable(getBaseMapper().countPubCluePoolList(dto)).orElse(Collections.emptyList()); | ||
52 | + } | ||
40 | } | 53 | } |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/impl/PublicPoolServiceImpl.java
@@ -3,6 +3,8 @@ package cn.fw.valhalla.service.data.impl; | @@ -3,6 +3,8 @@ package cn.fw.valhalla.service.data.impl; | ||
3 | import cn.fw.valhalla.dao.mapper.PublicPoolMapper; | 3 | import cn.fw.valhalla.dao.mapper.PublicPoolMapper; |
4 | import cn.fw.valhalla.domain.db.pool.PublicPool; | 4 | import cn.fw.valhalla.domain.db.pool.PublicPool; |
5 | import cn.fw.valhalla.domain.dto.PublicPoolDTO; | 5 | import cn.fw.valhalla.domain.dto.PublicPoolDTO; |
6 | +import cn.fw.valhalla.domain.dto.PublicPoolReportDTO; | ||
7 | +import cn.fw.valhalla.domain.dto.PublicPoolReportQueryDTO; | ||
6 | import cn.fw.valhalla.domain.query.PublicPoolQueryVO; | 8 | import cn.fw.valhalla.domain.query.PublicPoolQueryVO; |
7 | import cn.fw.valhalla.service.data.PublicPoolService; | 9 | import cn.fw.valhalla.service.data.PublicPoolService; |
8 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 10 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
@@ -87,4 +89,9 @@ public class PublicPoolServiceImpl extends ServiceImpl<PublicPoolMapper, PublicP | @@ -87,4 +89,9 @@ public class PublicPoolServiceImpl extends ServiceImpl<PublicPoolMapper, PublicP | ||
87 | // mybatis plus 性能有问题 不使用 | 89 | // mybatis plus 性能有问题 不使用 |
88 | return Optional.ofNullable(this.getBaseMapper().queryIdListByShops(shopIds)).orElse(Collections.emptyList()); | 90 | return Optional.ofNullable(this.getBaseMapper().queryIdListByShops(shopIds)).orElse(Collections.emptyList()); |
89 | } | 91 | } |
92 | + | ||
93 | + @Override | ||
94 | + public List<PublicPoolReportDTO> countPublicPoolList(PublicPoolReportQueryDTO dto) { | ||
95 | + return Optional.ofNullable(this.getBaseMapper().countPublicPoolList(dto)).orElse(Collections.emptyList()); | ||
96 | + } | ||
90 | } | 97 | } |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/impl/PublicReportDataServiceImpl.java
0 → 100644
1 | +package cn.fw.valhalla.service.data.impl; | ||
2 | + | ||
3 | +import cn.fw.valhalla.dao.mapper.PublicReportDataMapper; | ||
4 | +import cn.fw.valhalla.domain.db.PublicReportData; | ||
5 | +import cn.fw.valhalla.service.data.PublicReportDataService; | ||
6 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||
7 | +import lombok.extern.slf4j.Slf4j; | ||
8 | +import org.springframework.stereotype.Service; | ||
9 | + | ||
10 | +/** | ||
11 | + * @author : kurisu | ||
12 | + * @className : PublicReportDataServiceImpl | ||
13 | + * @description : 公共池报表数据(初次抽取) | ||
14 | + * @date: 2021-02-21 14:58 | ||
15 | + */ | ||
16 | +@Slf4j | ||
17 | +@Service | ||
18 | +public class PublicReportDataServiceImpl extends ServiceImpl<PublicReportDataMapper, PublicReportData> implements PublicReportDataService { | ||
19 | + | ||
20 | +} |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/impl/StammkundePoolServiceImpl.java
@@ -4,6 +4,8 @@ import cn.fw.valhalla.dao.mapper.StammkundePoolMapper; | @@ -4,6 +4,8 @@ import cn.fw.valhalla.dao.mapper.StammkundePoolMapper; | ||
4 | import cn.fw.valhalla.domain.db.pool.StammkundePool; | 4 | import cn.fw.valhalla.domain.db.pool.StammkundePool; |
5 | import cn.fw.valhalla.domain.dto.StammkundeDto; | 5 | import cn.fw.valhalla.domain.dto.StammkundeDto; |
6 | import cn.fw.valhalla.domain.dto.StammkundePoolDTO; | 6 | import cn.fw.valhalla.domain.dto.StammkundePoolDTO; |
7 | +import cn.fw.valhalla.domain.dto.StammkundePoolReportDTO; | ||
8 | +import cn.fw.valhalla.domain.dto.StammkundePoolReportQueryDTO; | ||
7 | import cn.fw.valhalla.domain.enums.DefeatReasonEnum; | 9 | import cn.fw.valhalla.domain.enums.DefeatReasonEnum; |
8 | import cn.fw.valhalla.domain.enums.StammkundeStatusEnum; | 10 | import cn.fw.valhalla.domain.enums.StammkundeStatusEnum; |
9 | import cn.fw.valhalla.domain.query.StammkundePoolQueryVO; | 11 | import cn.fw.valhalla.domain.query.StammkundePoolQueryVO; |
@@ -123,4 +125,13 @@ public class StammkundePoolServiceImpl extends ServiceImpl<StammkundePoolMapper, | @@ -123,4 +125,13 @@ public class StammkundePoolServiceImpl extends ServiceImpl<StammkundePoolMapper, | ||
123 | .eq(StammkundePool::getGroupId, groupId) | 125 | .eq(StammkundePool::getGroupId, groupId) |
124 | ); | 126 | ); |
125 | } | 127 | } |
128 | + | ||
129 | + /** | ||
130 | + * 查询渠道到店统计 | ||
131 | + * @param dto | ||
132 | + * @return | ||
133 | + */ | ||
134 | + public List<StammkundePoolReportDTO> countStammkundePoolList(StammkundePoolReportQueryDTO dto){ | ||
135 | + return Optional.ofNullable(getBaseMapper().countStammkundePoolList(dto)).orElse(Collections.emptyList()); | ||
136 | + } | ||
126 | } | 137 | } |
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/report/PublicReportBizService.java
1 | package cn.fw.valhalla.service.report; | 1 | package cn.fw.valhalla.service.report; |
2 | 2 | ||
3 | +import cn.fw.common.cache.locker.DistributedLocker; | ||
4 | +import cn.fw.valhalla.domain.db.PublicReportData; | ||
5 | +import cn.fw.valhalla.domain.dto.*; | ||
6 | +import cn.fw.valhalla.domain.enums.PubStandType; | ||
7 | +import cn.fw.valhalla.domain.enums.StammkundeSourcesEnum; | ||
8 | +import cn.fw.valhalla.domain.enums.ValhallaReportDimension; | ||
9 | +import cn.fw.valhalla.service.data.PubCluePoolService; | ||
10 | +import cn.fw.valhalla.service.data.PublicPoolService; | ||
11 | +import cn.fw.valhalla.service.data.PublicReportDataService; | ||
12 | +import cn.fw.valhalla.service.data.StammkundePoolService; | ||
13 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||
14 | +import com.google.common.collect.Sets; | ||
15 | +import lombok.Getter; | ||
3 | import lombok.RequiredArgsConstructor; | 16 | import lombok.RequiredArgsConstructor; |
4 | import lombok.extern.slf4j.Slf4j; | 17 | import lombok.extern.slf4j.Slf4j; |
18 | +import org.redisson.api.RLock; | ||
19 | +import org.springframework.beans.factory.annotation.Value; | ||
5 | import org.springframework.stereotype.Service; | 20 | import org.springframework.stereotype.Service; |
6 | import org.springframework.transaction.annotation.Transactional; | 21 | import org.springframework.transaction.annotation.Transactional; |
22 | +import org.springframework.util.Assert; | ||
23 | +import org.springframework.util.CollectionUtils; | ||
24 | +import org.springframework.util.StringUtils; | ||
7 | 25 | ||
8 | import java.time.LocalDate; | 26 | import java.time.LocalDate; |
27 | +import java.time.LocalDateTime; | ||
28 | +import java.time.temporal.TemporalAdjusters; | ||
29 | +import java.util.*; | ||
30 | +import java.util.stream.Collectors; | ||
9 | 31 | ||
10 | /** | 32 | /** |
11 | * 公共池报表数据服务 | 33 | * 公共池报表数据服务 |
@@ -20,6 +42,15 @@ import java.time.LocalDate; | @@ -20,6 +42,15 @@ import java.time.LocalDate; | ||
20 | @Slf4j | 42 | @Slf4j |
21 | @RequiredArgsConstructor | 43 | @RequiredArgsConstructor |
22 | public class PublicReportBizService { | 44 | public class PublicReportBizService { |
45 | + private final DistributedLocker distributedLocker; | ||
46 | + private final PublicReportDataService publicReportDataService; | ||
47 | + private final PubCluePoolService pubCluePoolService; | ||
48 | + private final StammkundePoolService stammkundePoolService; | ||
49 | + private final PublicPoolService publicPoolService; | ||
50 | + | ||
51 | + @Value("${spring.cache.custom.global-prefix}:PublicReport:extracting") | ||
52 | + @Getter | ||
53 | + private String keyPrefix; | ||
23 | 54 | ||
24 | /** | 55 | /** |
25 | * 抽取集团公共池数据 | 56 | * 抽取集团公共池数据 |
@@ -28,8 +59,529 @@ public class PublicReportBizService { | @@ -28,8 +59,529 @@ public class PublicReportBizService { | ||
28 | * @param groupId 集团id | 59 | * @param groupId 集团id |
29 | */ | 60 | */ |
30 | @Transactional(rollbackFor = Exception.class) | 61 | @Transactional(rollbackFor = Exception.class) |
31 | - public void extracting(LocalDate nowDate, Long groupId) { | 62 | + public void extracting(final LocalDate nowDate, final Long groupId) { |
32 | log.info("开始抽取公共池报表数据,日期:{} 集团:{}", nowDate, groupId); | 63 | log.info("开始抽取公共池报表数据,日期:{} 集团:{}", nowDate, groupId); |
33 | - // TODO: 2023/5/4 完成方法 | 64 | + final String lockKey = generateKey(groupId); |
65 | + RLock lock = (RLock) distributedLocker.lock(lockKey); | ||
66 | + if (lock == null || !lock.isLocked()) { | ||
67 | + return; | ||
68 | + } | ||
69 | + try { | ||
70 | + /** | ||
71 | + * 1.准备数据 | ||
72 | + */ | ||
73 | + HashSet<Integer> sourceTypes = Sets.newHashSet(PubStandType.PUB.getValue(), PubStandType.ACTIVITY.getValue()); | ||
74 | + HashSet<Integer> sourceSets = Sets.newHashSet(StammkundeSourcesEnum.NATURAL.getValue()); | ||
75 | + //开始时间 | ||
76 | + LocalDateTime startDayDateTime = nowDate.atTime(0, 0, 0); | ||
77 | + //结束时间 | ||
78 | + LocalDateTime endDayDateTime = nowDate.atTime(23, 59, 59); | ||
79 | + //月初日期 | ||
80 | + LocalDate startMonDate = nowDate.with(TemporalAdjusters.firstDayOfMonth()); | ||
81 | + //月初时间 | ||
82 | + LocalDateTime startMonDateTime = startMonDate.atTime(0,0,0); | ||
83 | + //月初的截止结束时间 = 月初的上一天的23:59:59 | ||
84 | + LocalDateTime startMonDateTimeOver = startMonDate.minusDays(1).atTime(23, 59, 59); | ||
85 | + /** | ||
86 | + * 1.1 查询日站岗分配(人) | ||
87 | + */ | ||
88 | + List<PubCluePoolReportDTO> cluePoolDayList = getCluePoolTimeList(groupId, sourceTypes, startDayDateTime, endDayDateTime); | ||
89 | + /** | ||
90 | + * 1.2 查询月站岗分配(人) | ||
91 | + */ | ||
92 | + List<PubCluePoolReportDTO> cluePoolMonList = getCluePoolTimeList(groupId, sourceTypes,startMonDateTime, endDayDateTime); | ||
93 | + /** | ||
94 | + * 1.3 查询日自然到店成交(人) | ||
95 | + */ | ||
96 | + List<StammkundePoolReportDTO> stammkundePoolReportDayList = getStammkundePoolReportTimeList(groupId, startDayDateTime, endDayDateTime, sourceSets); | ||
97 | + /** | ||
98 | + * 1.4 查询月自然到店成交(人) | ||
99 | + */ | ||
100 | + List<StammkundePoolReportDTO> stammkundePoolReportMonList = getStammkundePoolReportTimeList(groupId, startMonDateTime,endDayDateTime, sourceSets); | ||
101 | + /** | ||
102 | + * 1.5 查询日新增(来源) | ||
103 | + */ | ||
104 | + List<PublicPoolReportDTO> poolReportDayDTOList = getPoolReportList(groupId, startDayDateTime, endDayDateTime); | ||
105 | + /** | ||
106 | + * 1.6 查询月新增(来源) | ||
107 | + */ | ||
108 | + List<PublicPoolReportDTO> poolReportMonDTOList = getPoolReportList(groupId, startMonDateTime, endDayDateTime); | ||
109 | + /** | ||
110 | + * 1.7 截止当前(来源) | ||
111 | + */ | ||
112 | + List<PublicPoolReportDTO> poolReportCutDTOList = getPoolReportList(groupId,null, endDayDateTime); | ||
113 | + | ||
114 | + /** | ||
115 | + * 1.8 月初始数(来源) | ||
116 | + */ | ||
117 | + List<PublicPoolReportDTO> poolReportMonFirstDTOList = getPoolReportMonFirstDTOList(nowDate,startMonDate, groupId, startMonDateTimeOver); | ||
118 | + /** | ||
119 | + * 2.处理数据 | ||
120 | + */ | ||
121 | + /** | ||
122 | + * 2.1 人员维度 | ||
123 | + */ | ||
124 | + List<PublicReportData> publicReportDataD20List = extractedD20(nowDate, groupId, cluePoolDayList, cluePoolMonList, stammkundePoolReportDayList, stammkundePoolReportMonList); | ||
125 | + /** | ||
126 | + * 2.2 来源维度 | ||
127 | + */ | ||
128 | + List<PublicReportData> publicReportDataD99List = extractedD99(nowDate, groupId, poolReportDayDTOList, poolReportMonDTOList, poolReportCutDTOList, poolReportMonFirstDTOList); | ||
129 | + /** | ||
130 | + * 2.3 门店维度 = 来源 + 人员 | ||
131 | + */ | ||
132 | + List<PublicReportData> publicReportDataD10List = extractedD10(nowDate, groupId, publicReportDataD20List, publicReportDataD99List); | ||
133 | + | ||
134 | + /** | ||
135 | + * 3.存储数据 | ||
136 | + */ | ||
137 | + /** | ||
138 | + * 3.1 清理旧数据 | ||
139 | + */ | ||
140 | + delNowDate(nowDate); | ||
141 | + /** | ||
142 | + * 3.2 存储新数据 | ||
143 | + */ | ||
144 | + save(publicReportDataD20List, publicReportDataD99List, publicReportDataD10List); | ||
145 | + } finally { | ||
146 | + if (lock.isLocked()) { | ||
147 | + lock.unlock(); | ||
148 | + } | ||
149 | + } | ||
150 | + } | ||
151 | + | ||
152 | + /** | ||
153 | + * 获取月初的数据 | ||
154 | + * @param nowDate | ||
155 | + * @param startMonDate | ||
156 | + * @param groupId | ||
157 | + * @param startMonDateTimeOver | ||
158 | + * @return | ||
159 | + */ | ||
160 | + private List<PublicPoolReportDTO> getPoolReportMonFirstDTOList(LocalDate nowDate,LocalDate startMonDate, Long groupId, LocalDateTime startMonDateTimeOver) { | ||
161 | + List<PublicPoolReportDTO> poolReportMonFirstDTOList = new ArrayList<>(); | ||
162 | + if (nowDate.equals(startMonDate)) { | ||
163 | + //如果是月初一就去查询小于月初一的数据统计 | ||
164 | + poolReportMonFirstDTOList = getPoolReportList(groupId,null, startMonDateTimeOver); | ||
165 | + }else { | ||
166 | + //不是1号的数据直接从上次抽取的数据中查询月初一的数据 | ||
167 | + List<PublicReportData> reportDataList = publicReportDataService.list(Wrappers.<PublicReportData>lambdaQuery() | ||
168 | + .eq(PublicReportData::getReportDimension, ValhallaReportDimension.D60.getValue()) | ||
169 | + .eq(PublicReportData::getDataDate, startMonDate) | ||
170 | + ); | ||
171 | + if (!CollectionUtils.isEmpty(reportDataList)){ | ||
172 | + for (PublicReportData publicReportData : reportDataList) { | ||
173 | + PublicPoolReportDTO publicPoolReportDTO = new PublicPoolReportDTO(); | ||
174 | + publicPoolReportDTO.setType(publicReportData.getType()); | ||
175 | + publicPoolReportDTO.setShopId(publicReportData.getShopId()); | ||
176 | + publicPoolReportDTO.setShopName(publicReportData.getShopName()); | ||
177 | + if (Objects.nonNull(publicReportData.getMonthInitial())){ | ||
178 | + publicPoolReportDTO.setTotal(publicReportData.getMonthInitial().longValue()); | ||
179 | + } | ||
180 | + poolReportMonFirstDTOList.add(publicPoolReportDTO); | ||
181 | + } | ||
182 | + } | ||
183 | + } | ||
184 | + return poolReportMonFirstDTOList; | ||
185 | + } | ||
186 | + | ||
187 | + /** | ||
188 | + * 查询指定时间 | ||
189 | + * @param groupId | ||
190 | + * @param startDayDateTime | ||
191 | + * @param endDayDateTime | ||
192 | + * @return | ||
193 | + */ | ||
194 | + private List<PublicPoolReportDTO> getPoolReportList(Long groupId,LocalDateTime startDayDateTime,LocalDateTime endDayDateTime){ | ||
195 | + PublicPoolReportQueryDTO publicPoolReportQueryDayDTO = new PublicPoolReportQueryDTO(groupId); | ||
196 | + publicPoolReportQueryDayDTO.setStartDate(startDayDateTime); | ||
197 | + publicPoolReportQueryDayDTO.setEndDate(endDayDateTime); | ||
198 | + return publicPoolService.countPublicPoolList(publicPoolReportQueryDayDTO); | ||
199 | + } | ||
200 | + | ||
201 | + /** | ||
202 | + * 1.3 查询指定时间自然到店成交(人) | ||
203 | + * @param groupId | ||
204 | + * @param startDayDateTime | ||
205 | + * @param endDayDateTime | ||
206 | + * @param sourceSets | ||
207 | + * @return | ||
208 | + */ | ||
209 | + private List<StammkundePoolReportDTO> getStammkundePoolReportTimeList(Long groupId, LocalDateTime startDayDateTime, LocalDateTime endDayDateTime, HashSet<Integer> sourceSets) { | ||
210 | + StammkundePoolReportQueryDTO stammkundePoolReportQueryDayDTO = new StammkundePoolReportQueryDTO(groupId); | ||
211 | + stammkundePoolReportQueryDayDTO.setStartDate(startDayDateTime); | ||
212 | + stammkundePoolReportQueryDayDTO.setEndDate(endDayDateTime); | ||
213 | + stammkundePoolReportQueryDayDTO.setSourceSets(sourceSets); | ||
214 | + return stammkundePoolService.countStammkundePoolList(stammkundePoolReportQueryDayDTO); | ||
215 | + } | ||
216 | + | ||
217 | + /** | ||
218 | + * 1.1 查询指定时间站岗分配(人) | ||
219 | + * @param groupId | ||
220 | + * @param sourceTypes | ||
221 | + * @param startDayDateTime | ||
222 | + * @param endDayDateTime | ||
223 | + * @return | ||
224 | + */ | ||
225 | + private List<PubCluePoolReportDTO> getCluePoolTimeList(Long groupId, HashSet<Integer> sourceTypes, LocalDateTime startDayDateTime, LocalDateTime endDayDateTime) { | ||
226 | + PubCluePoolReportQueryDTO reportQueryDayDTO = new PubCluePoolReportQueryDTO(groupId); | ||
227 | + reportQueryDayDTO.setStartDate(startDayDateTime); | ||
228 | + reportQueryDayDTO.setEndDate(endDayDateTime); | ||
229 | + reportQueryDayDTO.setSourceTypes(sourceTypes); | ||
230 | + return pubCluePoolService.countPubCluePoolList(reportQueryDayDTO); | ||
231 | + } | ||
232 | + | ||
233 | + /** | ||
234 | + * 3.1 清理旧数据 | ||
235 | + * @param nowDate | ||
236 | + */ | ||
237 | + private void delNowDate(LocalDate nowDate) { | ||
238 | + publicReportDataService.remove(Wrappers.<PublicReportData>lambdaUpdate() | ||
239 | + .eq(PublicReportData::getDataDate, nowDate) | ||
240 | + ); | ||
241 | + } | ||
242 | + | ||
243 | + /** | ||
244 | + * 3.2 存储新数据 | ||
245 | + * @param publicReportDataD20List 人员的 | ||
246 | + * @param publicReportDataD99List 来源的 | ||
247 | + * @param publicReportDataD10List 店的 | ||
248 | + */ | ||
249 | + private void save(List<PublicReportData> publicReportDataD20List, List<PublicReportData> publicReportDataD99List, List<PublicReportData> publicReportDataD10List) { | ||
250 | + if (!CollectionUtils.isEmpty(publicReportDataD20List)){ | ||
251 | + for (PublicReportData reportData : publicReportDataD20List) { | ||
252 | + dealDefaultValueD20(reportData); | ||
253 | + } | ||
254 | + publicReportDataService.saveBatch(publicReportDataD20List); | ||
255 | + } | ||
256 | + if (!CollectionUtils.isEmpty(publicReportDataD99List)){ | ||
257 | + for (PublicReportData reportData : publicReportDataD99List) { | ||
258 | + dealDefaultValueD99(reportData); | ||
259 | + } | ||
260 | + publicReportDataService.saveBatch(publicReportDataD99List); | ||
261 | + } | ||
262 | + if (!CollectionUtils.isEmpty(publicReportDataD10List)){ | ||
263 | + for (PublicReportData reportData : publicReportDataD10List) { | ||
264 | + //店的默认值处理,共8个 = 人的+店的 | ||
265 | + dealDefaultValueD20(reportData); | ||
266 | + dealDefaultValueD99(reportData); | ||
267 | + } | ||
268 | + publicReportDataService.saveBatch(publicReportDataD10List); | ||
269 | + } | ||
270 | + } | ||
271 | + | ||
272 | + /** | ||
273 | + * 来源的默认值处理,共4个 | ||
274 | + * @param reportData | ||
275 | + */ | ||
276 | + private static void dealDefaultValueD99(PublicReportData reportData) { | ||
277 | + if (Objects.isNull(reportData.getMonthInitial())){ | ||
278 | + reportData.setMonthInitial(0); | ||
279 | + } | ||
280 | + if (Objects.isNull(reportData.getDayIncrease())){ | ||
281 | + reportData.setDayIncrease(0); | ||
282 | + } | ||
283 | + if (Objects.isNull(reportData.getMonthIncrease())){ | ||
284 | + reportData.setMonthIncrease(0); | ||
285 | + } | ||
286 | + if (Objects.isNull(reportData.getCurrentQuantity())){ | ||
287 | + reportData.setCurrentQuantity(0); | ||
288 | + } | ||
289 | + } | ||
290 | + | ||
291 | + /** | ||
292 | + * 人员的默认值处理,共4个 | ||
293 | + * @param reportData | ||
294 | + */ | ||
295 | + private static void dealDefaultValueD20(PublicReportData reportData) { | ||
296 | + //人员的默认值处理,共4个 | ||
297 | + if (Objects.isNull(reportData.getDayStandQuantity())){ | ||
298 | + reportData.setDayStandQuantity(0); | ||
299 | + } | ||
300 | + if (Objects.isNull(reportData.getMonthStandQuantity())){ | ||
301 | + reportData.setMonthStandQuantity(0); | ||
302 | + } | ||
303 | + if (Objects.isNull(reportData.getDayNaturalQuantity())){ | ||
304 | + reportData.setDayNaturalQuantity(0); | ||
305 | + } | ||
306 | + if (Objects.isNull(reportData.getMonthNaturalQuantity())){ | ||
307 | + reportData.setMonthNaturalQuantity(0); | ||
308 | + } | ||
309 | + } | ||
310 | + | ||
311 | + | ||
312 | + /** | ||
313 | + * 处理门店维度的数据 | ||
314 | + * @param nowDate | ||
315 | + * @param groupId | ||
316 | + * @param publicReportDataD20List | ||
317 | + * @param publicReportDataD99List | ||
318 | + * @return | ||
319 | + */ | ||
320 | + private List<PublicReportData> extractedD10(LocalDate nowDate, Long groupId, List<PublicReportData> publicReportDataD20List, List<PublicReportData> publicReportDataD99List) { | ||
321 | + List<PublicReportData> publicReportData10List = new ArrayList<>(); | ||
322 | + if (!CollectionUtils.isEmpty(publicReportDataD20List)){ | ||
323 | + Map<Long, List<PublicReportData>> shopIdListMap = publicReportDataD20List.stream().collect(Collectors.groupingBy(PublicReportData::getShopId)); | ||
324 | + shopIdListMap.forEach((shopId,shopList) -> { | ||
325 | + PublicReportData publicReportData = getPublicReportDataD10(publicReportData10List, shopId, groupId); | ||
326 | + publicReportData.setDataDate(nowDate); | ||
327 | + publicReportData.setShopId(shopId); | ||
328 | + if (StringUtils.isEmpty(publicReportData.getShopName())){ | ||
329 | + publicReportData.setShopName(Objects.nonNull(shopList.get(0)) ? shopList.get(0).getShopName():null); | ||
330 | + } | ||
331 | + publicReportData.setDayStandQuantity(shopList.stream().filter(e -> Objects.nonNull(e.getDayStandQuantity())).mapToInt(PublicReportData :: getDayStandQuantity).sum()); | ||
332 | + publicReportData.setMonthStandQuantity(shopList.stream().filter(e -> Objects.nonNull(e.getMonthStandQuantity())).mapToInt(PublicReportData :: getMonthStandQuantity).sum()); | ||
333 | + publicReportData.setDayNaturalQuantity(shopList.stream().filter(e -> Objects.nonNull(e.getDayNaturalQuantity())).mapToInt(PublicReportData :: getDayNaturalQuantity).sum()); | ||
334 | + publicReportData.setMonthNaturalQuantity(shopList.stream().filter(e -> Objects.nonNull(e.getMonthNaturalQuantity())).mapToInt(PublicReportData :: getMonthNaturalQuantity).sum()); | ||
335 | + publicReportData.setCreateTime(new Date()); | ||
336 | + publicReportData.setUpdateTime(publicReportData.getCreateTime()); | ||
337 | + if (!publicReportData10List.contains(publicReportData)){ | ||
338 | + publicReportData10List.add(publicReportData); | ||
339 | + } | ||
340 | + }); | ||
341 | + } | ||
342 | + if (!CollectionUtils.isEmpty(publicReportDataD99List)){ | ||
343 | + Map<Long, List<PublicReportData>> shopIdListMap = publicReportDataD99List.stream().collect(Collectors.groupingBy(PublicReportData::getShopId)); | ||
344 | + shopIdListMap.forEach((shopId,shopList) -> { | ||
345 | + PublicReportData publicReportData = getPublicReportDataD10(publicReportData10List, shopId, groupId); | ||
346 | + publicReportData.setDataDate(nowDate); | ||
347 | + publicReportData.setShopId(shopId); | ||
348 | + if (StringUtils.isEmpty(publicReportData.getShopName())){ | ||
349 | + publicReportData.setShopName(Objects.nonNull(shopList.get(0)) ? shopList.get(0).getShopName():null); | ||
350 | + } | ||
351 | + publicReportData.setDayIncrease(shopList.stream().filter(e -> Objects.nonNull(e.getDayIncrease())).mapToInt(PublicReportData :: getDayIncrease).sum()); | ||
352 | + publicReportData.setMonthIncrease(shopList.stream().filter(e -> Objects.nonNull(e.getMonthIncrease())).mapToInt(PublicReportData :: getMonthIncrease).sum()); | ||
353 | + publicReportData.setCurrentQuantity(shopList.stream().filter(e -> Objects.nonNull(e.getCurrentQuantity())).mapToInt(PublicReportData :: getCurrentQuantity).sum()); | ||
354 | + publicReportData.setMonthInitial(shopList.stream().filter(e -> Objects.nonNull(e.getMonthInitial())).mapToInt(PublicReportData :: getMonthInitial).sum()); | ||
355 | + publicReportData.setCreateTime(new Date()); | ||
356 | + publicReportData.setUpdateTime(publicReportData.getCreateTime()); | ||
357 | + if (!publicReportData10List.contains(publicReportData)){ | ||
358 | + publicReportData10List.add(publicReportData); | ||
359 | + } | ||
360 | + }); | ||
361 | + } | ||
362 | + return publicReportData10List; | ||
363 | + } | ||
364 | + | ||
365 | + | ||
366 | + /** | ||
367 | + * 处理来源维度的数据 | ||
368 | + * @param nowDate | ||
369 | + * @param groupId | ||
370 | + * @param poolReportDayDTOList | ||
371 | + * @param poolReportMonDTOList | ||
372 | + * @param poolReportCutDTOList | ||
373 | + * @param poolReportMonFirstDTOList | ||
374 | + */ | ||
375 | + private List<PublicReportData> extractedD99(LocalDate nowDate, Long groupId, | ||
376 | + List<PublicPoolReportDTO> poolReportDayDTOList, | ||
377 | + List<PublicPoolReportDTO> poolReportMonDTOList, | ||
378 | + List<PublicPoolReportDTO> poolReportCutDTOList, | ||
379 | + List<PublicPoolReportDTO> poolReportMonFirstDTOList) { | ||
380 | + List<PublicReportData> publicReportData99List = new ArrayList<>(); | ||
381 | + if (!CollectionUtils.isEmpty(poolReportDayDTOList)){ | ||
382 | + for (PublicPoolReportDTO publicPoolReportDTO : poolReportDayDTOList) { | ||
383 | + PublicReportData publicReportData = getPublicReportDataD99Increase(publicReportData99List, publicPoolReportDTO, groupId); | ||
384 | + publicReportData.setDataDate(nowDate); | ||
385 | + publicReportData.setShopId(publicPoolReportDTO.getShopId()); | ||
386 | + if (StringUtils.isEmpty(publicReportData.getShopName())){ | ||
387 | + publicReportData.setShopName(publicPoolReportDTO.getShopName()); | ||
388 | + } | ||
389 | + publicReportData.setDayIncrease(publicPoolReportDTO.getTotal().intValue()); | ||
390 | + publicReportData.setType(publicPoolReportDTO.getType()); | ||
391 | + publicReportData.setCreateTime(new Date()); | ||
392 | + publicReportData.setUpdateTime(publicReportData.getCreateTime()); | ||
393 | + if (!publicReportData99List.contains(publicReportData)){ | ||
394 | + publicReportData99List.add(publicReportData); | ||
395 | + } | ||
396 | + } | ||
397 | + } | ||
398 | + if (!CollectionUtils.isEmpty(poolReportMonDTOList)){ | ||
399 | + for (PublicPoolReportDTO publicPoolReportDTO : poolReportMonDTOList) { | ||
400 | + PublicReportData publicReportData = getPublicReportDataD99Increase(publicReportData99List, publicPoolReportDTO, groupId); | ||
401 | + publicReportData.setDataDate(nowDate); | ||
402 | + publicReportData.setShopId(publicPoolReportDTO.getShopId()); | ||
403 | + if (StringUtils.isEmpty(publicReportData.getShopName())){ | ||
404 | + publicReportData.setShopName(publicPoolReportDTO.getShopName()); | ||
405 | + } | ||
406 | + publicReportData.setMonthIncrease(publicPoolReportDTO.getTotal().intValue()); | ||
407 | + publicReportData.setType(publicPoolReportDTO.getType()); | ||
408 | + publicReportData.setCreateTime(new Date()); | ||
409 | + publicReportData.setUpdateTime(publicReportData.getCreateTime()); | ||
410 | + if (!publicReportData99List.contains(publicReportData)){ | ||
411 | + publicReportData99List.add(publicReportData); | ||
412 | + } | ||
413 | + } | ||
414 | + } | ||
415 | + if (!CollectionUtils.isEmpty(poolReportCutDTOList)){ | ||
416 | + for (PublicPoolReportDTO publicPoolReportDTO : poolReportCutDTOList) { | ||
417 | + PublicReportData publicReportData = getPublicReportDataD99Increase(publicReportData99List, publicPoolReportDTO, groupId); | ||
418 | + publicReportData.setDataDate(nowDate); | ||
419 | + publicReportData.setShopId(publicPoolReportDTO.getShopId()); | ||
420 | + if (StringUtils.isEmpty(publicReportData.getShopName())){ | ||
421 | + publicReportData.setShopName(publicPoolReportDTO.getShopName()); | ||
422 | + } | ||
423 | + publicReportData.setCurrentQuantity(publicPoolReportDTO.getTotal().intValue()); | ||
424 | + publicReportData.setType(publicPoolReportDTO.getType()); | ||
425 | + publicReportData.setCreateTime(new Date()); | ||
426 | + publicReportData.setUpdateTime(publicReportData.getCreateTime()); | ||
427 | + if (!publicReportData99List.contains(publicReportData)){ | ||
428 | + publicReportData99List.add(publicReportData); | ||
429 | + } | ||
430 | + } | ||
431 | + } | ||
432 | + if (!CollectionUtils.isEmpty(poolReportMonFirstDTOList)){ | ||
433 | + for (PublicPoolReportDTO publicPoolReportDTO : poolReportMonFirstDTOList) { | ||
434 | + PublicReportData publicReportData = getPublicReportDataD99Increase(publicReportData99List, publicPoolReportDTO, groupId); | ||
435 | + publicReportData.setDataDate(nowDate); | ||
436 | + publicReportData.setShopId(publicPoolReportDTO.getShopId()); | ||
437 | + if (StringUtils.isEmpty(publicReportData.getShopName())){ | ||
438 | + publicReportData.setShopName(publicPoolReportDTO.getShopName()); | ||
439 | + } | ||
440 | + publicReportData.setMonthInitial(publicPoolReportDTO.getTotal().intValue()); | ||
441 | + publicReportData.setType(publicPoolReportDTO.getType()); | ||
442 | + publicReportData.setCreateTime(new Date()); | ||
443 | + publicReportData.setUpdateTime(publicReportData.getCreateTime()); | ||
444 | + if (!publicReportData99List.contains(publicReportData)){ | ||
445 | + publicReportData99List.add(publicReportData); | ||
446 | + } | ||
447 | + } | ||
448 | + } | ||
449 | + return publicReportData99List; | ||
450 | + } | ||
451 | + | ||
452 | + /** | ||
453 | + * 处理人员维度的数据 | ||
454 | + * @param nowDate | ||
455 | + * @param groupId | ||
456 | + * @param cluePoolDayList | ||
457 | + * @param cluePoolMonList | ||
458 | + * @param stammkundePoolReportDayDTOS | ||
459 | + * @param stammkundePoolReportMonDTOS | ||
460 | + */ | ||
461 | + private List<PublicReportData> extractedD20(LocalDate nowDate, Long groupId, | ||
462 | + List<PubCluePoolReportDTO> cluePoolDayList, | ||
463 | + List<PubCluePoolReportDTO> cluePoolMonList, | ||
464 | + List<StammkundePoolReportDTO> stammkundePoolReportDayDTOS, | ||
465 | + List<StammkundePoolReportDTO> stammkundePoolReportMonDTOS) { | ||
466 | + List<PublicReportData> publicReportData20List = new ArrayList<>(); | ||
467 | + if (!CollectionUtils.isEmpty(cluePoolDayList)){ | ||
468 | + for (PubCluePoolReportDTO pubCluePoolReportDTO : cluePoolDayList) { | ||
469 | + PublicReportData data = getPublicReportDataD20Stand(publicReportData20List, pubCluePoolReportDTO, groupId); | ||
470 | + data.setDataDate(nowDate); | ||
471 | + data.setUserId(pubCluePoolReportDTO.getAdviserId()); | ||
472 | + data.setUserName(pubCluePoolReportDTO.getAdviserName()); | ||
473 | + data.setShopId(pubCluePoolReportDTO.getShopId()); | ||
474 | + if (StringUtils.isEmpty(data.getShopName())){ | ||
475 | + data.setShopName(pubCluePoolReportDTO.getShopName()); | ||
476 | + } | ||
477 | + data.setDayStandQuantity(pubCluePoolReportDTO.getTotal().intValue()); | ||
478 | + data.setCreateTime(new Date()); | ||
479 | + data.setUpdateTime(data.getCreateTime()); | ||
480 | + if (!publicReportData20List.contains(data)){ | ||
481 | + publicReportData20List.add(data); | ||
482 | + } | ||
483 | + } | ||
484 | + } | ||
485 | + if (!CollectionUtils.isEmpty(cluePoolMonList)){ | ||
486 | + for (PubCluePoolReportDTO pubCluePoolReportDTO : cluePoolMonList) { | ||
487 | + PublicReportData data = getPublicReportDataD20Stand(publicReportData20List, pubCluePoolReportDTO, groupId); | ||
488 | + data.setDataDate(nowDate); | ||
489 | + data.setUserId(pubCluePoolReportDTO.getAdviserId()); | ||
490 | + data.setUserName(pubCluePoolReportDTO.getAdviserName()); | ||
491 | + data.setShopId(pubCluePoolReportDTO.getShopId()); | ||
492 | + if (StringUtils.isEmpty(data.getShopName())){ | ||
493 | + data.setShopName(pubCluePoolReportDTO.getShopName()); | ||
494 | + } | ||
495 | + data.setMonthStandQuantity((pubCluePoolReportDTO.getTotal().intValue())); | ||
496 | + data.setCreateTime(new Date()); | ||
497 | + data.setUpdateTime(data.getCreateTime()); | ||
498 | + if (!publicReportData20List.contains(data)){ | ||
499 | + publicReportData20List.add(data); | ||
500 | + } | ||
501 | + } | ||
502 | + } | ||
503 | + if (!CollectionUtils.isEmpty(stammkundePoolReportDayDTOS)){ | ||
504 | + for (StammkundePoolReportDTO stammkundePoolReportDTO : stammkundePoolReportDayDTOS) { | ||
505 | + PublicReportData data = getPublicReportDataD20Natural(publicReportData20List, stammkundePoolReportDTO, groupId); | ||
506 | + data.setDataDate(nowDate); | ||
507 | + data.setUserId(stammkundePoolReportDTO.getAdviserId()); | ||
508 | + data.setUserName(stammkundePoolReportDTO.getAdviserName()); | ||
509 | + data.setShopId(stammkundePoolReportDTO.getShopId()); | ||
510 | + data.setDayNaturalQuantity((stammkundePoolReportDTO.getTotal().intValue())); | ||
511 | + data.setCreateTime(new Date()); | ||
512 | + data.setUpdateTime(new Date()); | ||
513 | + if (!publicReportData20List.contains(data)){ | ||
514 | + publicReportData20List.add(data); | ||
515 | + } | ||
516 | + } | ||
517 | + } | ||
518 | + if (!CollectionUtils.isEmpty(stammkundePoolReportMonDTOS)){ | ||
519 | + for (StammkundePoolReportDTO stammkundePoolReportDTO : stammkundePoolReportMonDTOS) { | ||
520 | + PublicReportData data = getPublicReportDataD20Natural(publicReportData20List, stammkundePoolReportDTO, groupId); | ||
521 | + data.setDataDate(nowDate); | ||
522 | + data.setUserId(stammkundePoolReportDTO.getAdviserId()); | ||
523 | + data.setUserName(stammkundePoolReportDTO.getAdviserName()); | ||
524 | + data.setShopId(stammkundePoolReportDTO.getShopId()); | ||
525 | + data.setMonthNaturalQuantity((stammkundePoolReportDTO.getTotal().intValue())); | ||
526 | + data.setCreateTime(new Date()); | ||
527 | + data.setUpdateTime(new Date()); | ||
528 | + if (!publicReportData20List.contains(data)){ | ||
529 | + publicReportData20List.add(data); | ||
530 | + } | ||
531 | + } | ||
532 | + } | ||
533 | + return publicReportData20List; | ||
534 | + } | ||
535 | + | ||
536 | + private PublicReportData getPublicReportDataD20Stand(List<PublicReportData> publicReportData20List,PubCluePoolReportDTO pubCluePoolReportDTO,Long groupId){ | ||
537 | + if (CollectionUtils.isEmpty(publicReportData20List)){ | ||
538 | + return new PublicReportData(ValhallaReportDimension.D20.getValue(),groupId); | ||
539 | + } | ||
540 | + Optional<PublicReportData> dataOptional = publicReportData20List.stream().filter(e -> pubCluePoolReportDTO.getAdviserId().equals(e.getUserId()) && pubCluePoolReportDTO.getShopId().equals(e.getShopId())).findFirst(); | ||
541 | + if (dataOptional.isPresent()){ | ||
542 | + return dataOptional.get(); | ||
543 | + } | ||
544 | + return new PublicReportData(ValhallaReportDimension.D20.getValue(),groupId); | ||
545 | + } | ||
546 | + | ||
547 | + private PublicReportData getPublicReportDataD20Natural(List<PublicReportData> publicReportData20List,StammkundePoolReportDTO stammkundePoolReportMonDTO,Long groupId){ | ||
548 | + if (CollectionUtils.isEmpty(publicReportData20List)){ | ||
549 | + return new PublicReportData(ValhallaReportDimension.D20.getValue(),groupId); | ||
550 | + } | ||
551 | + Optional<PublicReportData> dataOptional = publicReportData20List.stream().filter(e -> stammkundePoolReportMonDTO.getAdviserId().equals(e.getUserId()) && stammkundePoolReportMonDTO.getShopId().equals(e.getShopId())).findFirst(); | ||
552 | + if (dataOptional.isPresent()){ | ||
553 | + return dataOptional.get(); | ||
554 | + } | ||
555 | + return new PublicReportData(ValhallaReportDimension.D20.getValue(),groupId); | ||
556 | + } | ||
557 | + | ||
558 | + private PublicReportData getPublicReportDataD99Increase(List<PublicReportData> publicReportData20List,PublicPoolReportDTO publicPoolReportDTO,Long groupId){ | ||
559 | + if (CollectionUtils.isEmpty(publicReportData20List)){ | ||
560 | + return new PublicReportData(ValhallaReportDimension.D60.getValue(),groupId); | ||
561 | + } | ||
562 | + Optional<PublicReportData> dataOptional = publicReportData20List.stream().filter(e -> publicPoolReportDTO.getType().equals(e.getType()) && publicPoolReportDTO.getShopId().equals(e.getShopId())).findFirst(); | ||
563 | + if (dataOptional.isPresent()){ | ||
564 | + return dataOptional.get(); | ||
565 | + } | ||
566 | + return new PublicReportData(ValhallaReportDimension.D60.getValue(),groupId); | ||
567 | + } | ||
568 | + | ||
569 | + private PublicReportData getPublicReportDataD10(List<PublicReportData> publicReportData20List,Long shopId,Long groupId){ | ||
570 | + if (CollectionUtils.isEmpty(publicReportData20List)){ | ||
571 | + return new PublicReportData(ValhallaReportDimension.D10.getValue(),groupId); | ||
572 | + } | ||
573 | + Optional<PublicReportData> dataOptional = publicReportData20List.stream().filter(e -> shopId.equals(e.getShopId())).findFirst(); | ||
574 | + if (dataOptional.isPresent()){ | ||
575 | + return dataOptional.get(); | ||
576 | + } | ||
577 | + return new PublicReportData(ValhallaReportDimension.D10.getValue(),groupId); | ||
578 | + } | ||
579 | + | ||
580 | + | ||
581 | + | ||
582 | + | ||
583 | + private String generateKey(final Long groupId) { | ||
584 | + Assert.notNull(groupId, "groupId cannot be null"); | ||
585 | + return String.format("%s:%s", getKeyPrefix(), groupId); | ||
34 | } | 586 | } |
35 | } | 587 | } |