Просмотр исходного кода

1、优化众聘结算逻辑
2、调整统计导出的简历字段顺序
3、

rayson 9 месяцев назад
Родитель
Сommit
7d5382e0b5

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/resume/AppPersonInfoSaveReqVO.java

@@ -36,7 +36,7 @@ public class AppPersonInfoSaveReqVO {
     @Schema(description = "出生日期")
     private LocalDateTime birthday;
 
-    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3保密)", example = "1")
+    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3暂不透露)", example = "1")
     private String maritalStatus;
 
     //    @NotNull(message = "{1_100_001_009}")

+ 24 - 21
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/analysis/excel/RecruitJobCvRelAnalysisExcelRespVO.java

@@ -17,14 +17,31 @@ import static com.citu.module.menduner.system.enums.DictTypeConstants.*;
 @ExcelIgnoreUnannotated
 public class RecruitJobCvRelAnalysisExcelRespVO {
 
+    // ========== 招聘职位信息 ==========
+
+    @ExcelProperty("招聘职位标题")
+    @Schema(description = "招聘职位标题", example = "项目经理")
+    private String jobName;
+
+    @ExcelProperty("薪酬from")
+    @Schema(description = "薪酬from", example = "6")
+    private BigDecimal payFrom;
+
+    @ExcelProperty("薪酬to")
+    @Schema(description = "薪酬to", example = "12")
+    private BigDecimal payTo;
+
+    @ExcelProperty(value = "薪酬单位", converter = DictConvert.class)
+    @DictFormat(MENDUNER_PAY_UNIT)
+    @Schema(description = "薪酬单位(menduner_pay_unit)", example = "月/年")
+    private String payUnit;
+
+    // ========== 简历信息 ==========
+
     @ExcelProperty("简历附件标题")
     @Schema(description = "简历附件标题")
     private String title;
 
-    @ExcelProperty("简历附件地址")
-    @Schema(description = "简历附件地址")
-    private String url;
-
     @ExcelProperty("投递用户姓名")
     @Schema(description = "真实姓名", example = "王五")
     private String name;
@@ -57,24 +74,10 @@ public class RecruitJobCvRelAnalysisExcelRespVO {
     @Schema(description = "投递时间")
     private LocalDateTime createTime;
 
-    // ========== 招聘职位信息 ==========
-
-    @ExcelProperty("招聘职位标题")
-    @Schema(description = "招聘职位标题", example = "项目经理")
-    private String jobName;
-
-    @ExcelProperty("薪酬from")
-    @Schema(description = "薪酬from", example = "6")
-    private BigDecimal payFrom;
-
-    @ExcelProperty("薪酬to")
-    @Schema(description = "薪酬to", example = "12")
-    private BigDecimal payTo;
+    @ExcelProperty("简历附件地址")
+    @Schema(description = "简历附件地址")
+    private String url;
 
-    @ExcelProperty(value = "薪酬单位", converter = DictConvert.class)
-    @DictFormat(MENDUNER_PAY_UNIT)
-    @Schema(description = "薪酬单位(menduner_pay_unit)", example = "月/年")
-    private String payUnit;
 
 
 }

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

@@ -24,7 +24,7 @@ public class PersonMapQueryReqVO extends PageParam {
     @Schema(description = "年龄", example = "[18,20]")
     private Integer[] age;
 
-    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3保密)", example = "1")
+    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3暂不透露)", example = "1")
     private String maritalStatus;
 
     @Schema(description = "现居住地", example = "8366")

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonInfoPageReqVO.java

@@ -43,7 +43,7 @@ public class PersonInfoPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private LocalDateTime birthday;
 
-    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3保密)", example = "1")
+    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3暂不透露)", example = "1")
     private String maritalStatus;
 
     @Schema(description = "现居住地", example = "8366")

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonInfoRespVO.java

@@ -49,8 +49,8 @@ public class PersonInfoRespVO {
     @ExcelProperty("出生日期")
     private LocalDateTime birthday;
 
-    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3保密)", example = "1")
-    @ExcelProperty("婚姻状况(0未婚 1已婚 2离异 3保密)")
+    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3暂不透露)", example = "1")
+    @ExcelProperty("婚姻状况(0未婚 1已婚 2离异 3暂不透露)")
     private String maritalStatus;
 
     @Schema(description = "现居住地", example = "8366")

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonInfoSaveReqVO.java

