From 0564f4a7a070edd48b79e36c201787efe30377f5 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 28 Aug 2024 10:17:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9F=BA=E7=A1=80=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=9A=E6=96=B0=E5=A2=9E=E6=A8=A1=E7=89=88=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3-=E8=A7=A3=E6=9E=90=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E3=80=81=E6=A0=A1=E9=AA=8C=E8=A1=A8=E8=BE=BE=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/ReportTemplateController.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java index 69fd1b04d..e0fb455de 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java @@ -3,10 +3,15 @@ package com.cf.imes.module.report.controller.admin.template; import com.bstek.designer.bean.ReportDefinitionWrapper; import com.bstek.designer.excel.ExcelParserUtils; import com.bstek.ureport.definition.ReportDefinition; +import com.bstek.ureport.dsl.ReportParserLexer; +import com.bstek.ureport.dsl.ReportParserParser; import com.bstek.ureport.export.ExportUtils; import com.bstek.ureport.export.ProducerEnum; import com.bstek.ureport.export.html.HtmlReport; +import com.bstek.ureport.expression.ErrorInfo; +import com.bstek.ureport.expression.ScriptErrorListener; import com.bstek.ureport.model.Report; +import com.bstek.ureport.utils.StringUtils; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.util.object.BeanUtils; @@ -20,8 +25,12 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.TerminalNode; import org.apache.commons.io.IOUtils; import org.apache.http.HttpStatus; +import org.apache.ibatis.annotations.Param; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -32,7 +41,9 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.OutputStream; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static com.cf.imes.framework.common.pojo.CommonResult.success; @@ -126,4 +137,48 @@ public class ReportTemplateController { } throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "文件未识别"); } + + @GetMapping("/scriptValidation") + @Operation(summary = "校验表达式") + @Parameter(name = "content", description = "表达式", required = true) + public List scriptValidation(@Param("content") String content) { + content = StringUtils.decode(content); + ANTLRInputStream antlrInputStream = new ANTLRInputStream(content); + ReportParserLexer lexer = new ReportParserLexer(antlrInputStream); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + ReportParserParser parser = new ReportParserParser(tokenStream); + ScriptErrorListener errorListener = new ScriptErrorListener(); + parser.removeErrorListeners(); + parser.addErrorListener(errorListener); + parser.expression(); + return errorListener.getInfos(); + } + + /** + * 解析表达式中的数据集 + * + * @param expr + * @return + */ + @GetMapping("/parseDataSet") + @Operation(summary = "解析表达式中的数据集") + @Parameter(name = "expr", description = "表达式", required = true) + public Map parseDatasetName(@Param("expr") String expr) { + ANTLRInputStream antlrInputStream = new ANTLRInputStream(expr); + ReportParserLexer lexer = new ReportParserLexer(antlrInputStream); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + ReportParserParser parser = new ReportParserParser(tokenStream); + parser.removeErrorListeners(); + + Map result = new HashMap<>(); + ReportParserParser.DatasetContext ctx = parser.dataset(); + if (ctx != null) { + TerminalNode node = ctx.Identifier(); + if (node != null) { + String datasetName = ctx.Identifier().getText(); + result.put("datasetName", datasetName); + } + } + return result; + } }