Преглед на файлове

1、优化会员套餐逻辑

rayson преди 9 месеца
родител
ревизия
198d8a4f90

+ 8 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/mq/consumer/PublishJobHireConsumer.java

@@ -4,6 +4,7 @@ package com.citu.module.menduner.system.mq.consumer;
 import com.citu.module.menduner.system.dal.dataobject.order.TradeOrderDO;
 import com.citu.module.menduner.system.enums.TradeOrderTypeMq;
 import com.citu.module.menduner.system.service.job.JobAdvertisedService;
+import com.citu.module.menduner.system.service.order.TradeOrderService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
@@ -21,14 +22,18 @@ import java.util.Collections;
         topic = TradeOrderTypeMq.PUBLISH_JOB_HIRE_ORDER_TOPIC,
         consumerGroup = TradeOrderTypeMq.PUBLISH_JOB_HIRE_ORDER_TOPIC + "_CONSUMER"
 )
-public class PublishJobHireConsumer implements RocketMQListener<TradeOrderDO> {
+public class PublishJobHireConsumer implements RocketMQListener<Long> {
+
+    @Resource
+    private TradeOrderService tradeOrderService;
 
     @Resource
     private JobAdvertisedService service;
 
     @Override
-    public void onMessage(TradeOrderDO order) {
-        log.info("接收到队列消息[{}]", order);
+    public void onMessage(Long orderId) {
+        log.info("接收到队列消息[{}]", orderId);
+        TradeOrderDO order = tradeOrderService.getOrder(orderId);
         service.enable(Collections.singletonList(order.getSpuId()));
     }
 }

+ 73 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/mq/consumer/UserMemberConsumer.java

@@ -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());
+
     }
 }

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/mq/producer/OrderProducer.java

@@ -25,7 +25,7 @@ public class OrderProducer {
 
     public void send(TradeOrderDO order) {
         TradeOrderTypeEnum type = TradeOrderTypeEnum.getByType(order.getType());
-        Message<?> message = MessageBuilder.withPayload(order).build();
+        Message<?> message = MessageBuilder.withPayload(order.getId()).build();
         rocketMQTemplate.syncSend(
                 type.getTopic(),
                 message,

+ 4 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/register/EnterpriseRegisterServiceImpl.java

@@ -36,6 +36,8 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 
+import java.util.ArrayList;
+
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.framework.common.util.servlet.ServletUtils.getClientIP;
 import static com.citu.framework.web.core.util.WebFrameworkUtils.getTerminal;
@@ -147,7 +149,8 @@ public class EnterpriseRegisterServiceImpl implements EnterpriseRegisterService
         // 增加企业信息
         Long enterpriseId = enterpriseService.createSimpleEnterprise(
                 enterpriseRegister.getName(), enterpriseRegister.getAnotherName(),
-                reqVO.getPubJobTypePerm(), enterpriseRegister.getContactName(), enterpriseRegister.getPhone(),
+                null==reqVO.getPubJobTypePerm()? new ArrayList<>() : reqVO.getPubJobTypePerm(),
+                enterpriseRegister.getContactName(), enterpriseRegister.getPhone(),
                 enterpriseRegister.getPrepare()
         );
 

+ 11 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/MdeUserService.java

@@ -5,12 +5,12 @@ import com.citu.framework.common.enums.TerminalEnum;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.validation.Mobile;
 import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.*;
-import com.citu.module.menduner.system.controller.app.recruit.user.vo.AppRecruitEnterpriseUserUpdateEmailReqVO;
 import com.citu.module.menduner.system.controller.base.user.MdeUserPageReqVO;
 import com.citu.module.menduner.system.controller.base.user.MdeUserSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
 
 import javax.validation.Valid;
+import java.time.LocalDateTime;
 
 /**
  * 用户登录 Service 接口
@@ -85,7 +85,7 @@ public interface MdeUserService {
      * 基于手机号创建用户。
      * 如果用户已经存在,则直接进行返回
      *
-     * @param phone     手机号
+     * @param phone      手机号
      * @param registerIp 注册 IP
      * @param terminal   终端 {@link TerminalEnum}
      * @return 用户对象
@@ -96,11 +96,11 @@ public interface MdeUserService {
      * 基于手机号创建用户。
      * 如果用户已经存在,则直接进行返回
      *
-     * @param phone     手机号
+     * @param phone      手机号
      * @param inviteCode 邀请码
      * @return 用户对象
      */
-    MdeUserDO createUserIfAbsent(@Mobile String phone,Long inviteCode);
+    MdeUserDO createUserIfAbsent(@Mobile String phone, Long inviteCode);
 
     /**
      * 基于手机号创建用户。
@@ -145,7 +145,7 @@ public interface MdeUserService {
      * 修改手机,基于微信小程序的授权码
      *
      * @param userId 用户编号
-     * @param reqVO 请求信息
+     * @param reqVO  请求信息
      */
     void updateUserMobileByWeixin(Long userId, AppMdeUserUpdatePhoneByWeixinReqVO reqVO);
 
@@ -172,10 +172,16 @@ public interface MdeUserService {
      * @param status 状态
      */
     void updateUserStatus(Long id, String status);
+
     /**
      * 忘记密码
      *
      * @param reqVO 请求信息
      */
     void resetUserPassword(AppMdeUserResetPasswordReqVO reqVO);
+
+    /**
+     * 修改vip
+     **/
+    void updateVip(Long id, String vipFlag, LocalDateTime vipExpireDate);
 }

+ 6 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/MdeUserServiceImpl.java

@@ -389,6 +389,12 @@ public class MdeUserServiceImpl implements MdeUserService {
                 .password(passwordEncoder.encode(reqVO.getPassword())).build());
     }
 
+    @Override
+    public void updateVip(Long id, String vipFlag, LocalDateTime vipExpireDate) {
+        MdeUserDO user = validateUserExists(id);
+        mdeUserMapper.updateById(MdeUserDO.builder().id(id).vipFlag(vipFlag).vipExpireDate(vipExpireDate).build());
+    }
+
     @Override
     public void updateUserStatus(Long id, String status) {
         // 校验用户存在