Browse Source

1、增加职位发布的效验

rayson 1 năm trước cách đây
mục cha
commit
d83ea42a52

+ 2 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -240,6 +240,8 @@ public interface ErrorCodeConstants {
     ErrorCode MDE_JOB_ADVERTISED_USER_ID_NOT_NULL = new ErrorCode(1_100_025_005, "发布用户id不能为空");
     ErrorCode MDE_JOB_ADVERTISED_EXP_TYPE_NOT_NULL = new ErrorCode(1_100_025_006, "工作经验不能为空");
     ErrorCode MDE_JOB_ADVERTISED_EDU_TYPE_NOT_NULL = new ErrorCode(1_100_025_007, "学历要求不能为空");
+    ErrorCode MDE_ENTERPRISE_ACCOUNT_BALANCE_NOT_ENOUGH = new ErrorCode(1_100_025_008, "账户余额不足");
+    ErrorCode MDE_ENTERPRISE_ACCOUNT_POINT_NOT_ENOUGH = new ErrorCode(1_100_025_009, "账户积分不足");
 
 
     // ========== 企业招聘者浏览 1_100_026_000 ==========

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

@@ -2,6 +2,7 @@ package com.citu.module.menduner.system.dal.mysql.enterprise;
 
 
 import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
@@ -141,4 +142,12 @@ public interface EnterpriseAccountMapper extends BaseMapperX<EnterpriseAccountDO
         return update(null, lambdaUpdateWrapper);
     }
 
+
+    default EnterpriseAccountDO checkBalance(Long enterpriseId, Long userId, BigDecimal balance) {
+        return selectOne(new LambdaQueryWrapper<EnterpriseAccountDO>()
+                .eq(EnterpriseAccountDO::getEnterpriseId, enterpriseId)
+                .eq(EnterpriseAccountDO::getUserId, userId)
+                .gt(EnterpriseAccountDO::getBalance, balance)
+        );
+    }
 }

+ 10 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/account/EnterpriseAccountService.java

@@ -68,4 +68,14 @@ public interface EnterpriseAccountService {
      * @return 账户对象
      */
     EnterpriseAccountDO get();
+
+    /**
+     * 效验额度是否充足
+     *
+     * @param enterpriseId 企业编号
+     * @param userId       用户编号
+     * @param balance      余额
+     * @return 是否充足 ,false 不足| true 足够
+     **/
+    boolean checkBalance(Long enterpriseId, Long userId, BigDecimal balance);
 }

+ 15 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/account/EnterpriseAccountServiceImpl.java

@@ -82,4 +82,19 @@ public class EnterpriseAccountServiceImpl implements EnterpriseAccountService {
                 LoginUserContext.getUserId(loginUser)
         );
     }
+
+    @Override
+    public boolean checkBalance(Long enterpriseId, Long userId, BigDecimal balance) {
+        EnterpriseAccountDO accountDO = enterpriseAccountMapper.checkBalance(enterpriseId,
+                userId,
+                balance);
+        if (null != accountDO) {
+            return false;
+        }
+        if (null == accountDO.getBalance()) {
+            return false;
+        }
+        // 判断  accountDO.getBalance() 是否大于等于balance
+        return accountDO.getBalance().compareTo(balance) >= 0;
+    }
 }

+ 64 - 15
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java

@@ -1,12 +1,12 @@
 package com.citu.module.menduner.system.service.job;
 
 
-import cn.hutool.core.collection.ListUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.security.core.LoginUser;
+import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppEnterpriseJobHomeRespVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedDetailRespVO;
@@ -24,9 +24,9 @@ import com.citu.module.menduner.system.dal.mysql.job.JobAdvertisedMapper;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import com.citu.module.menduner.system.mq.producer.ESProducer;
 import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
+import com.citu.module.menduner.system.service.enterprise.account.EnterpriseAccountService;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
 import com.citu.module.menduner.system.util.ESOperateEnum;
