From 2736d16a8b1804f7291a56a147f76ef3584d6619 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 04 Jul 2022 19:35:31 +0800
Subject: [PATCH] fix 上传模板和查看栏目修改

---
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java |   57 +++++++++++++++++--
 src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java                             |   79 +++++++++++++++++++++++---
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java      |   16 +++++
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java             |    3 +
 4 files changed, 139 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java b/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java
index a6d4283..32d768d 100644
--- a/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java
+++ b/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java
@@ -1,10 +1,10 @@
 package com.xcong.farmer.cms.common.utils;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.util.Enumeration;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
 
 /**
  * @author wzy
@@ -30,16 +30,75 @@
         return dir + fileName;
     }
 
-    public static void zipUpload(File file, String templateDir, String staticDir) throws IOException {
-        ZipFile zipFile = new ZipFile(file);
+    public static void zipUpload(String zipPath, String templateDir) throws IOException {
+        FileInputStream fis = new FileInputStream(zipPath);
+        ZipInputStream zipIs = new ZipInputStream(fis);
 
-        Enumeration<? extends ZipEntry> entries = zipFile.entries();
-        if (entries.hasMoreElements()) {
-            ZipEntry zipEntry = entries.nextElement();
-            if (zipEntry.isDirectory()) {
-//                zipEntry.
+        ZipEntry ze = null;
+        try {
+            while ((ze = zipIs.getNextEntry()) != null) {
+                File zfile = new File(path(templateDir, ze.getName()));
+                if (ze.isDirectory()) {
+                    if (!zfile.exists()) {
+                        zfile.mkdirs();
+                    }
+                    zipIs.closeEntry();
+                } else {
+                    byte[] data = new byte[1024];
+                    FileOutputStream fos = new FileOutputStream(zfile);
+                    int i = 0;
+
+                    while ((i = zipIs.read(data)) != -1) {
+                        fos.write(data, 0, i);
+                    }
+                    zipIs.closeEntry();
+                    fos.close();
+                }
             }
-            System.out.println(zipEntry.getName());
+
+            fis.close();
+            zipIs.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public static void upload(File file, String dir) {
+        if (file.isDirectory()) {
+            File[] files = file.listFiles();
+            if (files == null) {
+                return;
+            }
+
+            for (File dirFile : files) {
+                upload(dirFile, path(dir, dirFile.getName()));
+            }
+        } else {
+            outputFile(file, dir);
+        }
+    }
+
+    public static void outputFile(File file, String outputDir) {
+        try {
+            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
+
+            int count;
+            int buffer = 1024;
+            byte[] dataByte = new byte[buffer];
+
+            FileOutputStream out = new FileOutputStream(path(outputDir, file.getName()));
+
+            BufferedOutputStream bos = new BufferedOutputStream(out, buffer);
+            while((count = bis.read(dataByte, 0, buffer)) != -1) {
+                bos.write(dataByte, 0 ,count);
+            }
+
+            bos.flush();
+            bos.close();
+            bis.close();
+        } catch (IOException e) {
+            e.printStackTrace();
         }
     }
 }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java
index f1e072f..1110bfb 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java
@@ -1,5 +1,7 @@
 package com.xcong.farmer.cms.modules.system.service.Impl;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ZipUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -13,6 +15,8 @@
 import com.xcong.farmer.cms.modules.system.mapper.CmsTemplateMapper;
 import com.xcong.farmer.cms.modules.system.service.ICmsTemplateService;
 import com.xcong.farmer.cms.modules.system.util.LoginUserUtil;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -48,17 +52,58 @@
         }
 
         try {
+            String path = FileUtils.path(templatePath, filename);
+            File file = new File(path);
+            upload.transferTo(file);
+
             if (".zip".equals(suffix)) {
-                String path = FileUtils.path(templatePath, filename);
-                System.out.println(path);
-                File file = new File(path);
-                upload.transferTo(file);
-                FileUtils.zipUpload(file, templatePath, staticPath);
+                ZipUtil.unzip(file, new File(templatePath));
+                FileUtil.del(file);
+
+                File template = new File(templatePath);
+                File[] files = template.listFiles();
+                if (files == null) {
+                    return;
+                }
+
+                for (File templateFile : files) {
+                    if (!templateFile.isFile()) {
+                        continue;
+                    }
+
+                    if (!"html".equals(FileUtil.extName(templateFile))) {
+                        continue;
+                    }
+
+                    String name = templateFile.getName();
+                    if (!name.endsWith(".list.html") && !name.endsWith(".article.html") && !name.endsWith(".index.html")) {
+                        continue;
+                    }
+
+                    Document parse = Jsoup.parse(templateFile, null);
+                    String attr = parse.head().attr("name");
+                    System.out.println(attr);
+                    CmsTemplateEntity cmsTemplate = new CmsTemplateEntity();
+                    cmsTemplate.setCompanyId(10L);
+                    if (name.endsWith(".list.html")) {
+                        cmsTemplate.setType(2);
+                    } else if (name.endsWith(".article.html")) {
+                        cmsTemplate.setType(3);
+                    } else {
+                        cmsTemplate.setType(1);
+                    }
+                    cmsTemplate.setName(templateFile.getName());
+                    cmsTemplate.setPath(templateFile.getName());
+                }
+
+            }
+
+            if (".html".equals(suffix)) {
+                FileUtil.touch(file);
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
-        System.out.println(suffix);
     }
 
     @Override
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java
index 838c215..c18c3e7 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java
@@ -11,15 +11,18 @@
 import com.xcong.farmer.cms.modules.system.dto.AdminColumnDto;
 import com.xcong.farmer.cms.modules.system.dto.AdminDeleteDto;
 import com.xcong.farmer.cms.modules.system.dto.AdminUpdateColumnDto;
+import com.xcong.farmer.cms.modules.system.entity.ArticleEntity;
 import com.xcong.farmer.cms.modules.system.entity.ColumnEntity;
 import com.xcong.farmer.cms.modules.system.entity.NavigationBarEntity;
 import com.xcong.farmer.cms.modules.system.entity.UserEntity;
+import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper;
 import com.xcong.farmer.cms.modules.system.mapper.ColumnMapper;
 import com.xcong.farmer.cms.modules.system.service.IColumnService;
 import com.xcong.farmer.cms.modules.system.util.LoginUserUtil;
 import com.xcong.farmer.cms.modules.system.vo.AdminColumnVo;
 import com.xcong.farmer.cms.modules.system.vo.AdminSeeColumnInfoVo;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import cn.hutool.core.util.StrUtil;
@@ -32,6 +35,10 @@
 @Service
 @Slf4j
 public class ColumnServiceImpl extends ServiceImpl<ColumnMapper, ColumnEntity> implements IColumnService {
+
+    @Autowired
+    private ArticleMapper articleMapper;
+
     @Override
     public Result getColumnInPage(AdminColumnDto adminColumnDto) {
         UserEntity userlogin = LoginUserUtil.getLoginUser();
@@ -149,6 +156,15 @@
         adminSeeColumnInfoVo.setIsNav(columnEntity.getIsNav());
         adminSeeColumnInfoVo.setType(columnEntity.getType());
         adminSeeColumnInfoVo.setTargetType(columnEntity.getTargetType());
+        if (columnEntity.getType() == 2) {
+            if (columnEntity.getTargetType() == 1) {
+                ArticleEntity articleEntity = articleMapper.selectById(Long.parseLong(columnEntity.getTargetUrl()));
+                adminSeeColumnInfoVo.setTargetName(articleEntity.getTitle());
+            } else if (columnEntity.getTargetType() == 2) {
+                ColumnEntity column = this.baseMapper.selectById(Long.parseLong(columnEntity.getTargetUrl()));
+                adminSeeColumnInfoVo.setTargetName(column.getColumnName());
+            }
+        }
         adminSeeColumnInfoVo.setTargetUrl(columnEntity.getTargetUrl());
         return Result.ok(adminSeeColumnInfoVo);
     }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java
index e136125..ad8660c 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java
@@ -43,6 +43,9 @@
     @ApiModelProperty(value = "目标地址")
     private String targetUrl;
 
+    @ApiModelProperty(value = "目标描述")
+    private String targetName;
+
     @ApiModelProperty(value = "是否为导航 1-是 2-否")
     private Integer isNav;
 

--
Gitblit v1.9.1