Browse Source

1、增加企业购买套餐功能

rayson 8 months ago
parent
commit
0cea7e3344
15 changed files with 193 additions and 17 deletions
  1. 3 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/TradeOrderTypeMq.java
  2. 3 11
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/order/TradeOrderTypeEnum.java
  3. 39 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/enterprise/AppRecruitEnterprisePackageController.java
  4. 23 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/order/AppRecruitTradeOrderController.java
  5. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vip/EnterprisePackagePageReqVO.java
  6. 8 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vip/EnterprisePackageRespVO.java
  7. 7 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vip/EnterprisePackageSaveReqVO.java
  8. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/order/AppTradeOrderGetReqVO.java
  9. 8 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/enterprise/EnterprisePackageDO.java
  10. 12 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterprisePackageMapper.java
  11. 1 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/order/TradeOrderMapper.java
  12. 69 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/mq/consumer/EnterpriseUserMemberConsumer.java
  13. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterpriseEntitlementServiceImpl.java
  14. 9 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterprisePackageService.java
  15. 6 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterprisePackageServiceImpl.java

+ 3 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/TradeOrderTypeMq.java

@@ -28,5 +28,8 @@ public class TradeOrderTypeMq {
     /** 用户会员套餐订单 **/
     public static final String USER_MEMBER_ORDER_TOPIC = "USER_MEMBER_ORDER_TOPIC";
 
+    /** 企业会员套餐订单 **/
+    public static final String ENTERPRISE_MEMBER_ORDER_TOPIC = "ENTERPRISE_USER_MEMBER_ORDER_TOPIC";
+
 
 }

+ 3 - 11
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/order/TradeOrderTypeEnum.java

