|
@@ -6,20 +6,24 @@ import com.citu.framework.common.pojo.PageResult;
|
|
|
import com.citu.module.menduner.system.controller.appadmin.hire.vo.AppAdminHireJobCvRelPageReqVO;
|
|
|
import com.citu.module.menduner.system.controller.appadmin.hire.vo.AppAdminHireJobCvRelRespVO;
|
|
|
import com.citu.module.menduner.system.controller.appadmin.person.vo.AppAdminPersonSimpleRespVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.job.JobAdvertisedRespVO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.hire.HireCommissionRatioDO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.hire.HireJobCvRelDO;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
|
|
|
import com.citu.module.menduner.system.dal.mysql.hire.HireJobCvRelMapper;
|
|
|
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.hire.HireJobCvRelStatusEnum;
|
|
|
-import com.citu.module.menduner.system.service.enterprise.account.EnterpriseAccountService;
|
|
|
+import com.citu.module.menduner.system.service.record.EnterpriseAccountRecordService;
|
|
|
import com.citu.module.menduner.system.service.record.UserAccountRecordService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
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;
|
|
@@ -44,7 +48,7 @@ public class HireJobIntegrationServiceImpl implements HireJobIntegrationService
|
|
|
private UserAccountRecordService userAccountRecordService;
|
|
|
|
|
|
@Resource
|
|
|
- private EnterpriseAccountService enterpriseAccountService;
|
|
|
+ private EnterpriseAccountRecordService enterpriseAccountRecordService;
|
|
|
|
|
|
|
|
|
@Override
|
|
@@ -78,10 +82,131 @@ public class HireJobIntegrationServiceImpl implements HireJobIntegrationService
|
|
|
throw exception(HIRE_COMMISSION_RATIO_NOT_EXISTS);
|
|
|
}
|
|
|
|
|
|
- JobAdvertisedDO job = jobAdvertisedMapper.selectById(cv.getJobId());
|
|
|
+ JobAdvertisedDO job = jobAdvertisedMapper.selectById(cv.getJobId());
|
|
|
|
|
|
- job.getHirePrice();
|
|
|
+ if (null != job.getHirePrice()) {
|
|
|
+ // 余额结算
|
|
|
+ priceSettlement(job, ratio, cv);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (null != job.getHirePoint()) {
|
|
|
+ // 积分结算
|
|
|
+ pointSettlement(job, ratio, cv);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 余额结算
|
|
|
+ *
|
|
|
+ * @param job 职位信息
|
|
|
+ * @param ratio 佣金比例
|
|
|
+ * @param cv 投递信息
|
|
|
+ **/
|
|
|
+ public void priceSettlement(JobAdvertisedDO job, HireCommissionRatioDO ratio, HireJobCvRelDO 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);
|
|
|
+
|
|
|
+ // 猎头 (平台自己)
|
|
|
+ enterpriseAccountRecordService.createBalanceRecord(
|
|
|
+ 1L,
|
|
|
+ 1L,
|
|
|
+ BalanceBizTypeEnum.PLATFORM_COMMISSION.getName(),
|
|
|
+ MathOperationEnum.ADD,
|
|
|
+ headhuntPrice,
|
|
|
+ BalanceBizTypeEnum.PLATFORM_COMMISSION,
|
|
|
+ String.valueOf(job.getId())
|
|
|
+ );
|
|
|
+
|
|
|
+ // 推荐人
|
|
|
+ userAccountRecordService.createBalanceRecord(
|
|
|
+ cv.getRecommendUserId(),
|
|
|
+ BalanceBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
|
|
|
+ MathOperationEnum.ADD,
|
|
|
+ recommendPrice,
|
|
|
+ BalanceBizTypeEnum.RECOMMENDED_POSITIONS,
|
|
|
+ String.valueOf(job.getId())
|
|
|
+ );
|
|
|
+
|
|
|
+ // 投递人
|
|
|
+ userAccountRecordService.createBalanceRecord(
|
|
|
+ cv.getUserId(),
|
|
|
+ BalanceBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
|
|
|
+ MathOperationEnum.ADD,
|
|
|
+ cvPrice,
|
|
|
+ BalanceBizTypeEnum.RECOMMENDED_POSITIONS,
|
|
|
+ String.valueOf(job.getId())
|
|
|
+ );
|
|
|
+ }
|
|
|
|
|
|
- return false;
|
|
|
+ /**
|
|
|
+ * 积分结算
|
|
|
+ *
|
|
|
+ * @param job 职位信息
|
|
|
+ * @param ratio 佣金比例
|
|
|
+ * @param cv 投递信息
|
|
|
+ **/
|
|
|
+ public void pointSettlement(JobAdvertisedDO job, HireCommissionRatioDO ratio, HireJobCvRelDO 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;
|
|
|
+
|
|
|
+ // 猎头 (平台自己)
|
|
|
+ enterpriseAccountRecordService.createPointRecord(
|
|
|
+ 1L,
|
|
|
+ 1L,
|
|
|
+ PointBizTypeEnum.PLATFORM_COMMISSION.getName(),
|
|
|
+ MathOperationEnum.ADD,
|
|
|
+ headhuntPoint,
|
|
|
+ PointBizTypeEnum.PLATFORM_COMMISSION,
|
|
|
+ String.valueOf(job.getId())
|
|
|
+ );
|
|
|
+
|
|
|
+ // 推荐人
|
|
|
+ userAccountRecordService.createPointRecord(
|
|
|
+ cv.getRecommendUserId(),
|
|
|
+ "",
|
|
|
+ PointBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
|
|
|
+ MathOperationEnum.ADD,
|
|
|
+ recommendPoint,
|
|
|
+ PointBizTypeEnum.RECOMMENDED_POSITIONS,
|
|
|
+ String.valueOf(job.getId())
|
|
|
+ );
|
|
|
+
|
|
|
+ // 投递人
|
|
|
+ userAccountRecordService.createPointRecord(
|
|
|
+ cv.getUserId(),
|
|
|
+ "",
|
|
|
+ PointBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
|
|
|
+ MathOperationEnum.ADD,
|
|
|
+ cvPoint,
|
|
|
+ PointBizTypeEnum.RECOMMENDED_POSITIONS,
|
|
|
+ String.valueOf(job.getId())
|
|
|
+ );
|
|
|
}
|
|
|
}
|