Browse Source

客户端资料填报导入导出元素表excel bug

liuyc 2 years ago
parent
commit
e066d1b9bd

+ 11 - 22
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -1,27 +1,20 @@
 package org.springblade.manager.controller;
 
-import com.alibaba.fastjson.JSONObject;
-import com.aspose.cells.Worksheet;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
-import org.apache.commons.codec.Charsets;
 import org.apache.commons.lang.StringUtils;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
-import org.jsoup.select.Selector;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.manager.dto.WbsTreeContractDTO2;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ExcelTab;
@@ -39,14 +32,13 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @RestController
 @AllArgsConstructor
@@ -60,7 +52,6 @@ public class WbsTreeContractController extends BladeController {
     private final IWbsTreeContractService iWbsTreeContractService;
     private final WbsTreeContractServiceImpl wbsTreeContractServiceImpl;
     private final ContractClient contractClient;
-    private final ExcelTabController excelTabController;
 
     @GetMapping("/search-node-tables")
     @ApiOperationSupport(order = 1)
@@ -256,23 +247,21 @@ public class WbsTreeContractController extends BladeController {
         if (tab != null && Objects.nonNull(tab.getExcelId())) {
             ExcelTab excelTab = jdbcTemplate.queryForObject("select file_url,name from m_excel_tab where id = " + tab.getExcelId(), new BeanPropertyRowMapper<>(ExcelTab.class));
             if (excelTab != null) {
-                InputStream ossInputStream = CommonUtil.getOSSInputStream(excelTab.getFileUrl());
-                Workbook workbook = parseExcelFile(ossInputStream);
-                String fileName = new String(excelTab.getName().getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
-                response.setContentType("application/vnd.ms-excel");
-                response.setCharacterEncoding("UTF-8");
-                response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + ".xlsx\"");
-                try (OutputStream toClient = new BufferedOutputStream(response.getOutputStream())) {
-                    workbook.write(toClient);
-                    toClient.flush();
-                } finally {
-                    workbook.close();
+                InputStream inputStream = CommonUtil.getOSSInputStream(excelTab.getFileUrl());
+                try (Workbook workbook = parseExcelFile(inputStream)) {
+                    response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+                    response.setCharacterEncoding("UTF-8");
+                    response.setHeader("Content-disposition", ";filename=" + URLEncoder.encode(excelTab.getName().replace(" ", ""), "UTF-8") + ".xlsx");
+                    ServletOutputStream servletOutputStream = response.getOutputStream();
+                    workbook.write(servletOutputStream);
+                    servletOutputStream.flush();
+                } catch (Exception e) {
+                    e.printStackTrace();
                 }
             }
         }
     }
 
-
     //解析Excel文件并设置单元格格式为文本
     private Workbook parseExcelFile(InputStream inputStream) throws IOException, InvalidFormatException {
         Workbook workbook = WorkbookFactory.create(inputStream);

+ 35 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -1590,24 +1590,43 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             if (!insertDataPrivateList.isEmpty()) {
                 Map<Long, List<WbsTreePrivate>> tabParentNodesGroup = insertDataPrivateList.stream().collect(Collectors.groupingBy(WbsTreePrivate::getParentId));
                 Set<Long> longs = tabParentNodesGroup.keySet();
-                //获取当前项目下合同段新增或者复制的节点
-                List<WbsTreeContract> addOrCopyNodes = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                //获取当前项目下合同段 新增、复制、原始节点
+                List<WbsTreeContract> addOrCopyOrYsNodes = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
                         .select(WbsTreeContract::getId, WbsTreeContract::getContractId, WbsTreeContract::getOldId)
-                        .in(WbsTreeContract::getOldId, longs).eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId()));
-                List<WbsTreeContract> newAddOrCopyNodes = addOrCopyNodes.stream().distinct().collect(Collectors.toList());
-                for (WbsTreeContract addOrCopyNode : newAddOrCopyNodes) {
-                    //合同段节点的oldId=当前表的parentId,也就是说当前表的父级节点=合同段复制、新增出来节点
-                    List<WbsTreePrivate> tabs = tabParentNodesGroup.get(Long.parseLong(addOrCopyNode.getOldId()));
-                    if (tabs.size() > 0) {
-                        List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
-                        for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
-                            wbsTreeContract.setIsDeleted(0);
-                            wbsTreeContract.setStatus(1);
-                            wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
-                            wbsTreeContract.setParentId(addOrCopyNode.getId());
-                            wbsTreeContract.setContractId(addOrCopyNode.getContractId());
+                        .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
+                        .and(obj -> obj.in(WbsTreeContract::getOldId, longs).or().in(WbsTreeContract::getId, longs))
+                );
+                List<WbsTreeContract> newAddOrCopyOrYsNodes = addOrCopyOrYsNodes.stream().distinct().collect(Collectors.toList());
+                for (WbsTreeContract addOrCopyOrYsNode : newAddOrCopyOrYsNodes) {
+                    if (StringUtils.isNotEmpty(addOrCopyOrYsNode.getOldId())) {
+                        //复制、新增节点
+                        //合同段节点的oldId=当前表的parentId,也就是说当前表的父级节点=合同段复制、新增出来节点
+                        List<WbsTreePrivate> tabs = tabParentNodesGroup.get(Long.parseLong(addOrCopyOrYsNode.getOldId()));
+                        if (tabs.size() > 0) {
+                            List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
+                            for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
+                                wbsTreeContract.setIsDeleted(0);
+                                wbsTreeContract.setStatus(1);
+                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
+                                wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
+                                wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
+                            }
+                            insertDataContractList.addAll(wbsTreeContractList);
+                        }
+                    } else {
+                        //原始节点id=表parentId
+                        List<WbsTreePrivate> tabs = tabParentNodesGroup.get((addOrCopyOrYsNode.getId()));
+                        if (tabs.size() > 0) {
+                            List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
+                            for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
+                                wbsTreeContract.setIsDeleted(0);
+                                wbsTreeContract.setStatus(1);
+                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
+                                wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
+                                wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
+                            }
+                            insertDataContractList.addAll(wbsTreeContractList);
                         }
-                        insertDataContractList.addAll(wbsTreeContractList);
                     }
                 }
             }

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ExcelParser.java

@@ -7,7 +7,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.text.SimpleDateFormat;
 import java.util.LinkedHashMap;
 import java.util.Map;