|
@@ -1,12 +1,22 @@
|
|
|
package com.citu.module.menduner.system.mq.consumer;
|
|
|
|
|
|
import com.citu.module.menduner.system.dal.dataobject.order.TradeOrderDO;
|
|
|
+import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
|
|
|
import com.citu.module.menduner.system.enums.TradeOrderTypeMq;
|
|
|
import com.citu.module.menduner.system.enums.user.UserVipFlagEnum;
|
|
|
+import com.citu.module.menduner.system.service.order.TradeOrderService;
|
|
|
+import com.citu.module.menduner.system.service.user.MdeUserService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
|
|
import org.apache.rocketmq.spring.core.RocketMQListener;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+
|
|
|
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_USER_NOT_EXISTS;
|
|
|
|
|
|
/**
|
|
|
* 众聘职位完成支付 消费
|
|
@@ -17,11 +27,71 @@ import org.springframework.stereotype.Component;
|
|
|
topic = TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC,
|
|
|
consumerGroup = TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC + "_CONSUMER"
|
|
|
)
|
|
|
-public class UserMemberConsumer implements RocketMQListener<TradeOrderDO> {
|
|
|
+public class UserMemberConsumer implements RocketMQListener<Long> {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TradeOrderService tradeOrderService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MdeUserService mdeUserService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断给定的时间是否已过期
|
|
|
+ **/
|
|
|
+ public static boolean isExpired(LocalDateTime expiryTime) {
|
|
|
+ // 获取当前时间
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+
|
|
|
+ // 比较当前时间和到期时间
|
|
|
+ return now.isAfter(expiryTime);
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
- public void onMessage(TradeOrderDO order) {
|
|
|
- log.info("接收到队列消息[{}]", order);
|
|
|
+ public void onMessage(Long orderId) {
|
|
|
+ log.info("接收到队列消息[{}]", orderId);
|
|
|
+ TradeOrderDO order = tradeOrderService.getOrder(orderId);
|
|
|
UserVipFlagEnum vipFlagEnum = UserVipFlagEnum.from(order.getType());
|
|
|
+ // 查询用户
|
|
|
+ MdeUserDO user = mdeUserService.getMdeUser(order.getUserId());
|
|
|
+ if (null == vipFlagEnum || null == user) {
|
|
|
+ throw exception(MDE_USER_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ // 不算今天
|
|
|
+ long day = Long.parseLong(user.getVipFlag()) + 1;
|
|
|
+
|
|
|
+ if (StringUtils.hasText(user.getVipFlag())) {
|
|
|
+ // 没有开过会员
|
|
|
+ user.setVipFlag(vipFlagEnum.getFlag());
|
|
|
+ user.setVipExpireDate(LocalDateTime.now().plusDays(day));
|
|
|
+ } else {
|
|
|
+ // 开过会员
|
|
|
+ if (isExpired(user.getVipExpireDate())) {
|
|
|
+ // 过期值覆盖
|
|
|
+ user.setVipFlag(vipFlagEnum.getFlag());
|
|
|
+ // 不算今天
|
|
|
+ user.setVipExpireDate(LocalDateTime.now().plusDays(day));
|
|
|
+ } else {
|
|
|
+ // 没有过期
|
|
|
+ // TODO 累加时间,如果当前权益大于user.getVipFlag()则覆盖,并且累加时间
|
|
|
+ // TODO 不允许小于当前权益
|
|
|
+ Long currentVipFlag = Long.parseLong(user.getVipFlag());
|
|
|
+ Long newVipFlag = Long.parseLong(vipFlagEnum.getFlag());
|
|
|
+
|
|
|
+ if (currentVipFlag == Long.parseLong(user.getVipFlag())) {
|
|
|
+ // 买一样的,加天数
|
|
|
+ user.setVipExpireDate(user.getVipExpireDate().plusDays(day));
|
|
|
+ } else if (newVipFlag > currentVipFlag) {
|
|
|
+ // 新套餐大于套餐
|
|
|
+ user.setVipFlag(vipFlagEnum.getFlag());
|
|
|
+ user.setVipExpireDate(user.getVipExpireDate().plusDays(day));
|
|
|
+ } else {
|
|
|
+ // 新套餐小于套餐
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ mdeUserService.updateVip(user.getId(), user.getVipFlag(), user.getVipExpireDate());
|
|
|
+
|
|
|
}
|
|
|
}
|