From ce2a0d70c4aa4d642314bf1cb94dec16b6400e07 Mon Sep 17 00:00:00 2001 From: guixinman <2863174261@qq.com> Date: Mon, 21 Jul 2025 15:02:37 +0800 Subject: [PATCH] =?UTF-8?q?org=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/PositionRegistrationMapper.java | 2 + .../mapper/PositionRegistrationMapper.xml | 7 + .../controller/StatisticsController.java | 15 +- .../statistics/dto/OrgHomeStatistics.java | 29 ++ .../statistics/service/StatisticsService.java | 11 +- .../service/impl/StatisticsServiceImpl.java | 264 +++++++++++------- 6 files changed, 211 insertions(+), 117 deletions(-) create mode 100644 src/main/java/com/newyetai/recruit/statistics/dto/OrgHomeStatistics.java diff --git a/src/main/java/com/newyetai/recruit/position/dao/PositionRegistrationMapper.java b/src/main/java/com/newyetai/recruit/position/dao/PositionRegistrationMapper.java index f806d57..09a975b 100644 --- a/src/main/java/com/newyetai/recruit/position/dao/PositionRegistrationMapper.java +++ b/src/main/java/com/newyetai/recruit/position/dao/PositionRegistrationMapper.java @@ -31,4 +31,6 @@ public interface PositionRegistrationMapper extends MyMapper noticeInvite(Long positionRegistrationId, Long orgUserId); Map noticeInterview(Long positionRegistrationId, Long orgUserId); + List positionRegistrationList(@Param("orgId") Long orgId); + } \ No newline at end of file diff --git a/src/main/java/com/newyetai/recruit/position/mapper/PositionRegistrationMapper.xml b/src/main/java/com/newyetai/recruit/position/mapper/PositionRegistrationMapper.xml index 1a15eeb..770b5cb 100644 --- a/src/main/java/com/newyetai/recruit/position/mapper/PositionRegistrationMapper.xml +++ b/src/main/java/com/newyetai/recruit/position/mapper/PositionRegistrationMapper.xml @@ -284,6 +284,13 @@ and pr.deleted = 0 + \ No newline at end of file diff --git a/src/main/java/com/newyetai/recruit/statistics/controller/StatisticsController.java b/src/main/java/com/newyetai/recruit/statistics/controller/StatisticsController.java index abc5fd1..9bf7d34 100644 --- a/src/main/java/com/newyetai/recruit/statistics/controller/StatisticsController.java +++ b/src/main/java/com/newyetai/recruit/statistics/controller/StatisticsController.java @@ -3,14 +3,7 @@ package com.newyetai.recruit.statistics.controller; import com.newyetai.common.AlitaResult; import com.newyetai.recruit.position.dto.PositionDTO; import com.newyetai.recruit.position.dto.PositionPageQueryDTO; -import com.newyetai.recruit.statistics.dto.HomeStatisticsDTO; -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.dto.*; import com.newyetai.recruit.statistics.service.StatisticsService; import com.newyetai.tkmybatis.pojo.Page; @@ -127,4 +120,10 @@ public class StatisticsController { statisticsService.positionPage(queryDTO); return AlitaResult.success(queryDTO.getPageResult()); } + + @GetMapping("/orgHomeStatistics") + @ApiOperation("机构首页") + public AlitaResult orgHomeStatistics() { + return AlitaResult.success(statisticsService.orgHomeStatistics()); + } } diff --git a/src/main/java/com/newyetai/recruit/statistics/dto/OrgHomeStatistics.java b/src/main/java/com/newyetai/recruit/statistics/dto/OrgHomeStatistics.java new file mode 100644 index 0000000..3f11c45 --- /dev/null +++ b/src/main/java/com/newyetai/recruit/statistics/dto/OrgHomeStatistics.java @@ -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 positionRegistrationList; +} diff --git a/src/main/java/com/newyetai/recruit/statistics/service/StatisticsService.java b/src/main/java/com/newyetai/recruit/statistics/service/StatisticsService.java index b6b8ff4..02c55fa 100644 --- a/src/main/java/com/newyetai/recruit/statistics/service/StatisticsService.java +++ b/src/main/java/com/newyetai/recruit/statistics/service/StatisticsService.java @@ -2,14 +2,7 @@ package com.newyetai.recruit.statistics.service; import com.newyetai.recruit.position.dto.PositionDTO; import com.newyetai.recruit.position.dto.PositionPageQueryDTO; -import com.newyetai.recruit.statistics.dto.HomeStatisticsDTO; -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.dto.*; import java.util.List; @@ -66,4 +59,6 @@ public interface StatisticsService { List getPositionMark(); List positionPage(PositionPageQueryDTO queryDTO); + + OrgHomeStatistics orgHomeStatistics(); } diff --git a/src/main/java/com/newyetai/recruit/statistics/service/impl/StatisticsServiceImpl.java b/src/main/java/com/newyetai/recruit/statistics/service/impl/StatisticsServiceImpl.java index 226d0ba..986c398 100644 --- a/src/main/java/com/newyetai/recruit/statistics/service/impl/StatisticsServiceImpl.java +++ b/src/main/java/com/newyetai/recruit/statistics/service/impl/StatisticsServiceImpl.java @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.newyetai.common.constant.CommonConstants; import com.newyetai.common.util.DateUtils; 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.util.DictUtils; 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.dto.PositionDTO; 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.PositionRegistration; import com.newyetai.recruit.position.entity.PositionType; import com.newyetai.recruit.position.enums.PositionRegistrationStatusEnum; import com.newyetai.recruit.position.enums.PositionStatusEnum; import com.newyetai.recruit.statistics.dao.StatisticsMapper; -import com.newyetai.recruit.statistics.dto.HomeStatisticsDTO; -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.dto.*; import com.newyetai.recruit.statistics.enums.OrgDailyStatisticTypeEnum; import com.newyetai.recruit.statistics.service.OrgDailyStatisticService; import com.newyetai.recruit.statistics.service.StatisticsService; @@ -113,6 +107,9 @@ public class StatisticsServiceImpl implements StatisticsService { @Resource private StatisticsMapper statisticsMapper; + @Autowired + private ChatService chatService; + @Override public HomeStatisticsDTO getHomeStatistics() { @@ -124,53 +121,53 @@ public class StatisticsServiceImpl implements StatisticsService { // ——入驻企业:平台的企业数量(用工机构+服务机构) Integer orgCount = orgMapper.selectCount(new LambdaQueryWrapper() - .eq(Org::getDeleted, false) - .in(Org::getType, Arrays.asList(OrgTypeEnum.ORG_TYPE_SIMPLE.getType(), OrgTypeEnum.ORG_TYPE_HR.getType())) + .eq(Org::getDeleted, false) + .in(Org::getType, Arrays.asList(OrgTypeEnum.ORG_TYPE_SIMPLE.getType(), OrgTypeEnum.ORG_TYPE_HR.getType())) ); Map orgMap = orgMapper.selectList(new LambdaQueryWrapper() - .eq(Org::getDeleted, false) - .in(Org::getType, Arrays.asList(OrgTypeEnum.ORG_TYPE_SIMPLE.getType(), OrgTypeEnum.ORG_TYPE_HR.getType())) - .between(Org::getCreateTime, yesterday, today) + .eq(Org::getDeleted, false) + .in(Org::getType, Arrays.asList(OrgTypeEnum.ORG_TYPE_SIMPLE.getType(), OrgTypeEnum.ORG_TYPE_HR.getType())) + .between(Org::getCreateTime, yesterday, today) ).stream().collect(Collectors.groupingBy(org -> DateUtil.format(org.getCreateTime(), "yyyy-MM-dd"), Collectors.counting())); // ——招聘岗位:平台开启状态下的岗位数量 Integer positionCount = positionMapper.selectCount(new LambdaQueryWrapper() - .eq(Position::getDeleted, false) - .eq(Position::getStatus, PositionStatusEnum.OPEN.getStatus()) + .eq(Position::getDeleted, false) + .eq(Position::getStatus, PositionStatusEnum.OPEN.getStatus()) ); Map positionMap = - positionMapper.selectList(new LambdaQueryWrapper() - .eq(Position::getDeleted, false) - .eq(Position::getStatus, PositionStatusEnum.OPEN.getStatus()) - .between(Position::getCreateTime, yesterday, today) - ) - .stream().collect(Collectors.groupingBy(position -> DateUtil.format(position.getCreateTime(), "yyyy-MM-dd"), Collectors.counting())); + positionMapper.selectList(new LambdaQueryWrapper() + .eq(Position::getDeleted, false) + .eq(Position::getStatus, PositionStatusEnum.OPEN.getStatus()) + .between(Position::getCreateTime, yesterday, today) + ) + .stream().collect(Collectors.groupingBy(position -> DateUtil.format(position.getCreateTime(), "yyyy-MM-dd"), Collectors.counting())); // ——求职者:平台个人用户人数 Integer userCount = userMapper.selectCount( - new LambdaQueryWrapper() - .eq(User::getDeleted, false) - .eq(User::getType, UserTypeEnum.PERSON.getType()) + new LambdaQueryWrapper() + .eq(User::getDeleted, false) + .eq(User::getType, UserTypeEnum.PERSON.getType()) ); Map userMap = - userMapper.selectList(new LambdaQueryWrapper() - .eq(User::getDeleted, false) - .eq(User::getType, UserTypeEnum.PERSON.getType()) - .between(User::getCreateTime, yesterday, today) - ) - .stream().collect(Collectors.groupingBy(user -> DateUtil.format(user.getCreateTime(), "yyyy-MM-dd"), Collectors.counting())); + userMapper.selectList(new LambdaQueryWrapper() + .eq(User::getDeleted, false) + .eq(User::getType, UserTypeEnum.PERSON.getType()) + .between(User::getCreateTime, yesterday, today) + ) + .stream().collect(Collectors.groupingBy(user -> DateUtil.format(user.getCreateTime(), "yyyy-MM-dd"), Collectors.counting())); // ——岗位报名:平台招聘记录数量(统计出招聘表中的记录数量) Integer positionRegistrationCount = positionRegistrationMapper.selectCount( - new LambdaQueryWrapper() - .eq(PositionRegistration::getDeleted, false) + new LambdaQueryWrapper() + .eq(PositionRegistration::getDeleted, false) ); Map positionRegistrationMap = - positionRegistrationMapper.selectList(new LambdaQueryWrapper() - .eq(PositionRegistration::getDeleted, false) - .between(PositionRegistration::getCreateTime, yesterday, today) - ) - .stream().collect(Collectors.groupingBy(positionRegistration -> DateUtil.format(positionRegistration.getCreateTime(), "yyyy-MM-dd"), Collectors.counting())); + positionRegistrationMapper.selectList(new LambdaQueryWrapper() + .eq(PositionRegistration::getDeleted, false) + .between(PositionRegistration::getCreateTime, yesterday, today) + ) + .stream().collect(Collectors.groupingBy(positionRegistration -> DateUtil.format(positionRegistration.getCreateTime(), "yyyy-MM-dd"), Collectors.counting())); HomeStatisticsDTO homeStatisticsDTO = new HomeStatisticsDTO(); homeStatisticsDTO.setOrgCount(orgCount); @@ -203,8 +200,8 @@ public class StatisticsServiceImpl implements StatisticsService { public JobSeekerInfoStatisticsDTO getJobSeekerInfo() { //学历:小学、初中、中专/技校、高中、大专、本科、硕士、博士(按实际字典内容进行统计,图例是为了显示效果) Map> resumeMap = resumeMapper.selectList(new LambdaQueryWrapper() - .eq(Resume::getDeleted, false)) - .stream().filter(resume -> StringUtils.isNotBlank(resume.getEducation())).collect(Collectors.groupingBy(Resume::getEducation)); + .eq(Resume::getDeleted, false)) + .stream().filter(resume -> StringUtils.isNotBlank(resume.getEducation())).collect(Collectors.groupingBy(Resume::getEducation)); List educationList = DictUtils.getCacheTree("education"); List educations = new ArrayList<>(); @@ -218,10 +215,10 @@ public class StatisticsServiceImpl implements StatisticsService { //用户性别 年龄 List users = userMapper.selectList(new LambdaQueryWrapper() - .eq(User::getType, UserTypeEnum.PERSON.getType()) - .eq(User::getDeleted, false) - .ne(User::getCardNo, "") - .isNotNull(User::getCardNo) + .eq(User::getType, UserTypeEnum.PERSON.getType()) + .eq(User::getDeleted, false) + .ne(User::getCardNo, "") + .isNotNull(User::getCardNo) ); Map genderMap = users.stream().filter(user -> Objects.nonNull(user.getGender())).collect(Collectors.groupingBy(User::getGender, Collectors.counting())); List genders = new ArrayList<>(); @@ -272,14 +269,14 @@ public class StatisticsServiceImpl implements StatisticsService { public PositionSupplyDemandStatisticsDTO getPositionSupplyDemand(String recruitPositionType) { //期望岗位类型分组求数量 Map jobExpectMap = jobExpectMapper.positionTypeCodeGroupMap(recruitPositionType) - .stream().collect(Collectors.toMap(StatisticsBaseDTO::getName, v -> v.getValueCount(), (v1, v2) -> v2)); + .stream().collect(Collectors.toMap(StatisticsBaseDTO::getName, v -> v.getValueCount(), (v1, v2) -> v2)); //岗位类型分组求数量 Map positionMap = positionMapper.positionTypeGroupMap(recruitPositionType).stream().collect(Collectors.toMap(StatisticsBaseDTO::getName, v -> v.getValueCount(), (v1, v2) -> v2)); List positionTypes = positionTypeMapper.selectList( - new LambdaQueryWrapper() - .eq(PositionType::getDeleted, false) - .eq(StringUtils.isNotBlank(recruitPositionType),PositionType::getRecruitPositionType,recruitPositionType) + new LambdaQueryWrapper() + .eq(PositionType::getDeleted, false) + .eq(StringUtils.isNotBlank(recruitPositionType), PositionType::getRecruitPositionType, recruitPositionType) ); Map positionTypeMap = new LinkedHashMap<>(); for (PositionType positionType : positionTypes) { @@ -306,15 +303,15 @@ public class StatisticsServiceImpl implements StatisticsService { List list = new ArrayList<>(); List 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() + , PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus() + , PositionRegistrationStatusEnum.TO_BE_HIRED.getStatus() + , PositionRegistrationStatusEnum.ON_THE_JOB.getStatus() + , PositionRegistrationStatusEnum.RESIGNED.getStatus() ); Map positionRegistrationMap = positionRegistrationMapper.selectList( - new LambdaQueryWrapper() - .eq(PositionRegistration::getDeleted, false) - .in(PositionRegistration::getStatus, statusList) + new LambdaQueryWrapper() + .eq(PositionRegistration::getDeleted, false) + .in(PositionRegistration::getStatus, statusList) ).stream().collect(Collectors.groupingBy(PositionRegistration::getStatus, Collectors.counting())); long alreadyRegisteredCount = Objects.isNull(positionRegistrationMap.get(statusList.get(0))) ? 0l : positionRegistrationMap.get(statusList.get(0)); @@ -358,15 +355,15 @@ public class StatisticsServiceImpl implements StatisticsService { // ——入驻企业:平台的企业数量(用工机构+服务机构) List orgs = orgMapper.selectList(new LambdaQueryWrapper() - .eq(Org::getDeleted, false) - .in(Org::getType, Arrays.asList(OrgTypeEnum.ORG_TYPE_SIMPLE.getType(), OrgTypeEnum.ORG_TYPE_HR.getType())) - .between(Org::getCreateTime, createTimeStart, createTimeEnd)); + .eq(Org::getDeleted, false) + .in(Org::getType, Arrays.asList(OrgTypeEnum.ORG_TYPE_SIMPLE.getType(), OrgTypeEnum.ORG_TYPE_HR.getType())) + .between(Org::getCreateTime, createTimeStart, createTimeEnd)); List orgList = orgDailyStatisticService.list(OrgDailyStatisticQueryDTO.builder() - .orgId(CommonConstants.PLATFORM_ORG_ID) - .bizType(OrgDailyStatisticTypeEnum.ORG.getType()) - .bizDate(DateUtil.parseDate(date)) - .build()); + .orgId(CommonConstants.PLATFORM_ORG_ID) + .bizType(OrgDailyStatisticTypeEnum.ORG.getType()) + .bizDate(DateUtil.parseDate(date)) + .build()); OrgDailyStatisticOperatorDTO orgOperatorDTO = new OrgDailyStatisticOperatorDTO(); orgOperatorDTO.setOrgId(CommonConstants.PLATFORM_ORG_ID); orgOperatorDTO.setBizType(OrgDailyStatisticTypeEnum.ORG.getType()); @@ -381,14 +378,14 @@ public class StatisticsServiceImpl implements StatisticsService { // ——发布岗位 List positions = positionMapper.selectList(new LambdaQueryWrapper() - .eq(Position::getDeleted, false) - .between(Position::getCreateTime, createTimeStart, createTimeEnd) + .eq(Position::getDeleted, false) + .between(Position::getCreateTime, createTimeStart, createTimeEnd) ); List positionList = orgDailyStatisticService.list(OrgDailyStatisticQueryDTO.builder() - .orgId(CommonConstants.PLATFORM_ORG_ID) - .bizType(OrgDailyStatisticTypeEnum.POSITION.getType()) - .bizDate(DateUtil.parseDate(date)) - .build()); + .orgId(CommonConstants.PLATFORM_ORG_ID) + .bizType(OrgDailyStatisticTypeEnum.POSITION.getType()) + .bizDate(DateUtil.parseDate(date)) + .build()); OrgDailyStatisticOperatorDTO positionOperatorDTO = new OrgDailyStatisticOperatorDTO(); positionOperatorDTO.setOrgId(CommonConstants.PLATFORM_ORG_ID); positionOperatorDTO.setBizType(OrgDailyStatisticTypeEnum.POSITION.getType()); @@ -407,11 +404,11 @@ public class StatisticsServiceImpl implements StatisticsService { @Override public List getOrgRegAndPosition(StatisticQueryDTO queryDTO) { List orgDailyStatisticDTOList = orgDailyStatisticService.list(OrgDailyStatisticQueryDTO.builder() - .orgId(CommonConstants.PLATFORM_ORG_ID) - .bizTypes(Arrays.asList(OrgDailyStatisticTypeEnum.POSITION.getType(), OrgDailyStatisticTypeEnum.ORG.getType())) - .bizDateStart(queryDTO.getBizDateStart()) - .bizDateEnd(queryDTO.getBizDateEnd()) - .build()); + .orgId(CommonConstants.PLATFORM_ORG_ID) + .bizTypes(Arrays.asList(OrgDailyStatisticTypeEnum.POSITION.getType(), OrgDailyStatisticTypeEnum.ORG.getType())) + .bizDateStart(queryDTO.getBizDateStart()) + .bizDateEnd(queryDTO.getBizDateEnd()) + .build()); Map orgMap = new HashMap<>(); Map positionMap = new HashMap<>(); @@ -457,15 +454,15 @@ public class StatisticsServiceImpl implements StatisticsService { //浏览 List browseRecords = browseRecordMapper.selectList( - new LambdaQueryWrapper() - .eq(BrowseRecord::getDeleted, false) - .between(BrowseRecord::getCreateTime, createTimeStart, createTimeEnd) + new LambdaQueryWrapper() + .eq(BrowseRecord::getDeleted, false) + .between(BrowseRecord::getCreateTime, createTimeStart, createTimeEnd) ); List browseRecordList = orgDailyStatisticService.list(OrgDailyStatisticQueryDTO.builder() - .orgId(CommonConstants.PLATFORM_ORG_ID) - .bizType(OrgDailyStatisticTypeEnum.USER_POSITION_BROWSE_RECORD.getType()) - .bizDate(DateUtil.parseDate(date)) - .build()); + .orgId(CommonConstants.PLATFORM_ORG_ID) + .bizType(OrgDailyStatisticTypeEnum.USER_POSITION_BROWSE_RECORD.getType()) + .bizDate(DateUtil.parseDate(date)) + .build()); OrgDailyStatisticOperatorDTO browseRecordOperatorDTO = new OrgDailyStatisticOperatorDTO(); browseRecordOperatorDTO.setOrgId(CommonConstants.PLATFORM_ORG_ID); browseRecordOperatorDTO.setBizType(OrgDailyStatisticTypeEnum.USER_POSITION_BROWSE_RECORD.getType()); @@ -480,15 +477,15 @@ public class StatisticsServiceImpl implements StatisticsService { //收藏 List userCollections = userCollectionMapper.selectList( - new LambdaQueryWrapper() - .eq(UserCollection::getDeleted, false) - .between(UserCollection::getCreateTime, createTimeStart, createTimeEnd) + new LambdaQueryWrapper() + .eq(UserCollection::getDeleted, false) + .between(UserCollection::getCreateTime, createTimeStart, createTimeEnd) ); List userCollectionList = orgDailyStatisticService.list(OrgDailyStatisticQueryDTO.builder() - .orgId(CommonConstants.PLATFORM_ORG_ID) - .bizType(OrgDailyStatisticTypeEnum.USER_COLLECTIONS.getType()) - .bizDate(DateUtil.parseDate(date)) - .build()); + .orgId(CommonConstants.PLATFORM_ORG_ID) + .bizType(OrgDailyStatisticTypeEnum.USER_COLLECTIONS.getType()) + .bizDate(DateUtil.parseDate(date)) + .build()); OrgDailyStatisticOperatorDTO userCollectionOperatorDTO = new OrgDailyStatisticOperatorDTO(); userCollectionOperatorDTO.setOrgId(CommonConstants.PLATFORM_ORG_ID); userCollectionOperatorDTO.setBizType(OrgDailyStatisticTypeEnum.USER_COLLECTIONS.getType()); @@ -503,16 +500,16 @@ public class StatisticsServiceImpl implements StatisticsService { //岗位报名 List positionRegistrations = positionRegistrationMapper.selectList( - new LambdaQueryWrapper() - .eq(PositionRegistration::getDeleted, false) - .between(PositionRegistration::getCreateTime, createTimeStart, createTimeEnd) + new LambdaQueryWrapper() + .eq(PositionRegistration::getDeleted, false) + .between(PositionRegistration::getCreateTime, createTimeStart, createTimeEnd) ); List positionRegistrationList = orgDailyStatisticService.list(OrgDailyStatisticQueryDTO.builder() - .orgId(CommonConstants.PLATFORM_ORG_ID) - .bizType(OrgDailyStatisticTypeEnum.POSITION_REGISTRATION.getType()) - .bizDate(DateUtil.parseDate(date)) - .build()); + .orgId(CommonConstants.PLATFORM_ORG_ID) + .bizType(OrgDailyStatisticTypeEnum.POSITION_REGISTRATION.getType()) + .bizDate(DateUtil.parseDate(date)) + .build()); OrgDailyStatisticOperatorDTO positionRegistrationOperatorDTO = new OrgDailyStatisticOperatorDTO(); positionRegistrationOperatorDTO.setOrgId(CommonConstants.PLATFORM_ORG_ID); positionRegistrationOperatorDTO.setBizType(OrgDailyStatisticTypeEnum.POSITION_REGISTRATION.getType()); @@ -530,11 +527,11 @@ public class StatisticsServiceImpl implements StatisticsService { @Override public List userOperationStatisticsDTO(StatisticQueryDTO queryDTO) { List orgDailyStatisticDTOList = orgDailyStatisticService.list(OrgDailyStatisticQueryDTO.builder() - .orgId(CommonConstants.PLATFORM_ORG_ID) - .bizTypes(Arrays.asList(OrgDailyStatisticTypeEnum.USER_POSITION_BROWSE_RECORD.getType(), OrgDailyStatisticTypeEnum.USER_COLLECTIONS.getType(), OrgDailyStatisticTypeEnum.POSITION_REGISTRATION.getType())) - .bizDateStart(queryDTO.getBizDateStart()) - .bizDateEnd(queryDTO.getBizDateEnd()) - .build()); + .orgId(CommonConstants.PLATFORM_ORG_ID) + .bizTypes(Arrays.asList(OrgDailyStatisticTypeEnum.USER_POSITION_BROWSE_RECORD.getType(), OrgDailyStatisticTypeEnum.USER_COLLECTIONS.getType(), OrgDailyStatisticTypeEnum.POSITION_REGISTRATION.getType())) + .bizDateStart(queryDTO.getBizDateStart()) + .bizDateEnd(queryDTO.getBizDateEnd()) + .build()); Map userPositionBrowseRecordMap = new HashMap<>(); Map userCollectionsMap = new HashMap<>(); @@ -615,4 +612,69 @@ public class StatisticsServiceImpl implements StatisticsService { } return list; } + + @Override + public OrgHomeStatistics orgHomeStatistics() { + OrgHomeStatistics orgHomeStatistics = new OrgHomeStatistics(); + // ——招聘岗位:平台开启状态下的岗位数量 + Integer positionOpenCount = positionMapper.selectCount(new LambdaQueryWrapper() + .eq(Position::getDeleted, false) + .eq(Position::getStatus, PositionStatusEnum.OPEN.getStatus()) + .eq(Position::getOrgId, UserContextHolder.getExistLoginOrgId()) + ); + Integer positionCloseCount = positionMapper.selectCount(new LambdaQueryWrapper() + .eq(Position::getDeleted, false) + .eq(Position::getStatus, PositionStatusEnum.CLOSE.getStatus()) + .eq(Position::getOrgId, UserContextHolder.getExistLoginOrgId()) + ); + + Map positionRegistrationMap = + positionRegistrationMapper.positionRegistrationList(UserContextHolder.getExistLoginOrgId()) + .stream().collect(Collectors.groupingBy(PositionRegistrationDTO::getStatus, Collectors.counting())); + + List positionRegistrationList = new ArrayList<>(); + + List 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 chatDTOList = chatService.list(ChatQueryDTO.builder().orgId(UserContextHolder.getExistLoginOrgId()).build()); + + orgHomeStatistics.setPositionOpenCount(positionOpenCount); + orgHomeStatistics.setPositionCloseCount(positionCloseCount); + orgHomeStatistics.setUserChatCount(chatDTOList.size()); + orgHomeStatistics.setPositionRegistrationList(positionRegistrationList); + return orgHomeStatistics; + } }