Procházet zdrojové kódy

1、更改投递简历的方法

rayson před 1 rokem
rodič
revize
973c0fcd70

+ 9 - 11
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/person/AppAdminPersonCvController.java

@@ -42,9 +42,6 @@ public class AppAdminPersonCvController {
     @Resource
     private PersonIntegrationService personIntegrationService;
 
-    @Resource
-    private HireJobIntegrationService hireJobIntegrationService;
-
     @Resource
     private JobCvRelService jobCvRelService;
 
@@ -70,13 +67,13 @@ public class AppAdminPersonCvController {
         return success(jobIntegrationService.unfitPage(pageReqVO));
     }
 
-    @PreAuthenticated
-    @GetMapping("/hire/page")
-    @Operation(summary = "获得赏金投递职位分页")
-    public CommonResult<PageResult<AppAdminHireJobCvRelRespVO>> page
-            (@Valid AppAdminHireJobCvRelPageReqVO pageReqVO) {
-        return success(hireJobIntegrationService.page(pageReqVO));
-    }
+//    @PreAuthenticated
+//    @GetMapping("/hire/page")
+//    @Operation(summary = "获得赏金投递职位分页")
+//    public CommonResult<PageResult<AppAdminHireJobCvRelRespVO>> page
+//            (@Valid AppAdminHireJobCvRelPageReqVO pageReqVO) {
+//        return success(hireJobIntegrationService.page(pageReqVO));
+//    }
 
 
     @PreAuthenticated
@@ -120,6 +117,7 @@ public class AppAdminPersonCvController {
     @PostMapping("/settlement")
     @Operation(summary = "赏金职位结算")
     public CommonResult<Boolean> settlement(@RequestParam("id") Long id) {
-        return success(hireJobIntegrationService.settlement(id));
+        interviewInviteService.settlement(id);
+        return success(true);
     }
 }

+ 0 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/person/cv/AppAdminJobCvRelPageReqVO.java

@@ -26,6 +26,4 @@ public class AppAdminJobCvRelPageReqVO extends AppAdminPersonPageReqVO {
     @Schema(description = "投递人联系电话")
     private String phone;
 
-    @Schema(description = "是否雇佣 (众聘)")
-    private Boolean hire;
 }

+ 4 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/person/cv/AppAdminJobCvRelRespVO.java

@@ -30,9 +30,12 @@ public class AppAdminJobCvRelRespVO {
     @Schema(description = "更新时间")
     private LocalDateTime updateTime;
 
-    @Schema(description = "人才信息")
+    @Schema(description = "投递人员信息")
     private AppAdminPersonSimpleRespVO person;
 
+    @Schema(description = "推荐的人员信息")
+    private AppAdminPersonSimpleRespVO recommendPerson;
+
     @Schema(description = "招聘信息")
     private AppAdminJobSimpleRespVO job;
 

+ 40 - 9
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobCvRelMapper.java

@@ -46,27 +46,58 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
 
 
     default PageResult<AppAdminJobCvRelRespVO> selectPage(AppAdminJobCvRelPageReqVO reqVO) {
+//        // 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
+//        MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
+//        wrapper.selectAsClass(JobCvRelDO.class, AppAdminJobCvRelRespVO.class);
+//        wrapper.selectAssociation(JobAdvertisedDO.class, AppAdminJobCvRelRespVO::getJob);
+//        wrapper.selectAssociation(PersonInfoDO.class, AppAdminJobCvRelRespVO::getPerson);
+//
+//        // 投递的职位 inner 招聘职位
+//        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, JobCvRelDO::getJobId);
+//        // 招聘职位的条件
+//        wrapper.eqIfExists(JobCvRelDO::getJobId, reqVO.getJobId());
+//        wrapper.eqIfPresent(JobCvRelDO::getStatus, reqVO.getStatus());
+//        wrapper.eqIfExists(JobCvRelDO::getType, reqVO.getType());
+//
+//        // 投递的职位 inner 人才信息
+//        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
+//        // 人才相关的条件
+//        wrapper.eqIfExists(PersonInfoDO::getJobStatus, reqVO.getJobStatus());
+//        wrapper.eqIfExists(PersonInfoDO::getEduType, reqVO.getEduType());
+//        wrapper.eqIfExists(PersonInfoDO::getExpType, reqVO.getExpType());
+//        wrapper.likeIfExists(PersonInfoDO::getName, reqVO.getName());
+//        wrapper.likeIfExists(PersonInfoDO::getUserId, reqVO.getUserId());
+//
+//        setUnfitCandidate(wrapper);
+//
+//        wrapper.orderByDesc(JobCvRelDO::getUpdateTime);
+//        return selectJoinPage(reqVO, AppAdminJobCvRelRespVO.class, wrapper);
         // 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
         MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
         wrapper.selectAsClass(JobCvRelDO.class, AppAdminJobCvRelRespVO.class);
         wrapper.selectAssociation(JobAdvertisedDO.class, AppAdminJobCvRelRespVO::getJob);
-        wrapper.selectAssociation(PersonInfoDO.class, AppAdminJobCvRelRespVO::getPerson);
+        wrapper.selectAssociation("person", PersonInfoDO.class, AppAdminJobCvRelRespVO::getPerson);
+        wrapper.selectAssociation("recommend", PersonInfoDO.class, AppAdminJobCvRelRespVO::getRecommendPerson);
 
         // 投递的职位 inner 招聘职位
         wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, JobCvRelDO::getJobId);
         // 招聘职位的条件
         wrapper.eqIfExists(JobCvRelDO::getJobId, reqVO.getJobId());
-        wrapper.eqIfPresent(JobCvRelDO::getStatus, reqVO.getStatus());
+        wrapper.eqIfExists(JobCvRelDO::getStatus, reqVO.getStatus());
         wrapper.eqIfExists(JobCvRelDO::getType, reqVO.getType());
+        wrapper.eqIfExists(JobCvRelDO::getRecommendUserId, reqVO.getRecommendUserId());
+        wrapper.likeIfExists(JobCvRelDO::getName, reqVO.getName());
+        wrapper.likeIfExists(JobCvRelDO::getPhone, reqVO.getPhone());
 
-        // 投递的职位 inner 人才信息
-        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
+        // 投递的职位 inner 人才信息 (投递人)
+        wrapper.innerJoin(PersonInfoDO.class, "person", PersonInfoDO::getUserId, JobCvRelDO::getUserId);
         // 人才相关的条件
-        wrapper.eqIfExists(PersonInfoDO::getJobStatus, reqVO.getJobStatus());
-        wrapper.eqIfExists(PersonInfoDO::getEduType, reqVO.getEduType());
-        wrapper.eqIfExists(PersonInfoDO::getExpType, reqVO.getExpType());
-        wrapper.likeIfExists(PersonInfoDO::getName, reqVO.getName());
-        wrapper.likeIfExists(PersonInfoDO::getUserId, reqVO.getUserId());
+        wrapper.likeIfExists("person.name", reqVO.getName());
+
+        // 投递的职位 inner 人才信息 (推荐人)
+        wrapper.leftJoin(PersonInfoDO.class, "recommend", PersonInfoDO::getUserId, JobCvRelDO::getRecommendUserId);
+        // 人才相关的条件
+        wrapper.likeIfExists("recommend.name", reqVO.getName());
 
         setUnfitCandidate(wrapper);
 

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

@@ -145,4 +145,5 @@ public interface InterviewInviteService {
      * @param id id
      */
     void entry(Long id);
+
 }

+ 157 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/interview/InterviewInviteServiceImpl.java

@@ -13,19 +13,28 @@ import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.contact.EnterpriseUserContactRespVO;
 import com.citu.module.menduner.system.controller.base.interview.InterviewInvitePageReqVO;
 import com.citu.module.menduner.system.controller.base.interview.InterviewInviteSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.hire.HireCommissionRatioDO;
 import com.citu.module.menduner.system.dal.dataobject.interview.InterviewInviteDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
 import com.citu.module.menduner.system.dal.mysql.interview.InterviewInviteMapper;
 import com.citu.module.menduner.system.dal.mysql.job.JobAdvertisedMapper;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.BalanceBizTypeEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
 import com.citu.module.menduner.system.enums.cv.ConversationStatusEnum;
 import com.citu.module.menduner.system.enums.interview.InterviewInviteStatusEnum;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
 import com.citu.module.menduner.system.service.hire.HireCommissionRatioService;
+import com.citu.module.menduner.system.service.job.JobCvRelService;
 import com.citu.module.menduner.system.service.record.EnterpriseAccountRecordService;
 import com.citu.module.menduner.system.service.record.UserAccountRecordService;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -49,6 +58,10 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
     @Resource
     private HireCommissionRatioService ratioService;
 
+    @Resource
+    private JobCvRelService jobCvRelService;
+
+
     @Resource
     private UserAccountRecordService userAccountRecordService;
 
@@ -251,8 +264,152 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         interviewInvite.setStatus(ConversationStatusEnum.SETTLEMENT.getStatus());
         mapper.updateById(interviewInvite);
 
+        // 获取 面试的求职者投递的简历信息
+        JobCvRelDO cv = jobCvRelService
+                .selectByUserIdAndJobId(interviewInvite.getUserId(), interviewInvite.getJobId());
+
+        // 猎头、 推荐人、投递人
+        // 获取比例配置
+        HireCommissionRatioDO ratio = ratioService.get();
+
+        JobAdvertisedDO job = jobAdvertisedMapper.selectById(cv.getJobId());
+
+        if (null != job.getHirePrice()) {
+            // 余额结算
+            priceSettlement(job, ratio, cv);
+        }
+
+        if (null != job.getHirePoint()) {
+            // 积分结算
+            pointSettlement(job, ratio, cv);
+        }
         //TODO 发送推送消息
     }
 
+    /**
+     * 余额结算
+     *
+     * @param job   职位信息
+     * @param ratio 佣金比例
+     * @param cv    投递信息
+     **/
+    public void priceSettlement(JobAdvertisedDO job, HireCommissionRatioDO ratio, JobCvRelDO cv) {
+        BigDecimal hirePrice = job.getHirePrice();
+        // 总比例
+        BigDecimal totalRate = BigDecimal.valueOf(100);
+        // 猎头佣金
+        BigDecimal headhuntPrice = hirePrice.multiply(ratio.getHeadhuntRate())
+                .divide(totalRate, 2, RoundingMode.HALF_UP);
+        // 推荐人佣金
+        BigDecimal recommendPrice = hirePrice.multiply(ratio.getRecommendRate())
+                .divide(totalRate, 2, RoundingMode.HALF_UP);
+        // 投递人佣金
+        BigDecimal cvPrice = hirePrice.multiply(ratio.getCvRate())
+                .divide(totalRate, 2, RoundingMode.HALF_UP);
+
+        // 猎头 (平台自己)
+        if (headhuntPrice.compareTo(BigDecimal.ZERO) > 0) {
+            enterpriseAccountRecordService.createBalanceRecord(
+                    1L,
+                    1L,
+                    BalanceBizTypeEnum.PLATFORM_COMMISSION.getName(),
+                    MathOperationEnum.ADD,
+                    headhuntPrice,
+                    BalanceBizTypeEnum.PLATFORM_COMMISSION,
+                    String.valueOf(job.getId())
+            );
+        }
+
+        // 推荐人
+        if (headhuntPrice.compareTo(BigDecimal.ZERO) > 0) {
+            userAccountRecordService.createBalanceRecord(
+                    cv.getRecommendUserId(),
+                    BalanceBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
+                    MathOperationEnum.ADD,
+                    recommendPrice,
+                    BalanceBizTypeEnum.RECOMMENDED_POSITIONS,
+                    String.valueOf(job.getId())
+            );
+        }
+
+        // 投递人
+        if (headhuntPrice.compareTo(BigDecimal.ZERO) > 0) {
+            userAccountRecordService.createBalanceRecord(
+                    cv.getUserId(),
+                    BalanceBizTypeEnum.DELIVERY_PERSON.getName(),
+                    MathOperationEnum.ADD,
+                    cvPrice,
+                    BalanceBizTypeEnum.DELIVERY_PERSON,
+                    String.valueOf(job.getId())
+            );
+        }
+    }
+
+    /**
+     * 积分结算
+     *
+     * @param job   职位信息
+     * @param ratio 佣金比例
+     * @param cv    投递信息
+     **/
+    public void pointSettlement(JobAdvertisedDO job, HireCommissionRatioDO ratio, JobCvRelDO cv) {
+        Integer hirePoint = job.getHirePoint();
+        int totalRate = 100; // 总比例
+
+        // 猎头佣金
+        int headhuntPoint = (int) (hirePoint * ratio.getHeadhuntRate().intValue() / (long) totalRate);
+
+        // 推荐人佣金
+        int recommendPoint = (int) (hirePoint * ratio.getRecommendRate().intValue() / (long) totalRate);
+
+        // 投递人佣金
+        int cvPoint = (int) (hirePoint * ratio.getCvRate().intValue() / (long) totalRate);
+
+        // 由于比例之和可能不等于100%,剩余的点数可能需要进行分配或处理
+        int remainingPoint = hirePoint - (headhuntPoint + recommendPoint + cvPoint);
+
+        // 这里你可以选择将剩余点数分配给任意一方,或者按照比例再次分配
+        // 将剩余点数全部分配给猎头
+        headhuntPoint += remainingPoint;
+
+        // 猎头 (平台自己)
+        if (headhuntPoint > 0) {
+            enterpriseAccountRecordService.createPointRecord(
+                    1L,
+                    1L,
+                    PointBizTypeEnum.PLATFORM_COMMISSION.getName(),
+                    MathOperationEnum.ADD,
+                    headhuntPoint,
+                    PointBizTypeEnum.PLATFORM_COMMISSION,
+                    String.valueOf(job.getId())
+            );
+        }
+
+        // 推荐人
+        if (headhuntPoint > 0) {
+            userAccountRecordService.createPointRecord(
+                    cv.getRecommendUserId(),
+                    "",
+                    PointBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
+                    MathOperationEnum.ADD,
+                    recommendPoint,
+                    PointBizTypeEnum.RECOMMENDED_POSITIONS,
+                    String.valueOf(job.getId())
+            );
+        }
+
+        // 投递人
+        if (headhuntPoint > 0) {
+            userAccountRecordService.createPointRecord(
+                    cv.getUserId(),
+                    "",
+                    PointBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
+                    MathOperationEnum.ADD,
+                    cvPoint,
+                    PointBizTypeEnum.RECOMMENDED_POSITIONS,
+                    String.valueOf(job.getId())
+            );
+        }
+    }
 
 }