修复招聘会详情图片与展位数据契约
This commit is contained in:
@@ -99,7 +99,7 @@ public class AppOutdoorFairController extends BaseController
|
||||
@BussinessLog(title = "户外招聘会列表")
|
||||
@ApiOperation("分页查询户外招聘会列表")
|
||||
@GetMapping("/page")
|
||||
public PublicJobFairResponse page(PublicJobFairQuery query)
|
||||
public PublicJobFairResponse page(PublicJobFairQuery query, HttpServletRequest request)
|
||||
{
|
||||
if (query == null) {
|
||||
query = new PublicJobFairQuery();
|
||||
@@ -111,14 +111,14 @@ public class AppOutdoorFairController extends BaseController
|
||||
PublicJobFairResponse response = new PublicJobFairResponse();
|
||||
response.setCode(200);
|
||||
response.setMsg("查询成功");
|
||||
response.setData(buildPageData(page, pageNum, pageSize));
|
||||
response.setData(buildPageData(page, pageNum, pageSize, request));
|
||||
return response;
|
||||
}
|
||||
|
||||
@BussinessLog(title = "查看当季度户外招聘会信息")
|
||||
@ApiOperation("查看当季度户外招聘会信息")
|
||||
@GetMapping("/currentQuarter")
|
||||
public AjaxResult currentQuarterFairs()
|
||||
public AjaxResult currentQuarterFairs(HttpServletRequest request)
|
||||
{
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
int currentMonth = calendar.get(Calendar.MONTH);
|
||||
@@ -131,13 +131,13 @@ public class AppOutdoorFairController extends BaseController
|
||||
calendar.add(Calendar.MONTH, 3);
|
||||
Date endTime = calendar.getTime();
|
||||
|
||||
return success(listOutdoorFairsByRange(startTime, endTime));
|
||||
return success(listOutdoorFairsByRange(startTime, endTime, request));
|
||||
}
|
||||
|
||||
@BussinessLog(title = "查看当月户外招聘会信息")
|
||||
@ApiOperation("查看当月户外招聘会信息")
|
||||
@GetMapping("/currentMonth")
|
||||
public AjaxResult currentMonthFairs()
|
||||
public AjaxResult currentMonthFairs(HttpServletRequest request)
|
||||
{
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
||||
@@ -147,7 +147,7 @@ public class AppOutdoorFairController extends BaseController
|
||||
calendar.add(Calendar.MONTH, 1);
|
||||
Date endTime = calendar.getTime();
|
||||
|
||||
return success(listOutdoorFairsByRange(startTime, endTime));
|
||||
return success(listOutdoorFairsByRange(startTime, endTime, request));
|
||||
}
|
||||
|
||||
@BussinessLog(title = "查询有户外招聘会的日期列表")
|
||||
@@ -206,7 +206,7 @@ public class AppOutdoorFairController extends BaseController
|
||||
return AjaxResult.error("招聘会不存在");
|
||||
}
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
Map<String, Object> publicFair = buildPublicFairDetail(fair);
|
||||
Map<String, Object> publicFair = buildPublicFairDetail(fair, request);
|
||||
publicFair.put("checkedIn", hasCheckedIn(fairId));
|
||||
data.put("fair", publicFair);
|
||||
data.put("companies", buildPublicParticipatingCompanies(fairId));
|
||||
@@ -433,6 +433,7 @@ public class AppOutdoorFairController extends BaseController
|
||||
if (fair == null) {
|
||||
throw new ServiceException("招聘会不存在");
|
||||
}
|
||||
fair.setPhotoUrl(RequestUrlUtils.normalizePublicUrl(request, fair.getPhotoUrl()));
|
||||
Company company = companyMapper.selectById(companyId);
|
||||
if (company == null) {
|
||||
throw new ServiceException("企业不存在");
|
||||
@@ -497,11 +498,12 @@ public class AppOutdoorFairController extends BaseController
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
private PublicJobFairResponse.PageData buildPageData(Page<OutdoorFair> page, int pageNum, int pageSize)
|
||||
private PublicJobFairResponse.PageData buildPageData(Page<OutdoorFair> page, int pageNum, int pageSize,
|
||||
HttpServletRequest request)
|
||||
{
|
||||
PublicJobFairResponse.PageData data = new PublicJobFairResponse.PageData();
|
||||
List<PublicJobFair> list = page.getRecords().stream()
|
||||
.map(this::buildPublicJobFair)
|
||||
.map(fair -> buildPublicJobFair(fair, request))
|
||||
.collect(Collectors.toList());
|
||||
int pages = (int) page.getPages();
|
||||
data.setTotal(page.getTotal());
|
||||
@@ -534,18 +536,19 @@ public class AppOutdoorFairController extends BaseController
|
||||
return pageNums;
|
||||
}
|
||||
|
||||
private List<PublicJobFair> listOutdoorFairsByRange(Date startTime, Date endTime)
|
||||
private List<PublicJobFair> listOutdoorFairsByRange(Date startTime, Date endTime,
|
||||
HttpServletRequest request)
|
||||
{
|
||||
return outdoorFairService.list(new LambdaQueryWrapper<OutdoorFair>()
|
||||
.ge(OutdoorFair::getHoldTime, startTime)
|
||||
.lt(OutdoorFair::getHoldTime, endTime)
|
||||
.orderByAsc(OutdoorFair::getHoldTime))
|
||||
.stream()
|
||||
.map(this::buildPublicJobFair)
|
||||
.map(fair -> buildPublicJobFair(fair, request))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private PublicJobFair buildPublicJobFair(OutdoorFair fair)
|
||||
private PublicJobFair buildPublicJobFair(OutdoorFair fair, HttpServletRequest request)
|
||||
{
|
||||
PublicJobFair jobFair = new PublicJobFair();
|
||||
jobFair.setJobFairId(String.valueOf(fair.getId()));
|
||||
@@ -558,7 +561,7 @@ public class AppOutdoorFairController extends BaseController
|
||||
jobFair.setJobFairOrganizeUnit(fair.getHostUnit());
|
||||
jobFair.setJobFairIntroduction(fair.getFairIntroduction());
|
||||
jobFair.setJobFairProcess(fair.getFairProcess());
|
||||
jobFair.setJobFairImage(fair.getPhotoUrl());
|
||||
jobFair.setJobFairImage(RequestUrlUtils.normalizePublicUrl(request, fair.getPhotoUrl()));
|
||||
jobFair.setJobFairSignUpStartTime(fair.getApplyStartTime());
|
||||
jobFair.setJobFairSignUpEndTime(fair.getApplyEndTime());
|
||||
jobFair.setJobFairVenueId(fair.getVenueId() == null ? null : String.valueOf(fair.getVenueId()));
|
||||
@@ -570,7 +573,7 @@ public class AppOutdoorFairController extends BaseController
|
||||
* 公共(求职者)详情只保留公开招聘会资料。
|
||||
* 企业需携带资料与到场须知不能随实体直接序列化到公共接口。
|
||||
*/
|
||||
private Map<String, Object> buildPublicFairDetail(OutdoorFair fair)
|
||||
private Map<String, Object> buildPublicFairDetail(OutdoorFair fair, HttpServletRequest request)
|
||||
{
|
||||
Map<String, Object> publicFair = new HashMap<>();
|
||||
publicFair.put("id", fair.getId());
|
||||
@@ -587,7 +590,7 @@ public class AppOutdoorFairController extends BaseController
|
||||
publicFair.put("applyStartTime", fair.getApplyStartTime());
|
||||
publicFair.put("applyEndTime", fair.getApplyEndTime());
|
||||
publicFair.put("onlineApply", fair.getOnlineApply());
|
||||
publicFair.put("photoUrl", fair.getPhotoUrl());
|
||||
publicFair.put("photoUrl", RequestUrlUtils.normalizePublicUrl(request, fair.getPhotoUrl()));
|
||||
publicFair.put("fairIntroduction", fair.getFairIntroduction());
|
||||
publicFair.put("fairProcess", fair.getFairProcess());
|
||||
Long boothMapCount = outdoorFairBoothMapper.selectCount(new LambdaQueryWrapper<OutdoorFairBooth>()
|
||||
|
||||
@@ -149,6 +149,7 @@ public class OutdoorFairController extends BaseController
|
||||
List<OutdoorFair> list = outdoorFairService.selectOutdoorFairList(
|
||||
outdoorFair, startTime, endTime, applyStartTime, applyEndTime);
|
||||
fillReservedBoothCount(list);
|
||||
normalizePhotoUrls(list, request);
|
||||
fillCompanyApplyState(list, request, company);
|
||||
return getDataTable(list);
|
||||
}
|
||||
@@ -159,12 +160,19 @@ public class OutdoorFairController extends BaseController
|
||||
@ApiOperation("获取户外招聘会详细信息")
|
||||
@PreAuthorize("@ss.hasPermi('cms:outdoorFair:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id, HttpServletRequest request)
|
||||
{
|
||||
if (RoleUtils.isCompanyAdmin()) {
|
||||
return AjaxResult.error("企业用户无权查看招聘会详情");
|
||||
}
|
||||
return success(outdoorFairService.getById(id));
|
||||
OutdoorFair fair = outdoorFairService.getById(id);
|
||||
if (fair != null) {
|
||||
fair.setPhotoUrl(RequestUrlUtils.normalizePublicUrl(request, fair.getPhotoUrl()));
|
||||
Long boothMapCount = outdoorFairBoothMapper.selectCount(new LambdaQueryWrapper<OutdoorFairBooth>()
|
||||
.eq(OutdoorFairBooth::getFairId, id));
|
||||
fair.setBoothMapCount(boothMapCount == null ? 0 : boothMapCount.intValue());
|
||||
}
|
||||
return success(fair);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -466,6 +474,10 @@ public class OutdoorFairController extends BaseController
|
||||
if (RoleUtils.isCompanyAdmin()) {
|
||||
return AjaxResult.error("企业用户无权新增户外招聘会");
|
||||
}
|
||||
String photoValidationError = validatePhotoUrl(outdoorFair);
|
||||
if (photoValidationError != null) {
|
||||
return AjaxResult.error(photoValidationError);
|
||||
}
|
||||
String timeValidationError = validateRegistrationDeadline(outdoorFair);
|
||||
if (timeValidationError != null) {
|
||||
return AjaxResult.error(timeValidationError);
|
||||
@@ -491,6 +503,10 @@ public class OutdoorFairController extends BaseController
|
||||
if (RoleUtils.isCompanyAdmin()) {
|
||||
return AjaxResult.error("企业用户无权编辑户外招聘会");
|
||||
}
|
||||
String photoValidationError = validatePhotoUrl(outdoorFair);
|
||||
if (photoValidationError != null) {
|
||||
return AjaxResult.error(photoValidationError);
|
||||
}
|
||||
String timeValidationError = validateRegistrationDeadline(outdoorFair);
|
||||
if (timeValidationError != null) {
|
||||
return AjaxResult.error(timeValidationError);
|
||||
@@ -1381,11 +1397,38 @@ public class OutdoorFairController extends BaseController
|
||||
countMap.put(((Number) fairId).longValue(), ((Number) count).intValue());
|
||||
}
|
||||
}
|
||||
Map<Long, Integer> boothMapCountMap = new HashMap<>();
|
||||
for (Map<String, Object> row : outdoorFairBoothMapper.countBoothsByFairIds(fairIds)) {
|
||||
Object fairId = row.get("fairId");
|
||||
Object count = row.get("boothMapCount");
|
||||
if (fairId instanceof Number && count instanceof Number) {
|
||||
boothMapCountMap.put(((Number) fairId).longValue(), ((Number) count).intValue());
|
||||
}
|
||||
}
|
||||
for (OutdoorFair fair : fairs) {
|
||||
fair.setReservedBoothCount(countMap.getOrDefault(fair.getId(), 0));
|
||||
fair.setBoothMapCount(boothMapCountMap.getOrDefault(fair.getId(), 0));
|
||||
}
|
||||
}
|
||||
|
||||
private void normalizePhotoUrls(List<OutdoorFair> fairs, HttpServletRequest request)
|
||||
{
|
||||
if (fairs == null) {
|
||||
return;
|
||||
}
|
||||
for (OutdoorFair fair : fairs) {
|
||||
fair.setPhotoUrl(RequestUrlUtils.normalizePublicUrl(request, fair.getPhotoUrl()));
|
||||
}
|
||||
}
|
||||
|
||||
private String validatePhotoUrl(OutdoorFair outdoorFair)
|
||||
{
|
||||
if (outdoorFair != null && RequestUrlUtils.isLoopbackUrl(outdoorFair.getPhotoUrl())) {
|
||||
return "招聘会照片地址不能使用本机回环地址,请重新上传照片";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean hasFairBoothSnapshot(Long fairId)
|
||||
{
|
||||
if (fairId == null) {
|
||||
|
||||
@@ -27,6 +27,18 @@ public class PublicJobFairDetail implements Serializable {
|
||||
@ApiModelProperty("招聘会地址")
|
||||
private String jobFairAddress;
|
||||
|
||||
@ApiModelProperty("主办单位")
|
||||
private String jobFairHostUnit;
|
||||
|
||||
@ApiModelProperty("协办单位")
|
||||
private String jobFairHelpUnit;
|
||||
|
||||
@ApiModelProperty("承办单位")
|
||||
private String jobFairOrganizeUnit;
|
||||
|
||||
@ApiModelProperty("联系电话")
|
||||
private String jobFairPhone;
|
||||
|
||||
@ApiModelProperty("招聘会简介")
|
||||
private String jobFairIntroduction;
|
||||
|
||||
@@ -38,6 +50,14 @@ public class PublicJobFairDetail implements Serializable {
|
||||
@ApiModelProperty("招聘会结束时间")
|
||||
private Date jobFairEndTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty("报名开始时间")
|
||||
private Date jobFairSignUpStartTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty("报名结束时间")
|
||||
private Date jobFairSignUpEndTime;
|
||||
|
||||
@ApiModelProperty("招聘会类型 1-线上 2-线下")
|
||||
private Integer jobFairType;
|
||||
|
||||
@@ -50,6 +70,12 @@ public class PublicJobFairDetail implements Serializable {
|
||||
@ApiModelProperty("经度")
|
||||
private BigDecimal longitude;
|
||||
|
||||
@ApiModelProperty("是否跨域")
|
||||
private String isCrossDomain;
|
||||
|
||||
@ApiModelProperty("跨域联盟城市")
|
||||
private String crossDomainCities;
|
||||
|
||||
@ApiModelProperty("是否已报名 0-未报名 1-已报名")
|
||||
private Integer isSignUp;
|
||||
}
|
||||
|
||||
@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.cms.domain.OutdoorFairBooth;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface OutdoorFairBoothMapper extends BaseMapper<OutdoorFairBooth>
|
||||
{
|
||||
@@ -21,4 +23,18 @@ public interface OutdoorFairBoothMapper extends BaseMapper<OutdoorFairBooth>
|
||||
"</script>"
|
||||
})
|
||||
int physicalDeleteByFairIdAndIds(@Param("fairId") Long fairId, @Param("ids") List<Long> ids);
|
||||
|
||||
/** 批量统计招聘会实际展位图数量,区别于招聘会配置的展位容量。 */
|
||||
@Select({
|
||||
"<script>",
|
||||
"SELECT fair_id AS \"fairId\", COUNT(*) AS \"boothMapCount\"",
|
||||
"FROM cms_outdoor_fair_booth",
|
||||
"WHERE fair_id IN",
|
||||
"<foreach collection='fairIds' item='fairId' open='(' separator=',' close=')'>",
|
||||
"#{fairId}",
|
||||
"</foreach>",
|
||||
"GROUP BY fair_id",
|
||||
"</script>"
|
||||
})
|
||||
List<Map<String, Object>> countBoothsByFairIds(@Param("fairIds") List<Long> fairIds);
|
||||
}
|
||||
|
||||
@@ -40,13 +40,21 @@
|
||||
<result property="jobFairId" column="job_fair_id"/>
|
||||
<result property="jobFairTitle" column="job_fair_title"/>
|
||||
<result property="jobFairAddress" column="job_fair_address"/>
|
||||
<result property="jobFairHostUnit" column="job_fair_host_unit"/>
|
||||
<result property="jobFairHelpUnit" column="job_fair_help_unit"/>
|
||||
<result property="jobFairOrganizeUnit" column="job_fair_organize_unit"/>
|
||||
<result property="jobFairPhone" column="job_fair_phone"/>
|
||||
<result property="jobFairIntroduction" column="job_fair_introduction"/>
|
||||
<result property="jobFairStartTime" column="job_fair_start_time"/>
|
||||
<result property="jobFairEndTime" column="job_fair_end_time"/>
|
||||
<result property="jobFairSignUpStartTime" column="job_fair_sign_up_start_time"/>
|
||||
<result property="jobFairSignUpEndTime" column="job_fair_sign_up_end_time"/>
|
||||
<result property="jobFairType" column="job_fair_type"/>
|
||||
<result property="jobFairRegionType" column="job_fair_region_type"/>
|
||||
<result property="latitude" column="latitude"/>
|
||||
<result property="longitude" column="longitude"/>
|
||||
<result property="isCrossDomain" column="is_cross_domain"/>
|
||||
<result property="crossDomainCities" column="cross_domain_cities"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap type="com.ruoyi.cms.domain.rc.PublicJobFairCompanyVO" id="CompanyVOResult">
|
||||
@@ -109,8 +117,12 @@
|
||||
</select>
|
||||
|
||||
<select id="selectPublicJobFairDetailById" resultMap="DetailResult">
|
||||
select job_fair_id, job_fair_title, job_fair_address, job_fair_introduction,
|
||||
job_fair_start_time, job_fair_end_time, job_fair_type, job_fair_region_type, latitude, longitude
|
||||
select job_fair_id, job_fair_title, job_fair_address,
|
||||
job_fair_host_unit, job_fair_help_unit, job_fair_organize_unit, job_fair_phone,
|
||||
job_fair_introduction, job_fair_start_time, job_fair_end_time,
|
||||
job_fair_sign_up_start_time, job_fair_sign_up_end_time,
|
||||
job_fair_type, job_fair_region_type, latitude, longitude,
|
||||
is_cross_domain, cross_domain_cities
|
||||
from public_job_fair
|
||||
where job_fair_id = #{jobFairId} and del_flag = '0'
|
||||
</select>
|
||||
|
||||
Reference in New Issue
Block a user