Kaynağa Gözat

客户端导入excel bug

liuyc 2 yıl önce
ebeveyn
işleme
6a55188c76

+ 6 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ImageClassificationFileVO.java

@@ -79,4 +79,10 @@ public class ImageClassificationFileVO extends ImageClassificationFile {
     @ApiModelProperty("搜索-开始结束")
     private String endDate;
 
+    /**
+     * 是否是App
+     */
+    @ApiModelProperty("是否是App")
+    private Integer isApp;
+
 }

+ 21 - 3
blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java

@@ -38,6 +38,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.entity.ExcelTab;
 import org.springblade.manager.entity.ImageClassificationConfig;
 import org.springblade.manager.entity.WbsTreeContract;
@@ -537,11 +538,28 @@ public class ImageClassificationFileController extends BladeController {
             @ApiImplicitParam(name = "staDate", value = "开始时间"),
             @ApiImplicitParam(name = "endDate", value = "结束时间")
     })
-    public R<IPage<ImageClassificationFileVO>> page(ImageClassificationFileVO fileVO, Query query) {
+    public R<Object> page(ImageClassificationFileVO fileVO, Query query) {
         IPage<ImageClassificationFileVO> page = this.imageClassificationFileService.selectImageClassificationFilePage(Condition.getPage(query), fileVO);
-        page.getRecords().forEach(vos -> vos.setShootingTimeStr(DateUtil.format(vos.getShootingTime(), "yyyy-MM-dd")));
-
+        List<ImageClassificationFileVO> sortedRecords = page.getRecords().stream()
+                .filter(vos -> vos.getCreateTime() != null)//过滤掉创建时间为null的记录
+                .sorted(Comparator.comparing(ImageClassificationFileVO::getCreateTime).reversed())
+                .peek(vos -> {
+                    if (vos.getShootingTime() != null) {
+                        vos.setShootingTimeStr(DateUtil.format(vos.getShootingTime(), "yyyy-MM-dd"));
+                    }
+                })
+                .collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(fileVO.getIsApp()) && fileVO.getIsApp() == 1) {
+            //App按照创建时间分组
+            Map<String, List<ImageClassificationFileVO>> groupedRecords = sortedRecords.stream()
+                    .collect(Collectors.groupingBy(vos -> DateUtil.format(vos.getCreateTime(), "yyyy-MM-dd"),
+                            LinkedHashMap::new,
+                            Collectors.toList()));
+            return R.data(groupedRecords);
+        }
+        page.setRecords(sortedRecords);
         return R.data(page);
+
     }
 
     /**

+ 2 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ImageClassificationFileMapper.xml

@@ -71,7 +71,8 @@
         files.image_url,
         files.pdf_url,
         files.type,
-        files.marge_pdf_url
+        files.marge_pdf_url,
+        files.create_time
         from
         (
         select

+ 19 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -248,15 +248,18 @@ public class WbsTreeContractController extends BladeController {
             ExcelTab excelTab = jdbcTemplate.queryForObject("select file_url,name from m_excel_tab where id = " + tab.getExcelId(), new BeanPropertyRowMapper<>(ExcelTab.class));
             if (excelTab != null) {
                 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();
+                if (inputStream != null) {
+                    try (/*Workbook workbook = parseExcelFile(inputStream) 先不解析成文本格式,保留原始的excel表格格式*/
+                            Workbook workbook = WorkbookFactory.create(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();
+                    }
                 }
             }
         }
