feat: 增加跨域招聘会逐场统计明细

This commit is contained in:
2026-07-24 10:24:18 +08:00
parent a7e9d911db
commit 3784dd5208
5 changed files with 136 additions and 1 deletions

View File

@@ -0,0 +1,41 @@
package com.ruoyi.cms.domain.rc;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 跨域线上招聘会统计中的单场明细。
*/
@Data
@ApiModel("跨域线上招聘会统计明细")
public class CrossDomainStatisticsFairItem implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("招聘会 ID")
private String fairId;
@ApiModelProperty("招聘会名称")
private String fairTitle;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("招聘会起始时间")
private Date startTime;
@ApiModelProperty("参会企业数量")
private Long companyCount;
@ApiModelProperty("岗位数量")
private Long jobCount;
@ApiModelProperty("招聘需求人数")
private Long demandCount;
@ApiModelProperty("岗位浏览量")
private Long viewCount;
}

View File

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 跨域线上招聘会统计汇总。
@@ -29,4 +30,7 @@ public class CrossDomainStatisticsVO implements Serializable {
@ApiModelProperty("岗位浏览量")
private Long viewCount;
@ApiModelProperty("涉及招聘会明细")
private List<CrossDomainStatisticsFairItem> fairs;
}

View File

@@ -68,6 +68,12 @@ public interface PublicJobFairMapper extends BaseMapper<PublicJobFair> {
CrossDomainStatisticsVO selectCrossDomainStatistics(@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
/**
* 查询指定时间范围内跨域线上招聘会的逐场统计明细。
*/
List<CrossDomainStatisticsFairItem> selectCrossDomainFairStatistics(@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
/**
* 检查用户是否已报名
*/

View File

@@ -704,6 +704,11 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService {
@Override
public CrossDomainStatisticsVO selectCrossDomainStatistics(Date startDate, Date endDate) {
return publicJobFairMapper.selectCrossDomainStatistics(startDate, endDate);
CrossDomainStatisticsVO statistics = publicJobFairMapper.selectCrossDomainStatistics(startDate, endDate);
if (statistics == null) {
statistics = new CrossDomainStatisticsVO();
}
statistics.setFairs(publicJobFairMapper.selectCrossDomainFairStatistics(startDate, endDate));
return statistics;
}
}

View File

@@ -270,6 +270,85 @@
), 0) AS "viewCount"
</select>
<select id="selectCrossDomainFairStatistics"
resultType="com.ruoyi.cms.domain.rc.CrossDomainStatisticsFairItem">
SELECT
f.job_fair_id AS "fairId",
f.job_fair_title AS "fairTitle",
f.job_fair_start_time AS "startTime",
COALESCE((
SELECT COUNT(DISTINCT company_relation.company_id)
FROM public_job_fair_company company_relation
WHERE company_relation.job_fair_id = f.job_fair_id
AND company_relation.del_flag = '0'
AND COALESCE(company_relation.review_status, '1') = '1'
), 0) AS "companyCount",
COALESCE((
SELECT COUNT(DISTINCT fair_job.job_id)
FROM public_job_fair_job fair_job
INNER JOIN job job_info ON job_info.job_id = fair_job.job_id
AND job_info.del_flag = '0'
WHERE fair_job.job_fair_id = f.job_fair_id
AND fair_job.del_flag = '0'
AND EXISTS (
SELECT 1
FROM public_job_fair_company company_relation
WHERE company_relation.job_fair_id = fair_job.job_fair_id
AND company_relation.company_id = fair_job.company_id
AND company_relation.del_flag = '0'
AND COALESCE(company_relation.review_status, '1') = '1'
)
), 0) AS "jobCount",
COALESCE((
SELECT SUM(CASE
WHEN job_info.vacancies IS NULL OR job_info.vacancies <![CDATA[ <= ]]> 0 THEN 1
ELSE job_info.vacancies
END)
FROM (
SELECT DISTINCT fair_job.job_id
FROM public_job_fair_job fair_job
WHERE fair_job.job_fair_id = f.job_fair_id
AND fair_job.del_flag = '0'
AND EXISTS (
SELECT 1
FROM public_job_fair_company company_relation
WHERE company_relation.job_fair_id = fair_job.job_fair_id
AND company_relation.company_id = fair_job.company_id
AND company_relation.del_flag = '0'
AND COALESCE(company_relation.review_status, '1') = '1'
)
) fair_job
INNER JOIN job job_info ON job_info.job_id = fair_job.job_id
AND job_info.del_flag = '0'
), 0) AS "demandCount",
COALESCE((
SELECT SUM(COALESCE(job_info."view", 0))
FROM (
SELECT DISTINCT fair_job.job_id
FROM public_job_fair_job fair_job
WHERE fair_job.job_fair_id = f.job_fair_id
AND fair_job.del_flag = '0'
AND EXISTS (
SELECT 1
FROM public_job_fair_company company_relation
WHERE company_relation.job_fair_id = fair_job.job_fair_id
AND company_relation.company_id = fair_job.company_id
AND company_relation.del_flag = '0'
AND COALESCE(company_relation.review_status, '1') = '1'
)
) fair_job
INNER JOIN job job_info ON job_info.job_id = fair_job.job_id
AND job_info.del_flag = '0'
), 0) AS "viewCount"
FROM public_job_fair f
WHERE UPPER(COALESCE(f.is_cross_domain, 'N')) = 'Y'
AND f.job_fair_type = '1'
AND f.del_flag = '0'
AND f.job_fair_start_time <![CDATA[ >= ]]> #{startDate}
AND f.job_fair_start_time <![CDATA[ < ]]> #{endDate}
ORDER BY f.job_fair_start_time DESC NULLS LAST, f.job_fair_id DESC
</select>
<select id="checkUserSignUp" resultType="java.lang.Integer">
select count(1) from rc_job_fair_sign_up
where job_fair_id = #{jobFairId}::bigint and user_id = #{personId} and del_flag = '0' and status = '0'