feat: add enterprise outdoor fair information
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
* 按年/周/月/日维度,统计举办时间落在区间内的招聘会:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -26,6 +26,8 @@ CREATE TABLE IF NOT EXISTS "cms_outdoor_fair" (
|
||||
"photo_url" VARCHAR(500),
|
||||
"fair_introduction" TEXT,
|
||||
"fair_process" TEXT,
|
||||
"required_materials" TEXT,
|
||||
"attendance_notes" TEXT,
|
||||
"create_by" VARCHAR(64) DEFAULT '',
|
||||
"create_time" TIMESTAMP(0),
|
||||
"update_by" VARCHAR(64) DEFAULT '',
|
||||
@@ -52,6 +54,8 @@ COMMENT ON COLUMN "cms_outdoor_fair"."online_apply" IS '是否开启线上申请
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."photo_url" IS '招聘会照片';
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."fair_introduction" IS '招聘会简介';
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."fair_process" IS '招聘会整体流程';
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."required_materials" IS '企业需携带资料';
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."attendance_notes" IS '企业到场须知';
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."del_flag" IS '删除标志(0代表存在 2代表删除)';
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_cms_outdoor_fair_title" ON "cms_outdoor_fair" ("title");
|
||||
|
||||
49
sql/migration_outdoor_fair_company_info_and_permissions.sql
Normal file
49
sql/migration_outdoor_fair_company_info_and_permissions.sql
Normal file
@@ -0,0 +1,49 @@
|
||||
-- 户外招聘会企业参会资料与企业只读展位图权限
|
||||
-- 瀚高数据库 / PostgreSQL 兼容;可重复执行
|
||||
|
||||
ALTER TABLE "cms_outdoor_fair"
|
||||
ADD COLUMN IF NOT EXISTS "required_materials" TEXT;
|
||||
|
||||
ALTER TABLE "cms_outdoor_fair"
|
||||
ADD COLUMN IF NOT EXISTS "attendance_notes" TEXT;
|
||||
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."required_materials" IS '企业需携带资料';
|
||||
COMMENT ON COLUMN "cms_outdoor_fair"."attendance_notes" IS '企业到场须知';
|
||||
|
||||
-- 为企业角色增加“只读查看展位图”按钮权限。
|
||||
INSERT INTO "sys_menu" (
|
||||
"menu_id", "menu_name", "parent_id", "order_num", "path", "component", "query", "route_name",
|
||||
"is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
|
||||
"create_by", "create_time", "update_by", "update_time", "remark"
|
||||
)
|
||||
SELECT
|
||||
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "sys_menu"),
|
||||
'企业展位图查看',
|
||||
parent."menu_id",
|
||||
2,
|
||||
'', '', '', '',
|
||||
1, 0, 'F', '0', '0', 'cms:outdoorFair:companyBoothMap', '#',
|
||||
'system', CURRENT_TIMESTAMP, '', NULL, '户外招聘会-企业审核通过后只读查看展位图权限'
|
||||
FROM "sys_menu" parent
|
||||
WHERE parent."menu_id" = (
|
||||
SELECT "parent_id"
|
||||
FROM "sys_menu"
|
||||
WHERE "perms" = 'cms:outdoorFair:list'
|
||||
LIMIT 1
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM "sys_menu" WHERE "perms" = 'cms:outdoorFair:companyBoothMap'
|
||||
);
|
||||
|
||||
INSERT INTO "sys_role_menu" ("role_id", "menu_id")
|
||||
SELECT role."role_id", menu."menu_id"
|
||||
FROM "sys_role" role
|
||||
CROSS JOIN "sys_menu" menu
|
||||
WHERE role."role_key" = 'view'
|
||||
AND menu."perms" = 'cms:outdoorFair:companyBoothMap'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM "sys_role_menu" role_menu
|
||||
WHERE role_menu."role_id" = role."role_id"
|
||||
AND role_menu."menu_id" = menu."menu_id"
|
||||
);
|
||||
Reference in New Issue
Block a user