zss
2024-08-01 54a33a391e211a4b2b97621501c6236527d32331
文件采集公式计算调整
已修改4个文件
57 ■■■■ 文件已修改
cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/StandardProductListServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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(), "")) {