-import com.citu.module.menduner.common.util.LoginUserContext;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
@@ -40,8 +40,8 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
-import static com.citu.framework.common.exception.enums.GlobalErrorCodeConstants.FORBIDDEN;
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_ENTERPRISE_ACCOUNT_BALANCE_NOT_ENOUGH;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_JOB_ADVERTISED_NOT_EXISTS;
 
 /**
@@ -64,6 +64,9 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     @Resource
     private EnterpriseUserBindService userBindService;
 
+    @Resource
+    private EnterpriseAccountService enterpriseAccountService;
+
     @Resource
     private ESProducer esProducer;
 
@@ -113,7 +116,7 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     @Override
     public PageResult<AppJobAdvertisedHomeRespVO> getRecommendedPage(PageParam pageParam) {
         AppJobAdvertisedPageReqVO pageReqVO =
-                new AppJobAdvertisedPageReqVO(pageParam,AppJobAdvertisedPageReqVO.RECOMMEND);
+                new AppJobAdvertisedPageReqVO(pageParam, AppJobAdvertisedPageReqVO.RECOMMEND);
         pageReqVO.setTop(true);
         return jobAdvertisedMapper.selectPage(pageReqVO);
     }
@@ -121,7 +124,7 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     @Override
     public PageResult<AppJobAdvertisedHomeRespVO> getLatestPage(PageParam pageParam) {
         AppJobAdvertisedPageReqVO pageReqVO =
-                new AppJobAdvertisedPageReqVO(pageParam,AppJobAdvertisedPageReqVO.NEW);
+                new AppJobAdvertisedPageReqVO(pageParam, AppJobAdvertisedPageReqVO.NEW);
         return jobAdvertisedMapper.selectPage(pageReqVO);
     }
 
@@ -135,7 +138,7 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     @Override
     public PageResult<AppJobAdvertisedHomeRespVO> getHirePage(PageParam pageParam) {
         AppJobAdvertisedPageReqVO pageReqVO =
-                new AppJobAdvertisedPageReqVO(pageParam,AppJobAdvertisedPageReqVO.HIRE);
+                new AppJobAdvertisedPageReqVO(pageParam, AppJobAdvertisedPageReqVO.HIRE);
         pageReqVO.setHire(true);
         return jobAdvertisedMapper.selectPage(pageReqVO);
     }
@@ -227,16 +230,14 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     public boolean save(AppAdminJobSaveReqVO reqVO) {
         LoginUser loginUser = LoginUserContext.get();
         JobAdvertisedDO job = JobAdvertisedConvert.INSTANCE.convert3(reqVO);
-        Long enterpriseId =LoginUserContext.getEnterpriseId(loginUser);
+        Long enterpriseId = LoginUserContext.getEnterpriseId(loginUser);
         if (null == reqVO.getId()) {
             // 新增
-
             job.setUserId(loginUser.getId());
-
             job.setEnterpriseId(enterpriseId);
             job.setStatus(MendunerStatusEnum.ENABLE.getStatus());
             job.setTop(false);
-            if(!job.getHire()) {
+            if (!job.getHire()) {
                 job.setHirePoint(BigDecimal.ZERO);
                 job.setHirePrice(BigDecimal.ZERO);
             }
@@ -247,17 +248,65 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
             // 修改
             JobAdvertisedDO entity = get(reqVO.getId());
 
-            if (!Objects.equals(loginUser.getId(), entity.getUserId())
-                    || !Objects.equals(enterpriseId, entity.getEnterpriseId())) {
-                // TODO 不是自己的数据 (企业管理员更改企业其他用户发布的职位信息)
-                // throw exception(FORBIDDEN);
-            }
             job.setId(entity.getId());
             jobOperate(job);
         }
         return true;
     }
 
+    public void validAdd(Long enterpriseId,
+                         Long userId,
+                         AppAdminJobSaveReqVO reqVO) {
+        if (reqVO.getHire()) {
+            if (null != reqVO.getHirePrice()) {
+                // 计算需要支付的额外费用(如果是新职位,就是全额;如果是修改,就是差额)
+                boolean result = enterpriseAccountService
+                        .checkBalance(enterpriseId, userId, reqVO.getHirePrice());
+                if (!result) {
+                    // 余额不足
+                    throw exception(MDE_ENTERPRISE_ACCOUNT_BALANCE_NOT_ENOUGH);
+                }
+            }
+            if (null != reqVO.getHirePoint()) {
+                // 积分
+
+            }
+        }
+
+    }
+
+    public void validUpdate(Long enterpriseId,
+                            Long userId,
+                            JobAdvertisedDO entity,
+                            AppAdminJobSaveReqVO reqVO) {
+
+        if (!Objects.equals(userId, entity.getUserId())
+                || !Objects.equals(enterpriseId, entity.getEnterpriseId())) {
+            // TODO 不是自己的数据 (企业管理员更改企业其他用户发布的职位信息)
+            // throw exception(FORBIDDEN);
+        }
+
+        if (reqVO.getHire()) {
+            if (null != reqVO.getHirePrice()) {
+                // 计算需要支付的额外费用(如果是新职位,就是全额;如果是修改,就是差额)
+                BigDecimal extraCost = reqVO.getId() == null ? reqVO.getHirePrice()
+                        : reqVO.getHirePrice().subtract(entity.getHirePrice());
+
+                boolean result = enterpriseAccountService
+                        .checkBalance(enterpriseId, userId, extraCost);
+                if (!result) {
+                    // 余额不足
+                    throw exception(MDE_ENTERPRISE_ACCOUNT_BALANCE_NOT_ENOUGH);
+                }
+            }
+            if (null != reqVO.getHirePoint()) {
+                // 积分
+
+            }
+        }
+
+    }
+
     public JobAdvertisedDO get(Long id) {
         JobAdvertisedDO job = jobAdvertisedMapper.selectById(id);
         if (null == job) {

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

@@ -65,5 +65,4 @@ public interface UserAccountService {
      */
     UserAccountDO get();
 
-
 }

+ 2 - 0
menduner/menduner-system-biz/src/main/resources/i18n/messages_en_US.properties

@@ -187,6 +187,8 @@
 1_100_025_005=The publishing user ID cannot be empty
 1_100_025_006=Work experience cannot be empty
 1_100_025_007=Educational requirements cannot be empty
+1_100_025_008=Insufficient account balance
+1_100_025_009=Insufficient account points
 # ========== 企业招聘者浏览 1_100_026_000 ==========
 1_100_026_001=Enterprise recruiter browsing does not exist
 # ========== 人才-企业关注订阅 1_100_027_000 ==========

+ 2 - 0
menduner/menduner-system-biz/src/main/resources/i18n/messages_zh_CN.properties

@@ -187,6 +187,8 @@
 1_100_025_005=发布用户id不能为空
 1_100_025_006=工作经验不能为空
 1_100_025_007=学历要求不能为空
+1_100_025_008=账户余额不足
+1_100_025_009=账户积分不足
 # ========== 企业招聘者浏览 1_100_026_000 ==========
 1_100_026_001=企业招聘者浏览不存在
 # ========== 人才-企业关注订阅 1_100_027_000 ==========