Files
offerpai_backend/manager/src/main/resources/mapper/JobMapper.xml
T
2026-07-31 15:58:30 +08:00

160 lines
7.2 KiB
XML

<?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="org.jiayunet.mapper.JobMapper">
<resultMap id="JobListItemVoMap" type="org.jiayunet.pojo.vo.JobListItemVo">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="salary" property="salary"/>
<result column="education" property="education"/>
<result column="tags" property="tags" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
<result column="source_url" property="sourceUrl"/>
<result column="required_industry_id" property="requiredIndustryId"/>
<result column="min_experience" property="minExperience"/>
<result column="required_major_ids" property="requiredMajorIds" typeHandler="org.jiayunet.config.LongListTypeHandler"/>
<result column="major_sensitivity" property="majorSensitivity"/>
<result column="status" property="status"/>
<result column="expire_at" property="expireAt"/>
<result column="pyname" property="pyname"/>
<result column="recruit_category" property="recruitCategory"/>
<result column="company_id" property="companyId"/>
<result column="company_name" property="companyName"/>
<result column="company_short_name" property="companyShortName"/>
<result column="company_type" property="companyType"/>
<result column="company_logo_url" property="companyLogoUrl"/>
<result column="company_tags" property="companyTags" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
<result column="region_code" property="regionCode"/>
<result column="region_name" property="regionName"/>
<result column="category_id" property="categoryId"/>
<result column="category_name" property="categoryName"/>
<result column="company_industry_id" property="companyIndustryId"/>
</resultMap>
<select id="selectJobPage" resultMap="JobListItemVoMap">
SELECT
j.id,
j.title,
j.salary,
j.education,
j.tags,
j.source_url,
j.required_industry_id,
j.min_experience,
j.required_major_ids,
j.major_sensitivity,
j.status,
j.expire_at,
j.pyname,
j.recruit_category,
c.id AS company_id,
c.name AS company_name,
c.short_name AS company_short_name,
c.company_type,
c.logo_url AS company_logo_url,
c.tags AS company_tags,
c.industry_id AS company_industry_id,
c.region_code,
r.name AS region_name,
cat.id AS category_id,
cat.name AS category_name
FROM bg_job j
INNER JOIN bg_company c ON j.company_id = c.id
INNER JOIN bg_china_regions_code r ON c.region_code = r.code
INNER JOIN bg_job_category cat ON j.category_id = cat.id
WHERE c.status = 1
<!-- 岗位状态过滤 -->
<if test="statusFilter != null and statusFilter.size() > 0">
AND j.status IN
<foreach collection="statusFilter" item="status" open="(" separator="," close=")">
#{status}
</foreach>
</if>
<!-- 指定岗位ID列表(用于收藏列表) -->
<if test="jobIds != null and jobIds.size() > 0">
AND j.id IN
<foreach collection="jobIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!-- 关键字 -->
<if test="keyword != null and keyword.length()>0">
AND
(
j.title like concat("%",#{keyword},"%")
or
c.name like concat("%",#{keyword},"%")
)
</if>
<!-- 排除不感兴趣的岗位 -->
<if test="excludeJobIds != null and excludeJobIds.size() > 0">
AND j.id NOT IN
<foreach collection="excludeJobIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!-- 排除不感兴趣的公司 -->
<if test="excludeCompanyIds != null and excludeCompanyIds.size() > 0">
AND c.id NOT IN
<foreach collection="excludeCompanyIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!-- 排除不感兴趣的地区(含子级) -->
<if test="excludeRegionCodes != null and excludeRegionCodes.size() > 0">
AND c.region_code NOT IN
<foreach collection="excludeRegionCodes" item="code" open="(" separator="," close=")">
#{code}
</foreach>
</if>
<!-- 排除不感兴趣的行业(含子级) -->
<if test="excludeIndustryIds != null and excludeIndustryIds.size() > 0">
AND (j.required_industry_id IS NULL OR j.required_industry_id NOT IN
<foreach collection="excludeIndustryIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>)
</if>
<!-- 筛选条件:地区(含子级) -->
<if test="regionCodes != null and regionCodes.size() > 0">
AND c.region_code IN
<foreach collection="regionCodes" item="code" open="(" separator="," close=")">
#{code}
</foreach>
</if>
<!-- 筛选条件:岗位类型(含子级) -->
<if test="categoryIds != null and categoryIds.size() > 0">
AND j.category_id IN
<foreach collection="categoryIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!-- 筛选条件:行业(含子级) -->
<if test="industryIds != null and industryIds.size() > 0">
AND j.required_industry_id IN
<foreach collection="industryIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!-- 筛选条件:工作类型 -->
<if test="employmentType != null">
AND j.employment_type = #{employmentType}
</if>
<!-- 筛选条件:招聘分类 -->
<if test="recruitCategory != null">
AND j.recruit_category = #{recruitCategory}
</if>
<!-- 筛选条件:公司类型(可多选) -->
<if test="companyTypes != null and companyTypes.size() > 0">
AND c.company_type IN
<foreach collection="companyTypes" item="type" open="(" separator="," close=")">
#{type}
</foreach>
</if>
<!-- 筛选条件:公司ID -->
<if test="companyId != null">
AND j.company_id = #{companyId}
</if>
ORDER BY j.id DESC
</select>
</mapper>