diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeRolesApplyInfoController.java b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeRolesApplyInfoController.java index 64db8e7..30fa1b7 100644 --- a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeRolesApplyInfoController.java +++ b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeRolesApplyInfoController.java @@ -7,6 +7,7 @@ import com.vetti.common.core.page.TableWebDataInfo; import com.vetti.common.enums.BusinessType; import com.vetti.common.utils.SecurityUtils; import com.vetti.hotake.domain.HotakeRolesApplyInfo; +import com.vetti.hotake.domain.dto.HotakeRolesApplyStageStatisticalDto; import com.vetti.hotake.domain.vo.HotakeRolesApplyStageVo; import com.vetti.hotake.service.IHotakeRolesApplyInfoService; import io.swagger.annotations.Api; @@ -131,4 +132,15 @@ public class HotakeRolesApplyInfoController extends BaseController HotakeRolesApplyInfo info = hotakeRolesApplyInfoService.handleCandidateCompatibilityInfo(hotakeRolesApplyInfo); return R.ok(info,""); } + + /** + * 岗位申请数据根据当前阶段进行统计 + */ + @ApiOperation("岗位申请数据根据当前阶段进行统计") + @GetMapping("/getStageStatistical") + public R handleStageStatistical(HotakeRolesApplyInfo hotakeRolesApplyInfo) + { + HotakeRolesApplyStageStatisticalDto info = hotakeRolesApplyInfoService.handleHotakeRolesApplyStageStatistical(hotakeRolesApplyInfo); + return R.ok(info,""); + } } diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeRolesApplyStageStatisticalDto.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeRolesApplyStageStatisticalDto.java new file mode 100644 index 0000000..7544c50 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeRolesApplyStageStatisticalDto.java @@ -0,0 +1,40 @@ +package com.vetti.hotake.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 岗位申请数据根据当前阶段进行统计 返回对象 + * + * @author wangxiangshun + * @date 2025-11-30 + */ +@Data +@Accessors(chain = true) +public class HotakeRolesApplyStageStatisticalDto { + + @ApiModelProperty("已申请数量") + private Integer appliedNum; + + @ApiModelProperty("入围数量") + private Integer shortlistedNum; + + @ApiModelProperty("面试数量") + private Integer interviewNum; + + @ApiModelProperty("邀约数量") + private Integer offerNum; + + @ApiModelProperty("受雇数量") + private Integer hiredNum; + + @ApiModelProperty("拒绝邀约数量") + private Integer refuseOfferNum; + + @ApiModelProperty("面试失败数量") + private Integer interviewFailNum; + + @ApiModelProperty("总数量") + private Integer totalNum; +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeRolesApplyInfoService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeRolesApplyInfoService.java index 3998ad7..e880af1 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeRolesApplyInfoService.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeRolesApplyInfoService.java @@ -2,6 +2,7 @@ package com.vetti.hotake.service; import java.util.List; import com.vetti.hotake.domain.HotakeRolesApplyInfo; +import com.vetti.hotake.domain.dto.HotakeRolesApplyStageStatisticalDto; import com.vetti.hotake.domain.vo.HotakeRolesApplyStageVo; /** @@ -92,4 +93,12 @@ public interface IHotakeRolesApplyInfoService */ public HotakeRolesApplyInfo handleCandidateCompatibilityInfo(HotakeRolesApplyInfo hotakeRolesApplyInfo); + /** + * 岗位申请数据根据当前阶段进行统计 + * + * @param hotakeRolesApplyInfo 候选人岗位申请信息 + * @return 岗位申请数据根据当前阶段进行统计 信息集合 + */ + public HotakeRolesApplyStageStatisticalDto handleHotakeRolesApplyStageStatistical(HotakeRolesApplyInfo hotakeRolesApplyInfo); + } diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java index 2c6683a..d7fe038 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java @@ -16,6 +16,7 @@ import com.vetti.hotake.domain.HotakeRolesInfo; import com.vetti.hotake.domain.dto.HotakeAiCvScoringRankingDto; import com.vetti.hotake.domain.dto.HotakeCandidateCompatibilityDto; import com.vetti.hotake.domain.dto.HotakeCvInfoDto; +import com.vetti.hotake.domain.dto.HotakeRolesApplyStageStatisticalDto; import com.vetti.hotake.domain.dto.VcDto.*; import com.vetti.hotake.domain.vo.HotakeRolesApplyStageVo; import com.vetti.hotake.mapper.HotakeRolesApplyInfoMapper; @@ -23,6 +24,7 @@ import com.vetti.hotake.mapper.HotakeRolesInfoMapper; import com.vetti.hotake.service.IHotakeRolesApplyInfoService; import com.vetti.hotake.service.IHotakeRolesApplyOperRecordService; import com.vetti.system.service.ISysUserService; +import io.swagger.annotations.ApiModelProperty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -452,4 +454,65 @@ public class HotakeRolesApplyInfoServiceImpl extends BaseServiceImpl implements return new HotakeRolesApplyInfo(); } + /** + * 岗位申请数据根据当前阶段进行统计 + * @param hotakeRolesApplyInfo 候选人岗位申请信息 + * @return + */ + @Override + public HotakeRolesApplyStageStatisticalDto handleHotakeRolesApplyStageStatistical(HotakeRolesApplyInfo hotakeRolesApplyInfo) { + HotakeRolesApplyStageStatisticalDto dto = new HotakeRolesApplyStageStatisticalDto(); + List applyInfoList = hotakeRolesApplyInfoMapper.selectHotakeRolesApplyInfoCompatibilityScoreList(hotakeRolesApplyInfo); + Integer appliedNum = 0; + Integer shortlistedNum = 0; + Integer interviewNum = 0; + Integer offerNum = 0; + Integer hiredNum = 0; + Integer refuseOfferNum = 0; + Integer interviewFailNum = 0; + Integer totalNum = 0; + if(CollectionUtil.isNotEmpty(applyInfoList)) { + totalNum = applyInfoList.size(); + List applyInfoList1 = applyInfoList.stream().filter(e->StageEnum.APPLIED.getCode().equals(e.getStage())).toList(); + if(CollectionUtil.isNotEmpty(applyInfoList1)) { + appliedNum = applyInfoList1.size(); + } + List applyInfoList2 = applyInfoList.stream().filter(e->StageEnum.SHORTLISTED.getCode().equals(e.getStage())).toList(); + if(CollectionUtil.isNotEmpty(applyInfoList2)) { + shortlistedNum = applyInfoList2.size(); + } + List applyInfoList3 = applyInfoList.stream().filter(e->StageEnum.INTERVIEW.getCode().equals(e.getStage())).toList(); + if(CollectionUtil.isNotEmpty(applyInfoList3)) { + interviewNum = applyInfoList3.size(); + } + List applyInfoList4 = applyInfoList.stream().filter(e->StageEnum.OFFER.getCode().equals(e.getStage())).toList(); + if(CollectionUtil.isNotEmpty(applyInfoList4)) { + offerNum = applyInfoList4.size(); + } + List applyInfoList5 = applyInfoList.stream().filter(e->StageEnum.HIRED.getCode().equals(e.getStage())).toList(); + if(CollectionUtil.isNotEmpty(applyInfoList5)) { + hiredNum = applyInfoList5.size(); + } + List applyInfoList6 = applyInfoList.stream().filter(e->StageEnum.REFUSE_OFFER.getCode().equals(e.getStage())).toList(); + if(CollectionUtil.isNotEmpty(applyInfoList6)) { + refuseOfferNum = applyInfoList6.size(); + } + List applyInfoList7 = applyInfoList.stream().filter(e->StageEnum.INTERVIEW_FAIL.getCode().equals(e.getStage())).toList(); + if(CollectionUtil.isNotEmpty(applyInfoList7)) { + interviewFailNum = applyInfoList7.size(); + } + + } + + dto.setTotalNum(totalNum); + dto.setAppliedNum(appliedNum); + dto.setShortlistedNum(shortlistedNum); + dto.setInterviewNum(interviewNum); + dto.setOfferNum(offerNum); + dto.setHiredNum(hiredNum); + dto.setRefuseOfferNum(refuseOfferNum); + dto.setInterviewFailNum(interviewFailNum); + return dto; + } + }