瀏覽代碼

Merge remote-tracking branch 'origin/master' into master

yangyj 2 年之前
父節點
當前提交
17855c843a

+ 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

+ 37 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -22,7 +22,6 @@ import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.service.impl.WbsTreeContractServiceImpl;
-import org.springblade.manager.utils.CssSelectorEscaper;
 import org.springblade.manager.utils.ExcelParser;
 import org.springblade.manager.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -248,15 +247,40 @@ 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)) {
+                if (inputStream != null) {
                     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);
+                    byte[] buffer = new byte[4096];
+                    int bytesRead;
+                    while ((bytesRead = inputStream.read(buffer)) != -1) {
+                        servletOutputStream.write(buffer, 0, bytesRead);
+                    }
                     servletOutputStream.flush();
-                } catch (Exception e) {
-                    e.printStackTrace();
+                    inputStream.close();
+                }
+            }
+        }
+    }
+
+    /*public void downloadExcel(@RequestParam String pKeyId, HttpServletResponse response) throws Exception {
+        WbsTreeContract tab = iWbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pKeyId));
+        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 inputStream = CommonUtil.getOSSInputStream(excelTab.getFileUrl());
+                if (inputStream != null) {
+                    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();
+                    }
                 }
             }
         }
@@ -278,7 +302,7 @@ public class WbsTreeContractController extends BladeController {
             }
         }
         return workbook;
-    }
+    }*/
 
     @PostMapping("/import-excel")
     @ApiOperationSupport(order = 14)
@@ -299,13 +323,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 +391,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
      *

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

@@ -7,10 +7,20 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 public class ExcelParser {
+
+    private static final 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 +42,48 @@ 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();
+                if (d == 0.0) {
+                    return "";
+                }
+                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();
+                if (d == 0.0) {
+                    return "";
+                }
+                value = numberFormat.format(d);
+                return value.toString();
+            case STRING:
+                return cell.getStringCellValue();
+            default:
+                return "";
         }
-        return "";
     }
 
     private static String getCellCoordinate(Cell cell) {