feat: add enterprise outdoor fair information

This commit is contained in:
2026-07-23 10:52:37 +08:00
parent a427864461
commit 837252f515
5 changed files with 151 additions and 1 deletions

View File

@@ -6,10 +6,12 @@ import com.ruoyi.cms.domain.FairCompany;
import com.ruoyi.cms.domain.Job;
import com.ruoyi.cms.domain.OutdoorFair;
import com.ruoyi.cms.domain.OutdoorFairAttendee;
import com.ruoyi.cms.domain.OutdoorFairBooth;
import com.ruoyi.cms.domain.OutdoorFairBoothBooking;
import com.ruoyi.cms.domain.OutdoorFairDevice;
import com.ruoyi.cms.mapper.CompanyMapper;
import com.ruoyi.cms.mapper.FairCompanyMapper;
import com.ruoyi.cms.mapper.OutdoorFairBoothMapper;
import com.ruoyi.cms.mapper.OutdoorFairBoothBookingMapper;
import com.ruoyi.cms.mapper.OutdoorFairDeviceMapper;
import com.ruoyi.cms.mapper.OutdoorFairJobMapper;
@@ -72,6 +74,9 @@ public class AppOutdoorFairController extends BaseController
@Autowired
private OutdoorFairBoothBookingMapper outdoorFairBoothBookingMapper;
@Autowired
private OutdoorFairBoothMapper outdoorFairBoothMapper;
@Autowired
private OutdoorFairJobMapper outdoorFairJobMapper;
@@ -188,7 +193,7 @@ public class AppOutdoorFairController extends BaseController
return AjaxResult.error("招聘会不存在");
}
Map<String, Object> data = new HashMap<>();
data.put("fair", fair);
data.put("fair", buildPublicFairDetail(fair));
data.put("fairH5Url", buildFairH5Url(request, fairId));
return success(data);
}
@@ -361,6 +366,36 @@ public class AppOutdoorFairController extends BaseController
return jobFair;
}
/**
* 公共(求职者)详情只保留公开招聘会资料。
* 企业需携带资料与到场须知不能随实体直接序列化到公共接口。
*/
private OutdoorFair buildPublicFairDetail(OutdoorFair fair)
{
OutdoorFair publicFair = new OutdoorFair();
publicFair.setId(fair.getId());
publicFair.setTitle(fair.getTitle());
publicFair.setHostUnit(fair.getHostUnit());
publicFair.setFairType(fair.getFairType());
publicFair.setRegion(fair.getRegion());
publicFair.setVenueId(fair.getVenueId());
publicFair.setVenueName(fair.getVenueName());
publicFair.setAddress(fair.getAddress());
publicFair.setBoothCount(fair.getBoothCount());
publicFair.setHoldTime(fair.getHoldTime());
publicFair.setEndTime(fair.getEndTime());
publicFair.setApplyStartTime(fair.getApplyStartTime());
publicFair.setApplyEndTime(fair.getApplyEndTime());
publicFair.setOnlineApply(fair.getOnlineApply());
publicFair.setPhotoUrl(fair.getPhotoUrl());
publicFair.setFairIntroduction(fair.getFairIntroduction());
publicFair.setFairProcess(fair.getFairProcess());
Long boothMapCount = outdoorFairBoothMapper.selectCount(new LambdaQueryWrapper<OutdoorFairBooth>()
.eq(OutdoorFairBooth::getFairId, fair.getId()));
publicFair.setBoothMapCount(boothMapCount == null ? 0 : boothMapCount.intValue());
return publicFair;
}
private Date[] parseDayRange(String day)
{
try {

View File

@@ -144,6 +144,56 @@ public class OutdoorFairController extends BaseController
return success(outdoorFairService.getById(id));
}
/**
* 企业只读查看当前招聘会的展位图。
* 仅当前企业已报名且审核通过时返回数据;企业端没有任何展位图写入入口。
*/
@ApiOperation("企业查看已审核通过户外招聘会的展位图")
@PreAuthorize("@ss.hasPermi('cms:outdoorFair:companyBoothMap')")
@GetMapping("/{fairId}/company/booth-map")
public AjaxResult getCurrentCompanyBoothMap(@PathVariable Long fairId)
{
if (!RoleUtils.isCompanyAdmin()) {
return AjaxResult.error("仅企业用户可查看企业展位图");
}
Company company = getCurrentCompanyOrThrow();
ensureFairCompanyApprovedIfCompany(fairId, company.getCompanyId());
List<OutdoorFairBooth> booths = outdoorFairBoothMapper.selectList(
new LambdaQueryWrapper<OutdoorFairBooth>()
.eq(OutdoorFairBooth::getFairId, fairId)
.orderByAsc(OutdoorFairBooth::getPositionY)
.orderByAsc(OutdoorFairBooth::getPositionX)
.orderByAsc(OutdoorFairBooth::getBoothNumber));
Map<Long, OutdoorFairBoothBooking> bookingMap = outdoorFairBoothBookingMapper.selectList(
new LambdaQueryWrapper<OutdoorFairBoothBooking>()
.eq(OutdoorFairBoothBooking::getFairId, fairId)
.eq(OutdoorFairBoothBooking::getStatus, "reserved"))
.stream()
.filter(item -> item.getBoothId() != null)
.collect(Collectors.toMap(OutdoorFairBoothBooking::getBoothId, item -> item, (a, b) -> a));
List<Map<String, Object>> rows = new ArrayList<>();
for (OutdoorFairBooth booth : booths) {
OutdoorFairBoothBooking booking = bookingMap.get(booth.getId());
Map<String, Object> row = new HashMap<>();
row.put("id", booth.getId());
row.put("boothId", booth.getId());
row.put("boothNumber", booth.getBoothNumber());
row.put("positionX", booth.getPositionX());
row.put("positionY", booth.getPositionY());
row.put("bookingId", booking == null ? null : booking.getId());
row.put("companyId", booking == null ? null : booking.getCompanyId());
row.put("companyName", booking == null ? null : booking.getCompanyName());
row.put("status", booking == null ? "available" : "reserved");
rows.add(row);
}
Map<String, Object> data = new HashMap<>();
data.put("currentCompanyId", company.getCompanyId());
data.put("booths", rows);
return success(data);
}
/**
* 招聘会数据统计dashboard
* 按年/周/月/日维度,统计举办时间落在区间内的招聘会:

View File

@@ -109,6 +109,18 @@ public class OutdoorFair extends BaseEntity
@ApiModelProperty("招聘会整体流程")
private String fairProcess;
@Excel(name = "需携带资料")
@ApiModelProperty("企业参加招聘会需携带的资料")
private String requiredMaterials;
@Excel(name = "到场须知")
@ApiModelProperty("企业到场须知")
private String attendanceNotes;
@TableField(exist = false)
@ApiModelProperty("招聘会展位图实际摊位数量")
private Integer boothMapCount;
@TableField(exist = false)
@ApiModelProperty("当前企业ID")
private Long companyId;