@@ -299,13 +302,6 @@ public class WbsTreeContractController extends BladeController {
         for (Map.Entry<String, String> stringStringEntry : stringStringMap.entrySet()) {
             String value = stringStringEntry.getValue();
             if (StringUtils.isNotEmpty(value)) {
-                /*String escape = CssSelectorEscaper.escape(value);
-                String selectorTitle = "td:containsOwn(" + escape + ")";
-                Elements tdElementsTitle = doc.select(selectorTitle);
-                //如果找到了匹配的<td>元素,说明是固定的标题,跳过当前循环,只保留填写的excel数据
-                if (!tdElementsTitle.isEmpty()) {
-                    continue;
-                }*/
                 String[] split = stringStringEntry.getKey().split("_");
                 int row = Integer.parseInt(split[0]) + 1;
                 int cell = Integer.parseInt(split[1]) + 1;
@@ -374,5 +370,12 @@ public class WbsTreeContractController extends BladeController {
         }
     }
 
+    @PostMapping("/getConcealedWorksNodeTree")
+    @ApiOperationSupport(order = 15)
+    @ApiOperation(value = "获取合同段隐蔽工程节点树", notes = "传入合同段id")
+    public R<List<WbsTreeContractLazyVO>> getConcealedWorksNodeTree(@RequestParam String contractId) {
+        List<WbsTreeContractLazyVO> result = iWbsTreeContractService.getConcealedWorksNodeTree(contractId);
+        return R.data(result);
+    }
 
 }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -66,4 +66,7 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
     boolean syncContractTabSort(String projectId);
 
     List<AppWbsTreeContractVO> searchNodeAllTableAndFile(String primaryKeyId, String type, String contractId, String projectId);
+
+    List<WbsTreeContractLazyVO> getConcealedWorksNodeTree(String contractId);
+
 }

+ 17 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -950,6 +950,23 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return null;
     }
 
+    @Override
+    public List<WbsTreeContractLazyVO> getConcealedWorksNodeTree(String contractId) {
+        List<WbsTreeContract> wbsTreeContracts = this.getBaseMapper().selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                .select(WbsTreeContract::getId,WbsTreeContract::getPKeyId,WbsTreeContract::getParentId,WbsTreeContract::getNodeType,
+                        WbsTreeContract::getType,WbsTreeContract::getWbsType,WbsTreeContract::getMajorDataType,WbsTreeContract::getPartitionCode,
+                        WbsTreeContract::getOldId,WbsTreeContract::getContractIdRelation,WbsTreeContract::getIsConcealedWorksNode,WbsTreeContract::getIsConcrete
+                )
+                .eq(WbsTreeContract::getContractId, contractId).eq(WbsTreeContract::getIsConcealedWorksNode, 1));
+        List<WbsTreeContract> distinctWbsTreeContracts = wbsTreeContracts.stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //TODO
+
+        return null;
+    }
+
     /**
      * 批量修改合同段表单sort
      *

+ 41 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ExcelParser.java

@@ -7,10 +7,18 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.text.NumberFormat;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 public class ExcelParser {
+
+    private static NumberFormat numberFormat = NumberFormat.getNumberInstance();
+
+    static {
+        numberFormat.setGroupingUsed(false);
+    }
+
     public static Map<String, String> parseExcel(MultipartFile file) throws IOException {
         Map<String, String> cellValueMap = new LinkedHashMap<>();
         try (InputStream inputStream = file.getInputStream()) {
@@ -32,17 +40,41 @@ public class ExcelParser {
     }
 
     private static String getCellValue(Cell cell) {
+        Object value;
         if (cell == null) return "";
-        if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
-            return cell.getStringCellValue();
-        } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
-            return String.valueOf(cell.getBooleanCellValue());
-        } else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
-            return cell.getCellFormula();
-        } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
-            return String.valueOf(cell.getNumericCellValue());
+        switch (cell.getCellTypeEnum()) {
+            case STRING:
+                return cell.getStringCellValue();
+            case BOOLEAN:
+                return String.valueOf(cell.getBooleanCellValue());
+            case FORMULA:
+                return evaluateFormulaCell(cell);
+            case NUMERIC:
+                double d = cell.getNumericCellValue();
+                value = numberFormat.format(d);
+                return value.toString();
+            default:
+                return "";
+        }
+    }
+
+    private static String evaluateFormulaCell(Cell cell) {
+        FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
+        CellValue cellValue = evaluator.evaluate(cell);
+        Object value;
+        if (cellValue == null) return "";
+        switch (cellValue.getCellTypeEnum()) {
+            case NUMERIC:
+                double d = cell.getNumericCellValue();
+                value = numberFormat.format(d);
+                return value.toString();
+            case STRING:
+                return cell.getStringCellValue();
+            case BOOLEAN:
+                return String.valueOf(cell.getBooleanCellValue());
+            default:
+                return "";
         }
-        return "";
     }
 
     private static String getCellCoordinate(Cell cell) {