From 8126377930f7d1a0ae2b335088cd11f1a70e4aaa Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 26 Aug 2022 14:16:23 +0800
Subject: [PATCH] fix

---
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java |  106 +++++++++++++++++++++++++++++++++++------------------
 1 files changed, 70 insertions(+), 36 deletions(-)

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 5c20554..b0022d6 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
@@ -15,17 +15,23 @@
 import com.xcong.farmer.cms.modules.system.dto.AdminSaveTemplateInfoDto;
 import com.xcong.farmer.cms.modules.system.dto.TemplateListDto;
 import com.xcong.farmer.cms.modules.system.entity.CmsTemplateEntity;
+import com.xcong.farmer.cms.modules.system.entity.CompanyEntity;
 import com.xcong.farmer.cms.modules.system.mapper.CmsTemplateMapper;
+import com.xcong.farmer.cms.modules.system.mapper.CompanyMapper;
 import com.xcong.farmer.cms.modules.system.service.ICmsTemplateService;
 import com.xcong.farmer.cms.modules.system.util.LoginUserUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
@@ -37,11 +43,16 @@
  * @author wzy
  * @date 2022-07-04
  **/
+@Slf4j
 @Service
 public class CmsTemplateServiceImpl extends ServiceImpl<CmsTemplateMapper, CmsTemplateEntity> implements ICmsTemplateService {
 
     @Autowired
     private CmsProperties properties;
+
+    @Autowired
+    private CompanyMapper companyMapper;
+
 
     private List<String> fileSuffix = Arrays.asList(".zip", ".html");
 
@@ -50,6 +61,11 @@
         String templatePath = properties.getTemplatePath();
         String staticPath = properties.getStaticPath();
         Long companyId = LoginUserUtil.getCompanyId();
+        CompanyEntity company = companyMapper.selectById(companyId);
+
+        String companyCode = company.getCode();
+        templatePath = FileUtils.path(templatePath, companyCode);
+        staticPath = FileUtils.path(staticPath, companyCode);
 
         String filename = upload.getOriginalFilename();
         String suffix = filename.substring(filename.lastIndexOf("."));
@@ -88,46 +104,59 @@
                         continue;
                     }
 
-                    Document parse = Jsoup.parse(templateFile, null);
-                    String attr = parse.head().attr("name");
-                    CmsTemplateEntity cmsTemplate = new CmsTemplateEntity();
-                    cmsTemplate.setCompanyId(companyId);
-                    if (name.endsWith(".list.html")) {
-                        cmsTemplate.setType(2);
-                    } else if (name.endsWith(".article.html")) {
-                        cmsTemplate.setType(3);
-                    } else {
-                        cmsTemplate.setType(1);
-                    }
-                    cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : templateFile.getName());
-                    cmsTemplate.setPath(templateFile.getName());
-
-                    this.baseMapper.insert(cmsTemplate);
+                    insertTemplate(templateFile, companyId, companyCode);
                 }
