cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java
@@ -261,15 +261,13 @@ formula = formula.replace("(", "(") .replace(")", ")") .replace(",", ","); //然后提取英文字母,全部转换为大写 String[] strs = formula.split("[^A-Za-z]+"); String upperStr = ""; for (String str : strs) { upperStr += str.toUpperCase(); } //然后提取公式 String strs = formula.substring(0,formula.indexOf("(")); String upperStr = strs.toUpperCase(); if (upperStr.equals("")) { throw new ErrorException(formula + "里面的公式没有函数"); } System.out.println(upperStr); //然后获取最外面括号里面的值,再根据","分割 int start = formula.indexOf("("); int end = -1; @@ -289,51 +287,47 @@ throw new ErrorException("公式括号不匹配: " + formula); } String inner = formula.substring(start + 1, end); String argumentsStr = formula.substring(start + 1, end); List<String> arguments = new ArrayList<>(); int depth = 0; int bracketCount = 0; StringBuilder currentArgument = new StringBuilder(); for ( char c : inner.toCharArray()) { if (c == ',' && depth == 0) { for (char c : argumentsStr.toCharArray()) { if (c == ',' && bracketCount == 0) { arguments.add(currentArgument.toString()); currentArgument.setLength(0); } else { if (c == '(') { depth++; } else if (c == ')') { depth--; } if (c == '(') bracketCount++; if (c == ')') bracketCount--; currentArgument.append(c); } } arguments.add(currentArgument.toString()); String[] bracketStrs = arguments.toArray(new String[0]); List<BigDecimal> results = new ArrayList<>(); for ( String expr : bracketStrs) { for (String expr : bracketStrs) { System.out.println("替换前" + expr); Pattern pattern = Pattern.compile("\\b\\d+\\b"); Pattern pattern = Pattern.compile("([A-Z])(\\d+)"); Matcher matcher = pattern.matcher(expr); StringBuffer sb = new StringBuffer(); while (matcher.find()) { int index = Integer.parseInt(matcher.group()) - 1; String letter = matcher.group(1); int index = Integer.parseInt(matcher.group(2)) - 1; // 将1-based转为0-based if (index < bigDecimalList.size()) { matcher.appendReplacement(sb, bigDecimalList.get(index).toString()); } else { throw new ErrorException("表达式中的下标 " + index + " 超出范围"); throw new RuntimeException("公式中的下标 " + index + " 超出范围"); } } matcher.appendTail(sb); System.out.println("替换后" + sb.toString()); //计算 // 计算表达式 ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); try { Object result = engine.eval(sb.toString()); results.add(new BigDecimal(result.toString())); } catch (Exception e) { throw new IllegalArgumentException("无法计算表达式: " + sb, e); throw new IllegalArgumentException("无法计算公式: " + sb, e); } } // 根据函数名称进行相应计算 inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java
@@ -68,30 +68,35 @@ throw new ErrorException("文件上传失败"); } } @ValueClassify("报告编制") @ApiOperation(value = "报告还原") @PostMapping("/upReportUrl") public Result upReportUrl(Integer id) { return Result.success(insReportService.upReportUrl(id)); } @ValueClassify("报告编制") @ApiOperation(value = "报告在线编制") @GetMapping("/upReportFile") public Result upReportFile() { return Result.success(); } @ValueClassify("报告编制") @ApiOperation(value = "提交") @PostMapping("/writeReport") public Result writeReport(Integer id) { return Result.success(insReportService.writeReport(id)); } @ValueClassify("报告编制") @ApiOperation(value = "审核") @PostMapping("/examineReport") public Result examineReport(Integer id, Integer isExamine, String examineTell) { return Result.success(insReportService.examineReport(id, isExamine, examineTell)); } @ValueClassify("报告编制") @ApiOperation(value = "批准") @PostMapping("/ratifyReport") inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -635,17 +635,13 @@ .collect(Collectors.groupingBy(CostStatisticsDto::getCompany)); try { // 新建ExcelWriter ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) { String sheetName = companyDataEntry.getKey(); List<CostStatisticsDto> dataList = companyDataEntry.getValue(); WriteSheet mainSheet = EasyExcel.writerSheet(sheetName).head(CostStatisticsDto.class).build(); excelWriter.write(dataList, mainSheet); } // 关闭流 excelWriter.finish(); } catch (IOException e) { inspect-server/src/main/java/com/yuanchu/mom/service/impl/StandardProductListServiceImpl.java
@@ -75,7 +75,9 @@ } } String[] split1 = insSample.getFactory().split(" - "); list = list.stream().filter(list1 -> list1.getSample().equals(split1[3])).collect(Collectors.toList()); if (ObjectUtils.isNotEmpty(split1[3])){ list = list.stream().filter(list1 -> list1.getSample().equals(split1[3])).collect(Collectors.toList()); } list = list.stream().filter(a -> { try { if (a.getSection() != null && !Objects.equals(a.getSection(), "")) {