org统计

This commit is contained in:
guixinman
2025-07-21 15:02:37 +08:00
parent 1ed120da86
commit ce2a0d70c4
6 changed files with 211 additions and 117 deletions

View File

@@ -31,4 +31,6 @@ public interface PositionRegistrationMapper extends MyMapper<PositionRegistratio
Map<String, Object> noticeInvite(Long positionRegistrationId, Long orgUserId); Map<String, Object> noticeInvite(Long positionRegistrationId, Long orgUserId);
Map<String, Object> noticeInterview(Long positionRegistrationId, Long orgUserId); Map<String, Object> noticeInterview(Long positionRegistrationId, Long orgUserId);
List<PositionRegistrationDTO> positionRegistrationList(@Param("orgId") Long orgId);
} }

View File

@@ -284,6 +284,13 @@
and pr.deleted = 0 and pr.deleted = 0
</select> </select>
<select id="positionRegistrationList" resultType="com.newyetai.recruit.position.dto.PositionRegistrationDTO">
select
pr.*
from hr_position_registration pr
inner join hr_position p on pr.position_id = p.id and p.deleted = 0
where pr.deleted = 0 and p.org_id = #{orgId} and pr.status in (1,2,4,5,6)
</select>
</mapper> </mapper>

View File

@@ -3,14 +3,7 @@ package com.newyetai.recruit.statistics.controller;
import com.newyetai.common.AlitaResult; import com.newyetai.common.AlitaResult;
import com.newyetai.recruit.position.dto.PositionDTO; import com.newyetai.recruit.position.dto.PositionDTO;
import com.newyetai.recruit.position.dto.PositionPageQueryDTO; import com.newyetai.recruit.position.dto.PositionPageQueryDTO;
import com.newyetai.recruit.statistics.dto.HomeStatisticsDTO; import com.newyetai.recruit.statistics.dto.*;
import com.newyetai.recruit.statistics.dto.JobSeekerInfoStatisticsDTO;
import com.newyetai.recruit.statistics.dto.OrgRegAndPositionStatisticsDTO;
import com.newyetai.recruit.statistics.dto.PositionMarkStatisticsDTO;
import com.newyetai.recruit.statistics.dto.PositionSupplyDemandStatisticsDTO;
import com.newyetai.recruit.statistics.dto.StatisticQueryDTO;
import com.newyetai.recruit.statistics.dto.StatisticsBaseDTO;
import com.newyetai.recruit.statistics.dto.UserOperationStatisticsDTO;
import com.newyetai.recruit.statistics.service.StatisticsService; import com.newyetai.recruit.statistics.service.StatisticsService;
import com.newyetai.tkmybatis.pojo.Page; import com.newyetai.tkmybatis.pojo.Page;
@@ -127,4 +120,10 @@ public class StatisticsController {
statisticsService.positionPage(queryDTO); statisticsService.positionPage(queryDTO);
return AlitaResult.success(queryDTO.getPageResult()); return AlitaResult.success(queryDTO.getPageResult());
} }
@GetMapping("/orgHomeStatistics")
@ApiOperation("机构首页")
public AlitaResult<OrgHomeStatistics> orgHomeStatistics() {
return AlitaResult.success(statisticsService.orgHomeStatistics());
}
} }

View File

@@ -0,0 +1,29 @@
package com.newyetai.recruit.statistics.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class OrgHomeStatistics implements Serializable {
/**
* 招聘岗位:机构开启状态下的岗位数量
*/
private int positionOpenCount;
/**
* 招聘岗位:机构的岗位关闭数量
*/
private int positionCloseCount;
/**
* 机构的咨询人数
*/
private int userChatCount;
private List<StatisticsBaseDTO> positionRegistrationList;
}

View File

@@ -2,14 +2,7 @@ package com.newyetai.recruit.statistics.service;
import com.newyetai.recruit.position.dto.PositionDTO; import com.newyetai.recruit.position.dto.PositionDTO;
import com.newyetai.recruit.position.dto.PositionPageQueryDTO; import com.newyetai.recruit.position.dto.PositionPageQueryDTO;
import com.newyetai.recruit.statistics.dto.HomeStatisticsDTO; import com.newyetai.recruit.statistics.dto.*;
import com.newyetai.recruit.statistics.dto.JobSeekerInfoStatisticsDTO;
import com.newyetai.recruit.statistics.dto.OrgRegAndPositionStatisticsDTO;
import com.newyetai.recruit.statistics.dto.PositionMarkStatisticsDTO;
import com.newyetai.recruit.statistics.dto.PositionSupplyDemandStatisticsDTO;
import com.newyetai.recruit.statistics.dto.StatisticQueryDTO;
import com.newyetai.recruit.statistics.dto.StatisticsBaseDTO;
import com.newyetai.recruit.statistics.dto.UserOperationStatisticsDTO;
import java.util.List; import java.util.List;
@@ -66,4 +59,6 @@ public interface StatisticsService {
List<PositionMarkStatisticsDTO> getPositionMark(); List<PositionMarkStatisticsDTO> getPositionMark();
List<PositionDTO> positionPage(PositionPageQueryDTO queryDTO); List<PositionDTO> positionPage(PositionPageQueryDTO queryDTO);
OrgHomeStatistics orgHomeStatistics();
} }