@@ -16,17 +16,9 @@ public enum TradeOrderTypeEnum {
     PLATFORM_ORDER("0", "平台", TradeOrderTypeMq.PLATFORM_ORDER_TOPIC),
     PUBLISH_JOB_ORDER("1", "发布职位", TradeOrderTypeMq.PUBLISH_JOB_ORDER_TOPIC),
     PUBLISH_JOB_HIRE_ORDER("2", "发布众聘职位", TradeOrderTypeMq.PUBLISH_JOB_HIRE_ORDER_TOPIC),
-    // 会员
-    // 用户-14天
-    USER_MEMBER_14_DAY("3", "会员套餐-14天", TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC),
-    // 用户-30天
-    USER_MEMBER_30_DAY("4", "会员套餐-30天", TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC),
-    // 用户-60天
-    USER_MEMBER_60_DAY("5", "会员套餐-30天", TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC),
-    // 用户-90天
-    USER_MEMBER_90_DAY("6", "会员套餐-90天", TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC),
-    // 用户-365天
-    USER_MEMBER_365_DAY("7", "会员套餐-365天", TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC),
+    // 用户会员套餐
+    USER_MEMBER("3", "会员套餐", TradeOrderTypeMq.USER_MEMBER_ORDER_TOPIC),
+    ENTERPRISE_USER_MEMBER("4", "企业会员套餐", TradeOrderTypeMq.ENTERPRISE_MEMBER_ORDER_TOPIC),
     ;
 
     /**

+ 39 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/enterprise/AppRecruitEnterprisePackageController.java

@@ -0,0 +1,39 @@
+package com.citu.module.menduner.system.controller.app.recruit.enterprise;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+import com.citu.module.menduner.system.controller.base.enterprise.vip.EnterprisePackageRespVO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterprisePackageDO;
+import com.citu.module.menduner.system.service.enterprise.vip.EnterprisePackageService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "招聘端 - 企业套餐")
+@RestController
+@RequestMapping("/menduner/system/enterprise-package")
+@Validated
+@Slf4j
+public class AppRecruitEnterprisePackageController {
+
+    @Resource
+    private EnterprisePackageService enterprisePackageService;
+
+    @PreAuthenticated
+    @GetMapping("/list")
+    @Operation(summary = "获得用户套餐列表")
+    public CommonResult<List<EnterprisePackageRespVO>> list() {
+        List<EnterprisePackageDO> list = enterprisePackageService.getList();
+        return success(BeanUtils.toBean(list, EnterprisePackageRespVO.class));
+    }
+}

+ 23 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/order/AppRecruitTradeOrderController.java

@@ -5,13 +5,16 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.framework.signature.core.annotation.ApiSignature;
 import com.citu.module.menduner.common.util.LoginUserContext;
-import com.citu.module.menduner.system.controller.app.recruit.order.vo.*;
+import com.citu.module.menduner.system.controller.app.recruit.order.vo.AppRecruitTradeOrderPageReqVO;
+import com.citu.module.menduner.system.controller.app.recruit.order.vo.AppRecruitTradeOrderRespVO;
 import com.citu.module.menduner.system.controller.base.order.AppTradeOrderCreateReqVO;
 import com.citu.module.menduner.system.controller.base.order.AppTradeOrderGetReqVO;
 import com.citu.module.menduner.system.controller.base.order.AppTradeOrderGetRespVO;
 import com.citu.module.menduner.system.controller.base.order.TradeOrderCreateReqVO;
-import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterprisePackageDO;
 import com.citu.module.menduner.system.enums.order.TradeOrderTypeEnum;
+import com.citu.module.menduner.system.enums.user.MdeUserTypeEnum;
+import com.citu.module.menduner.system.service.enterprise.vip.EnterprisePackageService;
 import com.citu.module.menduner.system.service.order.TradeOrderService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -21,7 +24,10 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.framework.common.pojo.CommonResult.success;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_PACKAGE_NOT_EXISTS;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_REQUEST_ILLEGAL;
 import static com.citu.module.menduner.system.enums.TradeOrderTypeMq.PAY_APP_ENTERPRISE_KEY;
 
 @Tag(name = "招聘端 - 交易订单")
@@ -33,6 +39,10 @@ public class AppRecruitTradeOrderController {
     @Resource
     private TradeOrderService tradeOrderService;
 
+
+    @Resource
+    private EnterprisePackageService enterprisePackageService;
+
     @GetMapping("/page")
     @Operation(summary = "获得订单分页")
     @PreAuthenticated
@@ -53,14 +63,23 @@ public class AppRecruitTradeOrderController {
         dto.setSpuId(reqVO.getSpuId());
         dto.setPrice(reqVO.getPrice());
         dto.setSpuName(reqVO.getSpuName());
-        return success(tradeOrderService.createOrder(dto,PAY_APP_ENTERPRISE_KEY));
+        if (TradeOrderTypeEnum.ENTERPRISE_USER_MEMBER.getType().equals(dto.getType())) {
+            EnterprisePackageDO packageDO = enterprisePackageService.getEnterprisePackage(reqVO.getSpuId());
+            if (null == packageDO) {
+                throw exception(ENTERPRISE_PACKAGE_NOT_EXISTS);
+            }
+            if (null == reqVO.getPrice() || !reqVO.getPrice().equals(packageDO.getPrice())) {
+                throw exception(MDE_REQUEST_ILLEGAL);
+            }
+        }
+        return success(tradeOrderService.createOrder(dto, PAY_APP_ENTERPRISE_KEY));
     }
 
     @GetMapping("/get/unpaid")
     @Operation(summary = "获取待支付的订单")
     @PreAuthenticated
     public CommonResult<AppTradeOrderGetRespVO> getOrderByUnpaid(@Valid AppTradeOrderGetReqVO reqVO) {
-        AppTradeOrderGetRespVO order = tradeOrderService.getOrderByUnpaid(reqVO,LoginUserContext.getEnterpriseId());
+        AppTradeOrderGetRespVO order = tradeOrderService.getOrderByUnpaid(reqVO, LoginUserContext.getEnterpriseId());
         return success(order);
     }
 

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vip/EnterprisePackagePageReqVO.java

@@ -25,6 +25,9 @@ public class EnterprisePackagePageReqVO extends PageParam {
     @Schema(description = "是否推荐")
     private Boolean recommend;
 
+    @Schema(description = "类型")
+    private String type;
+
     @Schema(description = "状态(0正常 1停用 2隐藏)", example = "1")
     private String status;
 

+ 8 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vip/EnterprisePackageRespVO.java

@@ -17,10 +17,18 @@ public class EnterprisePackageRespVO {
     @ExcelProperty("id")
     private Long id;
 
+    @ExcelProperty("类型")
+    @Schema(description = "类型")
+    private String type;
+
     @Schema(description = "套餐名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
     @ExcelProperty("套餐名称")
     private String name;
 
+    @Schema(description = "套餐原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "26254")
+    @ExcelProperty("套餐原价")
+    private Long originalPrice;
+
     @Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "26254")
     @ExcelProperty("套餐价格")
     private Long price;

+ 7 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vip/EnterprisePackageSaveReqVO.java

@@ -1,5 +1,6 @@
 package com.citu.module.menduner.system.controller.base.enterprise.vip;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -13,10 +14,16 @@ public class EnterprisePackageSaveReqVO {
     @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1668")
     private Long id;
 
+    @ExcelProperty("类型")
+    private String type;
+
     @Schema(description = "套餐名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
     @NotEmpty(message = "{1_100_053_002}")
     private String name;
 
+    @Schema(description = "套餐原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "26254")
+    private Long originalPrice;
+
     @Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "26254")
     @NotNull(message = "{1_100_053_003}")
     private Long price;

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/order/AppTradeOrderGetReqVO.java

@@ -13,6 +13,6 @@ public class AppTradeOrderGetReqVO {
     @NotNull(message = "商品编号不能为空")
     private Long spuId;
 
-    @Schema(description = "订单类型 0平台订单|1求职端订单|2招聘端订单|3用户会员-14天|4用户会员-30天|5用户会员-30天|6用户会员-90天|7用户会员-365天", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @Schema(description = "订单类型 0平台订单|1求职端订单|2招聘端订单|3用户套餐|4企业套餐", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private String type;
 }

+ 8 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/enterprise/EnterprisePackageDO.java

@@ -27,10 +27,18 @@ public class EnterprisePackageDO extends TenantBaseDO {
      */
     @TableId
     private Long id;
+    /**
+     * 类型
+     */
+    private String type;
     /**
      * 套餐名称
      */
     private String name;
+    /**
+     * 套餐原价
+     */
+    private Long originalPrice;
     /**
      * 套餐价格
      */

+ 12 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterprisePackageMapper.java

@@ -1,6 +1,7 @@
 package com.citu.module.menduner.system.dal.mysql.enterprise;
 
 
+import com.citu.framework.common.enums.CommonStatusEnum;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -8,6 +9,8 @@ import com.citu.module.menduner.system.controller.base.enterprise.vip.Enterprise
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterprisePackageDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 企业套餐 Mapper
  *
@@ -21,8 +24,17 @@ public interface EnterprisePackageMapper extends BaseMapperX<EnterprisePackageDO
                 .likeIfPresent(EnterprisePackageDO::getName, reqVO.getName())
                 .eqIfPresent(EnterprisePackageDO::getRecommend, reqVO.getRecommend())
                 .eqIfPresent(EnterprisePackageDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(EnterprisePackageDO::getDefaultPackage, reqVO.getDefaultPackage())
+                .eqIfPresent(EnterprisePackageDO::getType, reqVO.getType())
                 .betweenIfPresent(EnterprisePackageDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(EnterprisePackageDO::getId));
     }
 
+    default List<EnterprisePackageDO> list() {
+        return selectList(new LambdaQueryWrapperX<EnterprisePackageDO>()
+                .eq(EnterprisePackageDO::getDefaultPackage, false)
+                .eq(EnterprisePackageDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
+        );
+    }
+
 }

+ 1 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/order/TradeOrderMapper.java

@@ -106,6 +106,7 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
                 .eq(TradeOrderDO::getSpuId, spu_id)
                 .eq(TradeOrderDO::getStatus, TradeOrderStatusEnum.UNPAID.getStatus())
                 .orderByDesc(TradeOrderDO::getCreateTime)
+                .last("limit 1")
         );
 
     }

