Commit 59e60a40 59e60a40165e8e6b129b2cb32278c0fe18800d9c by xianghan@topdraw.cn

Merge branch 'feature/1.0.3' into develop

2 parents b90c4861 b211d033
Showing 20 changed files with 170 additions and 152 deletions
...@@ -121,7 +121,7 @@ public class Member implements Serializable { ...@@ -121,7 +121,7 @@ public class Member implements Serializable {
121 121
122 // 是否在黑名单 1:是;0否 122 // 是否在黑名单 1:是;0否
123 @Column(name = "black_status") 123 @Column(name = "black_status")
124 private Integer blackStatus; 124 private Long blackStatus;
125 125
126 public void copy(Member source){ 126 public void copy(Member source){
127 BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); 127 BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
......
...@@ -9,6 +9,7 @@ import com.topdraw.business.basicdata.member.level.service.dto.MemberLevelDTO; ...@@ -9,6 +9,7 @@ import com.topdraw.business.basicdata.member.level.service.dto.MemberLevelDTO;
9 import com.topdraw.business.basicdata.member.level.service.dto.MemberLevelQueryCriteria; 9 import com.topdraw.business.basicdata.member.level.service.dto.MemberLevelQueryCriteria;
10 import com.topdraw.business.basicdata.member.level.service.mapper.MemberLevelMapper; 10 import com.topdraw.business.basicdata.member.level.service.mapper.MemberLevelMapper;
11 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.cache.annotation.Cacheable;
12 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
13 import org.springframework.transaction.annotation.Propagation; 14 import org.springframework.transaction.annotation.Propagation;
14 import org.springframework.transaction.annotation.Transactional; 15 import org.springframework.transaction.annotation.Transactional;
...@@ -89,6 +90,7 @@ public class MemberLevelServiceImpl implements MemberLevelService { ...@@ -89,6 +90,7 @@ public class MemberLevelServiceImpl implements MemberLevelService {
89 : new MemberLevelDTO(); 90 : new MemberLevelDTO();
90 } 91 }
91 92
93 @Cacheable(cacheNames = "uc-member_level",key = "#level")
92 @Override 94 @Override
93 public List<MemberLevelDTO> findLevelAndStatus(Integer level, Integer status) { 95 public List<MemberLevelDTO> findLevelAndStatus(Integer level, Integer status) {
94 return MemberLevelMapper.toDto(MemberLevelRepository.findByLevelAndStatus(level,status)); 96 return MemberLevelMapper.toDto(MemberLevelRepository.findByLevelAndStatus(level,status));
......
...@@ -83,5 +83,5 @@ public class MemberDTO implements Serializable { ...@@ -83,5 +83,5 @@ public class MemberDTO implements Serializable {
83 private Timestamp updateTime; 83 private Timestamp updateTime;
84 84
85 // 是否在黑名单 1:是;0否 85 // 是否在黑名单 1:是;0否
86 private Integer blackStatus; 86 private Long blackStatus;
87 } 87 }
......
...@@ -19,13 +19,18 @@ import org.redisson.api.RLock; ...@@ -19,13 +19,18 @@ import org.redisson.api.RLock;
19 import org.redisson.api.RedissonClient; 19 import org.redisson.api.RedissonClient;
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.cache.annotation.CacheConfig;
22 import org.springframework.cache.annotation.Cacheable; 23 import org.springframework.cache.annotation.Cacheable;
23 import org.springframework.dao.EmptyResultDataAccessException; 24 import org.springframework.dao.EmptyResultDataAccessException;
24 import org.springframework.data.domain.Page; 25 import org.springframework.data.domain.Page;
25 import org.springframework.data.domain.Pageable; 26 import org.springframework.data.domain.Pageable;
26 import org.springframework.stereotype.Service; 27 import org.springframework.stereotype.Service;
28 import org.springframework.transaction.PlatformTransactionManager;
29 import org.springframework.transaction.TransactionDefinition;
30 import org.springframework.transaction.TransactionStatus;
27 import org.springframework.transaction.annotation.Propagation; 31 import org.springframework.transaction.annotation.Propagation;
28 import org.springframework.transaction.annotation.Transactional; 32 import org.springframework.transaction.annotation.Transactional;
33 import org.springframework.transaction.support.DefaultTransactionDefinition;
29 import org.springframework.util.Assert; 34 import org.springframework.util.Assert;
30 35
31 import java.util.List; 36 import java.util.List;
...@@ -38,6 +43,7 @@ import java.util.Objects; ...@@ -38,6 +43,7 @@ import java.util.Objects;
38 */ 43 */
39 @Service 44 @Service
40 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) 45 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
46 //@CacheConfig(cacheNames = "uc-member-info")
41 public class MemberServiceImpl implements MemberService { 47 public class MemberServiceImpl implements MemberService {
42 48
43 @Autowired 49 @Autowired
...@@ -61,12 +67,12 @@ public class MemberServiceImpl implements MemberService { ...@@ -61,12 +67,12 @@ public class MemberServiceImpl implements MemberService {
61 return memberMapper.toDto(memberRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); 67 return memberMapper.toDto(memberRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
62 } 68 }
63 69
64 // @Cacheable(cacheNames = "",key = "")
65 @Override 70 @Override
66 public MemberDTO findById(Long id) { 71 public MemberDTO findById(Long id) {
67 Member member = memberRepository.findById(id).orElseGet(Member::new); 72 Member member = memberRepository.findById(id).orElseGet(Member::new);
68 ValidationUtil.isNull(member.getId(),"Member","id",id); 73 ValidationUtil.isNull(member.getId(),"Member","id",id);
69 return memberMapper.toDto(member); 74 return memberMapper.toDto(member);
75
70 } 76 }
71 77
72 @Override 78 @Override
...@@ -99,6 +105,9 @@ public class MemberServiceImpl implements MemberService { ...@@ -99,6 +105,9 @@ public class MemberServiceImpl implements MemberService {
99 return member; 105 return member;
100 } 106 }
101 107
108 @Autowired
109 PlatformTransactionManager platformTransactionManager;
110
102 @Override 111 @Override
103 @Transactional(rollbackFor = Exception.class) 112 @Transactional(rollbackFor = Exception.class)
104 @AsyncMqSend() 113 @AsyncMqSend()
...@@ -106,10 +115,18 @@ public class MemberServiceImpl implements MemberService { ...@@ -106,10 +115,18 @@ public class MemberServiceImpl implements MemberService {
106 RLock rLock = this.redissonClient.getLock("updateMember" + resources.getId().toString()); 115 RLock rLock = this.redissonClient.getLock("updateMember" + resources.getId().toString());
107 try { 116 try {
108 RedissonUtil.lock(rLock); 117 RedissonUtil.lock(rLock);
118 String name = Thread.currentThread().getName();
119 System.out.println("=============>>>>【name】 ===== >> " + name + " =======>> start ===>> ");
120 System.out.println("=============>>>>【name】 ===== >> " + name + " =======>> 【resources】 ===>> " + resources);
109 Member member = memberRepository.findById(resources.getId()).orElseGet(Member::new); 121 Member member = memberRepository.findById(resources.getId()).orElseGet(Member::new);
110 ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId()); 122 ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId());
123 System.out.println("=============>>>>【name】 ===== >> " + name + " =======>> 【member-search】 ===>> " + member);
111 member.copy(resources); 124 member.copy(resources);
112 memberRepository.save(member); 125 this.save(member);
126 // platformTransactionManager.commit(transaction);
127 System.out.println("=============>>>>【name】 ===== >> " + name + " =======>> 【exp】 ===>> " + member.getExp());
128 System.out.println("=============>>>>【name】 ===== >> " + name + " =======>> 【point】 ===>> " + member.getPoints());
129 System.out.println("=============>>>>【name】 ===== >> " + name + " =======>> 【member】 ===>> " + member);
113 } catch (Exception e) { 130 } catch (Exception e) {
114 e.printStackTrace(); 131 e.printStackTrace();
115 throw e; 132 throw e;
...@@ -118,6 +135,11 @@ public class MemberServiceImpl implements MemberService { ...@@ -118,6 +135,11 @@ public class MemberServiceImpl implements MemberService {
118 } 135 }
119 } 136 }
120 137
138 @Transactional(propagation = Propagation.REQUIRES_NEW)
139 public void save(Member member){
140 memberRepository.save(member);
141 }
142
121 @Override 143 @Override
122 @Transactional(rollbackFor = Exception.class) 144 @Transactional(rollbackFor = Exception.class)
123 @AsyncMqSend() 145 @AsyncMqSend()
......
...@@ -9,6 +9,7 @@ import com.topdraw.business.basicdata.task.service.dto.TaskDTO; ...@@ -9,6 +9,7 @@ import com.topdraw.business.basicdata.task.service.dto.TaskDTO;
9 import com.topdraw.business.basicdata.task.service.dto.TaskQueryCriteria; 9 import com.topdraw.business.basicdata.task.service.dto.TaskQueryCriteria;
10 import com.topdraw.business.basicdata.task.service.mapper.TaskMapper; 10 import com.topdraw.business.basicdata.task.service.mapper.TaskMapper;
11 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.cache.annotation.Cacheable;
12 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
13 import org.springframework.transaction.annotation.Propagation; 14 import org.springframework.transaction.annotation.Propagation;
14 import org.springframework.transaction.annotation.Transactional; 15 import org.springframework.transaction.annotation.Transactional;
...@@ -79,6 +80,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -79,6 +80,7 @@ public class TaskServiceImpl implements TaskService {
79 TaskRepository.delete(Task); 80 TaskRepository.delete(Task);
80 } 81 }
81 82
83 @Cacheable(cacheNames = "uc-admin_taskList" , key = "#taskTemplateId")
82 @Override 84 @Override
83 public List<Task> findByTemplateId(Long taskTemplateId) { 85 public List<Task> findByTemplateId(Long taskTemplateId) {
84 return Objects.nonNull(taskTemplateId) ? this.TaskRepository.findByTaskTemplateId(taskTemplateId) : null; 86 return Objects.nonNull(taskTemplateId) ? this.TaskRepository.findByTaskTemplateId(taskTemplateId) : null;
......
...@@ -87,14 +87,16 @@ public class TaskTemplateServiceImpl implements TaskTemplateService { ...@@ -87,14 +87,16 @@ public class TaskTemplateServiceImpl implements TaskTemplateService {
87 : new TaskTemplateDTO(); 87 : new TaskTemplateDTO();
88 } 88 }
89 89
90 // @Cacheable(cacheNames = "uc.taskTemplate" , key = "event") 90
91 @Override 91 @Override
92 public TaskTemplate findByEvent(String event) { 92 public TaskTemplate findByEvent(String event) {
93 return StringUtils.isNotEmpty(event) ? this.TaskTemplateRepository.findByEvent(event) : null; 93 return StringUtils.isNotEmpty(event) ? this.TaskTemplateRepository.findByEvent(event) : null;
94 } 94 }
95 95
96 @Cacheable(cacheNames = "uc-admin_taskTemplate" , key = "#event")
96 @Override 97 @Override
97 public TaskTemplate findByType(Integer event) { 98 public TaskTemplate findByType(Integer event) {
99 System.out.println("查询数据库了!!");
98 return Objects.nonNull(event) ? this.TaskTemplateRepository.findByType(event) : null; 100 return Objects.nonNull(event) ? this.TaskTemplateRepository.findByType(event) : null;
99 } 101 }
100 } 102 }
......
...@@ -20,6 +20,14 @@ public class TempRights { ...@@ -20,6 +20,14 @@ public class TempRights {
20 @Transient 20 @Transient
21 protected Long id; 21 protected Long id;
22 22
23 /** 编号 */
24 @Transient
25 protected String code;
26
27 /** 权益名称 */
28 @Transient
29 protected String name;
30
23 /** 会员ID */ 31 /** 会员ID */
24 @Transient 32 @Transient
25 @NotNull(message = "") 33 @NotNull(message = "")
......
...@@ -5,6 +5,7 @@ import com.topdraw.business.basicdata.task.domain.Task; ...@@ -5,6 +5,7 @@ import com.topdraw.business.basicdata.task.domain.Task;
5 import com.topdraw.business.process.domian.TempPoints; 5 import com.topdraw.business.process.domian.TempPoints;
6 6
7 import java.util.List; 7 import java.util.List;
8 import java.util.Map;
8 9
9 /** 10 /**
10 * @description 积分操作接口 11 * @description 积分操作接口
......
...@@ -19,10 +19,14 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -19,10 +19,14 @@ import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 19 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
20 import org.springframework.stereotype.Service; 20 import org.springframework.stereotype.Service;
21 21
22 import javax.annotation.Resource;
22 import java.sql.Timestamp; 23 import java.sql.Timestamp;
23 import java.time.LocalDateTime; 24 import java.time.LocalDateTime;
25 import java.util.HashMap;
24 import java.util.List; 26 import java.util.List;
27 import java.util.Map;
25 import java.util.Objects; 28 import java.util.Objects;
29 import java.util.concurrent.ConcurrentHashMap;
26 import java.util.concurrent.locks.ReentrantLock; 30 import java.util.concurrent.locks.ReentrantLock;
27 31
28 32
...@@ -41,11 +45,11 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -41,11 +45,11 @@ public class CouponOperationServiceImpl implements CouponOperationService {
41 RightsOperationService rightsOperationService; 45 RightsOperationService rightsOperationService;
42 @Autowired 46 @Autowired
43 RedissonClient redissonClient; 47 RedissonClient redissonClient;
44 @Autowired 48 @Resource(name = "executorTask")
45 ThreadPoolTaskExecutor threadPoolTaskExecutor; 49 ThreadPoolTaskExecutor threadPoolTaskExecutor;
46 50
47 // 过期阀值(默认一个月) 51 // 过期阀值(默认一个月)
48 private static final Integer EXPIRE_FACTOR_MONTH = 1; 52 private static final Integer EXPIRE_FACTOR_DAY = 30;
49 53
50 54
51 55
...@@ -80,10 +84,10 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -80,10 +84,10 @@ public class CouponOperationServiceImpl implements CouponOperationService {
80 * @param tempCoupon 领取的优惠券 84 * @param tempCoupon 领取的优惠券
81 */ 85 */
82 private void refresh(TempCoupon tempCoupon) { 86 private void refresh(TempCoupon tempCoupon) {
83 // 1.保存优惠券领取、使用历史记录表 87 // 1.更新会员优惠券数量
84 this.threadPoolTaskExecutor.execute(()->this.doInsertCouponHistory(tempCoupon));
85 // 2.更新会员优惠券数量
86 this.refreshMemberCoupon(tempCoupon); 88 this.refreshMemberCoupon(tempCoupon);
89 // 2.保存优惠券领取、使用历史记录表
90 this.doInsertCouponHistory(tempCoupon);
87 } 91 }
88 92
89 93
...@@ -92,17 +96,20 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -92,17 +96,20 @@ public class CouponOperationServiceImpl implements CouponOperationService {
92 * @param tempCoupon 账号id 96 * @param tempCoupon 账号id
93 */ 97 */
94 private void refreshMemberCoupon(TempCoupon tempCoupon) { 98 private void refreshMemberCoupon(TempCoupon tempCoupon) {
95 Long userId = tempCoupon.getUserId(); 99 // Long userId = tempCoupon.getUserId();
96 Long memberId = tempCoupon.getMemberId(); 100 Long memberId = tempCoupon.getMemberId();
97 RLock rLock = this.redissonClient.getLock("refreshMemberCoupon:" + memberId.toString()); 101 Integer rightsAmount = tempCoupon.getRightsAmount();
102 // RLock rLock = this.redissonClient.getLock("refreshMemberCoupon:" + memberId.toString());
98 try { 103 try {
99 RedissonUtil.lock(rLock); 104 // RedissonUtil.lock(rLock);
100 // 1.获取用户领取的总优惠券 105 // 1.历史总优惠券数量
101 Long totalCouponCount = this.getTotalCoupon(userId); 106 Long historyCouponCount = this.getTotalHistoryCoupon(memberId);
107 // 1.当前总优惠券数量
108 Long totalCouponCount = this.getTotalCoupon(historyCouponCount,rightsAmount);
102 // 2.获取已过期的优惠券数量 109 // 2.获取已过期的优惠券数量
103 Long expireCouponCount = this.getTotalExpireCoupon(userId); 110 Long expireCouponCount = this.getTotalExpireCoupon(memberId);
104 // 3.即将过期的优惠券数量 111 // 3.即将过期的优惠券数量
105 Long expireSoonCouponCount = this.getTotalExpireSoonCoupon(userId,EXPIRE_FACTOR_MONTH); 112 Long expireSoonCouponCount = this.getTotalExpireSoonCoupon(memberId,EXPIRE_FACTOR_DAY);
106 // 4.当前优惠券数量 = 总优惠券-已过期的优惠券 113 // 4.当前优惠券数量 = 总优惠券-已过期的优惠券
107 Long currentCoupon = this.getCurrentCoupon(totalCouponCount,expireCouponCount); 114 Long currentCoupon = this.getCurrentCoupon(totalCouponCount,expireCouponCount);
108 // 5.更新用户信息(优惠券数量、即将过期的优惠券数量) 115 // 5.更新用户信息(优惠券数量、即将过期的优惠券数量)
...@@ -111,8 +118,12 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -111,8 +118,12 @@ public class CouponOperationServiceImpl implements CouponOperationService {
111 e.printStackTrace(); 118 e.printStackTrace();
112 throw e; 119 throw e;
113 } finally { 120 } finally {
114 RedissonUtil.unlock(rLock); 121 // RedissonUtil.unlock(rLock);
122 }
115 } 123 }
124
125 private Long getTotalCoupon(Long historyCouponCount, Integer rightsAmount) {
126 return (Objects.nonNull(historyCouponCount) ? historyCouponCount: 0L) + (Objects.nonNull(rightsAmount) ? rightsAmount: 0L);
116 } 127 }
117 128
118 129
...@@ -149,28 +160,7 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -149,28 +160,7 @@ public class CouponOperationServiceImpl implements CouponOperationService {
149 * @return 160 * @return
150 */ 161 */
151 private Long getTotalExpireSoonCoupon(Long userId, Integer expireFactor) { 162 private Long getTotalExpireSoonCoupon(Long userId, Integer expireFactor) {
152 LocalDateTime localDateTime = LocalDateTime.now(); 163 Timestamp expireTime = TimestampUtil.localDateTime2Timestamp1(LocalDateTime.now().plusDays(expireFactor));
153 String s = EXPIRE_FACTOR_MONTH.toString();
154 String[] s1 = s.split("_");
155 String s2 = s1[s1.length-1];
156 switch (s2) {
157 case "YEAR":
158 localDateTime.plusYears(expireFactor);
159 break;
160 case "MONTH":
161 localDateTime.plusMonths(expireFactor);
162 break;
163 case "DAY":
164 localDateTime.plusDays(expireFactor);
165 break;
166 case "HOUR":
167 localDateTime.plusHours(expireFactor);
168 break;
169 default:
170 break;
171 }
172
173 Timestamp expireTime = TimestampUtil.now(localDateTime);
174 return this.couponHistoryService.countByUserIdAndExpireTimeBetween(userId,TimestampUtil.now(),expireTime); 164 return this.couponHistoryService.countByUserIdAndExpireTimeBetween(userId,TimestampUtil.now(),expireTime);
175 } 165 }
176 166
...@@ -190,7 +180,7 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -190,7 +180,7 @@ public class CouponOperationServiceImpl implements CouponOperationService {
190 * @param userId 180 * @param userId
191 * @return 181 * @return
192 */ 182 */
193 private Long getTotalCoupon(Long userId) { 183 private Long getTotalHistoryCoupon(Long userId) {
194 return this.couponHistoryService.countByUserId(userId); 184 return this.couponHistoryService.countByUserId(userId);
195 } 185 }
196 186
...@@ -204,10 +194,12 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -204,10 +194,12 @@ public class CouponOperationServiceImpl implements CouponOperationService {
204 BeanUtils.copyProperties(tempCoupon,couponHistory); 194 BeanUtils.copyProperties(tempCoupon,couponHistory);
205 couponHistory.setId(null); 195 couponHistory.setId(null);
206 couponHistory.setCouponId(tempCoupon.getId()); 196 couponHistory.setCouponId(tempCoupon.getId());
207 couponHistory.setUserId(tempCoupon.getUserId()); 197 couponHistory.setUserId(tempCoupon.getMemberId());
208 couponHistory.setCouponCode(tempCoupon.getCode()); 198 couponHistory.setCouponCode(tempCoupon.getCode());
209 couponHistory.setUserNickname(tempCoupon.getUserNickname()); 199 couponHistory.setUserNickname(tempCoupon.getUserNickname());
210 couponHistory.setOrderDetailId(tempCoupon.getOrderId()); 200 couponHistory.setOrderDetailId(tempCoupon.getOrderId());
201 couponHistory.setReceiveTime(TimestampUtil.now());
202 couponHistory.setUseStatus(Objects.nonNull(couponHistory.getUseStatus()) ? couponHistory.getUseStatus():0);
211 this.couponHistoryService.create(couponHistory); 203 this.couponHistoryService.create(couponHistory);
212 } 204 }
213 205
......
...@@ -75,19 +75,18 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -75,19 +75,18 @@ public class ExpOperationServiceImpl implements ExpOperationService {
75 * @param tempExp 75 * @param tempExp
76 */ 76 */
77 private void refresh(TempExp tempExp) { 77 private void refresh(TempExp tempExp) {
78 RLock lock = this.redissonClient.getLock("refresh_exp:" + tempExp.getMemberId()); 78 RLock lock = this.redissonClient.getLock("uc-refresh-exp:" + tempExp.getMemberId());
79 try { 79 try {
80 RedissonUtil.lock(lock); 80 RedissonUtil.lock(lock);
81 // 原始积分 81 // 原始积分
82 long originExp = this.getExpByMemberId(tempExp); 82 long originExp = this.getExpByMemberId(tempExp);
83 // 总积分 83 // 总积分
84 long totalExp = this.calculateTotalExp(originExp, tempExp); 84 long totalExp = this.calculateTotalExp(originExp, tempExp);
85
86 // 1.添加成长值记录 85 // 1.添加成长值记录
87 this.threadPoolTaskExecutor.execute(() -> this.doInsertExpDetail(tempExp, originExp, totalExp)); 86 this.threadPoolTaskExecutor.execute(() -> this.doInsertExpDetail(tempExp, originExp, totalExp));
87 // this.doInsertExpDetail(tempExp, originExp, totalExp);
88 // 2.更新成长值与等级 88 // 2.更新成长值与等级
89 this.refreshMemberExpAndLevel(tempExp); 89 this.refreshMemberExpAndLevel(tempExp,totalExp);
90
91 } catch (Exception e) { 90 } catch (Exception e) {
92 e.printStackTrace(); 91 e.printStackTrace();
93 throw e; 92 throw e;
...@@ -98,7 +97,7 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -98,7 +97,7 @@ public class ExpOperationServiceImpl implements ExpOperationService {
98 97
99 private long calculateTotalExp(long originalExp,TempExp tempExp) { 98 private long calculateTotalExp(long originalExp,TempExp tempExp) {
100 Long rewardExp = tempExp.getRewardExp(); 99 Long rewardExp = tempExp.getRewardExp();
101 return (Objects.nonNull(rewardExp) ? rewardExp : 0L) + (Objects.nonNull(originalExp) ? originalExp : 0L); 100 return rewardExp + originalExp;
102 } 101 }
103 102
104 private long getExpByMemberId(TempExp tempExp) { 103 private long getExpByMemberId(TempExp tempExp) {
...@@ -114,57 +113,53 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -114,57 +113,53 @@ public class ExpOperationServiceImpl implements ExpOperationService {
114 * 113 *
115 * @param tempExp 成长值列表 114 * @param tempExp 成长值列表
116 */ 115 */
117 private void refreshMemberExpAndLevel(TempExp tempExp) { 116 private void refreshMemberExpAndLevel(TempExp tempExp,long totalExp) {
118 117
119 Long memberId = tempExp.getMemberId(); 118 Long memberId = tempExp.getMemberId();
120 119
121 RLock rLock = this.redissonClient.getLock("refreshMemberExpAndLevel" + memberId.toString()); 120 // RLock rLock = this.redissonClient.getLock("refresh" + memberId.toString());
122 try { 121 try {
123 RedissonUtil.lock(rLock); 122 // RedissonUtil.lock(rLock);
124 // 1.获取当前成长值 123 // 1.获取当前成长值
125 MemberDTO memberDTO = this.getMemberInfoByMemberId(memberId); 124 MemberDTO memberDTO = this.getMemberInfoByMemberId(memberId);
126 // 2.获取下一级需要的成长值 125 // 2.获取下一级需要的成长值
127 MemberLevelDTO memberLevelDTO = this.getNextLevelExp(memberDTO.getLevel() + 1, 1); 126 MemberLevelDTO memberLevelDTO = this.getNextLevelExp(memberDTO.getLevel() + 1, 1);
128 // 3.成长值累加
129 Long newExp = memberDTO.getExp() + tempExp.getRewardExp();
130 // 4.成长值比较,判断是否升级 127 // 4.成长值比较,判断是否升级
131 long i = this.compareExp(newExp, memberLevelDTO); 128 Integer level = this.compareExp(totalExp, memberLevelDTO,memberDTO);
132 // 5.更新用户信息 129 // 5.更新用户信息
133 this.updateMemberInfo(i, newExp, memberLevelDTO, memberId); 130 this.updateMemberInfo(level, totalExp, memberId);
134 } catch (Exception e) { 131 } catch (Exception e) {
135 e.printStackTrace(); 132 e.printStackTrace();
136 throw e; 133 throw e;
137 } finally { 134 } finally {
138 RedissonUtil.unlock(rLock); 135 // RedissonUtil.unlock(rLock);
139 } 136 }
140 } 137 }
141 138
142 /** 139 /**
143 * 140 *
144 * @param i 141 * @param level
145 * @param newExp 总积分 142 * @param totalExp 总积分
146 * @param memberLevelDTO 下一级
147 * @param memberId 会员id 143 * @param memberId 会员id
148 */ 144 */
149 private void updateMemberInfo(long i,Long newExp,MemberLevelDTO memberLevelDTO,Long memberId) { 145 private void updateMemberInfo(Integer level,Long totalExp,Long memberId) {
150 Member member = new Member(); 146 Member member = new Member();
151 member.setId(memberId); 147 member.setId(memberId);
152 member.setExp(newExp); 148 member.setExp(totalExp);
153 if (i > 0) {
154 Integer level = memberLevelDTO.getLevel();
155 member.setLevel(level); 149 member.setLevel(level);
156 }
157 member.setUpdateTime(TimestampUtil.now()); 150 member.setUpdateTime(TimestampUtil.now());
158 this.memberOperationService.doUpdateMemberInfo(member); 151 this.memberOperationService.doUpdateMemberInfo(member);
159 } 152 }
160 153
161 private long compareExp(long newExp, MemberLevelDTO memberLevelDTO) { 154 private Integer compareExp(long newExp, MemberLevelDTO memberLevelDTO,MemberDTO memberDTO) {
162 if (Objects.nonNull(memberLevelDTO)) { 155 if (Objects.nonNull(memberLevelDTO)) {
163 Long nextLevelExp = memberLevelDTO.getExpValue(); 156 Long nextLevelExp = memberLevelDTO.getExpValue();
164 if (Objects.nonNull(nextLevelExp) && nextLevelExp > 0) 157 if (Objects.nonNull(nextLevelExp) && nextLevelExp > 0)
165 return newExp - nextLevelExp; 158 if(newExp - nextLevelExp >= 0){
159 return memberLevelDTO.getLevel();
160 }
166 } 161 }
167 return -1; 162 return memberDTO.getLevel();
168 } 163 }
169 164
170 private MemberLevelDTO getNextLevelExp(Integer i,Integer status) { 165 private MemberLevelDTO getNextLevelExp(Integer i,Integer status) {
...@@ -200,7 +195,7 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -200,7 +195,7 @@ public class ExpOperationServiceImpl implements ExpOperationService {
200 195
201 expDetail.setCode(String.valueOf(IdWorker.generator())); 196 expDetail.setCode(String.valueOf(IdWorker.generator()));
202 // 原始积分 197 // 原始积分
203 expDetail.setOriginalExp(Objects.nonNull(originalExp) ? originalExp : 0L); 198 expDetail.setOriginalExp(originalExp);
204 // 总积分 199 // 总积分
205 expDetail.setResultExp(totalExp); 200 expDetail.setResultExp(totalExp);
206 // 获得的积分 201 // 获得的积分
......
...@@ -344,19 +344,24 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -344,19 +344,24 @@ public class PointsOperationServiceImpl implements PointsOperationService {
344 */ 344 */
345 private void refresh(TempPoints tempPoints) { 345 private void refresh(TempPoints tempPoints) {
346 Long memberId = tempPoints.getMemberId(); 346 Long memberId = tempPoints.getMemberId();
347 RLock rLock = this.redissonClient.getLock("refresh_point:" + memberId.toString()); 347 RLock rLock = this.redissonClient.getLock("uc-refresh-points:" + memberId.toString());
348 try { 348 try {
349 RedissonUtil.lock(rLock); 349 RedissonUtil.lock(rLock);
350 // 1.可用总积分 350 // 1.可用总积分
351 long currentPoints = this.findAvailablePointsByMemberId(memberId); 351 long currentPoints = this.findAvailablePointsByMemberId(memberId);
352 // 2.计算总积分 352 // 2.计算总积分
353 long totalPoints = this.calculateTotalPoints(tempPoints, currentPoints); 353 long totalPoints = this.calculateTotalPoints(tempPoints, currentPoints);
354 // 2.添加积分明细,并计算总积分 354
355 // 3.添加积分明细,并计算总积分
355 this.threadPoolTaskExecutor.execute(()->this.doInsertTrPointsDetail(memberId, tempPoints, currentPoints,totalPoints)); 356 this.threadPoolTaskExecutor.execute(()->this.doInsertTrPointsDetail(memberId, tempPoints, currentPoints,totalPoints));
356 // 4.更新会员的总积分 357 // this.doInsertTrPointsDetail(memberId, tempPoints, currentPoints,totalPoints);
357 this.freshMemberCurrentPoints(memberId, totalPoints); 358
358 // 5.添加可用积分 359 // 4.添加可用积分
359 this.doInsertTrPointsAvailable(tempPoints); 360 this.doInsertTrPointsAvailable(tempPoints);
361
362 // 6.更新会员的总积分
363 this.freshMemberCurrentPoints(memberId, totalPoints);
364
360 } catch (Exception e) { 365 } catch (Exception e) {
361 e.printStackTrace(); 366 e.printStackTrace();
362 throw e; 367 throw e;
...@@ -468,21 +473,13 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -468,21 +473,13 @@ public class PointsOperationServiceImpl implements PointsOperationService {
468 * @param tempPoints 积分 473 * @param tempPoints 积分
469 * @return Integer 总积分 474 * @return Integer 总积分
470 */ 475 */
471 private void doInsertTrPointsDetail(Long memberId, TempPoints tempPoints,long totalPoints,long currentPoints){ 476 private void doInsertTrPointsDetail(Long memberId, TempPoints tempPoints,long currentPoints,long totalPoints){
472 477
473 PointsDetail pointsDetail = new PointsDetail(); 478 PointsDetail pointsDetail = new PointsDetail();
474 BeanUtils.copyProperties(tempPoints,pointsDetail); 479 BeanUtils.copyProperties(tempPoints,pointsDetail);
475
476 /* // 获取的积分
477 long rewardPoints = tempPoints.getPoints();
478 // 原始积分
479 long originalPoints = currentPoints;
480 // 总积分
481 long totalPoints = originalPoints + rewardPoints;*/
482
483 pointsDetail.setMemberId(memberId); 480 pointsDetail.setMemberId(memberId);
484 pointsDetail.setCode(String.valueOf(IdWorker.generator())); 481 pointsDetail.setCode(String.valueOf(IdWorker.generator()));
485 482 pointsDetail.setPoints(tempPoints.getPoints());
486 pointsDetail.setOriginalPoints(currentPoints); 483 pointsDetail.setOriginalPoints(currentPoints);
487 pointsDetail.setResultPoints(totalPoints); 484 pointsDetail.setResultPoints(totalPoints);
488 String description = pointsDetail.getDescription(); 485 String description = pointsDetail.getDescription();
......
...@@ -17,10 +17,12 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -17,10 +17,12 @@ import org.springframework.beans.factory.annotation.Autowired;
17 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 17 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
18 import org.springframework.stereotype.Service; 18 import org.springframework.stereotype.Service;
19 import org.springframework.util.CollectionUtils; 19 import org.springframework.util.CollectionUtils;
20 import org.springframework.util.StringUtils;
20 21
21 import javax.annotation.Resource; 22 import javax.annotation.Resource;
22 import java.sql.Timestamp; 23 import java.sql.Timestamp;
23 import java.util.*; 24 import java.util.*;
25 import java.util.concurrent.Future;
24 26
25 /** 27 /**
26 * 权益处理 28 * 权益处理
...@@ -144,24 +146,14 @@ public class RightsOperationServiceImpl implements RightsOperationService { ...@@ -144,24 +146,14 @@ public class RightsOperationServiceImpl implements RightsOperationService {
144 */ 146 */
145 private void refresh(Map<RightType, Object> tempRightsMap) { 147 private void refresh(Map<RightType, Object> tempRightsMap) {
146 148
147 this.threadPoolTaskExecutor.execute(()->{ 149 this.threadPoolTaskExecutor.submit(() -> {
148 // 积分 150 // 积分
149 this.grantPoint((List<TempPoints>)tempRightsMap.get(RightType.POINTS)); 151 this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS));
150 });
151
152 this.threadPoolTaskExecutor.execute(()->{
153 // 成长值 152 // 成长值
154 this.grantExp((List<TempExp>)tempRightsMap.get(RightType.EXP)); 153 this.grantExp((List<TempExp>) tempRightsMap.get(RightType.EXP));
155 });
156
157 this.threadPoolTaskExecutor.execute(()->{
158 // 优惠券 154 // 优惠券
159 this.grantCoupon((List<TempCoupon>)tempRightsMap.get(RightType.COUPON)); 155 this.grantCoupon((List<TempCoupon>) tempRightsMap.get(RightType.COUPON));
160 }); 156 });
161
162 /*this.grantPoint((List<TempPoints>)tempRightsMap.get(RightType.POINTS));
163 this.grantExp((List<TempExp>)tempRightsMap.get(RightType.EXP));
164 this.grantCoupon((List<TempCoupon>)tempRightsMap.get(RightType.COUPON));*/
165 } 157 }
166 158
167 /** 159 /**
...@@ -260,8 +252,11 @@ public class RightsOperationServiceImpl implements RightsOperationService { ...@@ -260,8 +252,11 @@ public class RightsOperationServiceImpl implements RightsOperationService {
260 if (!CollectionUtils.isEmpty(rightsHistories)) { 252 if (!CollectionUtils.isEmpty(rightsHistories)) {
261 253
262 for (RightsHistory rightsHistory : rightsHistories) { 254 for (RightsHistory rightsHistory : rightsHistories) {
255 Long operatorId = rightsHistory.getOperatorId();
256 String operatorName = rightsHistory.getOperatorName();
263 rightsHistory.setSendTime(TimestampUtil.now()); 257 rightsHistory.setSendTime(TimestampUtil.now());
264 258 rightsHistory.setOperatorId(Objects.nonNull(operatorId)?operatorId:0);
259 rightsHistory.setOperatorName(!StringUtils.isEmpty(operatorName)?operatorName:"系统发放");
265 this.rightsHistoryService.create(rightsHistory); 260 this.rightsHistoryService.create(rightsHistory);
266 } 261 }
267 262
......
...@@ -24,22 +24,17 @@ import com.topdraw.util.*; ...@@ -24,22 +24,17 @@ import com.topdraw.util.*;
24 import lombok.extern.slf4j.Slf4j; 24 import lombok.extern.slf4j.Slf4j;
25 import org.slf4j.Logger; 25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory; 26 import org.slf4j.LoggerFactory;
27 import org.springframework.beans.BeanUtils;
27 import org.springframework.beans.factory.annotation.Autowired; 28 import org.springframework.beans.factory.annotation.Autowired;
28 import org.springframework.cache.annotation.CacheEvict;
29 import org.springframework.cache.annotation.Cacheable;
30 import org.springframework.cache.annotation.EnableCaching;
31 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
32 import org.springframework.stereotype.Service; 29 import org.springframework.stereotype.Service;
33 import org.springframework.util.CollectionUtils; 30 import org.springframework.util.CollectionUtils;
34 import org.springframework.util.StringUtils; 31 import org.springframework.util.StringUtils;
35 32
36 import javax.annotation.Resource;
37 import java.math.BigDecimal; 33 import java.math.BigDecimal;
38 import java.math.RoundingMode; 34 import java.math.RoundingMode;
39 import java.sql.Timestamp; 35 import java.sql.Timestamp;
40 import java.time.LocalDate; 36 import java.time.LocalDate;
41 import java.util.*; 37 import java.util.*;
42 import java.util.concurrent.locks.ReentrantLock;
43 import java.util.concurrent.locks.ReentrantReadWriteLock; 38 import java.util.concurrent.locks.ReentrantReadWriteLock;
44 import java.util.stream.Collectors; 39 import java.util.stream.Collectors;
45 40
...@@ -56,21 +51,19 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -56,21 +51,19 @@ public class TaskOperationServiceImpl implements TaskOperationService {
56 private static final Logger LOG = LoggerFactory.getLogger(PointsOperationServiceImpl.class); 51 private static final Logger LOG = LoggerFactory.getLogger(PointsOperationServiceImpl.class);
57 52
58 @Autowired 53 @Autowired
59 private TaskService taskService; 54 TaskService taskService;
60 @Autowired 55 @Autowired
61 private MemberService memberService; 56 MemberService memberService;
62 @Autowired 57 @Autowired
63 private RightsService rightsService; 58 RightsService rightsService;
64 @Autowired 59 @Autowired
65 private TaskTemplateService taskTemplateService; 60 TaskTemplateService taskTemplateService;
66 @Autowired 61 @Autowired
67 private RightsOperationService rightsOperationService; 62 RightsOperationService rightsOperationService;
68 @Autowired 63 @Autowired
69 private TrTaskProgressService trTaskProgressService; 64 TrTaskProgressService trTaskProgressService;
70 @Autowired 65 @Autowired
71 private PermanentRightsService permanentRightsService; 66 PermanentRightsService permanentRightsService;
72
73 private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
74 67
75 private static final Integer TASK_FINISH_STATUS = 1; 68 private static final Integer TASK_FINISH_STATUS = 1;
76 private static final Integer TASK_UNFINISH_STATUS = 2; 69 private static final Integer TASK_UNFINISH_STATUS = 2;
...@@ -87,10 +80,10 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -87,10 +80,10 @@ public class TaskOperationServiceImpl implements TaskOperationService {
87 80
88 long l = System.currentTimeMillis(); 81 long l = System.currentTimeMillis();
89 // 验证会员信息 82 // 验证会员信息
90 boolean b = this.validatedMember(memberId); 83 /*boolean b = this.validatedMember(memberId);
91 if (b) { 84 if (!b) {
92 throw new BadRequestException("【member status exception!!】"); 85 throw new BadRequestException("【member status exception!!】");
93 } 86 }*/
94 87
95 // 1.通过任务标识获取任务模板,通过模板参数获取具体的模板 88 // 1.通过任务标识获取任务模板,通过模板参数获取具体的模板
96 TaskTemplate taskTemplate = this.getTaskTemplate(event); 89 TaskTemplate taskTemplate = this.getTaskTemplate(event);
...@@ -101,10 +94,8 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -101,10 +94,8 @@ public class TaskOperationServiceImpl implements TaskOperationService {
101 if (checkResult) { 94 if (checkResult) {
102 // 5.权益区分(积分、权益、成长值) 95 // 5.权益区分(积分、权益、成长值)
103 Map<RightType,Object> tempRightsMap = this.distinguishRight(memberId,taskList,msgData); 96 Map<RightType,Object> tempRightsMap = this.distinguishRight(memberId,taskList,msgData);
104
105 // 6.权益发放 97 // 6.权益发放
106 this.grantRight(tempRightsMap); 98 this.grantRight(tempRightsMap);
107
108 } 99 }
109 100
110 long r = System.currentTimeMillis(); 101 long r = System.currentTimeMillis();
...@@ -120,12 +111,13 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -120,12 +111,13 @@ public class TaskOperationServiceImpl implements TaskOperationService {
120 private boolean validatedMember(Long memberId) { 111 private boolean validatedMember(Long memberId) {
121 log.info("validatedMember -->>【memberId】 -->> " + memberId); 112 log.info("validatedMember -->>【memberId】 -->> " + memberId);
122 MemberDTO memberDTO = this.memberService.findById(memberId); 113 MemberDTO memberDTO = this.memberService.findById(memberId);
123 Integer blackStatus = memberDTO.getBlackStatus(); 114 Long blackStatus = memberDTO.getBlackStatus();
124 if (Objects.nonNull(blackStatus) && blackStatus == 1) { 115 // TODO 检查balckStatus无法获取的原因
125 log.error("validatedMember -->> 会员已被加入黑名单 【blackStatus】 -->> " + blackStatus); 116 if (Objects.isNull(blackStatus) || blackStatus == 1) {
117 log.error("validatedMember -->> 会员不存在或者已被加入黑名单 【blackStatus】 -->> " + blackStatus);
126 return false; 118 return false;
127 } 119 }
128 return Objects.nonNull(memberDTO) ? true:false; 120 return true;
129 } 121 }
130 122
131 /** 123 /**
...@@ -133,6 +125,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -133,6 +125,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
133 * @param memberId 会员id 125 * @param memberId 会员id
134 * @return PermanentRightsDTO 永久权益 126 * @return PermanentRightsDTO 永久权益
135 */ 127 */
128 @Deprecated
136 private PermanentRightsDTO getPermanentRights(Long memberId) { 129 private PermanentRightsDTO getPermanentRights(Long memberId) {
137 PermanentRightsDTO permanentRights = null; 130 PermanentRightsDTO permanentRights = null;
138 MemberDTO memberDTO = this.memberService.findById(memberId); 131 MemberDTO memberDTO = this.memberService.findById(memberId);
...@@ -149,6 +142,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -149,6 +142,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
149 * @param taskTemplate 任务模板 142 * @param taskTemplate 任务模板
150 * @return Map<String, Object> 模板参数解析结果 143 * @return Map<String, Object> 模板参数解析结果
151 */ 144 */
145 @Deprecated
152 private Map<String, Object> parseTaskTemplateParam(TaskTemplate taskTemplate) { 146 private Map<String, Object> parseTaskTemplateParam(TaskTemplate taskTemplate) {
153 if (Objects.nonNull(taskTemplate)) { 147 if (Objects.nonNull(taskTemplate)) {
154 String params = taskTemplate.getParams(); 148 String params = taskTemplate.getParams();
...@@ -166,20 +160,12 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -166,20 +160,12 @@ public class TaskOperationServiceImpl implements TaskOperationService {
166 */ 160 */
167 private void doRefreshTrTaskProcess(TrTaskProgress resources) { 161 private void doRefreshTrTaskProcess(TrTaskProgress resources) {
168 Long id = resources.getId(); 162 Long id = resources.getId();
169 ReentrantReadWriteLock.WriteLock writeLock = this.reentrantReadWriteLock.writeLock();
170 try {
171 writeLock.lock();
172 if (Objects.nonNull(id)) { 163 if (Objects.nonNull(id)) {
173 resources.setUpdateTime(TimestampUtil.now()); 164 resources.setUpdateTime(TimestampUtil.now());
174 this.trTaskProgressService.update(resources); 165 this.trTaskProgressService.update(resources);
175 } else { 166 } else {
176 this.trTaskProgressService.create(resources); 167 this.trTaskProgressService.create(resources);
177 } 168 }
178 } catch (Exception e) {
179 e.printStackTrace();
180 } finally {
181 writeLock.unlock();
182 }
183 } 169 }
184 170
185 /** 171 /**
...@@ -326,16 +312,15 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -326,16 +312,15 @@ public class TaskOperationServiceImpl implements TaskOperationService {
326 /** 312 /**
327 * 创建权益 313 * 创建权益
328 * @param memberId 314 * @param memberId
329 * @param rightsId
330 * @param rightsAmount 315 * @param rightsAmount
331 * @param expireTime
332 * @return 316 * @return
333 */ 317 */
334 private TempRights tmpRightsBuild(Long memberId ,Long rightsId, Integer rightsAmount,Long expireTime){ 318 private TempRights tmpRightsBuild(Long memberId ,Integer rightsAmount,RightsDTO rightsDTO){
335 TempRights tempRights = new TempRights(); 319 TempRights tempRights = new TempRights();
320 BeanUtils.copyProperties(rightsDTO,tempRights);
336 tempRights.setMemberId(memberId); 321 tempRights.setMemberId(memberId);
337 tempRights.setRightsAmount(rightsAmount); 322 tempRights.setRightsAmount(rightsAmount);
338 tempRights.setId(rightsId); 323 Long expireTime = rightsDTO.getExpireTime();
339 if (Objects.nonNull(expireTime)) 324 if (Objects.nonNull(expireTime))
340 tempRights.setExpireTime(TimestampUtil.long2Timestamp(expireTime)); 325 tempRights.setExpireTime(TimestampUtil.long2Timestamp(expireTime));
341 return tempRights; 326 return tempRights;
...@@ -344,17 +329,17 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -344,17 +329,17 @@ public class TaskOperationServiceImpl implements TaskOperationService {
344 /** 329 /**
345 * 优惠券 330 * 优惠券
346 * @param memberId 331 * @param memberId
347 * @param rightsId
348 * @param rightsAmount 332 * @param rightsAmount
349 * @param rightsSendStrategy 333 * @param rightsSendStrategy
350 * @return 334 * @return
351 */ 335 */
352 private TempCoupon tempCouponBuild(Long memberId ,Long rightsId, Integer rightsAmount,Integer rightsSendStrategy){ 336 private TempCoupon tempCouponBuild(Long memberId ,Integer rightsAmount,Integer rightsSendStrategy,TempRights tempRights,String nickname){
353 TempCoupon tempCoupon = new TempCoupon(); 337 TempCoupon tempCoupon = new TempCoupon();
338 BeanUtils.copyProperties(tempRights,tempCoupon);
354 tempCoupon.setMemberId(memberId); 339 tempCoupon.setMemberId(memberId);
355 tempCoupon.setId(rightsId);
356 tempCoupon.setRightsAmount(rightsAmount); 340 tempCoupon.setRightsAmount(rightsAmount);
357 tempCoupon.setRightsSendStrategy(Objects.isNull(rightsSendStrategy) ? 0 : rightsSendStrategy); 341 tempCoupon.setRightsSendStrategy(Objects.isNull(rightsSendStrategy) ? 0 : rightsSendStrategy);
342 tempCoupon.setUserNickname(nickname);
358 return tempCoupon; 343 return tempCoupon;
359 } 344 }
360 345
...@@ -369,6 +354,8 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -369,6 +354,8 @@ public class TaskOperationServiceImpl implements TaskOperationService {
369 List<TempCoupon> tempCouponList = new ArrayList<>(); 354 List<TempCoupon> tempCouponList = new ArrayList<>();
370 // 权益列表,用以保存权益记录 355 // 权益列表,用以保存权益记录
371 List<TempRights> rightsList = new ArrayList<>(); 356 List<TempRights> rightsList = new ArrayList<>();
357 // 会员信息
358 MemberDTO memberDTO = this.findMemberById(memberId);
372 359
373 // 权益1 360 // 权益1
374 Long rights1Id = task.getRightsId(); 361 Long rights1Id = task.getRightsId();
...@@ -378,7 +365,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -378,7 +365,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
378 // TODO 权益1发放的策略 365 // TODO 权益1发放的策略
379 Integer rightsSendStrategy = task.getRightsSendStrategy(); 366 Integer rightsSendStrategy = task.getRightsSendStrategy();
380 // 权益分类 367 // 权益分类
381 this.getTempRightType(memberId,rights1Id,rights1Amount,rightsSendStrategy,tempCouponList,rightsList); 368 this.getTempRightType(memberDTO,rights1Id,rights1Amount,rightsSendStrategy,tempCouponList,rightsList);
382 } 369 }
383 370
384 // 权益2 371 // 权益2
...@@ -388,7 +375,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -388,7 +375,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
388 // TODO 权益2发放的策略 375 // TODO 权益2发放的策略
389 Integer rightsSendStrategy = task.getRightsSendStrategy(); 376 Integer rightsSendStrategy = task.getRightsSendStrategy();
390 // 权权益分类 377 // 权权益分类
391 this.getTempRightType(memberId,rights2Id,rights2Amount,rightsSendStrategy,tempCouponList,rightsList); 378 this.getTempRightType(memberDTO,rights2Id,rights2Amount,rightsSendStrategy,tempCouponList,rightsList);
392 } 379 }
393 380
394 // 权益3 381 // 权益3
...@@ -398,7 +385,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -398,7 +385,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
398 // TODO 权益3发放的策略 385 // TODO 权益3发放的策略
399 Integer rightsSendStrategy = task.getRightsSendStrategy(); 386 Integer rightsSendStrategy = task.getRightsSendStrategy();
400 // 权益分类 387 // 权益分类
401 this.getTempRightType(memberId,rights3Id,rights3Amount,rightsSendStrategy,tempCouponList,rightsList); 388 this.getTempRightType(memberDTO,rights3Id,rights3Amount,rightsSendStrategy,tempCouponList,rightsList);
402 } 389 }
403 // 优惠券 390 // 优惠券
404 map.put(RightType.COUPON,tempCouponList); 391 map.put(RightType.COUPON,tempCouponList);
...@@ -406,26 +393,36 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -406,26 +393,36 @@ public class TaskOperationServiceImpl implements TaskOperationService {
406 return map; 393 return map;
407 } 394 }
408 395
396
409 /** 397 /**
410 * 权益分类 398 * 会员对象
411 * @param memberId 399 * @param memberId
400 * @return
401 */
402 private MemberDTO findMemberById(Long memberId) {
403 return this.memberService.findById(memberId);
404 }
405
406 /**
407 * 权益分类
408 * @param memberDTO
412 * @param rightsId 409 * @param rightsId
413 * @param rightsAmount 410 * @param rightsAmount
414 * @param rightsSendStrategy 411 * @param rightsSendStrategy
415 * @param tempCouponList 412 * @param tempCouponList
416 * @param rightsList 413 * @param rightsList
417 */ 414 */
418 private void getTempRightType(Long memberId , Long rightsId, Integer rightsAmount,Integer rightsSendStrategy,List<TempCoupon> tempCouponList, 415 private void getTempRightType(MemberDTO memberDTO , Long rightsId, Integer rightsAmount,Integer rightsSendStrategy,List<TempCoupon> tempCouponList,
419 List<TempRights> rightsList) { 416 List<TempRights> rightsList) {
420 417
421 418 Long memberId = memberDTO.getId();
419 String nickname = memberDTO.getNickname();
422 // 权益详情 420 // 权益详情
423 RightsDTO rightsDTO = this.getRight(rightsId); 421 RightsDTO rightsDTO = this.getRight(rightsId);
424 422
425 if (Objects.nonNull(rightsDTO)){ 423 if (Objects.nonNull(rightsDTO)){
426 // 用以保存权益历史 424 // 用以保存权益历史
427 Long expireTime = rightsDTO.getExpireTime(); 425 TempRights tempRights = this.tmpRightsBuild(memberId,rightsAmount,rightsDTO);
428 TempRights tempRights = this.tmpRightsBuild(memberId,rightsId,rightsAmount,expireTime);
429 rightsList.add(tempRights); 426 rightsList.add(tempRights);
430 427
431 // 权益类型 428 // 权益类型
...@@ -433,7 +430,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -433,7 +430,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
433 switch (type) { 430 switch (type) {
434 case "1": 431 case "1":
435 // 优惠券 432 // 优惠券
436 TempCoupon tempCoupon = this.tempCouponBuild(memberId,rightsId,rightsAmount,rightsSendStrategy); 433 TempCoupon tempCoupon = this.tempCouponBuild(memberId,rightsAmount,rightsSendStrategy,tempRights,nickname);
437 tempCouponList.add(tempCoupon); 434 tempCouponList.add(tempCoupon);
438 break; 435 break;
439 default: 436 default:
......
...@@ -8,7 +8,7 @@ public class LocalDateTimeUtil { ...@@ -8,7 +8,7 @@ public class LocalDateTimeUtil {
8 public static String todayStart() { 8 public static String todayStart() {
9 LocalDate now = LocalDate.now(); 9 LocalDate now = LocalDate.now();
10 10
11 return now+" 00:00:00"; 11 return now.toString();
12 } 12 }
13 13
14 public static String todayEnd() { 14 public static String todayEnd() {
......
...@@ -21,6 +21,10 @@ public class TimestampUtil { ...@@ -21,6 +21,10 @@ public class TimestampUtil {
21 return epochSecond; 21 return epochSecond;
22 } 22 }
23 23
24 public static Timestamp localDateTime2Timestamp1(LocalDateTime localDateTime){
25 long epochSecond = localDateTime.atZone(ZoneOffset.systemDefault()).toEpochSecond();
26 return long2Timestamp(epochSecond);
27 }
24 public static Timestamp long2Timestamp(long timestamp){ 28 public static Timestamp long2Timestamp(long timestamp){
25 Timestamp timestamp1 = Timestamp.from(Instant.ofEpochSecond(timestamp)); 29 Timestamp timestamp1 = Timestamp.from(Instant.ofEpochSecond(timestamp));
26 return timestamp1; 30 return timestamp1;
......
...@@ -10,6 +10,8 @@ spring: ...@@ -10,6 +10,8 @@ spring:
10 active: dev 10 active: dev
11 jackson: 11 jackson:
12 time-zone: GMT+8 12 time-zone: GMT+8
13 cache:
14 type: simple
13 data: 15 data:
14 redis: 16 redis:
15 repositories: 17 repositories:
......
...@@ -13,7 +13,7 @@ public class MemberServiceTest extends BaseTest { ...@@ -13,7 +13,7 @@ public class MemberServiceTest extends BaseTest {
13 13
14 @Test 14 @Test
15 public void findById(){ 15 public void findById(){
16 Long memberId = 1L; 16 Long memberId = 3L;
17 MemberDTO memberDTO = this.memberService.findById(memberId); 17 MemberDTO memberDTO = this.memberService.findById(memberId);
18 LOG.info("=====>>>" + memberDTO); 18 LOG.info("=====>>>" + memberDTO);
19 19
......
...@@ -21,12 +21,11 @@ public class ExpOperationControllerTest extends BaseTest { ...@@ -21,12 +21,11 @@ public class ExpOperationControllerTest extends BaseTest {
21 21
22 @Test 22 @Test
23 public void grantExpByManual(){ 23 public void grantExpByManual(){
24 Long memberId = 2L; 24 Long memberId = 3L;
25 Long userId = 2L; 25 Long userId = 2L;
26 TempExp tempExp = new TempExp(); 26 TempExp tempExp = new TempExp();
27 tempExp.setMemberId(memberId); 27 tempExp.setMemberId(memberId);
28 tempExp.setRewardExp(10L); 28 tempExp.setRewardExp(10L);
29 tempExp.setMemberId(2L);
30 tempExp.setRightsSendStrategy(0); 29 tempExp.setRightsSendStrategy(0);
31 tempExp.setAccountId(userId); 30 tempExp.setAccountId(userId);
32 tempExp.setExpireTime(Timestamp.valueOf("2021-10-28 09:00:00")); 31 tempExp.setExpireTime(Timestamp.valueOf("2021-10-28 09:00:00"));
......
...@@ -58,14 +58,14 @@ public class PointsOperationControllerTest extends BaseTest { ...@@ -58,14 +58,14 @@ public class PointsOperationControllerTest extends BaseTest {
58 tempPoints.setMemberId(3L); 58 tempPoints.setMemberId(3L);
59 tempPoints.setRightsSendStrategy(0); 59 tempPoints.setRightsSendStrategy(0);
60 tempPoints.setAccountId(2L); 60 tempPoints.setAccountId(2L);
61 tempPoints.setExpireTime(Timestamp.valueOf("2021-10-27 09:00:00")); 61 tempPoints.setExpireTime(Timestamp.valueOf("2021-11-27 09:00:00"));
62 tempPoints.setDeviceType(2); 62 tempPoints.setDeviceType(2);
63 tempPoints.setAppCode("WEI_XIN_GOLD_PANDA"); 63 tempPoints.setAppCode("WEI_XIN_GOLD_PANDA");
64 tempPoints.setOrderId(null); 64 tempPoints.setOrderId(null);
65 tempPoints.setMediaId(null); 65 tempPoints.setMediaId(null);
66 tempPoints.setActivityId(null); 66 tempPoints.setActivityId(null);
67 tempPoints.setItemId(null); 67 tempPoints.setItemId(null);
68 tempPoints.setDescription("#"); 68 tempPoints.setDescription("系统发放");
69 tempPoints.setEvtType(1); 69 tempPoints.setEvtType(1);
70 String s = JSON.toJSONString(tempPoints); 70 String s = JSON.toJSONString(tempPoints);
71 ResultInfo byId = this.pointsOperationController.grantPointsByManual(tempPoints); 71 ResultInfo byId = this.pointsOperationController.grantPointsByManual(tempPoints);
......
...@@ -18,7 +18,7 @@ public class RightOperationControllerTest extends BaseTest { ...@@ -18,7 +18,7 @@ public class RightOperationControllerTest extends BaseTest {
18 public void grantRightsByManual(){ 18 public void grantRightsByManual(){
19 RightsHistory rightsHistory = new RightsHistory(); 19 RightsHistory rightsHistory = new RightsHistory();
20 rightsHistory.setRightsId(1L); 20 rightsHistory.setRightsId(1L);
21 rightsHistory.setMemberId(5L); 21 rightsHistory.setMemberId(3L);
22 rightsHistory.setOperatorId(3L); 22 rightsHistory.setOperatorId(3L);
23 rightsHistory.setOperatorName("鲁二龙"); 23 rightsHistory.setOperatorName("鲁二龙");
24 rightsHistory.setExpireTime(TimestampUtil.now()); 24 rightsHistory.setExpireTime(TimestampUtil.now());
......