Prechádzať zdrojové kódy

提交后勤管理报告厅模块

zlwu 1 rok pred
rodič
commit
ca88d5e983
22 zmenil súbory, kde vykonal 1469 pridanie a 8 odobranie
  1. BIN
      .DS_Store
  2. BIN
      ruoyi-admin/.DS_Store
  3. 105 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/controller/HqHallInfoController.java
  4. 115 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/controller/HqHallReservationController.java
  5. 53 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/domain/HqHallInfo.java
  6. 97 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/domain/HqHallReservation.java
  7. 54 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqHallInfoBo.java
  8. 33 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqHallReservationAuditBo.java
  9. 116 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqHallReservationBo.java
  10. 70 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/domain/vo/HqHallInfoVo.java
  11. 116 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/domain/vo/HqHallReservationVo.java
  12. 15 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/mapper/HqHallInfoMapper.java
  13. 15 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/mapper/HqHallReservationMapper.java
  14. 68 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/service/IHqHallInfoService.java
  15. 77 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/service/IHqHallReservationService.java
  16. 133 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/HqHallInfoServiceImpl.java
  17. 226 0
      ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/HqHallReservationServiceImpl.java
  18. 7 0
      ruoyi-admin/src/main/resources/mapper/hq/HqHallInfoMapper.xml
  19. 7 0
      ruoyi-admin/src/main/resources/mapper/hq/HqHallReservationMapper.xml
  20. 15 8
      ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
  21. 54 0
      需求文件夹/后勤报告厅预约需求/simple_hall_reservation_schema.sql
  22. 93 0
      需求文件夹/后勤报告厅预约需求/简化版报告厅预约系统设计说明.md

BIN
.DS_Store


BIN
ruoyi-admin/.DS_Store


+ 105 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/controller/HqHallInfoController.java