@@ -41,7 +41,7 @@ public class PersonInfoSaveReqVO {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private LocalDateTime birthday;
 
-    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3保密)", example = "1")
+    @Schema(description = "婚姻状况(0未婚 1已婚 2离异 3暂不透露)", example = "1")
     private String maritalStatus;
 
     @Schema(description = "现居住地", example = "8366")

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/PersonInfoDO.java

@@ -68,7 +68,7 @@ public class PersonInfoDO extends TenantBaseDO {
      */
     private LocalDateTime birthday;
     /**
-     * 婚姻状况(0未婚 1已婚 2离异 3保密
+     * 婚姻状况(0未婚 1已婚 2离异 3暂不透露
      */
     private String maritalStatus;
     /**

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

@@ -29,6 +29,7 @@ import com.citu.module.menduner.system.service.job.JobCvRelService;
 import com.citu.module.pay.api.wallet.PayWalletApi;
 import com.citu.module.pay.api.wallet.dto.PayWalletAddBalanceDTO;
 import com.citu.module.pay.enums.wallet.PayWalletBizTypeEnum;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -49,6 +50,7 @@ import static com.citu.module.menduner.system.util.RecruitAnalysisUtils.generate
  *
  * @author Rayson
  */
+@Slf4j
 @Service
 @Validated
 public class InterviewInviteServiceImpl implements InterviewInviteService {
@@ -70,6 +72,10 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
 
     @Resource
     private JobAdvertisedService jobAdvertisedService;
+    /**
+     * 比例倍数 1:10 (点数转钱包的比例)
+     **/
+    private static final Integer RATIO_MULTIPLE = 10;
 
     /**
      * 计算佣金
@@ -84,8 +90,12 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         BigDecimal hirePriceBD = BigDecimal.valueOf(hirePrice);
 
         // 计算佣金
-        // 使用 (hirePrice * rate + totalRate / 2) / totalRate 来确保四舍五入
-        BigDecimal commission = hirePriceBD.multiply(rate).add(totalRate.divide(BigDecimal.valueOf(2), 0, RoundingMode.HALF_UP)).divide(totalRate, 0, RoundingMode.HALF_UP);
+        BigDecimal commission = hirePriceBD.multiply(rate).divide(totalRate, 0, RoundingMode.HALF_UP);
+
+        // 确保佣金不会超过hirePrice
+        if (commission.compareTo(hirePriceBD) > 0) {
+            commission = hirePriceBD;
+        }
 
         // 将结果转换为Long类型
         return commission.longValue();
@@ -363,12 +373,26 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         Long hirePrice = job.getHirePrice();
         // 总比例
         BigDecimal totalRate = BigDecimal.valueOf(100);
-        // 猎头佣金
-        Long headhuntPrice = calculateCommission(hirePrice, ratio.getHeadhuntRate(), totalRate);
-        // 推荐人佣金
-        Long recommendPrice = calculateCommission(hirePrice, ratio.getRecommendRate(), totalRate);
-        // 投递人佣金
-        Long cvPrice = calculateCommission(hirePrice, ratio.getCvRate(), totalRate);
+        // 猎头佣金 计算并转换为钱包货币
+        long headhuntPrice = calculateCommission(hirePrice, ratio.getHeadhuntRate(), totalRate)*RATIO_MULTIPLE;
+        // 推荐人佣金 计算并转换为钱包货币
+        long recommendPrice = calculateCommission(hirePrice, ratio.getRecommendRate(), totalRate)*RATIO_MULTIPLE;
+        // 投递人佣金 计算并转换为钱包货币
+        long cvPrice = calculateCommission(hirePrice, ratio.getCvRate(), totalRate)*RATIO_MULTIPLE;
+
+        //  复制出现三者相加>hirePrice的情况
+        log.info("职位ID:{},佣金分配情况,总金额:{},猎头佣金:{},推荐人佣金:{},投递人佣金:{}",
+                job.getId(),
+                hirePrice/100,
+                headhuntPrice/100,
+                recommendPrice/100,
+                cvPrice/100
+        );
+        if((headhuntPrice+recommendPrice+cvPrice)>hirePrice) {
+            log.error("佣金比例计算错误,职位ID:{}", job.getId());
+            throw exception(INTERVIEW_INVITE_STATUS_NOT_SETTLEMENT);
+        }
+
 
         // 猎头 (平台自己)
         if (headhuntPrice > 0) {