Commit 2ce05838 2ce05838bb721d6932daae8876c0ca9d0b0bac8e by xianghan

1.优化部分任务处理接口,修改接收任务事件模型

2.为任务处理添加缓存
1 parent f97bb099
Showing 46 changed files with 744 additions and 260 deletions
1 package com.topdraw.business.module.member.domain;
2
3 import cn.hutool.core.bean.BeanUtil;
4 import cn.hutool.core.bean.copier.CopyOptions;
5 import com.topdraw.business.module.common.validated.UpdateGroup;
6 import lombok.Data;
7 import lombok.experimental.Accessors;
8 import org.springframework.data.annotation.CreatedDate;
9 import org.springframework.data.annotation.LastModifiedDate;
10 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
11
12 import javax.persistence.*;
13 import javax.validation.constraints.NotNull;
14 import java.io.Serializable;
15 import java.sql.Timestamp;
16
17 /**
18 * @author XiangHan
19 * @date 2021-10-22
20 */
21 @Entity
22 @Data
23 @EntityListeners(AuditingEntityListener.class)
24 @Accessors(chain = true)
25 @Table(name="uc_member")
26 public class MemberSimple implements Serializable {
27
28 /** 主键 */
29 @Id
30 @GeneratedValue(strategy = GenerationType.IDENTITY)
31 @Column(name = "id")
32 @NotNull(message = "id can't be null!!",groups = {UpdateGroup.class})
33 private Long id;
34
35 /** 标识 */
36 @Column(name = "code")
37 private String code;
38
39 /** 状态 0:不可用;1:可用 */
40 @Column(name = "`status`")
41 private Integer status;
42
43 /** 分组信息 */
44 @Column(name = "`groups`")
45 private String groups;
46
47 /** 是否会员 0:非会员;1:会员 */
48 @Column(name = "vip")
49 private Integer vip;
50
51 /** 会员等级(对应level表的level字段,非id) */
52 @Column(name = "`level`")
53 private Integer level;
54
55 /** iptv账号id */
56 @Column(name = "user_iptv_id")
57 private Long userIptvId;
58
59 /** 是否在黑名单 1:是;0否 */
60 @Column(name = "black_status")
61 private Long blackStatus;
62
63 public void copy(MemberSimple source){
64 BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(false));
65 }
66 }
1 package com.topdraw.business.module.member.level.service.impl; 1 package com.topdraw.business.module.member.level.service.impl;
2 2
3 import com.topdraw.business.module.member.level.domain.MemberLevel; 3 import com.topdraw.business.module.member.level.domain.MemberLevel;
4 import com.topdraw.config.RedisKeyConstants;
4 import com.topdraw.utils.ValidationUtil; 5 import com.topdraw.utils.ValidationUtil;
5 import com.topdraw.business.module.member.level.repository.MemberLevelRepository; 6 import com.topdraw.business.module.member.level.repository.MemberLevelRepository;
6 import com.topdraw.business.module.member.level.service.MemberLevelService; 7 import com.topdraw.business.module.member.level.service.MemberLevelService;
7 import com.topdraw.business.module.member.level.service.dto.MemberLevelDTO; 8 import com.topdraw.business.module.member.level.service.dto.MemberLevelDTO;
8 import com.topdraw.business.module.member.level.service.mapper.MemberLevelMapper; 9 import com.topdraw.business.module.member.level.service.mapper.MemberLevelMapper;
9 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.cache.annotation.Cacheable;
10 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
11 import org.springframework.transaction.annotation.Propagation; 13 import org.springframework.transaction.annotation.Propagation;
12 import org.springframework.transaction.annotation.Transactional; 14 import org.springframework.transaction.annotation.Transactional;
...@@ -42,8 +44,9 @@ public class MemberLevelServiceImpl implements MemberLevelService { ...@@ -42,8 +44,9 @@ public class MemberLevelServiceImpl implements MemberLevelService {
42 } 44 }
43 45
44 @Override 46 @Override
47 @Cacheable(cacheNames = RedisKeyConstants.cacheMemberLevelByLevel, key = "#level", unless = "#result.size() == 0")
45 public List<MemberLevelDTO> findLevelAndStatus(Integer level, Integer status) { 48 public List<MemberLevelDTO> findLevelAndStatus(Integer level, Integer status) {
46 return this.memberLevelMapper.toDto(this.memberLevelRepository.findByLevelAndStatus(level,status)); 49 return this.memberLevelMapper.toDto(this.memberLevelRepository.findByLevelAndStatus(level, status));
47 } 50 }
48 51
49 } 52 }
......
1 package com.topdraw.business.module.member.repository; 1 package com.topdraw.business.module.member.repository;
2 2
3 import com.topdraw.business.module.member.domain.Member; 3 import com.topdraw.business.module.member.domain.Member;
4 import com.topdraw.business.module.member.domain.MemberSimple;
4 import org.springframework.data.jpa.repository.JpaRepository; 5 import org.springframework.data.jpa.repository.JpaRepository;
5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 6 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6 import org.springframework.data.jpa.repository.Modifying; 7 import org.springframework.data.jpa.repository.Modifying;
......
1 package com.topdraw.business.module.member.repository;
2
3 import com.topdraw.business.module.member.domain.MemberSimple;
4 import org.springframework.data.jpa.repository.JpaRepository;
5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6 import org.springframework.data.jpa.repository.Query;
7
8 import java.util.Optional;
9
10 /**
11 * @author XiangHan
12 * @date 2021-10-22
13 */
14 public interface MemberSimpleRepository extends JpaRepository<MemberSimple, Long>, JpaSpecificationExecutor<MemberSimple> {
15
16 @Query(value = "SELECT `id`, `code`, `status`, `groups`, `vip`, `level`,`user_iptv_id`, `black_status` FROM `uc_member` WHERE `id` = ?1", nativeQuery = true)
17 Optional<MemberSimple> findSimpleById(Long id);
18
19 @Query(value = "SELECT `id`, `code`, `status`, `groups`, `vip`, `level`,`user_iptv_id`, `black_status` FROM `uc_member` WHERE `code` = ?1", nativeQuery = true)
20 Optional<MemberSimple> findSimpleByCode(String code);
21 }
...@@ -2,6 +2,8 @@ package com.topdraw.business.module.member.service; ...@@ -2,6 +2,8 @@ package com.topdraw.business.module.member.service;
2 2
3 import com.topdraw.business.module.member.domain.Member; 3 import com.topdraw.business.module.member.domain.Member;
4 import com.topdraw.business.module.member.service.dto.MemberDTO; 4 import com.topdraw.business.module.member.service.dto.MemberDTO;
5 import com.topdraw.business.module.member.service.dto.MemberSimpleDTO;
6 import org.springframework.transaction.annotation.Transactional;
5 7
6 import java.util.List; 8 import java.util.List;
7 9
...@@ -26,6 +28,13 @@ public interface MemberService { ...@@ -26,6 +28,13 @@ public interface MemberService {
26 MemberDTO findById(Long id); 28 MemberDTO findById(Long id);
27 29
28 /** 30 /**
31 *
32 * @param id
33 * @return
34 */
35 MemberSimpleDTO findSimpleById(Long id);
36
37 /**
29 * 通过code查询会员 38 * 通过code查询会员
30 * @param code 会员编码 39 * @param code 会员编码
31 * @return MemberDTO 40 * @return MemberDTO
...@@ -33,6 +42,13 @@ public interface MemberService { ...@@ -33,6 +42,13 @@ public interface MemberService {
33 MemberDTO findByCode(String code); 42 MemberDTO findByCode(String code);
34 43
35 /** 44 /**
45 *
46 * @param code
47 * @return
48 */
49 MemberSimpleDTO findSimpleByCode(String code);
50
51 /**
36 * 保存 52 * 保存
37 * @param resources 53 * @param resources
38 * @return Long id 54 * @return Long id
......
1 package com.topdraw.business.module.member.service.dto;
2
3 import lombok.Data;
4
5 import java.io.Serializable;
6 import java.sql.Timestamp;
7
8
9 /**
10 * @author XiangHan
11 * @date 2021-10-22
12 */
13 @Data
14 public class MemberSimpleDTO implements Serializable {
15
16 /** 主键 */
17 private Long id;
18
19 /** 标识 */
20 private String code;
21
22 /** 昵称 */
23 private String nickname;
24
25 /** 状态 0:不可用;1:可用 */
26 private Integer status;
27
28 /** 分组信息 */
29 private String groups;
30
31 /** 是否会员 0:非会员;1:会员 */
32 private Integer vip;
33
34 /** 会员等级(对应level表的level字段,非id) */
35 private Integer level;
36
37 /** iptv账号id */
38 private Long userIptvId;
39
40 /** 是否在黑名单 1:是;0否 */
41 private Long blackStatus;
42
43 }
1 package com.topdraw.business.module.member.service.mapper;
2
3 import com.topdraw.base.BaseMapper;
4 import com.topdraw.business.module.member.domain.MemberSimple;
5 import com.topdraw.business.module.member.service.dto.MemberSimpleDTO;
6 import org.mapstruct.Mapper;
7 import org.mapstruct.ReportingPolicy;
8
9 /**
10 * @author XiangHan
11 * @date 2021-10-22
12 */
13 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
14 public interface MemberSimpleMapper extends BaseMapper<MemberSimpleDTO, MemberSimple> {
15
16 }
...@@ -101,5 +101,5 @@ public interface PointsAvailableService { ...@@ -101,5 +101,5 @@ public interface PointsAvailableService {
101 * 101 *
102 * @param pointsAvailable 102 * @param pointsAvailable
103 */ 103 */
104 PointsAvailableDTO create4Custom(PointsAvailable pointsAvailable); 104 void create4Custom(PointsAvailable pointsAvailable);
105 } 105 }
......
...@@ -160,17 +160,8 @@ public class PointsAvailableServiceImpl implements PointsAvailableService { ...@@ -160,17 +160,8 @@ public class PointsAvailableServiceImpl implements PointsAvailableService {
160 } 160 }
161 161
162 @Override 162 @Override
163 public PointsAvailableDTO create4Custom(PointsAvailable resources) { 163 public void create4Custom(PointsAvailable resources) {
164 this.redisUtils.doLock("PointsAvailable::create::id"+resources.getMemberId().toString()); 164 this.pointsAvailableRepository.save(resources);
165 try {
166 PointsAvailable pointsAvailable = this.pointsAvailableRepository.save(resources);
167 return this.pointsAvailableMapper.toDto(pointsAvailable);
168 } catch (Exception e) {
169 e.printStackTrace();
170 throw e;
171 } finally {
172 this.redisUtils.doUnLock("PointsAvailable::create::id"+resources.getMemberId().toString());
173 }
174 } 165 }
175 166
176 } 167 }
......
...@@ -27,6 +27,9 @@ import java.io.Serializable; ...@@ -27,6 +27,9 @@ import java.io.Serializable;
27 @NoArgsConstructor 27 @NoArgsConstructor
28 public class TrTaskProgress implements Serializable { 28 public class TrTaskProgress implements Serializable {
29 29
30 @Transient
31 private String memberCode;
32
30 @Id 33 @Id
31 @GeneratedValue(strategy = GenerationType.IDENTITY) 34 @GeneratedValue(strategy = GenerationType.IDENTITY)
32 @Column(name = "id") 35 @Column(name = "id")
......
...@@ -5,7 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; ...@@ -5,7 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository;
5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6 import org.springframework.data.jpa.repository.Query; 6 import org.springframework.data.jpa.repository.Query;
7 7
8 import java.util.HashMap;
8 import java.util.List; 9 import java.util.List;
10 import java.util.Map;
11 import java.util.Optional;
9 12
10 /** 13 /**
11 * @author XiangHan 14 * @author XiangHan
...@@ -13,8 +16,17 @@ import java.util.List; ...@@ -13,8 +16,17 @@ import java.util.List;
13 */ 16 */
14 public interface TrTaskProgressRepository extends JpaRepository<TrTaskProgress, Long>, JpaSpecificationExecutor<TrTaskProgress> { 17 public interface TrTaskProgressRepository extends JpaRepository<TrTaskProgress, Long>, JpaSpecificationExecutor<TrTaskProgress> {
15 18
16 @Query(value = "select id, member_id, task_id , current_action_amount , \n" + 19 @Query(value = "select id, member_id, task_id, current_action_amount," +
17 " target_action_amount , `status` , completion_time,create_time,update_time from uc_tr_task_progress where member_id = ?1 \n" + 20 " target_action_amount, `status`, completion_time, create_time, update_time from uc_tr_task_progress where member_id = ?1 " +
18 " and task_id = ?2 and Date(completion_time) = ?3 ",nativeQuery = true) 21 " and task_id = ?2 and Date(completion_time) = ?3 ",nativeQuery = true)
19 TrTaskProgress findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1); 22 Optional<TrTaskProgress> findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
23
24
25 Integer countByMemberIdAndTaskId(Long memberId, Long taskId);
26
27 @Query(value = "select `task_id` AS taskId, count(*) AS finishCount from uc_tr_task_progress where member_id = ?1 and `status` = 1 GROUP BY `task_id` ", nativeQuery = true)
28 List<Map<String, Object>> countFinishTaskGroupByMemberId(Long memberId);
29
30 @Query(value = "select `task_id` AS taskId, count(*) AS finishCount from uc_tr_task_progress where member_id = ?1 and Date(completion_time) = ?2 and `status` = 1 GROUP BY `task_id`", nativeQuery = true)
31 List<Map<String, Object>> countFinishTaskGroupByMemberIdAndToday(Long memberId, String todayStart);
20 } 32 }
......
...@@ -4,7 +4,9 @@ import com.topdraw.business.module.task.progress.domain.TrTaskProgress; ...@@ -4,7 +4,9 @@ import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
4 import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO; 4 import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
5 5
6 import java.time.LocalDateTime; 6 import java.time.LocalDateTime;
7 import java.util.HashMap;
7 import java.util.List; 8 import java.util.List;
9 import java.util.Map;
8 10
9 /** 11 /**
10 * @author XiangHan 12 * @author XiangHan
...@@ -44,6 +46,28 @@ public interface TrTaskProgressService { ...@@ -44,6 +46,28 @@ public interface TrTaskProgressService {
44 * @param time1 46 * @param time1
45 * @return 47 * @return
46 */ 48 */
47 TrTaskProgressDTO findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1); 49 TrTaskProgress findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1);
48 50
51 /**
52 *
53 * @param memberId
54 * @param taskId
55 * @return
56 */
57 Integer countByMemberIdAndTaskId(Long memberId, Long taskId);
58
59 /**
60 *
61 * @param id
62 * @return
63 */
64 Map<Object, Object> countTotalFinishTaskByMemberId(Long id);
65
66 /**
67 *
68 * @param id
69 * @param todayStart
70 * @return
71 */
72 Map<Object, Object> countTodayFinishTaskByMemberId(Long id, String todayStart);
49 } 73 }
......
1 package com.topdraw.business.module.task.progress.service.impl; 1 package com.topdraw.business.module.task.progress.service.impl;
2 2
3 import cn.hutool.core.map.MapUtil;
3 import com.topdraw.business.module.task.progress.domain.TrTaskProgress; 4 import com.topdraw.business.module.task.progress.domain.TrTaskProgress;
4 import com.topdraw.config.RedisKeyConstants; 5 import com.topdraw.config.RedisKeyConstants;
6 import com.topdraw.utils.RedisUtils;
5 import com.topdraw.utils.ValidationUtil; 7 import com.topdraw.utils.ValidationUtil;
6 import com.topdraw.business.module.task.progress.repository.TrTaskProgressRepository; 8 import com.topdraw.business.module.task.progress.repository.TrTaskProgressRepository;
7 import com.topdraw.business.module.task.progress.service.TrTaskProgressService; 9 import com.topdraw.business.module.task.progress.service.TrTaskProgressService;
...@@ -16,9 +18,13 @@ import org.springframework.transaction.annotation.Propagation; ...@@ -16,9 +18,13 @@ import org.springframework.transaction.annotation.Propagation;
16 import org.springframework.transaction.annotation.Transactional; 18 import org.springframework.transaction.annotation.Transactional;
17 import org.springframework.dao.EmptyResultDataAccessException; 19 import org.springframework.dao.EmptyResultDataAccessException;
18 import org.springframework.util.Assert; 20 import org.springframework.util.Assert;
21 import org.springframework.util.CollectionUtils;
19 22
23 import java.time.LocalDate;
20 import java.time.LocalDateTime; 24 import java.time.LocalDateTime;
21 import java.util.List; 25 import java.util.*;
26 import java.util.stream.Collectors;
27 import java.util.stream.Stream;
22 28
23 /** 29 /**
24 * @author XiangHan 30 * @author XiangHan
...@@ -31,34 +37,30 @@ public class TrTaskProgressServiceImpl implements TrTaskProgressService { ...@@ -31,34 +37,30 @@ public class TrTaskProgressServiceImpl implements TrTaskProgressService {
31 37
32 @Autowired 38 @Autowired
33 private TrTaskProgressRepository trTaskProgressRepository; 39 private TrTaskProgressRepository trTaskProgressRepository;
34
35 @Autowired 40 @Autowired
36 private TrTaskProgressMapper trTaskProgressMapper; 41 private TrTaskProgressMapper trTaskProgressMapper;
37 42
43 @Autowired
44 private RedisUtils redisUtils;
45
38 @Override 46 @Override
39 public TrTaskProgressDTO findById(Long id) { 47 public TrTaskProgressDTO findById(Long id) {
40 TrTaskProgress TrTaskProgress = this.trTaskProgressRepository.findById(id).orElseGet(TrTaskProgress::new); 48 TrTaskProgress TrTaskProgress = this.trTaskProgressRepository.findById(id).orElseGet(TrTaskProgress::new);
41 ValidationUtil.isNull(TrTaskProgress.getId(),"TrTaskProgress","id",id);
42 return this.trTaskProgressMapper.toDto(TrTaskProgress); 49 return this.trTaskProgressMapper.toDto(TrTaskProgress);
43 } 50 }
44 51
45 @Override 52 @Override
46 @Transactional(rollbackFor = Exception.class) 53 @Transactional(rollbackFor = Exception.class)
47 @Cacheable(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#resources.memberId+':'+#resources.taskId+':'+#date", unless = "#result == null ") 54 // @CachePut(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#resources.memberId+':'+#resources.taskId+':'+#date", unless = "#result == null ")
48 public TrTaskProgress create(TrTaskProgress resources, String date) { 55 public TrTaskProgress create(TrTaskProgress resources, String date) {
49 TrTaskProgress trTaskProgress = this.trTaskProgressRepository.save(resources); 56 return this.trTaskProgressRepository.save(resources);
50 return trTaskProgress;
51 } 57 }
52 58
53 @Override 59 @Override
54 @Transactional(rollbackFor = Exception.class) 60 @Transactional(rollbackFor = Exception.class)
55 @Cacheable(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#resources.memberId+':'+#resources.taskId+':'+#date", unless = "#result == null ") 61 // @CachePut(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#resources.memberId+':'+#resources.taskId+':'+#date", unless = "#result == null ")
56 public TrTaskProgress update(TrTaskProgress resources, String date) { 62 public TrTaskProgress update(TrTaskProgress resources, String date) {
57 TrTaskProgress trTaskProgress = this.trTaskProgressRepository.findById(resources.getId()).orElseGet(TrTaskProgress::new); 63 return this.trTaskProgressRepository.save(resources);
58 ValidationUtil.isNull( trTaskProgress.getId(),"TrTaskProgress","id",resources.getId());
59 trTaskProgress.copy(resources);
60 TrTaskProgress save = this.trTaskProgressRepository.save(trTaskProgress);
61 return save;
62 } 64 }
63 65
64 @Override 66 @Override
...@@ -71,12 +73,68 @@ public class TrTaskProgressServiceImpl implements TrTaskProgressService { ...@@ -71,12 +73,68 @@ public class TrTaskProgressServiceImpl implements TrTaskProgressService {
71 } 73 }
72 74
73 @Override 75 @Override
74 @Cacheable(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#memberId+':'+#taskId+':'+#time1", unless = "#result == null") 76 // @Cacheable(cacheNames = RedisKeyConstants.cacheTaskProcessByMemberId, key = "#memberId+':'+#taskId+':'+#time1", unless = "#result.id == null")
75 public TrTaskProgressDTO findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1) { 77 public TrTaskProgress findByMemberIdAndTaskIdAndCompletionTime(Long memberId, Long taskId, String time1) {
76 log.info("从数据库查询当前会员今天是否完成了此任务, memberId ==>> {} || taskId ==>> {}", memberId, taskId); 78 log.info("从数据库查询当前会员今天是否完成了此任务, memberId ==>> {} || taskId ==>> {}", memberId, taskId);
77 return this.trTaskProgressMapper.toDto(this.trTaskProgressRepository.findByMemberIdAndTaskIdAndCompletionTime(memberId,taskId,time1)); 79 return this.trTaskProgressRepository.findByMemberIdAndTaskIdAndCompletionTime(memberId, taskId, time1).orElseGet(TrTaskProgress::new);
80 }
81
82 @Override
83 public Integer countByMemberIdAndTaskId(Long memberId, Long taskId) {
84 return this.trTaskProgressRepository.countByMemberIdAndTaskId(memberId, taskId);
78 } 85 }
79 86
87 @Override
88 public Map<Object, Object> countTotalFinishTaskByMemberId(Long memberId) {
89 Map<Object, Object> hmget = this.redisUtils.hmget(RedisKeyConstants.cacheTotalFinishTaskCount + "::" + memberId);
90 if (Objects.isNull(hmget)) {
91 List<Map<String, Object>> maps = this.trTaskProgressRepository.countFinishTaskGroupByMemberId(memberId);
92 if (!CollectionUtils.isEmpty(maps)) {
93 Map<Object, Object> finishTasks = new HashMap<>();
94 for (Map<String, Object> map : maps) {
95 Object taskId = map.get("taskId");
96 if (Objects.isNull(taskId)) {
97 continue;
98 }
99 finishTasks.put(Long.valueOf(taskId.toString()), Integer.valueOf(map.get("finishCount").toString()));
100
101 // 总记录一直存储
102 this.redisUtils.hmset(RedisKeyConstants.cacheTotalFinishTaskCount + "::" + memberId, finishTasks);
103 }
104 return finishTasks;
105 }
106 }
107
108 return hmget;
109 }
110
111 @Override
112 public Map<Object, Object> countTodayFinishTaskByMemberId(Long memberId, String todayStart) {
113
114 Map<Object, Object> hmget = this.redisUtils.hmget(RedisKeyConstants.cacheTodayFinishTaskCount + "::" + memberId + ":" + todayStart);
115 if (Objects.isNull(hmget)) {
116
117 List<Map<String, Object>> maps = this.trTaskProgressRepository.countFinishTaskGroupByMemberIdAndToday(memberId, todayStart);
118 if (!CollectionUtils.isEmpty(maps)){
119 Map<Object, Object> finishTasks = new HashMap<>();
120 for (Map<String, Object> map : maps) {
121 Object taskId = map.get("taskId");
122 if (Objects.isNull(taskId)) {
123 continue;
124 }
125
126 finishTasks.put(Long.valueOf(taskId.toString()), Integer.valueOf(map.get("finishCount").toString()));
127
128 // 单天的记录只存储一天
129 this.redisUtils.hmset(RedisKeyConstants.cacheTodayFinishTaskCount + "::" + memberId + ":" + LocalDate.now(), finishTasks, 24*60*60);
130 }
131 return finishTasks;
132
133 }
134
135 }
136 return hmget;
137 }
80 138
81 139
82 } 140 }
......
...@@ -28,6 +28,6 @@ public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificat ...@@ -28,6 +28,6 @@ public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificat
28 @Query(value = "SELECT ta.*, attr.attr_str AS attr FROM tr_task ta LEFT JOIN tr_task_template tm ON ta.task_template_id = tm.id " + 28 @Query(value = "SELECT ta.*, attr.attr_str AS attr FROM tr_task ta LEFT JOIN tr_task_template tm ON ta.task_template_id = tm.id " +
29 " LEFT JOIN tr_task_attr attr ON attr.task_id = ta.id " + 29 " LEFT JOIN tr_task_attr attr ON attr.task_id = ta.id " +
30 " WHERE ta.`status` = 1 AND ta.valid_time <= now() and ta.expire_time >= now() AND ta.delete_mark = 0 AND " + 30 " WHERE ta.`status` = 1 AND ta.valid_time <= now() and ta.expire_time >= now() AND ta.delete_mark = 0 AND " +
31 " tm.type = ?1 ", nativeQuery = true) 31 " tm.type = ?1 AND ta.`member_level` <= ?2 and ta.`member_vip` <= ?3", nativeQuery = true)
32 List<Task> findByEvent(Integer event); 32 List<Task> findByEvent(Integer event, Integer level, Integer vip);
33 } 33 }
......
1 package com.topdraw.business.module.task.service; 1 package com.topdraw.business.module.task.service;
2 2
3 import com.topdraw.business.module.member.service.dto.MemberSimpleDTO;
3 import com.topdraw.business.module.task.domain.Task; 4 import com.topdraw.business.module.task.domain.Task;
4 import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO; 5 import com.topdraw.business.module.task.progress.service.dto.TrTaskProgressDTO;
5 import com.topdraw.business.module.task.service.dto.TaskDTO; 6 import com.topdraw.business.module.task.service.dto.TaskDTO;
...@@ -63,6 +64,6 @@ public interface TaskService { ...@@ -63,6 +64,6 @@ public interface TaskService {
63 * @param event 64 * @param event
64 * @return 65 * @return
65 */ 66 */
66 List<Task> findByEvent(Integer event); 67 List<Task> findByEventAndMemberLevelAndVip(Integer event, Integer level, Integer vip);
67 68
68 } 69 }
......
1 package com.topdraw.business.module.task.service.impl; 1 package com.topdraw.business.module.task.service.impl;
2 2
3 import com.topdraw.business.module.member.service.dto.MemberSimpleDTO;
3 import com.topdraw.business.module.task.domain.Task; 4 import com.topdraw.business.module.task.domain.Task;
4 import com.topdraw.business.module.task.repository.TaskRepository; 5 import com.topdraw.business.module.task.repository.TaskRepository;
5 import com.topdraw.business.module.task.service.TaskService; 6 import com.topdraw.business.module.task.service.TaskService;
6 import com.topdraw.business.module.task.service.dto.TaskDTO; 7 import com.topdraw.business.module.task.service.dto.TaskDTO;
7 import com.topdraw.business.module.task.service.mapper.TaskMapper; 8 import com.topdraw.business.module.task.service.mapper.TaskMapper;
8 import com.topdraw.config.RedisKeyConstants; 9 import com.topdraw.config.RedisKeyConstants;
10 import com.topdraw.utils.RedisUtils;
9 import lombok.extern.slf4j.Slf4j; 11 import lombok.extern.slf4j.Slf4j;
10 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.cache.annotation.Cacheable; 13 import org.springframework.cache.annotation.Cacheable;
12 import org.springframework.stereotype.Service; 14 import org.springframework.stereotype.Service;
13 import org.springframework.transaction.annotation.Propagation; 15 import org.springframework.transaction.annotation.Propagation;
14 import org.springframework.transaction.annotation.Transactional; 16 import org.springframework.transaction.annotation.Transactional;
17 import org.springframework.util.CollectionUtils;
15 18
16 import java.util.ArrayList; 19 import java.util.ArrayList;
17 import java.util.List; 20 import java.util.List;
...@@ -30,6 +33,8 @@ public class TaskServiceImpl implements TaskService { ...@@ -30,6 +33,8 @@ public class TaskServiceImpl implements TaskService {
30 private TaskMapper taskMapper; 33 private TaskMapper taskMapper;
31 @Autowired 34 @Autowired
32 private TaskRepository taskRepository; 35 private TaskRepository taskRepository;
36 @Autowired
37 private RedisUtils redisUtils;
33 38
34 @Override 39 @Override
35 public TaskDTO findById(Long id) { 40 public TaskDTO findById(Long id) {
...@@ -72,9 +77,10 @@ public class TaskServiceImpl implements TaskService { ...@@ -72,9 +77,10 @@ public class TaskServiceImpl implements TaskService {
72 } 77 }
73 78
74 @Override 79 @Override
75 @Cacheable(value = RedisKeyConstants.cacheTaskByEvent, key = "#event" , unless = "#result.size() == 0") 80 @Cacheable(cacheNames = RedisKeyConstants.cacheTaskByEventAndMemberLevelAndVip, key = "#event+':'+#level+':'+#vip",
76 public List<Task> findByEvent(Integer event) { 81 unless = "#result.size() == 0")
77 log.info("从数据库查询事件列表 ==>> {}", event); 82 public List<Task> findByEventAndMemberLevelAndVip(Integer event, Integer level, Integer vip) {
78 return Objects.nonNull(event) ? this.taskRepository.findByEvent(event) : new ArrayList<>(); 83 List<Task> tasks = this.taskRepository.findByEvent(event, level, vip);
84 return Objects.nonNull(event) ? tasks : new ArrayList<>();
79 } 85 }
80 } 86 }
......
1 package com.topdraw.business.module.user.iptv.domain;
2
3 import cn.hutool.core.bean.BeanUtil;
4 import cn.hutool.core.bean.copier.CopyOptions;
5 import com.topdraw.business.module.common.domain.AsyncMqModule;
6 import com.topdraw.business.module.common.validated.CreateGroup;
7 import com.topdraw.business.module.common.validated.UpdateGroup;
8 import lombok.Data;
9 import lombok.experimental.Accessors;
10 import org.springframework.data.annotation.CreatedDate;
11 import org.springframework.data.annotation.LastModifiedDate;
12 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
13
14 import javax.persistence.*;
15 import javax.validation.constraints.NotNull;
16 import java.io.Serializable;
17 import java.sql.Timestamp;
18
19 /**
20 * @author XiangHan
21 * @date 2021-12-16
22 */
23 @Entity
24 @Data
25 @EntityListeners(AuditingEntityListener.class)
26 @Accessors(chain = true)
27 @Table(name="uc_user_tv")
28 public class UserTvSimple extends AsyncMqModule implements Serializable {
29
30 /** ID */
31 @Id
32 @GeneratedValue(strategy = GenerationType.IDENTITY)
33 @Column(name = "id")
34 private Long id;
35
36 /** 会员id */
37 @Column(name = "member_id")
38 private Long memberId;
39
40 /** 原vis_user_id */
41 @Column(name = "vis_user_id")
42 private Long visUserId;
43
44 /** 绑定的小屏账户会员编码 */
45 @Column(name = "priority_member_code")
46 private String priorityMemberCode;
47
48 public void copy(UserTvSimple source){
49 BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(false));
50 }
51 }
1 package com.topdraw.business.module.user.iptv.repository; 1 package com.topdraw.business.module.user.iptv.repository;
2 2
3 import com.topdraw.business.module.user.iptv.domain.UserTv; 3 import com.topdraw.business.module.user.iptv.domain.UserTv;
4 import com.topdraw.business.module.user.iptv.service.dto.UserTvSimpleDTO;
4 import org.springframework.data.jpa.repository.JpaRepository; 5 import org.springframework.data.jpa.repository.JpaRepository;
5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 6 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6 import org.springframework.data.jpa.repository.Modifying; 7 import org.springframework.data.jpa.repository.Modifying;
......
1 package com.topdraw.business.module.user.iptv.repository;
2
3 import com.topdraw.business.module.user.iptv.domain.UserTvSimple;
4 import com.topdraw.business.module.user.iptv.service.dto.UserTvSimpleDTO;
5 import org.springframework.data.jpa.repository.JpaRepository;
6 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
7 import org.springframework.data.jpa.repository.Query;
8
9 /**
10 * @author XiangHan
11 * @date 2021-12-16
12 */
13 public interface UserTvSimpleRepository extends JpaRepository<UserTvSimple, Long>, JpaSpecificationExecutor<UserTvSimple> {
14
15 @Query(value = "SELECT `id`, `vis_user_id` , `member_id` , " +
16 " `priority_member_code` FROM `uc_user_tv` WHERE `platform_account` = ?1", nativeQuery = true)
17 UserTvSimple findSimpleByPlatformAccount(String platformAccount);
18 }
...@@ -3,6 +3,7 @@ package com.topdraw.business.module.user.iptv.service; ...@@ -3,6 +3,7 @@ package com.topdraw.business.module.user.iptv.service;
3 import com.topdraw.business.module.member.service.dto.MemberDTO; 3 import com.topdraw.business.module.member.service.dto.MemberDTO;
4 import com.topdraw.business.module.user.iptv.domain.UserTv; 4 import com.topdraw.business.module.user.iptv.domain.UserTv;
5 import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO; 5 import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO;
6 import com.topdraw.business.module.user.iptv.service.dto.UserTvSimpleDTO;
6 7
7 /** 8 /**
8 * @author XiangHan 9 * @author XiangHan
...@@ -51,6 +52,13 @@ public interface UserTvService { ...@@ -51,6 +52,13 @@ public interface UserTvService {
51 52
52 /** 53 /**
53 * 54 *
55 * @param platformAccount
56 * @return
57 */
58 UserTvSimpleDTO findSimpleByPlatformAccount(String platformAccount);
59
60 /**
61 *
54 * @param memberCode 62 * @param memberCode
55 * @return 63 * @return
56 */ 64 */
......
1 package com.topdraw.business.module.user.iptv.service.dto;
2
3 import lombok.Data;
4
5 import java.io.Serializable;
6
7
8 /**
9 * @author XiangHan
10 * @date 2021-12-16
11 */
12 @Data
13 public class UserTvSimpleDTO implements Serializable {
14
15 private Long visUserId;
16 /** 绑定的小屏账户会员编码 */
17 private String priorityMemberCode;
18 /** 会员id */
19 private Long memberId;
20
21 private String platformAccount;
22 }
23
24
1 package com.topdraw.business.module.user.iptv.service.impl; 1 package com.topdraw.business.module.user.iptv.service.impl;
2 2
3 import com.alibaba.fastjson.JSONObject;
3 import com.topdraw.aspect.AsyncMqSend; 4 import com.topdraw.aspect.AsyncMqSend;
4 import com.topdraw.business.module.member.service.MemberService; 5 import com.topdraw.business.module.member.service.MemberService;
5 import com.topdraw.business.module.member.service.dto.MemberDTO; 6 import com.topdraw.business.module.member.service.dto.MemberDTO;
6 import com.topdraw.business.module.user.iptv.domain.UserTv; 7 import com.topdraw.business.module.user.iptv.domain.UserTv;
7 import com.topdraw.business.process.service.impl.UserOperationServiceImpl; 8 import com.topdraw.business.module.user.iptv.domain.UserTvSimple;
9 import com.topdraw.business.module.user.iptv.repository.UserTvSimpleRepository;
10 import com.topdraw.business.module.user.iptv.service.dto.UserTvSimpleDTO;
11 import com.topdraw.business.module.user.iptv.service.mapper.UserTvSimpleMapper;
8 import com.topdraw.config.RedisKeyConstants; 12 import com.topdraw.config.RedisKeyConstants;
9 import com.topdraw.exception.EntityNotFoundException; 13 import com.topdraw.exception.EntityNotFoundException;
10 import com.topdraw.exception.GlobeExceptionMsg; 14 import com.topdraw.exception.GlobeExceptionMsg;
15 import com.topdraw.utils.RedisUtils;
11 import com.topdraw.utils.ValidationUtil; 16 import com.topdraw.utils.ValidationUtil;
12 import com.topdraw.business.module.user.iptv.repository.UserTvRepository; 17 import com.topdraw.business.module.user.iptv.repository.UserTvRepository;
13 import com.topdraw.business.module.user.iptv.service.UserTvService; 18 import com.topdraw.business.module.user.iptv.service.UserTvService;
...@@ -16,6 +21,7 @@ import com.topdraw.business.module.user.iptv.service.mapper.UserTvMapper; ...@@ -16,6 +21,7 @@ import com.topdraw.business.module.user.iptv.service.mapper.UserTvMapper;
16 import lombok.extern.slf4j.Slf4j; 21 import lombok.extern.slf4j.Slf4j;
17 import org.apache.commons.lang3.StringUtils; 22 import org.apache.commons.lang3.StringUtils;
18 import org.springframework.aop.framework.AopContext; 23 import org.springframework.aop.framework.AopContext;
24 import org.springframework.beans.BeanUtils;
19 import org.springframework.beans.factory.annotation.Autowired; 25 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.cache.annotation.Cacheable; 26 import org.springframework.cache.annotation.Cacheable;
21 import org.springframework.stereotype.Service; 27 import org.springframework.stereotype.Service;
...@@ -25,6 +31,8 @@ import org.springframework.dao.EmptyResultDataAccessException; ...@@ -25,6 +31,8 @@ import org.springframework.dao.EmptyResultDataAccessException;
25 import org.springframework.util.Assert; 31 import org.springframework.util.Assert;
26 32
27 import java.time.LocalDateTime; 33 import java.time.LocalDateTime;
34 import java.util.HashMap;
35 import java.util.Map;
28 import java.util.Objects; 36 import java.util.Objects;
29 import java.util.Optional; 37 import java.util.Optional;
30 38
...@@ -41,9 +49,16 @@ public class UserTvServiceImpl implements UserTvService { ...@@ -41,9 +49,16 @@ public class UserTvServiceImpl implements UserTvService {
41 @Autowired 49 @Autowired
42 private UserTvMapper userTvMapper; 50 private UserTvMapper userTvMapper;
43 @Autowired 51 @Autowired
52 private UserTvSimpleMapper userTvSimpleMapper;
53 @Autowired
44 private MemberService memberService; 54 private MemberService memberService;
45 @Autowired 55 @Autowired
46 private UserTvRepository userTvRepository; 56 private UserTvRepository userTvRepository;
57 @Autowired
58 private UserTvSimpleRepository userTvSimpleRepository;
59
60 @Autowired
61 private RedisUtils redisUtils;
47 62
48 @AsyncMqSend 63 @AsyncMqSend
49 public void asyncUpdateUserTvVisUserId(UserTvDTO userTvDTO) {} 64 public void asyncUpdateUserTvVisUserId(UserTvDTO userTvDTO) {}
...@@ -57,6 +72,7 @@ public class UserTvServiceImpl implements UserTvService { ...@@ -57,6 +72,7 @@ public class UserTvServiceImpl implements UserTvService {
57 * @return 72 * @return
58 */ 73 */
59 @Override 74 @Override
75 @Transactional(readOnly = true)
60 public MemberDTO findMemberByPlatformAccount(String platformAccount){ 76 public MemberDTO findMemberByPlatformAccount(String platformAccount){
61 // 大屏账户 77 // 大屏账户
62 UserTvDTO userTvDTO = this.findByPlatformAccount(platformAccount); 78 UserTvDTO userTvDTO = this.findByPlatformAccount(platformAccount);
...@@ -119,6 +135,7 @@ public class UserTvServiceImpl implements UserTvService { ...@@ -119,6 +135,7 @@ public class UserTvServiceImpl implements UserTvService {
119 } 135 }
120 136
121 @Override 137 @Override
138 @Transactional(readOnly = true)
122 public UserTvDTO findById(Long id) { 139 public UserTvDTO findById(Long id) {
123 UserTv UserTv = this.userTvRepository.findById(id).orElseGet(UserTv::new); 140 UserTv UserTv = this.userTvRepository.findById(id).orElseGet(UserTv::new);
124 ValidationUtil.isNull(UserTv.getId(),"UserTv","id",id); 141 ValidationUtil.isNull(UserTv.getId(),"UserTv","id",id);
...@@ -169,18 +186,39 @@ public class UserTvServiceImpl implements UserTvService { ...@@ -169,18 +186,39 @@ public class UserTvServiceImpl implements UserTvService {
169 } 186 }
170 187
171 @Override 188 @Override
172 @Cacheable(cacheNames = RedisKeyConstants.cacheUserTvByPlatformAccount, key = "#platformAccount") 189 @Cacheable(cacheNames = RedisKeyConstants.cacheUserTvByPlatformAccount, key = "#platformAccount", unless = "#result.id == null")
190 @Transactional(readOnly = true)
173 public UserTvDTO findByPlatformAccount(String platformAccount) { 191 public UserTvDTO findByPlatformAccount(String platformAccount) {
174 log.info("从数据库通过大屏账号检索大屏账号信息"); 192 UserTv userTv = this.userTvRepository.findByPlatformAccount(platformAccount).orElseGet(UserTv::new);
175 Optional<UserTv> userTv = this.userTvRepository.findByPlatformAccount(platformAccount); 193 return this.userTvMapper.toDto(userTv);
176 if (userTv.isPresent()) { 194 }
177 ValidationUtil.isNull( userTv.get().getId(),"UserTv","id",userTv.get().getId()); 195
178 return this.userTvMapper.toDto(userTv.get()); 196 @Override
197 // @Cacheable(cacheNames = RedisKeyConstants.cacheUserTvByPlatformAccount, key = "#platformAccount")
198 public UserTvSimpleDTO findSimpleByPlatformAccount(String platformAccount) {
199
200 Object userTvSimpleObj = this.redisUtils.get(RedisKeyConstants.cacheVisUserByPlatformAccount + "::" + platformAccount);
201 if (Objects.nonNull(userTvSimpleObj)) {
202 Map<String, Object> map = (Map<String, Object>)userTvSimpleObj;
203 UserTvSimpleDTO userTvSimpleDTO = new UserTvSimpleDTO();
204 userTvSimpleDTO.setPlatformAccount(map.get("platformAccount").toString());
205 userTvSimpleDTO.setMemberId(Long.valueOf(map.get("memberId").toString()));
206 userTvSimpleDTO.setPriorityMemberCode(map.get("priorityMemberCode") == null ? "" : map.get("priorityMemberCode").toString());
207 return userTvSimpleDTO;
179 } 208 }
209
210 UserTvSimple userTvSimple = this.userTvSimpleRepository.findSimpleByPlatformAccount(platformAccount);
211 if (Objects.nonNull(userTvSimple)) {
212 HashMap hashMap = JSONObject.parseObject(userTvSimple.toString(), HashMap.class);
213 this.redisUtils.set(RedisKeyConstants.cacheVisUserByPlatformAccount + "::" + platformAccount, hashMap);
214 return this.userTvSimpleMapper.toDto(userTvSimple);
215 }
216
180 return null; 217 return null;
181 } 218 }
182 219
183 @Override 220 @Override
221 @Transactional(readOnly = true)
184 public UserTvDTO findByPriorityMemberCode(String memberCode) { 222 public UserTvDTO findByPriorityMemberCode(String memberCode) {
185 Optional<UserTv> userTv = this.userTvRepository.findByPriorityMemberCode(memberCode); 223 Optional<UserTv> userTv = this.userTvRepository.findByPriorityMemberCode(memberCode);
186 if (userTv.isPresent()) { 224 if (userTv.isPresent()) {
...@@ -191,6 +229,7 @@ public class UserTvServiceImpl implements UserTvService { ...@@ -191,6 +229,7 @@ public class UserTvServiceImpl implements UserTvService {
191 } 229 }
192 230
193 @Override 231 @Override
232 @Transactional(readOnly = true)
194 public UserTvDTO findByMemberId(Long memberId) { 233 public UserTvDTO findByMemberId(Long memberId) {
195 Optional<UserTv> userTv = this.userTvRepository.findByMemberId(memberId); 234 Optional<UserTv> userTv = this.userTvRepository.findByMemberId(memberId);
196 if (userTv.isPresent()) { 235 if (userTv.isPresent()) {
...@@ -201,6 +240,7 @@ public class UserTvServiceImpl implements UserTvService { ...@@ -201,6 +240,7 @@ public class UserTvServiceImpl implements UserTvService {
201 } 240 }
202 241
203 @Override 242 @Override
243 @Transactional(readOnly = true)
204 public boolean checkPriorityMemberByMemberIdOrMemberCode(Long memberId, String memberCode) { 244 public boolean checkPriorityMemberByMemberIdOrMemberCode(Long memberId, String memberCode) {
205 // 检查会员是否存在 245 // 检查会员是否存在
206 this.checkMember(memberId, memberCode); 246 this.checkMember(memberId, memberCode);
......
1 package com.topdraw.business.module.user.iptv.service.mapper;
2
3 import com.topdraw.base.BaseMapper;
4 import com.topdraw.business.module.user.iptv.domain.UserTv;
5 import com.topdraw.business.module.user.iptv.domain.UserTvSimple;
6 import com.topdraw.business.module.user.iptv.service.dto.UserTvSimpleDTO;
7 import org.mapstruct.Mapper;
8 import org.mapstruct.ReportingPolicy;
9
10 /**
11 * @author XiangHan
12 * @date 2021-12-16
13 */
14 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
15 public interface UserTvSimpleMapper extends BaseMapper<UserTvSimpleDTO, UserTvSimple> {
16
17 }
...@@ -35,6 +35,9 @@ public class TempRights { ...@@ -35,6 +35,9 @@ public class TempRights {
35 @Transient 35 @Transient
36 protected String memberCode; 36 protected String memberCode;
37 37
38 @Transient
39 protected Integer memberLevel;
40
38 /** 账号id */ 41 /** 账号id */
39 @Transient 42 @Transient
40 protected Long userId; 43 protected Long userId;
......
...@@ -51,7 +51,7 @@ public class TaskOperationController { ...@@ -51,7 +51,7 @@ public class TaskOperationController {
51 51
52 /** 52 /**
53 * 新增任务 53 * 新增任务
54 * 54 *uc_tr_task_progress
55 * @param task 消息 55 * @param task 消息
56 */ 56 */
57 @PostMapping(value = "/createTask") 57 @PostMapping(value = "/createTask")
......
...@@ -473,8 +473,12 @@ public class UserOperationController { ...@@ -473,8 +473,12 @@ public class UserOperationController {
473 @ApiOperation("保存大屏账户同时创建会员信息") 473 @ApiOperation("保存大屏账户同时创建会员信息")
474 @AnonymousAccess 474 @AnonymousAccess
475 public ResultInfo createTvUserAndMember(@Validated(value = {CreateGroup.class}) @RequestBody UserTv resources) { 475 public ResultInfo createTvUserAndMember(@Validated(value = {CreateGroup.class}) @RequestBody UserTv resources) {
476 log.info("UserOperationController ==> createUserAndCreateMember ==>> param ==> [{}]",resources); 476 log.info("UserOperationController ==> createTvUserAndMember ==>> param ==> [{}]",resources);
477 477 String platformAccount = resources.getPlatformAccount();
478 if (StringUtils.isBlank(platformAccount)) {
479 log.error("保存大屏账户同时创建会员信息异常,参数错误,大屏账号不存在");
480 return ResultInfo.failure("参数错误,大屏账号不存在");
481 }
478 UserTvDTO result = this.userOperationService.createTvUserAndMember(resources); 482 UserTvDTO result = this.userOperationService.createTvUserAndMember(resources);
479 return ResultInfo.success(result); 483 return ResultInfo.success(result);
480 } 484 }
......
1 package com.topdraw.business.process.service;
2
3 import lombok.extern.slf4j.Slf4j;
4 import org.springframework.stereotype.Service;
5
6 /**
7 * @author :
8 * @description:
9 * @function :
10 * @date :Created in 2022/6/22 14:05
11 * @version: :
12 * @modified By:
13 * @since : modified in 2022/6/22 14:05
14 */
15 @Service
16 @Slf4j
17 public class AsyncTaskService {
18
19
20
21 }
...@@ -23,5 +23,5 @@ public interface RightsOperationService { ...@@ -23,5 +23,5 @@ public interface RightsOperationService {
23 * 任务完成自动发放权益 23 * 任务完成自动发放权益
24 * @param tempRightsMap 24 * @param tempRightsMap
25 */ 25 */
26 void grantRights(Map<RightType, Object> tempRightsMap); 26 Integer grantRights(Map<RightType, Object> tempRightsMap);
27 } 27 }
......
...@@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
19 import org.springframework.aop.framework.AopContext; 19 import org.springframework.aop.framework.AopContext;
20 import org.springframework.beans.BeanUtils; 20 import org.springframework.beans.BeanUtils;
21 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
22 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
23 24
24 import java.time.LocalDate; 25 import java.time.LocalDate;
...@@ -43,6 +44,9 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -43,6 +44,9 @@ public class CouponOperationServiceImpl implements CouponOperationService {
43 MemberService memberService; 44 MemberService memberService;
44 45
45 @Autowired 46 @Autowired
47 private ThreadPoolTaskExecutor threadPoolTaskExecutor;
48
49 @Autowired
46 private RedisUtils redisUtils; 50 private RedisUtils redisUtils;
47 51
48 // 过期阀值(默认一个月) 52 // 过期阀值(默认一个月)
...@@ -137,7 +141,9 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -137,7 +141,9 @@ public class CouponOperationServiceImpl implements CouponOperationService {
137 member.setUpdateTime(TimestampUtil.now()); 141 member.setUpdateTime(TimestampUtil.now());
138 this.memberOperationService.doUpdateMemberCoupon(member); 142 this.memberOperationService.doUpdateMemberCoupon(member);
139 143
140 ((CouponOperationServiceImpl) AopContext.currentProxy()).asyncMemberCoupon(member); 144 /*this.threadPoolTaskExecutor.submit(() -> {
145 ((CouponOperationServiceImpl) AopContext.currentProxy()).asyncMemberCoupon(member);
146 });*/
141 } 147 }
142 148
143 private MemberDTO findMemberByMemberId(Long memberId) { 149 private MemberDTO findMemberByMemberId(Long memberId) {
......
...@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
20 import org.springframework.aop.framework.AopContext; 20 import org.springframework.aop.framework.AopContext;
21 import org.springframework.beans.BeanUtils; 21 import org.springframework.beans.BeanUtils;
22 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
23 import org.springframework.stereotype.Service; 24 import org.springframework.stereotype.Service;
24 import org.springframework.util.CollectionUtils; 25 import org.springframework.util.CollectionUtils;
25 26
...@@ -43,6 +44,9 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -43,6 +44,9 @@ public class ExpOperationServiceImpl implements ExpOperationService {
43 MemberService memberService; 44 MemberService memberService;
44 45
45 @Autowired 46 @Autowired
47 private ThreadPoolTaskExecutor threadPoolTaskExecutor;
48
49 @Autowired
46 private RedisUtils redisUtils; 50 private RedisUtils redisUtils;
47 51
48 @AsyncMqSend 52 @AsyncMqSend
...@@ -80,21 +84,27 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -80,21 +84,27 @@ public class ExpOperationServiceImpl implements ExpOperationService {
80 this.redisUtils.doLock(RedisKeyConstants.updateCacheExpByMemberId + tempExp.getMemberId()); 84 this.redisUtils.doLock(RedisKeyConstants.updateCacheExpByMemberId + tempExp.getMemberId());
81 85
82 // 原始经验值 86 // 原始经验值
87 long l = System.currentTimeMillis();
83 long originExp = this.getExpByMemberId(tempExp); 88 long originExp = this.getExpByMemberId(tempExp);
84 log.info("----获取会员当前原始经验值 ==>> {}", originExp); 89 long l1 = System.currentTimeMillis();
90 log.info("----获取会员当前原始经验值 ==>> {}, 总耗时 -->> {}", originExp, (l1-l));
85 // 总经验值 91 // 总经验值
92 // TODO
86 long totalExp = this.calculateTotalExp(originExp, tempExp); 93 long totalExp = this.calculateTotalExp(originExp, tempExp);
87 log.info("----计算总经验值 ==>> {}", totalExp); 94 log.info("----计算总经验值 ==>> {}", totalExp);
88 95
89 // 2.更新成长值与等级 96 // 2.更新成长值与等级
90 log.info("----更新会员经验值与对应等级 ==>> {}", totalExp); 97 long l2 = System.currentTimeMillis();
91 this.refreshMemberExpAndLevel(tempExp, totalExp); 98 this.refreshMemberExpAndLevel(tempExp, totalExp);
99 long l3 = System.currentTimeMillis();
100 log.info("----更新会员经验值与对应等级 ==>> {}, 总耗时 ==>> {}", totalExp, (l3-l2));
92 101
93 log.info("----保存经验值历史 "); 102 long l4 = System.currentTimeMillis();
94 this.doInsertExpDetail(tempExp, originExp, totalExp); 103 this.doInsertExpDetail(tempExp, originExp, totalExp);
95 104 long l5 = System.currentTimeMillis();
105 log.info("----保存经验值历史 -->> 总耗时 -->> {}", (l5-l4));
96 } catch (Exception e) { 106 } catch (Exception e) {
97 log.error("成长值发放失败,"+e.getMessage()); 107 log.error("成长值发放失败,{}",e.getMessage());
98 } finally { 108 } finally {
99 this.redisUtils.doUnLock(RedisKeyConstants.updateCacheExpByMemberId + tempExp.getMemberId()); 109 this.redisUtils.doUnLock(RedisKeyConstants.updateCacheExpByMemberId + tempExp.getMemberId());
100 } 110 }
...@@ -112,8 +122,8 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -112,8 +122,8 @@ public class ExpOperationServiceImpl implements ExpOperationService {
112 */ 122 */
113 private long getExpByMemberId(TempExp tempExp) { 123 private long getExpByMemberId(TempExp tempExp) {
114 Long memberId = tempExp.getMemberId(); 124 Long memberId = tempExp.getMemberId();
115 MemberDTO memberDTO = this.memberOperationService.findById(memberId); 125 MemberDTO memberDTO = this.memberService.findById(memberId);
116 if (Objects.nonNull(memberDTO)) { 126 if (Objects.nonNull(memberDTO.getId())) {
117 Long exp = memberDTO.getExp(); 127 Long exp = memberDTO.getExp();
118 return Objects.isNull(exp) ? 0L : exp; 128 return Objects.isNull(exp) ? 0L : exp;
119 } 129 }
...@@ -127,13 +137,13 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -127,13 +137,13 @@ public class ExpOperationServiceImpl implements ExpOperationService {
127 */ 137 */
128 private void refreshMemberExpAndLevel(TempExp tempExp,long totalExp) { 138 private void refreshMemberExpAndLevel(TempExp tempExp,long totalExp) {
129 139
140 Integer memberLevel = tempExp.getMemberLevel();
130 Long memberId = tempExp.getMemberId(); 141 Long memberId = tempExp.getMemberId();
131 // 1.获取当前成长值
132 MemberDTO memberDTO = this.getMemberInfoByMemberId(memberId);
133 // 2.获取下一级需要的成长值 142 // 2.获取下一级需要的成长值
134 MemberLevelDTO memberLevelDTO = this.getNextLevelExp(memberDTO.getLevel() + 1, 1); 143 // TODO 需要缓存
144 MemberLevelDTO memberLevelDTO = this.getNextLevelExp(memberLevel + 1, 1);
135 // 4.成长值比较,判断是否升级 145 // 4.成长值比较,判断是否升级
136 Integer level = this.compareExp(totalExp, memberLevelDTO,memberDTO); 146 Integer level = this.compareExp(totalExp, memberLevelDTO, memberLevel);
137 // 5.更新用户信息 147 // 5.更新用户信息
138 this.updateMemberInfo(level, totalExp, memberId); 148 this.updateMemberInfo(level, totalExp, memberId);
139 } 149 }
...@@ -154,8 +164,9 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -154,8 +164,9 @@ public class ExpOperationServiceImpl implements ExpOperationService {
154 member.setLevel(level); 164 member.setLevel(level);
155 member.setUpdateTime(TimestampUtil.now()); 165 member.setUpdateTime(TimestampUtil.now());
156 this.memberOperationService.doUpdateMemberExpAndLevel(member); 166 this.memberOperationService.doUpdateMemberExpAndLevel(member);
157 167 /*this.threadPoolTaskExecutor.submit(() -> {
158 ((ExpOperationServiceImpl) AopContext.currentProxy()).asyncMemberExpAndLevel(member); 168 ((ExpOperationServiceImpl) AopContext.currentProxy()).asyncMemberExpAndLevel(member);
169 });*/
159 } 170 }
160 171
161 private MemberDTO findMemberByMemberId(Long memberId) { 172 private MemberDTO findMemberByMemberId(Long memberId) {
...@@ -163,7 +174,7 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -163,7 +174,7 @@ public class ExpOperationServiceImpl implements ExpOperationService {
163 return memberDTO; 174 return memberDTO;
164 } 175 }
165 176
166 private Integer compareExp(long newExp, MemberLevelDTO memberLevelDTO,MemberDTO memberDTO) { 177 private Integer compareExp(long newExp, MemberLevelDTO memberLevelDTO, Integer oldMemberLevel) {
167 if (Objects.nonNull(memberLevelDTO)) { 178 if (Objects.nonNull(memberLevelDTO)) {
168 Long nextLevelExp = memberLevelDTO.getExpValue(); 179 Long nextLevelExp = memberLevelDTO.getExpValue();
169 if (Objects.nonNull(nextLevelExp) && nextLevelExp > 0) 180 if (Objects.nonNull(nextLevelExp) && nextLevelExp > 0)
...@@ -171,11 +182,11 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -171,11 +182,11 @@ public class ExpOperationServiceImpl implements ExpOperationService {
171 return memberLevelDTO.getLevel(); 182 return memberLevelDTO.getLevel();
172 } 183 }
173 } 184 }
174 return memberDTO.getLevel(); 185 return oldMemberLevel;
175 } 186 }
176 187
177 private MemberLevelDTO getNextLevelExp(Integer i,Integer status) { 188 private MemberLevelDTO getNextLevelExp(Integer i,Integer status) {
178 List<MemberLevelDTO> memberLevelDTOList = this.memberLevelService.findLevelAndStatus(i,status); 189 List<MemberLevelDTO> memberLevelDTOList = this.memberLevelService.findLevelAndStatus(i, status);
179 if (!CollectionUtils.isEmpty(memberLevelDTOList)) { 190 if (!CollectionUtils.isEmpty(memberLevelDTOList)) {
180 return memberLevelDTOList.get(0); 191 return memberLevelDTOList.get(0);
181 } 192 }
...@@ -217,8 +228,9 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -217,8 +228,9 @@ public class ExpOperationServiceImpl implements ExpOperationService {
217 } 228 }
218 this.expDetailService.create(expDetail); 229 this.expDetailService.create(expDetail);
219 230
220 231 /*this.threadPoolTaskExecutor.submit(() -> {
221 ((ExpOperationServiceImpl) AopContext.currentProxy()).asyncExpDetail(expDetail); 232 ((ExpOperationServiceImpl) AopContext.currentProxy()).asyncExpDetail(expDetail);
233 });*/
222 } 234 }
223 235
224 } 236 }
......
...@@ -52,22 +52,19 @@ import java.util.stream.Collectors; ...@@ -52,22 +52,19 @@ import java.util.stream.Collectors;
52 public class PointsOperationServiceImpl implements PointsOperationService { 52 public class PointsOperationServiceImpl implements PointsOperationService {
53 53
54 @Autowired 54 @Autowired
55 private PointsService pointsService;
56 @Autowired
57 private PointsDetailService pointsDetailService; 55 private PointsDetailService pointsDetailService;
58 @Autowired 56 @Autowired
59 private PointsAvailableService pointsAvailableService; 57 private PointsAvailableService pointsAvailableService;
60 @Autowired 58 @Autowired
61 private PointsDetailHistoryService pointsDetailHistoryService;
62 @Autowired
63 private MemberOperationService memberOperationService; 59 private MemberOperationService memberOperationService;
64 @Autowired 60 @Autowired
65 private MemberService memberService; 61 private MemberService memberService;
66 62
67 @Autowired 63 @Autowired
68 private RedisUtils redisUtils; 64 private ThreadPoolTaskExecutor threadPoolTaskExecutor;
65
69 @Autowired 66 @Autowired
70 ThreadPoolTaskExecutor threadPoolTaskExecutor; 67 private RedisUtils redisUtils;
71 68
72 // 过期阈值 30天 69 // 过期阈值 30天
73 private static final Integer EXPIRE_FACTOR = 30; 70 private static final Integer EXPIRE_FACTOR = 30;
...@@ -200,6 +197,7 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -200,6 +197,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
200 long currentPoints) { 197 long currentPoints) {
201 // 兑换的积分 198 // 兑换的积分
202 Long points = tempPoints.getPoints(); 199 Long points = tempPoints.getPoints();
200 String memberCode = tempPoints.getMemberCode();
203 201
204 List<PointsAvailableDTO> pointsAvailableDTOS = customAvailablePointsMap.get(DELETE_AVAILABLE_POINTS); 202 List<PointsAvailableDTO> pointsAvailableDTOS = customAvailablePointsMap.get(DELETE_AVAILABLE_POINTS);
205 203
...@@ -211,9 +209,9 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -211,9 +209,9 @@ public class PointsOperationServiceImpl implements PointsOperationService {
211 BeanUtils.copyProperties(pointsAvailableDTO, _tempPoints); 209 BeanUtils.copyProperties(pointsAvailableDTO, _tempPoints);
212 BeanUtils.copyProperties(tempPoints, _tempPoints); 210 BeanUtils.copyProperties(tempPoints, _tempPoints);
213 _tempPoints.setPoints(-(Math.abs(points))); 211 _tempPoints.setPoints(-(Math.abs(points)));
214 Long totalPoints = this.calculateTotalPoints(_tempPoints, currentPoints); 212 Long totalPoints = currentPoints + tempPoints.getPoints();
215 213
216 this.doInsertTrPointsDetail(memberId, _tempPoints, currentPoints, totalPoints); 214 this.doInsertTrPointsDetail(memberId, memberCode, _tempPoints, currentPoints, totalPoints);
217 } 215 }
218 } 216 }
219 217
...@@ -429,39 +427,47 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -429,39 +427,47 @@ public class PointsOperationServiceImpl implements PointsOperationService {
429 * 427 *
430 * @param tempPoints 积分 428 * @param tempPoints 积分
431 */ 429 */
432
433 private void refresh(TempPoints tempPoints) { 430 private void refresh(TempPoints tempPoints) {
434 Long memberId = tempPoints.getMemberId(); 431 Long memberId = tempPoints.getMemberId();
432 String memberCode = tempPoints.getMemberCode();
435 log.info("----------->> 会员id ===>>>>" + memberId); 433 log.info("----------->> 会员id ===>>>>" + memberId);
436 try { 434 try {
437 this.redisUtils.doLock(RedisKeyConstants.updateCachePointsByMemberId + memberId.toString()); 435 this.redisUtils.doLock(RedisKeyConstants.updateCachePointsByMemberId + memberId.toString());
438 // 1.可用总积分 436 // 1.可用总积分
437 long l = System.currentTimeMillis();
439 Long currentPoints = this.findAvailablePointsByMemberId(memberId); 438 Long currentPoints = this.findAvailablePointsByMemberId(memberId);
440 log.info("----------->> 获取会员当前可用总积分 --->>>> {}", currentPoints); 439 long l1 = System.currentTimeMillis();
440 // log.info("查询大屏信息,总耗时 ==>> {}", (l1-l));
441 log.info("----------->> 获取会员当前可用总积分 --->>>> {}, 总耗时 ==>> {}", currentPoints, (l1-l));
441 442
442 // 2.计算总积分 443 // 2.计算总积分
443 Long totalPoints = this.calculateTotalPoints(tempPoints, currentPoints); 444 Long totalPoints = currentPoints + tempPoints.getPoints();
444 log.info("----------->> 总积分(可用总积分+获得的积分) --->>> {}", totalPoints); 445 log.info("----------->> 总积分(可用总积分+获得的积分) --->>> {}", totalPoints);
445 446
446 // 3.添加积分明细 447 // 3.添加积分明细
447 this.doInsertTrPointsDetail(memberId, tempPoints, currentPoints, totalPoints); 448 long l2 = System.currentTimeMillis();
448 log.info("----------->> 添加积分明细 --->>> "); 449 this.doInsertTrPointsDetail(memberId, memberCode, tempPoints, currentPoints, totalPoints);
450 long l3 = System.currentTimeMillis();
451 log.info("----------->> 添加积分明细 --->>> 总耗时 ==>> {}", (l3-l2));
449 452
450 // 4.添加可用积分 453 // 4.添加可用积分
454 long l4 = System.currentTimeMillis();
451 this.doInsertTrPointsAvailable(tempPoints); 455 this.doInsertTrPointsAvailable(tempPoints);
452 log.info("----------->> 添加可用积分 -->>> "); 456 long l5 = System.currentTimeMillis();
457 log.info("----------->> 添加可用积分 -->>> 总耗时 ==>> {}", (l5-l4));
453 458
454 // 5.即将过期的积分 459 // 5.即将过期的积分
460 // TODO 查询的时候再更新过期积分
455 long soonExpirePoints = this.getSoonExpirePoints(memberId, tempPoints); 461 long soonExpirePoints = this.getSoonExpirePoints(memberId, tempPoints);
456 log.info("----------->> 即将过期的积分 ------->>>>> {}", soonExpirePoints); 462 log.info("----------->> 即将过期的积分 ------->>>>> {}", soonExpirePoints);
457 463
458 // 6.更新会员的总积分 464 // 6.更新会员的总积分
459 log.info("----------->> 更新会员的总积分 ------->>>>> 总积分--->>> {}", totalPoints); 465 long l6 = System.currentTimeMillis();
460 this.freshMemberCurrentPoints(memberId, totalPoints, soonExpirePoints); 466 this.freshMemberCurrentPoints(memberId, totalPoints, soonExpirePoints);
461 467 long l7 = System.currentTimeMillis();
468 log.info("----------->> 更新会员的总积分 ------->>>>> 总积分--->>> {} -->>总耗时 ==>> {}", totalPoints, (l7-l6));
462 } catch (Exception e) { 469 } catch (Exception e) {
463 e.printStackTrace(); 470 log.error(" ==>> {}", e.getMessage());
464 throw e;
465 } finally { 471 } finally {
466 this.redisUtils.doUnLock(RedisKeyConstants.updateCachePointsByMemberId + memberId.toString()); 472 this.redisUtils.doUnLock(RedisKeyConstants.updateCachePointsByMemberId + memberId.toString());
467 } 473 }
...@@ -477,7 +483,7 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -477,7 +483,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
477 // 获取的积分 483 // 获取的积分
478 Long rewardPoints = tempPoints.getPoints(); 484 Long rewardPoints = tempPoints.getPoints();
479 // 总积分 485 // 总积分
480 Long totalPoints = currentPoints + rewardPoints; 486 Long totalPoints = currentPoints + tempPoints.getPoints();
481 return totalPoints; 487 return totalPoints;
482 } 488 }
483 489
...@@ -514,7 +520,7 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -514,7 +520,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
514 */ 520 */
515 private void freshMemberCurrentPoints(Long memberId, Long currentPoints, long duePoints) { 521 private void freshMemberCurrentPoints(Long memberId, Long currentPoints, long duePoints) {
516 522
517 MemberDTO memberDTO = this.findMemberByMemberId(memberId); 523 MemberDTO memberDTO = this.memberService.findById(memberId);
518 524
519 Member member = new Member(); 525 Member member = new Member();
520 member.setId(memberDTO.getId()); 526 member.setId(memberDTO.getId());
...@@ -525,17 +531,14 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -525,17 +531,14 @@ public class PointsOperationServiceImpl implements PointsOperationService {
525 try { 531 try {
526 this.memberOperationService.doUpdateMemberPoints(member); 532 this.memberOperationService.doUpdateMemberPoints(member);
527 533
528 ((PointsOperationServiceImpl) AopContext.currentProxy()).asyncMemberPoint(member); 534 /*this.threadPoolTaskExecutor.submit(() -> {
535 ((PointsOperationServiceImpl) AopContext.currentProxy()).asyncMemberPoint(member);
536 });*/
529 } catch (Exception e){ 537 } catch (Exception e){
530 log.error("同步会员积分异常,"+e.getMessage()); 538 log.error("同步会员积分异常,"+e.getMessage());
531 } 539 }
532 } 540 }
533 541
534 private MemberDTO findMemberByMemberId(Long memberId) {
535 MemberDTO memberDTO = this.memberService.findById(memberId);
536 return memberDTO;
537 }
538
539 /** 542 /**
540 * 更新可用积分表 543 * 更新可用积分表
541 * @param tempPoints 544 * @param tempPoints
...@@ -554,8 +557,9 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -554,8 +557,9 @@ public class PointsOperationServiceImpl implements PointsOperationService {
554 } 557 }
555 558
556 this.pointsAvailableService.create4Custom(pointsAvailable); 559 this.pointsAvailableService.create4Custom(pointsAvailable);
557 560 /*this.threadPoolTaskExecutor.submit(() -> {
558 ((PointsOperationServiceImpl) AopContext.currentProxy()).asyncPointsAvailable(pointsAvailable); 561 ((PointsOperationServiceImpl) AopContext.currentProxy()).asyncPointsAvailable(pointsAvailable);
562 });*/
559 } 563 }
560 564
561 /** 565 /**
...@@ -564,15 +568,13 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -564,15 +568,13 @@ public class PointsOperationServiceImpl implements PointsOperationService {
564 * @param tempPoints 积分 568 * @param tempPoints 积分
565 * @return Integer 总积分 569 * @return Integer 总积分
566 */ 570 */
567 private void doInsertTrPointsDetail(Long memberId, TempPoints tempPoints, Long currentPoints, Long totalPoints){ 571 private void doInsertTrPointsDetail(Long memberId, String memberCode, TempPoints tempPoints, Long currentPoints, Long totalPoints){
568
569 MemberDTO memberDTO = this.memberService.findById(memberId);
570 572
571 PointsDetail pointsDetail = new PointsDetail(); 573 PointsDetail pointsDetail = new PointsDetail();
572 BeanUtils.copyProperties(tempPoints, pointsDetail); 574 BeanUtils.copyProperties(tempPoints, pointsDetail);
573 pointsDetail.setId(null); 575 pointsDetail.setId(null);
574 pointsDetail.setMemberId(memberId); 576 pointsDetail.setMemberId(memberId);
575 pointsDetail.setMemberCode(memberDTO.getCode()); 577 pointsDetail.setMemberCode(memberCode);
576 pointsDetail.setCode(String.valueOf(IdWorker.generator())); 578 pointsDetail.setCode(String.valueOf(IdWorker.generator()));
577 pointsDetail.setPoints(tempPoints.getPoints()); 579 pointsDetail.setPoints(tempPoints.getPoints());
578 pointsDetail.setOriginalPoints(currentPoints); 580 pointsDetail.setOriginalPoints(currentPoints);
...@@ -587,7 +589,9 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -587,7 +589,9 @@ public class PointsOperationServiceImpl implements PointsOperationService {
587 // 保存积分流水 589 // 保存积分流水
588 this.pointsDetailService.create4Custom(pointsDetail); 590 this.pointsDetailService.create4Custom(pointsDetail);
589 591
590 ((PointsOperationServiceImpl) AopContext.currentProxy()).asyncPointsDetail(pointsDetail); 592 /*this.threadPoolTaskExecutor.submit(() -> {
593 ((PointsOperationServiceImpl) AopContext.currentProxy()).asyncPointsDetail(pointsDetail);
594 });*/
591 } 595 }
592 596
593 } 597 }
......
...@@ -21,8 +21,12 @@ import org.springframework.stereotype.Service; ...@@ -21,8 +21,12 @@ import org.springframework.stereotype.Service;
21 import org.springframework.util.CollectionUtils; 21 import org.springframework.util.CollectionUtils;
22 import org.springframework.util.StringUtils; 22 import org.springframework.util.StringUtils;
23 23
24 import javax.annotation.Resource;
24 import java.sql.Timestamp; 25 import java.sql.Timestamp;
25 import java.util.*; 26 import java.util.*;
27 import java.util.concurrent.ExecutionException;
28 import java.util.concurrent.Future;
29 import java.util.concurrent.ThreadPoolExecutor;
26 30
27 /** 31 /**
28 * 权益处理 32 * 权益处理
...@@ -71,20 +75,23 @@ public class RightsOperationServiceImpl implements RightsOperationService { ...@@ -71,20 +75,23 @@ public class RightsOperationServiceImpl implements RightsOperationService {
71 * @param tempRightsMap 权益类型 75 * @param tempRightsMap 权益类型
72 */ 76 */
73 @Override 77 @Override
74 public void grantRights(Map<RightType, Object> tempRightsMap) { 78 public Integer grantRights(Map<RightType, Object> tempRightsMap) {
75 79
76 this.threadPoolTaskExecutor.execute(()-> { 80 this.threadPoolTaskExecutor.execute(()-> {
77 // 2.创建权益历史对象 81 // 2.创建权益历史对象
78 List<RightsHistory> rightsList = this.getRightHistory(tempRightsMap); 82 List<RightsHistory> rightsList = this.getRightHistory(tempRightsMap);
79 if (!CollectionUtils.isEmpty(rightsList)) { 83 if (!CollectionUtils.isEmpty(rightsList)) {
80 log.info("异步保存权益领取历史开始 ==>> [{}]", rightsList); 84 // log.info("异步保存权益领取历史开始 ==>> [{}]", rightsList);
85 long l = System.currentTimeMillis();
81 // 3.保存权益历史 86 // 3.保存权益历史
82 this.doInsertTrRightHistory(rightsList); 87 this.doInsertTrRightHistory(rightsList);
88 long l1 = System.currentTimeMillis();
89 log.info("保存权益历史,总耗时 ==>> {}", l1-l);
83 } 90 }
84 }); 91 });
85 92
86 // 1.权益下发 93 // 1.权益下发
87 this.refresh(tempRightsMap); 94 return this.refresh(tempRightsMap);
88 } 95 }
89 96
90 /** 97 /**
...@@ -141,28 +148,29 @@ public class RightsOperationServiceImpl implements RightsOperationService { ...@@ -141,28 +148,29 @@ public class RightsOperationServiceImpl implements RightsOperationService {
141 this.couponOperationService.grantCouponThroughTempCoupon(tempCouponList); 148 this.couponOperationService.grantCouponThroughTempCoupon(tempCouponList);
142 } 149 }
143 150
151
144 /** 152 /**
145 * 权益发放 153 * 权益发放
146 * @param tempRightsMap 154 * @param tempRightsMap
147 */ 155 */
148 private void refresh(Map<RightType, Object> tempRightsMap) { 156 private Integer refresh(Map<RightType, Object> tempRightsMap) {
149 157
150 this.threadPoolTaskExecutor.execute(() -> { 158 // Future<?> submit = this.threadPoolTaskExecutor.submit(() -> {
151 List<TempPoints> tempPointsList = (List<TempPoints>) tempRightsMap.get(RightType.POINTS); 159 List<TempPoints> tempPointsList = (List<TempPoints>) tempRightsMap.get(RightType.POINTS);
152 if (!CollectionUtils.isEmpty(tempPointsList)) { 160 if (!CollectionUtils.isEmpty(tempPointsList)) {
153 log.info("发放积分开始 ==>> [{}]", tempPointsList); 161 // log.info("发放积分开始 ==>> [{}]", tempPointsList);
154 long l = System.currentTimeMillis(); 162 long l = System.currentTimeMillis();
155 // 积分 163 // 积分
156 this.grantPoint(tempPointsList); 164 this.grantPoint(tempPointsList);
157 long l2 = System.currentTimeMillis(); 165 long l2 = System.currentTimeMillis();
158 log.info("发放积分结束,总耗时 ==>> {}", (l2 - l)); 166 log.info("发放积分结束,总耗时 ==>> {}", (l2 - l));
159 } 167 }
160 }); 168 // });
161 169
162 this.threadPoolTaskExecutor.execute(()-> { 170 this.threadPoolTaskExecutor.submit(() -> {
163 List<TempExp> tempExpList = (List<TempExp>) tempRightsMap.get(RightType.EXP); 171 List<TempExp> tempExpList = (List<TempExp>) tempRightsMap.get(RightType.EXP);
164 if (!CollectionUtils.isEmpty(tempExpList)) { 172 if (!CollectionUtils.isEmpty(tempExpList)) {
165 log.info("发放成长值开始 ==>> [{}]", tempExpList); 173 // log.info("发放成长值开始 ==>> [{}]", tempExpList);
166 long l = System.currentTimeMillis(); 174 long l = System.currentTimeMillis();
167 // 成长值 175 // 成长值
168 this.grantExp(tempExpList); 176 this.grantExp(tempExpList);
...@@ -171,25 +179,30 @@ public class RightsOperationServiceImpl implements RightsOperationService { ...@@ -171,25 +179,30 @@ public class RightsOperationServiceImpl implements RightsOperationService {
171 } 179 }
172 }); 180 });
173 181
174 this.threadPoolTaskExecutor.execute(()-> { 182 // this.threadPoolTaskExecutor.submit(() -> {
175 List<TempCoupon> tempCouponList = (List<TempCoupon>) tempRightsMap.get(RightType.COUPON); 183 /*List<TempCoupon> tempCouponList = (List<TempCoupon>) tempRightsMap.get(RightType.COUPON);
176 if (!CollectionUtils.isEmpty(tempCouponList)) { 184 if (!CollectionUtils.isEmpty(tempCouponList)) {
177 log.info("发放优惠券开始 ==>> [{}]", tempCouponList); 185 // log.info("发放优惠券开始 ==>> [{}]", tempCouponList);
178 long l = System.currentTimeMillis(); 186 long l = System.currentTimeMillis();
179 // 优惠券 187 // 优惠券
180 this.grantCoupon(tempCouponList); 188 this.grantCoupon(tempCouponList);
181 long l2 = System.currentTimeMillis(); 189 long l2 = System.currentTimeMillis();
182 log.info("发放优惠券结束,总耗时 ==>> {}", (l2 - l)); 190 log.info("发放优惠券结束,总耗时 ==>> {}", (l2 - l));
183 } 191 }*/
184 }); 192 // });
185 193
186 // 其他权益 194 // 其他权益
187 this.threadPoolTaskExecutor.execute(()-> { 195 // Future<?> submit = this.threadPoolTaskExecutor.submit(() -> {
188 log.info("发放其他权益开始 ==>> [{}]", tempRightsMap); 196 // log.info("发放其他权益开始 ==>> [{}]", tempRightsMap);
197 long l = System.currentTimeMillis();
189 this.grantOtherRight(tempRightsMap); 198 this.grantOtherRight(tempRightsMap);
190 log.info("发放其他权益结束 ==>> [{}]", tempRightsMap); 199 long l2 = System.currentTimeMillis();
191 }); 200 log.info("发放其他权益结束 ==>> 总耗时 ==>> {}", l-l2);
201 // });
202
203
192 204
205 return tempRightsMap.keySet().size();
193 } 206 }
194 207
195 private void grantOtherRight(Map<RightType, Object> tempRightsMap) { 208 private void grantOtherRight(Map<RightType, Object> tempRightsMap) {
......
...@@ -10,11 +10,13 @@ import com.topdraw.business.module.member.domain.Member; ...@@ -10,11 +10,13 @@ import com.topdraw.business.module.member.domain.Member;
10 import com.topdraw.business.module.member.domain.MemberBuilder; 10 import com.topdraw.business.module.member.domain.MemberBuilder;
11 import com.topdraw.business.module.member.service.MemberService; 11 import com.topdraw.business.module.member.service.MemberService;
12 import com.topdraw.business.module.member.service.dto.MemberDTO; 12 import com.topdraw.business.module.member.service.dto.MemberDTO;
13 import com.topdraw.business.module.member.service.dto.MemberSimpleDTO;
13 import com.topdraw.business.module.user.iptv.domain.UserConstant; 14 import com.topdraw.business.module.user.iptv.domain.UserConstant;
14 import com.topdraw.business.module.user.iptv.domain.UserTv; 15 import com.topdraw.business.module.user.iptv.domain.UserTv;
15 import com.topdraw.business.module.user.iptv.domain.UserTvBuilder; 16 import com.topdraw.business.module.user.iptv.domain.UserTvBuilder;
16 import com.topdraw.business.module.user.iptv.service.UserTvService; 17 import com.topdraw.business.module.user.iptv.service.UserTvService;
17 import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO; 18 import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO;
19 import com.topdraw.business.module.user.iptv.service.dto.UserTvSimpleDTO;
18 import com.topdraw.business.module.user.weixin.collection.domain.UserCollection; 20 import com.topdraw.business.module.user.weixin.collection.domain.UserCollection;
19 import com.topdraw.business.module.user.weixin.collection.domain.UserCollectionDetail; 21 import com.topdraw.business.module.user.weixin.collection.domain.UserCollectionDetail;
20 import com.topdraw.business.module.user.weixin.collection.repository.UserCollectionDetailRepository; 22 import com.topdraw.business.module.user.weixin.collection.repository.UserCollectionDetailRepository;
...@@ -34,6 +36,7 @@ import com.topdraw.business.process.service.dto.MemberAndUserTvDTO; ...@@ -34,6 +36,7 @@ import com.topdraw.business.process.service.dto.MemberAndUserTvDTO;
34 import com.topdraw.business.process.service.dto.MemberAndWeixinUserDTO; 36 import com.topdraw.business.process.service.dto.MemberAndWeixinUserDTO;
35 import com.topdraw.business.process.service.mapper.CollectionMq2DetailMapper; 37 import com.topdraw.business.process.service.mapper.CollectionMq2DetailMapper;
36 import com.topdraw.config.LocalConstants; 38 import com.topdraw.config.LocalConstants;
39 import com.topdraw.config.RedisKeyConstants;
37 import com.topdraw.config.RedisKeyUtil; 40 import com.topdraw.config.RedisKeyUtil;
38 import com.topdraw.exception.BadRequestException; 41 import com.topdraw.exception.BadRequestException;
39 import com.topdraw.exception.EntityNotFoundException; 42 import com.topdraw.exception.EntityNotFoundException;
...@@ -49,6 +52,7 @@ import org.springframework.aop.framework.AopContext; ...@@ -49,6 +52,7 @@ import org.springframework.aop.framework.AopContext;
49 import org.springframework.beans.BeanUtils; 52 import org.springframework.beans.BeanUtils;
50 import org.springframework.beans.factory.annotation.Autowired; 53 import org.springframework.beans.factory.annotation.Autowired;
51 import org.springframework.beans.factory.annotation.Value; 54 import org.springframework.beans.factory.annotation.Value;
55 import org.springframework.cache.annotation.CachePut;
52 import org.springframework.data.domain.PageRequest; 56 import org.springframework.data.domain.PageRequest;
53 import org.springframework.data.domain.Sort; 57 import org.springframework.data.domain.Sort;
54 import org.springframework.stereotype.Service; 58 import org.springframework.stereotype.Service;
...@@ -119,8 +123,9 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -119,8 +123,9 @@ public class UserOperationServiceImpl implements UserOperationService {
119 UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount); 123 UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount);
120 124
121 // 无账号 125 // 无账号
122 if (Objects.isNull(userTvDTO)) { 126 if (Objects.isNull(userTvDTO.getId())) {
123 127
128 // 会员昵称默认采用大屏账号,昵称通过base64加密与小屏保持一致
124 String platformAccountEncode = Base64Utils.encodeToString(platformAccount.getBytes()); 129 String platformAccountEncode = Base64Utils.encodeToString(platformAccount.getBytes());
125 130
126 // x_member 131 // x_member
...@@ -133,14 +138,15 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -133,14 +138,15 @@ public class UserOperationServiceImpl implements UserOperationService {
133 138
134 UserTv userTv = UserTvBuilder.build(memberDTO.getId(), memberDTO.getCode(), resources); 139 UserTv userTv = UserTvBuilder.build(memberDTO.getId(), memberDTO.getCode(), resources);
135 // 创建大屏账户 140 // 创建大屏账户
136 UserTvDTO tvUserDTO = this.createTvUser(userTv, memberDTO.getId(), memberDTO.getCode()); 141 UserTvDTO _tvUserDTO = this.createTvUser(userTv, memberDTO.getId(), memberDTO.getCode());
137 142
138 ((UserOperationServiceImpl)AopContext.currentProxy()).asyncMemberAndUserTv4Iptv(new MemberAndUserTvDTO(memberDTO, tvUserDTO)); 143 ((UserOperationServiceImpl)AopContext.currentProxy()).asyncMemberAndUserTv4Iptv(new MemberAndUserTvDTO(memberDTO, _tvUserDTO));
139 144
140 return tvUserDTO; 145 return _tvUserDTO;
141 146
142 } 147 }
143 148
149 log.error("保存大屏账号信息异常,无法创建大屏账号对应的会员,platoformAccount ==> {}", platformAccount);
144 throw new EntityNotFoundException(MemberDTO.class, "code", GlobeExceptionMsg.MEMBER_ID_IS_NULL); 150 throw new EntityNotFoundException(MemberDTO.class, "code", GlobeExceptionMsg.MEMBER_ID_IS_NULL);
145 151
146 // 有账号 152 // 有账号
...@@ -165,10 +171,10 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -165,10 +171,10 @@ public class UserOperationServiceImpl implements UserOperationService {
165 UserTv userTv = new UserTv(); 171 UserTv userTv = new UserTv();
166 BeanUtils.copyProperties(userTvDTO, userTv); 172 BeanUtils.copyProperties(userTvDTO, userTv);
167 173
168 UserTvDTO userTvDTO1 = this.updateUserTvUnsyncIptv(userTv); 174 UserTvDTO _userTvDTO = this.userTvService.update(userTv);
169 ((UserOperationServiceImpl)AopContext.currentProxy()).asyncMemberAndUserTv4Iptv(new MemberAndUserTvDTO(memberDTO, userTvDTO1)); 175 ((UserOperationServiceImpl)AopContext.currentProxy()).asyncMemberAndUserTv4Iptv(new MemberAndUserTvDTO(memberDTO, _userTvDTO));
170 176
171 return userTvDTO1; 177 return _userTvDTO;
172 } 178 }
173 179
174 } 180 }
...@@ -1065,6 +1071,13 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -1065,6 +1071,13 @@ public class UserOperationServiceImpl implements UserOperationService {
1065 // 同步至iptv 1071 // 同步至iptv
1066 ((UserOperationServiceImpl)AopContext.currentProxy()).asyncMinaBind(new MemberAndUserTvDTO(memberDTO, userTvDTO)); 1072 ((UserOperationServiceImpl)AopContext.currentProxy()).asyncMinaBind(new MemberAndUserTvDTO(memberDTO, userTvDTO));
1067 1073
1074 // 修改缓存中MemberSimple的大屏主账号信息,因为执行任务之前会去检查主会员d
1075 UserTvSimpleDTO userTvSimpleDTO = this.userTvService.findSimpleByPlatformAccount(platformAccount);
1076 if (Objects.nonNull(userTvDTO)) {
1077 userTvSimpleDTO.setPriorityMemberCode(memberDTO.getCode());
1078 HashMap hashMap = JSONObject.parseObject(userTvSimpleDTO.toString(), HashMap.class);
1079 this.redisUtils.set(RedisKeyConstants.cacheVisUserByPlatformAccount + "::" + platformAccount, hashMap);
1080 }
1068 return userTvDTO; 1081 return userTvDTO;
1069 } 1082 }
1070 1083
...@@ -1088,15 +1101,6 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -1088,15 +1101,6 @@ public class UserOperationServiceImpl implements UserOperationService {
1088 } 1101 }
1089 1102
1090 /** 1103 /**
1091 *
1092 * @param userTv 大屏账号
1093 * @return UserTvDTO
1094 */
1095 private UserTvDTO updateUserTvUnsyncIptv(UserTv userTv){
1096 return this.userTvService.update(userTv);
1097 }
1098
1099 /**
1100 * 重置主账号 1104 * 重置主账号
1101 * @param memberDTO 会员code 1105 * @param memberDTO 会员code
1102 * @param userTvDTO 大屏id 1106 * @param userTvDTO 大屏id
...@@ -1242,8 +1246,14 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -1242,8 +1246,14 @@ public class UserOperationServiceImpl implements UserOperationService {
1242 * @param member 会员信息 1246 * @param member 会员信息
1243 * @return MemberDTO 1247 * @return MemberDTO
1244 */ 1248 */
1245 private MemberDTO createMember(Member member){ 1249 public MemberDTO createMember(Member member){
1246 return this.memberService.create(member); 1250 MemberDTO memberDTO = this.memberService.create(member);
1251 if (Objects.nonNull(memberDTO.getId())) {
1252 MemberSimpleDTO memberSimpleDTO = new MemberSimpleDTO();
1253 BeanUtils.copyProperties(memberDTO, memberSimpleDTO);
1254 this.redisUtils.set(RedisKeyConstants.cacheMemberSimpleById+"::"+memberDTO.getId(), memberSimpleDTO);
1255 }
1256 return memberDTO;
1247 } 1257 }
1248 1258
1249 /** 1259 /**
......
...@@ -10,19 +10,49 @@ package com.topdraw.config; ...@@ -10,19 +10,49 @@ package com.topdraw.config;
10 * @since : modified in 2022/6/18 13:25 10 * @since : modified in 2022/6/18 13:25
11 */ 11 */
12 public interface RedisKeyConstants { 12 public interface RedisKeyConstants {
13 13 // 全量会员信息
14 String cacheMemberById = "uce::member::id"; 14 String cacheMemberById = "uce::member::id";
15 // 任务处理时会员信息
16 String cacheMemberSimpleById = "uce::memberSimple::id";
17 // 会员全量信息
15 String cacheMemberByCode = "uce::member::code"; 18 String cacheMemberByCode = "uce::member::code";
16 String updateCacheMemberById = "uce::updateMember::id";
17 19
20 // 修改会员积分时的分布式锁
18 String updateCachePointsByMemberId = "uce::updatePoints::memberId"; 21 String updateCachePointsByMemberId = "uce::updatePoints::memberId";
22 // 修改会员成长值时的分布式锁
19 String updateCacheExpByMemberId = "uce::updateExp::memberId"; 23 String updateCacheExpByMemberId = "uce::updateExp::memberId";
24 // 修改会员优惠券时的分布式锁
20 String updateCacheCouponByMemberId = "uce::updateCoupon::memberId"; 25 String updateCacheCouponByMemberId = "uce::updateCoupon::memberId";
21 26
27 // 全量大屏信息
22 String cacheUserTvByPlatformAccount = "uce::userTv::platformAccount"; 28 String cacheUserTvByPlatformAccount = "uce::userTv::platformAccount";
29 String cacheVisUserByPlatformAccount = "uus::visUser::platformAccount";
30 // 会员已完成的任务进度
23 String cacheTaskProcessByMemberId = "uce::taskProcess::memberId"; 31 String cacheTaskProcessByMemberId = "uce::taskProcess::memberId";
24 String cacheTaskByTaskTemplateId = "uce::task::taskTemplateId"; 32 // 任务模板类型对应的全量任务
25 String cacheTaskByEvent = "uce::task::event"; 33 String cacheTaskByEvent = "uce::task::event";
34 // 全量优惠券信息
26 String cacheCouponById = "uce::coupon::id"; 35 String cacheCouponById = "uce::coupon::id";
36
37 // 权益全量信息
27 String cacheRightById = "uce::right::id"; 38 String cacheRightById = "uce::right::id";
39
40 // 会员可以做的任务
41 String cacheTaskByEventAndMemberLevelAndVip = "uce::task::eventAndMemberLevelAndVip";
42
43 // 全量会员等级
44 String cacheMemberLevelByLevel = "uce::memberLevel::level";
45
46 // 今天处理完成任务数量
47 String cacheTodayFinishTaskCount = "uce::todayCount::memberId";
48 // 历史完成的任务数量
49 String cacheTotalFinishTaskCount = "uce::totalCount::memberId";
50
51
52
53 String CACHE_PLATFROMACCOUNT_PLAYDURATION = "uce::eventPlay::playduration";
54
55
56 String CACHE_TODAY_FINISH_COUNT = "todayFinishCount";
57 String CACHE_TOTAL_FINISH_COUNT = "totalFinishCount";
28 } 58 }
......
1 package com.topdraw.config;
2
3 import org.springframework.beans.factory.annotation.Value;
4 import org.springframework.context.annotation.Bean;
5 import org.springframework.context.annotation.Configuration;
6 import org.springframework.context.annotation.Primary;
7 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
8
9 import java.util.concurrent.ArrayBlockingQueue;
10 import java.util.concurrent.Executor;
11 import java.util.concurrent.ThreadPoolExecutor;
12 import java.util.concurrent.TimeUnit;
13
14 /**
15 * @author :
16 * @description:
17 * @function :
18 * @date :Created in 2022/6/22 11:06
19 * @version: :
20 * @modified By:
21 * @since : modified in 2022/6/22 11:06
22 */
23 @Configuration
24 public class TheadPoolTaskExecutorConfiguration {
25
26 @Value("${task.pool.core-pool-size}")
27 private Integer corePoolSize;
28 @Value("${task.pool.core-pool-size}")
29 private Integer maxPoolSize;
30 @Value("${task.pool.keep-alive-seconds}")
31 private Integer keepAliveSeconds;
32 @Value("${task.pool.queue-capacity}")
33 private Integer queueCapacity;
34
35 @Bean
36 @Primary
37 public ThreadPoolTaskExecutor getThreadPoolTaskExecutor() {
38 ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
39 threadPoolTaskExecutor.setCorePoolSize(corePoolSize);
40 threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize);
41 threadPoolTaskExecutor.setKeepAliveSeconds(keepAliveSeconds);
42 threadPoolTaskExecutor.setQueueCapacity(queueCapacity);
43 threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
44 threadPoolTaskExecutor.initialize();
45 return threadPoolTaskExecutor;
46 }
47
48
49 /*@Bean
50 public ThreadPoolExecutor getThreadPoolTaskExecutor() {
51 ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(queueCapacity);
52 ThreadPoolExecutor threadPoolTaskExecutor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveSeconds, TimeUnit.SECONDS, arrayBlockingQueue);
53 return threadPoolTaskExecutor;
54 }*/
55
56 }
1 package com.topdraw.config;
2
3
4 import com.fasterxml.jackson.annotation.JsonAutoDetect;
5 import com.fasterxml.jackson.annotation.PropertyAccessor;
6 import com.fasterxml.jackson.databind.ObjectMapper;
7 import lombok.extern.slf4j.Slf4j;
8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.cache.annotation.CachingConfigurerSupport;
10 import org.springframework.context.annotation.Bean;
11 import org.springframework.context.annotation.Configuration;
12 import org.springframework.context.annotation.Primary;
13 import org.springframework.data.redis.cache.RedisCacheConfiguration;
14 import org.springframework.data.redis.cache.RedisCacheManager;
15 import org.springframework.data.redis.connection.RedisConnectionFactory;
16 import org.springframework.data.redis.core.RedisTemplate;
17 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
18
19 import java.time.Duration;
20 import java.util.HashSet;
21 import java.util.Set;
22 import java.util.concurrent.ConcurrentHashMap;
23
24 /**
25 * @author :
26 * @description:
27 * @function :
28 * @date :Created in 2022/6/19 16:30
29 * @version: :
30 * @modified By:
31 * @since : modified in 2022/6/19 16:30
32 */
33 @Slf4j
34 @Configuration
35 public class UceRedisConfig {
36
37 @Autowired
38 private RedisConfig redisConfig;
39 @Autowired
40 private RedisConnectionFactory redisConnectionFactory;
41
42 @Bean(value = "uceRedisTemplate")
43 public RedisTemplate<Object, Object> uceRedisTemplate() {
44 return redisConfig.redisTemplate(redisConnectionFactory);
45 }
46 /**
47 * 自定义缓存管理器
48 */
49 @Bean(value = "uceCacheManagemer")
50 @Primary
51 public RedisCacheManager cacheManager(RedisConnectionFactory factory) {
52 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
53 Set<String> cacheNames = new HashSet<>();
54 // cacheNames.add("car");
55 // cacheNames.add(RedisKeyConstants.cacheTaskByEvent);
56 cacheNames.add(RedisKeyConstants.cacheTaskProcessByMemberId);
57 ConcurrentHashMap<String, RedisCacheConfiguration> configMap = new ConcurrentHashMap<>();
58 // configMap.put("car", config.entryTtl(Duration.ofMinutes(6L)));
59 configMap.put(RedisKeyConstants.cacheTaskProcessByMemberId, config.entryTtl(Duration.ofDays(1)));
60 // configMap.put(RedisKeyConstants.cacheTaskByEvent, config);
61
62 //需要先初始化缓存名称,再初始化其它的配置。
63 RedisCacheManager cacheManager = RedisCacheManager.builder(factory).
64 initialCacheNames(cacheNames).withInitialCacheConfigurations(configMap).build();
65 return cacheManager;
66 }
67 }
...@@ -6,7 +6,6 @@ import lombok.NoArgsConstructor; ...@@ -6,7 +6,6 @@ import lombok.NoArgsConstructor;
6 6
7 import javax.validation.constraints.NotNull; 7 import javax.validation.constraints.NotNull;
8 import java.io.Serializable; 8 import java.io.Serializable;
9 import java.sql.Timestamp;
10 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
11 10
12 /** 11 /**
...@@ -25,43 +24,8 @@ public class DataSyncMsg implements Serializable { ...@@ -25,43 +24,8 @@ public class DataSyncMsg implements Serializable {
25 //设备类型 1:大屏;2:小屏(微信)3.小屏(xx) 24 //设备类型 1:大屏;2:小屏(微信)3.小屏(xx)
26 private Integer deviceType; 25 private Integer deviceType;
27 // 发送时间 26 // 发送时间
28 private String time; 27 private LocalDateTime time;
29 // 消息体 28 // 消息体
30 private String msgData; 29 private String msgData;
31 30
32 /**
33 * 消息体
34 */
35 @Data
36 @AllArgsConstructor
37 @NoArgsConstructor
38 public static class MsgData {
39 /**备注*/
40 private String remarks;
41 // 会员id
42 private Long memberId;
43 // 账户id
44 private Long userId;
45 //用户对应的应用code
46 private String appCode;
47 // 会员code
48 private String memberCode;
49 // 账号id
50 private Long accountId;
51 // 订单Id
52 private Long orderId;
53 // 活动id
54 private Long activityId;
55 // 节目id
56 private Long mediaId;
57 // 产品id
58 private Long itemId;
59 // 模板参数
60 private String param;
61 // 描述
62 private String description;
63 // 大屏账号
64 private String platformAccount;
65 }
66
67 } 31 }
......
...@@ -5,7 +5,7 @@ spring: ...@@ -5,7 +5,7 @@ spring:
5 url: jdbc:log4jdbc:mysql://122.112.214.149:3306/tj_user_admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false 5 url: jdbc:log4jdbc:mysql://122.112.214.149:3306/tj_user_admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
6 username: root 6 username: root
7 password: root 7 password: root
8 # url: jdbc:log4jdbc:mysql://139.196.145.150:3306/ucs-small-sichuan?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false 8 # url: jdbc:log4jdbc:mysql://139.196.145.150:3306/ucs_admin_chongshu?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
9 # username: root 9 # username: root
10 # password: Tjlh@2021 10 # password: Tjlh@2021
11 11
...@@ -20,7 +20,7 @@ spring: ...@@ -20,7 +20,7 @@ spring:
20 # 最大连接数 20 # 最大连接数
21 max-active: 15 21 max-active: 15
22 # 获取连接超时时间 22 # 获取连接超时时间
23 max-wait: 5000 23 max-wait: 5000000
24 # 连接有效性检测时间 24 # 连接有效性检测时间
25 time-between-eviction-runs-millis: 90000 25 time-between-eviction-runs-millis: 90000
26 # 最大空闲时间 26 # 最大空闲时间
......
...@@ -25,13 +25,13 @@ spring: ...@@ -25,13 +25,13 @@ spring:
25 task: 25 task:
26 pool: 26 pool:
27 # 核心线程池大小 27 # 核心线程池大小
28 core-pool-size: 10 28 core-pool-size: 16
29 # 最大线程数 29 # 最大线程数
30 max-pool-size: 30 30 max-pool-size: 35
31 # 活跃时间 31 # 活跃时间
32 keep-alive-seconds: 60 32 keep-alive-seconds: 10
33 # 队列容量 33 # 队列容量
34 queue-capacity: 50 34 queue-capacity: 300
35 35
36 #登录图形验证码有效时间/分钟 36 #登录图形验证码有效时间/分钟
37 loginCode: 37 loginCode:
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
64 64
65 65
66 <!--监控sql日志输出 --> 66 <!--监控sql日志输出 -->
67 <logger name="jdbc.sqlonly" level="INFO" additivity="false"> 67 <logger name="jdbc.sqlonly" level="OFF" additivity="false">
68 <appender-ref ref="console" /> 68 <appender-ref ref="console" />
69 <appender-ref ref="info" /> 69 <appender-ref ref="info" />
70 </logger> 70 </logger>
......
...@@ -96,11 +96,12 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -96,11 +96,12 @@ public class TaskOperationControllerTest extends BaseTest {
96 public void play() { 96 public void play() {
97 try { 97 try {
98 String s = "{\"evt\":\"PLAY\",\"event\":8,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," + 98 String s = "{\"evt\":\"PLAY\",\"event\":8,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," +
99 "\"msgData\":{\"memberCode\":\"1537253277861699584\",\"param\":\"{\\\"playDuration\\\":60}\"}}"; 99 "\"msgData\":{\"platformAccount\":\"1537253277861699584\",\"param\":\"{\\\"playDuration\\\":60}\"}}";
100 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); 100 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
101 pointsQueryCriteria.setContent(s); 101 pointsQueryCriteria.setContent(s);
102 String s1 = JSON.toJSONString(pointsQueryCriteria); 102 String s1 = JSON.toJSONString(pointsQueryCriteria);
103 this.taskOperationController.dealTask(pointsQueryCriteria); 103 System.out.println(s1);
104 // this.taskOperationController.dealTask(pointsQueryCriteria);
104 } catch (Exception e) { 105 } catch (Exception e) {
105 e.printStackTrace(); 106 e.printStackTrace();
106 } 107 }
......
...@@ -2,6 +2,8 @@ package com.topdraw.test.business.process.service; ...@@ -2,6 +2,8 @@ package com.topdraw.test.business.process.service;
2 2
3 import com.alibaba.fastjson.JSONObject; 3 import com.alibaba.fastjson.JSONObject;
4 import com.topdraw.business.module.member.domain.Member; 4 import com.topdraw.business.module.member.domain.Member;
5 import com.topdraw.business.module.member.service.MemberService;
6 import com.topdraw.business.module.member.service.dto.MemberSimpleDTO;
5 import com.topdraw.business.process.service.member.MemberOperationService; 7 import com.topdraw.business.process.service.member.MemberOperationService;
6 import com.topdraw.BaseTest; 8 import com.topdraw.BaseTest;
7 import com.topdraw.util.IdWorker; 9 import com.topdraw.util.IdWorker;
...@@ -16,6 +18,15 @@ public class MemberOperationServiceTest extends BaseTest { ...@@ -16,6 +18,15 @@ public class MemberOperationServiceTest extends BaseTest {
16 @Autowired 18 @Autowired
17 MemberOperationService memberOperationService; 19 MemberOperationService memberOperationService;
18 20
21 @Autowired
22 MemberService memberService;
23
24 @Test
25 public void findMemberSimpleTest(){
26 MemberSimpleDTO memberSimpleDTO = this.memberService.findSimpleById(20718L);
27 System.out.println(memberSimpleDTO);
28 }
29
19 @Test 30 @Test
20 public void findById() { 31 public void findById() {
21 Long memberId = 2L; 32 Long memberId = 2L;
......
...@@ -19,11 +19,7 @@ public class TaskOperationServiceTest extends BaseTest { ...@@ -19,11 +19,7 @@ public class TaskOperationServiceTest extends BaseTest {
19 DataSyncMsg dataSyncMsg = new DataSyncMsg(); 19 DataSyncMsg dataSyncMsg = new DataSyncMsg();
20 // dataSyncMsg.setEntityType(EntityType.MEMBER); 20 // dataSyncMsg.setEntityType(EntityType.MEMBER);
21 dataSyncMsg.setEvt(EventType.LOGIN.name()); 21 dataSyncMsg.setEvt(EventType.LOGIN.name());
22 DataSyncMsg.MsgData msgData = new DataSyncMsg.MsgData();
23 msgData.setRemarks("remark");
24 msgData.setMemberId(memberId);
25 22
26 msgData.setAppCode("WEI_XIN_GOLD_PANDA");
27 // dataSyncMsg.setMsgData(msgData); 23 // dataSyncMsg.setMsgData(msgData);
28 24
29 String s = JSON.toJSONString(dataSyncMsg); 25 String s = JSON.toJSONString(dataSyncMsg);
......
...@@ -22,10 +22,10 @@ public class MqTest extends BaseTest { ...@@ -22,10 +22,10 @@ public class MqTest extends BaseTest {
22 DataSyncMsg dataSyncMsg = new DataSyncMsg(); 22 DataSyncMsg dataSyncMsg = new DataSyncMsg();
23 // dataSyncMsg.setEventType(EventType.LOGIN.name()); 23 // dataSyncMsg.setEventType(EventType.LOGIN.name());
24 dataSyncMsg.setEvt(EventType.LOGIN.name()); 24 dataSyncMsg.setEvt(EventType.LOGIN.name());
25 DataSyncMsg.MsgData msgData = new DataSyncMsg.MsgData(); 25 /* DataSyncMsg.MsgData msgData = new DataSyncMsg.MsgData();
26 msgData.setRemarks("remark"); 26 msgData.setRemarks("remark");
27 msgData.setMemberId(1L); 27 msgData.setMemberId(1L);
28 msgData.setAppCode("WEI_XIN_GOLD_PANDA"); 28 msgData.setAppCode("WEI_XIN_GOLD_PANDA");*/
29 // dataSyncMsg.setMsgData(msgData); 29 // dataSyncMsg.setMsgData(msgData);
30 String s = JSON.toJSONString(dataSyncMsg); 30 String s = JSON.toJSONString(dataSyncMsg);
31 amqpTemplate.convertAndSend( "uc.route.key.direct.event.aaa", s); 31 amqpTemplate.convertAndSend( "uc.route.key.direct.event.aaa", s);
......