From 92ff657e7103a91f03b33a7ae2e489c3c607f9f9 Mon Sep 17 00:00:00 2001 From: lapuda <577732344@qq.com> Date: Thu, 25 Jun 2026 11:30:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=88=B7=E5=A4=96=E6=8B=9B?= =?UTF-8?q?=E8=81=98=E4=BC=9A=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E5=8C=85=E6=8B=AC=E6=8E=A7=E5=88=B6=E5=99=A8=E3=80=81=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E3=80=81=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B=E5=8F=8A?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 10 +- .../controller/cms/OutdoorFairController.java | 113 ++++++++++ .../com/ruoyi/cms/domain/OutdoorFair.java | 83 +++++++ .../domain/OutdoorFairDictDataRequest.java | 26 +++ .../ruoyi/cms/mapper/OutdoorFairMapper.java | 53 +++++ .../cms/service/IOutdoorFairService.java | 33 +++ .../cms/service/impl/ESJobSearchImpl.java | 2 +- .../impl/InterviewInvitationServiceImpl.java | 2 +- .../service/impl/OutdoorFairServiceImpl.java | 78 +++++++ sql/cms_outdoor_fair.sql | 53 +++++ sql/cms_outdoor_fair_seed_shihezi.sql | 202 ++++++++++++++++++ sql/sys_dict_outdoor_fair_region.sql | 70 ++++++ sql/sys_dict_outdoor_fair_type.sql | 64 ++++++ 13 files changed, 786 insertions(+), 3 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/OutdoorFairController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFair.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFairDictDataRequest.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/OutdoorFairMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IOutdoorFairService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/OutdoorFairServiceImpl.java create mode 100644 sql/cms_outdoor_fair.sql create mode 100644 sql/cms_outdoor_fair_seed_shihezi.sql create mode 100644 sql/sys_dict_outdoor_fair_region.sql create mode 100644 sql/sys_dict_outdoor_fair_type.sql diff --git a/.gitignore b/.gitignore index 0f3ddc9..a86bdd0 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,12 @@ nbdist/ !*/build/*.java !*/build/*.html !*/build/*.xml -.DS_Store \ No newline at end of file +.DS_Store + +# Local credentials for project-scoped Codex skills +.codex/skills/*/.password + +# Local application runtime files +.local/ +.codex/ +local.sh \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/OutdoorFairController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/OutdoorFairController.java new file mode 100644 index 0000000..be8d68d --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/OutdoorFairController.java @@ -0,0 +1,113 @@ +package com.ruoyi.cms.controller.cms; + +import java.util.Arrays; +import java.util.List; + +import com.ruoyi.cms.domain.OutdoorFair; +import com.ruoyi.cms.domain.OutdoorFairDictDataRequest; +import com.ruoyi.cms.service.IOutdoorFairService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 户外招聘会Controller + * + * @author ruoyi + * @date 2026-06-25 + */ +@RestController +@RequestMapping("/cms/outdoor-fair") +@Api(tags = "后台:户外招聘会") +public class OutdoorFairController extends BaseController +{ + @Autowired + private IOutdoorFairService outdoorFairService; + + /** + * 查询户外招聘会列表 + */ + @ApiOperation("查询户外招聘会列表") + @PreAuthorize("@ss.hasPermi('cms:outdoorFair:list')") + @GetMapping("/list") + public TableDataInfo list(OutdoorFair outdoorFair) + { + startPage(); + List list = outdoorFairService.selectOutdoorFairList(outdoorFair); + return getDataTable(list); + } + + /** + * 获取户外招聘会详细信息 + */ + @ApiOperation("获取户外招聘会详细信息") + @PreAuthorize("@ss.hasPermi('cms:outdoorFair:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(outdoorFairService.getById(id)); + } + + /** + * 新增户外招聘会 + */ + @ApiOperation("新增户外招聘会") + @PreAuthorize("@ss.hasPermi('cms:outdoorFair:add')") + @Log(title = "户外招聘会", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody OutdoorFair outdoorFair) + { + return toAjax(outdoorFairService.save(outdoorFair)); + } + + /** + * 修改户外招聘会 + */ + @ApiOperation("修改户外招聘会") + @PreAuthorize("@ss.hasPermi('cms:outdoorFair:edit')") + @Log(title = "户外招聘会", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody OutdoorFair outdoorFair) + { + return toAjax(outdoorFairService.updateById(outdoorFair)); + } + + /** + * 删除户外招聘会 + */ + @ApiOperation("删除户外招聘会") + @PreAuthorize("@ss.hasPermi('cms:outdoorFair:remove')") + @Log(title = "户外招聘会", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(outdoorFairService.removeByIds(Arrays.asList(ids))); + } + + /** + * 新增户外招聘会页面使用的字典项 + */ + @ApiOperation("新增户外招聘会字典项") + @PreAuthorize("@ss.hasAnyPermi('cms:outdoorFair:add,cms:outdoorFair:edit')") + @Log(title = "户外招聘会字典项", businessType = BusinessType.INSERT) + @PostMapping("/dict-data") + public AjaxResult addDictData(@Validated @RequestBody OutdoorFairDictDataRequest request) + { + return toAjax(outdoorFairService.insertOutdoorFairDictData(request.getDictType(), request.getDictLabel(), getUsername())); + } +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFair.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFair.java new file mode 100644 index 0000000..204cf32 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFair.java @@ -0,0 +1,83 @@ +package com.ruoyi.cms.domain; + +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 户外招聘会对象 cms_outdoor_fair + * + * @author ruoyi + * @date 2026-06-25 + */ +@Data +@ApiModel("户外招聘会") +@TableName("cms_outdoor_fair") +public class OutdoorFair extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty("主键ID") + private Long id; + + @Excel(name = "招聘会标题") + @ApiModelProperty("招聘会标题") + private String title; + + @Excel(name = "举办单位") + @ApiModelProperty("举办单位") + private String hostUnit; + + @Excel(name = "招聘会类型") + @ApiModelProperty("招聘会类型") + private String fairType; + + @Excel(name = "举办区域") + @ApiModelProperty("举办区域") + private String region; + + @Excel(name = "举办地址") + @ApiModelProperty("举办地址") + private String address; + + @Excel(name = "展位数量") + @ApiModelProperty("展位数量") + private Integer boothCount; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "举办时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("举办时间") + private Date holdTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "截止时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("截止时间") + private Date endTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "开放申请时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("开放申请时间") + private Date applyStartTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "截止申请时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("截止申请时间") + private Date applyEndTime; + + @Excel(name = "是否开启线上申请") + @ApiModelProperty("是否开启线上申请") + private Boolean onlineApply; + + @Excel(name = "招聘会照片") + @ApiModelProperty("招聘会照片") + private String photoUrl; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFairDictDataRequest.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFairDictDataRequest.java new file mode 100644 index 0000000..99e8225 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFairDictDataRequest.java @@ -0,0 +1,26 @@ +package com.ruoyi.cms.domain; + +import javax.validation.constraints.NotBlank; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 户外招聘会字典新增请求 + * + * @author ruoyi + * @date 2026-06-25 + */ +@Data +@ApiModel("户外招聘会字典新增请求") +public class OutdoorFairDictDataRequest +{ + @NotBlank(message = "字典类型不能为空") + @ApiModelProperty(value = "字典类型", required = true) + private String dictType; + + @NotBlank(message = "字典标签不能为空") + @ApiModelProperty(value = "字典标签", required = true) + private String dictLabel; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/OutdoorFairMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/OutdoorFairMapper.java new file mode 100644 index 0000000..3154722 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/OutdoorFairMapper.java @@ -0,0 +1,53 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.OutdoorFair; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +/** + * 户外招聘会Mapper接口 + * + * @author ruoyi + * @date 2026-06-25 + */ +public interface OutdoorFairMapper extends BaseMapper +{ + /** + * 查询字典项是否存在 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @return 存在数量 + */ + @Select("select count(1) from sys_dict_data where dict_type = #{dictType} and dict_value = #{dictValue}") + int countDictDataByTypeAndValue(@Param("dictType") String dictType, @Param("dictValue") String dictValue); + + /** + * 获取字典下一个排序 + * + * @param dictType 字典类型 + * @return 下一个排序值 + */ + @Select("select coalesce(max(dict_sort), 0) + 1 from sys_dict_data where dict_type = #{dictType}") + Long selectNextDictSort(@Param("dictType") String dictType); + + /** + * 新增系统字典项 + * + * @param dictSort 字典排序 + * @param dictLabel 字典标签 + * @param dictValue 字典值 + * @param dictType 字典类型 + * @param createBy 创建人 + * @return 影响行数 + */ + @Insert("insert into sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, list_class, is_default, status, create_by, create_time, remark) " + + "values ((select coalesce(max(dict_code), 0) + 1 from sys_dict_data), #{dictSort}, #{dictLabel}, #{dictValue}, #{dictType}, 'default', 'N', '0', #{createBy}, sysdate(), '户外招聘会页面新增')") + int insertDictData(@Param("dictSort") Long dictSort, + @Param("dictLabel") String dictLabel, + @Param("dictValue") String dictValue, + @Param("dictType") String dictType, + @Param("createBy") String createBy); +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IOutdoorFairService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IOutdoorFairService.java new file mode 100644 index 0000000..210546f --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IOutdoorFairService.java @@ -0,0 +1,33 @@ +package com.ruoyi.cms.service; + +import java.util.List; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cms.domain.OutdoorFair; + +/** + * 户外招聘会Service接口 + * + * @author ruoyi + * @date 2026-06-25 + */ +public interface IOutdoorFairService extends IService +{ + /** + * 查询户外招聘会列表 + * + * @param outdoorFair 户外招聘会 + * @return 户外招聘会集合 + */ + List selectOutdoorFairList(OutdoorFair outdoorFair); + + /** + * 新增户外招聘会相关字典项 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param createBy 创建人 + * @return 影响行数 + */ + int insertOutdoorFairDictData(String dictType, String dictLabel, String createBy); +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 97461f2..2f2535c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -72,7 +72,7 @@ public class ESJobSearchImpl implements IESJobSearchService /** * 项目启动时,初始化索引及数据 */ - @PostConstruct +// @PostConstruct public void init() { boolean isLockAcquired = false; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/InterviewInvitationServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/InterviewInvitationServiceImpl.java index 8d334f6..f8461c7 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/InterviewInvitationServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/InterviewInvitationServiceImpl.java @@ -43,7 +43,7 @@ public class InterviewInvitationServiceImpl implements InterviewInvitationServic @Autowired private DataSource dataSource; - @PostConstruct + // @PostConstruct public void initTable() { try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement()) { diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/OutdoorFairServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/OutdoorFairServiceImpl.java new file mode 100644 index 0000000..f3ad728 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/OutdoorFairServiceImpl.java @@ -0,0 +1,78 @@ +package com.ruoyi.cms.service.impl; + +import java.util.List; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.OutdoorFair; +import com.ruoyi.cms.mapper.OutdoorFairMapper; +import com.ruoyi.cms.service.IOutdoorFairService; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.stereotype.Service; + +/** + * 户外招聘会Service业务层处理 + * + * @author ruoyi + * @date 2026-06-25 + */ +@Service +public class OutdoorFairServiceImpl extends ServiceImpl implements IOutdoorFairService +{ + private static final String OUTDOOR_FAIR_TYPE_DICT = "outdoor_fair_type"; + + private static final String OUTDOOR_FAIR_REGION_DICT = "outdoor_fair_region"; + + /** + * 查询户外招聘会列表 + * + * @param outdoorFair 户外招聘会 + * @return 户外招聘会集合 + */ + @Override + public List selectOutdoorFairList(OutdoorFair outdoorFair) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(outdoorFair.getTitle()), OutdoorFair::getTitle, outdoorFair.getTitle()); + queryWrapper.like(StringUtils.isNotBlank(outdoorFair.getHostUnit()), OutdoorFair::getHostUnit, outdoorFair.getHostUnit()); + queryWrapper.eq(StringUtils.isNotBlank(outdoorFair.getFairType()), OutdoorFair::getFairType, outdoorFair.getFairType()); + queryWrapper.eq(StringUtils.isNotBlank(outdoorFair.getRegion()), OutdoorFair::getRegion, outdoorFair.getRegion()); + queryWrapper.orderByDesc(OutdoorFair::getHoldTime); + queryWrapper.orderByDesc(OutdoorFair::getCreateTime); + return list(queryWrapper); + } + + /** + * 新增户外招聘会相关字典项 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param createBy 创建人 + * @return 影响行数 + */ + @Override + public int insertOutdoorFairDictData(String dictType, String dictLabel, String createBy) + { + if (!OUTDOOR_FAIR_TYPE_DICT.equals(dictType) && !OUTDOOR_FAIR_REGION_DICT.equals(dictType)) { + throw new ServiceException("只允许维护户外招聘会类型和举办区域字典"); + } + String trimmedLabel = StringUtils.trim(dictLabel); + if (StringUtils.isBlank(trimmedLabel)) { + throw new ServiceException("字典名称不能为空"); + } + if (trimmedLabel.length() > 100) { + throw new ServiceException("字典名称长度不能超过100个字符"); + } + if (baseMapper.countDictDataByTypeAndValue(dictType, trimmedLabel) > 0) { + return 1; + } + Long dictSort = baseMapper.selectNextDictSort(dictType); + int rows = baseMapper.insertDictData(dictSort, trimmedLabel, trimmedLabel, dictType, createBy); + if (rows > 0) { + DictUtils.removeDictCache(dictType); + } + return rows; + } +} diff --git a/sql/cms_outdoor_fair.sql b/sql/cms_outdoor_fair.sql new file mode 100644 index 0000000..52aea23 --- /dev/null +++ b/sql/cms_outdoor_fair.sql @@ -0,0 +1,53 @@ +-- 户外招聘会表 +-- 瀚高数据库 / PostgreSQL 兼容 + +CREATE SEQUENCE IF NOT EXISTS "cms_outdoor_fair_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +CREATE TABLE IF NOT EXISTS "cms_outdoor_fair" ( + "id" BIGINT NOT NULL DEFAULT nextval('"cms_outdoor_fair_id_seq"') PRIMARY KEY, + "title" VARCHAR(200) NOT NULL, + "host_unit" VARCHAR(200) NOT NULL, + "fair_type" VARCHAR(50) NOT NULL, + "region" VARCHAR(100) NOT NULL, + "address" VARCHAR(500) NOT NULL, + "booth_count" INTEGER NOT NULL DEFAULT 0, + "hold_time" TIMESTAMP(0) NOT NULL, + "end_time" TIMESTAMP(0) NOT NULL, + "apply_start_time" TIMESTAMP(0) NOT NULL, + "apply_end_time" TIMESTAMP(0) NOT NULL, + "online_apply" BOOLEAN NOT NULL DEFAULT FALSE, + "photo_url" VARCHAR(500), + "create_by" VARCHAR(64) DEFAULT '', + "create_time" TIMESTAMP(0), + "update_by" VARCHAR(64) DEFAULT '', + "update_time" TIMESTAMP(0), + "remark" VARCHAR(500), + "del_flag" CHAR(1) DEFAULT '0' +); + +COMMENT ON TABLE "cms_outdoor_fair" IS '户外招聘会表'; +COMMENT ON COLUMN "cms_outdoor_fair"."id" IS '主键ID'; +COMMENT ON COLUMN "cms_outdoor_fair"."title" IS '招聘会标题'; +COMMENT ON COLUMN "cms_outdoor_fair"."host_unit" IS '举办单位'; +COMMENT ON COLUMN "cms_outdoor_fair"."fair_type" IS '招聘会类型'; +COMMENT ON COLUMN "cms_outdoor_fair"."region" IS '举办区域'; +COMMENT ON COLUMN "cms_outdoor_fair"."address" IS '举办地址'; +COMMENT ON COLUMN "cms_outdoor_fair"."booth_count" IS '展位数量'; +COMMENT ON COLUMN "cms_outdoor_fair"."hold_time" IS '举办时间'; +COMMENT ON COLUMN "cms_outdoor_fair"."end_time" IS '截止时间'; +COMMENT ON COLUMN "cms_outdoor_fair"."apply_start_time" IS '开放申请时间'; +COMMENT ON COLUMN "cms_outdoor_fair"."apply_end_time" IS '截止申请时间'; +COMMENT ON COLUMN "cms_outdoor_fair"."online_apply" IS '是否开启线上申请'; +COMMENT ON COLUMN "cms_outdoor_fair"."photo_url" 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"); +CREATE INDEX IF NOT EXISTS "idx_cms_outdoor_fair_host_unit" ON "cms_outdoor_fair" ("host_unit"); +CREATE INDEX IF NOT EXISTS "idx_cms_outdoor_fair_type" ON "cms_outdoor_fair" ("fair_type"); +CREATE INDEX IF NOT EXISTS "idx_cms_outdoor_fair_hold_time" ON "cms_outdoor_fair" ("hold_time"); +CREATE INDEX IF NOT EXISTS "idx_cms_outdoor_fair_del_flag" ON "cms_outdoor_fair" ("del_flag"); diff --git a/sql/cms_outdoor_fair_seed_shihezi.sql b/sql/cms_outdoor_fair_seed_shihezi.sql new file mode 100644 index 0000000..de21a73 --- /dev/null +++ b/sql/cms_outdoor_fair_seed_shihezi.sql @@ -0,0 +1,202 @@ +-- 户外招聘会石河子 mock 数据 +-- 可重复执行:按 title 去重,已存在同名招聘会时不会重复插入。 + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年石河子市春季户外综合招聘会', + '第八师石河子市人力资源和社会保障局', + '综合类', + '第八师(石河子市)', + '石河子市北三路石河子大学中区图书馆前广场', + 80, + TIMESTAMP '2026-03-15 09:00:00', + TIMESTAMP '2026-03-15 17:00:00', + TIMESTAMP '2026-03-01 00:00:00', + TIMESTAMP '2026-03-10 23:59:59', + TRUE, + 'https://picsum.photos/seed/shihezi-outdoor-1/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年石河子市春季户外综合招聘会'); + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年石河子大学毕业生户外专场招聘会', + '石河子大学就业指导中心', + '校园招聘', + '第八师(石河子市)', + '石河子大学中区主楼前广场', + 60, + TIMESTAMP '2026-04-18 09:30:00', + TIMESTAMP '2026-04-18 16:30:00', + TIMESTAMP '2026-04-01 00:00:00', + TIMESTAMP '2026-04-12 23:59:59', + TRUE, + 'https://picsum.photos/seed/shihezi-outdoor-2/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年石河子大学毕业生户外专场招聘会'); + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年石河子经开区制造业户外招聘会', + '石河子经济技术开发区管委会', + '行业专场', + '第八师(石河子市)', + '石河子经济技术开发区企业服务中心广场', + 100, + TIMESTAMP '2026-05-16 09:00:00', + TIMESTAMP '2026-05-16 17:30:00', + TIMESTAMP '2026-04-25 00:00:00', + TIMESTAMP '2026-05-10 23:59:59', + TRUE, + 'https://picsum.photos/seed/shihezi-outdoor-3/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年石河子经开区制造业户外招聘会'); + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年石河子市高新区数字经济户外招聘会', + '石河子高新技术产业开发区管理委员会', + '高新技术专场', + '第八师(石河子市)', + '石河子高新区科技企业孵化器广场', + 55, + TIMESTAMP '2026-06-20 09:00:00', + TIMESTAMP '2026-06-20 16:30:00', + TIMESTAMP '2026-06-01 00:00:00', + TIMESTAMP '2026-06-14 23:59:59', + TRUE, + 'https://picsum.photos/seed/shihezi-outdoor-4/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年石河子市高新区数字经济户外招聘会'); + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年石河子军垦文化广场服务业招聘会', + '石河子市就业服务中心', + '服务业专场', + '第八师(石河子市)', + '石河子市军垦文化广场', + 45, + TIMESTAMP '2026-07-11 10:00:00', + TIMESTAMP '2026-07-11 17:00:00', + TIMESTAMP '2026-06-20 00:00:00', + TIMESTAMP '2026-07-05 23:59:59', + FALSE, + 'https://picsum.photos/seed/shihezi-outdoor-5/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年石河子军垦文化广场服务业招聘会'); + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年第八师团场农业技术人才户外招聘会', + '第八师农业农村局', + '行业专场', + '第八师(石河子市)', + '石河子市人民广场东侧', + 50, + TIMESTAMP '2026-08-08 09:00:00', + TIMESTAMP '2026-08-08 17:00:00', + TIMESTAMP '2026-07-20 00:00:00', + TIMESTAMP '2026-08-02 23:59:59', + FALSE, + 'https://picsum.photos/seed/shihezi-outdoor-6/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年第八师团场农业技术人才户外招聘会'); + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年石河子市金秋就业援助户外招聘会', + '石河子市公共就业和人才服务中心', + '就业援助专场', + '第八师(石河子市)', + '石河子市幸福路步行街广场', + 70, + TIMESTAMP '2026-09-19 09:30:00', + TIMESTAMP '2026-09-19 17:30:00', + TIMESTAMP '2026-09-01 00:00:00', + TIMESTAMP '2026-09-13 23:59:59', + TRUE, + 'https://picsum.photos/seed/shihezi-outdoor-7/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年石河子市金秋就业援助户外招聘会'); + +INSERT INTO "cms_outdoor_fair" ( + "title", "host_unit", "fair_type", "region", "address", "booth_count", + "hold_time", "end_time", "apply_start_time", "apply_end_time", + "online_apply", "photo_url", "create_by", "create_time", "update_by", "update_time", "del_flag" +) +SELECT + '2026年石河子市文旅商贸户外招聘会', + '石河子市文化体育广电和旅游局', + '文旅专场', + '第八师(石河子市)', + '石河子市北湖公园游客服务中心广场', + 40, + TIMESTAMP '2026-10-24 10:00:00', + TIMESTAMP '2026-10-24 17:00:00', + TIMESTAMP '2026-10-01 00:00:00', + TIMESTAMP '2026-10-18 23:59:59', + FALSE, + 'https://picsum.photos/seed/shihezi-outdoor-8/400/300', + 'system', + NOW(), + 'system', + NOW(), + '0' +WHERE NOT EXISTS (SELECT 1 FROM "cms_outdoor_fair" WHERE "title" = '2026年石河子市文旅商贸户外招聘会'); diff --git a/sql/sys_dict_outdoor_fair_region.sql b/sql/sys_dict_outdoor_fair_region.sql new file mode 100644 index 0000000..23cff86 --- /dev/null +++ b/sql/sys_dict_outdoor_fair_region.sql @@ -0,0 +1,70 @@ +-- 户外招聘会举办区域系统字典 +-- 可重复执行:按 dict_type / dict_value 去重。 + +INSERT INTO "sys_dict_type" ( + "dict_id", "dict_name", "dict_type", "status", "create_by", "create_time", "remark" +) +SELECT + (SELECT COALESCE(MAX("dict_id"), 0) + 1 FROM "sys_dict_type"), + '户外招聘会举办区域', + 'outdoor_fair_region', + '0', + 'system', + NOW(), + '户外招聘会管理使用' +WHERE NOT EXISTS ( + SELECT 1 FROM "sys_dict_type" WHERE "dict_type" = 'outdoor_fair_region' +); + +WITH seed("dict_sort", "dict_label", "dict_value", "list_class", "is_default") AS ( + VALUES + (1, '石河子市', '石河子市', 'primary', 'N'), + (2, '第一师(阿拉尔市)', '第一师(阿拉尔市)', 'default', 'N'), + (3, '第二师(铁门关市)', '第二师(铁门关市)', 'default', 'N'), + (4, '第三师(图木舒克市)', '第三师(图木舒克市)', 'default', 'N'), + (5, '第四师(可克达拉市)', '第四师(可克达拉市)', 'default', 'N'), + (6, '第五师(双河市)', '第五师(双河市)', 'default', 'N'), + (7, '第六师(五家渠市)', '第六师(五家渠市)', 'default', 'N'), + (8, '第七师(胡杨河市)', '第七师(胡杨河市)', 'default', 'N'), + (9, '第八师(石河子市)', '第八师(石河子市)', 'success', 'Y'), + (10, '第九师(白杨市)', '第九师(白杨市)', 'default', 'N'), + (11, '第十师(北屯市)', '第十师(北屯市)', 'default', 'N'), + (12, '第十一师(建工师)', '第十一师(建工师)', 'default', 'N'), + (13, '第十二师', '第十二师', 'default', 'N'), + (14, '第十三师(新星市)', '第十三师(新星市)', 'default', 'N'), + (15, '第十四师(昆玉市)', '第十四师(昆玉市)', '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 "sys_dict_data" data + WHERE data."dict_type" = 'outdoor_fair_region' + AND data."dict_value" = seed."dict_value" + ) +), +base AS ( + SELECT COALESCE(MAX("dict_code"), 0) AS max_code FROM "sys_dict_data" +) +INSERT INTO "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", + 'outdoor_fair_region', + NULL, + new_rows."list_class", + new_rows."is_default", + '0', + 'system', + NOW(), + '户外招聘会举办区域' +FROM new_rows +CROSS JOIN base; diff --git a/sql/sys_dict_outdoor_fair_type.sql b/sql/sys_dict_outdoor_fair_type.sql new file mode 100644 index 0000000..989e58c --- /dev/null +++ b/sql/sys_dict_outdoor_fair_type.sql @@ -0,0 +1,64 @@ +-- 户外招聘会类型系统字典 +-- 可重复执行:按 dict_type / dict_value 去重。 + +INSERT INTO "sys_dict_type" ( + "dict_id", "dict_name", "dict_type", "status", "create_by", "create_time", "remark" +) +SELECT + (SELECT COALESCE(MAX("dict_id"), 0) + 1 FROM "sys_dict_type"), + '户外招聘会类型', + 'outdoor_fair_type', + '0', + 'system', + NOW(), + '户外招聘会管理使用' +WHERE NOT EXISTS ( + SELECT 1 FROM "sys_dict_type" WHERE "dict_type" = 'outdoor_fair_type' +); + +WITH seed("dict_sort", "dict_label", "dict_value", "list_class", "is_default") AS ( + VALUES + (1, '综合类', '综合类', 'primary', 'Y'), + (2, '校园招聘', '校园招聘', 'success', 'N'), + (3, '行业专场', '行业专场', 'processing', 'N'), + (4, '高新技术专场', '高新技术专场', 'purple', 'N'), + (5, '智能制造专场', '智能制造专场', 'cyan', 'N'), + (6, '服务业专场', '服务业专场', 'blue', 'N'), + (7, '就业援助专场', '就业援助专场', 'warning', 'N'), + (8, '文旅专场', '文旅专场', 'magenta', 'N'), + (9, '其他', '其他', '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 "sys_dict_data" data + WHERE data."dict_type" = 'outdoor_fair_type' + AND data."dict_value" = seed."dict_value" + ) +), +base AS ( + SELECT COALESCE(MAX("dict_code"), 0) AS max_code FROM "sys_dict_data" +) +INSERT INTO "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", + 'outdoor_fair_type', + NULL, + new_rows."list_class", + new_rows."is_default", + '0', + 'system', + NOW(), + '户外招聘会类型' +FROM new_rows +CROSS JOIN base;