Browse Source

提交代码文档管理

cxd 8 months ago
parent
commit
5d239a7223

+ 58 - 4
gqy-admin/src/main/java/com/gqy/web/controller/document/DcDocumentController.java

@@ -7,6 +7,7 @@ import com.gqy.common.core.domain.entity.SysUser;
 import com.gqy.common.core.domain.model.LoginUser;
 import com.gqy.common.core.text.Convert;
 import com.gqy.common.enums.BusinessType;
+import com.gqy.common.utils.SecurityUtils;
 import com.gqy.document.domain.vo.PageResult;
 import com.gqy.document.domain.Document;
 import com.gqy.document.service.IDocumentService;
@@ -14,15 +15,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.gqy.common.annotation.Log;
 import com.gqy.common.core.controller.BaseController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -105,5 +105,59 @@ public class DcDocumentController extends BaseController
         }
     }
 
+    @PostMapping("/searchlistDoc")
+    public @ResponseBody AjaxResultCQY searchlistDoc(@RequestBody Map maps){
+
+        try {
+            // 获取请求参数
+            Integer page = (Integer) maps.get("page");
+            Integer pageSize =(Integer) maps.get("pageSize");
+            String title =(String) maps.get("title");
+            String category_id = (String) maps.get("category_id");
+
+            // 构建查询对象
+            Document document = new Document();
+            document.setTitle(title);
+            if (category_id != null && !"".equals(category_id)) {
+                document.setCategory_id(Long.valueOf(category_id));
+            }
+            // 获取当前登录用户信息
+            Long loginUserId = SecurityUtils.getUserId();
+            // 判断是否为管理员
+            boolean isAdmin = SecurityUtils.isAdmin(loginUserId);
+
+            // 设置权限过滤
+            if (isAdmin) {
+                document.getParams().put("is_admin", true);
+            } else {
+                document.getParams().put("is_admin", false);
+                document.getParams().put("login_user_id", loginUserId);
+            }
+            PageResult pageResult = documentService.searchlistDoc(page, pageSize, document);
+
+            // 6. 返回成功结果
+            return AjaxResultCQY.success("查询成功", pageResult);
+        }catch(Exception e){
+            log.error("查询文档列表失败", e);
+            return AjaxResultCQY.success("查询成功", new PageResult());
+        }
+    }
+
+
+    /**
+     * 获取文档详细信息
+     */
+    @PostMapping("/info")
+    public @ResponseBody  AjaxResultCQY info(@RequestBody  Map map) {
+        Integer id = (Integer) map.get("id");
+        if (id == null || "".equals(id)) {
+            return AjaxResultCQY.error("文档ID不能为空");
+        }
+        Document document = documentService.info(Long.valueOf(id));
+        if (document == null) {
+            return AjaxResultCQY.error("文档不存在或无权限访问");
+        }
+        return AjaxResultCQY.success(document);
+    }
 
 }

+ 19 - 0
gqy-admin/src/main/java/com/gqy/web/controller/document/TemplateCategoryController.java

@@ -15,6 +15,9 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
+/**
+ * 文档目录代码
+ */
 @RestController
 @RequestMapping("/template/category")
 public class TemplateCategoryController {
@@ -22,6 +25,22 @@ public class TemplateCategoryController {
     @Autowired
     private ITemplateCategoryService templateCategoryService;
 
+    /**
+     * 模板树查询
+     * @return
+     */
+    @PostMapping("/treeCategory")
+    public AjaxResultCQY treeCategory(){
+        return AjaxResultCQY.success("查询成功", new PageResult());
+    }
+
+
+
+    /**
+     *
+     * @param request
+     * @return
+     */
     @PostMapping("/search")
     public AjaxResultCQY search(HttpServletRequest request) {
         // 获取表单参数

+ 1 - 1
gqy-admin/src/main/java/com/gqy/web/core/config/SwaggerConfig.java

@@ -58,7 +58,7 @@ public class SwaggerConfig
                 // 扫描所有有注解的api,用这种方式更灵活
                 .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                 // 扫描指定包中的swagger注解
-                // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
+                // .apis(RequestHandlerSelectors.basePackage("com.gqy.project.tool.swagger"))
                 // 扫描所有 .apis(RequestHandlerSelectors.any())
                 .paths(PathSelectors.any())
                 .build()

+ 3 - 3
gqy-common/src/main/java/com/gqy/common/constant/Constants.java

@@ -158,16 +158,16 @@ public class Constants
     /**
      * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全)
      */
-    public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.ruoyi" };
+    public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.gqy" };
 
     /**
      * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
      */
-    public static final String[] JOB_WHITELIST_STR = { "com.ruoyi.quartz.task" };
+    public static final String[] JOB_WHITELIST_STR = { "com.gqy.quartz.task" };
 
     /**
      * 定时任务违规的字符
      */
     public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
-            "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" };
+            "org.springframework", "org.apache", "com.gqy.common.utils.file", "com.gqy.common.config", "com.gqy.generator" };
 }

