Przeglądaj źródła

1、新增 PC已发简历关键词搜索 接口
2、更新优化 getUserCvStateListInfoPc 和 getUserCvStateListInfo 接口
3、新增 "alreadyPublishPositionList"获取已发布职位列表 接口

rayson 1 rok temu
rodzic
commit
bab304967d

+ 35 - 9
src/main/java/com/wechat/controller/EnterpriseController.java

@@ -3,6 +3,7 @@ package com.wechat.controller;
 import com.wechat.global.CustomException;
 import com.wechat.global.message.InfoMsg;
 import com.wechat.model.requestDto.*;
+import com.wechat.model.responseDto.AlreadyPublishPositionResp;
 import com.wechat.model.responseDto.AlreadyPublishResp;
 import com.wechat.model.responseDto.ContactUserInfoResp;
 import com.wechat.model.responseDto.ResultEntity;
@@ -21,6 +22,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -128,7 +130,7 @@ public class EnterpriseController {
     @ResponseBody
     public ResultEntity<Map<String, Object>> getUserCvStateListInfo(HttpServletRequest req,
                                                                     @Valid @RequestBody UserCvStatusReq param) {
-        Map<String, Object> maps = enterpriseService.getUserCvStateListInfo2(req, param, "0");
+        Map<String, Object> maps = enterpriseService.filterUserCv(req, param, "0");
         return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, maps);
     }
 
@@ -145,7 +147,7 @@ public class EnterpriseController {
     @ResponseBody
     public ResultEntity<Map<String, Object>> getUserCvStateListInfoPc(HttpServletRequest req,
                                                                       @Valid @RequestBody UserCvStatusReq param) {
-        Map<String, Object> maps = enterpriseService.getUserCvStateListInfo2(req, param, "1");
+        Map<String, Object> maps = enterpriseService.filterUserCv(req, param, "1");
         return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, maps);
     }
 
@@ -167,19 +169,31 @@ public class EnterpriseController {
     }
 
     /**
-     * @description 已发简历关键词搜索
+     * @param keyWordReq
+     * @return ResultEntity<Map < String, Object>>
+     * @description PC已发简历关键词搜索
      * @author rayson
+     * @date 2023-09-18 17:04
+     **/
+    @RequestMapping(value = "searchUserCvByKeyWordPc", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultEntity<Map<String, Object>> searchUserCvByKeyWordPc(HttpServletRequest req, @RequestBody KeyWordReq keyWordReq) {
+        return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, enterpriseService.searchUserCvByKeyWord(req, keyWordReq, "1"));
+    }
+
+    /**
      * @param keyWordReq
+     * @return ResultEntity<Map < String, Object>>
+     * @description 已发简历关键词搜索
+     * @author rayson
      * @date 2023-09-18 17:04
-     * @return ResultEntity<Map<String,Object>>
      **/
     @RequestMapping(value = "searchUserCvByKeyWord", method = RequestMethod.POST)
     @ResponseBody
-    public ResultEntity<Map<String,Object>> searchUserCvByKeyWord(HttpServletRequest req, @RequestBody KeyWordReq keyWordReq) {
-        return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, enterpriseService.searchUserCvByKeyWord(req,keyWordReq,"0"));
+    public ResultEntity<Map<String, Object>> searchUserCvByKeyWord(HttpServletRequest req, @RequestBody KeyWordReq keyWordReq) {
+        return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, enterpriseService.searchUserCvByKeyWord(req, keyWordReq, "0"));
     }
 
-
     /**
      * 邀请面试/录用/淘汰 更新简历状态 type ( 0-新投递;1-已查看;2-已下载;3-邀请面试;4-录取;5-淘汰;6-储备)
      *
@@ -198,10 +212,10 @@ public class EnterpriseController {
 
 
     /**
+     * @return ResultEntity<Map < String, Object>>
      * @description 批量更新发布日期(招聘中职位)
      * @author rayson
      * @date 2023-09-18 14:46
-     * @return ResultEntity<Map<String,Object>>
      **/
     @RequestMapping(value = "batchUpdatePublishDate", method = RequestMethod.POST)
     @ResponseBody
@@ -213,10 +227,10 @@ public class EnterpriseController {
 
 
     /**
+     * @return ResultEntity<Map < String, Object>>
      * @description 根据职位id更新发布日期
      * @author rayson
      * @date 2023-09-18 14:46
-     * @return ResultEntity<Map<String,Object>>
      **/
     @RequestMapping(value = "updatePublishDate", method = RequestMethod.POST)
     @ResponseBody
@@ -251,6 +265,18 @@ public class EnterpriseController {
         return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, response);
     }
 
