Pārlūkot izejas kodu

feat:1、版本汇总-版本列表关联显示各级分类信息2、移动端获取整体数据树状结构数据接口新增

lihao16 2 mēneši atpakaļ
vecāks
revīzija
3bdae0bba0
14 mainītis faili ar 265 papildinājumiem un 15 dzēšanām
  1. 3 1
      smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbVersionPackageController.java
  2. 8 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbVersionTreeController.java
  3. 2 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/bo/SmsbVersionPackageBo.java
  4. 19 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/vo/FrontVersionPackageVO.java
  5. 19 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/vo/FrontVersionTreeNodeVo.java
  6. 2 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/vo/SmsbVersionPackageVo.java
  7. 12 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/mapper/SmsbVersionPackageMapper.java
  8. 22 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/mapper/SmsbVersionTreeMapper.java
  9. 9 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/service/ISmsbVersionPackageService.java
  10. 9 0
      smsb-modules/smsb-source/src/main/java/com/inspur/source/service/ISmsbVersionTreeService.java
  11. 21 1
      smsb-modules/smsb-source/src/main/java/com/inspur/source/service/impl/SmsbVersionPackageServiceImpl.java
  12. 42 3
      smsb-modules/smsb-source/src/main/java/com/inspur/source/service/impl/SmsbVersionTreeServiceImpl.java
  13. 50 0
      smsb-modules/smsb-source/src/main/resources/mapper/SmsbVersionPackageMapper.xml
  14. 47 10
      smsb-plus-ui/src/views/smsb/versionPackage/index.vue

+ 3 - 1
smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbVersionPackageController.java

