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 index be8d68d..e289dbe 100644 --- 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 @@ -5,12 +5,15 @@ import java.util.List; import com.ruoyi.cms.domain.OutdoorFair; import com.ruoyi.cms.domain.OutdoorFairDictDataRequest; +import com.ruoyi.cms.domain.VenueInfo; import com.ruoyi.cms.service.IOutdoorFairService; +import com.ruoyi.cms.service.IVenueInfoService; 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 com.ruoyi.common.exception.ServiceException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +42,9 @@ public class OutdoorFairController extends BaseController @Autowired private IOutdoorFairService outdoorFairService; + @Autowired + private IVenueInfoService venueInfoService; + /** * 查询户外招聘会列表 */ @@ -72,6 +78,7 @@ public class OutdoorFairController extends BaseController @PostMapping public AjaxResult add(@RequestBody OutdoorFair outdoorFair) { + fillVenueFields(outdoorFair); return toAjax(outdoorFairService.save(outdoorFair)); } @@ -84,6 +91,7 @@ public class OutdoorFairController extends BaseController @PutMapping public AjaxResult edit(@RequestBody OutdoorFair outdoorFair) { + fillVenueFields(outdoorFair); return toAjax(outdoorFairService.updateById(outdoorFair)); } @@ -110,4 +118,17 @@ public class OutdoorFairController extends BaseController { return toAjax(outdoorFairService.insertOutdoorFairDictData(request.getDictType(), request.getDictLabel(), getUsername())); } + + private void fillVenueFields(OutdoorFair outdoorFair) + { + if (outdoorFair.getVenueId() == null) { + return; + } + VenueInfo venueInfo = venueInfoService.getById(outdoorFair.getVenueId()); + if (venueInfo == null) { + throw new ServiceException("绑定场地不存在"); + } + outdoorFair.setVenueName(venueInfo.getVenueName()); + outdoorFair.setBoothCount(venueInfo.getFloorCount() == null ? 0 : venueInfo.getFloorCount()); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/VenueInfoController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/VenueInfoController.java new file mode 100644 index 0000000..46c431e --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/VenueInfoController.java @@ -0,0 +1,127 @@ +package com.ruoyi.cms.controller.cms; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import com.ruoyi.cms.domain.VenueInfo; +import com.ruoyi.cms.domain.VenueInfoDictDataRequest; +import com.ruoyi.cms.service.IVenueInfoService; +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 com.ruoyi.common.utils.StringUtils; +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/venue-info") +@Api(tags = "后台:场地信息维护") +public class VenueInfoController extends BaseController +{ + @Autowired + private IVenueInfoService venueInfoService; + + /** + * 查询场地信息列表 + */ + @ApiOperation("查询场地信息列表") + @PreAuthorize("@ss.hasPermi('cms:venueInfo:list')") + @GetMapping("/list") + public TableDataInfo list(VenueInfo venueInfo) + { + startPage(); + List list = venueInfoService.selectVenueInfoList(venueInfo); + return getDataTable(list); + } + + /** + * 获取场地信息详细信息 + */ + @ApiOperation("获取场地信息详细信息") + @PreAuthorize("@ss.hasPermi('cms:venueInfo:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(venueInfoService.getById(id)); + } + + /** + * 新增场地信息 + */ + @ApiOperation("新增场地信息") + @PreAuthorize("@ss.hasPermi('cms:venueInfo:add')") + @Log(title = "场地信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody VenueInfo venueInfo) + { + fillHandleFields(venueInfo); + return toAjax(venueInfoService.save(venueInfo)); + } + + /** + * 修改场地信息 + */ + @ApiOperation("修改场地信息") + @PreAuthorize("@ss.hasPermi('cms:venueInfo:edit')") + @Log(title = "场地信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody VenueInfo venueInfo) + { + fillHandleFields(venueInfo); + return toAjax(venueInfoService.updateById(venueInfo)); + } + + /** + * 删除场地信息 + */ + @ApiOperation("删除场地信息") + @PreAuthorize("@ss.hasPermi('cms:venueInfo:remove')") + @Log(title = "场地信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(venueInfoService.removeByIds(Arrays.asList(ids))); + } + + /** + * 新增场地信息维护页面使用的字典项 + */ + @ApiOperation("新增场地信息字典项") + @PreAuthorize("@ss.hasAnyPermi('cms:venueInfo:add,cms:venueInfo:edit')") + @Log(title = "场地信息字典项", businessType = BusinessType.INSERT) + @PostMapping("/dict-data") + public AjaxResult addDictData(@Validated @RequestBody VenueInfoDictDataRequest request) + { + return toAjax(venueInfoService.insertVenueInfoDictData(request.getDictType(), request.getDictLabel(), getUsername())); + } + + private void fillHandleFields(VenueInfo venueInfo) + { + if (venueInfo.getHandleDate() == null) { + venueInfo.setHandleDate(new Date()); + } + if (StringUtils.isBlank(venueInfo.getHandler())) { + venueInfo.setHandler(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 index 204cf32..e3dd59a 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFair.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/OutdoorFair.java @@ -45,6 +45,14 @@ public class OutdoorFair extends BaseEntity @ApiModelProperty("举办区域") private String region; + @Excel(name = "绑定场地ID") + @ApiModelProperty("绑定场地ID") + private Long venueId; + + @Excel(name = "绑定场地") + @ApiModelProperty("绑定场地") + private String venueName; + @Excel(name = "举办地址") @ApiModelProperty("举办地址") private String address; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/VenueInfo.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/VenueInfo.java new file mode 100644 index 0000000..685bf36 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/VenueInfo.java @@ -0,0 +1,77 @@ +package com.ruoyi.cms.domain; + +import java.math.BigDecimal; +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_venue_info + * + * @author ruoyi + * @date 2026-06-25 + */ +@Data +@ApiModel("场地信息") +@TableName("cms_venue_info") +public class VenueInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty("主键ID") + private Long id; + + @Excel(name = "场地类型") + @ApiModelProperty("场地类型") + private String venueType; + + @Excel(name = "场地名称") + @ApiModelProperty("场地名称") + private String venueName; + + @Excel(name = "场地面积") + @ApiModelProperty("场地面积") + private BigDecimal venueArea; + + @Excel(name = "展位数量") + @ApiModelProperty("展位数量") + private Integer floorCount; + + @Excel(name = "场地地址") + @ApiModelProperty("场地地址") + private String venueAddress; + + @Excel(name = "联系电话") + @ApiModelProperty("联系电话") + private String contactPhone; + + @Excel(name = "乘坐线路ID") + @ApiModelProperty("乘坐线路ID,多个用英文逗号分隔") + private String routeLineIds; + + @Excel(name = "乘坐线路") + @ApiModelProperty("乘坐线路名称,多个用英文逗号分隔") + private String routeLineNames; + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "经办日期", width = 30, dateFormat = "yyyy-MM-dd") + @ApiModelProperty("经办日期") + private Date handleDate; + + @Excel(name = "经办机构") + @ApiModelProperty("经办机构") + private String handleOrg; + + @Excel(name = "经办人") + @ApiModelProperty("经办人") + private String handler; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/VenueInfoDictDataRequest.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/VenueInfoDictDataRequest.java new file mode 100644 index 0000000..6a85774 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/VenueInfoDictDataRequest.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 VenueInfoDictDataRequest +{ + @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/VenueInfoMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/VenueInfoMapper.java new file mode 100644 index 0000000..3b74eeb --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/VenueInfoMapper.java @@ -0,0 +1,53 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.VenueInfo; +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 VenueInfoMapper 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/IVenueInfoService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IVenueInfoService.java new file mode 100644 index 0000000..fbfc4a0 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IVenueInfoService.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.VenueInfo; + +/** + * 场地信息Service接口 + * + * @author ruoyi + * @date 2026-06-25 + */ +public interface IVenueInfoService extends IService +{ + /** + * 查询场地信息列表 + * + * @param venueInfo 场地信息 + * @return 场地信息集合 + */ + List selectVenueInfoList(VenueInfo venueInfo); + + /** + * 新增场地信息相关字典项 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param createBy 创建人 + * @return 影响行数 + */ + int insertVenueInfoDictData(String dictType, String dictLabel, String createBy); +} 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 index f3ad728..97362ff 100644 --- 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 @@ -39,6 +39,7 @@ public class OutdoorFairServiceImpl extends ServiceImpl implements IVenueInfoService +{ + private static final String VENUE_TYPE_DICT = "venue_info_type"; + + /** + * 查询场地信息列表 + * + * @param venueInfo 场地信息 + * @return 场地信息集合 + */ + @Override + public List selectVenueInfoList(VenueInfo venueInfo) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(venueInfo.getVenueType()), VenueInfo::getVenueType, venueInfo.getVenueType()); + queryWrapper.like(StringUtils.isNotBlank(venueInfo.getVenueName()), VenueInfo::getVenueName, venueInfo.getVenueName()); + queryWrapper.like(StringUtils.isNotBlank(venueInfo.getVenueAddress()), VenueInfo::getVenueAddress, venueInfo.getVenueAddress()); + queryWrapper.orderByDesc(VenueInfo::getCreateTime); + return list(queryWrapper); + } + + /** + * 新增场地信息相关字典项 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param createBy 创建人 + * @return 影响行数 + */ + @Override + public int insertVenueInfoDictData(String dictType, String dictLabel, String createBy) + { + if (!VENUE_TYPE_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 index 52aea23..79b2415 100644 --- a/sql/cms_outdoor_fair.sql +++ b/sql/cms_outdoor_fair.sql @@ -14,6 +14,8 @@ CREATE TABLE IF NOT EXISTS "cms_outdoor_fair" ( "host_unit" VARCHAR(200) NOT NULL, "fair_type" VARCHAR(50) NOT NULL, "region" VARCHAR(100) NOT NULL, + "venue_id" BIGINT, + "venue_name" VARCHAR(200), "address" VARCHAR(500) NOT NULL, "booth_count" INTEGER NOT NULL DEFAULT 0, "hold_time" TIMESTAMP(0) NOT NULL, @@ -36,6 +38,8 @@ 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"."venue_id" IS '绑定场地ID'; +COMMENT ON COLUMN "cms_outdoor_fair"."venue_name" 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 '举办时间'; @@ -49,5 +53,6 @@ COMMENT ON COLUMN "cms_outdoor_fair"."del_flag" IS '删除标志(0代表存在 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_venue_id" ON "cms_outdoor_fair" ("venue_id"); 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_bind_venue.sql b/sql/cms_outdoor_fair_bind_venue.sql new file mode 100644 index 0000000..3ecfea3 --- /dev/null +++ b/sql/cms_outdoor_fair_bind_venue.sql @@ -0,0 +1,20 @@ +-- 户外招聘会绑定场地字段 +-- 瀚高数据库 / PostgreSQL 兼容 +-- 可重复执行。 + +ALTER TABLE "cms_outdoor_fair" + ADD COLUMN IF NOT EXISTS "venue_id" BIGINT; + +ALTER TABLE "cms_outdoor_fair" + ADD COLUMN IF NOT EXISTS "venue_name" VARCHAR(200); + +COMMENT ON COLUMN "cms_outdoor_fair"."venue_id" IS '绑定场地ID'; +COMMENT ON COLUMN "cms_outdoor_fair"."venue_name" IS '绑定场地'; + +CREATE INDEX IF NOT EXISTS "idx_cms_outdoor_fair_venue_id" ON "cms_outdoor_fair" ("venue_id"); + +UPDATE "cms_outdoor_fair" fair +SET "venue_name" = venue."venue_name", + "booth_count" = COALESCE(venue."floor_count", 0) +FROM "cms_venue_info" venue +WHERE fair."venue_id" = venue."id"; diff --git a/sql/cms_venue_info.sql b/sql/cms_venue_info.sql new file mode 100644 index 0000000..b2ed405 --- /dev/null +++ b/sql/cms_venue_info.sql @@ -0,0 +1,215 @@ +-- 场地信息维护表、字典、菜单 +-- 瀚高数据库 / PostgreSQL 兼容 +-- 可重复执行。 + +CREATE SEQUENCE IF NOT EXISTS "cms_venue_info_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +CREATE TABLE IF NOT EXISTS "cms_venue_info" ( + "id" BIGINT NOT NULL DEFAULT nextval('"cms_venue_info_id_seq"') PRIMARY KEY, + "venue_type" VARCHAR(100) NOT NULL, + "venue_name" VARCHAR(200) NOT NULL, + "venue_area" NUMERIC(12, 2), + "floor_count" INTEGER, + "venue_address" VARCHAR(500) NOT NULL, + "contact_phone" VARCHAR(50), + "route_line_ids" VARCHAR(500), + "route_line_names" VARCHAR(1000), + "handle_date" DATE, + "handle_org" VARCHAR(200), + "handler" VARCHAR(100), + "create_by" VARCHAR(64) DEFAULT '', + "create_time" TIMESTAMP(0), + "update_by" VARCHAR(64) DEFAULT '', + "update_time" TIMESTAMP(0), + "remark" VARCHAR(100), + "del_flag" CHAR(1) DEFAULT '0' +); + +COMMENT ON TABLE "cms_venue_info" IS '场地信息维护表'; +COMMENT ON COLUMN "cms_venue_info"."id" IS '主键ID'; +COMMENT ON COLUMN "cms_venue_info"."venue_type" IS '场地类型'; +COMMENT ON COLUMN "cms_venue_info"."venue_name" IS '场地名称'; +COMMENT ON COLUMN "cms_venue_info"."venue_area" IS '场地面积'; +COMMENT ON COLUMN "cms_venue_info"."floor_count" IS '展位数量'; +COMMENT ON COLUMN "cms_venue_info"."venue_address" IS '场地地址'; +COMMENT ON COLUMN "cms_venue_info"."contact_phone" IS '联系电话'; +COMMENT ON COLUMN "cms_venue_info"."route_line_ids" IS '乘坐线路ID,多个用英文逗号分隔'; +COMMENT ON COLUMN "cms_venue_info"."route_line_names" IS '乘坐线路名称,多个用英文逗号分隔'; +COMMENT ON COLUMN "cms_venue_info"."handle_date" IS '经办日期'; +COMMENT ON COLUMN "cms_venue_info"."handle_org" IS '经办机构'; +COMMENT ON COLUMN "cms_venue_info"."handler" IS '经办人'; +COMMENT ON COLUMN "cms_venue_info"."remark" IS '备注'; +COMMENT ON COLUMN "cms_venue_info"."del_flag" IS '删除标志(0代表存在 2代表删除)'; + +CREATE INDEX IF NOT EXISTS "idx_cms_venue_info_type" ON "cms_venue_info" ("venue_type"); +CREATE INDEX IF NOT EXISTS "idx_cms_venue_info_name" ON "cms_venue_info" ("venue_name"); +CREATE INDEX IF NOT EXISTS "idx_cms_venue_info_del_flag" ON "cms_venue_info" ("del_flag"); + +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"), + '场地类型', + 'venue_info_type', + '0', + 'system', + NOW(), + '场地信息维护使用' +WHERE NOT EXISTS ( + SELECT 1 FROM "sys_dict_type" WHERE "dict_type" = 'venue_info_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, '园区招聘场地', '园区招聘场地', 'cyan', 'N'), + (5, '临时招聘场地', '临时招聘场地', 'warning', 'N'), + (6, '其他', '其他', '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" = 'venue_info_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", + 'venue_info_type', + NULL, + new_rows."list_class", + new_rows."is_default", + '0', + 'system', + NOW(), + '场地类型' +FROM new_rows +CROSS JOIN base; + +WITH parent_menu AS ( + SELECT "menu_id" FROM "sys_menu" WHERE "menu_id" = 2055 +), +inserted_page AS ( + INSERT INTO "sys_menu" ( + "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", "remark" + ) + SELECT + '场地信息维护', + parent_menu."menu_id", + 2, + 'jobfair/venueinfo', + 'jobfair/venueinfo/index', + NULL, + '', + 1, + 0, + 'C', + '0', + '0', + 'cms:venueInfo:list', + '#', + 'system', + NOW(), + '场地信息维护菜单' + FROM parent_menu + WHERE NOT EXISTS ( + SELECT 1 FROM "sys_menu" WHERE "parent_id" = parent_menu."menu_id" AND "menu_name" = '场地信息维护' + ) + RETURNING "menu_id" +), +page_menu AS ( + SELECT "menu_id" FROM inserted_page + UNION + SELECT "menu_id" FROM "sys_menu" WHERE "parent_id" = 2055 AND "menu_name" = '场地信息维护' +), +button_seed("menu_name", "order_num", "perms") AS ( + VALUES + ('场地信息查询', 1, 'cms:venueInfo:query'), + ('场地信息新增', 2, 'cms:venueInfo:add'), + ('场地信息修改', 3, 'cms:venueInfo:edit'), + ('场地信息删除', 4, 'cms:venueInfo:remove') +) +INSERT INTO "sys_menu" ( + "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", "remark" +) +SELECT + button_seed."menu_name", + page_menu."menu_id", + button_seed."order_num", + '', + NULL, + NULL, + '', + 1, + 0, + 'F', + '0', + '0', + button_seed."perms", + '#', + 'system', + NOW(), + '场地信息维护按钮' +FROM page_menu +CROSS JOIN button_seed +WHERE NOT EXISTS ( + SELECT 1 FROM "sys_menu" WHERE "perms" = button_seed."perms" +); + +WITH outdoor_roles AS ( + SELECT DISTINCT "role_id" + FROM "sys_role_menu" + WHERE "menu_id" = 2111 +), +venue_menus AS ( + SELECT "menu_id" + FROM "sys_menu" + WHERE ("parent_id" = 2055 AND "menu_name" = '场地信息维护') + OR "perms" IN ( + 'cms:venueInfo:query', + 'cms:venueInfo:add', + 'cms:venueInfo:edit', + 'cms:venueInfo:remove' + ) +), +role_menu_rows AS ( + SELECT outdoor_roles."role_id", venue_menus."menu_id" + FROM outdoor_roles + CROSS JOIN venue_menus +) +INSERT INTO "sys_role_menu" ("role_id", "menu_id") +SELECT role_menu_rows."role_id", role_menu_rows."menu_id" +FROM role_menu_rows +WHERE NOT EXISTS ( + SELECT 1 + FROM "sys_role_menu" existing + WHERE existing."role_id" = role_menu_rows."role_id" + AND existing."menu_id" = role_menu_rows."menu_id" +);