-
             }
 
             if (".html".equals(suffix)) {
                 FileUtil.touch(file);
 
-                Document parse = Jsoup.parse(file, null);
-                String attr = parse.head().attr("name");
-                CmsTemplateEntity cmsTemplate = new CmsTemplateEntity();
-                cmsTemplate.setCompanyId(companyId);
-                if (file.getName().endsWith(".list.html")) {
-                    cmsTemplate.setType(2);
-                } else if (file.getName().endsWith(".article.html")) {
-                    cmsTemplate.setType(3);
-                } else {
-                    cmsTemplate.setType(1);
-                }
-                cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : file.getName());
-                cmsTemplate.setPath(file.getName());
-
-                this.baseMapper.insert(cmsTemplate);
+                insertTemplate(file, companyId, companyCode);
             }
         } catch (IOException e) {
             e.printStackTrace();
+            throw new GlobalException("模板上传失败");
+        }
+    }
+
+    private void insertTemplate(File file, Long companyId, String companyCode) throws IOException {
+        Document parse = Jsoup.parse(file, null);
+        String attr = parse.head().attr("name");
+
+        staticPathParser(parse, "img", "src", companyCode);
+        staticPathParser(parse, "link", "href", companyCode);
+        staticPathParser(parse, "script", "src", companyCode);
+
+        FileOutputStream outputStream = new FileOutputStream(file);
+        outputStream.write(parse.html().getBytes());
+        outputStream.close();
+
+        CmsTemplateEntity cmsTemplate = new CmsTemplateEntity();
+        cmsTemplate.setCompanyId(companyId);
+        if (file.getName().endsWith(".list.html")) {
+            cmsTemplate.setType(2);
+        } else if (file.getName().endsWith(".article.html")) {
+            cmsTemplate.setType(3);
+        } else {
+            cmsTemplate.setType(1);
+        }
+        cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : file.getName());
+        cmsTemplate.setPath(file.getName());
+
+        this.baseMapper.insert(cmsTemplate);
+    }
+
+    private void staticPathParser(Document document, String tagName, String attrKey, String companyCode) {
+        Elements elements = document.getElementsByTag(tagName);
+        if (elements.isEmpty()) {
+            return;
+        }
+
+        for (Element element : elements) {
+            String attr = element.attr(attrKey);
+            if (StrUtil.isNotBlank(attr) && !attr.contains("http://") && !attr.contains("https://")) {
+                element.attr(attrKey, cmsProperties.getStaticUrl() + companyCode + "/" + attr);
+            }
         }
     }
 
@@ -151,7 +180,7 @@
     public Result dropdownList() {
         Long companyId = LoginUserUtil.getCompanyId();
         QueryWrapper<CmsTemplateEntity> objectQueryWrapper = new QueryWrapper<>();
-        objectQueryWrapper.eq("company_id",companyId);
+        objectQueryWrapper.eq("company_id", companyId);
         List<CmsTemplateEntity> cmsTemplateEntities = this.baseMapper.selectList(objectQueryWrapper);
         return Result.ok(cmsTemplateEntities);
     }
@@ -162,8 +191,10 @@
     @Override
     public Result viewTemplateInfo(Long id) {
         Result result = new Result();
+
+        CompanyEntity companyEntity = companyMapper.selectById(LoginUserUtil.getCompanyId());
         CmsTemplateEntity cmsTemplateEntity = this.baseMapper.selectById(id);
-        String templatePath = cmsProperties.getTemplatePath();
+        String templatePath = FileUtils.path(cmsProperties.getTemplatePath(), companyEntity.getCode());
         String pathName = FileUtils.path(templatePath, cmsTemplateEntity.getPath());
 
         byte[] bytes = new byte[0];
@@ -184,14 +215,17 @@
     public Result saveTemplateInfo(AdminSaveTemplateInfoDto adminSaveTemplateInfoDto) {
         Long companyId = LoginUserUtil.getCompanyId();
         Long id = adminSaveTemplateInfoDto.getId();
-        CmsTemplateEntity cmsTemplateEntity = this.baseMapper.selectByIdAndCompanyId(id,companyId);
+
+        CompanyEntity company = this.companyMapper.selectById(companyId);
+        CmsTemplateEntity cmsTemplateEntity = this.baseMapper.selectByIdAndCompanyId(id, companyId);
         String name = cmsTemplateEntity.getName();
         Integer type = cmsTemplateEntity.getType();
-        String templatePath = cmsProperties.getTemplatePath();
+        String templatePath = FileUtils.path(cmsProperties.getTemplatePath(), company.getCode());
         String path = cmsTemplateEntity.getPath();
 
-        this.baseMapper.delete(id,companyId);
+        this.baseMapper.delete(id, companyId);
         String pathNew = FileUtils.path(templatePath, path);
+        log.info("模板写入地址:{}", pathNew);
         File file = new File(pathNew);
         FileUtil.touch(file);
 

--
Gitblit v1.9.1