+ 69 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/mq/consumer/EnterpriseUserMemberConsumer.java

@@ -0,0 +1,69 @@
+package com.citu.module.menduner.system.mq.consumer;
+
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.citu.module.menduner.system.controller.base.enterprise.vip.EnterpriseEntitlementRespVO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseEntitlementDO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterprisePackageDO;
+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.enterprise.vip.EnterpriseEntitlementService;
+import com.citu.module.menduner.system.service.enterprise.vip.EnterprisePackageService;
+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;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StopWatch;
+
+import javax.annotation.Resource;
+
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_PACKAGE_NOT_EXISTS;
+
+/**
+ * 用户会员完成支付 消费
+ **/
+@Slf4j
+@Component
+@RocketMQMessageListener(
+        topic = TradeOrderTypeMq.ENTERPRISE_MEMBER_ORDER_TOPIC,
+        consumerGroup = TradeOrderTypeMq.ENTERPRISE_MEMBER_ORDER_TOPIC + "_CONSUMER"
+)
+public class EnterpriseUserMemberConsumer implements RocketMQListener<Long> {
+
+    @Resource
+    protected EnterprisePackageService enterprisePackageService;
+    @Resource
+    private EnterpriseEntitlementService enterpriseEntitlementService;
+    @Resource
+    private TradeOrderService tradeOrderService;
+
+
+    @Override
+    @DSTransactional
+    public void onMessage(Long orderId) {
+        StopWatch stopWatch = new StopWatch("开通企业会员["+orderId+"]");
+        stopWatch.start();
+        TradeOrderDO order = tradeOrderService.getOrder(orderId);
+        EnterprisePackageDO packageDO = enterprisePackageService.getEnterprisePackage(order.getSpuId());
+        if (null == packageDO) {
+            throw exception(ENTERPRISE_PACKAGE_NOT_EXISTS);
+        }
+        EnterpriseEntitlementRespVO entitlement = enterpriseEntitlementService
+                .getByEnterpriseIdAndUserId(order.getEnterpriseId(), order.getUserId());
+
+        enterpriseEntitlementService.update(EnterpriseEntitlementDO.builder()
+                .id(entitlement.getId())
+                .enterpriseId(order.getEnterpriseId())
+                .userId(order.getUserId())
+                .publishJobCount(entitlement.getPublishJobCount() + packageDO.getPublishJobCount())
+                .searchCount(entitlement.getSearchCount() +packageDO.getSearchCount())
+                .lookCvCount(entitlement.getLookCvCount() +packageDO.getLookCvCount())
+                .personMap(packageDO.getPersonMap())
+                .hireJob(packageDO.getHireJob())
+                .build()
+        );
+        stopWatch.prettyPrint();
+    }
+
+}

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterpriseEntitlementServiceImpl.java

