添加推荐公告列表
This commit is contained in:
@@ -4,8 +4,10 @@ import lombok.AllArgsConstructor;
|
|||||||
import org.jiayunet.pojo.PageResult;
|
import org.jiayunet.pojo.PageResult;
|
||||||
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDetailDto;
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDetailDto;
|
||||||
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDto;
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDto;
|
||||||
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementRecommendDto;
|
||||||
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementStatisticsDto;
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementStatisticsDto;
|
||||||
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementQueryParam;
|
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementQueryParam;
|
||||||
|
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementRecommendParam;
|
||||||
import org.jiayunet.service.RecruitAnnouncementService;
|
import org.jiayunet.service.RecruitAnnouncementService;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -50,6 +52,12 @@ public class RecruitAnnouncementController {
|
|||||||
return recruitAnnouncementService.pageAnnouncement(param);
|
return recruitAnnouncementService.pageAnnouncement(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 分页查询推荐公告(同行业或同岗位大类) */
|
||||||
|
@PostMapping("/recommend")
|
||||||
|
public PageResult<RecruitAnnouncementRecommendDto> pageRecommend(@Validated @RequestBody RecruitAnnouncementRecommendParam param) {
|
||||||
|
return recruitAnnouncementService.pageRecommend(param);
|
||||||
|
}
|
||||||
|
|
||||||
/** 查询公告详情 */
|
/** 查询公告详情 */
|
||||||
@GetMapping("/detail")
|
@GetMapping("/detail")
|
||||||
public RecruitAnnouncementDetailDto getDetail(@RequestParam Long id) {
|
public RecruitAnnouncementDetailDto getDetail(@RequestParam Long id) {
|
||||||
|
|||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
package org.jiayunet.pojo.dto.recruitAnnouncement;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招聘公告推荐返回
|
||||||
|
*
|
||||||
|
* @author zk
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RecruitAnnouncementRecommendDto {
|
||||||
|
|
||||||
|
/** 公告ID */
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 公司名称 */
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/** 公司logo */
|
||||||
|
private String logoUrl;
|
||||||
|
|
||||||
|
/** 岗位大类列表 */
|
||||||
|
private List<String> categoryNames;
|
||||||
|
|
||||||
|
/** 热招城市列表 */
|
||||||
|
private List<String> cityNames;
|
||||||
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
package org.jiayunet.pojo.param.recruitAnnouncement;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.jiayunet.pojo.PageParam;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招聘公告推荐入参
|
||||||
|
*
|
||||||
|
* @author zk
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class RecruitAnnouncementRecommendParam extends PageParam {
|
||||||
|
|
||||||
|
/** 公告ID */
|
||||||
|
@NotNull(message = "公告ID不能为空")
|
||||||
|
private Long announcementId;
|
||||||
|
}
|
||||||
@@ -17,8 +17,10 @@ import org.jiayunet.mapper.RecruitAnnouncementYearMapper;
|
|||||||
import org.jiayunet.pojo.PageResult;
|
import org.jiayunet.pojo.PageResult;
|
||||||
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDetailDto;
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDetailDto;
|
||||||
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDto;
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDto;
|
||||||
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementRecommendDto;
|
||||||
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementStatisticsDto;
|
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementStatisticsDto;
|
||||||
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementQueryParam;
|
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementQueryParam;
|
||||||
|
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementRecommendParam;
|
||||||
import org.jiayunet.pojo.po.Company;
|
import org.jiayunet.pojo.po.Company;
|
||||||
import org.jiayunet.pojo.po.RecruitAnnouncement;
|
import org.jiayunet.pojo.po.RecruitAnnouncement;
|
||||||
import org.jiayunet.pojo.po.RecruitAnnouncementBatch;
|
import org.jiayunet.pojo.po.RecruitAnnouncementBatch;
|
||||||
@@ -133,6 +135,51 @@ public class RecruitAnnouncementService {
|
|||||||
return new PageResult<>(page.getCurrent(), page.getSize(), page.getTotal(), dtoList);
|
return new PageResult<>(page.getCurrent(), page.getSize(), page.getTotal(), dtoList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询推荐公告
|
||||||
|
* <p>1. 校验公告存在 2. 取该公告的行业与岗位大类 3. 命中任一维度即推荐 4. 按本页id组装分类与城市</p>
|
||||||
|
*/
|
||||||
|
public PageResult<RecruitAnnouncementRecommendDto> pageRecommend(RecruitAnnouncementRecommendParam param) {
|
||||||
|
|
||||||
|
//校验公告存在
|
||||||
|
Long announcementId = param.getAnnouncementId();
|
||||||
|
RecruitAnnouncement announcement = recruitAnnouncementMapper.selectById(announcementId);
|
||||||
|
if (announcement == null || announcement.getStatus() == 0) {
|
||||||
|
throw new BusinessException(BusinessExpCodeEnum.DATA_NOT_EXIST, "公告不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
//取该公告的行业与岗位大类作为推荐依据
|
||||||
|
List<String> industryNames = industryMapper.selectList(new LambdaQueryWrapper<RecruitAnnouncementIndustry>().eq(RecruitAnnouncementIndustry::getAnnouncementId, announcementId)).stream().map(RecruitAnnouncementIndustry::getIndustryName).collect(Collectors.toList());
|
||||||
|
List<String> categoryNames = categoryMapper.selectList(new LambdaQueryWrapper<RecruitAnnouncementCategory>().eq(RecruitAnnouncementCategory::getAnnouncementId, announcementId)).stream().map(RecruitAnnouncementCategory::getCategoryName).collect(Collectors.toList());
|
||||||
|
|
||||||
|
//查询数据
|
||||||
|
Page<RecruitAnnouncementListItemVo> pageParam = param.toPage();
|
||||||
|
pageParam.setSearchCount(false);
|
||||||
|
if (industryNames.isEmpty() && categoryNames.isEmpty()) {
|
||||||
|
return new PageResult<>(pageParam.getCurrent(), pageParam.getSize(), 0L, List.of());
|
||||||
|
}
|
||||||
|
Page<RecruitAnnouncementListItemVo> page = recruitAnnouncementMapper.selectRecommendPage(pageParam, industryNames, categoryNames);
|
||||||
|
|
||||||
|
List<Long> announcementIds = page.getRecords().stream().map(RecruitAnnouncementListItemVo::getId).collect(Collectors.toList());
|
||||||
|
if (announcementIds.isEmpty()) {
|
||||||
|
return new PageResult<>(page.getCurrent(), page.getSize(), page.getTotal(), List.of());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 按本页id批量查从表,各自按公告id分组
|
||||||
|
Map<Long, List<String>> categoryMap = categoryMapper.selectList(new LambdaQueryWrapper<RecruitAnnouncementCategory>().in(RecruitAnnouncementCategory::getAnnouncementId, announcementIds)).stream().collect(Collectors.groupingBy(RecruitAnnouncementCategory::getAnnouncementId, Collectors.mapping(RecruitAnnouncementCategory::getCategoryName, Collectors.toList())));
|
||||||
|
Map<Long, List<String>> cityMap = cityMapper.selectList(new LambdaQueryWrapper<RecruitAnnouncementCity>().in(RecruitAnnouncementCity::getAnnouncementId, announcementIds)).stream().collect(Collectors.groupingBy(RecruitAnnouncementCity::getAnnouncementId, Collectors.mapping(RecruitAnnouncementCity::getCityName, Collectors.toList())));
|
||||||
|
|
||||||
|
// 组装返回数据
|
||||||
|
List<RecruitAnnouncementRecommendDto> dtoList = page.getRecords().stream().map(vo -> {
|
||||||
|
RecruitAnnouncementRecommendDto dto = new RecruitAnnouncementRecommendDto();
|
||||||
|
BeanUtils.copyProperties(vo, dto);
|
||||||
|
dto.setCategoryNames(categoryMap.getOrDefault(vo.getId(), List.of()));
|
||||||
|
dto.setCityNames(cityMap.getOrDefault(vo.getId(), List.of()));
|
||||||
|
return dto;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
return new PageResult<>(page.getCurrent(), page.getSize(), page.getTotal(), dtoList);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询公告详情
|
* 查询公告详情
|
||||||
* <p>1. 查公告主表(不存在或已失效则报错) 2. 补公司logo与类型 3. 按公告id查7张从表组装多值维度</p>
|
* <p>1. 查公告主表(不存在或已失效则报错) 2. 补公司logo与类型 3. 按公告id查7张从表组装多值维度</p>
|
||||||
|
|||||||
@@ -38,4 +38,10 @@ public interface RecruitAnnouncementMapper extends CommonMapper<RecruitAnnouncem
|
|||||||
* <p>各筛选条件为“且”关系,为空则不参与筛选;多值维度不在此查询,由Java侧按id批量组装</p>
|
* <p>各筛选条件为“且”关系,为空则不参与筛选;多值维度不在此查询,由Java侧按id批量组装</p>
|
||||||
*/
|
*/
|
||||||
Page<RecruitAnnouncementListItemVo> selectAnnouncementPage(Page<RecruitAnnouncementListItemVo> page, @Param("keyword") String keyword, @Param("publishTimeStart") Instant publishTimeStart, @Param("publishTimeEnd") Instant publishTimeEnd, @Param("applyEndTimeStart") Instant applyEndTimeStart, @Param("applyEndTimeEnd") Instant applyEndTimeEnd, @Param("companyTypes") List<String> companyTypes, @Param("educationNames") List<String> educationNames, @Param("recruitYears") List<Integer> recruitYears, @Param("batchNames") List<String> batchNames, @Param("categoryNames") List<String> categoryNames, @Param("cityNames") List<String> cityNames, @Param("industryNames") List<String> industryNames, @Param("tagNames") List<String> tagNames);
|
Page<RecruitAnnouncementListItemVo> selectAnnouncementPage(Page<RecruitAnnouncementListItemVo> page, @Param("keyword") String keyword, @Param("publishTimeStart") Instant publishTimeStart, @Param("publishTimeEnd") Instant publishTimeEnd, @Param("applyEndTimeStart") Instant applyEndTimeStart, @Param("applyEndTimeEnd") Instant applyEndTimeEnd, @Param("companyTypes") List<String> companyTypes, @Param("educationNames") List<String> educationNames, @Param("recruitYears") List<Integer> recruitYears, @Param("batchNames") List<String> batchNames, @Param("categoryNames") List<String> categoryNames, @Param("cityNames") List<String> cityNames, @Param("industryNames") List<String> industryNames, @Param("tagNames") List<String> tagNames);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询推荐公告
|
||||||
|
* <p>命中任一行业或任一岗位大类即可</p>
|
||||||
|
*/
|
||||||
|
Page<RecruitAnnouncementListItemVo> selectRecommendPage(Page<RecruitAnnouncementListItemVo> page, @Param("industryNames") List<String> industryNames, @Param("categoryNames") List<String> categoryNames);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,4 +158,40 @@
|
|||||||
ORDER BY ra.id DESC
|
ORDER BY ra.id DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 分页查询推荐公告:命中任一行业或任一岗位大类 -->
|
||||||
|
<select id="selectRecommendPage" resultMap="RecruitAnnouncementListItemVoMap">
|
||||||
|
SELECT
|
||||||
|
ra.id,
|
||||||
|
ra.company_name,
|
||||||
|
c.logo_url
|
||||||
|
FROM bg_recruit_announcement ra
|
||||||
|
INNER JOIN bg_company c ON ra.company_id = c.id
|
||||||
|
WHERE c.status = 1
|
||||||
|
AND ra.status = 1
|
||||||
|
AND (
|
||||||
|
1 = 0
|
||||||
|
<if test="industryNames != null and industryNames.size() > 0">
|
||||||
|
OR ra.id IN (
|
||||||
|
SELECT rai.announcement_id
|
||||||
|
FROM bg_recruit_announcement_industry rai
|
||||||
|
WHERE rai.industry_name IN
|
||||||
|
<foreach collection="industryNames" item="name" open="(" separator="," close=")">
|
||||||
|
#{name}
|
||||||
|
</foreach>
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
<if test="categoryNames != null and categoryNames.size() > 0">
|
||||||
|
OR ra.id IN (
|
||||||
|
SELECT rac.announcement_id
|
||||||
|
FROM bg_recruit_announcement_category rac
|
||||||
|
WHERE rac.category_name IN
|
||||||
|
<foreach collection="categoryNames" item="name" open="(" separator="," close=")">
|
||||||
|
#{name}
|
||||||
|
</foreach>
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
)
|
||||||
|
ORDER BY ra.id DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user