View File

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.newyetai.common.constant.CommonConstants; import com.newyetai.common.constant.CommonConstants;
import com.newyetai.common.util.DateUtils; import com.newyetai.common.util.DateUtils;
import com.newyetai.common.util.UserContextHolder; import com.newyetai.common.util.UserContextHolder;
import com.newyetai.component.chat.dto.ChatDTO;
import com.newyetai.component.chat.dto.ChatQueryDTO;
import com.newyetai.component.chat.service.ChatService;
import com.newyetai.component.dict.dto.DictDetailDTO; import com.newyetai.component.dict.dto.DictDetailDTO;
import com.newyetai.component.dict.util.DictUtils; import com.newyetai.component.dict.util.DictUtils;
import com.newyetai.recruit.position.dao.PositionMapper; import com.newyetai.recruit.position.dao.PositionMapper;
@@ -12,23 +15,14 @@ import com.newyetai.recruit.position.dao.PositionRegistrationMapper;
import com.newyetai.recruit.position.dao.PositionTypeMapper; import com.newyetai.recruit.position.dao.PositionTypeMapper;
import com.newyetai.recruit.position.dto.PositionDTO; import com.newyetai.recruit.position.dto.PositionDTO;
import com.newyetai.recruit.position.dto.PositionPageQueryDTO; import com.newyetai.recruit.position.dto.PositionPageQueryDTO;
import com.newyetai.recruit.position.dto.PositionRegistrationDTO;
import com.newyetai.recruit.position.entity.Position; import com.newyetai.recruit.position.entity.Position;
import com.newyetai.recruit.position.entity.PositionRegistration; import com.newyetai.recruit.position.entity.PositionRegistration;
import com.newyetai.recruit.position.entity.PositionType; import com.newyetai.recruit.position.entity.PositionType;
import com.newyetai.recruit.position.enums.PositionRegistrationStatusEnum; import com.newyetai.recruit.position.enums.PositionRegistrationStatusEnum;
import com.newyetai.recruit.position.enums.PositionStatusEnum; import com.newyetai.recruit.position.enums.PositionStatusEnum;
import com.newyetai.recruit.statistics.dao.StatisticsMapper; import com.newyetai.recruit.statistics.dao.StatisticsMapper;
import com.newyetai.recruit.statistics.dto.HomeStatisticsDTO; import com.newyetai.recruit.statistics.dto.*;
import com.newyetai.recruit.statistics.dto.JobSeekerInfoStatisticsDTO;
import com.newyetai.recruit.statistics.dto.OrgDailyStatisticDTO;
import com.newyetai.recruit.statistics.dto.OrgDailyStatisticOperatorDTO;
import com.newyetai.recruit.statistics.dto.OrgDailyStatisticQueryDTO;
import com.newyetai.recruit.statistics.dto.OrgRegAndPositionStatisticsDTO;
import com.newyetai.recruit.statistics.dto.PositionMarkStatisticsDTO;
import com.newyetai.recruit.statistics.dto.PositionSupplyDemandStatisticsDTO;
import com.newyetai.recruit.statistics.dto.StatisticQueryDTO;
import com.newyetai.recruit.statistics.dto.StatisticsBaseDTO;
import com.newyetai.recruit.statistics.dto.UserOperationStatisticsDTO;
import com.newyetai.recruit.statistics.enums.OrgDailyStatisticTypeEnum; import com.newyetai.recruit.statistics.enums.OrgDailyStatisticTypeEnum;
import com.newyetai.recruit.statistics.service.OrgDailyStatisticService; import com.newyetai.recruit.statistics.service.OrgDailyStatisticService;
import com.newyetai.recruit.statistics.service.StatisticsService; import com.newyetai.recruit.statistics.service.StatisticsService;
@@ -113,6 +107,9 @@ public class StatisticsServiceImpl implements StatisticsService {
@Resource @Resource
private StatisticsMapper statisticsMapper; private StatisticsMapper statisticsMapper;
@Autowired
private ChatService chatService;
@Override @Override
public HomeStatisticsDTO getHomeStatistics() { public HomeStatisticsDTO getHomeStatistics() {
@@ -279,7 +276,7 @@ public class StatisticsServiceImpl implements StatisticsService {
List<PositionType> positionTypes = positionTypeMapper.selectList( List<PositionType> positionTypes = positionTypeMapper.selectList(
new LambdaQueryWrapper<PositionType>() new LambdaQueryWrapper<PositionType>()
.eq(PositionType::getDeleted, false) .eq(PositionType::getDeleted, false)
.eq(StringUtils.isNotBlank(recruitPositionType),PositionType::getRecruitPositionType,recruitPositionType) .eq(StringUtils.isNotBlank(recruitPositionType), PositionType::getRecruitPositionType, recruitPositionType)
); );
Map<String, String> positionTypeMap = new LinkedHashMap<>(); Map<String, String> positionTypeMap = new LinkedHashMap<>();
for (PositionType positionType : positionTypes) { for (PositionType positionType : positionTypes) {
@@ -615,4 +612,69 @@ public class StatisticsServiceImpl implements StatisticsService {
} }
return list; return list;
} }
@Override
public OrgHomeStatistics orgHomeStatistics() {
OrgHomeStatistics orgHomeStatistics = new OrgHomeStatistics();
// ——招聘岗位:平台开启状态下的岗位数量
Integer positionOpenCount = positionMapper.selectCount(new LambdaQueryWrapper<Position>()
.eq(Position::getDeleted, false)
.eq(Position::getStatus, PositionStatusEnum.OPEN.getStatus())
.eq(Position::getOrgId, UserContextHolder.getExistLoginOrgId())
);
Integer positionCloseCount = positionMapper.selectCount(new LambdaQueryWrapper<Position>()
.eq(Position::getDeleted, false)
.eq(Position::getStatus, PositionStatusEnum.CLOSE.getStatus())
.eq(Position::getOrgId, UserContextHolder.getExistLoginOrgId())
);
Map<String, Long> positionRegistrationMap =
positionRegistrationMapper.positionRegistrationList(UserContextHolder.getExistLoginOrgId())
.stream().collect(Collectors.groupingBy(PositionRegistrationDTO::getStatus, Collectors.counting()));
List<StatisticsBaseDTO> positionRegistrationList = new ArrayList<>();
List<String> statusList = Arrays.asList(PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus()
, PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus()
, PositionRegistrationStatusEnum.TO_BE_HIRED.getStatus()
, PositionRegistrationStatusEnum.ON_THE_JOB.getStatus()
, PositionRegistrationStatusEnum.RESIGNED.getStatus()
);
//已报名
long alreadyRegisteredCount = Objects.isNull(positionRegistrationMap.get(statusList.get(0))) ? 0l : positionRegistrationMap.get(statusList.get(0));
//待面试
long waitForAnInterviewCount = Objects.isNull(positionRegistrationMap.get(statusList.get(1))) ? 0l : positionRegistrationMap.get(statusList.get(1));
//待入职
long toBeHiredCount = Objects.isNull(positionRegistrationMap.get(statusList.get(2))) ? 0l : positionRegistrationMap.get(statusList.get(2));
//已入职
long onTheJobCount = Objects.isNull(positionRegistrationMap.get(statusList.get(3))) ? 0l : positionRegistrationMap.get(statusList.get(3));
//已离职
long resignedCount = Objects.isNull(positionRegistrationMap.get(statusList.get(4))) ? 0l : positionRegistrationMap.get(statusList.get(4));
for (int i = 0; i < statusList.size(); i++) {
StatisticsBaseDTO statisticsBaseDTO = new StatisticsBaseDTO();
statisticsBaseDTO.setName(DictUtils.getCodeNameMap("position_registration_status").get(statusList.get(i)));
if (i == 0) {
statisticsBaseDTO.setValueCount(alreadyRegisteredCount);
} else if (i == 1) {
statisticsBaseDTO.setValueCount(waitForAnInterviewCount);
} else if (i == 2) {
statisticsBaseDTO.setValueCount(toBeHiredCount);
} else if (i == 3) {
statisticsBaseDTO.setValueCount(onTheJobCount);
} else if (i == 4) {
statisticsBaseDTO.setValueCount(resignedCount);
}
positionRegistrationList.add(statisticsBaseDTO);
}
List<ChatDTO> chatDTOList = chatService.list(ChatQueryDTO.builder().orgId(UserContextHolder.getExistLoginOrgId()).build());
orgHomeStatistics.setPositionOpenCount(positionOpenCount);
orgHomeStatistics.setPositionCloseCount(positionCloseCount);
orgHomeStatistics.setUserChatCount(chatDTOList.size());
orgHomeStatistics.setPositionRegistrationList(positionRegistrationList);
return orgHomeStatistics;
}
} }