+    /**
+     * @return PagingResult<AlreadyPublishPositionResp>
+     * @description 获取已发布职位列表
+     * @author rayson
+     * @date 2023-09-19 14:34
+     **/
+    @RequestMapping(value = "alreadyPublishPositionList", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultEntity<List<AlreadyPublishPositionResp>> alreadyPublishPositionList(HttpServletRequest req) {
+        return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, enterpriseService.alreadyPublishPositionList(req));
+    }
+
 
     /**
      * @param req

+ 17 - 0
src/main/java/com/wechat/dao/MdeJobAdvertisedDao.java

@@ -13,6 +13,7 @@ import com.wechat.model.dto.AvailableAndUsedCountDto;
 import com.wechat.model.dto.JobAdvertisedListDto;
 import com.wechat.model.dto.JobRepFormPvDto;
 import com.wechat.model.dto.ShowOfJobsDto;
+import com.wechat.model.responseDto.AlreadyPublishPositionResp;
 import com.wechat.model.responseDto.JobAdvertisedNologinResp;
 import com.wechat.model.responseDto.JobAdvertisedRes;
 import com.wechat.model.responseDto.JobAdvertisedResp;
@@ -296,6 +297,22 @@ public class MdeJobAdvertisedDao extends BaseDao {
                 "MdeJobAdvertisedMapper.alreadyPublishCount", page);
     }
 
+
+    /**
+     * @description 获取已发布职位列表
+     * @author rayson
+     * @param userCode
+     * @date 2023-09-19 14:34
+     * @return PagingResult<AlreadyPublishPositionResp>
+     **/
+    public List<AlreadyPublishPositionResp> alreadyPublishPositionList(String userCode) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("userCode", userCode);
+        return super.select("MdeJobAdvertisedMapper.alreadyPublishPositionList",map);
+
+    }
+
+
     /**
      * @param page
      * @return PagingResult<JobAdvertisedResp>

+ 5 - 0
src/main/java/com/wechat/dao/MdePositionCvRelDao.java

@@ -74,6 +74,11 @@ public class MdePositionCvRelDao extends BaseDao {
 		return super.findPage(page, "MdePositionCvRelMapper.getUserCvStateListInfo", paramsDto);
 	}
 
+	public PagingResult<UserInfoResp> filterUserCv(Pagination page) {
+		return super.selectPagination("MdePositionCvRelMapper.filterUserCv",
+				"MdePositionCvRelMapper.filterUserCvCount", page);
+	}
+
 
 	/**
 	 * @description 已发简历关键词检索

+ 13 - 2
src/main/java/com/wechat/model/requestDto/UserCvStatusReq.java

@@ -17,8 +17,11 @@ public class UserCvStatusReq {
 	@Value("#{configProperties['default.request.page.size']}")
 	private Integer size = 15;
 
-	@NotNull(message = "不能为空|type not null")
-	private String type;
+//	@NotNull(message = "不能为空|type not null")
+	private String type; // 简历类型
+
+	private String jobIdList; // 职位Id
+
 	public Integer getIndex() {
 		
 		return index;
@@ -44,4 +47,12 @@ public class UserCvStatusReq {
 		this.type = type;
 	}
 
+	public String getJobIdList() {
+		return jobIdList;
+	}
+
+	public void setJobIdList(String jobIdList) {
+		this.jobIdList = jobIdList;
+	}
+
 }

+ 28 - 0
src/main/java/com/wechat/model/responseDto/AlreadyPublishPositionResp.java

@@ -0,0 +1,28 @@
+package com.wechat.model.responseDto;
+
+/**
+ * @author rayson
+ * @description AlreadyPublishPositionResp 已发布职位列表
+ * @create 2023-09-19 14:30
+ **/
+public class AlreadyPublishPositionResp {
+
+    private String jobId; // 发布的工作Id
+    private String jobName; // 职位名称
+
+
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+    public String getJobName() {
+        return jobName;
+    }
+
+    public void setJobName(String jobName) {
+        this.jobName = jobName;
+    }
+}

+ 54 - 0
src/main/java/com/wechat/service/EnterpriseService.java

