Files
shz-backend/ruoyi-bussiness/src/main/resources/mapper/app/FairStatisticsMapper.xml

148 lines
7.1 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cms.mapper.FairStatisticsMapper">
<!--
线上招聘会:
- 只统计招聘会类型为“1-线上”的有效公共招聘会;
- 参会单位为审核通过的企业;
- 职位、需求人数、投递岗位均限定为有效招聘会岗位;
- vacancies 为空或非正数时按“若干”口径计为 1 人。
-->
<select id="selectOnlineFairStatistics" resultType="com.ruoyi.cms.domain.vo.FairStatisticsFairItem">
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 &lt;= 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 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'
INNER JOIN job_apply apply_record ON apply_record.job_id = fair_job.job_id
AND apply_record.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 "interactionCount"
FROM public_job_fair f
WHERE f.del_flag = '0'
AND f.job_fair_type = '1'
<choose>
<when test="fairId != null and fairId != ''">
AND f.job_fair_id = #{fairId}
</when>
<otherwise>
AND f.job_fair_start_time <![CDATA[ >= ]]> #{startTime}
AND f.job_fair_start_time <![CDATA[ < ]]> #{endTime}
</otherwise>
</choose>
ORDER BY f.job_fair_start_time DESC NULLS LAST, f.job_fair_id DESC
</select>
<!--
户外招聘会没有投递入口,因此 interactionCount 只汇总签到人员记录。
户外岗位也使用 job.vacancies为空或非正数时按“若干=1 人”处理。
-->
<select id="selectOutdoorFairStatistics" resultType="com.ruoyi.cms.domain.vo.FairStatisticsFairItem">
SELECT
CAST(f.id AS VARCHAR) AS "fairId",
f.title AS "fairTitle",
f.hold_time AS "startTime",
COALESCE((
SELECT COUNT(DISTINCT company_relation.company_id)
FROM fair_company company_relation
WHERE company_relation.job_fair_id = f.id
AND COALESCE(company_relation.del_flag, '0') = '0'
), 0) AS "companyCount",
COALESCE((
SELECT COUNT(DISTINCT fair_job.job_id)
FROM cms_outdoor_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.fair_id = f.id
AND COALESCE(fair_job.del_flag, '0') = '0'
), 0) AS "jobCount",
COALESCE((
SELECT SUM(CASE WHEN job_info.vacancies IS NULL OR job_info.vacancies &lt;= 0 THEN 1 ELSE job_info.vacancies END)
FROM (
SELECT DISTINCT fair_job.job_id
FROM cms_outdoor_fair_job fair_job
WHERE fair_job.fair_id = f.id
AND COALESCE(fair_job.del_flag, '0') = '0'
) 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 COUNT(1)
FROM cms_outdoor_fair_attendee attendee
WHERE attendee.fair_id = f.id
AND COALESCE(attendee.del_flag, '0') = '0'
), 0) AS "interactionCount"
FROM cms_outdoor_fair f
WHERE COALESCE(f.del_flag, '0') = '0'
<choose>
<when test="fairId != null">
AND f.id = #{fairId}
</when>
<otherwise>
AND f.hold_time <![CDATA[ >= ]]> #{startTime}
AND f.hold_time <![CDATA[ < ]]> #{endTime}
</otherwise>
</choose>
ORDER BY f.hold_time DESC NULLS LAST, f.id DESC
</select>
</mapper>