From 96dff53e0042386d639cd311aabec1597fd32673 Mon Sep 17 00:00:00 2001
From: JonasBollack <825545356@qq.com>
Date: Tue, 20 Oct 2020 16:59:42 +0800
Subject: [PATCH] =?UTF-8?q?KERNEL-5825=20=E4=B8=8A=E4=BC=A0=E6=89=93?=
=?UTF-8?q?=E5=8C=85=E8=AF=B7=E6=B1=82=E5=90=8E=E7=AB=AF=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
plugin.xml | 9 +-
pom.xml | 24 ++-
.../com/fr/plugin/pack/PackConstants.java | 14 ++
.../fr/plugin/pack/PackHandlerProvider.java | 19 +++
.../fr/plugin/pack/PackURLAliasProvider.java | 20 +++
.../pack/PackWidgetExecuteProvider.java | 62 ++++++++
.../com/fr/plugin/pack/bean/WidgetsBean.java | 23 +++
.../fr/plugin/pack/conf/PackPluginConfig.java | 74 +++++++++
.../pack/exception/ReportExceedException.java | 16 ++
.../pack/exception/WidgetExceedException.java | 16 ++
.../fr/plugin/pack/http/PackHttpHandler.java | 150 ++++++++++++++++++
.../pack/source/PackDBSourceEngine.java | 25 +++
.../fr/plugin/pack/traffic/PackTraffic.java | 12 ++
.../pack/traffic/PackTrafficFactory.java | 22 +++
.../plugin/pack/traffic/PackTrafficImpl.java | 48 ++++++
.../plugin/pack/http/PackHttpHandlerTest.java | 103 ++++++++++++
16 files changed, 634 insertions(+), 3 deletions(-)
create mode 100644 src/main/java/com/fr/plugin/pack/PackConstants.java
create mode 100644 src/main/java/com/fr/plugin/pack/PackHandlerProvider.java
create mode 100644 src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java
create mode 100644 src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java
create mode 100644 src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java
create mode 100644 src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java
create mode 100644 src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java
create mode 100644 src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java
create mode 100644 src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java
create mode 100644 src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java
create mode 100644 src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java
create mode 100644 src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java
create mode 100644 src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java
create mode 100644 src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java
diff --git a/plugin.xml b/plugin.xml
index 70bde70..c7fa5b3 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -1,4 +1,5 @@
-
+
+
com.fr.plugin.pack.request
yes
@@ -13,5 +14,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index dcf2c23..350d050 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
5.0-RELEASE-SNAPSHOT
../nuclear-maven/pom.xml
-
+
4.0.0
plugin-pack-request
@@ -20,6 +20,24 @@
direct-adapter-sdk
${foundation-version}
+
+ com.finebi
+ web-action
+ 5.0-RELEASE-SNAPSHOT
+ compile
+
+
+ org.jmockit
+ jmockit
+ 1.35
+ test
+
+
+ com.finebi
+ web-test
+ 5.0-RELEASE-SNAPSHOT
+ test
+
@@ -34,7 +52,9 @@
- /Users/leezerofly/env/direct-bi/WEB-INF/plugins/plugin-com.fr.plugin.pack.request-0.0.1/classes
+
+ /Users/jonas/Desktop/代码/FineBI5.1/env/WebReport/WEB-INF/plugins/plugin-com.fr.plugin.pack.request-0.0.1/classes
+
\ No newline at end of file
diff --git a/src/main/java/com/fr/plugin/pack/PackConstants.java b/src/main/java/com/fr/plugin/pack/PackConstants.java
new file mode 100644
index 0000000..0a00124
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/PackConstants.java
@@ -0,0 +1,14 @@
+package com.fr.plugin.pack;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class PackConstants {
+ public final static String WIDGET_EXCEED_ERROR = "61310099";
+ public final static String REPORT_EXCEED_ERROR = "61310098";
+
+ public final static String WIDGET_TRAFFIC_NAME = "Widget";
+ public final static String REPORT_TRAFFIC_NAME = "Report";
+}
diff --git a/src/main/java/com/fr/plugin/pack/PackHandlerProvider.java b/src/main/java/com/fr/plugin/pack/PackHandlerProvider.java
new file mode 100644
index 0000000..8ac0834
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/PackHandlerProvider.java
@@ -0,0 +1,19 @@
+package com.fr.plugin.pack;
+
+import com.fr.decision.fun.HttpHandler;
+import com.fr.decision.fun.impl.AbstractHttpHandlerProvider;
+import com.fr.plugin.pack.http.PackHttpHandler;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class PackHandlerProvider extends AbstractHttpHandlerProvider {
+ @Override
+ public HttpHandler[] registerHandlers() {
+ return new HttpHandler[]{
+ new PackHttpHandler()
+ };
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java b/src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java
new file mode 100644
index 0000000..efdf429
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/PackURLAliasProvider.java
@@ -0,0 +1,20 @@
+package com.fr.plugin.pack;
+
+import com.fr.decision.fun.impl.AbstractURLAliasProvider;
+import com.fr.decision.webservice.url.alias.URLAlias;
+import com.fr.decision.webservice.url.alias.URLAliasFactory;
+import com.fr.plugin.pack.http.PackHttpHandler;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class PackURLAliasProvider extends AbstractURLAliasProvider {
+ @Override
+ public URLAlias[] registerAlias() {
+ return new URLAlias[]{
+ URLAliasFactory.createPluginAlias(PackHttpHandler.PATH, PackHttpHandler.PATH,false)
+ };
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java b/src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java
new file mode 100644
index 0000000..944217d
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/PackWidgetExecuteProvider.java
@@ -0,0 +1,62 @@
+package com.fr.plugin.pack;
+
+import com.finebi.common.api.vo.table.parameter.Parameters;
+import com.finebi.common.exception.FineEngineException;
+import com.finebi.common.exception.execute.FineWidgetNoDataException;
+import com.finebi.dashboard.api.bean.widget.WidgetBean;
+import com.finebi.dashboard.api.cell.DashboardCellCreator;
+import com.finebi.dashboard.api.fun.AbstractWidgetExecuteProvider;
+import com.finebi.dashboard.api.structure.result.preview.BIPreViewResult;
+import com.finebi.dashboard.impl.widget.EngineResultToPreViewResultVisitor;
+import com.finebi.dashboard.impl.widget.FineWidget;
+import com.finebi.dashboard.impl.widget.visitor.DefaultBeanToWidget;
+import com.finebi.dashboard.impl.widget.visitor.TableAbsentChecker;
+import com.finebi.dashboard.impl.widget.visitor.UrlParameterProcessor;
+import com.finebi.dashboard.impl.widget.visitor.WidgetBeanToFineWidgetVisitor;
+import com.finebi.foundation.api.structure.result.BIResult;
+import com.fr.decision.authority.data.User;
+import com.fr.plugin.pack.exception.WidgetExceedException;
+import com.fr.plugin.pack.traffic.PackTraffic;
+import com.fr.plugin.pack.traffic.PackTrafficFactory;
+
+import java.util.Optional;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class PackWidgetExecuteProvider extends AbstractWidgetExecuteProvider {
+ private PackTraffic widgetTraffic = PackTrafficFactory.getWidgetTraffic();
+
+ @Override
+ public BIPreViewResult getPreViewResult(WidgetBean widgetBean, User user, Parameters parameters) throws FineEngineException {
+ String widgetId = null;
+ try {
+ widgetId = widgetBean.getWid();
+ if (!widgetTraffic.offer(widgetId)) {
+ throw new WidgetExceedException();
+ }
+ return getResult(widgetBean, user, parameters);
+ } finally {
+ widgetTraffic.release(widgetId);
+ }
+ }
+
+ private BIPreViewResult getResult(WidgetBean widgetBean, User user, Parameters parameters) throws FineEngineException {
+ // bean转widget
+ TableAbsentChecker.check(widgetBean);
+ FineWidget widget = new DefaultBeanToWidget<>(new WidgetBeanToFineWidgetVisitor(user))
+ .addProcess(new UrlParameterProcessor(parameters))
+ .translate(widgetBean);
+ // 从引擎拿计算数据
+ BIResult engineResult = getEngineExecutorResult(widget);
+ EngineResultToPreViewResultVisitor resultTranVisitor = new EngineResultToPreViewResultVisitor(engineResult, parameters);
+ return widget.accept(resultTranVisitor);
+ }
+
+ private BIResult getEngineExecutorResult(FineWidget fineWidget) throws FineEngineException {
+ Optional execute = DashboardCellCreator.widgetExecutor().execute(fineWidget);
+ return execute.orElseThrow(() -> new FineWidgetNoDataException("widget result is null !widget name is : " + fineWidget.getWidgetName()));
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java b/src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java
new file mode 100644
index 0000000..f3379d4
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/bean/WidgetsBean.java
@@ -0,0 +1,23 @@
+package com.fr.plugin.pack.bean;
+
+import com.finebi.dashboard.api.bean.widget.WidgetBean;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class WidgetsBean {
+ private Map widgets = new HashMap<>();
+
+ public Map getWidgets() {
+ return widgets;
+ }
+
+ public void setWidgets(Map widgets) {
+ this.widgets = widgets;
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java b/src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java
new file mode 100644
index 0000000..6b2ec0e
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/conf/PackPluginConfig.java
@@ -0,0 +1,74 @@
+package com.fr.plugin.pack.conf;
+
+import com.fr.config.ConfigContext;
+import com.fr.config.DefaultConfiguration;
+import com.fr.config.Identifier;
+import com.fr.config.Status;
+import com.fr.config.Visualization;
+import com.fr.config.holder.Conf;
+import com.fr.config.holder.factory.Holders;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-20
+ */
+@Visualization(category = "打包插件参数")
+public class PackPluginConfig extends DefaultConfiguration {
+ private static volatile PackPluginConfig config = null;
+
+ // sql查询超时时间(JDBC属性)单位秒
+ @Identifier(value = "sqlQueryTimeout", status = Status.SHOW, name = "SQL查询超时时间", description = "单位秒(JDBC设置queryTimeout)")
+ private Conf sqlQueryTimeout = Holders.simple(60);
+
+ // 组件查询超时时间单位毫秒
+ @Identifier(value = "widgetQueryTimeout", status = Status.SHOW, name = "组件查询超时时间", description = "单位毫秒")
+ private Conf widgetQueryTimeout = Holders.simple(3 * 60 * 1000);
+
+ // 最大模板并发访问度
+ @Identifier(value = "reportQueryMax", status = Status.SHOW, name = "最大模板并发访问度", description = "模板并发个数")
+ private Conf reportQueryMax = Holders.simple(3);
+
+ // 最大组件并发组件并发访问度
+ @Identifier(value = "widgetQueryMax", status = Status.SHOW, name = "最大组件并发组件并发访问度", description = "组件并发个数")
+ private Conf widgetQueryMax = Holders.simple(6);
+
+ public static PackPluginConfig getInstance() {
+ if (config == null) {
+ config = ConfigContext.getConfigInstance(PackPluginConfig.class);
+ }
+ return config;
+ }
+
+ public int getSqlQueryTimeout() {
+ return sqlQueryTimeout.get();
+ }
+
+ public void setSqlQueryTimeout(int sqlQueryTimeout) {
+ this.sqlQueryTimeout.set(sqlQueryTimeout);
+ }
+
+ public int getWidgetQueryTimeout() {
+ return widgetQueryTimeout.get();
+ }
+
+ public void setWidgetQueryTimeout(int widgetQueryTimeout) {
+ this.widgetQueryTimeout.set(widgetQueryTimeout);
+ }
+
+ public int getReportQueryMax() {
+ return reportQueryMax.get();
+ }
+
+ public void setReportQueryMax(int reportQueryMax) {
+ this.reportQueryMax.set(reportQueryMax);
+ }
+
+ public int getWidgetQueryMax() {
+ return widgetQueryMax.get();
+ }
+
+ public void setWidgetQueryMax(int widgetQueryMax) {
+ this.widgetQueryMax.set(widgetQueryMax);
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java b/src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java
new file mode 100644
index 0000000..a6654a4
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/exception/ReportExceedException.java
@@ -0,0 +1,16 @@
+package com.fr.plugin.pack.exception;
+
+import com.finebi.common.exception.FineEngineException;
+import com.fr.plugin.pack.PackConstants;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class ReportExceedException extends FineEngineException {
+ @Override
+ public String errorCode() {
+ return PackConstants.REPORT_EXCEED_ERROR;
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java b/src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java
new file mode 100644
index 0000000..583f5b6
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/exception/WidgetExceedException.java
@@ -0,0 +1,16 @@
+package com.fr.plugin.pack.exception;
+
+import com.finebi.common.exception.FineEngineException;
+import com.fr.plugin.pack.PackConstants;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class WidgetExceedException extends FineEngineException {
+ @Override
+ public String errorCode() {
+ return PackConstants.WIDGET_EXCEED_ERROR;
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java b/src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java
new file mode 100644
index 0000000..5506015
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/http/PackHttpHandler.java
@@ -0,0 +1,150 @@
+package com.fr.plugin.pack.http;
+
+import com.finebi.activate.foundation.StableManager;
+import com.finebi.base.concurrent.DefaultThreadFactory;
+import com.finebi.common.api.vo.table.parameter.Parameters;
+import com.finebi.dashboard.api.bean.widget.WidgetBean;
+import com.finebi.dashboard.api.service.FineDashBoardService;
+import com.finebi.dashboard.api.service.FineWidgetExecutorService;
+import com.finebi.dashboard.api.structure.result.preview.BIPreViewResult;
+import com.finebi.dashboard.impl.helper.FineDashBoardUtils;
+import com.finebi.foundation.api.reponse.FineRespond;
+import com.finebi.foundation.api.service.FineService;
+import com.finebi.selector.api.DirectSourceEngineFactory;
+import com.finebi.utils.CollectionUtils;
+import com.finebi.utils.StringUtils;
+import com.finebi.web.action.v5.BaseAction;
+import com.fr.decision.authority.data.User;
+import com.fr.decision.fun.impl.BaseHttpHandler;
+import com.fr.general.IOUtils;
+import com.fr.invoke.Reflect;
+import com.fr.log.FineLoggerFactory;
+import com.fr.plugin.pack.bean.WidgetsBean;
+import com.fr.plugin.pack.conf.PackPluginConfig;
+import com.fr.plugin.pack.exception.ReportExceedException;
+import com.fr.plugin.pack.exception.WidgetExceedException;
+import com.fr.plugin.pack.source.PackDBSourceEngine;
+import com.fr.plugin.pack.traffic.PackTraffic;
+import com.fr.plugin.pack.traffic.PackTrafficFactory;
+import com.fr.third.fasterxml.jackson.databind.ObjectMapper;
+import com.fr.third.springframework.web.bind.annotation.RequestMethod;
+import com.fr.web.utils.WebUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.stream.Collectors;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class PackHttpHandler extends BaseHttpHandler {
+ private PackTraffic reportTraffic = PackTrafficFactory.getReportTraffic();
+ public static String PATH = "/widgets/data";
+ private ExecutorService executorService = Executors.newCachedThreadPool(new DefaultThreadFactory("pack-widget-execute"));
+
+ {
+ DirectSourceEngineFactory.INSTANCE.register(new PackDBSourceEngine());
+ }
+
+ @Override
+ public RequestMethod getMethod() {
+ return RequestMethod.POST;
+ }
+
+ @Override
+ public String getPath() {
+ return PATH;
+ }
+
+ @Override
+ public boolean isPublic() {
+ return false;
+ }
+
+ @Override
+ public void handle(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ ObjectMapper mapper = new ObjectMapper();
+ String reportId = null;
+ try {
+ String body = IOUtils.inputStream2String(request.getInputStream());
+ WidgetsBean widgetsBean = mapper.readValue(body, WidgetsBean.class);
+
+ Map result = new HashMap<>();
+ Set reportIds = widgetsBean.getWidgets().values().stream().map(WidgetBean::getReportId).collect(Collectors.toSet());
+ if (CollectionUtils.isEmpty(reportIds)) {
+ throw new UnsupportedOperationException();
+ } else {
+ reportId = reportIds.iterator().next();
+ if (StringUtils.isEmpty(reportId)) {
+ throw new UnsupportedOperationException("reportId must be not emtpy");
+ }
+ }
+ if (!reportTraffic.offer(reportId)) {
+ throw new ReportExceedException();
+ }
+ try {
+ List> futures = new ArrayList<>();
+ for (Map.Entry entry : widgetsBean.getWidgets().entrySet()) {
+ WidgetBean widgetBean = entry.getValue();
+ User user = FineDashBoardUtils.getUserFromReq(request, widgetBean.getReportId());
+ boolean mobile = FineDashBoardUtils.isMobile(request);
+ Parameters parameterFromRequest = FineDashBoardUtils.getParameterFromRequest(request);
+ String widgetId = entry.getKey();
+ Future> future = executorService.submit(() -> {
+ try {
+ BIPreViewResult widgetData = Reflect.on(FineDashBoardUtils.class)
+ .call("getWidgetData", widgetBean, user, mobile, parameterFromRequest,
+ getBean(FineDashBoardService.class), getBean(FineWidgetExecutorService.class))
+ .get();
+ result.put(widgetId, FineRespond.success(widgetData));
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().debug(e.getMessage(), e);
+ result.put(widgetId, handleException(e));
+ }
+ });
+ futures.add(future);
+ }
+ for (Future> future : futures) {
+ try {
+ // 设置超时时间,不能一直在等着
+ future.get(PackPluginConfig.getInstance().getWidgetQueryTimeout(), TimeUnit.MILLISECONDS);
+ } catch (TimeoutException e) {
+ future.cancel(true);
+ }
+ }
+ WebUtils.printAsString(response, mapper.writeValueAsString(FineRespond.success(result)));
+ } finally {
+ reportTraffic.release(reportId);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ WebUtils.printAsString(response, mapper.writeValueAsString(FineRespond.fail("500", mapper.writeValueAsString(handleException(e)))));
+ }
+ }
+
+ private static FineRespond handleException(Exception e) {
+ if (e instanceof ReportExceedException) {
+ return FineRespond.fail(((ReportExceedException) e).errorCode(), e.getMessage());
+ }
+ if (e instanceof WidgetExceedException) {
+ return FineRespond.fail(((WidgetExceedException) e).errorCode(), e.getMessage());
+ }
+ return Reflect.on(BaseAction.class).call("getExceptionRespond", e).get();
+ }
+
+ private static T getBean(Class annotatedClass) {
+ return StableManager.getContext().getServiceBean(annotatedClass);
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java b/src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java
new file mode 100644
index 0000000..1967547
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/source/PackDBSourceEngine.java
@@ -0,0 +1,25 @@
+package com.fr.plugin.pack.source;
+
+import com.finebi.api.criterion.Table;
+import com.finebi.base.datasource.ConnectionCreator;
+import com.fr.data.core.db.dialect.Dialect;
+import com.fr.engine.sql.database.DataBaseSourceEngine;
+import com.fr.plugin.pack.conf.PackPluginConfig;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-20
+ */
+public class PackDBSourceEngine extends DataBaseSourceEngine {
+ @Override
+ protected ResultSet executeQuery(Connection conn, Statement statement, String sql, Table table, ConnectionCreator connectionCreator, Dialect dialect) throws SQLException {
+ statement.setQueryTimeout(PackPluginConfig.getInstance().getSqlQueryTimeout());
+ return dialect.executeQuery(statement, sql, conn);
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java b/src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java
new file mode 100644
index 0000000..e843338
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/traffic/PackTraffic.java
@@ -0,0 +1,12 @@
+package com.fr.plugin.pack.traffic;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public interface PackTraffic {
+ boolean offer(String id);
+
+ void release(String id);
+}
diff --git a/src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java
new file mode 100644
index 0000000..37e18ef
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficFactory.java
@@ -0,0 +1,22 @@
+package com.fr.plugin.pack.traffic;
+
+import com.fr.plugin.pack.PackConstants;
+import com.fr.plugin.pack.conf.PackPluginConfig;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class PackTrafficFactory {
+ private static PackTraffic widgetTraffic = new PackTrafficImpl(PackConstants.WIDGET_TRAFFIC_NAME,() -> PackPluginConfig.getInstance().getWidgetQueryMax());
+ private static PackTraffic reportTraffic = new PackTrafficImpl(PackConstants.REPORT_TRAFFIC_NAME,() -> PackPluginConfig.getInstance().getReportQueryMax());
+
+ public static PackTraffic getWidgetTraffic() {
+ return widgetTraffic;
+ }
+
+ public static PackTraffic getReportTraffic() {
+ return reportTraffic;
+ }
+}
diff --git a/src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java
new file mode 100644
index 0000000..8669405
--- /dev/null
+++ b/src/main/java/com/fr/plugin/pack/traffic/PackTrafficImpl.java
@@ -0,0 +1,48 @@
+package com.fr.plugin.pack.traffic;
+
+import com.fr.log.FineLoggerFactory;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Supplier;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-19
+ */
+public class PackTrafficImpl implements PackTraffic {
+ private Map mapCount = new ConcurrentHashMap<>();
+ private Supplier maxCount;
+ private String name;
+
+ public PackTrafficImpl(String name, Supplier maxCount) {
+ this.name = name;
+ this.maxCount = maxCount;
+ }
+
+ @Override
+ public synchronized boolean offer(String id) {
+ Integer count = mapCount.get(id);
+ if (count == null) {
+ count = 0;
+ }
+ int addCount = count + 1;
+ if (addCount > maxCount.get()) {
+ FineLoggerFactory.getLogger().info("PackTraffic({}) false {} addCount {}", name, id, addCount);
+ return false;
+ }
+ mapCount.put(id, addCount);
+ FineLoggerFactory.getLogger().info("PackTraffic({}) true {} addCount {}", name, id, addCount);
+ return true;
+ }
+
+ @Override
+ public synchronized void release(String id) {
+ Integer count = mapCount.get(id);
+ if (count <= 1) {
+ mapCount.remove(id);
+ }
+ mapCount.put(id, count - 1);
+ }
+}
diff --git a/src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java b/src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java
new file mode 100644
index 0000000..14a8a3e
--- /dev/null
+++ b/src/test/java/com/fr/plugin/pack/http/PackHttpHandlerTest.java
@@ -0,0 +1,103 @@
+package com.fr.plugin.pack.http;
+
+import com.finebi.activate.foundation.StableManager;
+import com.finebi.common.api.vo.table.parameter.Parameters;
+import com.finebi.common.exception.FineEngineException;
+import com.finebi.dashboard.api.bean.report.ReportBean;
+import com.finebi.dashboard.api.bean.widget.WidgetBean;
+import com.finebi.dashboard.api.service.FineDashBoardService;
+import com.finebi.dashboard.api.service.FineWidgetExecutorService;
+import com.finebi.dashboard.impl.helper.FineDashBoardUtils;
+import com.finebi.dashboard.impl.service.FineDashBoardServiceImpl;
+import com.finebi.dashboard.impl.service.FineWidgetExecutorServiceImpl;
+import com.finebi.dashboard.impl.widget.visitor.TableAbsentChecker;
+import com.finebi.foundation.api.reponse.FineRespond;
+import com.finebi.web.mock.web.test.DelegatingServletInputStream;
+import com.fr.decision.authority.data.User;
+import com.fr.plugin.pack.conf.PackPluginConfig;
+import mockit.Expectations;
+import mockit.Mock;
+import mockit.MockUp;
+import mockit.Mocked;
+import org.junit.Test;
+import sun.misc.IOUtils;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Jonas
+ * @version 5.1.3
+ * Created by Jonas on 2020-10-20
+ */
+public class PackHttpHandlerTest {
+ private String body = "{\"widgets\":{\"4339cd8362f546e99fc90d54e3755ddb\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1602758845193,\"bounds\":{\"left\":0,\"top\":0,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"8c4ed96759776abd\"]},\"dimensions\":{\"16e524b5e619b609\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"16e524b5e619b609\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"8c4ed96759776abd\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"8c4ed96759776abd\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"8c4ed96759776abd\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"8c4ed96759776abd\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"16e524b5e619b609\"]},\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"8c4ed96759776abd\"]}},\"drillOrder\":[],\"resultFilter\":[\"16e524b5e619b609\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"4339cd8362f546e99fc90d54e3755ddb\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"4339cd8362f546e99fc90d54e3755ddb_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"3a6851fb36bb68a4\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087265407,\"bounds\":{\"left\":0,\"top\":248.61111111111111,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件1\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"133462a3c153cb76\"]},\"dimensions\":{\"01167ed690b6cd3e\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"01167ed690b6cd3e\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"133462a3c153cb76\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"133462a3c153cb76\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"133462a3c153cb76\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"133462a3c153cb76\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"01167ed690b6cd3e\"]},\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"133462a3c153cb76\"]}},\"drillOrder\":[],\"resultFilter\":[\"01167ed690b6cd3e\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"3a6851fb36bb68a4\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"3a6851fb36bb68a4_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"08489dc8412178ec\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087269478,\"bounds\":{\"left\":0,\"top\":497.22222222222223,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件11\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"fb3d7d6bb78805d8\"]},\"dimensions\":{\"8c36dd275da0a6fe\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"8c36dd275da0a6fe\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"fb3d7d6bb78805d8\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"fb3d7d6bb78805d8\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"fb3d7d6bb78805d8\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"fb3d7d6bb78805d8\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"8c36dd275da0a6fe\"]},\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"fb3d7d6bb78805d8\"]}},\"drillOrder\":[],\"resultFilter\":[\"8c36dd275da0a6fe\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"08489dc8412178ec\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"08489dc8412178ec_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"5a9ffed4248bdb96\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087272887,\"bounds\":{\"left\":0,\"top\":745.8333333333334,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件2\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"43beee183bf6c1bf\"]},\"dimensions\":{\"70b4bf7cbd0aeafb\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"70b4bf7cbd0aeafb\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"43beee183bf6c1bf\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"43beee183bf6c1bf\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"43beee183bf6c1bf\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"43beee183bf6c1bf\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"70b4bf7cbd0aeafb\"]},\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"43beee183bf6c1bf\"]}},\"drillOrder\":[],\"resultFilter\":[\"70b4bf7cbd0aeafb\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"5a9ffed4248bdb96\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"5a9ffed4248bdb96_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"d5ec8c19ccbb087f\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087276883,\"bounds\":{\"left\":0,\"top\":994.4444444444445,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件111\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"a0fabe036eda698e\"]},\"dimensions\":{\"cbbdb1d2f935bbf1\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"cbbdb1d2f935bbf1\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"a0fabe036eda698e\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"a0fabe036eda698e\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"a0fabe036eda698e\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"a0fabe036eda698e\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"cbbdb1d2f935bbf1\"]},\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"a0fabe036eda698e\"]}},\"drillOrder\":[],\"resultFilter\":[\"cbbdb1d2f935bbf1\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"d5ec8c19ccbb087f\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"d5ec8c19ccbb087f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"95a2a6ec6d0d0ae7\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087280841,\"bounds\":{\"left\":0,\"top\":1243.0555555555554,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件1111\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"ffbd37dd6a882c5b\"]},\"dimensions\":{\"098a57676b82a917\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"098a57676b82a917\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"ffbd37dd6a882c5b\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"ffbd37dd6a882c5b\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"ffbd37dd6a882c5b\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"ffbd37dd6a882c5b\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"098a57676b82a917\"]},\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"ffbd37dd6a882c5b\"]}},\"drillOrder\":[],\"resultFilter\":[\"098a57676b82a917\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"95a2a6ec6d0d0ae7\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"95a2a6ec6d0d0ae7_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"},\"89326c80be396f6f\":{\"type\":1,\"tableName\":\"kyligence_NULLCS_D\",\"timeStamp\":1603087287453,\"bounds\":{\"left\":0,\"top\":1491.6666666666667,\"width\":742.2222222222223,\"height\":248.61111111111111},\"name\":\"未命名组件11111\",\"viewAttr\":{\"10000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0},\"20000\":{\"type\":1,\"size\":0},\"30000\":{\"type\":1,\"left\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"right\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"size\":0}},\"allowOverlap\":false,\"showTitle\":true,\"mobile\":false,\"view\":{\"10000\":[],\"20000\":[],\"30000\":[\"f1f9da64495a6743\"]},\"dimensions\":{\"d20986640f019197\":{\"name\":\"NAME\",\"type\":1,\"notShowNull\":false,\"id\":\"d20986640f019197\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"toCountType\":0,\"group\":{\"type\":2},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}},\"f1f9da64495a6743\":{\"name\":\"ID\",\"type\":2,\"notShowNull\":false,\"id\":\"f1f9da64495a6743\",\"fieldId\":\"kyligence[5f]NULLCS[5f]D_ID\",\"toCountType\":0,\"group\":{\"type\":3},\"calculation\":{\"type\":0,\"value\":0},\"settings\":{\"trendLine\":[],\"cordon\":[],\"categoryAxis\":{},\"valueAxis\":{\"sharedAxis\":null,\"reversed\":false,\"log\":false},\"annotate\":[],\"size\":0,\"stack\":false,\"formatStyle\":1,\"formatDecimal\":-1,\"numLevel\":1,\"numSeparators\":true,\"tableShape\":{\"shape\":-1,\"color\":\"\",\"filters\":[]},\"tableColor\":{\"color\":\"\",\"backgroundColor\":\"\",\"filters\":[]},\"unit\":\"\",\"dateFormat\":{},\"flash\":[],\"imageData\":[]},\"showMissingTime\":false,\"metric\":0,\"counterDep\":\"TOTAL_ROWS\",\"repeatCal\":true,\"formatStyle\":0,\"formatDecimal\":0,\"numLevel\":0,\"numSeparators\":false,\"used\":true,\"drillDimensions\":{}}},\"page\":0,\"realData\":false,\"allData\":false,\"templateChartColorChange\":false,\"detailSetting\":false,\"settings\":{\"chartAttr\":{\"graphic\":{\"dimensionId\":\"\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":-1,\"roundRadius\":-1,\"pointRadius\":-1,\"heatRadius\":-1,\"lineWidth\":-1,\"funnelWidth\":-1,\"gaugeRadius\":-1,\"lastSliderPosition\":0},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"allowOverlap\":false,\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"},\"entire\":{\"dimensionId\":\"entire\",\"color\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"gradient\":true,\"overlayEffect\":false,\"opacity\":-1,\"borderColor\":\"\",\"nonField\":{\"color\":\"\"},\"dimension\":{\"auto\":true,\"customize\":false,\"colors\":[],\"colorMap\":{}},\"measure\":{\"gradientType\":\"continuous\",\"name\":\"auto\",\"autoInterval\":true,\"count\":2,\"custom\":{\"min\":0,\"max\":0,\"ranges\":[]}},\"gauge\":{\"pointColor\":\"\",\"tickColor\":\"\",\"tickSlotColor\":\"\",\"hubColor\":\"\",\"hubBackgroundColor\":\"\",\"backgroundColor\":\"\"}},\"size\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"intervalWidth\":30,\"roundRadius\":0,\"pointRadius\":11,\"heatRadius\":40,\"square\":{\"width\":30,\"innerRadiusRatio\":0.5,\"convert2MultiPie\":false},\"lineWidth\":-1,\"text\":{\"size\":50,\"valid\":true},\"funnelWidth\":1,\"gaugeRadius\":0.7,\"pieRadius\":{\"sameRadius\":true,\"radius\":40,\"innerRadiusRatio\":0.75},\"lastSliderPosition\":-1},\"label\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"position\":\"outside\",\"showWay\":\"all\",\"allowOverlap\":false,\"autoAdjust\":\"hide\",\"hasPositionModified\":false,\"valid\":true},\"tooltip\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true,\"background\":\"\",\"forecastKey\":\"预测\",\"shared\":false},\"granularity\":{\"dimensionIds\":[],\"hasModified\":false,\"auto\":true},\"type\":\"interval\"}},\"chartStyle\":{\"legend\":{\"enabled\":true,\"fontStyle\":{\"auto\":true,\"type\":0,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"fontColor\":\"\",\"fontBold\":false,\"bold\":false,\"italic\":false,\"fontAlign\":0},\"borderColor\":\"transparent\",\"position\":\"right\"},\"axis\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"hGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"vGrid\":{\"enabled\":true,\"type\":\"solid\",\"color\":\"\",\"width\":1},\"adaptive\":{\"type\":\"standard\"}},\"tableStyle\":{\"form\":1,\"style\":0,\"themeColor\":null,\"showTitle\":false,\"freezeDim\":true,\"transmitLinkages\":false,\"expandRowHeader\":false,\"expandColHeader\":false,\"showRowSum\":true,\"showColSum\":true,\"showSequence\":false,\"textWrapper\":false,\"rowHeight\":25,\"rowCounts\":20,\"colCounts\":7,\"totalRows\":1000,\"sumRowText\":\"\",\"showChildRowSum\":true,\"showChildColSum\":true,\"headerTextWrapper\":false,\"headerRowHeight\":25,\"rowPosition\":\"bottom\",\"colPosition\":\"right\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"fontAlign\":null,\"fontColor\":null},\"body\":{\"fontFamily\":null,\"fontSize\":null,\"bold\":null,\"italic\":null,\"underline\":null,\"dimFontAlign\":null,\"tarFontAlign\":null,\"fontColor\":null}},\"metric\":{\"show\":true,\"position\":3,\"type\":2}},\"transmitLinkages\":false,\"tableAttr\":{\"equalDivideColumn\":false,\"color\":{\"all\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]},\"f1f9da64495a6743\":{\"dims\":[],\"color\":\"\",\"backgroundColor\":\"\",\"conditions\":[]}},\"shape\":{\"all\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]},\"f1f9da64495a6743\":{\"shape\":-1,\"color\":\"\",\"dims\":[],\"conditionsList\":[]}},\"filterValue\":{}},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleHeight\":25,\"nameStyleType\":1,\"gisBackground\":{\"show\":true,\"layer\":null,\"zoomIn\":\"放大\",\"zoomOut\":\"缩小\"}},\"linkage\":{},\"jump\":[],\"openJump\":true,\"facet\":{\"hCustomUnit\":false,\"vCustomUnit\":false,\"hUnit\":0,\"vUnit\":0,\"hCustomSize\":false,\"vCustomSize\":false,\"hSize\":0,\"vSize\":0},\"dimensionGroups\":{\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_NAME_2\":{\"group\":\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"dimensionIds\":[\"d20986640f019197\"]},\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_ID_3_0\":{\"group\":\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_ID_3_0\",\"dimensionIds\":[\"f1f9da64495a6743\"]}},\"drillOrder\":[],\"resultFilter\":[\"d20986640f019197\"],\"columnSize\":[],\"regionColumnSize\":[],\"uploadedImages\":[],\"wId\":\"89326c80be396f6f\",\"measures\":[{\"name\":\"NAME\",\"id\":\"kyligence[5f]NULLCS[5f]D_NAME\",\"type\":16,\"geoType\":0,\"transform\":false,\"transferName\":\"NAME\",\"copied\":false,\"drilled\":false,\"group\":{\"group_2\":{\"sort\":{\"details\":[],\"type\":2},\"filter\":{\"filterValue\":{\"type\":1,\"assist\":[\"分组1\",\"\"],\"value\":[\"July\",\"分组\"]},\"targetId\":\"89326c80be396f6f_kyligence[5f]NULLCS[5f]D_NAME_2\",\"filterType\":1},\"customGroup\":{\"value\":{\"details\":[{\"content\":[{\"value\":\"Alice\"},{\"value\":\"B\"},{\"value\":\"Billy\"}],\"id\":\"4a8fc652fa22fbed\",\"value\":\"分组\"},{\"content\":[{\"value\":\"Bob\"},{\"value\":\"Clay\"},{\"value\":\"Dewei\"}],\"id\":\"b619db2a53785904\",\"value\":\"分组1\"}],\"useOther\":\"\"},\"type\":2},\"repeatCal\":true,\"useDataBar\":false,\"showMissingTime\":false}}}],\"templateStyle\":{\"id\":\"DEFAULT\",\"theme\":\"bi-theme-default\",\"widgetGap\":1,\"templateBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"widgetBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleBackground\":{\"type\":\"color\",\"color\":\"\",\"imageId\":\"\"},\"titleFont\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":1},\"chart\":{\"chartColor\":[\"#ffbf53\",\"#04b1c2\",\"#f07474\",\"#c55784\",\"#9a5fb3\",\"#cf62d7\",\"#5e78ea\",\"#51b3f0\",\"#69d4dc\",\"#49b788\",\"#9ccc66\",\"#ffdb03\",\"#c18c00\",\"#363636\",\"#426fb3\",\"#66bf7f\",\"#f9cd76\",\"#392884\",\"#00ae71\",\"#93aad6\",\"#490761\",\"#faf14b\",\"#955305\",\"#016241\",\"#7388c1\",\"#8f1e20\",\"#d69b01\",\"#b7b7b7\",\"#511f90\",\"#99d0b9\",\"#c7c300\"],\"font\":{\"type\":1,\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\"},\"gradient\":[\"#4FDEFF\",\"#439DF7\",\"#526EFA\"]},\"table\":{\"tableStyle\":1,\"themeColor\":\"#CDE1FC\",\"font\":{\"type\":1,\"header\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"fontAlign\":2},\"body\":{\"fontFamily\":\"\\\"Microsoft YaHei\\\", PingFangSC-Regular\",\"fontSize\":12,\"bold\":false,\"italic\":false,\"underline\":false,\"fontColor\":\"\",\"dimFontAlign\":1,\"tarFontAlign\":3}}},\"controlTheme\":\"\"},\"filter\":{\"filterType\":34,\"filterValue\":[]},\"widgetIdValueMap\":{},\"parameter\":{},\"rowExpand\":[],\"headerExpand\":{},\"filterValues\":[],\"globalFilter\":null,\"sessionId\":\"848a8ed5-456c-48cf-bda7-3f252a4d5c27\",\"reportId\":\"ecf4554aa851409199fbf224068d0c32\"}}}";
+
+ @Test
+ public void testHandle(@Mocked HttpServletRequest request, @Mocked HttpServletResponse response) throws Exception {
+ StableManager.getContext().register(FineDashBoardServiceImpl.class);
+ StableManager.getContext().register(FineWidgetExecutorServiceImpl.class);
+ new MockUp() {
+ @Mock
+ public void check(WidgetBean widgetBean) throws FineEngineException {
+ }
+ };
+ new MockUp() {
+ @Mock
+ private FineRespond handleException(Exception e) {
+ return FineRespond.fail();
+ }
+ };
+ new MockUp() {
+ @Mock
+ private ReportBean getReportById(String reportId) throws Exception {
+ return new ReportBean();
+ }
+ };
+ new MockUp() {
+ @Mock
+ public PackPluginConfig getInstance() {
+ return new PackPluginConfig();
+ }
+
+ public int getSqlQueryTimeout() {
+ return 1;
+ }
+
+ public int getWidgetQueryTimeout() {
+ return 1;
+ }
+
+ public int getReportQueryMax() {
+ return 3;
+ }
+
+ public int getWidgetQueryMax() {
+ return 3;
+ }
+ };
+ new Expectations(FineDashBoardUtils.class) {
+ {
+ request.getInputStream();
+ result = new DelegatingServletInputStream(new ByteArrayInputStream(body.getBytes()));
+
+ FineDashBoardUtils.getUserFromReq(request, (String) any);
+ result = new User();
+
+ FineDashBoardUtils.isMobile(request);
+ result = false;
+
+ FineDashBoardUtils.getParameterFromRequest(request);
+ result = new Parameters.Builder().build();
+ }
+ };
+
+ new PackHttpHandler().handle(request, response);
+ }
+}
\ No newline at end of file