@@ -0,0 +1,105 @@
+package org.dromara.zhxy.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.zhxy.domain.vo.HqHallInfoVo;
+import org.dromara.zhxy.domain.bo.HqHallInfoBo;
+import org.dromara.zhxy.service.IHqHallInfoService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 报告厅信息
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hq/hallInfo")
+public class HqHallInfoController extends BaseController {
+
+    private final IHqHallInfoService hqHallInfoService;
+
+    /**
+     * 查询报告厅信息列表
+     */
+    @SaCheckPermission("hq:hallInfo:list")
+    @GetMapping("/list")
+    public TableDataInfo<HqHallInfoVo> list(HqHallInfoBo bo, PageQuery pageQuery) {
+        return hqHallInfoService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出报告厅信息列表
+     */
+    @SaCheckPermission("hq:hallInfo:export")
+    @Log(title = "报告厅信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HqHallInfoBo bo, HttpServletResponse response) {
+        List<HqHallInfoVo> list = hqHallInfoService.queryList(bo);
+        ExcelUtil.exportExcel(list, "报告厅信息", HqHallInfoVo.class, response);
+    }
+
+    /**
+     * 获取报告厅信息详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("hq:hallInfo:query")
+    @GetMapping("/{id}")
+    public R<HqHallInfoVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long id) {
+        return R.ok(hqHallInfoService.queryById(id));
+    }
+
+    /**
+     * 新增报告厅信息
+     */
+    @SaCheckPermission("hq:hallInfo:add")
+    @Log(title = "报告厅信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody HqHallInfoBo bo) {
+        return toAjax(hqHallInfoService.insertByBo(bo));
+    }
+
+    /**
+     * 修改报告厅信息
+     */
+    @SaCheckPermission("hq:hallInfo:edit")
+    @Log(title = "报告厅信息", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody HqHallInfoBo bo) {
+        return toAjax(hqHallInfoService.updateByBo(bo));
+    }
+
+    /**
+     * 删除报告厅信息
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("hq:hallInfo:remove")
+    @Log(title = "报告厅信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] ids) {
+        return toAjax(hqHallInfoService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 115 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/controller/HqHallReservationController.java

@@ -0,0 +1,115 @@
+package org.dromara.zhxy.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.zhxy.domain.vo.HqHallReservationVo;
+import org.dromara.zhxy.domain.bo.HqHallReservationBo;
+import org.dromara.zhxy.domain.bo.HqHallReservationAuditBo;
+import org.dromara.zhxy.service.IHqHallReservationService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 报告厅预约
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hq/hallReservation")
+public class HqHallReservationController extends BaseController {
+
+    private final IHqHallReservationService hqHallReservationService;
+
+    /**
+     * 查询报告厅预约列表
+     */
+    @SaCheckPermission("hq:hallReservation:list")
+    @GetMapping("/list")
+    public TableDataInfo<HqHallReservationVo> list(HqHallReservationBo bo, PageQuery pageQuery) {
+        return hqHallReservationService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出报告厅预约列表
+     */
+    @SaCheckPermission("hq:hallReservation:export")
+    @Log(title = "报告厅预约", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HqHallReservationBo bo, HttpServletResponse response) {
+        List<HqHallReservationVo> list = hqHallReservationService.queryList(bo);
+        ExcelUtil.exportExcel(list, "报告厅预约", HqHallReservationVo.class, response);
+    }
+
+    /**
+     * 获取报告厅预约详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("hq:hallReservation:query")
+    @GetMapping("/{id}")
+    public R<HqHallReservationVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
+        return R.ok(hqHallReservationService.queryById(id));
+    }
+
+    /**
+     * 新增报告厅预约
+     */
+    @SaCheckPermission("hq:hallReservation:add")
+    @Log(title = "报告厅预约", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody HqHallReservationBo bo) {
+        return toAjax(hqHallReservationService.insertByBo(bo));
+    }
+
+    /**
+     * 修改报告厅预约
+     */
+    @SaCheckPermission("hq:hallReservation:edit")
+    @Log(title = "报告厅预约", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody HqHallReservationBo bo) {
+        return toAjax(hqHallReservationService.updateByBo(bo));
+    }
+
+    /**
+     * 删除报告厅预约
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("hq:hallReservation:remove")
+    @Log(title = "报告厅预约", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
+        return toAjax(hqHallReservationService.deleteWithValidByIds(List.of(ids), true));
+    }
+
+    /**
+     * 审核报告厅预约(批准/拒绝)
+     */
+    @SaCheckPermission("hq:hallReservation:audit")
+    @Log(title = "报告厅预约审核", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping("/audit")
+    public R<Void> audit(@RequestBody HqHallReservationAuditBo auditBo) {
+        return toAjax(hqHallReservationService.auditByIds(auditBo));
+    }
+}

+ 53 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/domain/HqHallInfo.java

@@ -0,0 +1,53 @@
+package org.dromara.zhxy.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+
+import java.io.Serial;
+
+/**
+ * 报告厅信息对象 hq_hall_info
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hq_hall_info")
+public class HqHallInfo extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 报告厅名称
+     */
+    private String hallName;
+
+    /**
+     * 报告厅图片
+     */
+    private String hallImage;
+
+    /**
+     * 报告厅状态
+     */
+    private String hallStatus;
+
+    /**
+     * 报告厅描述
+     */
+    private String hallDescription;
+
+
+}

+ 97 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/domain/HqHallReservation.java

@@ -0,0 +1,97 @@
+package org.dromara.zhxy.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 报告厅预约对象 hq_hall_reservation
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("hq_hall_reservation")
+public class HqHallReservation extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 报告厅ID
+     */
+    private Long hallId;
+
+    /**
+     * 报告厅名称
+     */
+    private String hallName;
+
+    /**
+     * 开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 预约用途
+     */
+    private String reservationPurpose;
+
+    /**
+     * 申请人id
+     */
+    private Long applicantId;
+
+    /**
+     * 申请人姓名
+     */
+    private String applicantName;
+
+    /**
+     * 申请人电话
+     */
+    private String applicantPhone;
+
+    /**
+     * 预约状态
+     */
+    private String status;
+
+    /**
+     * 审核人id
+     */
+    private Long auditBy;
+
+    /**
+     * 审核人
+     */
+    private String auditName;
+
+    /**
+     * 审核时间
+     */
+    private Date auditTime;
+
+    /**
+     * 审核备注
+     */
+    private String auditRemark;
+
+}

+ 54 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqHallInfoBo.java

@@ -0,0 +1,54 @@
+package org.dromara.zhxy.domain.bo;
+
+import org.dromara.zhxy.domain.HqHallInfo;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+
+/**
+ * 报告厅信息业务对象 hq_hall_info
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = HqHallInfo.class, reverseConvertGenerate = false)
+public class HqHallInfoBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    @NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 报告厅名称
+     */
+    @NotBlank(message = "报告厅名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String hallName;
+
+    /**
+     * 报告厅图片
+     */
+    private String hallImage;
+
+    /**
+     * 报告厅状态
+     */
+    @NotBlank(message = "报告厅状态不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String hallStatus;
+
+    /**
+     * 报告厅描述
+     */
+    private String hallDescription;
+
+
+}

+ 33 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqHallReservationAuditBo.java

@@ -0,0 +1,33 @@
+package org.dromara.zhxy.domain.bo;
+
+import lombok.Data;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * 报告厅预约审核业务对象
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Data
+public class HqHallReservationAuditBo {
+
+    /**
+     * 预约记录ID列表
+     */
+    @NotEmpty(message = "预约记录ID不能为空")
+    private List<Long> ids;
+
+    /**
+     * 审核状态:1-批准,2-拒绝
+     */
+    @NotBlank(message = "审核状态不能为空")
+    private String status;
+
+    /**
+     * 审核备注
+     */
+    private String auditRemark;
+}

+ 116 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqHallReservationBo.java

@@ -0,0 +1,116 @@
+package org.dromara.zhxy.domain.bo;
+
+import org.dromara.zhxy.domain.HqHallReservation;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 报告厅预约业务对象 hq_hall_reservation
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = HqHallReservation.class, reverseConvertGenerate = false)
+public class HqHallReservationBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    @NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 报告厅ID
+     */
+    @NotNull(message = "报告厅ID不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long hallId;
+
+    /**
+     * 报告厅名称
+     */
+    @NotBlank(message = "报告厅名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String hallName;
+
+    /**
+     * 开始时间(用于新增和编辑)
+     */
+    @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+    /**
+     * 结束时间(用于新增和编辑)
+     */
+    @NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+    /**
+     * 开始时间查询参数(字符串格式)
+     */
+    private String startTimeStr;
+
+    /**
+     * 结束时间查询参数(字符串格式)
+     */
+    private String endTimeStr;
+
+    /**
+     * 预约用途
+     */
+    @NotBlank(message = "预约用途不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String reservationPurpose;
+
+    /**
+     * 申请人id
+     */
+    @NotNull(message = "申请人id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long applicantId;
+
+    /**
+     * 申请人姓名
+     */
+    @NotBlank(message = "申请人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String applicantName;
+
+    /**
+     * 申请人电话
+     */
+    private String applicantPhone;
+
+    /**
+     * 预约状态
+     */
+    @NotBlank(message = "预约状态不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 审核人id
+     */
+    private Long auditBy;
+
+    /**
+     * 审核人
+     */
+    private String auditName;
+
+    /**
+     * 审核时间
+     */
+    private Date auditTime;
+
+    /**
+     * 审核备注
+     */
+    private String auditRemark;
+
+}

+ 70 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/domain/vo/HqHallInfoVo.java

@@ -0,0 +1,70 @@
+package org.dromara.zhxy.domain.vo;
+
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+import org.dromara.zhxy.domain.HqHallInfo;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 报告厅信息视图对象 hq_hall_info
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = HqHallInfo.class)
+public class HqHallInfoVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 报告厅名称
+     */
+    @ExcelProperty(value = "报告厅名称")
+    private String hallName;
+
+    /**
+     * 报告厅图片
+     */
+    @ExcelProperty(value = "报告厅图片")
+    private String hallImage;
+
+    /**
+     * 报告厅图片Url
+     */
+    @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "hallImage")
+    private String hallImageUrl;
+    /**
+     * 报告厅状态
+     */
+    @ExcelProperty(value = "报告厅状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "hall_status")
+    private String hallStatus;
+
+    /**
+     * 报告厅描述
+     */
+    @ExcelProperty(value = "报告厅描述")
+    private String hallDescription;
+
+
+}

+ 116 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/domain/vo/HqHallReservationVo.java

@@ -0,0 +1,116 @@
+package org.dromara.zhxy.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.zhxy.domain.HqHallReservation;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 报告厅预约视图对象 hq_hall_reservation
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = HqHallReservation.class)
+public class HqHallReservationVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 报告厅ID
+     */
+    @ExcelProperty(value = "报告厅ID")
+    private Long hallId;
+
+    /**
+     * 报告厅名称
+     */
+    @ExcelProperty(value = "报告厅名称")
+    private String hallName;
+
+    /**
+     * 开始时间
+     */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /**
+     * 预约用途
+     */
+    @ExcelProperty(value = "预约用途")
+    private String reservationPurpose;
+
+    /**
+     * 申请人id
+     */
+    @ExcelProperty(value = "申请人id")
+    private Long applicantId;
+
+    /**
+     * 申请人姓名
+     */
+    @ExcelProperty(value = "申请人姓名")
+    private String applicantName;
+
+    /**
+     * 申请人电话
+     */
+    @ExcelProperty(value = "申请人电话")
+    private String applicantPhone;
+
+    /**
+     * 预约状态
+     */
+    @ExcelProperty(value = "预约状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "hall_reserv_status")
+    private String status;
+
+    /**
+     * 审核人id
+     */
+    @ExcelProperty(value = "审核人id")
+    private Long auditBy;
+
+    /**
+     * 审核人
+     */
+    @ExcelProperty(value = "审核人")
+    private String auditName;
+
+    /**
+     * 审核时间
+     */
+    @ExcelProperty(value = "审核时间")
+    private Date auditTime;
+
+    /**
+     * 审核备注
+     */
+    @ExcelProperty(value = "审核备注")
+    private String auditRemark;
+
+}

+ 15 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/mapper/HqHallInfoMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.zhxy.mapper;
+
+import org.dromara.zhxy.domain.HqHallInfo;
+import org.dromara.zhxy.domain.vo.HqHallInfoVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 报告厅信息Mapper接口
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+public interface HqHallInfoMapper extends BaseMapperPlus<HqHallInfo, HqHallInfoVo> {
+
+}

+ 15 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/mapper/HqHallReservationMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.zhxy.mapper;
+
+import org.dromara.zhxy.domain.HqHallReservation;
+import org.dromara.zhxy.domain.vo.HqHallReservationVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 报告厅预约Mapper接口
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+public interface HqHallReservationMapper extends BaseMapperPlus<HqHallReservation, HqHallReservationVo> {
+
+}

+ 68 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/service/IHqHallInfoService.java

@@ -0,0 +1,68 @@
+package org.dromara.zhxy.service;
+
+import org.dromara.zhxy.domain.vo.HqHallInfoVo;
+import org.dromara.zhxy.domain.bo.HqHallInfoBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 报告厅信息Service接口
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+public interface IHqHallInfoService {
+
+    /**
+     * 查询报告厅信息
+     *
+     * @param id 主键
+     * @return 报告厅信息
+     */
+    HqHallInfoVo queryById(Long id);
+
+    /**
+     * 分页查询报告厅信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 报告厅信息分页列表
+     */
+    TableDataInfo<HqHallInfoVo> queryPageList(HqHallInfoBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的报告厅信息列表
+     *
+     * @param bo 查询条件
+     * @return 报告厅信息列表
+     */
+    List<HqHallInfoVo> queryList(HqHallInfoBo bo);
+
+    /**
+     * 新增报告厅信息
+     *
+     * @param bo 报告厅信息
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(HqHallInfoBo bo);
+
+    /**
+     * 修改报告厅信息
+     *
+     * @param bo 报告厅信息
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(HqHallInfoBo bo);
+
+    /**
+     * 校验并批量删除报告厅信息信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 77 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/service/IHqHallReservationService.java

@@ -0,0 +1,77 @@
+package org.dromara.zhxy.service;
+
+import org.dromara.zhxy.domain.vo.HqHallReservationVo;
+import org.dromara.zhxy.domain.bo.HqHallReservationBo;
+import org.dromara.zhxy.domain.bo.HqHallReservationAuditBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 报告厅预约Service接口
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+public interface IHqHallReservationService {
+
+    /**
+     * 查询报告厅预约
+     *
+     * @param id 主键
+     * @return 报告厅预约
+     */
+    HqHallReservationVo queryById(Long id);
+
+    /**
+     * 分页查询报告厅预约列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 报告厅预约分页列表
+     */
+    TableDataInfo<HqHallReservationVo> queryPageList(HqHallReservationBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的报告厅预约列表
+     *
+     * @param bo 查询条件
+     * @return 报告厅预约列表
+     */
+    List<HqHallReservationVo> queryList(HqHallReservationBo bo);
+
+    /**
+     * 新增报告厅预约
+     *
+     * @param bo 报告厅预约
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(HqHallReservationBo bo);
+
+    /**
+     * 修改报告厅预约
+     *
+     * @param bo 报告厅预约
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(HqHallReservationBo bo);
+
+    /**
+     * 校验并批量删除报告厅预约信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 批量审核报告厅预约
+     *
+     * @param auditBo 审核信息
+     * @return 是否审核成功
+     */
+    Boolean auditByIds(HqHallReservationAuditBo auditBo);
+}

+ 133 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/HqHallInfoServiceImpl.java

@@ -0,0 +1,133 @@
+package org.dromara.zhxy.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.zhxy.domain.bo.HqHallInfoBo;
+import org.dromara.zhxy.domain.vo.HqHallInfoVo;
+import org.dromara.zhxy.domain.HqHallInfo;
+import org.dromara.zhxy.mapper.HqHallInfoMapper;
+import org.dromara.zhxy.service.IHqHallInfoService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 报告厅信息Service业务层处理
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class HqHallInfoServiceImpl implements IHqHallInfoService {
+
+    private final HqHallInfoMapper baseMapper;
+
+    /**
+     * 查询报告厅信息
+     *
+     * @param id 主键
+     * @return 报告厅信息
+     */
+    @Override
+    public HqHallInfoVo queryById(Long id) {
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询报告厅信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 报告厅信息分页列表
+     */
+    @Override
+    public TableDataInfo<HqHallInfoVo> queryPageList(HqHallInfoBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<HqHallInfo> lqw = buildQueryWrapper(bo);
+        Page<HqHallInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的报告厅信息列表
+     *
+     * @param bo 查询条件
+     * @return 报告厅信息列表
+     */
+    @Override
+    public List<HqHallInfoVo> queryList(HqHallInfoBo bo) {
+        LambdaQueryWrapper<HqHallInfo> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<HqHallInfo> buildQueryWrapper(HqHallInfoBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<HqHallInfo> lqw = Wrappers.lambdaQuery();
+        lqw.orderByDesc(HqHallInfo::getCreateTime);
+        lqw.like(StringUtils.isNotBlank(bo.getHallName()), HqHallInfo::getHallName, bo.getHallName());
+        lqw.eq(StringUtils.isNotBlank(bo.getHallStatus()), HqHallInfo::getHallStatus, bo.getHallStatus());
+        return lqw;
+    }
+
+    /**
+     * 新增报告厅信息
+     *
+     * @param bo 报告厅信息
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(HqHallInfoBo bo) {
+        HqHallInfo add = MapstructUtils.convert(bo, HqHallInfo.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改报告厅信息
+     *
+     * @param bo 报告厅信息
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(HqHallInfoBo bo) {
+        HqHallInfo update = MapstructUtils.convert(bo, HqHallInfo.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(HqHallInfo entity) {
+        // TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除报告厅信息信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            // TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 226 - 0
ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/HqHallReservationServiceImpl.java

@@ -0,0 +1,226 @@
+package org.dromara.zhxy.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.zhxy.domain.bo.HqHallReservationBo;
+import org.dromara.zhxy.domain.bo.HqHallReservationAuditBo;
+import org.dromara.zhxy.domain.vo.HqHallReservationVo;
+import org.dromara.zhxy.domain.HqHallReservation;
+import org.dromara.zhxy.mapper.HqHallReservationMapper;
+import org.dromara.zhxy.service.IHqHallReservationService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
+import java.util.Date;
+import org.dromara.common.satoken.utils.LoginHelper;
+
+/**
+ * 报告厅预约Service业务层处理
+ *
+ * @author wuzilong
+ * @date 2025-06-23
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class HqHallReservationServiceImpl implements IHqHallReservationService {
+
+    private final HqHallReservationMapper baseMapper;
+
+    /**
+     * 查询报告厅预约
+     *
+     * @param id 主键
+     * @return 报告厅预约
+     */
+    @Override
+    public HqHallReservationVo queryById(Long id) {
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询报告厅预约列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 报告厅预约分页列表
+     */
+    @Override
+    public TableDataInfo<HqHallReservationVo> queryPageList(HqHallReservationBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<HqHallReservation> lqw = buildQueryWrapper(bo);
+        Page<HqHallReservationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的报告厅预约列表
+     *
+     * @param bo 查询条件
+     * @return 报告厅预约列表
+     */
+    @Override
+    public List<HqHallReservationVo> queryList(HqHallReservationBo bo) {
+        LambdaQueryWrapper<HqHallReservation> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<HqHallReservation> buildQueryWrapper(HqHallReservationBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<HqHallReservation> lqw = Wrappers.lambdaQuery();
+        lqw.orderByDesc(HqHallReservation::getCreateTime);
+
+        // 调试日志:记录查询条件
+        log.info("报告厅预约查询条件 - applicantId: {}, hallId: {}, hallName: {}, status: {}",
+                bo.getApplicantId(), bo.getHallId(), bo.getHallName(), bo.getStatus());
+        lqw.eq(bo.getHallId() != null, HqHallReservation::getHallId, bo.getHallId());
+        lqw.like(StringUtils.isNotBlank(bo.getHallName()), HqHallReservation::getHallName, bo.getHallName());
+
+        // 处理时间查询参数:优先使用字符串格式的时间参数
+        Date startTimeQuery = null;
+        Date endTimeQuery = null;
+
+        // 如果有字符串格式的时间参数,优先使用
+        if (StringUtils.isNotBlank(bo.getStartTimeStr())) {
+            startTimeQuery = parseDateTime(bo.getStartTimeStr());
+        } else if (bo.getStartTime() != null) {
+            startTimeQuery = bo.getStartTime();
+        }
+
+        if (StringUtils.isNotBlank(bo.getEndTimeStr())) {
+            endTimeQuery = parseDateTime(bo.getEndTimeStr());
+        } else if (bo.getEndTime() != null) {
+            endTimeQuery = bo.getEndTime();
+        }
+
+        // 时间范围查询逻辑:
+        // 如果用户选择了开始时间,查找预约开始时间 >= 用户选择时间的记录
+        // 这样查询出的记录的开始时间都会比用户选择的时间晚或相等(用户选择的时间比数据库中的早)
+        lqw.ge(startTimeQuery != null, HqHallReservation::getStartTime, startTimeQuery);
+
+        // 如果用户选择了结束时间,查找预约结束时间 <= 用户选择时间的记录
+        // 这样查询出的记录的结束时间都会比用户选择的时间早或相等(用户选择的时间比数据库中的晚)
+        lqw.le(endTimeQuery != null, HqHallReservation::getEndTime, endTimeQuery);
+
+        lqw.eq(bo.getApplicantId() != null, HqHallReservation::getApplicantId, bo.getApplicantId());
+        lqw.like(StringUtils.isNotBlank(bo.getApplicantName()), HqHallReservation::getApplicantName,
+                bo.getApplicantName());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), HqHallReservation::getStatus, bo.getStatus());
+        return lqw;
+    }
+
+    /**
+     * 解析日期时间字符串
+     */
+    private Date parseDateTime(String dateTimeStr) {
+        if (StringUtils.isBlank(dateTimeStr)) {
+            return null;
+        }
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            return sdf.parse(dateTimeStr);
+        } catch (ParseException e) {
+            log.warn("日期格式解析失败: {}", dateTimeStr, e);
+            return null;
+        }
+    }
+
+    /**
+     * 新增报告厅预约
+     *
+     * @param bo 报告厅预约
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(HqHallReservationBo bo) {
+        HqHallReservation add = MapstructUtils.convert(bo, HqHallReservation.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改报告厅预约
+     *
+     * @param bo 报告厅预约
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(HqHallReservationBo bo) {
+        HqHallReservation update = MapstructUtils.convert(bo, HqHallReservation.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(HqHallReservation entity) {
+        // TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除报告厅预约信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            // TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    /**
+     * 批量审核报告厅预约
+     *
+     * @param auditBo 审核信息
+     * @return 是否审核成功
+     */
+    @Override
+    public Boolean auditByIds(HqHallReservationAuditBo auditBo) {
+        log.info("开始审核报告厅预约,审核信息:{}", auditBo);
+
+        // 获取当前用户ID作为审核人
+        Long currentUserId = LoginHelper.getUserId();
+        String currentUserName = LoginHelper.getLoginUser().getNickname();
+        Date auditTime = new Date();
+
+        // 构建更新条件
+        List<HqHallReservation> updateList = auditBo.getIds().stream()
+                .map(id -> {
+                    HqHallReservation entity = new HqHallReservation();
+                    entity.setId(id);
+                    entity.setStatus(auditBo.getStatus());
+                    entity.setAuditBy(currentUserId);
+                    entity.setAuditName(currentUserName);
+                    entity.setAuditTime(auditTime);
+                    entity.setAuditRemark(auditBo.getAuditRemark());
+                    return entity;
+                })
+                .toList();
+
+        // 批量更新
+        boolean result = baseMapper.updateBatchById(updateList);
+
+        log.info("审核完成,审核状态:{},影响记录数:{}", auditBo.getStatus(), updateList.size());
+
+        return result;
+    }
+}

+ 7 - 0
ruoyi-admin/src/main/resources/mapper/hq/HqHallInfoMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.zhxy.mapper.HqHallInfoMapper">
+
+</mapper>

+ 7 - 0
ruoyi-admin/src/main/resources/mapper/hq/HqHallReservationMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.zhxy.mapper.HqHallReservationMapper">
+
+</mapper>

+ 15 - 8
ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java

@@ -15,7 +15,6 @@ import org.dromara.common.core.enums.UserType;
 
 import java.util.Set;
 
-
 /**
  * 登录鉴权助手
  * <p>
@@ -39,6 +38,7 @@ public class LoginHelper {
     public static final String DEPT_NAME_KEY = "deptName";
     public static final String DEPT_CATEGORY_KEY = "deptCategory";
     public static final String CLIENT_KEY = "clientid";
+    public static final String NICK_NAME_KEY = "nickName";
 
     /**
      * 登录系统 基于 设备类型
@@ -50,13 +50,13 @@ public class LoginHelper {
     public static void login(LoginUser loginUser, SaLoginParameter model) {
         model = ObjectUtil.defaultIfNull(model, new SaLoginParameter());
         StpUtil.login(loginUser.getLoginId(),
-            model.setExtra(TENANT_KEY, loginUser.getTenantId())
-                .setExtra(USER_KEY, loginUser.getUserId())
-                .setExtra(USER_NAME_KEY, loginUser.getUsername())
-                .setExtra(DEPT_KEY, loginUser.getDeptId())
-                .setExtra(DEPT_NAME_KEY, loginUser.getDeptName())
-                .setExtra(DEPT_CATEGORY_KEY, loginUser.getDeptCategory())
-        );
+                model.setExtra(TENANT_KEY, loginUser.getTenantId())
+                        .setExtra(USER_KEY, loginUser.getUserId())
+                        .setExtra(USER_NAME_KEY, loginUser.getUsername())
+                        .setExtra(DEPT_KEY, loginUser.getDeptId())
+                        .setExtra(DEPT_NAME_KEY, loginUser.getDeptName())
+                        .setExtra(DEPT_CATEGORY_KEY, loginUser.getDeptCategory())
+                        .setExtra(NICK_NAME_KEY, loginUser.getNickname()));
         StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
     }
 
@@ -105,6 +105,13 @@ public class LoginHelper {
         return Convert.toStr(getExtra(USER_NAME_KEY));
     }
 
+    /**
+     * 获取用户姓名
+     */
+    public static String getNickname() {
+        return Convert.toStr(getExtra(NICK_NAME_KEY));
+    }
+
     /**
      * 获取租户ID
      */

+ 54 - 0
需求文件夹/后勤报告厅预约需求/simple_hall_reservation_schema.sql

@@ -0,0 +1,54 @@
+-- =============================================
+-- 简化版报告厅预约系统数据库表设计
+-- =============================================
+-- =============================================
+-- 简化版报告厅预约系统数据库表设计
+-- =============================================
+
+-- 1. 报告厅信息表
+DROP TABLE IF EXISTS `hq_hall_info`;
+CREATE TABLE `hq_hall_info` (
+  `id` bigint(20) NOT NULL  COMMENT '主键ID',
+  `tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
+  `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+  `hall_name` varchar(100) NOT NULL COMMENT '报告厅名称',
+  `hall_image` text DEFAULT NULL COMMENT '报告厅图片url',
+  `hall_status` char(1) NOT NULL DEFAULT '1' COMMENT '报告厅状态:0-不可用,1-正常',
+  `hall_description` text COMMENT '报告厅描述',
+  PRIMARY KEY (`id`),
+  KEY `idx_tenant_id` (`tenant_id`),
+  KEY `idx_hall_status` (`hall_status`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='报告厅信息表';
+
+-- 2. 报告厅预约表
+DROP TABLE IF EXISTS `hq_hall_reservation`;
+CREATE TABLE `hq_hall_reservation` (
+  `id` bigint(20) NOT NULL  COMMENT '主键ID',
+  `tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
+  `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+  `hall_id` bigint(20) NOT NULL COMMENT '报告厅ID',
+	`hall_name` varchar(100) NOT NULL COMMENT '报告厅名称',
+  `start_time` datetime NOT NULL COMMENT '开始时间',
+  `end_time` datetime NOT NULL COMMENT '结束时间',
+  `reservation_purpose` varchar(200) NOT NULL COMMENT '预约用途',
+	`applicant_id` bigint(20) NOT NULL COMMENT '申请人id',
+  `applicant_name` varchar(50) NOT NULL COMMENT '申请人姓名',
+  `applicant_phone` varchar(20) DEFAULT NULL COMMENT '申请人电话',
+  `status` char(1) NOT NULL DEFAULT '0' COMMENT '预约状态:0-待审核,1-预约成功,2-预约失败',
+  `audit_by` bigint(20) DEFAULT NULL COMMENT '审核人id',
+	`audit_name` varchar(50) DEFAULT NULL COMMENT '审核人姓名',
+  `audit_time` datetime DEFAULT NULL COMMENT '审核时间',
+  `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_tenant_id` (`tenant_id`),
+  KEY `idx_hall_id` (`hall_id`),
+  KEY `idx_status` (`status`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='报告厅预约表';

+ 93 - 0
需求文件夹/后勤报告厅预约需求/简化版报告厅预约系统设计说明.md

@@ -0,0 +1,93 @@
+# 简化版报告厅预约系统数据模型设计
+
+## 设计目标
+
+根据您的需求,设计一个简单实用的报告厅预约系统,包含报告厅管理、预约申请和审核功能。
+
+## 数据表设计
+
+### 1. 报告厅信息表 (`hall_info`)
+
+**主要功能**: 管理报告厅基本信息
+
+**字段说明**:
+
+-   **标准字段**: 按要求包含 `id`、`tenant_id`、`create_dept`、`create_by`、`create_time`、`update_by`、`update_time`
+-   **业务字段**:
+    -   `hall_name`: 报告厅名称
+    -   `hall_image`: 报告厅图片 URL
+    -   `hall_status`: 报告厅状态(0-不可用,1-可用)
+    -   `hall_description`: 报告厅描述
+
+### 2. 报告厅预约表 (`hall_reservation`)
+
+**主要功能**: 管理预约申请和审核流程
+
+**字段说明**:
+
+-   **标准字段**: 按要求包含 `id`、`tenant_id`、`create_dept`、`create_by`、`create_time`、`update_by`、`update_time`
+-   **预约信息**:
+    -   `hall_id`: 关联报告厅 ID
+    -   `reservation_date`: 预约日期
+    -   `start_time`、`end_time`: 预约时间段
+    -   `reservation_purpose`: 预约用途
+    -   `applicant_name`、`applicant_phone`: 申请人信息
+-   **审核信息**:
+    -   `status`: 预约状态(0-待审核,1-预约成功,2-预约失败)
+    -   `audit_by`: 审核人
+    -   `audit_time`: 审核时间
+    -   `audit_remark`: 审核备注
+
+## 核心功能流程
+
+### 1. 报告厅管理
+
+-   添加/编辑报告厅信息(名称、图片、描述)
+-   设置报告厅状态(可用/不可用)
+-   查看报告厅列表
+
+### 2. 预约申请
+
+-   用户选择可用的报告厅
+-   填写预约信息(日期、时间、用途、联系方式)
+-   提交后状态为"待审核"
+
+### 3. 预约审核
+
+-   管理员查看待审核的预约申请
+-   点击通过:状态改为"预约成功"
+-   点击驳回:状态改为"预约失败",可填写审核备注
+
+## 设计特点
+
+### 简化原则
+
+-   只包含核心必需字段,避免复杂功能
+-   一个预约对应一次审核,不支持多级审核
+-   状态简单明确,便于业务理解
+
+### 扩展性考虑
+
+-   预留了租户字段,支持多租户
+-   审核备注字段支持记录审核原因
+-   外键约束保证数据完整性
+
+### 数据完整性
+
+-   主键自增,保证唯一性
+-   外键约束确保预约表与报告厅表的关联
+-   必填字段设置 NOT NULL 约束
+-   合理的索引设计提高查询效率
+
+## 示例数据
+
+文件中包含了示例数据,展示了:
+
+-   3 个不同状态的报告厅
+-   3 个不同审核状态的预约记录
+
+## 使用说明
+
+1. 执行 `simple_hall_reservation_schema.sql` 创建数据表
+2. 示例数据会自动插入,便于测试
+3. 可根据实际需求调整字段长度和约束