Commit 7d0ef571 7d0ef5712e8394b37157b38ab5fed9164e2a5309 by xianghan

1.优化任务处理过程

1 parent c177b36a
Showing 22 changed files with 339 additions and 98 deletions
...@@ -5,7 +5,9 @@ import org.springframework.data.jpa.repository.JpaRepository; ...@@ -5,7 +5,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6 6
7 import java.sql.Timestamp; 7 import java.sql.Timestamp;
8 import java.time.LocalDate;
8 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
10 import java.util.Date;
9 11
10 /** 12 /**
11 * @author XiangHan 13 * @author XiangHan
...@@ -15,7 +17,7 @@ public interface CouponHistoryRepository extends JpaRepository<CouponHistory, Lo ...@@ -15,7 +17,7 @@ public interface CouponHistoryRepository extends JpaRepository<CouponHistory, Lo
15 17
16 Long countByUserId(Long userId); 18 Long countByUserId(Long userId);
17 19
18 Long countByUserIdAndExpireTimeBefore(Long userId, LocalDateTime now); 20 Long countByUserIdAndExpireTimeBefore(Long userId, Date now);
19 21
20 Long countByUserIdAndExpireTimeBetween(Long userId, LocalDateTime now, LocalDateTime expireTime); 22 Long countByUserIdAndExpireTimeBetween(Long userId, Date now, Date expireTime);
21 } 23 }
......
...@@ -3,6 +3,7 @@ package com.topdraw.business.module.coupon.history.service; ...@@ -3,6 +3,7 @@ package com.topdraw.business.module.coupon.history.service;
3 import com.topdraw.business.module.coupon.history.domain.CouponHistory; 3 import com.topdraw.business.module.coupon.history.domain.CouponHistory;
4 import com.topdraw.business.module.coupon.history.service.dto.CouponHistoryDTO; 4 import com.topdraw.business.module.coupon.history.service.dto.CouponHistoryDTO;
5 5
6 import java.time.LocalDate;
6 import java.time.LocalDateTime; 7 import java.time.LocalDateTime;
7 8
8 /** 9 /**
......
...@@ -2,6 +2,7 @@ package com.topdraw.business.module.coupon.history.service.impl; ...@@ -2,6 +2,7 @@ package com.topdraw.business.module.coupon.history.service.impl;
2 2
3 import com.topdraw.business.module.coupon.history.domain.CouponHistory; 3 import com.topdraw.business.module.coupon.history.domain.CouponHistory;
4 import com.topdraw.business.module.coupon.history.domain.CouponHistoryBuilder; 4 import com.topdraw.business.module.coupon.history.domain.CouponHistoryBuilder;
5 import com.topdraw.util.LocalDateTimeUtil;
5 import com.topdraw.utils.ValidationUtil; 6 import com.topdraw.utils.ValidationUtil;
6 import com.topdraw.business.module.coupon.history.repository.CouponHistoryRepository; 7 import com.topdraw.business.module.coupon.history.repository.CouponHistoryRepository;
7 import com.topdraw.business.module.coupon.history.service.CouponHistoryService; 8 import com.topdraw.business.module.coupon.history.service.CouponHistoryService;
...@@ -12,7 +13,11 @@ import org.springframework.stereotype.Service; ...@@ -12,7 +13,11 @@ import org.springframework.stereotype.Service;
12 import org.springframework.transaction.annotation.Propagation; 13 import org.springframework.transaction.annotation.Propagation;
13 import org.springframework.transaction.annotation.Transactional; 14 import org.springframework.transaction.annotation.Transactional;
14 15
16 import java.sql.Date;
17 import java.time.LocalDate;
15 import java.time.LocalDateTime; 18 import java.time.LocalDateTime;
19 import java.time.ZoneId;
20 import java.time.ZonedDateTime;
16 21
17 /** 22 /**
18 * @author XiangHan 23 * @author XiangHan
...@@ -49,12 +54,13 @@ public class CouponHistoryServiceImpl implements CouponHistoryService { ...@@ -49,12 +54,13 @@ public class CouponHistoryServiceImpl implements CouponHistoryService {
49 54
50 @Override 55 @Override
51 public Long countByUserIdAndExpireTimeBefore(Long userId, LocalDateTime now) { 56 public Long countByUserIdAndExpireTimeBefore(Long userId, LocalDateTime now) {
52 return this.couponHistoryRepository.countByUserIdAndExpireTimeBefore(userId,now); 57 return this.couponHistoryRepository.countByUserIdAndExpireTimeBefore(userId, LocalDateTimeUtil.LocalDateTime2Date(now));
53 } 58 }
54 59
55 @Override 60 @Override
56 public Long countByUserIdAndExpireTimeBetween(Long userId, LocalDateTime now, LocalDateTime expireTime) { 61 public Long countByUserIdAndExpireTimeBetween(Long userId, LocalDateTime now, LocalDateTime expireTime) {
57 return this.couponHistoryRepository.countByUserIdAndExpireTimeBetween(userId,now,expireTime); 62 return this.couponHistoryRepository.countByUserIdAndExpireTimeBetween(userId, LocalDateTimeUtil.LocalDateTime2Date(now)
63 , LocalDateTimeUtil.LocalDateTime2Date(expireTime));
58 } 64 }
59 65
60 } 66 }
......
...@@ -34,7 +34,7 @@ public class CouponServiceImpl implements CouponService { ...@@ -34,7 +34,7 @@ public class CouponServiceImpl implements CouponService {
34 Assert.notNull(id, GlobeExceptionMsg.COUPON_ID_IS_NULL); 34 Assert.notNull(id, GlobeExceptionMsg.COUPON_ID_IS_NULL);
35 35
36 Coupon coupon = this.couponRepository.findById(id).orElseGet(Coupon::new); 36 Coupon coupon = this.couponRepository.findById(id).orElseGet(Coupon::new);
37 ValidationUtil.isNull(coupon.getId(),"Coupon","id",id); 37 // ValidationUtil.isNull(coupon.getId(),"Coupon","id",id);
38 return this.couponMapper.toDto(coupon); 38 return this.couponMapper.toDto(coupon);
39 } 39 }
40 40
......
...@@ -30,7 +30,7 @@ public class Member implements Serializable { ...@@ -30,7 +30,7 @@ public class Member implements Serializable {
30 private String platformAccount; 30 private String platformAccount;
31 31
32 /** 会员过期时间 */ 32 /** 会员过期时间 */
33 @Column(name = "vip_expire_time", nullable = false) 33 @Column(name = "vip_expire_time")
34 private Timestamp vipExpireTime; 34 private Timestamp vipExpireTime;
35 35
36 /** 主键 */ 36 /** 主键 */
...@@ -41,15 +41,15 @@ public class Member implements Serializable { ...@@ -41,15 +41,15 @@ public class Member implements Serializable {
41 private Long id; 41 private Long id;
42 42
43 /** 标识 */ 43 /** 标识 */
44 @Column(name = "code", nullable = false) 44 @Column(name = "code")
45 private String code; 45 private String code;
46 46
47 /** 类型 1:大屏;2:小屏 */ 47 /** 类型 1:大屏;2:小屏 */
48 @Column(name = "`type`", nullable = false) 48 @Column(name = "`type`")
49 private Integer type; 49 private Integer type;
50 50
51 /** 状态 0:不可用;1:可用 */ 51 /** 状态 0:不可用;1:可用 */
52 @Column(name = "`status`", nullable = false) 52 @Column(name = "`status`")
53 private Integer status; 53 private Integer status;
54 54
55 /** 昵称 base64 */ 55 /** 昵称 base64 */
...@@ -61,7 +61,7 @@ public class Member implements Serializable { ...@@ -61,7 +61,7 @@ public class Member implements Serializable {
61 private String description; 61 private String description;
62 62
63 /** 性别 0:女;1:男;-1:未知 */ 63 /** 性别 0:女;1:男;-1:未知 */
64 @Column(name = "gender", nullable = false) 64 @Column(name = "gender")
65 private Integer gender; 65 private Integer gender;
66 66
67 /** 生日 */ 67 /** 生日 */
...@@ -81,11 +81,11 @@ public class Member implements Serializable { ...@@ -81,11 +81,11 @@ public class Member implements Serializable {
81 private String tags; 81 private String tags;
82 82
83 /** 是否会员 0:非会员;1:会员 */ 83 /** 是否会员 0:非会员;1:会员 */
84 @Column(name = "vip", nullable = false) 84 @Column(name = "vip")
85 private Integer vip; 85 private Integer vip;
86 86
87 /** 会员等级(对应level表的level字段,非id) */ 87 /** 会员等级(对应level表的level字段,非id) */
88 @Column(name = "`level`", nullable = false) 88 @Column(name = "`level`")
89 private Integer level; 89 private Integer level;
90 90
91 /** 成长值 */ 91 /** 成长值 */
......
...@@ -3,7 +3,11 @@ package com.topdraw.business.module.member.repository; ...@@ -3,7 +3,11 @@ package com.topdraw.business.module.member.repository;
3 import com.topdraw.business.module.member.domain.Member; 3 import com.topdraw.business.module.member.domain.Member;
4 import org.springframework.data.jpa.repository.JpaRepository; 4 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.Modifying;
7 import org.springframework.data.jpa.repository.Query;
8 import org.springframework.data.repository.query.Param;
6 9
10 import java.time.LocalDateTime;
7 import java.util.List; 11 import java.util.List;
8 import java.util.Optional; 12 import java.util.Optional;
9 13
...@@ -18,4 +22,25 @@ public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecif ...@@ -18,4 +22,25 @@ public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecif
18 List<Member> findByUserIptvId(Long id); 22 List<Member> findByUserIptvId(Long id);
19 23
20 Optional<Member> findByIdOrCode(Long id,String code); 24 Optional<Member> findByIdOrCode(Long id,String code);
25
26
27 @Modifying
28 @Query(value = "UPDATE `uc_member` SET `user_iptv_id` = ?2, `update_time` = ?3 , `bind_iptv_platform_type`= 0, " +
29 "`bind_iptv_time`=?3 WHERE `id` = ?1", nativeQuery = true)
30 void updateUserIptvIdById(Long id, Long userIptvId, LocalDateTime now);
31
32 @Modifying
33 @Query(value = "UPDATE `uc_member` SET `exp` = :#{#resources.exp}, `level` = :#{#resources.level} , `update_time`= now() " +
34 " WHERE `id` = :#{#resources.id}", nativeQuery = true)
35 void updateExpAndLevel(@Param("resources") Member member);
36
37 @Modifying
38 @Query(value = "UPDATE `uc_member` SET `points` = :#{#resources.points}, `due_points` = :#{#resources.duePoints} , `update_time`= now() " +
39 " WHERE `id` = :#{#resources.id}", nativeQuery = true)
40 void updatePointAndDuePoint(@Param("resources") Member resources);
41
42 @Modifying
43 @Query(value = "UPDATE `uc_member` SET `coupon_amount` = :#{#resources.couponAmount}, `due_coupon_amount` = :#{#resources.dueCouponAmount} , `update_time`= now() " +
44 " WHERE `id` = :#{#resources.id}", nativeQuery = true)
45 void doUpdateMemberCoupon(@Param("resources") Member member);
21 } 46 }
......
...@@ -115,15 +115,40 @@ public class MemberServiceImpl implements MemberService { ...@@ -115,15 +115,40 @@ public class MemberServiceImpl implements MemberService {
115 } 115 }
116 116
117 @Override 117 @Override
118 @Transactional(rollbackFor = Exception.class)
118 public MemberDTO doUpdateMemberExpAndLevel(Member resources) { 119 public MemberDTO doUpdateMemberExpAndLevel(Member resources) {
119 MemberDTO memberDTO = this.update(resources); 120 this.redisUtils.doLock("member::code" + resources.getCode());
121 try {
122 MemberDTO memberDTO = this.findById(resources.getId());
123 if (Objects.nonNull(memberDTO)) {
124 this.memberRepository.updateExpAndLevel(resources);
125 }
120 return memberDTO; 126 return memberDTO;
127 } catch (Exception e) {
128 e.printStackTrace();
129 throw e;
130 } finally {
131 this.redisUtils.doUnLock("member::code" + resources.getCode());
132 }
121 } 133 }
122 134
123 @Override 135 @Override
136 @Transactional(rollbackFor = Exception.class)
124 public MemberDTO doUpdateMemberCoupon(Member member) { 137 public MemberDTO doUpdateMemberCoupon(Member member) {
125 MemberDTO memberDTO = this.update(member); 138 // MemberDTO memberDTO = this.update(member);
139 this.redisUtils.doLock("member::code" + member.getCode());
140 try {
141 MemberDTO memberDTO = this.findById(member.getId());
142 if (Objects.nonNull(memberDTO)) {
143 this.memberRepository.doUpdateMemberCoupon(member);
144 }
126 return memberDTO; 145 return memberDTO;
146 } catch (Exception e) {
147 e.printStackTrace();
148 throw e;
149 } finally {
150 this.redisUtils.doUnLock("member::code" + member.getCode());
151 }
127 } 152 }
128 153
129 @Override 154 @Override
...@@ -188,21 +213,24 @@ public class MemberServiceImpl implements MemberService { ...@@ -188,21 +213,24 @@ public class MemberServiceImpl implements MemberService {
188 @Transactional(rollbackFor = Exception.class) 213 @Transactional(rollbackFor = Exception.class)
189 public MemberDTO doUpdateMemberPoints(Member resources) { 214 public MemberDTO doUpdateMemberPoints(Member resources) {
190 try { 215 try {
191 this.redisUtils.doLock("member::update::code" + resources.getCode()); 216 this.redisUtils.doLock("member::code" + resources.getCode());
192 217
193 Member member = this.memberRepository.findById(resources.getId()).orElseGet(Member::new); 218 /*ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId());
194 ValidationUtil.isNull(member.getId(), "Member", "id", resources.getId());
195 member.copy(resources); 219 member.copy(resources);
196 220
197 Member _member = this.save(member); 221 Member _member = this.save(member);*/
222 MemberDTO memberDTO = this.findById(resources.getId());
223 if (Objects.nonNull(memberDTO)) {
224 this.memberRepository.updatePointAndDuePoint(resources);
225 }
198 226
199 return this.memberMapper.toDto(_member); 227 return memberDTO;
200 228
201 } catch (Exception e) { 229 } catch (Exception e) {
202 e.printStackTrace(); 230 e.printStackTrace();
203 throw e; 231 throw e;
204 } finally { 232 } finally {
205 this.redisUtils.doUnLock("member::update::code" + resources.getCode()); 233 this.redisUtils.doUnLock("member::code" + resources.getCode());
206 } 234 }
207 } 235 }
208 236
......
...@@ -5,8 +5,16 @@ public enum RightType { ...@@ -5,8 +5,16 @@ public enum RightType {
5 POINTS, 5 POINTS,
6 /**成长值*/ 6 /**成长值*/
7 EXP, 7 EXP,
8 /**优惠券*/ 8 /**优惠券*/
9 COUPON, 9 COUPON,
10 /**活动机会*/
11 ACTIVITYCHANCE,
12 /**积分商品*/
13 POINTGOODS,
14 /**IPTV产品包*/
15 IPTVPRODUCT,
16 /**IPTV观影权益 */
17 IPTVVIEW,
10 /**权益统称*/ 18 /**权益统称*/
11 RIGHTS 19 RIGHTS
12 20
......
...@@ -7,6 +7,7 @@ import com.topdraw.business.module.task.service.dto.TaskDTO; ...@@ -7,6 +7,7 @@ import com.topdraw.business.module.task.service.dto.TaskDTO;
7 import com.topdraw.business.process.domian.TempIptvUser; 7 import com.topdraw.business.process.domian.TempIptvUser;
8 import com.topdraw.business.process.service.TaskOperationService; 8 import com.topdraw.business.process.service.TaskOperationService;
9 import com.topdraw.business.process.service.dto.TaskOperationQueryCriteria; 9 import com.topdraw.business.process.service.dto.TaskOperationQueryCriteria;
10 import com.topdraw.common.IResultInfo;
10 import com.topdraw.common.ResultInfo; 11 import com.topdraw.common.ResultInfo;
11 import io.swagger.annotations.Api; 12 import io.swagger.annotations.Api;
12 import io.swagger.annotations.ApiOperation; 13 import io.swagger.annotations.ApiOperation;
...@@ -36,9 +37,16 @@ public class TaskOperationController { ...@@ -36,9 +37,16 @@ public class TaskOperationController {
36 @PostMapping(value = "/dealTask") 37 @PostMapping(value = "/dealTask")
37 @ApiOperation("事件处理") 38 @ApiOperation("事件处理")
38 @AnonymousAccess 39 @AnonymousAccess
39 public void dealTask(@RequestBody @Validated TaskOperationQueryCriteria criteria) { 40 public IResultInfo dealTask(@RequestBody @Validated TaskOperationQueryCriteria criteria) {
41 log.info("事件处理,开始,参数 ==>> {}", criteria);
42 long l = System.currentTimeMillis();
43
40 // 任务处理 44 // 任务处理
41 this.taskOperationService.dealTask(criteria.getContent()); 45 this.taskOperationService.dealTask(criteria.getContent());
46 long l2 = System.currentTimeMillis();
47 log.info("事件处理,结束,总耗时 ==>> {}", (l2-l));
48
49 return ResultInfo.success();
42 } 50 }
43 51
44 /** 52 /**
......
...@@ -14,18 +14,20 @@ import com.topdraw.business.process.domian.TempCoupon; ...@@ -14,18 +14,20 @@ import com.topdraw.business.process.domian.TempCoupon;
14 import com.topdraw.business.process.service.RightsOperationService; 14 import com.topdraw.business.process.service.RightsOperationService;
15 import com.topdraw.util.TimestampUtil; 15 import com.topdraw.util.TimestampUtil;
16 import com.topdraw.utils.RedisUtils; 16 import com.topdraw.utils.RedisUtils;
17 import lombok.extern.slf4j.Slf4j;
17 import org.springframework.aop.framework.AopContext; 18 import org.springframework.aop.framework.AopContext;
18 import org.springframework.beans.BeanUtils; 19 import org.springframework.beans.BeanUtils;
19 import org.springframework.beans.factory.annotation.Autowired; 20 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
21 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
22 22
23 import java.time.LocalDate;
23 import java.time.LocalDateTime; 24 import java.time.LocalDateTime;
24 import java.util.List; 25 import java.util.List;
25 import java.util.Objects; 26 import java.util.Objects;
26 27
27 28
28 @Service 29 @Service
30 @Slf4j
29 public class CouponOperationServiceImpl implements CouponOperationService { 31 public class CouponOperationServiceImpl implements CouponOperationService {
30 32
31 @Autowired 33 @Autowired
...@@ -40,9 +42,6 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -40,9 +42,6 @@ public class CouponOperationServiceImpl implements CouponOperationService {
40 MemberService memberService; 42 MemberService memberService;
41 43
42 @Autowired 44 @Autowired
43 ThreadPoolTaskExecutor threadPoolTaskExecutor;
44
45 @Autowired
46 private RedisUtils redisUtils; 45 private RedisUtils redisUtils;
47 46
48 // 过期阀值(默认一个月) 47 // 过期阀值(默认一个月)
...@@ -97,24 +96,26 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -97,24 +96,26 @@ public class CouponOperationServiceImpl implements CouponOperationService {
97 Long memberId = tempCoupon.getMemberId(); 96 Long memberId = tempCoupon.getMemberId();
98 Integer rightsAmount = tempCoupon.getRightsAmount(); 97 Integer rightsAmount = tempCoupon.getRightsAmount();
99 try { 98 try {
100 this.redisUtils.doLock("refreshMemberCoupon:" + memberId.toString()); 99
101 // 1.历史总优惠券数量 100 // 1.历史总优惠券数量
102 Long historyCouponCount = this.getTotalHistoryCoupon(memberId); 101 Long historyCouponCount = this.getTotalHistoryCoupon(memberId);
103 // 1.当前总优惠券数量 102 // 1.当前总优惠券数量
104 Long totalCouponCount = this.getTotalCoupon(historyCouponCount,rightsAmount); 103 Long totalCouponCount = this.getTotalCoupon(historyCouponCount, rightsAmount);
105 // 2.获取已过期的优惠券数量 104 // 2.获取已过期的优惠券数量
106 Long expireCouponCount = this.getTotalExpireCoupon(memberId); 105 Long expireCouponCount = this.getTotalExpireCoupon(memberId);
107 // 3.即将过期的优惠券数量 106 // 3.即将过期的优惠券数量
108 Long expireSoonCouponCount = this.getTotalExpireSoonCoupon(memberId,EXPIRE_FACTOR_DAY); 107 Long expireSoonCouponCount = this.getTotalExpireSoonCoupon(memberId, EXPIRE_FACTOR_DAY);
109 // 4.当前优惠券数量 = 总优惠券-已过期的优惠券 108 // 4.当前优惠券数量 = 总优惠券-已过期的优惠券
110 Long currentCoupon = this.getCurrentCoupon(totalCouponCount,expireCouponCount); 109 Long currentCoupon = this.getCurrentCoupon(totalCouponCount, expireCouponCount);
110
111 this.redisUtils.doLock("right::member::id::" + memberId.toString());
111 // 5.更新用户信息(优惠券数量、即将过期的优惠券数量) 112 // 5.更新用户信息(优惠券数量、即将过期的优惠券数量)
112 this.doUpdateMemberInfo(memberId,currentCoupon,expireSoonCouponCount); 113 this.doUpdateMemberInfo(memberId,currentCoupon,expireSoonCouponCount);
113 } catch (Exception e) { 114 } catch (Exception e) {
114 e.printStackTrace(); 115 e.printStackTrace();
115 throw e; 116 throw e;
116 } finally { 117 } finally {
117 this.redisUtils.doUnLock("refreshMemberCoupon:" + memberId.toString()); 118 this.redisUtils.doUnLock("right::member::id::" + memberId.toString());
118 } 119 }
119 } 120 }
120 121
...@@ -133,8 +134,9 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -133,8 +134,9 @@ public class CouponOperationServiceImpl implements CouponOperationService {
133 MemberDTO memberDTO = this.findMemberByMemberId(memberId); 134 MemberDTO memberDTO = this.findMemberByMemberId(memberId);
134 135
135 Member member = new Member(); 136 Member member = new Member();
136 BeanUtils.copyProperties(memberDTO,member); 137 // BeanUtils.copyProperties(memberDTO,member);
137 138 member.setId(memberDTO.getId());
139 member.setCode(memberDTO.getCode());
138 member.setCouponAmount(currentCoupon); 140 member.setCouponAmount(currentCoupon);
139 member.setDueCouponAmount(expireSoonCouponCount); 141 member.setDueCouponAmount(expireSoonCouponCount);
140 member.setUpdateTime(TimestampUtil.now()); 142 member.setUpdateTime(TimestampUtil.now());
...@@ -178,7 +180,7 @@ public class CouponOperationServiceImpl implements CouponOperationService { ...@@ -178,7 +180,7 @@ public class CouponOperationServiceImpl implements CouponOperationService {
178 * @return 180 * @return
179 */ 181 */
180 private Long getTotalExpireCoupon(Long userId) { 182 private Long getTotalExpireCoupon(Long userId) {
181 return this.couponHistoryService.countByUserIdAndExpireTimeBefore(userId,LocalDateTime.now()); 183 return this.couponHistoryService.countByUserIdAndExpireTimeBefore(userId, LocalDateTime.now());
182 } 184 }
183 185
184 186
......
...@@ -8,8 +8,6 @@ import com.topdraw.business.module.member.level.service.MemberLevelService; ...@@ -8,8 +8,6 @@ import com.topdraw.business.module.member.level.service.MemberLevelService;
8 import com.topdraw.business.module.member.level.service.dto.MemberLevelDTO; 8 import com.topdraw.business.module.member.level.service.dto.MemberLevelDTO;
9 import com.topdraw.business.module.member.service.MemberService; 9 import com.topdraw.business.module.member.service.MemberService;
10 import com.topdraw.business.module.member.service.dto.MemberDTO; 10 import com.topdraw.business.module.member.service.dto.MemberDTO;
11 import com.topdraw.business.module.points.available.domain.PointsAvailable;
12 import com.topdraw.business.module.points.detail.domain.PointsDetail;
13 import com.topdraw.business.process.service.ExpOperationService; 11 import com.topdraw.business.process.service.ExpOperationService;
14 import com.topdraw.business.process.service.member.MemberOperationService; 12 import com.topdraw.business.process.service.member.MemberOperationService;
15 import com.topdraw.business.process.domian.TempExp; 13 import com.topdraw.business.process.domian.TempExp;
...@@ -17,16 +15,13 @@ import com.topdraw.util.IdWorker; ...@@ -17,16 +15,13 @@ import com.topdraw.util.IdWorker;
17 import com.topdraw.util.TimestampUtil; 15 import com.topdraw.util.TimestampUtil;
18 import com.topdraw.utils.RedisUtils; 16 import com.topdraw.utils.RedisUtils;
19 import com.topdraw.utils.StringUtils; 17 import com.topdraw.utils.StringUtils;
20 import org.slf4j.Logger; 18 import lombok.extern.slf4j.Slf4j;
21 import org.slf4j.LoggerFactory;
22 import org.springframework.aop.framework.AopContext; 19 import org.springframework.aop.framework.AopContext;
23 import org.springframework.beans.BeanUtils; 20 import org.springframework.beans.BeanUtils;
24 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
25 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
26 import org.springframework.stereotype.Service; 22 import org.springframework.stereotype.Service;
27 import org.springframework.util.CollectionUtils; 23 import org.springframework.util.CollectionUtils;
28 24
29 import java.time.LocalDateTime;
30 import java.util.List; 25 import java.util.List;
31 import java.util.Objects; 26 import java.util.Objects;
32 27
...@@ -34,6 +29,7 @@ import java.util.Objects; ...@@ -34,6 +29,7 @@ import java.util.Objects;
34 * 29 *
35 */ 30 */
36 @Service 31 @Service
32 @Slf4j
37 public class ExpOperationServiceImpl implements ExpOperationService { 33 public class ExpOperationServiceImpl implements ExpOperationService {
38 34
39 @Autowired 35 @Autowired
...@@ -46,9 +42,6 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -46,9 +42,6 @@ public class ExpOperationServiceImpl implements ExpOperationService {
46 MemberService memberService; 42 MemberService memberService;
47 43
48 @Autowired 44 @Autowired
49 ThreadPoolTaskExecutor threadPoolTaskExecutor;
50
51 @Autowired
52 private RedisUtils redisUtils; 45 private RedisUtils redisUtils;
53 46
54 @AsyncMqSend 47 @AsyncMqSend
...@@ -83,23 +76,27 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -83,23 +76,27 @@ public class ExpOperationServiceImpl implements ExpOperationService {
83 */ 76 */
84 private void refresh(TempExp tempExp) { 77 private void refresh(TempExp tempExp) {
85 try { 78 try {
86 this.redisUtils.doLock("uc-refresh-exp:" + tempExp.getMemberId()); 79
87 // 原始积分 80 // 原始经验值
88 long originExp = this.getExpByMemberId(tempExp); 81 long originExp = this.getExpByMemberId(tempExp);
89 // 总积分 82 log.info("----获取会员当前原始经验值 ==>> {}", originExp);
83 // 总经验值
90 long totalExp = this.calculateTotalExp(originExp, tempExp); 84 long totalExp = this.calculateTotalExp(originExp, tempExp);
91 // 1.添加成长值记录 85 log.info("----计算总经验值 ==>> {}", totalExp);
92 // this.threadPoolTaskExecutor.execute(() -> this.doInsertExpDetail(tempExp, originExp, totalExp)); 86
87 this.redisUtils.doLock("right::member::id::" + tempExp.getMemberId());
93 // 2.更新成长值与等级 88 // 2.更新成长值与等级
89 log.info("----更新会员经验值与对应等级 ==>> {}", totalExp);
94 this.refreshMemberExpAndLevel(tempExp, totalExp); 90 this.refreshMemberExpAndLevel(tempExp, totalExp);
95 91
92 log.info("----保存经验值历史 ");
96 this.doInsertExpDetail(tempExp, originExp, totalExp); 93 this.doInsertExpDetail(tempExp, originExp, totalExp);
97 94
98 } catch (Exception e) { 95 } catch (Exception e) {
99 e.printStackTrace(); 96 e.printStackTrace();
100 throw e; 97 throw e;
101 } finally { 98 } finally {
102 this.redisUtils.doUnLock("uc-refresh-exp:" + tempExp.getMemberId()); 99 this.redisUtils.doUnLock("right::member::id::" + tempExp.getMemberId());
103 } 100 }
104 } 101 }
105 102
...@@ -151,8 +148,9 @@ public class ExpOperationServiceImpl implements ExpOperationService { ...@@ -151,8 +148,9 @@ public class ExpOperationServiceImpl implements ExpOperationService {
151 MemberDTO memberDTO = this.findMemberByMemberId(memberId); 148 MemberDTO memberDTO = this.findMemberByMemberId(memberId);
152 149
153 Member member = new Member(); 150 Member member = new Member();
154 BeanUtils.copyProperties(memberDTO, member); 151 // BeanUtils.copyProperties(memberDTO, member);
155 152 member.setId(memberDTO.getId());
153 member.setCode(memberDTO.getCode());
156 member.setExp(totalExp); 154 member.setExp(totalExp);
157 member.setLevel(level); 155 member.setLevel(level);
158 member.setUpdateTime(TimestampUtil.now()); 156 member.setUpdateTime(TimestampUtil.now());
......
...@@ -139,6 +139,8 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -139,6 +139,8 @@ public class PointsOperationServiceImpl implements PointsOperationService {
139 long totalPoints = this.doFreshTrPointsAvailableByAvailablePointsMap(customAvailablePointsMap, currentPoints); 139 long totalPoints = this.doFreshTrPointsAvailableByAvailablePointsMap(customAvailablePointsMap, currentPoints);
140 // 5.即将过期的积分 140 // 5.即将过期的积分
141 long soonExpirePoints = this.getSoonExpirePoints(memberId, tempPoints); 141 long soonExpirePoints = this.getSoonExpirePoints(memberId, tempPoints);
142
143
142 // 6.更新会员积分信息 144 // 6.更新会员积分信息
143 this.freshMemberCurrentPoints(memberId, totalPoints, soonExpirePoints); 145 this.freshMemberCurrentPoints(memberId, totalPoints, soonExpirePoints);
144 146
...@@ -319,9 +321,7 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -319,9 +321,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
319 @Override 321 @Override
320 @Transactional(rollbackFor = Exception.class) 322 @Transactional(rollbackFor = Exception.class)
321 public void grantPointsThroughTempPoint(List<TempPoints> tempPointsList){ 323 public void grantPointsThroughTempPoint(List<TempPoints> tempPointsList){
322 log.info("------->>grantPointsThroughTempRightsList start1");
323 for (TempPoints tempPoints : tempPointsList){ 324 for (TempPoints tempPoints : tempPointsList){
324 log.info("------->>grantPointsThroughTempRightsList start");
325 this.refresh(tempPoints); 325 this.refresh(tempPoints);
326 } 326 }
327 } 327 }
...@@ -445,10 +445,10 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -445,10 +445,10 @@ public class PointsOperationServiceImpl implements PointsOperationService {
445 Long memberId = tempPoints.getMemberId(); 445 Long memberId = tempPoints.getMemberId();
446 log.info("----------->> 会员id ===>>>>" + memberId); 446 log.info("----------->> 会员id ===>>>>" + memberId);
447 try { 447 try {
448 this.redisUtils.doLock("member::id::" + memberId.toString()); 448
449 // 1.可用总积分 449 // 1.可用总积分
450 Long currentPoints = this.findAvailablePointsByMemberId(memberId); 450 Long currentPoints = this.findAvailablePointsByMemberId(memberId);
451 log.info("----------->> 可用总积分 --->>>> {}", currentPoints); 451 log.info("----------->> 获取会员当前可用总积分 --->>>> {}", currentPoints);
452 452
453 // 2.计算总积分 453 // 2.计算总积分
454 Long totalPoints = this.calculateTotalPoints(tempPoints, currentPoints); 454 Long totalPoints = this.calculateTotalPoints(tempPoints, currentPoints);
...@@ -466,6 +466,8 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -466,6 +466,8 @@ public class PointsOperationServiceImpl implements PointsOperationService {
466 long soonExpirePoints = this.getSoonExpirePoints(memberId, tempPoints); 466 long soonExpirePoints = this.getSoonExpirePoints(memberId, tempPoints);
467 log.info("----------->> 即将过期的积分 ------->>>>> {}", soonExpirePoints); 467 log.info("----------->> 即将过期的积分 ------->>>>> {}", soonExpirePoints);
468 468
469 this.redisUtils.doLock("right::member::id::" + memberId.toString());
470
469 // 6.更新会员的总积分 471 // 6.更新会员的总积分
470 log.info("----------->> 更新会员的总积分 ------->>>>> 总积分--->>> {}", totalPoints); 472 log.info("----------->> 更新会员的总积分 ------->>>>> 总积分--->>> {}", totalPoints);
471 this.freshMemberCurrentPoints(memberId, totalPoints, soonExpirePoints); 473 this.freshMemberCurrentPoints(memberId, totalPoints, soonExpirePoints);
...@@ -474,7 +476,7 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -474,7 +476,7 @@ public class PointsOperationServiceImpl implements PointsOperationService {
474 e.printStackTrace(); 476 e.printStackTrace();
475 throw e; 477 throw e;
476 } finally { 478 } finally {
477 this.redisUtils.doUnLock("member::id::" + memberId.toString()); 479 this.redisUtils.doUnLock("right::member::id::" + memberId.toString());
478 } 480 }
479 } 481 }
480 482
...@@ -528,9 +530,10 @@ public class PointsOperationServiceImpl implements PointsOperationService { ...@@ -528,9 +530,10 @@ public class PointsOperationServiceImpl implements PointsOperationService {
528 MemberDTO memberDTO = this.findMemberByMemberId(memberId); 530 MemberDTO memberDTO = this.findMemberByMemberId(memberId);
529 531
530 Member member = new Member(); 532 Member member = new Member();
531 BeanUtils.copyProperties(memberDTO,member); 533 // BeanUtils.copyProperties(memberDTO, member);
532 534 member.setId(memberDTO.getId());
533 member.setPoints(Objects.nonNull(currentPoints)?currentPoints:0); 535 member.setCode(memberDTO.getCode());
536 member.setPoints(Objects.nonNull(currentPoints) ? currentPoints:0);
534 member.setDuePoints(duePoints); 537 member.setDuePoints(duePoints);
535 member.setUpdateTime(TimestampUtil.now()); 538 member.setUpdateTime(TimestampUtil.now());
536 try { 539 try {
......
...@@ -79,6 +79,7 @@ public class RightsOperationServiceImpl implements RightsOperationService { ...@@ -79,6 +79,7 @@ public class RightsOperationServiceImpl implements RightsOperationService {
79 // 2.创建权益历史对象 79 // 2.创建权益历史对象
80 List<RightsHistory> rightsList = this.getRightHistory(tempRightsMap); 80 List<RightsHistory> rightsList = this.getRightHistory(tempRightsMap);
81 if (!CollectionUtils.isEmpty(rightsList)) { 81 if (!CollectionUtils.isEmpty(rightsList)) {
82 log.info("异步保存权益领取历史开始 ==>> [{}]", rightsList);
82 // 3.保存权益历史 83 // 3.保存权益历史
83 this.doInsertTrRightHistory(rightsList); 84 this.doInsertTrRightHistory(rightsList);
84 } 85 }
...@@ -195,23 +196,85 @@ public class RightsOperationServiceImpl implements RightsOperationService { ...@@ -195,23 +196,85 @@ public class RightsOperationServiceImpl implements RightsOperationService {
195 this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS)); 196 this.grantPoint((List<TempPoints>) tempRightsMap.get(RightType.POINTS));
196 log.info(Thread.currentThread().getName() + "=========>> end"); 197 log.info(Thread.currentThread().getName() + "=========>> end");
197 });*/ 198 });*/
198 199 this.threadPoolTaskExecutor.execute(() -> {
199 List<TempPoints> tempPointsList = (List<TempPoints>) tempRightsMap.get(RightType.POINTS); 200 List<TempPoints> tempPointsList = (List<TempPoints>) tempRightsMap.get(RightType.POINTS);
200 if (!CollectionUtils.isEmpty(tempPointsList)) { 201 if (!CollectionUtils.isEmpty(tempPointsList)) {
202 log.info("发放积分开始 ==>> [{}]", tempPointsList);
203 long l = System.currentTimeMillis();
201 // 积分 204 // 积分
202 this.grantPoint(tempPointsList); 205 this.grantPoint(tempPointsList);
206 long l2 = System.currentTimeMillis();
207 log.info("发放积分结束,总耗时 ==>> {}", (l2 - l));
203 } 208 }
209 });
204 210
211 this.threadPoolTaskExecutor.execute(()-> {
205 List<TempExp> tempExpList = (List<TempExp>) tempRightsMap.get(RightType.EXP); 212 List<TempExp> tempExpList = (List<TempExp>) tempRightsMap.get(RightType.EXP);
206 if (!CollectionUtils.isEmpty(tempExpList)) { 213 if (!CollectionUtils.isEmpty(tempExpList)) {
214 log.info("发放成长值开始 ==>> [{}]", tempExpList);
215 long l = System.currentTimeMillis();
207 // 成长值 216 // 成长值
208 this.grantExp(tempExpList); 217 this.grantExp(tempExpList);
218 long l2 = System.currentTimeMillis();
219 log.info("发放成长值结束,总耗时 ==>> {}", (l2 - l));
209 } 220 }
221 });
210 222
223 this.threadPoolTaskExecutor.execute(()-> {
211 List<TempCoupon> tempCouponList = (List<TempCoupon>) tempRightsMap.get(RightType.COUPON); 224 List<TempCoupon> tempCouponList = (List<TempCoupon>) tempRightsMap.get(RightType.COUPON);
212 if (!CollectionUtils.isEmpty(tempCouponList)) { 225 if (!CollectionUtils.isEmpty(tempCouponList)) {
226 log.info("发放优惠券开始 ==>> [{}]", tempCouponList);
227 long l = System.currentTimeMillis();
213 // 优惠券 228 // 优惠券
214 this.grantCoupon(tempCouponList); 229 this.grantCoupon(tempCouponList);
230 long l2 = System.currentTimeMillis();
231 log.info("发放优惠券结束,总耗时 ==>> {}", (l2 - l));
232 }
233 });
234
235
236 // 其他权益
237 this.threadPoolTaskExecutor.execute(()-> {
238 log.info("发放其他权益开始 ==>> [{}]", tempRightsMap);
239 this.grantOtherRight(tempRightsMap);
240 log.info("发放其他权益结束 ==>> [{}]", tempRightsMap);
241 });
242
243 }
244
245 private void grantOtherRight(Map<RightType, Object> tempRightsMap) {
246 Set<RightType> rightTypes = tempRightsMap.keySet();
247 if (Objects.nonNull(rightTypes) && CollectionUtils.isEmpty(rightTypes)) {
248
249 for (RightType rightType : rightTypes) {
250
251 switch (rightType) {
252
253 // 活动机会
254 case ACTIVITYCHANCE:
255
256 break;
257
258 // 积分商品
259 case POINTGOODS:
260
261 break;
262
263 // IPTV产品包
264 case IPTVPRODUCT:
265
266 break;
267
268 // IPTV观影权益
269 case IPTVVIEW:
270
271 break;
272
273 default:
274 break;
275 }
276
277 }
215 } 278 }
216 279
217 } 280 }
......
...@@ -212,37 +212,59 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -212,37 +212,59 @@ public class TaskOperationServiceImpl implements TaskOperationService {
212 212
213 DataSyncMsg dataSyncMsg = JSONUtil.parseMsg2Object(content, DataSyncMsg.class); 213 DataSyncMsg dataSyncMsg = JSONUtil.parseMsg2Object(content, DataSyncMsg.class);
214 Integer event = dataSyncMsg.getEvent(); 214 Integer event = dataSyncMsg.getEvent();
215 DataSyncMsg.MsgData msgData = dataSyncMsg.getMsg(); 215 String msgData1 = dataSyncMsg.getMsgData();
216 DataSyncMsg.MsgData msgData = JSON.parseObject(msgData1, DataSyncMsg.MsgData.class);
217
216 String memberCode = msgData.getMemberCode(); 218 String memberCode = msgData.getMemberCode();
217 Long memberId = msgData.getMemberId(); 219 Long memberId = msgData.getMemberId();
220
221 long l = System.currentTimeMillis();
218 if (StringUtils.isNotBlank(memberCode)) { 222 if (StringUtils.isNotBlank(memberCode)) {
223
219 MemberDTO memberDTO = this.memberService.findByCode(memberCode); 224 MemberDTO memberDTO = this.memberService.findByCode(memberCode);
220 memberId = memberDTO.getId(); 225 log.info("获取会员信息 ==>> {}", memberDTO);
221 }
222 226
223 // 检查当前会员的黑名单状态 227 // 检查当前会员的黑名单状态
224 boolean b = this.validatedMemberBlackStatus(memberId); 228 boolean b = this.validatedMemberBlackStatus(memberDTO);
229 log.info("会员信息 ==>> {} || 会员id ==>> {} || 黑名单状态 ==>> {}", memberDTO, memberDTO.getId(), memberDTO.getBlackStatus());
225 if (!b) { 230 if (!b) {
226 return ResultInfo.forbidden("会员已被加入黑名单"); 231 return ResultInfo.forbidden("会员已被加入黑名单");
227 } 232 }
228 233
234 memberId = memberDTO.getId();
235 }
236
229 // 1.通过任务标识获取任务模板,通过模板参数获取具体的模板 237 // 1.通过任务标识获取任务模板,通过模板参数获取具体的模板
230 TaskTemplate taskTemplate = this.getTaskTemplate(event, dataSyncMsg); 238 TaskTemplate taskTemplate = this.getTaskTemplate(event, dataSyncMsg);
239 log.info("获取任务模板 taskTemplate ==>> {} ", taskTemplate);
240
231 // 2.通过任务模板获取对应的任务列表 241 // 2.通过任务模板获取对应的任务列表
232 List<Task> taskList = this.loadListTaskByTaskTemplate(taskTemplate, dataSyncMsg); 242 List<Task> taskList = this.loadListTaskByTaskTemplate(taskTemplate, dataSyncMsg);
243 log.info("获取任务 taskList ==>> [{}] ", taskList);
244
233 // 4.判断当前用户是否满足任务完成条件 245 // 4.判断当前用户是否满足任务完成条件
234 boolean checkResult = this.checkTaskCompletion(memberId, taskList, event, msgData); 246 boolean checkResult = this.checkTaskCompletion(memberId, taskList, event, msgData);
247 log.info("检查当前会员的任务完成情况 ==>> {} , true:未完成", checkResult);
235 if (checkResult) { 248 if (checkResult) {
236 // 5.权益区分(积分、权益、成长值) 249 // 5.权益区分(积分、权益、成长值)
237 Map<RightType,Object> tempRightsMap = this.distinguishRight(memberId, taskList, msgData, dataSyncMsg); 250 Map<RightType,Object> tempRightsMap = this.distinguishRight(memberId, taskList, msgData, dataSyncMsg);
251 log.info("获取当前任务对应的权益 tempRightsMap ==>> {} ", tempRightsMap);
238 252
239 // 6.风控检查 253 // 6.风控检查
240 boolean result = this.checkRiskManagement(memberId,tempRightsMap); 254 boolean result = this.checkRiskManagement(memberId, tempRightsMap);
255 log.info("针对各项权益检查当前会员是否达到风控值 ==>> {},true:已达到风控指标 ", result);
241 256
242 if (result) throw new BadRequestException("发放失败,已达风控上限"); 257 if (result) throw new BadRequestException("发放失败,已达风控上限");
243 258
259 long l1 = System.currentTimeMillis();
260 log.info("各项检查总耗时 ==>> {}", (l1-l));
261
244 // 7.权益发放 262 // 7.权益发放
263 log.info("下发开始 ==>> {}", tempRightsMap);
264 long l2 = System.currentTimeMillis();
245 this.grantRight(tempRightsMap); 265 this.grantRight(tempRightsMap);
266 long l3 = System.currentTimeMillis();
267 log.info("下发结束,总耗时 ==>> {}", (l3-l2));
246 268
247 } 269 }
248 return ResultInfo.success(); 270 return ResultInfo.success();
...@@ -264,12 +286,10 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -264,12 +286,10 @@ public class TaskOperationServiceImpl implements TaskOperationService {
264 286
265 /** 287 /**
266 * 验证会员信息 288 * 验证会员信息
267 * @param memberId 289 * @param memberDTO
268 * @return 290 * @return
269 */ 291 */
270 private boolean validatedMemberBlackStatus(Long memberId) { 292 private boolean validatedMemberBlackStatus(MemberDTO memberDTO) {
271 log.info("validatedMember -->>【memberId】 -->> " + memberId);
272 MemberDTO memberDTO = this.memberService.findById(memberId);
273 Long blackStatus = memberDTO.getBlackStatus(); 293 Long blackStatus = memberDTO.getBlackStatus();
274 if (Objects.nonNull(blackStatus) && blackStatus == 1) { 294 if (Objects.nonNull(blackStatus) && blackStatus == 1) {
275 log.error("validatedMember -->> 会员已被加入黑名单 【blackStatus】 -->> " + blackStatus); 295 log.error("validatedMember -->> 会员已被加入黑名单 【blackStatus】 -->> " + blackStatus);
...@@ -395,7 +415,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -395,7 +415,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
395 // TODO 权益1发放的策略 415 // TODO 权益1发放的策略
396 Integer rightsSendStrategy = task.getRightsSendStrategy(); 416 Integer rightsSendStrategy = task.getRightsSendStrategy();
397 // 权益分类 417 // 权益分类
398 this.getTempRightType(memberDTO,rights1Id,rights1Amount,rightsSendStrategy,tempCouponList,rightsList); 418 this.getTempRightType(memberDTO,rights1Id,rights1Amount,rightsSendStrategy,tempCouponList,rightsList,map);
399 } 419 }
400 420
401 // 权益2 421 // 权益2
...@@ -405,7 +425,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -405,7 +425,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
405 // TODO 权益2发放的策略 425 // TODO 权益2发放的策略
406 Integer rightsSendStrategy = task.getRightsSendStrategy(); 426 Integer rightsSendStrategy = task.getRightsSendStrategy();
407 // 权权益分类 427 // 权权益分类
408 this.getTempRightType(memberDTO,rights2Id,rights2Amount,rightsSendStrategy,tempCouponList,rightsList); 428 this.getTempRightType(memberDTO,rights2Id,rights2Amount,rightsSendStrategy,tempCouponList,rightsList,map);
409 } 429 }
410 430
411 // 权益3 431 // 权益3
...@@ -415,16 +435,16 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -415,16 +435,16 @@ public class TaskOperationServiceImpl implements TaskOperationService {
415 // TODO 权益3发放的策略 435 // TODO 权益3发放的策略
416 Integer rightsSendStrategy = task.getRightsSendStrategy(); 436 Integer rightsSendStrategy = task.getRightsSendStrategy();
417 // 权益分类 437 // 权益分类
418 this.getTempRightType(memberDTO,rights3Id,rights3Amount,rightsSendStrategy,tempCouponList,rightsList); 438 this.getTempRightType(memberDTO,rights3Id,rights3Amount,rightsSendStrategy,tempCouponList,rightsList,map);
419 } 439 }
420 // 优惠券 440 // 优惠券
421 if (!CollectionUtils.isEmpty(tempCouponList)) { 441 /*if (!CollectionUtils.isEmpty(tempCouponList)) {
422 map.put(RightType.COUPON,tempCouponList); 442 map.put(RightType.COUPON,tempCouponList);
423 } 443 }*/
424 // 权益 444 // 权益
425 if (!CollectionUtils.isEmpty(rightsList)) { 445 /*if (!CollectionUtils.isEmpty(rightsList)) {
426 map.put(RightType.RIGHTS,rightsList); 446 map.put(RightType.RIGHTS,rightsList);
427 } 447 }*/
428 return map; 448 return map;
429 } 449 }
430 450
...@@ -448,7 +468,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -448,7 +468,7 @@ public class TaskOperationServiceImpl implements TaskOperationService {
448 * @param rightsList 468 * @param rightsList
449 */ 469 */
450 private void getTempRightType(MemberDTO memberDTO , Long rightsId, Integer rightsAmount,Integer rightsSendStrategy,List<TempCoupon> tempCouponList, 470 private void getTempRightType(MemberDTO memberDTO , Long rightsId, Integer rightsAmount,Integer rightsSendStrategy,List<TempCoupon> tempCouponList,
451 List<TempRights> rightsList) { 471 List<TempRights> rightsList,Map<RightType,Object> map) {
452 472
453 Long memberId = memberDTO.getId(); 473 Long memberId = memberDTO.getId();
454 String nickname = memberDTO.getNickname(); 474 String nickname = memberDTO.getNickname();
...@@ -461,20 +481,61 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -461,20 +481,61 @@ public class TaskOperationServiceImpl implements TaskOperationService {
461 TempRights tempRights = this.tmpRightsBuild(memberId,memberCode,rightsAmount,rightsDTO); 481 TempRights tempRights = this.tmpRightsBuild(memberId,memberCode,rightsAmount,rightsDTO);
462 rightsList.add(tempRights); 482 rightsList.add(tempRights);
463 483
484 if (!CollectionUtils.isEmpty(rightsList)) {
485 map.put(RightType.RIGHTS,rightsList);
486 }
487
464 // 权益类型 488 // 权益类型
465 String type = rightsDTO.getEntityType(); 489 String type = rightsDTO.getEntityType();
466 switch (type) { 490 switch (type) {
491 // 优惠券
467 case "1": 492 case "1":
468 Long entityId = rightsDTO.getEntityId(); 493 Long entityId1 = rightsDTO.getEntityId();
469 if (Objects.nonNull(entityId)) { 494 if (Objects.nonNull(entityId1)) {
470 CouponDTO couponDTO = this.findCouponById(entityId); 495 CouponDTO couponDTO = this.findCouponById(entityId1);
471 if (Objects.nonNull(couponDTO)) { 496 if (Objects.nonNull(couponDTO.getId())) {
497 // 优惠券
498 TempCoupon tempCoupon = this.tempCouponBuild(memberId, memberCode,rightsAmount, rightsSendStrategy, couponDTO, nickname);
499 tempCouponList.add(tempCoupon);
500 if (!CollectionUtils.isEmpty(tempCouponList)) {
501 map.put(RightType.COUPON,tempCouponList);
502 }
503
504 }
505 }
506 break;
507 // 观影券
508 case "2":
509 Long entityId2 = rightsDTO.getEntityId();
510 if (Objects.nonNull(entityId2)) {
511 CouponDTO couponDTO = this.findCouponById(entityId2);
512 if (Objects.nonNull(couponDTO.getId())) {
472 // 优惠券 513 // 优惠券
473 TempCoupon tempCoupon = this.tempCouponBuild(memberId, memberCode,rightsAmount, rightsSendStrategy, couponDTO, nickname); 514 TempCoupon tempCoupon = this.tempCouponBuild(memberId, memberCode,rightsAmount, rightsSendStrategy, couponDTO, nickname);
474 tempCouponList.add(tempCoupon); 515 tempCouponList.add(tempCoupon);
516
517 if (!CollectionUtils.isEmpty(tempCouponList)) {
518 map.put(RightType.COUPON,tempCouponList);
519 }
475 } 520 }
476 } 521 }
477 break; 522 break;
523 // 活动参与机会
524 case "3":
525 map.put(RightType.ACTIVITYCHANCE, tempRights);
526 break;
527 // 积分商品
528 case "4":
529 map.put(RightType.POINTGOODS, tempRights);
530 break;
531 // IPTV产品包
532 case "5":
533 map.put(RightType.IPTVPRODUCT, tempRights);
534 break;
535 // IPTV观影权益
536 case "6":
537 map.put(RightType.IPTVVIEW, tempRights);
538 break;
478 default: 539 default:
479 break; 540 break;
480 } 541 }
...@@ -911,8 +972,8 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -911,8 +972,8 @@ public class TaskOperationServiceImpl implements TaskOperationService {
911 private List<Task> pickUpTask(List<Task> taskList,DataSyncMsg dataSyncMsg,Integer type) { 972 private List<Task> pickUpTask(List<Task> taskList,DataSyncMsg dataSyncMsg,Integer type) {
912 973
913 List<Task> taskList1 = new ArrayList<>(); 974 List<Task> taskList1 = new ArrayList<>();
914 975 String msgData1 = dataSyncMsg.getMsgData();
915 DataSyncMsg.MsgData msgData = dataSyncMsg.getMsg(); 976 DataSyncMsg.MsgData msgData = JSON.parseObject(msgData1, DataSyncMsg.MsgData.class);
916 977
917 if (Objects.nonNull(msgData.getParam())) { 978 if (Objects.nonNull(msgData.getParam())) {
918 979
...@@ -1042,8 +1103,9 @@ public class TaskOperationServiceImpl implements TaskOperationService { ...@@ -1042,8 +1103,9 @@ public class TaskOperationServiceImpl implements TaskOperationService {
1042 * @param event 任务 1103 * @param event 任务
1043 * @return TaskTemplate 任务模板 1104 * @return TaskTemplate 任务模板
1044 */ 1105 */
1045 private TaskTemplate getTaskTemplate(Integer event, DataSyncMsg msgData) { 1106 private TaskTemplate getTaskTemplate(Integer event, DataSyncMsg dataSyncMsg) {
1046 DataSyncMsg.MsgData msg = msgData.getMsg(); 1107 String msgData1 = dataSyncMsg.getMsgData();
1108 DataSyncMsg.MsgData msg = JSON.parseObject(msgData1, DataSyncMsg.MsgData.class);
1047 1109
1048 if (Objects.nonNull(msg.getParam())) { 1110 if (Objects.nonNull(msg.getParam())) {
1049 1111
......
...@@ -28,7 +28,7 @@ public class DataSyncMsg implements Serializable { ...@@ -28,7 +28,7 @@ public class DataSyncMsg implements Serializable {
28 // 发送时间 28 // 发送时间
29 private LocalDateTime time; 29 private LocalDateTime time;
30 // 消息体 30 // 消息体
31 private MsgData msg; 31 private String msgData;
32 32
33 /** 33 /**
34 * 消息体 34 * 消息体
......
1 package com.topdraw.util; 1 package com.topdraw.util;
2 2
3 import java.time.LocalDate; 3 import java.time.LocalDate;
4 import java.time.LocalDateTime;
5 import java.time.ZoneId;
6 import java.util.Date;
4 7
5 public class LocalDateTimeUtil { 8 public class LocalDateTimeUtil {
6 9
...@@ -16,6 +19,11 @@ public class LocalDateTimeUtil { ...@@ -16,6 +19,11 @@ public class LocalDateTimeUtil {
16 return now+" 23:59:59"; 19 return now+" 23:59:59";
17 } 20 }
18 21
22 public static Date LocalDateTime2Date(LocalDateTime now){
23 Date date = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
24 return date;
25 }
26
19 public static void main(String[] args) { 27 public static void main(String[] args) {
20 String end = todayEnd(); 28 String end = todayEnd();
21 System.out.println("end ==>> "+end); 29 System.out.println("end ==>> "+end);
......
...@@ -45,7 +45,7 @@ spring: ...@@ -45,7 +45,7 @@ spring:
45 hibernate: 45 hibernate:
46 # 生产环境设置成 none,避免程序运行时自动更新数据库结构 46 # 生产环境设置成 none,避免程序运行时自动更新数据库结构
47 ddl-auto: none 47 ddl-auto: none
48 show-sql: true 48 show-sql: false
49 servlet: 49 servlet:
50 multipart: 50 multipart:
51 file-size-threshold: 2KB 51 file-size-threshold: 2KB
...@@ -69,7 +69,7 @@ spring: ...@@ -69,7 +69,7 @@ spring:
69 # publisher-confirms: true #如果对异步消息需要回调必须设置为true 69 # publisher-confirms: true #如果对异步消息需要回调必须设置为true
70 host: 122.112.214.149 # rabbitmq的连接地址 70 host: 122.112.214.149 # rabbitmq的连接地址
71 port: 5672 # rabbitmq的连接端口号 71 port: 5672 # rabbitmq的连接端口号
72 virtual-host: member_center_small_chongshu # rabbitmq的虚拟hosthhh 72 virtual-host: member_center_small_sichuan # rabbitmq的虚拟hosthhh
73 username: guest # rabbitmq的用户名 73 username: guest # rabbitmq的用户名
74 password: guest # rabbitmq的密码 74 password: guest # rabbitmq的密码
75 publisher-confirms: true #如果对异步消息需要回调必须设置为true 75 publisher-confirms: true #如果对异步消息需要回调必须设置为true
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
64 64
65 65
66 <!--监控sql日志输出 --> 66 <!--监控sql日志输出 -->
67 <logger name="jdbc.sqlonly" level="OFF" additivity="false"> 67 <logger name="jdbc.sqlonly" level="INFO" 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>
......
...@@ -10,6 +10,9 @@ import com.topdraw.business.module.member.service.MemberService; ...@@ -10,6 +10,9 @@ import com.topdraw.business.module.member.service.MemberService;
10 import org.junit.Test; 10 import org.junit.Test;
11 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.beans.factory.annotation.Autowired;
12 12
13 import java.time.LocalDate;
14 import java.time.LocalDateTime;
15
13 public class CouponServiceTest extends BaseTest { 16 public class CouponServiceTest extends BaseTest {
14 17
15 @Autowired 18 @Autowired
...@@ -28,6 +31,18 @@ public class CouponServiceTest extends BaseTest { ...@@ -28,6 +31,18 @@ public class CouponServiceTest extends BaseTest {
28 System.out.println(couponHistoryDTO); 31 System.out.println(couponHistoryDTO);
29 } 32 }
30 33
34
35 @Test
36 public void countByUserIdAndExpireTimeBefore(){
37 CouponDTO couponDTO = this.couponService.findById(1L);
38 System.out.println(couponDTO);
39 CouponDTO testvxv = this.couponService.getByCode("testvxv");
40 System.out.println(testvxv);
41
42 Long l = this.couponHistoryService.countByUserIdAndExpireTimeBefore(1L, LocalDateTime.now());
43 System.out.println(l);
44 }
45
31 @Test 46 @Test
32 public void findHistoryBy(){ 47 public void findHistoryBy(){
33 CouponHistoryDTO couponHistoryDTO = this.couponHistoryService.findById(130L); 48 CouponHistoryDTO couponHistoryDTO = this.couponHistoryService.findById(130L);
......
...@@ -26,7 +26,7 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -26,7 +26,7 @@ public class TaskOperationControllerTest extends BaseTest {
26 public void wechatShare() { 26 public void wechatShare() {
27 try { 27 try {
28 String s = "{\"evt\":\"WECHATSHARE\",\"event\":8,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," + 28 String s = "{\"evt\":\"WECHATSHARE\",\"event\":8,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," +
29 "\"msg\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"shareCount\\\":2}\"}}"; 29 "\"msgData\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"shareCount\\\":2}\"}}";
30 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); 30 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
31 pointsQueryCriteria.setContent(s); 31 pointsQueryCriteria.setContent(s);
32 String s1 = JSON.toJSONString(pointsQueryCriteria); 32 String s1 = JSON.toJSONString(pointsQueryCriteria);
...@@ -40,7 +40,7 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -40,7 +40,7 @@ public class TaskOperationControllerTest extends BaseTest {
40 public void completeMemberInfo() { 40 public void completeMemberInfo() {
41 try { 41 try {
42 String s = "{\"evt\":\"completeMemberInfo\",\"event\":7,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1, " + 42 String s = "{\"evt\":\"completeMemberInfo\",\"event\":7,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1, " +
43 "\"msg\":{\"memberCode\":\"1530105170425733120\"}}"; 43 "\"msgData\":{\"memberCode\":\"1530105170425733120\"}}";
44 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); 44 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
45 pointsQueryCriteria.setContent(s); 45 pointsQueryCriteria.setContent(s);
46 String s1 = JSON.toJSONString(pointsQueryCriteria); 46 String s1 = JSON.toJSONString(pointsQueryCriteria);
...@@ -54,7 +54,7 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -54,7 +54,7 @@ public class TaskOperationControllerTest extends BaseTest {
54 public void activity() { 54 public void activity() {
55 try { 55 try {
56 String s = "{\"evt\":\"ACTIVITY\",\"event\":3,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," + 56 String s = "{\"evt\":\"ACTIVITY\",\"event\":3,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," +
57 "\"msg\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"ACTIVITY\\\":3}\"}}"; 57 "\"msgData\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"ACTIVITY\\\":3}\"}}";
58 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); 58 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
59 pointsQueryCriteria.setContent(s); 59 pointsQueryCriteria.setContent(s);
60 String s1 = JSON.toJSONString(pointsQueryCriteria); 60 String s1 = JSON.toJSONString(pointsQueryCriteria);
...@@ -68,7 +68,7 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -68,7 +68,7 @@ public class TaskOperationControllerTest extends BaseTest {
68 public void order() { 68 public void order() {
69 try { 69 try {
70 String s = "{\"evt\":\"order\",\"event\":4,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":2," + 70 String s = "{\"evt\":\"order\",\"event\":4,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":2," +
71 "\"msg\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"GOODS\\\":3}\"}}"; 71 "\"msgData\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"GOODS\\\":3}\"}}";
72 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); 72 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
73 pointsQueryCriteria.setContent(s); 73 pointsQueryCriteria.setContent(s);
74 String s1 = JSON.toJSONString(pointsQueryCriteria); 74 String s1 = JSON.toJSONString(pointsQueryCriteria);
...@@ -82,7 +82,7 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -82,7 +82,7 @@ public class TaskOperationControllerTest extends BaseTest {
82 public void viewing() { 82 public void viewing() {
83 try { 83 try {
84 String s = "{\"evt\":\"VIEWING\",\"event\":2,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," + 84 String s = "{\"evt\":\"VIEWING\",\"event\":2,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," +
85 "\"msg\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"playDuration\\\":10}\"}}"; 85 "\"msgData\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"playDuration\\\":10}\"}}";
86 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); 86 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
87 pointsQueryCriteria.setContent(s); 87 pointsQueryCriteria.setContent(s);
88 String s1 = JSON.toJSONString(pointsQueryCriteria); 88 String s1 = JSON.toJSONString(pointsQueryCriteria);
...@@ -96,7 +96,7 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -96,7 +96,7 @@ 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 "\"msg\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"playDuration\\\":60}\"}}"; 99 "\"msgData\":{\"memberCode\":\"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);
...@@ -110,7 +110,7 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -110,7 +110,7 @@ public class TaskOperationControllerTest extends BaseTest {
110 public void sign() { 110 public void sign() {
111 try { 111 try {
112 String s = "{\"evt\":\"SIGN\",\"event\":6,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," + 112 String s = "{\"evt\":\"SIGN\",\"event\":6,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," +
113 "\"msg\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"SIGN\\\":11}\"}}"; 113 "\"msgData\":{\"memberCode\":\"1530105170425733120\",\"param\":\"{\\\"SIGN\\\":11}\"}}";
114 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); 114 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
115 pointsQueryCriteria.setContent(s); 115 pointsQueryCriteria.setContent(s);
116 this.taskOperationController.dealTask(pointsQueryCriteria); 116 this.taskOperationController.dealTask(pointsQueryCriteria);
...@@ -119,6 +119,18 @@ public class TaskOperationControllerTest extends BaseTest { ...@@ -119,6 +119,18 @@ public class TaskOperationControllerTest extends BaseTest {
119 } 119 }
120 } 120 }
121 121
122 @Test
123 public void login() {
124 try {
125 String s = "{\"evt\":\"LOGIN\",\"event\":1,\"time\":\"2022-05-03 23:10:09\",\"deviceType\":1," +
126 "\"msgData\":{\"memberCode\":\"1537253315610435584\",\"param\":\"{\\\"CONTINUE_LOGIN\\\":2}\"}}";
127 TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria();
128 pointsQueryCriteria.setContent(s);
129 this.taskOperationController.dealTask(pointsQueryCriteria);
130 } catch (Exception e) {
131 e.printStackTrace();
132 }
133 }
122 134
123 135
124 136
......
...@@ -26,7 +26,7 @@ public class TaskOperationServiceTest extends BaseTest { ...@@ -26,7 +26,7 @@ public class TaskOperationServiceTest extends BaseTest {
26 msgData.setDeviceType(2); 26 msgData.setDeviceType(2);
27 27
28 msgData.setAppCode("WEI_XIN_GOLD_PANDA"); 28 msgData.setAppCode("WEI_XIN_GOLD_PANDA");
29 dataSyncMsg.setMsg(msgData); 29 // dataSyncMsg.setMsgData(msgData);
30 30
31 String s = JSON.toJSONString(dataSyncMsg); 31 String s = JSON.toJSONString(dataSyncMsg);
32 this.taskOperationService.dealTask(s); 32 this.taskOperationService.dealTask(s);
......
...@@ -28,7 +28,7 @@ public class MqTest extends BaseTest { ...@@ -28,7 +28,7 @@ public class MqTest extends BaseTest {
28 msgData.setMemberId(1L); 28 msgData.setMemberId(1L);
29 msgData.setDeviceType(2); 29 msgData.setDeviceType(2);
30 msgData.setAppCode("WEI_XIN_GOLD_PANDA"); 30 msgData.setAppCode("WEI_XIN_GOLD_PANDA");
31 dataSyncMsg.setMsg(msgData); 31 // dataSyncMsg.setMsgData(msgData);
32 String s = JSON.toJSONString(dataSyncMsg); 32 String s = JSON.toJSONString(dataSyncMsg);
33 amqpTemplate.convertAndSend( "uc.route.key.direct.event.aaa", s); 33 amqpTemplate.convertAndSend( "uc.route.key.direct.event.aaa", s);
34 } 34 }
......