@@ -17,6 +17,7 @@ import org.dromara.common.log.annotation.Log;
 import org.dromara.common.log.enums.BusinessType;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.common.web.core.BaseController;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -43,7 +44,8 @@ public class SmsbVersionPackageController extends BaseController {
     @SaCheckPermission("source:versionPackage:list")
     @GetMapping("/list")
     public TableDataInfo<SmsbVersionPackageVo> list(SmsbVersionPackageBo bo, PageQuery pageQuery) {
-        return smsbVersionPackageService.queryPageList(bo, pageQuery);
+        // return smsbVersionPackageService.queryPageList(bo, pageQuery);
+        return TenantHelper.ignore(() -> smsbVersionPackageService.queryPageWithTreeName(bo, pageQuery));
     }
 
     /**

+ 8 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbVersionTreeController.java

@@ -1,7 +1,9 @@
 package com.inspur.source.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaIgnore;
 import com.inspur.source.domain.bo.SmsbVersionTreeBo;
+import com.inspur.source.domain.vo.FrontVersionTreeNodeVo;
 import com.inspur.source.domain.vo.SmsbVersionTreeVo;
 import com.inspur.source.service.ISmsbVersionTreeService;
 import jakarta.servlet.http.HttpServletResponse;
@@ -15,6 +17,7 @@ import org.dromara.common.excel.utils.ExcelUtil;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
 import org.dromara.common.log.annotation.Log;
 import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.common.web.core.BaseController;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -45,6 +48,11 @@ public class SmsbVersionTreeController extends BaseController {
         return R.ok(list);
     }
 
+    @GetMapping("/front/tree")
+    public R<List<FrontVersionTreeNodeVo>> frontTreeNode(SmsbVersionTreeBo bo) {
+        return TenantHelper.ignore(() -> smsbVersionTreeService.frontTreeNode(bo));
+    }
+
     /**
      * 导出版本类别列表
      */

+ 2 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/bo/SmsbVersionPackageBo.java

@@ -67,5 +67,7 @@ public class SmsbVersionPackageBo extends BaseEntity {
      */
     private String remark;
 
+    private Long ossId;
+
 
 }

+ 19 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/vo/FrontVersionPackageVO.java

@@ -0,0 +1,19 @@
+package com.inspur.source.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 前端版本包VO
+ * @author lihao16
+ */
+@Data
+public class FrontVersionPackageVO {
+    private Long id;
+    private String versionName;
+    private String versionCode;
+    private String remark;
+    private String fileUrl;
+    private String fileName;
+    private String md5;
+    private Integer fileSize;
+}

+ 19 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/vo/FrontVersionTreeNodeVo.java

@@ -0,0 +1,19 @@
+package com.inspur.source.domain.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 前端版本树节点
+ * @author lihao16
+ */
+@Data
+public class FrontVersionTreeNodeVo {
+    private Long id;
+    private String name;
+    private Long parentId;
+    private List<FrontVersionTreeNodeVo> children = new ArrayList<>();
+    private List<FrontVersionPackageVO> versions = new ArrayList<>();
+}

+ 2 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/vo/SmsbVersionPackageVo.java

@@ -79,6 +79,8 @@ public class SmsbVersionPackageVo implements Serializable {
     @ExcelProperty(value = "分类Ids")
     private String treeIds;
 
+    private String treeName;
+
     /**
      * 创建时间
      */

+ 12 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/mapper/SmsbVersionPackageMapper.java

@@ -1,7 +1,10 @@
 package com.inspur.source.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.inspur.source.domain.SmsbVersionPackage;
+import com.inspur.source.domain.bo.SmsbVersionPackageBo;
 import com.inspur.source.domain.vo.SmsbVersionPackageVo;
+import org.apache.ibatis.annotations.Param;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
 /**
@@ -12,4 +15,13 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  */
 public interface SmsbVersionPackageMapper extends BaseMapperPlus<SmsbVersionPackage, SmsbVersionPackageVo> {
 
+    /**
+     * 带树形结构名称的分页查询
+     *
+     * @param page
+     * @param bo
+     * @return
+     */
+
+    Page<SmsbVersionPackageVo> selectVoPageWithTreeName(@Param("page") Page<Object> page, @Param("bo") SmsbVersionPackageBo bo);
 }

+ 22 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/mapper/SmsbVersionTreeMapper.java

@@ -2,8 +2,12 @@ package com.inspur.source.mapper;
 
 import com.inspur.source.domain.SmsbVersionTree;
 import com.inspur.source.domain.vo.SmsbVersionTreeVo;
+import org.apache.ibatis.annotations.Select;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 版本类别Mapper接口
  *
@@ -12,4 +16,22 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  */
 public interface SmsbVersionTreeMapper extends BaseMapperPlus<SmsbVersionTree, SmsbVersionTreeVo> {
 
+    @Select("""
+            SELECT
+                t.id       AS tree_id,
+                t.name     AS tree_name,
+                t.parent_id,
+                p.id       AS package_id,
+                p.version_name,
+                p.version_code,
+                p.remark,
+                p.file_url,
+                p.file_name,
+                p.md5,
+                p.file_size
+            FROM smsb_version_tree t
+            LEFT JOIN smsb_version_package p ON p.tree_id = t.id
+            ORDER BY t.parent_id, t.sort_num, t.id, p.create_time DESC
+        """)
+    List<Map<String, Object>> getTreeWithPackages();
 }

+ 9 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/ISmsbVersionPackageService.java

@@ -65,4 +65,13 @@ public interface ISmsbVersionPackageService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 分页查询版本列表列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 树形版本列表列表
+     */
+    TableDataInfo<SmsbVersionPackageVo> queryPageWithTreeName(SmsbVersionPackageBo bo, PageQuery pageQuery);
 }

+ 9 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/ISmsbVersionTreeService.java

@@ -1,7 +1,9 @@
 package com.inspur.source.service;
 
 import com.inspur.source.domain.bo.SmsbVersionTreeBo;
+import com.inspur.source.domain.vo.FrontVersionTreeNodeVo;
 import com.inspur.source.domain.vo.SmsbVersionTreeVo;
+import org.dromara.common.core.domain.R;
 
 import java.util.Collection;
 import java.util.List;
@@ -55,4 +57,11 @@ public interface ISmsbVersionTreeService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 前端接口树结构
+     * @param  bo
+     * @return
+     */
+    R<List<FrontVersionTreeNodeVo>> frontTreeNode(SmsbVersionTreeBo bo);
 }

+ 21 - 1
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/impl/SmsbVersionPackageServiceImpl.java

@@ -13,6 +13,9 @@ import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.system.domain.vo.SysOssVo;
+import org.dromara.system.mapper.SysOssMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Collection;
@@ -31,6 +34,9 @@ public class SmsbVersionPackageServiceImpl implements ISmsbVersionPackageService
 
     private final SmsbVersionPackageMapper baseMapper;
 