@@ -15,9 +15,11 @@ import com.wechat.global.base.interceptor.Page;
 import com.wechat.global.message.InfoMsg;
 import com.wechat.model.dbEntity.MdePositionCvRel;
 import com.wechat.model.dbEntity.MdeUser;
+import com.wechat.model.dto.TalentRetrievalDto;
 import com.wechat.model.dto.UserInfoResp;
 import com.wechat.model.dto.WorkDateDto;
 import com.wechat.model.requestDto.*;
+import com.wechat.model.responseDto.AlreadyPublishPositionResp;
 import com.wechat.model.responseDto.ContactUserInfoResp;
 import com.wechat.model.responseDto.JobAdvertisedResp;
 import com.wechat.model.responseDto.ResultEntity;
@@ -402,6 +404,7 @@ public class EnterpriseService extends BaseService {
      * @return
      * @author jadyn.wu
      */
+    @Deprecated
     public Map<String, Object> getUserCvStateListInfo2(HttpServletRequest req, UserCvStatusReq statusReq, String model) {
         Page<UserInfoResp> page2 = new Page<UserInfoResp>(statusReq.getIndex(), statusReq.getSize());
 
@@ -436,6 +439,47 @@ public class EnterpriseService extends BaseService {
         return maps;
     }
 
+    /**
+     * @description 已发简历筛选
+     * @author rayson
+     * @param statusReq
+     * @param model 终端类型(1-PC端 只显示1个面试时间)
+     * @date 2023-09-19 14:46
+     * @return Map<String,Object>
+     **/
+    public Map<String, Object> filterUserCv(HttpServletRequest req, UserCvStatusReq statusReq, String model) {
+        Map<String, Object> maps = Maps.newHashMap();
+        Pagination pagination = new Pagination(statusReq.getIndex(), statusReq.getSize());
+        Map<Object, Object> params = Maps.newHashMap();
+        List<String> jobIdList = null;
+        if (StringsUtils.isNotEmpty(statusReq.getJobIdList())) {
+            jobIdList = Arrays.asList(statusReq.getJobIdList().split(","));
+        }
+        String userCode = commonService.getUserCode(req);
+        String lang = commonService.getLanguage(req);
+        params.put("jobIdList", jobIdList);
+        params.put("lang",  lang);
+        params.put("publisher", userCode);
+        params.put("model", model);
+        params.put("status", statusReq.getType());
+
+        pagination.setParams(params);
+        PagingResult<UserInfoResp> page = mdePositionCvRelDao.filterUserCv(pagination);
+        // 所有简历数量
+        maps.put("allUserCvCount", getAllUserCvCount(userCode));
+        // 邀请简历数量
+        maps.put("inviteAuditionCount", inviteAuditionCount(userCode));
+        // 录用简历数量
+        maps.put("matriculateUserCv", matriculateUserCvCount(userCode));
+        // 淘汰简历数量
+        maps.put("eliminateUserCvCount", eliminateUserCvCount(userCode));
+        // 拼接头像域名
+        List<UserInfoResp> list = commonService.addDomainUrlEnterUserCv(page.getResultList());
+        page.setResultList(list);
+        maps.put("page", page);
+        return maps;
+    }
+
     /**
      * @description 已发简历关键词检索
      * @author rayson
@@ -609,6 +653,16 @@ public class EnterpriseService extends BaseService {
         return list;
     }
 
+    /**
+     * @description 获取已发布职位列表
+     * @author rayson
+     * @date 2023-09-19 14:34
+     * @return PagingResult<AlreadyPublishPositionResp>
+     **/
+    public List<AlreadyPublishPositionResp> alreadyPublishPositionList(HttpServletRequest req){
+       return mdeJobAdvertisedDao.alreadyPublishPositionList( commonService.getUserCode(req));
+    }
+
 
     /**
      * @param keyWordReq 关键词

+ 16 - 0
src/main/resources/mybatis/MdeJobAdvertisedMapper.xml

@@ -999,6 +999,22 @@
         order by ad.JOB_STATUS,ad.RECOMMEND_FLAG desc,ad.update_date desc
     </select>
 
+    <!-- 获取发布的职位列表 -->
+    <select id="alreadyPublishPositionList" resultType="com.wechat.model.responseDto.AlreadyPublishPositionResp">
+        SELECT
+            ad.JOB_ID AS jobId,
+            ad.JOB_NAME AS jobName
+        FROM
+            mde_job_advertised ad
+        WHERE
+            ad.DEL_FLAG = 0
+        AND ad.PUBLISHER = #{userCode}
+        GROUP BY
+            ad.JOB_NAME
+        ORDER BY
+            ad.JOB_STATUS ASC
+    </select>
+
     <!-- 已发职位关键词检索 统计 -->
     <select id="searchAlreadyPublishByKeyWordCount" resultType="java.lang.Integer">
         SELECT

+ 251 - 51
src/main/resources/mybatis/MdePositionCvRelMapper.xml

@@ -318,7 +318,7 @@
         a.CV_STATUS
     </select>
 
-    <!-- 投递该公司所有用户简历信息 -->
+    <!-- (已不用)投递该公司所有用户简历信息 -->
     <select id="getUserCvStateListInfo" resultMap="userInfoRespMap">
         SELECT
         j.JOB_NAME,
@@ -439,71 +439,271 @@
         p.UPDATE_DATE DESC
     </select>
 
-    <!-- 已发简历关键词搜索统计 -->
-    <select id="searchUserCvByKeyWordCount" resultType="java.lang.Integer">
+    <!-- 查询过滤已收简历 -->
+    <select id="filterUserCvCount"  resultType="java.lang.Integer">
         SELECT
         count(1)
         FROM (
+            SELECT
+            count(1)
+                FROM
+                mde_position_cv_rel p
+                INNER JOIN mde_job_advertised j
+                on j.JOB_ID = p.POS_ID
+                INNER JOIN mde_user u
+                on u.USER_CODE = p.CANDIDATE
+                <if test='status == "3" or status == "" or status == null'>
+                    <!-- 邀请面试状态  -->
+                    LEFT JOIN mde_interview intv
+                    ON intv.INTV_ID = p.INTV_ID
+                    AND intv.DEL_FLAG = '0'
+                    LEFT JOIN mde_intv_time time
+                    ON intv.INTV_ID = time.INTV_ID
+                    AND time.STATUS = '0'
+                    AND time.DEL_FLAG = '0'
+                    <if test='model == "1"'>
+                        AND time.sort = 1
+                    </if>
+                </if>
+                left join mde_work_experience we
+                on u.USER_CODE = we.USER_CODE
+                AND we.SHOW_FLAG = '0'
+                AND we.DEL_FLAG = 0
+                LEFT JOIN (
+                SELECT
+                min( edu.EDUCATION ) AS EDUCATION,
+                edu.USER_CODE
+                FROM
+                MDE_EDUCATION_EXPERIENCE edu
+                INNER JOIN mde_position_cv_rel p ON edu.USER_CODE = p.CANDIDATE
+                AND edu.DEL_FLAG = 0
+                where p.PUBLISHER = #{publisher}
+                GROUP BY
+                edu.USER_CODE
+                ) edumin ON edumin.USER_CODE = p.CANDIDATE
+
+                left JOIN sys_dict s
+                on edumin.EDUCATION = s.`value`
+                AND s.type = 'education'
+                WHERE
+                p.PUBLISHER = #{publisher}
+                <if test="status != null and status != ''">
+                    AND p.CV_STATUS =#{status}
+                </if>
+                <if test="jobId != null and jobId != ''">
+                    AND j.JOB_ID =#{jobId}
+                </if>
+                <if test="jobIdList != null">
+                    AND j.JOB_ID IN
+                    <foreach collection="jobIdList" item="id" separator="," open="(" close=")">
+                        #{id}
+                    </foreach>
+                </if>
+                AND p.DEL_FLAG = 0
+                AND u.DEL_FLAG = 0
+                AND j.DEL_FLAG = 0
+                GROUP BY
+                p.CANDIDATE
+                ,p.POS_ID
+                <if test='status == "3" or status == "" or status == null'>
+                    ,time.INTV_TIME_ID
+                </if>
+        ) as count
+    </select>
+
+    <!-- 查询过滤已收简历 -->
+    <select id="filterUserCv" resultMap="userInfoRespMap">
         SELECT
-        count(1)
+        j.JOB_NAME,
+        u.USER_NAME,
+        u.foreign_name,
+        u.identity_flag ,
+        u.birthday ,
+        u.USER_CODE ,
+        u.HEAD_PORTRAIT ,
+        u.FIRST_WORK ,
+        u.EMAIL,
+        u.`NAME` ,
+        p.INTV_ID,
+        p.POS_ID,
+        p.CV_STATUS,
+        p.CV_URL,
+        p.DELIVER_DATE,
+        <if test='status == "3" or status == "" or status == null'>
+            <!-- 邀请面试状态  -->
+            intv.ENT_CONTACTS as entContacts,
+            intv.ENT_CONTACT_INFO as entContactInfo,
+            intv.TYPE as type,
+            intv.ADDR_PROVINCE as addrProvince,
+            intv.ADDR_CITY as addrCity,
+            intv.ADDR_AREA as addrArea,
+            intv.ADD_DETAIL as addDetail,
+            intv.INTV_TIME as intvTime,
+            intv.ROOM_ID as roomId,
+            intv.STATUS as intvStatus,
+            intv.CREATE_DATE as inviteDate,
+            intv.UPDATE_DATE as inviteUpdateDate,
+            intv.REMARKS as remarks,
+            time.INTV_TIME_ID as intvTimeId,
+            time.INTV_TIME_FROM as intvTimeFrom,
+            time.INTV_TIME_TO as intvTimeTo,
+            time.CONFIRMED_BY as confirmedBy,
+        </if>
+        we.co_name AS "coName",
+        we.position_title AS "positionTitle",
+        we.enter_date AS "weEnterDate",
+        we.quit_date AS "weQuitDate",
+        we.show_flag AS "showFlag"
+        <choose>
+            <when test="lang == 'en'.toString()">
+                ,s.en as educationName
+            </when>
+            <otherwise>
+                ,s.label as educationName
+            </otherwise>
+        </choose>
         FROM
         mde_position_cv_rel p
         INNER JOIN mde_job_advertised j
         on j.JOB_ID = p.POS_ID
         INNER JOIN mde_user u
         on u.USER_CODE = p.CANDIDATE
-        <!-- 邀请面试状态  -->    LEFT JOIN mde_interview intv
-        ON intv.INTV_ID =
-        p.INTV_ID
-        AND
-        intv.DEL_FLAG = '0'
-        LEFT JOIN mde_intv_time time
-        ON intv.INTV_ID = time.INTV_ID
-        AND time.STATUS = '0'
-        AND time.DEL_FLAG = '0'
-        <if test='model == "1"'>
+        <if test='status == "3" or status == "" or status == null'>
+            <!-- 邀请面试状态  -->
+            LEFT JOIN mde_interview intv
+            ON intv.INTV_ID = p.INTV_ID
+            AND intv.DEL_FLAG = '0'
+            LEFT JOIN mde_intv_time time
+            ON intv.INTV_ID = time.INTV_ID
+            AND time.STATUS = '0'
+            AND time.DEL_FLAG = '0'
+            <if test='model == "1"'>
                 AND time.sort = 1
             </if>
+        </if>
+        left join mde_work_experience we
+        on u.USER_CODE = we.USER_CODE
+        AND we.SHOW_FLAG = '0'
+        AND we.DEL_FLAG = 0
+        LEFT JOIN (
+        SELECT
+        min( edu.EDUCATION ) AS EDUCATION,
+        edu.USER_CODE
+        FROM
+        MDE_EDUCATION_EXPERIENCE edu
+        INNER JOIN mde_position_cv_rel p ON edu.USER_CODE = p.CANDIDATE
+        AND edu.DEL_FLAG = 0
+        where p.PUBLISHER = #{publisher}
+        GROUP BY
+        edu.USER_CODE
+        ) edumin ON edumin.USER_CODE = p.CANDIDATE
+
+        left JOIN sys_dict s
+        on edumin.EDUCATION = s.`value`
+        AND s.type = 'education'
+        WHERE
+        p.PUBLISHER = #{publisher}
+        <if test="status != null and status != ''">
+            AND p.CV_STATUS =#{status}
+        </if>
+        <if test="jobId != null and jobId != ''">
+            AND j.JOB_ID =#{jobId}
+        </if>
+        <if test="jobIdList != null">
+            AND j.JOB_ID IN
+            <foreach collection="jobIdList" item="id" separator="," open="(" close=")">
+                  #{id}
+            </foreach>
+        </if>
+        AND p.DEL_FLAG = 0
+        AND u.DEL_FLAG = 0
+        AND j.DEL_FLAG = 0
+        GROUP BY
+        p.CANDIDATE
+        ,p.POS_ID
+        <if test='status == "3" or status == "" or status == null'>
+            ,time.INTV_TIME_ID
+        </if>
+        order by
+        j.JOB_STATUS asc,
+        <if test='status == "3"'>
+            <!-- 状态[1-待求职者确认;2-待企业确认;3-等待面试;4-已拒绝;5-面试结束] -->
+            (case intv.STATUS
+            when 2 then 1
+            when 3 then 2
+            when 1 then 3
+            else 9 end ) asc,
+            intv.UPDATE_DATE desc,
+        </if>
+        p.DELIVER_DATE DESC,
+        p.UPDATE_DATE DESC
+    </select>
 
-            left join mde_work_experience we
-            on u.USER_CODE = we.USER_CODE
-            AND we.SHOW_FLAG = '0'
-            AND we.DEL_FLAG = 0
-            LEFT JOIN (
+    <!-- 已发简历关键词搜索统计 -->
+    <select id="searchUserCvByKeyWordCount" resultType="java.lang.Integer">
+        SELECT
+        count(1)
+        FROM (
             SELECT
-            min( edu.EDUCATION ) AS EDUCATION,
-            edu.USER_CODE
+            count(1)
             FROM
-            MDE_EDUCATION_EXPERIENCE edu
-            INNER JOIN mde_position_cv_rel p ON edu.USER_CODE = p.CANDIDATE
-            AND edu.DEL_FLAG = 0
-            where p.PUBLISHER = #{publisher}
-            GROUP BY
-            edu.USER_CODE
-            ) edumin ON edumin.USER_CODE = p.CANDIDATE
-
-            left JOIN sys_dict s
-            on edumin.EDUCATION = s.`value`
-            AND s.type = 'education'
-            WHERE
-            p.PUBLISHER = #{publisher}
-            AND p.DEL_FLAG = 0
-            AND u.DEL_FLAG = 0
-            AND j.DEL_FLAG = 0
-            <if test="keyWord !=null">
-                AND
-                (
-                MATCH(j.JOB_NAME) AGAINST(#{keyWord} IN BOOLEAN MODE)
-                or
-                MATCH(u.NAME,u.FOREIGN_NAME,u.USER_NAME) AGAINST(#{keyWord} IN BOOLEAN MODE)
-                or
-                s.label like concat('%',#{keyWord},'%')
-                )
-            </if>
-            GROUP BY
-            p.CANDIDATE,
-            p.POS_ID,
-            time.INTV_TIME_ID
+            mde_position_cv_rel p
+            INNER JOIN mde_job_advertised j
+            on j.JOB_ID = p.POS_ID
+            INNER JOIN mde_user u
+            on u.USER_CODE = p.CANDIDATE
+            <!-- 邀请面试状态  -->    LEFT JOIN mde_interview intv
+            ON intv.INTV_ID =
+            p.INTV_ID
+            AND
+            intv.DEL_FLAG = '0'
+            LEFT JOIN mde_intv_time time
+            ON intv.INTV_ID = time.INTV_ID
+            AND time.STATUS = '0'
+            AND time.DEL_FLAG = '0'
+            <if test='model == "1"'>
+                    AND time.sort = 1
+                </if>
+
+                left join mde_work_experience we
+                on u.USER_CODE = we.USER_CODE
+                AND we.SHOW_FLAG = '0'
+                AND we.DEL_FLAG = 0
+                LEFT JOIN (
+                SELECT
+                min( edu.EDUCATION ) AS EDUCATION,
+                edu.USER_CODE
+                FROM
+                MDE_EDUCATION_EXPERIENCE edu
+                INNER JOIN mde_position_cv_rel p ON edu.USER_CODE = p.CANDIDATE
+                AND edu.DEL_FLAG = 0
+                where p.PUBLISHER = #{publisher}
+                GROUP BY
+                edu.USER_CODE
+                ) edumin ON edumin.USER_CODE = p.CANDIDATE
+
+                left JOIN sys_dict s
+                on edumin.EDUCATION = s.`value`
+                AND s.type = 'education'
+                WHERE
+                p.PUBLISHER = #{publisher}
+                AND p.DEL_FLAG = 0
+                AND u.DEL_FLAG = 0
+                AND j.DEL_FLAG = 0
+                <if test="keyWord !=null">
+                    AND
+                    (
+                    MATCH(j.JOB_NAME) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH(u.NAME,u.FOREIGN_NAME,u.USER_NAME) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    s.label like concat('%',#{keyWord},'%')
+                    )
+                </if>
+                GROUP BY
+                p.CANDIDATE,
+                p.POS_ID,
+                time.INTV_TIME_ID
         ) as count
     </select>