添加推荐公告列表
This commit is contained in:
@@ -4,8 +4,10 @@ import lombok.AllArgsConstructor;
|
||||
import org.jiayunet.pojo.PageResult;
|
||||
import org.jiayunet.pojo.dto.recruitAnnouncement.RecruitAnnouncementDetailDto;
|
||||
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.param.recruitAnnouncement.RecruitAnnouncementQueryParam;
|
||||
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementRecommendParam;
|
||||
import org.jiayunet.service.RecruitAnnouncementService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -50,6 +52,12 @@ public class RecruitAnnouncementController {
|
||||
return recruitAnnouncementService.pageAnnouncement(param);
|
||||
}
|
||||
|
||||
/** 分页查询推荐公告(同行业或同岗位大类) */
|
||||
@PostMapping("/recommend")
|
||||
public PageResult<RecruitAnnouncementRecommendDto> pageRecommend(@Validated @RequestBody RecruitAnnouncementRecommendParam param) {
|
||||
return recruitAnnouncementService.pageRecommend(param);
|
||||
}
|
||||
|
||||
/** 查询公告详情 */
|
||||
@GetMapping("/detail")
|
||||
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.dto.recruitAnnouncement.RecruitAnnouncementDetailDto;
|
||||
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.param.recruitAnnouncement.RecruitAnnouncementQueryParam;
|
||||
import org.jiayunet.pojo.param.recruitAnnouncement.RecruitAnnouncementRecommendParam;
|
||||
import org.jiayunet.pojo.po.Company;
|
||||
import org.jiayunet.pojo.po.RecruitAnnouncement;
|
||||
import org.jiayunet.pojo.po.RecruitAnnouncementBatch;
|
||||
@@ -133,6 +135,51 @@ public class RecruitAnnouncementService {
|
||||
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>
|
||||
|
||||
@@ -38,4 +38,10 @@ public interface RecruitAnnouncementMapper extends CommonMapper<RecruitAnnouncem
|
||||
* <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);
|
||||
|
||||
/**
|
||||
* 分页查询推荐公告
|
||||
* <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
|
||||
</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>
|
||||
|
||||
Reference in New Issue
Block a user