+ 1 - 1
gqy-framework/src/main/java/com/gqy/framework/config/CaptchaConfig.java

@@ -63,7 +63,7 @@ public class CaptchaConfig
         // KAPTCHA_SESSION_KEY
         properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath");
         // 验证码文本生成器
-        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ruoyi.framework.config.KaptchaTextCreator");
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.gqy.framework.config.KaptchaTextCreator");
         // 验证码文本字符间距 默认为2
         properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3");
         // 验证码文本字符长度 默认为5

+ 1 - 1
gqy-generator/src/main/resources/generator.yml

@@ -3,7 +3,7 @@ gen:
   # 作者
   author: ruoyi
   # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
-  packageName: com.ruoyi.system
+  packageName: com.gqy.system
   # 自动去除表前缀,默认是false
   autoRemovePre: false
   # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)

+ 1 - 1
gqy-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.generator.mapper.GenTableColumnMapper">
+<mapper namespace="com.gqy.generator.mapper.GenTableColumnMapper">
 
     <resultMap type="GenTableColumn" id="GenTableColumnResult">
         <id     property="columnId"       column="column_id"      />

+ 1 - 1
gqy-generator/src/main/resources/mapper/generator/GenTableMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.generator.mapper.GenTableMapper">
+<mapper namespace="com.gqy.generator.mapper.GenTableMapper">
 
 	<resultMap type="GenTable" id="GenTableResult">
 	    <id     property="tableId"        column="table_id"          />

+ 1 - 1
gqy-quartz/src/main/java/com/gqy/quartz/config/ScheduleConfig.java

@@ -1,4 +1,4 @@
-//package com.ruoyi.quartz.config;
+//package com.gqy.quartz.config;
 //
 //import org.springframework.context.annotation.Bean;
 //import org.springframework.context.annotation.Configuration;

+ 23 - 0
gqy-system/src/main/java/com/gqy/document/domain/Document.java

@@ -67,6 +67,14 @@ public class Document extends BaseEntity
     /** 当前用户ID(用于权限控制) */
     private Long current_user_id;
 
+    /** 分类名称(非数据库字段) */
+    private String category_name;
+
+    /** 用户名称(非数据库字段) */
+    private String user_name;
+
+
+
     public Long getCurrent_user_id() {
         return current_user_id;
     }
@@ -164,4 +172,19 @@ public class Document extends BaseEntity
         this.update_by = update_by;
     }
 
+    public String getCategory_name() {
+        return category_name;
+    }
+
+    public void setCategory_name(String category_name) {
+        this.category_name = category_name;
+    }
+
+    public String getUser_name() {
+        return user_name;
+    }
+
+    public void setUser_name(String user_name) {
+        this.user_name = user_name;
+    }
 }

+ 14 - 0
gqy-system/src/main/java/com/gqy/document/mapper/DocumentMapper.java

@@ -30,5 +30,19 @@ public interface DocumentMapper
      */
     List<Map<String, Object>> pageDocument(Document document);
 
+    /**
+     * 查询文档列表
+     *
+     * @param document 文档信息
+     * @return 文档集合
+     */
+    public List<Document> selectDocumentList(Document document);
 
+    /**
+     * 查询文档详情
+     *
+     * @param id 文档ID
+     * @return 文档信息
+     */
+    public Document info(Long id);
 }

+ 19 - 3
gqy-system/src/main/java/com/gqy/document/service/IDocumentService.java

@@ -9,12 +9,12 @@ import com.gqy.document.domain.vo.PageResult;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
- * 【请填写功能名称】Service接口
- * 
+ * 文档管理 数据层
+ *
  * @author raycos
- * @date 2024-10-30
  */
 public interface IDocumentService
 {
@@ -31,4 +31,20 @@ public interface IDocumentService
     PageResult pageDocument(Integer page, Integer pageSize, Document document);
 
 
+    /**
+     * 查询文档列表
+     *
+     * @param document 文档信息
+     * @return 文档集合
+     */
+    PageResult searchlistDoc(Integer page, Integer pageSize,Document document);
+
+    /**
+     * 查询文档详情
+     *
+     * @param id 文档ID
+     * @return 文档信息
+     */
+    public Document info(Long id);
+
 }

+ 54 - 0
gqy-system/src/main/java/com/gqy/document/service/impl/DcDocumentServiceImpl.java

@@ -161,5 +161,59 @@ public class DcDocumentServiceImpl implements IDocumentService
 
     }
 