@@ -119,7 +119,7 @@ public class EnterpriseEntitlementServiceImpl implements EnterpriseEntitlementSe
                     .build();
             // 如果vip标识大于0 并且vip时间没有过期,并且创建时间是在2024-1月1号之前的
             if (null != enterprise.getVipFlag()) {
-                if (Integer.valueOf(enterprise.getVipFlag()) > 0
+                if (Integer.parseInt(enterprise.getVipFlag()) > 0
                         && enterprise.getVipExpireDate().isAfter(LocalDateTime.now())
                         && enterprise.getCreateTime().isBefore(LocalDateTime.of(2024, 11, 1, 0, 0, 0))) {
                     // 旧系统会员

+ 9 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterprisePackageService.java

@@ -7,6 +7,7 @@ import com.citu.module.menduner.system.controller.base.enterprise.vip.Enterprise
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterprisePackageDO;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 企业套餐 Service 接口
@@ -59,4 +60,12 @@ public interface EnterprisePackageService {
      * @return 默认套餐
      */
     EnterprisePackageDO getDefaultPackage();
+
+
+    /**
+     * 获得企业套餐列表
+     *
+     * @return 用户套餐列表
+     */
+    List<EnterprisePackageDO> getList();
 }

+ 6 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterprisePackageServiceImpl.java

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_PACKAGE_NOT_EXISTS;
@@ -77,4 +78,9 @@ public class EnterprisePackageServiceImpl implements EnterprisePackageService {
         }
         return defaultPackage;
     }
+
+    @Override
+    public List<EnterprisePackageDO> getList() {
+        return mapper.list();
+    }
 }