+    @Autowired
+    private SysOssMapper sysOssMapper;
+
     /**
      * 查询版本列表
      *
@@ -56,6 +62,12 @@ public class SmsbVersionPackageServiceImpl implements ISmsbVersionPackageService
         return TableDataInfo.build(result);
     }
 
+    @Override
+    public TableDataInfo<SmsbVersionPackageVo> queryPageWithTreeName(SmsbVersionPackageBo bo, PageQuery pageQuery) {
+        Page<SmsbVersionPackageVo> pageResult = baseMapper.selectVoPageWithTreeName(pageQuery.build(), bo);
+        return TableDataInfo.build(pageResult);
+    }
+
     /**
      * 查询符合条件的版本列表列表
      *
@@ -84,7 +96,15 @@ public class SmsbVersionPackageServiceImpl implements ISmsbVersionPackageService
     @Override
     public Boolean insertByBo(SmsbVersionPackageBo bo) {
         SmsbVersionPackage add = MapstructUtils.convert(bo, SmsbVersionPackage.class);
-        validEntityBeforeSave(add);
+        // sys oss
+        SysOssVo sysOssVo = sysOssMapper.selectVoById(bo.getOssId());
+        add.setVersionCode(sysOssVo.getVersionCode());
+        add.setFileSize(sysOssVo.getFileSize().longValue());
+        add.setFileName(sysOssVo.getOriginalName());
+        add.setFileUrl(sysOssVo.getUrl());
+        add.setMd5(sysOssVo.getFileMd5());
+        add.setOssId(bo.getOssId().longValue());
+
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());

+ 42 - 3
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/impl/SmsbVersionTreeServiceImpl.java

@@ -4,17 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.inspur.source.domain.SmsbVersionTree;
 import com.inspur.source.domain.bo.SmsbVersionTreeBo;
+import com.inspur.source.domain.vo.FrontVersionPackageVO;
+import com.inspur.source.domain.vo.FrontVersionTreeNodeVo;
 import com.inspur.source.domain.vo.SmsbVersionTreeVo;
 import com.inspur.source.mapper.SmsbVersionTreeMapper;
 import com.inspur.source.service.ISmsbVersionTreeService;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.springframework.stereotype.Service;
 
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 版本类别Service业务层处理
@@ -40,6 +41,44 @@ public class SmsbVersionTreeServiceImpl implements ISmsbVersionTreeService {
     }
 
 
+    @Override
+    public R<List<FrontVersionTreeNodeVo>> frontTreeNode(SmsbVersionTreeBo bo) {
+        List<Map<String, Object>> rows = baseMapper.getTreeWithPackages();
+        // 1. 分类节点缓存
+        Map<Long, FrontVersionTreeNodeVo> nodeMap = new HashMap<>();
+        for (Map<String, Object> row : rows) {
+            Long treeId = ((Number) row.get("tree_id")).longValue();
+            nodeMap.putIfAbsent(treeId, new FrontVersionTreeNodeVo());
+            FrontVersionTreeNodeVo node = nodeMap.get(treeId);
+            node.setId(treeId);
+            node.setName((String) row.get("tree_name"));
+            node.setParentId(row.get("parent_id") == null ? null : ((Number) row.get("parent_id")).longValue());
+            // 如果有关联的版本,则加入 versions
+            if (row.get("package_id") != null) {
+                FrontVersionPackageVO pkg = new FrontVersionPackageVO();
+                pkg.setId(((Number) row.get("package_id")).longValue());
+                pkg.setVersionName((String) row.get("version_name"));
+                pkg.setVersionCode((String) row.get("version_code"));
+                pkg.setRemark((String) row.get("remark"));
+                pkg.setFileUrl((String) row.get("file_url"));
+                pkg.setFileName((String) row.get("file_name"));
+                pkg.setMd5((String) row.get("md5"));
+                pkg.setFileSize(row.get("file_size") == null ? null : ((Number) row.get("file_size")).intValue());
+                node.getVersions().add(pkg);
+            }
+        }
+        // 2. 构建树
+        List<FrontVersionTreeNodeVo> roots = new ArrayList<>();
+        for (FrontVersionTreeNodeVo node : nodeMap.values()) {
+            if (node.getParentId() == null || !nodeMap.containsKey(node.getParentId())) {
+                roots.add(node);
+            } else {
+                nodeMap.get(node.getParentId()).getChildren().add(node);
+            }
+        }
+        return R.ok(roots);
+    }
+
     /**
      * 查询符合条件的版本类别列表
      *

+ 50 - 0
smsb-modules/smsb-source/src/main/resources/mapper/SmsbVersionPackageMapper.xml

@@ -4,4 +4,54 @@
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.inspur.source.mapper.SmsbVersionPackageMapper">
 
+    <select id="selectVoPageWithTreeName" resultType="com.inspur.source.domain.vo.SmsbVersionPackageVo" parameterType="com.inspur.source.domain.bo.SmsbVersionPackageBo">
+        WITH RECURSIVE category_path AS (
+            SELECT
+                id,
+                NAME,
+                parent_id,
+                id AS leaf_id,
+                1 AS LEVEL
+            FROM smsb_version_tree
+            UNION ALL
+            -- 向上递归
+            SELECT
+                t.id,
+                t.NAME,
+                t.parent_id,
+                cp.leaf_id,
+                cp.LEVEL + 1
+            FROM smsb_version_tree t
+            INNER JOIN category_path cp ON t.id = cp.parent_id
+        )
+        SELECT
+            p.id AS id,
+            p.version_name,
+            p.version_code,
+            p.file_size ,
+            p.file_name,
+            p.file_url,
+            p.md5,
+            p.tree_id,
+            p.tree_ids,
+            p.remark,
+            p.create_time,
+            p.create_by,
+            p.update_time,
+            GROUP_CONCAT(cp.name ORDER BY cp.level DESC SEPARATOR '/') AS tree_name
+        FROM smsb_version_package p
+        JOIN category_path cp
+        ON p.tree_id = cp.leaf_id
+        WHERE  1 = 1
+        <if test="bo.versionName != null">
+            AND p.version_name LIKE CONCAT('%', #{bo.versionName}, '%')
+        </if>
+        <if test="bo.versionCode != null">
+            AND p.version_code LIKE CONCAT('%', #{bo.versionCode}, '%')
+        </if>
+        GROUP BY
+            p.id
+        order by p.id desc
+    </select>
+
 </mapper>

+ 47 - 10
smsb-plus-ui/src/views/smsb/versionPackage/index.vue

@@ -34,16 +34,19 @@
       <div class="table-content">
         <el-table v-loading="loading" :data="versionPackageList" @selection-change="handleSelectionChange">
           <el-table-column label="" align="center" prop="" width="10"/>
-          <el-table-column label="版本名称" align="left" prop="versionName"/>
-          <el-table-column label="版本号" align="left" prop="versionCode"/>
-          <el-table-column label="文件大小" align="center" prop="fileSize"/>
-          <el-table-column label="文件名称" align="center" prop="fileName"/>
-          <el-table-column label="下载路径" align="center" prop="fileUrl"/>
-          <el-table-column label="MD5" align="center" prop="md5"/>
-          <el-table-column label="所属分类" align="center" prop="treeId"/>
-          <el-table-column label="创建时间" align="center" prop="createTime" width="180"/>
-          <el-table-column label="备注" align="center" prop="remark"/>
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <el-table-column label="版本名称" align="left" prop="versionName" width="120" :show-overflow-tooltip="true"/>
+          <el-table-column label="版本号" align="left" prop="versionCode" width="140" :show-overflow-tooltip="true"/>
+          <el-table-column label="文件大小" align="center" prop="fileSize" width="100" :show-overflow-tooltip="true"/>
+          <el-table-column label="文件名称" align="left" prop="fileName" width="200" :show-overflow-tooltip="true"/>
+          <el-table-column label="下载路径" align="left" prop="fileUrl" width="250" :show-overflow-tooltip="true">
+            <template #default="scope">
+              <span class="download-link" @click="handleDownloadClick(scope.row)">{{ scope.row.fileUrl }}</span>
+            </template>
+          </el-table-column>          <el-table-column label="MD5" align="left" prop="md5" width="200" :show-overflow-tooltip="true"/>
+          <el-table-column label="所属分类" align="left" prop="treeName" :show-overflow-tooltip="true"/>
+          <el-table-column label="备注" align="left" prop="remark" :show-overflow-tooltip="true"/>
+          <el-table-column label="创建时间" align="left" prop="createTime" width="160"/>
+          <el-table-column label="操作" align="center" width="100" class-name="small-padding fixed-width">
             <template #default="scope">
               <el-tooltip content="删除" placement="top">
                 <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
@@ -165,6 +168,9 @@ const getList = async () => {
   loading.value = true;
   const res = await listVersionPackage(queryParams.value);
   versionPackageList.value = res.rows;
+  versionPackageList.value.forEach((item) => {
+    item.fileSize = parseFloat(item.fileSize / 1024).toFixed(3) + 'MB';
+  });
   total.value = res.total;
   loading.value = false;
 }
@@ -216,7 +222,27 @@ const handleUpdate = async (row?: VersionPackageVO) => {
   dialog.visible = true;
   dialog.title = "修改";
 }
+/** 处理下载点击事件 */
+const handleDownloadClick = (row: VersionPackageVO) => {
+  if (!row.fileUrl) {
+    proxy?.$modal.msgWarning("下载路径不存在");
+    return;
+  }
 
+  proxy?.$modal.confirm(`确定要下载文件 "${row.fileName || row.fileUrl}" 吗?`).then(() => {
+    // 用户确认下载,执行下载操作
+    const link = document.createElement('a');
+    link.href = row.fileUrl;
+    link.download = row.fileName || '';
+    link.target = '_blank';
+    document.body.appendChild(link);
+    link.click();
+    document.body.removeChild(link);
+  }).catch(() => {
+    // 用户取消下载,不执行任何操作
+    console.log('用户取消下载');
+  });
+};
 /** 提交按钮 */
 const submitForm = () => {
   versionPackageFormRef.value?.validate(async (valid: boolean) => {
@@ -272,3 +298,14 @@ onMounted(() => {
   getTreeselect();
 });
 </script>
+<style scoped>/* 添加下载链接样式 */
+.download-link {
+  color: #409eff;
+  cursor: pointer;
+  text-decoration: underline;
+}
+
+.download-link:hover {
+  color: #66b1ff;
+}
+</style>