diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java index 0ca36f2..b99c454 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java @@ -136,6 +136,10 @@ public class CmsJobController extends BaseController @PostMapping public AjaxResult add(@RequestBody Job job) { + AjaxResult companyCheck = bindRecruitingCompany(job, false); + if (companyCheck != null) { + return companyCheck; + } // 校验描述中的敏感词 List sensitiveWords = sensitiveWordChecker.checkSensitiveWords(job.getDescription()); if (!sensitiveWords.isEmpty()) { @@ -156,6 +160,10 @@ public class CmsJobController extends BaseController @PutMapping public AjaxResult edit(@RequestBody Job job) { + AjaxResult companyCheck = bindRecruitingCompany(job, true); + if (companyCheck != null) { + return companyCheck; + } // 校验描述中的敏感词 List sensitiveWords = sensitiveWordChecker.checkSensitiveWords(job.getDescription()); if (!sensitiveWords.isEmpty()) { @@ -165,6 +173,52 @@ public class CmsJobController extends BaseController return toAjax(jobService.updateJob(job)); } + /** + * 绑定岗位的招聘公司。 + * + *

企业账号的招聘公司由登录账号确定,前端无需也不能指定;管理员仍须传入其选择的公司。 + * 同时同步公司名称,避免隐藏企业端表单字段后产生 company_name 为空的岗位数据。

+ * + * @param job 岗位信息 + * @param editing 是否为修改岗位 + * @return 校验失败时的响应,校验通过时返回 {@code null} + */ + private AjaxResult bindRecruitingCompany(Job job, boolean editing) + { + Company company; + if (RoleUtils.isCompanyAdmin()) { + company = companyService.queryCodeCompany(RoleUtils.getCurrentUseridCard()); + if (company == null) { + return AjaxResult.error("未查询到当前企业信息"); + } + + if (editing) { + if (job.getJobId() == null) { + return AjaxResult.error("jobId不能为空"); + } + Job existingJob = jobService.selectJobByJobId(job.getJobId()); + if (existingJob == null) { + return AjaxResult.error("岗位不存在"); + } + if (!Objects.equals(company.getCompanyId(), existingJob.getCompanyId())) { + return AjaxResult.error("无权修改其他企业的岗位"); + } + } + } else { + if (job.getCompanyId() == null) { + return AjaxResult.error("请选择招聘公司"); + } + company = companyService.selectCompanyByCompanyId(job.getCompanyId()); + if (company == null) { + return AjaxResult.error("招聘公司不存在"); + } + } + + job.setCompanyId(company.getCompanyId()); + job.setCompanyName(company.getName()); + return null; + } + /** * 删除岗位 */ diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFair.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFair.java index b9843cd..d7d8e5a 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFair.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFair.java @@ -31,6 +31,9 @@ public class PublicJobFair implements Serializable { @ApiModelProperty("招聘会类型") private String jobFairType; + @ApiModelProperty("区域类型(1-疆内 2-疆外 3-师市以内 4-师市以外)") + private String jobFairRegionType; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("招聘会开始时间") private Date jobFairStartTime; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairDetail.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairDetail.java index 22235d4..b71081c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairDetail.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairDetail.java @@ -41,6 +41,9 @@ public class PublicJobFairDetail implements Serializable { @ApiModelProperty("招聘会类型 1-线上 2-线下") private Integer jobFairType; + @ApiModelProperty("区域类型(1-疆内 2-疆外 3-师市以内 4-师市以外)") + private String jobFairRegionType; + @ApiModelProperty("纬度") private BigDecimal latitude; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairQuery.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairQuery.java index 0f9c8f8..dfd6e7e 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairQuery.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/rc/PublicJobFairQuery.java @@ -29,6 +29,9 @@ public class PublicJobFairQuery implements Serializable { @ApiModelProperty("招聘会类型") private String jobFairType; + @ApiModelProperty("区域类型") + private String jobFairRegionType; + @ApiModelProperty("招聘会举办时间(格式:yyyy-MM-dd)") private String zphjbsj; } diff --git a/ruoyi-bussiness/src/main/resources/mapper/rc/PublicJobFairMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/rc/PublicJobFairMapper.xml index 98864cb..c04caa9 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/rc/PublicJobFairMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/rc/PublicJobFairMapper.xml @@ -7,6 +7,7 @@ + @@ -43,6 +44,7 @@ + @@ -76,7 +78,8 @@ - select job_fair_id, job_fair_title, job_fair_address, job_fair_type, job_fair_start_time, job_fair_end_time, + select job_fair_id, job_fair_title, job_fair_address, job_fair_type, job_fair_region_type, + job_fair_start_time, job_fair_end_time, job_fair_host_unit, job_fair_help_unit, job_fair_organize_unit, job_fair_introduction, job_fair_remark, job_fair_phone, job_fair_image, job_fair_area_image, create_by, create_time, update_by, update_time, job_fair_venue_id, job_fair_sign_up_start_time, job_fair_sign_up_end_time, enterprise_num, booth_num, @@ -94,6 +97,9 @@ and job_fair_type = #{query.jobFairType} + + and job_fair_region_type = #{query.jobFairRegionType} + and to_char(job_fair_start_time, 'YYYY-MM-DD') <= #{query.zphjbsj} and to_char(job_fair_end_time, 'YYYY-MM-DD') >= #{query.zphjbsj} @@ -104,7 +110,7 @@ @@ -205,7 +211,7 @@ insert into public_job_fair ( - job_fair_id, job_fair_title, job_fair_address, job_fair_type, + job_fair_id, job_fair_title, job_fair_address, job_fair_type, job_fair_region_type, job_fair_start_time, job_fair_end_time, job_fair_host_unit, job_fair_help_unit, job_fair_organize_unit, job_fair_introduction, job_fair_remark, job_fair_phone, job_fair_image, job_fair_area_image, job_fair_venue_id, @@ -214,7 +220,7 @@ job_fair_category, is_cross_domain, cross_domain_cities, latitude, longitude, create_by, create_time, del_flag ) values ( - #{jobFairId}, #{jobFairTitle}, #{jobFairAddress}, #{jobFairType}, + #{jobFairId}, #{jobFairTitle}, #{jobFairAddress}, #{jobFairType}, #{jobFairRegionType}, #{jobFairStartTime}, #{jobFairEndTime}, #{jobFairHostUnit}, #{jobFairHelpUnit}, #{jobFairOrganizeUnit}, #{jobFairIntroduction}, #{jobFairRemark}, #{jobFairPhone}, #{jobFairImage}, #{jobFairAreaImage}, #{jobFairVenueId}, @@ -231,6 +237,7 @@ job_fair_title = #{jobFairTitle}, job_fair_address = #{jobFairAddress}, job_fair_type = #{jobFairType}, + job_fair_region_type = #{jobFairRegionType}, job_fair_start_time = #{jobFairStartTime}, job_fair_end_time = #{jobFairEndTime}, job_fair_host_unit = #{jobFairHostUnit}, diff --git a/sql/migration_public_job_fair_region_type.sql b/sql/migration_public_job_fair_region_type.sql new file mode 100644 index 0000000..c9f4c1a --- /dev/null +++ b/sql/migration_public_job_fair_region_type.sql @@ -0,0 +1,76 @@ +-- 线上招聘会区域类型 +-- 高Go / PostgreSQL 兼容;可重复执行。 +-- 字典值:1-疆内、2-疆外、3-师市以内、4-师市以外。 + +BEGIN; + +ALTER TABLE "shz"."public_job_fair" + ADD COLUMN IF NOT EXISTS "job_fair_region_type" VARCHAR(10); + +COMMENT ON COLUMN "shz"."public_job_fair"."job_fair_region_type" + IS '区域类型 1-疆内 2-疆外 3-师市以内 4-师市以外'; + +CREATE INDEX IF NOT EXISTS "idx_public_job_fair_region_type" + ON "shz"."public_job_fair" ("job_fair_region_type"); + +INSERT INTO "shz"."sys_dict_type" ( + "dict_id", "dict_name", "dict_type", "status", "create_by", "create_time", "remark" +) +SELECT + (SELECT COALESCE(MAX("dict_id"), 0) + 1 FROM "shz"."sys_dict_type"), + '线上招聘会区域类型', + 'job_fair_region_type', + '0', + 'system', + NOW(), + '线上招聘会管理使用' +WHERE NOT EXISTS ( + SELECT 1 + FROM "shz"."sys_dict_type" + WHERE "dict_type" = 'job_fair_region_type' +); + +WITH seed("dict_sort", "dict_label", "dict_value", "list_class", "is_default") AS ( + VALUES + (1, '疆内', '1', 'primary', 'N'), + (2, '疆外', '2', 'warning', 'N'), + (3, '师市以内', '3', 'success', 'N'), + (4, '师市以外', '4', 'default', 'N') +), +new_rows AS ( + SELECT + ROW_NUMBER() OVER (ORDER BY seed."dict_sort") AS rn, + seed.* + FROM seed + WHERE NOT EXISTS ( + SELECT 1 + FROM "shz"."sys_dict_data" data + WHERE data."dict_type" = 'job_fair_region_type' + AND data."dict_value" = seed."dict_value" + ) +), +base AS ( + SELECT COALESCE(MAX("dict_code"), 0) AS max_code + FROM "shz"."sys_dict_data" +) +INSERT INTO "shz"."sys_dict_data" ( + "dict_code", "dict_sort", "dict_label", "dict_value", "dict_type", + "css_class", "list_class", "is_default", "status", "create_by", "create_time", "remark" +) +SELECT + base.max_code + new_rows.rn, + new_rows."dict_sort", + new_rows."dict_label", + new_rows."dict_value", + 'job_fair_region_type', + NULL, + new_rows."list_class", + new_rows."is_default", + '0', + 'system', + NOW(), + '线上招聘会区域类型' +FROM new_rows +CROSS JOIN base; + +COMMIT; diff --git a/sql/public_job_fair.sql b/sql/public_job_fair.sql index 92f7311..9395e10 100644 --- a/sql/public_job_fair.sql +++ b/sql/public_job_fair.sql @@ -17,6 +17,7 @@ CREATE TABLE "public_job_fair" ( "job_fair_title" VARCHAR(500), "job_fair_address" VARCHAR(500), "job_fair_type" VARCHAR(10), + "job_fair_region_type" VARCHAR(10), "job_fair_start_time" TIMESTAMP, "job_fair_end_time" TIMESTAMP, "job_fair_host_unit" VARCHAR(200), @@ -47,6 +48,7 @@ CREATE TABLE "public_job_fair" ( COMMENT ON TABLE "public_job_fair" IS '公共招聘会信息表'; COMMENT ON COLUMN "public_job_fair"."job_fair_type" IS '招聘会类型 1-线上 2-线下'; +COMMENT ON COLUMN "public_job_fair"."job_fair_region_type" IS '区域类型 1-疆内 2-疆外 3-师市以内 4-师市以外'; COMMENT ON COLUMN "public_job_fair"."latitude" IS '纬度'; COMMENT ON COLUMN "public_job_fair"."longitude" IS '经度'; COMMENT ON COLUMN "public_job_fair"."del_flag" IS '删除标志(0正常 2删除)'; @@ -104,6 +106,7 @@ COMMENT ON TABLE "public_job_fair_signup" IS '招聘会-用户报名表'; -- 创建索引 CREATE INDEX "idx_public_job_fair_type" ON "public_job_fair"("job_fair_type"); +CREATE INDEX "idx_public_job_fair_region_type" ON "public_job_fair"("job_fair_region_type"); CREATE INDEX "idx_public_job_fair_start_time" ON "public_job_fair"("job_fair_start_time"); CREATE INDEX "idx_public_job_fair_company_fair_id" ON "public_job_fair_company"("job_fair_id"); CREATE INDEX "idx_public_job_fair_company_company_id" ON "public_job_fair_company"("company_id");