+    /**
+     * 查询文档列表
+     * @param page
+     * @param pageSize
+     * @param document
+     * @return
+     */
+    public PageResult searchlistDoc(Integer page, Integer pageSize,Document document) {
+
+        try {
+            // 1. 设置分页参数
+            PageHelper.startPage(page, pageSize);
+            // 2. 执行查询
+            List<Document> list = documentMapper.selectDocumentList(document);
+            // 3. 获取分页信息
+            PageInfo<Document> pageInfo = new PageInfo<>(list);
+            // 4. 封装并返回结果
+            return new PageResult(
+                    pageInfo.getPageNum(),
+                    pageInfo.getPageSize(),
+                    pageInfo.getPages(),
+                    pageInfo.getTotal(),
+                    pageInfo.getList()
+            );
+
+        } catch (Exception e) {
+            log.error("查询文档列表失败", e);
+            return new PageResult(page, pageSize);
+        }
+    }
+
+
+    /**
+     * 查询文档详情
+     *
+     * @param id 文档ID
+     * @return 文档信息
+     */
+    public Document info(Long id) {
+        Document document = documentMapper.info(id);
+        if (document != null) {
+            Long loginUserId = SecurityUtils.getUserId();
+            boolean isAdmin = SecurityUtils.isAdmin(loginUserId);
+
+            // 非管理员只能查看自己的非模板文档
+            if (!isAdmin &&
+                    (document.getIs_template() == 1 ||
+                            !document.getUser_id().equals(loginUserId))) {
+                return null;
+            }
+        }
+        return document;
+    }
+
 
 }

+ 71 - 0
gqy-system/src/main/resources/mapper/document/DcDocumentMapper.xml

@@ -52,6 +52,43 @@
     </select>
 
 
+
+
+    <sql id="selectDocumentVo">
+        SELECT d.id, d.title, d.data, d.user_id, d.create_time, d.update_time,
+               d.status, d.category_id, d.is_template,
+               c.name as type_name, u.user_name
+        FROM dc_document d
+                 LEFT JOIN dc_document_category c ON d.category_id = c.id
+                 LEFT JOIN sys_user u ON d.user_id = u.user_id
+    </sql>
+
+    <select id="selectDocumentList" parameterType="Document" resultMap="DocumentResult">
+        <include refid="selectDocumentVo"/>
+        <where>
+            AND d.status = 5
+            <if test="title != null and title != ''">
+                AND d.title like concat('%', #{title}, '%')
+            </if>
+            <if test="category_id != null">
+                AND d.category_id = #{categoryId}
+            </if>
+            <if test="user_id != null">
+                AND d.user_id = #{userId}
+            </if>
+            <if test="params.isAdmin != null and params.isAdmin == true">
+                AND d.is_template = 0
+            </if>
+            <if test="params.isAdmin != null and params.isAdmin == false">
+                AND d.is_template = 0 AND d.user_id = #{params.loginUserId}
+            </if>
+        </where>
+        ORDER BY d.id DESC
+    </select>
+
+
+
+
     <!-- 分页查询文档列表 -->
     <select id="pageDocument" resultType="map">
         SELECT
@@ -94,4 +131,38 @@
         ORDER BY d.create_time DESC
     </select>
 
+    <!-- ================  info  -->
+    <resultMap type="Document" id="DocumentResultInfo">
+        <id     property="id"           column="id"           />
+        <result property="title"        column="title"        />
+        <result property="data"         column="data"         />
+        <result property="user_id"      column="user_id"      />
+        <result property="category_id"  column="category_id"  />
+        <result property="create_time"  column="create_time"  />
+        <result property="update_time"  column="update_time"  />
+        <result property="status"       column="status"       />
+        <result property="is_template"  column="is_template"  />
+        <!-- 非数据库字段 -->
+        <result property="category_name" column="category_name"/>
+        <result property="user_name"    column="user_name"    />
+    </resultMap>
+
+    <sql id="selectDocumentVoInfo">
+        SELECT d.id, d.title, d.data, d.user_id, d.category_id,
+               d.create_time, d.update_time, d.status, d.is_template,
+               c.name as category_name,
+               u.user_name as user_name
+        FROM dc_document d
+                 LEFT JOIN dc_document_category c ON d.category_id = c.id
+                 LEFT JOIN sys_user u ON d.user_id = u.user_id
+    </sql>
+    <select id="info" parameterType="Long" resultMap="DocumentResult">
+        <include refid="selectDocumentVoInfo"/>
+        <where>
+            AND d.id = #{id}
+            AND d.status != 4
+        </where>
+    </select>
+    <!-- ================  info  -->
+
 </mapper>

+ 14 - 0
创建表语句.txt

@@ -158,3 +158,17 @@ CREATE TABLE dc_template_category (
   PRIMARY KEY (id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模板分类';
 
+
+-- 模板分类用户关联表
+CREATE TABLE dc_template_category_user (
+    id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '关联ID',
+    rola_id bigint(20) DEFAULT '0' COMMENT '角色ID',
+    category_id bigint(20) NOT NULL COMMENT '分类ID',
+    action varchar(255) DEFAULT '0' COMMENT '权限类型',
+    value varchar(255) DEFAULT '0' COMMENT '权限code',
+    type varchar(255) DEFAULT '0' COMMENT '归属分类',
+    name varchar(255) DEFAULT '0' COMMENT '权限名称',
+    label varchar(255) DEFAULT '0' COMMENT '权限label',
+    is_main varchar(255) DEFAULT '0' COMMENT '是否主要',
+    PRIMARY KEY (id)
+) ENGINE=InnoDB AUTO_INCREMENT=100 COMMENT='模板分类用户关联';