shiqian 3 anni fa
parent
commit
100b6f58fb
100 ha cambiato i file con 6975 aggiunte e 40 eliminazioni
  1. 5 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/CacheConstants.java
  2. 50 40
      boman-gateway/src/main/java/com/boman/gateway/filter/AuthFilter.java
  3. 51 0
      boman-report/src/main/java/com/boman/report/control/JimuController.java
  4. 35 0
      boman-report/src/main/java/org/jeecg/modules/jmreport/BomanReportApplication.java
  5. 1057 0
      boman-report/src/main/java/org/jeecg/modules/jmreport/desreport/a/a.java
  6. 6 0
      boman-report/src/main/resources/default-config.properties
  7. 1 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/axios/axios.min.js
  8. 0 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/axios/qs.min.js
  9. 265 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/html2canvas/canvas2image.js
  10. 19 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/html2canvas/html2canvas.min.js
  11. 24 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.svg
  12. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.ttf
  13. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.woff
  14. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.woff2
  15. 0 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/iview.css
  16. 0 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/iview.min.js
  17. 5 0
      boman-report/src/main/resources/static/jmreport/desreport_/cdn/vue/vue.min.js
  18. 100 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.background.json
  19. 149 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.multi.horizontal.json
  20. 149 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.multi.json
  21. 140 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.negative.json
  22. 108 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.simple.json
  23. 125 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.stack.horizontal.json
  24. 158 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.stack.json
  25. 1459 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/echartslist.json
  26. 78 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/funnel.pyramid.json
  27. 78 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/funnel.simple.json
  28. 76 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/gauge.simple.json
  29. 77 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/gauge.simple180.json
  30. 169 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/graph.simple.json
  31. 117 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.area.json
  32. 161 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.multi.json
  33. 116 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.simple.json
  34. 117 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.smooth.json
  35. 117 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.step.json
  36. 85 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/map.scatter.json
  37. 47 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/map.simple.json
  38. 187 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/mixed.linebar.json
  39. 101 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pictorial.spirits.json
  40. 63 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pie.doughnut.json
  41. 62 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pie.rose.json
  42. 62 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pie.simple.json
  43. 79 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/radar.basic.json
  44. 97 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/radar.custom.json
  45. 158 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/scatter.bubble.json
  46. 118 0
      boman-report/src/main/resources/static/jmreport/desreport_/chartjson/scatter.simple.json
  47. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/authority/no-authority.png
  48. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-1.jpg
  49. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-2.jpg
  50. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-3.jpg
  51. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-4.jpg
  52. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-5.jpg
  53. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-5.png
  54. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-6.png
  55. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-7.png
  56. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel-simple.jpg
  57. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel.jpg
  58. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel.png
  59. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel.pyramid.png
  60. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/gauge.png
  61. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/gauge180.png
  62. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/graph.png
  63. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-1.jpg
  64. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-2.jpg
  65. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-3.jpg
  66. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-4.jpg
  67. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-4.png
  68. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-5.jpg
  69. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-6.png
  70. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/map.png
  71. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/map_scatter.png
  72. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/mix-line-bar.jpg
  73. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pictorialBar-spirit.jpg
  74. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pictorialBar-spirit.png
  75. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pictorialIcon/spirits.png
  76. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-1.jpg
  77. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-1.png
  78. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-2.jpg
  79. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-2.png
  80. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-3.jpg
  81. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-3.png
  82. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/radar-2.png
  83. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/radar.jpg
  84. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/radar.png
  85. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/scatter-simple.jpg
  86. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/scatter_bubble.png
  87. 17 0
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/58eaeb4e52248a5c75936c6f4c33a370.svg
  88. 104 0
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/cust.css
  89. 17 0
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/ece3e4fa05d4292823fdef970eaf1233.svg
  90. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/0540532988b0d225f543519753f72473.png
  91. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/0c74968b940136baec8566b2d95adeed.png
  92. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/127a607b97c089a43dc00347b09fea99.png
  93. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/1d1bc9c519706fbb04e69f9bc367f398.png
  94. 749 0
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/2b9b4872cd25494093c1eb14f0264a0b.svg
  95. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/30e25c2abce295834a60fd9637bb4e0a.png
  96. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/4319ed3209e5999879d00e2ea7eef42d.png
  97. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/4b6b5c111a1a164649257c1d4bfbf784.png
  98. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/50ddfa9d040f3585bd86a5f72c9cafe6.png
  99. BIN
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/53b3da298ce02fdde6fd5a09a7624b4a.png
  100. 17 0
      boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/58eaeb4e52248a5c75936c6f4c33a370.svg

+ 5 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/CacheConstants.java

@@ -22,6 +22,11 @@ public class CacheConstants
      */
     public final static String LOGIN_TOKEN_KEY = "login_tokens:";
 
+    /**
+     * 权限缓存前缀
+     */
+    public final static String TOKEN = "token";
+
     /**
      * 用户ID字段
      */

+ 50 - 40
boman-gateway/src/main/java/com/boman/gateway/filter/AuthFilter.java

@@ -1,6 +1,14 @@
 package com.boman.gateway.filter;
 
-import javax.annotation.Resource;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.utils.ServletUtils;
+import com.boman.common.core.utils.StringUtils;
+import com.boman.common.redis.service.RedisService;
+import com.boman.domain.constant.CacheConstants;
+import com.boman.domain.constant.Constants;
+import com.boman.domain.dto.R;
+import com.boman.gateway.config.properties.IgnoreWhiteProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,28 +22,23 @@ import org.springframework.http.MediaType;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.server.ServerWebExchange;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.boman.domain.constant.CacheConstants;
-import com.boman.domain.constant.Constants;
-import com.boman.domain.dto.R;
-import com.boman.common.core.utils.ServletUtils;
-import com.boman.common.core.utils.StringUtils;
-import com.boman.common.redis.service.RedisService;
-import com.boman.gateway.config.properties.IgnoreWhiteProperties;
 import reactor.core.publisher.Mono;
 
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 网关鉴权
- * 
+ *
  * @author ruoyi
  */
 @Component
-public class AuthFilter implements GlobalFilter, Ordered
-{
+public class AuthFilter implements GlobalFilter, Ordered {
     private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
-    
+
     private final static long EXPIRE_TIME = Constants.TOKEN_EXPIRE * 60;
 
     // 排除过滤的 uri 地址,nacos自行添加
@@ -44,53 +47,48 @@ public class AuthFilter implements GlobalFilter, Ordered
 
     @Resource(name = "stringRedisTemplate")
     private ValueOperations<String, String> sops;
-    
+
     @Autowired
     private RedisService redisService;
 
     @Override
-    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain)
-    {
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         String url = exchange.getRequest().getURI().getPath();
         // 跳过不需要验证的路径
-        if (StringUtils.matches(url, ignoreWhite.getWhites()))
-        {
+        if (StringUtils.matches(url, ignoreWhite.getWhites())) {
             return chain.filter(exchange);
         }
+
         String token = getToken(exchange.getRequest());
-        if (StringUtils.isBlank(token))
-        {
+        if (StringUtils.isBlank(token)) {
             return setUnauthorizedResponse(exchange, "令牌不能为空");
         }
+
         String userStr = sops.get(getTokenKey(token));
-        if (StringUtils.isNull(userStr))
-        {
+        if (StringUtils.isNull(userStr)) {
             return setUnauthorizedResponse(exchange, "登录状态已过期");
         }
+
         JSONObject obj = JSONObject.parseObject(userStr);
         String userid = obj.getString("userid");
         String username = obj.getString("username");
-/*        if (StringUtils.isBlank(userid) || StringUtils.isBlank(username))
-        {
-            return setUnauthorizedResponse(exchange, "令牌验证失败");
-        }*/
-        if (StringUtils.isBlank(username))
-        {
+
+        if (StringUtils.isBlank(username)) {
             return setUnauthorizedResponse(exchange, "令牌验证失败");
         }
 
         // 设置过期时间
         redisService.expire(getTokenKey(token), EXPIRE_TIME);
         // 设置用户信息到请求
-        ServerHttpRequest mutableReq = exchange.getRequest().mutate().header(CacheConstants.DETAILS_USER_ID, userid)
+        ServerHttpRequest mutableReq = exchange.getRequest().mutate()
+                .header(CacheConstants.DETAILS_USER_ID, userid)
                 .header(CacheConstants.DETAILS_USERNAME, ServletUtils.urlEncode(username)).build();
         ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
 
         return chain.filter(mutableExchange);
     }
 
-    private Mono<Void> setUnauthorizedResponse(ServerWebExchange exchange, String msg)
-    {
+    private Mono<Void> setUnauthorizedResponse(ServerWebExchange exchange, String msg) {
         ServerHttpResponse response = exchange.getResponse();
         response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
         response.setStatusCode(HttpStatus.OK);
@@ -103,27 +101,39 @@ public class AuthFilter implements GlobalFilter, Ordered
         }));
     }
 
-    private String getTokenKey(String token)
-    {
+    private String getTokenKey(String token) {
         return CacheConstants.LOGIN_TOKEN_KEY + token;
     }
 
     /**
      * 获取请求token
      */
-    private String getToken(ServerHttpRequest request)
-    {
+    private String getToken(ServerHttpRequest request) {
         String token = request.getHeaders().getFirst(CacheConstants.HEADER);
-        if (StringUtils.isNotEmpty(token) && token.startsWith(CacheConstants.TOKEN_PREFIX))
-        {
+        if (null != token && !"".equals(token) && token.startsWith(CacheConstants.TOKEN_PREFIX)) {
             token = token.replace(CacheConstants.TOKEN_PREFIX, "");
         }
+
+        // 可能放到路径后面
+        if (StringUtils.isEmpty(token)) {
+            MultiValueMap<String, String> queryParams = request.getQueryParams();
+            for (Map.Entry<String, List<String>> entry : queryParams.entrySet()) {
+                if (CacheConstants.TOKEN.equals(entry.getKey())) {
+                    List<String> value = entry.getValue();
+                    if (value == null || value.isEmpty()) {
+                        return null;
+                    }
+
+                    return value.get(0);
+                }
+            }
+        }
+
         return token;
     }
 
     @Override
-    public int getOrder()
-    {
+    public int getOrder() {
         return -200;
     }
 }

+ 51 - 0
boman-report/src/main/java/com/boman/report/control/JimuController.java

@@ -0,0 +1,51 @@
+package com.boman.report.control;
+
+import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.dto.ClockOnDto;
+import org.jeecg.modules.jmreport.common.util.oConvertUtils;
+import org.jeecg.modules.jmreport.common.vo.Result;
+import org.jeecg.modules.jmreport.config.client.JmReportTokenClient;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+import java.util.List;
+import java.util.Map;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
+
+/**
+ * @author shiqian
+ * @date 2021年08月16日 14:54
+ **/
+@RequestMapping("jmreport/")
+@RestController
+public class JimuController {
+
+    private static final Logger a = LoggerFactory.getLogger(JimuController.class);
+
+    @Autowired
+    private JmReportTokenClient jimuTokenClient;
+    @Autowired
+    private IJmReportDbService reportDbService;
+
+    @PostMapping({"/executeSelectApiBoman"})
+    public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestParam("api") String paramString1, @RequestParam("method") String paramString2) {
+        String str1 = paramHttpServletRequest.getParameter("token");
+        String str2 = paramHttpServletRequest.getParameter("apiConvert");
+        String str3 = paramHttpServletRequest.getParameter("paramArray");
+        if (oConvertUtils.isEmpty(str1)) {
+            str1 = this.jimuTokenClient.getToken();
+        }
+        a.info("api= " + paramString1 + ", method= " + paramString2 + ", token= " + str1);
+        Map<String, Object> map = this.reportDbService.executeSelectApi(paramString1, paramString2, str1, str2, str3);
+        List<Map> list = this.reportDbService.parseData(map);
+        return Result.OK(list);
+    }
+
+
+}

+ 35 - 0
boman-report/src/main/java/org/jeecg/modules/jmreport/BomanReportApplication.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.jmreport;
+
+import com.boman.common.security.annotation.EnableCustomConfig;
+import com.boman.common.security.annotation.EnableRyFeignClients;
+import com.boman.common.swagger.annotation.EnableCustomSwagger2;
+import org.springframework.boot.SpringApplication;
+import org.springframework.cloud.client.SpringCloudApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * web-core
+ *
+ * @author shiqian
+ */
+@EnableCustomConfig
+@EnableCustomSwagger2
+@EnableRyFeignClients
+@SpringCloudApplication
+@ComponentScan(value = {"com.boman", "org.jeecg.modules.jmreport"})
+public class BomanReportApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(BomanReportApplication.class, args);
+        System.out.println();
+        System.out.println();
+        System.out.println("---------------------------------------------- boman-report 模块启动成功----------------------------------------------");
+        System.out.println("---------------------------------------------- boman-report 模块启动成功----------------------------------------------");
+        System.out.println("---------------------------------------------- boman-report 模块启动成功----------------------------------------------");
+        System.out.println("---------------------------------------------- boman-report 模块启动成功----------------------------------------------");
+        System.out.println("---------------------------------------------- boman-report 模块启动成功----------------------------------------------");
+        System.out.println("---------------------------------------------- boman-report 模块启动成功----------------------------------------------");
+        System.out.println();
+        System.out.println();
+    }
+}

+ 1057 - 0
boman-report/src/main/java/org/jeecg/modules/jmreport/desreport/a/a.java

@@ -0,0 +1,1057 @@
+package org.jeecg.modules.jmreport.desreport.a;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Scanner;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.jeecg.modules.jmreport.api.data.IDataSetFactory;
+import org.jeecg.modules.jmreport.common.annotation.JimuLoginRequired;
+import org.jeecg.modules.jmreport.common.expetion.JimuReportException;
+import org.jeecg.modules.jmreport.common.util.CommonUtils;
+import org.jeecg.modules.jmreport.common.util.MinioUtil;
+import org.jeecg.modules.jmreport.common.util.OssBootUtil;
+import org.jeecg.modules.jmreport.common.util.ViewFreemarker;
+import org.jeecg.modules.jmreport.common.util.oConvertUtils;
+import org.jeecg.modules.jmreport.common.vo.JmDictModel;
+import org.jeecg.modules.jmreport.common.vo.Result;
+import org.jeecg.modules.jmreport.config.JmReportBaseConfig;
+import org.jeecg.modules.jmreport.config.client.JmReportTokenClient;
+import org.jeecg.modules.jmreport.config.oss.JmReportUploadConfig;
+import org.jeecg.modules.jmreport.desreport.entity.JimuReport;
+import org.jeecg.modules.jmreport.desreport.entity.JmReportDb;
+import org.jeecg.modules.jmreport.desreport.entity.JmReportDbField;
+import org.jeecg.modules.jmreport.desreport.entity.JmReportDbParam;
+import org.jeecg.modules.jmreport.desreport.model.JmPage;
+import org.jeecg.modules.jmreport.desreport.model.QueryVO;
+import org.jeecg.modules.jmreport.desreport.render.utils.FreeMarkerUtils;
+import org.jeecg.modules.jmreport.desreport.service.IJimuReportService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbFieldService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbParamService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbSourceService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportExportExcel;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportExportPdf;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportMapService;
+import org.jeecg.modules.jmreport.dyndb.vo.JmreportDynamicDataSourceVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.util.Base64Utils;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.HandlerMapping;
+
+@RestController("designReportController")
+@RequestMapping({"/jmreport"})
+public class a {
+    private static final Logger a = LoggerFactory.getLogger(a.class);
+
+    @Value("classpath:static/jmreport/json/excel.virtual.json")
+    private Resource virtualJson;
+
+    @Autowired
+    private IJimuReportService jmReportDesignService;
+
+    @Autowired
+    private IJmReportDbService reportDbService;
+
+    @Autowired
+    private IJmReportDbParamService jmReportDbParamService;
+
+    @Autowired
+    private IJmReportDbFieldService jmReportDbFieldService;
+
+    @Autowired
+    private IJmReportDbSourceService jmReportDbSourceService;
+
+    @Autowired
+    private IJmReportMapService jmReportMapService;
+
+    @Autowired
+    private IJmReportExportExcel exportExcel;
+
+    @Autowired
+    private JmReportTokenClient jimuTokenClient;
+
+    @Autowired
+    private JmReportUploadConfig jimuReportUploadConfig;
+
+    @Autowired
+    private JmReportBaseConfig jmBaseConfig;
+
+    @Autowired
+    private IJmReportExportPdf jmReportExportPdf;
+
+    @RequestMapping({"/demo"})
+    public void a(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) throws Exception {
+        a.debug(" --- --- ");
+        HashMap<Object, Object> hashMap = new HashMap<>();
+        a(paramHttpServletRequest, paramHttpServletResponse, hashMap, "jmreport/desreport/demo.ftl");
+    }
+
+    @RequestMapping({"/list"})
+    public void b(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) throws Exception {
+        a.debug(" --- --- ");
+        HashMap<Object, Object> hashMap = new HashMap<>();
+        a(paramHttpServletRequest, paramHttpServletResponse, hashMap, "jmreport/desreport/list.ftl");
+    }
+
+    @PostMapping({"/excelCreate"})
+    @JimuLoginRequired
+    public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestBody JimuReport paramJimuReport) {
+        a.debug("============EXCEL);
+        try {
+            String str = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+            paramJimuReport.setCreateBy(str);
+            paramJimuReport = this.jmReportDesignService.excelCreate(paramJimuReport);
+        } catch (Exception exception) {
+            a.error(exception.getMessage(), exception);
+            return Result.error(exception.getMessage());
+        }
+        return Result.OK(paramJimuReport);
+    }
+
+    @PostMapping({"/excelQueryName"})
+    @JimuLoginRequired
+    public Result<?> b(HttpServletRequest paramHttpServletRequest, @RequestBody JimuReport paramJimuReport) {
+        boolean bool = this.jmReportDesignService.excelQueryName(paramJimuReport);
+        if (bool)
+            return Result.OK();
+        return Result.FAIL(", Boolean.valueOf(bool));
+    }
+
+    @GetMapping({"/excelQuery"})
+    @JimuLoginRequired
+    public Result<?> a(@RequestParam(name = "reportType", required = false) String paramString1, @RequestParam(name = "name") String paramString2, @RequestParam(name = "pageNo", defaultValue = "1") Integer paramInteger1, @RequestParam(name = "pageSize", defaultValue = "10") Integer paramInteger2, HttpServletRequest paramHttpServletRequest) {
+        a.debug("============EXCEL);
+        return this.jmReportDesignService.excelQuery(paramString1, paramString2, paramHttpServletRequest, paramInteger1, paramInteger2);
+    }
+
+    @GetMapping({"/excelQueryByTemplate"})
+    public Result<?> b(@RequestParam(name = "reportType", required = false) String paramString1, @RequestParam(name = "name") String paramString2, @RequestParam(name = "pageNo", defaultValue = "1") Integer paramInteger1, @RequestParam(name = "pageSize", defaultValue = "10") Integer paramInteger2, HttpServletRequest paramHttpServletRequest) {
+        return this.jmReportDesignService.excelQueryByTemplate(paramString1, paramString2, paramHttpServletRequest, paramInteger1, paramInteger2);
+    }
+
+    @GetMapping({"/userinfo"})
+    @JimuLoginRequired
+    public Result<?> a(HttpServletRequest paramHttpServletRequest) {
+        Result result = Result.OK();
+        String str = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+        result.setMessage(str);
+        return Result.OK(result);
+    }
+
+    public void c(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) throws Exception {
+        a.debug(" --- --- ");
+        HashMap<Object, Object> hashMap = new HashMap<>();
+        a(paramHttpServletRequest, paramHttpServletResponse, hashMap, "jmreport/desreport/index.ftl");
+    }
+
+    @RequestMapping({"/index/{id}"})
+    public void a(@PathVariable("id") String paramString, HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) throws Exception {
+        a.debug(" --- --- ");
+        HashMap<Object, Object> hashMap = new HashMap<>();
+        if (oConvertUtils.isNotEmpty(paramString))
+            hashMap.put("id", paramString);
+        hashMap.put("mode", this.jmBaseConfig.getMode());
+        String str = "jmreport/desreport/index.ftl";
+        a.info("" + this.jmBaseConfig.getSaas() + " ," + this.jimuTokenClient.getToken());
+        if (this.jmBaseConfig.getSaas().booleanValue() && oConvertUtils.isNotEmpty(this.jimuTokenClient.getToken())) {
+            String str1 = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+            JimuReport jimuReport = this.jmReportDesignService.getById(paramString);
+            if (jimuReport != null && !str1.equals(jimuReport.getCreateBy()))
+                str = "jmreport/desreport/authority.ftl";
+        }
+        a(paramHttpServletRequest, paramHttpServletResponse, hashMap, str);
+    }
+
+    @RequestMapping({"/view/{id}"})
+    public void b(@PathVariable("id") String paramString, HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) throws Exception {
+        HashMap<Object, Object> hashMap = new HashMap<>();
+        if (oConvertUtils.isNotEmpty(paramString))
+            hashMap.put("id", paramString);
+        hashMap.put("shareView", "0");
+        a(paramHttpServletRequest, paramHttpServletResponse, hashMap, "jmreport/desreport/view.ftl");
+    }
+
+    @RequestMapping({"/shareView/{id}"})
+    public void a(@PathVariable("id") String paramString, HttpServletResponse paramHttpServletResponse, HttpServletRequest paramHttpServletRequest) throws Exception {
+        HashMap<Object, Object> hashMap = new HashMap<>();
+        if (oConvertUtils.isNotEmpty(paramString))
+            hashMap.put("id", paramString);
+        hashMap.put("shareView", "1");
+        a(paramHttpServletRequest, paramHttpServletResponse, hashMap, "jmreport/desreport/view.ftl");
+    }
+
+    @PostMapping({"/addViewCount/{id}"})
+    public Result<?> a(@PathVariable("id") String paramString) {
+        Integer integer = Integer.valueOf(this.jmReportDesignService.updateViewCount(paramString));
+        boolean bool = false;
+        if (integer.intValue() > 0)
+            bool = true;
+        return Result.OK("", Boolean.valueOf(bool));
+    }
+
+    @GetMapping({"/checkParam/{id}"})
+    public Result<List<JmReportDbParam>> b(@PathVariable(name = "id") String paramString) {
+        Result<List<JmReportDbParam>> result = new Result();
+        List list = this.jmReportDesignService.queryReportParam(paramString);
+        if (list == null || list.size() == 0) {
+            result.setSuccess(false);
+        } else {
+            result.setSuccess(true);
+            result.setResult(list);
+        }
+        return result;
+    }
+
+    @RequestMapping({"/show"})
+    public Result<?> a(@RequestParam(name = "id") String paramString, HttpServletRequest paramHttpServletRequest) {
+        String str = paramHttpServletRequest.getParameter("params");
+        try {
+            return this.jmReportDesignService.show(paramString, str);
+        } catch (Exception exception) {
+            a.error(exception.getMessage(), exception);
+            return Result.error(exception.getMessage());
+        }
+    }
+
+    @PostMapping({"/save"})
+    @JimuLoginRequired
+    public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestBody JSONObject paramJSONObject) {
+        try {
+            JimuReport jimuReport = this.jmReportDesignService.saveReport(paramJSONObject, paramHttpServletRequest);
+            return Result.OK(jimuReport);
+        } catch (Exception exception) {
+            a.error(exception.getMessage(), exception);
+            return Result.error(");
+        }
+    }
+
+    @GetMapping({"/get/{id}"})
+    @JimuLoginRequired
+    public Result<?> a(HttpServletRequest paramHttpServletRequest, @PathVariable("id") String paramString) {
+        a.debug("============EXCEL JSON);
+                JimuReport jimuReport = this.jmReportDesignService.getById(paramString);
+        return Result.OK(jimuReport);
+    }
+
+    @GetMapping({"/mockPieData"})
+    public Result<?> a() {
+        a.debug("============);
+                ArrayList<HashMap<Object, Object>> arrayList = new ArrayList();
+        String[] arrayOfString = { "IE", "Safari", "Firefox", "Opera", "Chrome" };
+        Random random = new Random();
+        for (String str : arrayOfString) {
+            HashMap<Object, Object> hashMap = new HashMap<>();
+            hashMap.put("name", str);
+            hashMap.put("value", Integer.valueOf(random.nextInt(1901) + 100));
+            arrayList.add(hashMap);
+        }
+        return Result.OK(arrayList);
+    }
+
+    @GetMapping({"/mockChartData"})
+    public Result<?> b() {
+        a.debug("============);
+                ArrayList<HashMap<Object, Object>> arrayList = new ArrayList();
+        String[] arrayOfString = { ", ", ", ", "};
+                Random random = new Random();
+        for (String str : arrayOfString) {
+            HashMap<Object, Object> hashMap = new HashMap<>();
+            hashMap.put("name", str);
+            ArrayList<Integer> arrayList1 = new ArrayList();
+            for (byte b = 0; b < 7; b++)
+                arrayList1.add(Integer.valueOf(random.nextInt(1901) + 100));
+            hashMap.put("data", arrayList1);
+            arrayList.add(hashMap);
+        }
+        return Result.OK(arrayList);
+  }
+
+        @PostMapping({"/upload"})
+        public Result<?> d(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) {
+            Result<?> result = new Result();
+            try {
+                MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)paramHttpServletRequest;
+                MultipartFile multipartFile = multipartHttpServletRequest.getFile("file");
+                String str1 = paramHttpServletRequest.getParameter("bizType");
+                if (oConvertUtils.isEmpty(str1))
+                    str1 = this.jimuReportUploadConfig.getUploadType();
+                String str2 = "";
+                a.debug(" " + str1);
+                if ("alioss".equals(str1)) {
+                    a.debug(" alioss");
+                    str2 = OssBootUtil.upload(multipartFile, "designreport/images");
+                } else if ("minio".equals(str1)) {
+                    a.debug(" minio");
+                    str2 = MinioUtil.upload(multipartFile, "designreport/images");
+                } else if ("local".equals(str1)) {
+                    a.debug("local");
+                    str2 = a(multipartFile, "excel_online");
+                }
+                a.debug(", str2);
+                        result.setMessage(str2);
+                result.setSuccess(true);
+            } catch (Exception exception) {
+                result.setSuccess(false);
+                result.setMessage("");
+                a.error(exception.getMessage(), exception);
+            }
+            return result;
+        }
+
+        @CrossOrigin
+        @GetMapping({"/img/**"})
+        public void e(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) {
+            String str = e(paramHttpServletRequest);
+            BufferedInputStream bufferedInputStream = null;
+            ServletOutputStream servletOutputStream = null;
+            try {
+                str = str.replace("..", "");
+                if (str.endsWith(","))
+                    str = str.substring(0, str.length() - 1);
+                paramHttpServletResponse.setContentType("image/jpeg;charset=utf-8");
+                String str1 = this.jimuReportUploadConfig.getPath().getUpload();
+                String str2 = str1 + File.separator + str;
+                bufferedInputStream = new BufferedInputStream(new FileInputStream(str2));
+                servletOutputStream = paramHttpServletResponse.getOutputStream();
+                byte[] arrayOfByte = new byte[1024];
+                int i;
+                while ((i = bufferedInputStream.read(arrayOfByte)) > 0)
+                    servletOutputStream.write(arrayOfByte, 0, i);
+                paramHttpServletResponse.flushBuffer();
+            } catch (IOException iOException) {
+                a.error("+ iOException.getMessage(), iOException);
+            } finally {
+                if (bufferedInputStream != null)
+                    try {
+                        bufferedInputStream.close();
+                    } catch (IOException iOException) {
+                        a.error(iOException.getMessage(), iOException);
+                    }
+                if (servletOutputStream != null)
+                    try {
+                        servletOutputStream.close();
+                    } catch (IOException iOException) {
+                        a.error(iOException.getMessage(), iOException);
+                    }
+            }
+        }
+
+        private String a(File paramFile) {
+            Scanner scanner = null;
+            StringBuilder stringBuilder = new StringBuilder();
+            try {
+                scanner = new Scanner(paramFile, "utf-8");
+                while (scanner.hasNextLine())
+                    stringBuilder.append(scanner.nextLine());
+            } catch (Exception exception) {
+                exception.printStackTrace();
+            } finally {
+                if (scanner != null)
+                    scanner.close();
+            }
+            return stringBuilder.toString();
+        }
+
+        private void a(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Map<String, String> paramMap, String paramString) throws Exception {
+            try {
+                paramMap.put("base", paramHttpServletRequest.getContextPath());
+                paramMap.put("baseURL", d.a(paramHttpServletRequest));
+                a.info("freemarker customPrePath: {}", oConvertUtils.getString(paramHttpServletRequest.getAttribute("customPrePath"), ""));
+                paramMap.put("customPrePath", oConvertUtils.getString(paramHttpServletRequest.getAttribute("customPrePath"), ""));
+                paramMap.put("reportConfig", JSON.toJSONString(this.jmBaseConfig));
+            } catch (Exception exception) {
+                exception.printStackTrace();
+                paramMap.put("message", exception.getMessage());
+            }
+            ViewFreemarker.view(paramHttpServletRequest, paramHttpServletResponse, paramString, paramMap);
+        }
+
+        private static String e(HttpServletRequest paramHttpServletRequest) {
+            String str1 = (String)paramHttpServletRequest.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
+            String str2 = (String)paramHttpServletRequest.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
+            return (new AntPathMatcher()).extractPathWithinPattern(str2, str1);
+        }
+
+        @PostMapping({"/loadTable"})
+        public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestParam("dbSource") String paramString, @RequestParam(name = "pageNo", defaultValue = "1") Integer paramInteger1, @RequestParam(name = "pageSize", defaultValue = "50") Integer paramInteger2) {
+            a.debug("============);
+            if (oConvertUtils.isNotEmpty(paramString)) {
+                JmreportDynamicDataSourceVo jmreportDynamicDataSourceVo = this.jmReportDbSourceService.getByDbKey(paramString);
+                if (jmreportDynamicDataSourceVo == null)
+                    return Result.error(");
+            }
+            List list = this.reportDbService.loadDataSourceTable(paramString);
+            Map map = e.a(list, paramInteger1, paramInteger2);
+            return Result.OK(map);
+        }
+
+        @PostMapping({"/loadTableData"})
+        public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestParam(value = "dbSource", required = false) String paramString1, @RequestParam(value = "tableName", required = false) String paramString2, @RequestParam(value = "pageNo", required = false) Integer paramInteger1, @RequestParam(value = "pageSize", required = false) Integer paramInteger2, @RequestParam(value = "sql", required = false) String paramString3, @RequestParam("paramArray") String paramString4) {
+            a.debug("============);
+            if (oConvertUtils.isEmpty(paramString1) && this.jmBaseConfig.getSaas().booleanValue())
+                return Result.error(1001, ");
+            if (oConvertUtils.isNotEmpty(paramString1)) {
+                JmreportDynamicDataSourceVo jmreportDynamicDataSourceVo = this.jmReportDbSourceService.getByDbKey(paramString1);
+                if (jmreportDynamicDataSourceVo == null)
+                    return Result.error(");
+            }
+            Map map = null;
+            try {
+                map = this.reportDbService.loadTableData(paramString1, paramString2, paramInteger1, paramInteger2, paramString3, paramString4);
+            } catch (Exception exception) {
+                exception.printStackTrace();
+                return Result.error("SQL{}" + exception.getMessage());
+            }
+            return Result.OK(map);
+        }
+
+        @PostMapping({"/queryFieldBySql"})
+        public Result<?> a(@RequestBody JSONObject paramJSONObject) {
+            a.debug("============);
+                    String str1 = paramJSONObject.getString("sql");
+            String str2 = paramJSONObject.getString("dbSource");
+            Object object = paramJSONObject.get("paramArray");
+            String str3 = paramJSONObject.getString("type");
+            Integer integer = Integer.valueOf(0);
+            JmreportDynamicDataSourceVo jmreportDynamicDataSourceVo = null;
+            if (oConvertUtils.isEmpty(str2) && this.jmBaseConfig.getSaas().booleanValue())
+                return Result.error(1001, ");
+            if (oConvertUtils.isNotEmpty(str2)) {
+                jmreportDynamicDataSourceVo = this.jmReportDbSourceService.getByDbKey(str2);
+                integer = jmreportDynamicDataSourceVo.getConnectTimes();
+                if (integer != null && integer.intValue() > 5)
+                    return Result.error(");
+                if (jmreportDynamicDataSourceVo == null)
+                    return Result.error(");
+            }
+            try {
+                Map map = this.reportDbService.parseReportSql(str1, str2, object, str3);
+                if (map.get("message") != null)
+                    return Result.OK(map);
+                return Result.OK(", map);
+            } catch (Exception exception) {
+                if (exception instanceof JimuReportException) {
+                    JimuReportException jimuReportException = (JimuReportException)exception;
+                    return Result.error(jimuReportException.getExceptionCode(), jimuReportException.getMessage());
+                }
+                return Result.error(exception.getMessage());
+            }
+        }
+
+        @PostMapping({"/queryFieldByBean"})
+        public Result<?> b(@RequestBody JSONObject paramJSONObject) {
+            a.debug("============);
+                    String str1 = paramJSONObject.getString("javaType");
+            String str2 = paramJSONObject.getString("javaValue");
+            Boolean bool = paramJSONObject.getBoolean("isPage");
+            JSONObject jSONObject = paramJSONObject.getJSONObject("param");
+            Map map = d.a(jSONObject);
+            try {
+                Object object = d.c(str1, str2);
+                if (object != null && object instanceof IDataSetFactory) {
+                    IDataSetFactory iDataSetFactory = (IDataSetFactory)object;
+                    List list = d.a(iDataSetFactory, map, bool);
+                    if (list == null || list.size() == 0)
+                        return Result.error(");
+                    return Result.OK(", list);
+                }
+                return Result.error("javabean);
+            } catch (Exception exception) {
+                return Result.error(exception.getMessage());
+            }
+        }
+
+        @PostMapping({"/executeSelectApi"})
+        @JimuLoginRequired
+        public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestParam("api") String paramString1, @RequestParam("method") String paramString2) {
+            String str1 = paramHttpServletRequest.getParameter("token");
+            String str2 = paramHttpServletRequest.getParameter("apiConvert");
+            String str3 = paramHttpServletRequest.getParameter("paramArray");
+            if (oConvertUtils.isEmpty(str1))
+                str1 = this.jimuTokenClient.getToken();
+            a.info("api= " + paramString1 + ", method= " + paramString2 + ", token= " + str1);
+            Map map = this.reportDbService.executeSelectApi(paramString1, paramString2, str1, str2, str3);
+            List list = this.reportDbService.parseData(map);
+            return Result.OK(list);
+        }
+
+        @PostMapping({"/saveDb"})
+        @JimuLoginRequired
+        public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestBody JmReportDb paramJmReportDb) {
+            a.debug("============saveDb==========");
+            try {
+                String str = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+                paramJmReportDb.setCreateBy(str);
+                Date date = new Date();
+                paramJmReportDb.setCreateTime(date);
+                paramJmReportDb.setUpdateTime(date);
+                paramJmReportDb = this.reportDbService.saveDb(paramJmReportDb);
+            } catch (Exception exception) {
+                a.error(exception.getMessage(), exception);
+                return Result.error(exception.getMessage());
+            }
+            return Result.OK(paramJmReportDb);
+        }
+
+        @GetMapping({"/field/tree/{reportId}"})
+        @JimuLoginRequired
+        public Result<?> b(HttpServletRequest paramHttpServletRequest, @PathVariable("reportId") String paramString) {
+            a.debug("============fieldTree==========");
+            List list = new ArrayList();
+            try {
+                list = this.reportDbService.fieldTree(paramString);
+            } catch (Exception exception) {
+                exception.printStackTrace();
+            }
+            return Result.OK(list);
+        }
+
+        @GetMapping({"/queryIsPage/{reportId}"})
+        @JimuLoginRequired
+        public Result<?> c(HttpServletRequest paramHttpServletRequest, @PathVariable("reportId") String paramString) {
+            boolean bool = this.reportDbService.queryIsPage(paramString);
+            return Result.OK(Boolean.valueOf(bool));
+        }
+
+        @GetMapping({"loadDbData/{dbId}"})
+        @JimuLoginRequired
+        public Result<?> d(HttpServletRequest paramHttpServletRequest, @PathVariable("dbId") String paramString) {
+            a.debug("============loadDbData==========");
+            Map map = this.reportDbService.loadDbData(paramString);
+            return Result.OK(map);
+        }
+
+        @GetMapping({"initDataSource"})
+        @JimuLoginRequired
+        public Result<?> b(HttpServletRequest paramHttpServletRequest) {
+            a.debug("============initDataSource==========");
+            String str = "";
+            if (this.jmBaseConfig.getSaas().booleanValue())
+                str = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+            List list = this.reportDbService.initDataSource(str);
+            return Result.OK(list);
+        }
+
+        @GetMapping({"/delDbData/{dbId}"})
+        @JimuLoginRequired
+        public Result<?> e(HttpServletRequest paramHttpServletRequest, @PathVariable("dbId") String paramString) {
+            a.debug("============delDbData==========");
+            this.reportDbService.delDbData(paramString);
+            return Result.OK();
+        }
+
+        @PostMapping({"/deleteParamByIds"})
+        @JimuLoginRequired
+        public Result<?> b(HttpServletRequest paramHttpServletRequest, @RequestBody JSONObject paramJSONObject) {
+            a.debug("============deleteParamByIds==========");
+            JSONArray jSONArray = paramJSONObject.getJSONArray("selectIds");
+            String str1 = paramJSONObject.getString("id");
+            String str2 = paramJSONObject.getString("dbDynSql");
+            this.jmReportDbParamService.deleteParamByIdsAndUpdateDbSql(jSONArray, str1, str2);
+            return Result.OK();
+        }
+
+        @DeleteMapping({"/deleteFieldByIds"})
+        @JimuLoginRequired
+        public Result<?> f(HttpServletRequest paramHttpServletRequest, @RequestBody String paramString) {
+            a.debug("============deleParams==========");
+            this.jmReportDbFieldService.deleteByIds(paramString);
+            return Result.OK();
+        }
+
+        @DeleteMapping({"/delete"})
+        @ResponseBody
+        @JimuLoginRequired
+        public Result<?> g(HttpServletRequest paramHttpServletRequest, @RequestParam(name = "id", required = true) String paramString) {
+            JimuReport jimuReport = new JimuReport();
+            jimuReport.setId(paramString);
+            jimuReport.setDelFlag(Integer.valueOf(1));
+            this.jmReportDesignService.updateById(jimuReport);
+            return Result.OK(", Boolean.valueOf(true));
+        }
+
+        @GetMapping({"/reportCopy"})
+        @ResponseBody
+        @JimuLoginRequired
+        public Result<?> h(HttpServletRequest paramHttpServletRequest, @RequestParam(name = "id", required = true) String paramString) {
+            try {
+                String str = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+                JimuReport jimuReport = new JimuReport();
+                jimuReport.setCreateBy(str);
+                Date date = new Date();
+                jimuReport.setCreateTime(date);
+                jimuReport.setUpdateTime(date);
+                jimuReport.setId(paramString);
+                this.jmReportDesignService.reportCopy(jimuReport);
+            } catch (Exception exception) {
+                exception.printStackTrace();
+                return Result.error(403, ");
+            }
+            return Result.OK(", Boolean.valueOf(true));
+        }
+
+        @GetMapping({"/setTemplate"})
+        @ResponseBody
+        @JimuLoginRequired
+        public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestParam(name = "id", required = true) String paramString, @RequestParam(name = "template", required = true) Integer paramInteger) {
+            JimuReport jimuReport = new JimuReport();
+            jimuReport.setId(paramString);
+            jimuReport.setTemplate(paramInteger);
+            Integer integer = this.jmReportDesignService.updateById(jimuReport);
+            boolean bool = false;
+            if (integer.intValue() > 0)
+                bool = true;
+            return Result.OK(", Boolean.valueOf(bool));
+        }
+
+        @PostMapping({"/importExcel"})
+        @ResponseBody
+        @JimuLoginRequired
+        public Result<Object> a(HttpServletRequest paramHttpServletRequest, @RequestParam("file") MultipartFile paramMultipartFile) throws IOException {
+            Result<Object> result = new Result();
+            Map map = this.jmReportDesignService.importExcel(paramMultipartFile);
+            if (map.size() > 0 && !map.isEmpty()) {
+                result.setResult(map);
+                result.setSuccess(true);
+            } else {
+                result.setSuccess(false);
+            }
+            return result;
+        }
+
+        @PostMapping({"/exportAllExcel"})
+        @ResponseBody
+        public Result<Object> a(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, @RequestBody JSONObject paramJSONObject) throws IOException {
+            HashMap<Object, Object> hashMap1 = new HashMap<>(paramHttpServletRequest.getParameterMap());
+            boolean bool = hashMap1.containsKey("token");
+            if (bool)
+                hashMap1.remove("token");
+            String str = paramJSONObject.getString("excelConfigId");
+            JSONObject jSONObject = paramJSONObject.getJSONObject("queryParam");
+            long l1 = System.currentTimeMillis();
+            JSONArray jSONArray = paramJSONObject.getJSONArray("base64Arry");
+            Map map = this.exportExcel.exportExcel(str, jSONObject, (List)jSONArray);
+            File file = new File(map.get("name").toString());
+            ServletOutputStream servletOutputStream = paramHttpServletResponse.getOutputStream();
+            SXSSFWorkbook sXSSFWorkbook = (SXSSFWorkbook)map.get("workbook");
+            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+            HashMap<Object, Object> hashMap2 = new HashMap<>();
+            try {
+                sXSSFWorkbook.write(byteArrayOutputStream);
+                String str1 = Base64Utils.encodeToString(byteArrayOutputStream.toByteArray());
+                hashMap2.put("file", str1);
+                hashMap2.put("success", Boolean.valueOf(true));
+                hashMap2.put("name", file.getName());
+            } catch (IOException iOException) {
+                iOException.printStackTrace();
+                hashMap2.put("error", iOException.getMessage());
+            } finally {
+                try {
+                    byteArrayOutputStream.close();
+                } catch (IOException iOException) {
+                    iOException.printStackTrace();
+                }
+            }
+            long l2 = System.currentTimeMillis();
+            a.info("+ (l2 - l1) + "ms");
+            return Result.OK(hashMap2);
+        }
+
+        @RequestMapping({"/print"})
+        public void a(HttpServletResponse paramHttpServletResponse, HttpServletRequest paramHttpServletRequest) throws Exception {
+            HashMap<Object, Object> hashMap = new HashMap<>();
+            a(paramHttpServletRequest, paramHttpServletResponse, hashMap, "jmreport/desreport/print.ftl");
+        }
+
+        @PostMapping({"/putFile"})
+        @ResponseBody
+        @JimuLoginRequired
+        public Result<JimuReport> i(HttpServletRequest paramHttpServletRequest, @RequestParam String paramString) {
+            Result<JimuReport> result = new Result();
+            try {
+                MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)paramHttpServletRequest;
+                MultipartFile multipartFile = multipartHttpServletRequest.getFile("file");
+                String str1 = "";
+                String str2 = this.jimuReportUploadConfig.getUploadType();
+                if ("alioss".equals(str2)) {
+                    str1 = OssBootUtil.upload(multipartFile, "designreport/images");
+                } else if ("minio".equals(str2)) {
+                    str1 = MinioUtil.upload(multipartFile, "designreport/images");
+                } else {
+                    str1 = a(multipartFile, "excel_online");
+                }
+                JimuReport jimuReport = new JimuReport();
+                if (oConvertUtils.isNotEmpty(str1) && oConvertUtils.isNotEmpty(paramString)) {
+                    jimuReport.setId(paramString);
+                    jimuReport.setThumb(str1);
+                    this.jmReportDesignService.updateById(jimuReport);
+                    result.setMessage(");
+                            result.setResult(jimuReport);
+                }
+            } catch (Exception exception) {
+                result.setSuccess(false);
+                result.setMessage("");
+                a.error(exception.getMessage(), exception);
+            }
+            return result;
+        }
+
+        @GetMapping({"/download/image"})
+        @ResponseBody
+        public Result<Object> f(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) throws IOException {
+            String str1 = paramHttpServletRequest.getParameter("imageUrl");
+            Result<Object> result = new Result();
+            if (oConvertUtils.isEmpty(str1)) {
+                result.setSuccess(false);
+                return result;
+            }
+            if (!str1.contains("http")) {
+                result.setSuccess(true);
+                result.setResult(str1);
+            }
+            String str2 = File.separator + "designreport" + File.separator + "images" + File.separator;
+            String str3 = str1.substring(str1.lastIndexOf("/") + 1);
+            String str4 = this.jimuReportUploadConfig.getPath().getUpload();
+            File file1 = new File(str4 + str2);
+            if (!file1.exists())
+                file1.mkdirs();
+            a.debug("----imageUrl------" + str1);
+            a.debug("----fileName------" + str3);
+            a.debug("----downFilePath------" + str4 + str2 + str3);
+            File file2 = new File(str4 + str2 + str3);
+            if (!file2.exists())
+                d.a(str1, file2);
+            result.setSuccess(true);
+            result.setResult(str2 + str3);
+            return result;
+        }
+
+        private String a(MultipartFile paramMultipartFile, String paramString) {
+            try {
+                String str1 = this.jimuReportUploadConfig.getPath().getUpload();
+                a.info(" --- local upload path : " + str1 + " --- ");
+                String str2 = null;
+                File file1 = new File(str1 + File.separator + paramString + File.separator);
+                if (!file1.exists())
+                    file1.mkdirs();
+                String str3 = paramMultipartFile.getOriginalFilename();
+                str3 = CommonUtils.getFileName(str3);
+                if (str3.indexOf(".") != -1) {
+                    str2 = str3.substring(0, str3.lastIndexOf(".")) + "_" + System.currentTimeMillis() + str3.substring(str3.indexOf("."));
+                } else {
+                    str2 = str3 + "_" + System.currentTimeMillis();
+                }
+                String str4 = file1.getPath() + File.separator + str2;
+                File file2 = new File(str4);
+                FileCopyUtils.copy(paramMultipartFile.getBytes(), file2);
+                String str5 = null;
+                if (oConvertUtils.isNotEmpty(paramString)) {
+                    str5 = paramString + File.separator + str2;
+                } else {
+                    str5 = str2;
+                }
+                if (str5.contains("\\"))
+                    str5 = str5.replace("\\", "/");
+                return str5;
+            } catch (IOException iOException) {
+                a.error(iOException.getMessage(), iOException);
+                return "";
+            }
+        }
+
+        @PostMapping({"/addDataSource"})
+        @JimuLoginRequired
+        public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestBody JmReportDataSource paramJmReportDataSource) {
+            return this.reportDbService.addDataSource(paramJmReportDataSource, paramHttpServletRequest);
+        }
+
+        @PostMapping({"/querySourceCode"})
+        @JimuLoginRequired
+        public Result<?> b(HttpServletRequest paramHttpServletRequest, @RequestBody JmReportDataSource paramJmReportDataSource) {
+            boolean bool = this.reportDbService.querySourceCode(paramJmReportDataSource);
+            return Result.OK(Boolean.valueOf(bool));
+        }
+
+        @PostMapping({"/delDataSource"})
+        @JimuLoginRequired
+        public Result<?> c(HttpServletRequest paramHttpServletRequest, @RequestBody JmReportDataSource paramJmReportDataSource) {
+            this.reportDbService.delDataSource(paramJmReportDataSource);
+            return Result.OK(", Boolean.valueOf(true));
+        }
+
+        @PostMapping({"/testConnection"})
+        public Result a(@RequestBody JmreportDynamicDataSourceVo paramJmreportDynamicDataSourceVo) {
+            Connection connection = null;
+            try {
+                Class.forName(paramJmreportDynamicDataSourceVo.getDbDriver());
+                DriverManager.setLoginTimeout(10);
+                connection = DriverManager.getConnection(paramJmreportDynamicDataSourceVo.getDbUrl(), paramJmreportDynamicDataSourceVo.getDbUsername(), paramJmreportDynamicDataSourceVo.getDbPassword());
+                if (connection != null)
+                    return Result.OK(", Boolean.valueOf(true));
+                return Result.OK(", Boolean.valueOf(true));
+            } catch (ClassNotFoundException classNotFoundException) {
+                a.error(classNotFoundException.toString());
+                return Result.error(");
+            } catch (Exception exception) {
+                a.error(exception.toString());
+                return Result.error("+ exception.getMessage());
+            } finally {
+                try {
+                    if (connection != null && !connection.isClosed())
+                        connection.close();
+                } catch (SQLException sQLException) {
+                    a.error(sQLException.toString());
+                }
+            }
+        }
+
+        @RequestMapping({"/qurestApi"})
+        public Result<?> b(@RequestParam(name = "apiSelectId") String paramString, HttpServletRequest paramHttpServletRequest) {
+            String str1 = "";
+            JmReportDb jmReportDb = this.reportDbService.getById(paramString);
+            if (jmReportDb == null)
+                return Result.ok("");
+            String str2 = paramHttpServletRequest.getParameter("token");
+            if (oConvertUtils.isEmpty(str2))
+                str2 = paramHttpServletRequest.getHeader("token");
+            String str3 = jmReportDb.getApiUrl();
+            Map map = this.jimuTokenClient.getUserInfo(str2);
+            str3 = d.a(str3, map, this.jmBaseConfig.getApiBasePath());
+            List list = this.jmReportDbParamService.list(jmReportDb.getId());
+            if ("1".equals(jmReportDb.getDbType())) {
+                HashMap<Object, Object> hashMap = new HashMap<>();
+                for (JmReportDbParam jmReportDbParam : list) {
+                    if (str3.indexOf(jmReportDbParam.getParamName()) > 0)
+                        hashMap.put(jmReportDbParam.getParamName(), jmReportDbParam.getParamValue());
+                }
+                String str = FreeMarkerUtils.a(str3, hashMap);
+                str = str.replace("'", "");
+                if ("0".equals(jmReportDb.getApiMethod())) {
+                    str1 = d.b(str, str2);
+                } else {
+                    str1 = d.a(str, str2, null);
+                }
+                JSONObject jSONObject = JSONObject.parseObject(str1);
+                return Result.OK(jSONObject);
+            }
+            if ("3".equals(jmReportDb.getDbType())) {
+                JSONObject jSONObject = JSONObject.parseObject(jmReportDb.getJsonData());
+                return Result.OK(jSONObject);
+            }
+            if ("2".equals(jmReportDb.getDbType())) {
+                HashMap<Object, Object> hashMap = new HashMap<>();
+                for (JmReportDbParam jmReportDbParam : list)
+                    hashMap.put(jmReportDbParam.getParamName(), jmReportDbParam.getParamValue());
+                JSONObject jSONObject = JSONObject.parseObject(jmReportDb.getJsonData());
+                IDataSetFactory iDataSetFactory = d.d(jmReportDb.getJavaType(), jmReportDb.getJavaValue());
+                if ("1".equals(jmReportDb.getIsPage())) {
+                    JmPage jmPage = iDataSetFactory.createPageData(hashMap);
+                    return Result.OK(jSONObject);
+                }
+                List list1 = iDataSetFactory.createData(hashMap);
+                return Result.OK(list1);
+            }
+            return null;
+        }
+
+        @RequestMapping({"/qurestSql"})
+        public Result<?> c(@RequestParam(name = "apiSelectId") String paramString, HttpServletRequest paramHttpServletRequest) {
+            JmReportDb jmReportDb = this.reportDbService.getById(paramString);
+            List list = this.reportDbService.qurestechSql(jmReportDb);
+            this.jmReportDesignService.replaceDbCode(paramString, list);
+            return Result.OK(d.b(list));
+        }
+
+        @GetMapping({"/dataCodeExist"})
+        public Result<Boolean> a(@RequestParam(name = "reportId") String paramString1, @RequestParam(name = "code") String paramString2) {
+            int i = this.reportDbService.getCount(paramString1, paramString2);
+            return Result.OK(Boolean.valueOf((i > 0)));
+        }
+
+        @GetMapping({"/getQueryInfo"})
+        public Result<List<QueryVO>> a(@RequestParam(name = "reportId") String paramString1, HttpServletRequest paramHttpServletRequest, @RequestParam("param") String paramString2) {
+            String str = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+            if (!this.jmBaseConfig.getSaas().booleanValue())
+                str = "";
+            List list = this.jmReportDesignService.getReportQueryInfo(paramString1, str, paramString2);
+            return Result.OK(list);
+        }
+
+        @RequestMapping({"/addChart"})
+        @JimuLoginRequired
+        public Result<?> d(@RequestParam(name = "chartType") String paramString, HttpServletRequest paramHttpServletRequest) {
+            JSONObject jSONObject = this.jmReportDesignService.addChart(paramString);
+            return Result.OK(jSONObject);
+        }
+
+        @PostMapping({"/queryTableName"})
+        public Result<?> a(HttpServletRequest paramHttpServletRequest, @RequestParam("dbSource") String paramString1, @RequestParam("tableName") String paramString2, @RequestParam(name = "pageNo", defaultValue = "1") Integer paramInteger1, @RequestParam(name = "pageSize", defaultValue = "50") Integer paramInteger2) {
+            List list = this.reportDbService.queryTableName(paramString1, paramString2);
+            Map map = e.a(list, paramInteger1, paramInteger2);
+            return Result.OK(map);
+        }
+
+        @GetMapping({"/getReportByUser"})
+        public Result<List<JimuReport>> j(HttpServletRequest paramHttpServletRequest, @RequestParam(name = "reportId") String paramString) {
+            Result<List<JimuReport>> result = new Result();
+            String str = this.jimuTokenClient.getUsername(paramHttpServletRequest);
+            List list = this.jmReportDesignService.getReportByUser(str, paramString);
+            result.setSuccess(true);
+            result.setResult(list);
+            return result;
+        }
+
+        @GetMapping({"/getReportChars"})
+        public Result<List<JSONObject>> b(@RequestParam(name = "reportId") String paramString1, @RequestParam(name = "charId", required = false) String paramString2) {
+            ArrayList<JSONObject> arrayList = new ArrayList();
+            JimuReport jimuReport = this.jmReportDesignService.getById(paramString1);
+            if (jimuReport != null) {
+                String str = jimuReport.getJsonStr();
+                JSONObject jSONObject = JSONObject.parseObject(str);
+                Object object = jSONObject.get("chartList");
+                if (null != object) {
+                    JSONArray jSONArray = JSONArray.parseArray(object.toString());
+                    for (byte b = 0; b < jSONArray.size(); b++) {
+                        JSONObject jSONObject1 = new JSONObject();
+                        Object object1 = jSONArray.getJSONObject(b).get("layer_id");
+                        Object object2 = jSONArray.getJSONObject(b).get("config");
+                        JSONObject jSONObject2 = JSONObject.parseObject(object2.toString());
+                        JSONObject jSONObject3 = jSONObject2.getJSONObject("title");
+                        Object object3 = jSONObject3.get("text");
+                        if (null != object3 && null != object1) {
+                            if (oConvertUtils.isNotEmpty(paramString2) && !paramString2.equals(object1)) {
+                                jSONObject1.put("id", object1);
+                                jSONObject1.put("name", object3);
+                                arrayList.add(jSONObject1);
+                            }
+                            if (oConvertUtils.isEmpty(paramString2)) {
+                                jSONObject1.put("id", object1);
+                                jSONObject1.put("name", object3);
+                                arrayList.add(jSONObject1);
+                            }
+                        }
+                    }
+                }
+            }
+            return Result.OK(arrayList);
+        }
+
+        @GetMapping({"/getCharData"})
+        public Result<JSONObject> a(@RequestParam(name = "reportId") String paramString1, @RequestParam(name = "charId") String paramString2, @RequestParam(name = "params") String paramString3, HttpServletRequest paramHttpServletRequest) {
+            String str = paramHttpServletRequest.getParameter("X-Access-Token");
+            JSONObject jSONObject = this.jmReportDesignService.getCharData(paramString1, paramString2, paramString3, str);
+            return Result.OK(jSONObject);
+        }
+
+        @GetMapping({"/verificationToken"})
+        public void c(HttpServletRequest paramHttpServletRequest) {
+            this.jimuTokenClient.verifyToken(paramHttpServletRequest);
+        }
+
+        @PostMapping({"/exportPdf"})
+        public Result<Object> b(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, @RequestBody JSONObject paramJSONObject) {
+            HashMap<Object, Object> hashMap = new HashMap<>(paramHttpServletRequest.getParameterMap());
+            boolean bool = hashMap.containsKey("token");
+            if (bool)
+                hashMap.remove("token");
+            String str1 = paramJSONObject.getString("excelConfigId");
+            JSONObject jSONObject = paramJSONObject.getJSONObject("queryParam");
+            jSONObject.put("printAll", Boolean.valueOf(true));
+            Result result = this.jmReportDesignService.show(str1, jSONObject.toJSONString());
+            JimuReport jimuReport = (JimuReport)result.getResult();
+            String str2 = paramHttpServletRequest.getParameter("dpi");
+            float f = 96.0F;
+            if (oConvertUtils.isNotEmpty(str2))
+                f = Float.parseFloat(str2);
+            JSONArray jSONArray = paramJSONObject.getJSONArray("base64Arry");
+            Map map = this.jmReportExportPdf.exportPdf(jimuReport, jSONArray, f);
+            return Result.OK(map);
+        }
+
+        @GetMapping({"/getLinkageChartInfo"})
+        public Result<Object> d(HttpServletRequest paramHttpServletRequest) {
+            String str1 = paramHttpServletRequest.getParameter("reportId");
+            String str2 = paramHttpServletRequest.getParameter("dbCode");
+            String str3 = paramHttpServletRequest.getParameter("linkageDbCode");
+            List list1 = this.jmReportDbParamService.queryParamByDbcode(str1, str3);
+            List list2 = this.jmReportDbFieldService.queryFieldsByDbcode(str1, str2);
+            HashMap<Object, Object> hashMap = new HashMap<>();
+            hashMap.put("paramList", list1);
+            hashMap.put("fieldList", list2);
+            return Result.OK(hashMap);
+        }
+
+        @GetMapping({"/getListReportDb"})
+        public Result<Map<String, Object>> c(@RequestParam(name = "reportId") String paramString) {
+            HashMap<Object, Object> hashMap1 = new HashMap<>();
+            List list = this.reportDbService.getListReportDb(paramString);
+            HashMap<Object, Object> hashMap2 = new HashMap<>();
+            HashMap<Object, Object> hashMap3 = new HashMap<>();
+            for (JmReportDb jmReportDb : list) {
+                List list1 = this.jmReportDbParamService.list(jmReportDb.getId());
+                hashMap3.put(jmReportDb.getDbCode(), list1);
+            }
+            hashMap1.put("reportDbParam", hashMap3);
+            return Result.OK(hashMap1);
+        }
+
+        @GetMapping({"/dictCodeSearch"})
+        public Result<List<JmDictModel>> a(@RequestParam(name = "key") String paramString1, @RequestParam(name = "text") String paramString2, @RequestParam(name = "reportId") String paramString3) {
+            Result<List<JmDictModel>> result = new Result();
+            List list = this.reportDbService.getListReportDb(paramString3);
+            String str = this.jimuTokenClient.getUsername();
+            if (oConvertUtils.isEmpty(paramString1))
+                return null;
+            String[] arrayOfString = paramString1.split("__");
+            for (JmReportDb jmReportDb : list) {
+                if (arrayOfString.length == 2 && arrayOfString[0].equals(jmReportDb.getDbCode())) {
+                    List list1 = this.jmReportDbFieldService.getByDbId(jmReportDb.getId());
+                    for (JmReportDbField jmReportDbField : list1) {
+                        if (jmReportDbField.getFieldName().equals(arrayOfString[1])) {
+                            JSONObject jSONObject = new JSONObject();
+                            List list2 = this.jmReportDesignService.queryQueryDictList(jmReportDb, jmReportDbField, str, paramString2, null);
+                            result.setResult(list2);
+                            result.setSuccess(true);
+                            return result;
+                        }
+                    }
+                }
+            }
+            return null;
+        }
+    }

+ 6 - 0
boman-report/src/main/resources/default-config.properties

@@ -0,0 +1,6 @@
+spring.mvc.static-path-pattern=/**
+spring.resource.static-locations=classpath:/static/
+jeecg.uploadType=local
+jeecg.path.upload=/opt/upload
+minidao.base-package=org.jeecg.modules.jmreport.desreport.*
+minidao.db-type=mysql

File diff suppressed because it is too large
+ 1 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/axios/axios.min.js


File diff suppressed because it is too large
+ 0 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/axios/qs.min.js


+ 265 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/html2canvas/canvas2image.js

@@ -0,0 +1,265 @@
+/**
+ * covert canvas to image
+ * and save the image file
+ */
+
+var Canvas2Image = function () {
+
+	// check if support sth.
+	var $support = function () {
+		var canvas = document.createElement('canvas'),
+			ctx = canvas.getContext('2d');
+
+		return {
+			canvas: !!ctx,
+			imageData: !!ctx.getImageData,
+			dataURL: !!canvas.toDataURL,
+			btoa: !!window.btoa
+		};
+	}();
+
+	var downloadMime = 'image/octet-stream';
+
+	function scaleCanvas (canvas, width, height) {
+		var w = canvas.width,
+			h = canvas.height;
+		if (width == undefined) {
+			width = w;
+		}
+		if (height == undefined) {
+			height = h;
+		}
+
+		var retCanvas = document.createElement('canvas');
+		var retCtx = retCanvas.getContext('2d');
+		retCanvas.width = width;
+		retCanvas.height = height;
+		retCtx.drawImage(canvas, 0, 0, w, h, 0, 0, width, height);
+		return retCanvas;
+	}
+
+	function getDataURL (canvas, type, width, height) {
+		canvas = scaleCanvas(canvas, width, height);
+		return canvas.toDataURL(type);
+	}
+
+	function saveFile (strData) {
+		document.location.href = strData;
+	}
+
+	function genImage(strData) {
+		var img = document.createElement('img');
+		img.src = strData;
+		return img;
+	}
+	function fixType (type) {
+		type = type.toLowerCase().replace(/jpg/i, 'jpeg');
+		var r = type.match(/png|jpeg|bmp|gif/)[0];
+		return 'image/' + r;
+	}
+	function encodeData (data) {
+		if (!window.btoa) { throw 'btoa undefined' }
+		var str = '';
+		if (typeof data == 'string') {
+			str = data;
+		} else {
+			for (var i = 0; i < data.length; i ++) {
+				str += String.fromCharCode(data[i]);
+			}
+		}
+
+		return btoa(str);
+	}
+	function getImageData (canvas) {
+		var w = canvas.width,
+			h = canvas.height;
+		return canvas.getContext('2d').getImageData(0, 0, w, h);
+	}
+	function makeURI (strData, type) {
+		return 'data:' + type + ';base64,' + strData;
+	}
+
+
+	/**
+	 * create bitmap image
+	 * 按照规则生成图片响应头和响应体
+	 */
+	var genBitmapImage = function (oData) {
+
+		//
+		// BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx
+		// BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx
+		//
+
+		var biWidth  = oData.width;
+		var biHeight	= oData.height;
+		var biSizeImage = biWidth * biHeight * 3;
+		var bfSize  = biSizeImage + 54; // total header size = 54 bytes
+
+		//
+		//  typedef struct tagBITMAPFILEHEADER {
+		//  	WORD bfType;
+		//  	DWORD bfSize;
+		//  	WORD bfReserved1;
+		//  	WORD bfReserved2;
+		//  	DWORD bfOffBits;
+		//  } BITMAPFILEHEADER;
+		//
+		var BITMAPFILEHEADER = [
+			// WORD bfType -- The file type signature; must be "BM"
+			0x42, 0x4D,
+			// DWORD bfSize -- The size, in bytes, of the bitmap file
+			bfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff,
+			// WORD bfReserved1 -- Reserved; must be zero
+			0, 0,
+			// WORD bfReserved2 -- Reserved; must be zero
+			0, 0,
+			// DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits.
+			54, 0, 0, 0
+		];
+
+		//
+		//  typedef struct tagBITMAPINFOHEADER {
+		//  	DWORD biSize;
+		//  	LONG  biWidth;
+		//  	LONG  biHeight;
+		//  	WORD  biPlanes;
+		//  	WORD  biBitCount;
+		//  	DWORD biCompression;
+		//  	DWORD biSizeImage;
+		//  	LONG  biXPelsPerMeter;
+		//  	LONG  biYPelsPerMeter;
+		//  	DWORD biClrUsed;
+		//  	DWORD biClrImportant;
+		//  } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+		//
+		var BITMAPINFOHEADER = [
+			// DWORD biSize -- The number of bytes required by the structure
+			40, 0, 0, 0,
+			// LONG biWidth -- The width of the bitmap, in pixels
+			biWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff,
+			// LONG biHeight -- The height of the bitmap, in pixels
+			biHeight & 0xff, biHeight >> 8  & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff,
+			// WORD biPlanes -- The number of planes for the target device. This value must be set to 1
+			1, 0,
+			// WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap
+			// has a maximum of 2^24 colors (16777216, Truecolor)
+			24, 0,
+			// DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed
+			0, 0, 0, 0,
+			// DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps
+			biSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff,
+			// LONG biXPelsPerMeter, unused
+			0,0,0,0,
+			// LONG biYPelsPerMeter, unused
+			0,0,0,0,
+			// DWORD biClrUsed, the number of color indexes of palette, unused
+			0,0,0,0,
+			// DWORD biClrImportant, unused
+			0,0,0,0
+		];
+
+		var iPadding = (4 - ((biWidth * 3) % 4)) % 4;
+
+		var aImgData = oData.data;
+
+		var strPixelData = '';
+		var biWidth4 = biWidth<<2;
+		var y = biHeight;
+		var fromCharCode = String.fromCharCode;
+
+		do {
+			var iOffsetY = biWidth4*(y-1);
+			var strPixelRow = '';
+			for (var x = 0; x < biWidth; x++) {
+				var iOffsetX = x<<2;
+				strPixelRow += fromCharCode(aImgData[iOffsetY+iOffsetX+2]) +
+							   fromCharCode(aImgData[iOffsetY+iOffsetX+1]) +
+							   fromCharCode(aImgData[iOffsetY+iOffsetX]);
+			}
+
+			for (var c = 0; c < iPadding; c++) {
+				strPixelRow += String.fromCharCode(0);
+			}
+
+			strPixelData += strPixelRow;
+		} while (--y);
+
+		var strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData);
+
+		return strEncoded;
+	};
+
+	/**
+	 * saveAsImage
+	 * @param canvasElement
+	 * @param {String} image type
+	 * @param {Number} [optional] png width
+	 * @param {Number} [optional] png height
+	 */
+	var saveAsImage = function (canvas, width, height, type) {
+		if ($support.canvas && $support.dataURL) {
+			if (typeof canvas == "string") { canvas = document.getElementById(canvas); }
+			if (type == undefined) { type = 'png'; }
+			type = fixType(type);
+			if (/bmp/.test(type)) {
+				var data = getImageData(scaleCanvas(canvas, width, height));
+				var strData = genBitmapImage(data);
+				saveFile(makeURI(strData, downloadMime));
+			} else {
+				var strData = getDataURL(canvas, type, width, height);
+				saveFile(strData.replace(type, downloadMime));
+			}
+		}
+	};
+
+	var convertToImage = function (canvas, width, height, type) {
+		if ($support.canvas && $support.dataURL) {
+			if (typeof canvas == "string") { canvas = document.getElementById(canvas); }
+			if (type == undefined) { type = 'png'; }
+			type = fixType(type);
+
+			if (/bmp/.test(type)) {
+				var data = getImageData(scaleCanvas(canvas, width, height));
+				var strData = genBitmapImage(data);
+				return genImage(makeURI(strData, 'image/bmp'));
+			} else {
+				var strData = getDataURL(canvas, type, width, height);
+				return genImage(strData);
+			}
+		}
+	};
+
+
+
+	return {
+		saveAsImage: saveAsImage,
+		saveAsPNG: function (canvas, width, height) {
+			return saveAsImage(canvas, width, height, 'png');
+		},
+		saveAsJPEG: function (canvas, width, height) {
+			return saveAsImage(canvas, width, height, 'jpeg');
+		},
+		saveAsGIF: function (canvas, width, height) {
+			return saveAsImage(canvas, width, height, 'gif');
+		},
+		saveAsBMP: function (canvas, width, height) {
+			return saveAsImage(canvas, width, height, 'bmp');
+		},
+
+		convertToImage: convertToImage,
+		convertToPNG: function (canvas, width, height) {
+			return convertToImage(canvas, width, height, 'png');
+		},
+		convertToJPEG: function (canvas, width, height) {
+			return convertToImage(canvas, width, height, 'jpeg');
+		},
+		convertToGIF: function (canvas, width, height) {
+			return convertToImage(canvas, width, height, 'gif');
+		},
+		convertToBMP: function (canvas, width, height) {
+			return convertToImage(canvas, width, height, 'bmp');
+		}
+	};
+
+}();

File diff suppressed because it is too large
+ 19 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/html2canvas/html2canvas.min.js


File diff suppressed because it is too large
+ 24 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.svg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.ttf


BIN
boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.woff


BIN
boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/fonts/ionicons.woff2


File diff suppressed because it is too large
+ 0 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/iview.css


File diff suppressed because it is too large
+ 0 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/iview/iview.min.js


File diff suppressed because it is too large
+ 5 - 0
boman-report/src/main/resources/static/jmreport/desreport_/cdn/vue/vue.min.js


+ 100 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.background.json

@@ -0,0 +1,100 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"服饰",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+  },
+  "yAxis": {
+    "show":true,
+    "name":"销量",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "销量",
+    "type": "bar",
+    "data": [5, 20, 36, 10, 10, 20],
+    "showBackground": true,
+    "backgroundStyle": {
+      "color": "rgba(220, 220, 220, 0.8)"
+    },
+    "barWidth": 50,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":"#c43632"
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    }
+  }]
+}

+ 149 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.multi.horizontal.json

@@ -0,0 +1,149 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["直接访问","邮件营销", "联盟广告"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "trigger":"axis",
+    "axisPointer": {
+      "type": "shadow"
+    },
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "type ": "value",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "yAxis": {
+    "show":true,
+    "type": "category",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["周一", "周二", "周三", "周四", "周五"]
+  },
+  "series": [{
+    "name": "直接访问",
+    "type": "bar",
+    "data": [320, 332, 301, 334, 390],
+    "barWidth": 0,
+    "barMinHeight": 2,
+    "label": {
+      "show": true,
+      "position": "right",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "邮件营销",
+    "type": "bar",
+    "data": [120, 132, 101, 134, 90],
+    "barWidth": 0,
+    "barMinHeight": 2,
+    "label": {
+      "show": true,
+      "position": "right",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "联盟广告",
+    "type": "bar",
+    "data": [220, 182, 191, 234, 290],
+    "barWidth": 0,
+    "barMinHeight": 2,
+    "label": {
+      "show": true,
+      "position": "right",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  }]
+}

+ 149 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.multi.json

@@ -0,0 +1,149 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["直接访问","邮件营销", "联盟广告"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "trigger":"axis",
+    "axisPointer": {
+      "type": "shadow"
+    },
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "type": "category",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
+  },
+  "yAxis": {
+    "show":true,
+    "type ": "value",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "直接访问",
+    "type": "bar",
+    "data": [320, 332, 301, 334, 390, 330, 320],
+    "barWidth": 0,
+    "barMinHeight": 2,
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "邮件营销",
+    "type": "bar",
+    "data": [120, 132, 101, 134, 90, 230, 210],
+    "barWidth": 0,
+    "barMinHeight": 2,
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "联盟广告",
+    "type": "bar",
+    "data": [220, 182, 191, 234, 290, 330, 310],
+    "barWidth": 0,
+    "barMinHeight": 2,
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  }]
+}

+ 140 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.negative.json

@@ -0,0 +1,140 @@
+{
+  "title": {
+    "show": true,
+    "text": "利润统计",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": [ "利润", "支出", "收入"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "trigger":"axis",
+    "axisPointer": {
+      "type": "shadow"
+    },
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "type ": "value",
+    "splitLine":{
+      "show":true,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "yAxis": {
+    "show":true,
+    "type": "category",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
+  },
+  "series": [
+    {
+      "name": "利润",
+      "type": "bar",
+      "stack": "利润",
+      "label": {
+        "show": true,
+        "position": "inside"
+      },
+      "barWidth": 25,
+      "barMinHeight": 2,
+      "itemStyle": {
+        "barBorderRadius":0,
+        "color":""
+      },
+      "data": [200, 170, 240, 244, 200, 220, 210]
+    },
+    {
+      "name": "收入",
+      "type": "bar",
+      "stack": "总量",
+      "label": {
+        "show": true
+      },
+      "barWidth": 25,
+      "barMinHeight": 2,
+      "itemStyle": {
+        "barBorderRadius":0,
+        "color":""
+      },
+      "data": [320, 302, 341, 374, 390, 450, 420]
+    },
+    {
+      "name": "支出",
+      "type": "bar",
+      "stack": "总量",
+      "label": {
+        "show": true,
+        "position": "left"
+      },
+      "barWidth": 5,
+      "barMinHeight": 2,
+      "itemStyle": {
+        "barBorderRadius":0,
+        "color":""
+      },
+      "data": [-120, -132, -101, -134, -190, -230, -210]
+    }
+  ]
+}

+ 108 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.simple.json

@@ -0,0 +1,108 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "top": "5",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  /*"legend": {
+    "show": false,
+    "data": ["销量"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },*/
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"服饰",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+  },
+  "yAxis": {
+    "show":true,
+    "name":"销量",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "销量",
+    "type": "bar",
+    "data": [5, 20, 36, 10, 10, 20],
+    "barWidth": 50,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":"#c43632"
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    }
+  }]
+}

+ 125 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.stack.horizontal.json

@@ -0,0 +1,125 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["直接访问","邮件营销", "联盟广告"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "trigger":"axis",
+    "axisPointer": {
+      "type": "shadow"
+    },
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "type ": "value",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "yAxis": {
+    "show":true,
+    "type": "category",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["周一", "周二", "周三", "周四", "周五"]
+  },
+  "series": [{
+    "name": "直接访问",
+    "type": "bar",
+    "stack":"总量",
+    "data": [320, 332, 301, 334, 390],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "邮件营销",
+    "type": "bar",
+    "stack":"总量",
+    "data": [120, 132, 101, 134, 90],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "联盟广告",
+    "type": "bar",
+    "stack":"总量",
+    "data": [220, 182, 191, 234, 290],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  }]
+}

+ 158 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/bar.stack.json

@@ -0,0 +1,158 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["直接访问","邮件营销", "联盟广告","百度", "谷歌", "必应"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "trigger":"axis",
+    "axisPointer": {
+      "type": "shadow"
+    },
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "type": "category",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
+  },
+  "yAxis": {
+    "show":true,
+    "type ": "value",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "直接访问",
+    "type": "bar",
+    "stack":"",
+    "data": [320, 332, 301, 334, 390, 330, 320],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "邮件营销",
+    "type": "bar",
+    "stack":"总量",
+    "data": [120, 132, 101, 134, 90, 230, 210],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "联盟广告",
+    "type": "bar",
+    "stack":"总量",
+    "data": [220, 182, 191, 234, 290, 330, 310],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "百度",
+    "type": "bar",
+    "barWidth": 15,
+    "stack": "搜索引擎",
+    "data": [620, 732, 701, 734, 1090, 1130, 1120],
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  }, {
+    "name": "谷歌",
+    "type": "bar",
+    "stack": "搜索引擎",
+    "data": [120, 132, 101, 134, 290, 230, 220],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+    },{
+    "name": "必应",
+    "type": "bar",
+    "stack": "搜索引擎",
+    "data": [60, 72, 71, 74, 190, 130, 110],
+    "barMinHeight": 2,
+    "barWidth": 15,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+    }]
+}

+ 1459 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/echartslist.json

@@ -0,0 +1,1459 @@
+{
+  "bar": {
+      "title": {
+          "show": true,
+          "text": "某站点用户访问来源",
+          "left": "left",
+          "padding": [5,20,5,20],
+          "textStyle": {
+              "fontSize": 18,
+              "fontWeight": "bolder",
+              "color": "#c23531"
+          }
+      },
+      "legend": {
+          "show": true,
+          "data": ["销量"],
+          "top": "top",
+          "left": "center",
+          "orient": "horizontal",
+          "padding":[25,20,25,10],
+          "textStyle": {
+              "color":  "#333",
+              "fontSize": 12
+          }
+      },
+      "grid": {
+          "left": 60,
+          "top": 60,
+          "right": 60,
+          "bottom": 60
+      },
+      "tooltip": {
+          "show":true,
+          "textStyle":{
+              "color":"#fff",
+              "fontSize": 18
+          }
+      },
+      "xAxis": {
+          "show":true,
+          "name":"服饰",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "interval":"auto",
+              "rotate":0,
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          },
+          "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+      },
+      "yAxis": {
+          "show":true,
+          "name":"销量",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          }
+      },
+      "series": [{
+          "name": "销量",
+          "type": "bar",
+          "data": [5, 20, 36, 10, 10, 20],
+          "barWidth": 50,
+          "barMinHeight": 2,
+          "itemStyle": {
+              "normal": {
+                  "barBorderRadius":0,
+                  "color":"#c43632",
+                  "label": {
+                      "show": true,
+                      "position": "top",
+                      "textStyle": {
+                          "color": "black",
+                          "fontSize": 16,
+                          "fontWeight": "bolder"
+                      }
+                  }
+              }
+          }
+      }]
+  },
+  "bar3": {
+    "title": {
+      "show": true,
+      "text": "某站点用户访问来源",
+      "left": "left",
+      "padding": [5,20,5,20],
+      "textStyle": {
+        "fontSize": 18,
+        "fontWeight": "bolder",
+        "color": "#c23531"
+      }
+    },
+    "legend": {
+      "show": true,
+      "data": ["直接访问","邮件营销", "联盟广告"],
+      "top": "top",
+      "left": "center",
+      "orient": "horizontal",
+      "padding":[25,20,25,10],
+      "textStyle": {
+        "color":  "#333",
+        "fontSize": 12
+      }
+    },
+    "grid": {
+      "left": 60,
+      "top": 60,
+      "right": 60,
+      "bottom": 60
+    },
+    "tooltip": {
+      "show":true,
+      "trigger":"axis",
+      "axisPointer": {
+        "type": "shadow"
+      },
+      "textStyle":{
+        "color":"#fff",
+        "fontSize": 18
+      }
+    },
+    "xAxis": {
+      "show":true,
+      "type": "category",
+      "splitLine":{
+        "show":false,
+        "lineStyle":{
+          "color":"red",
+          "width":1,
+          "type":"solid"
+        }
+      },
+      "axisLabel":{
+        "interval":"auto",
+        "rotate":0,
+        "textStyle":{
+          "fontSize":12,
+          "color": "#333"
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "#333"
+        }
+      },
+      "data": ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
+    },
+    "yAxis": {
+      "show":true,
+      "type ": "value",
+      "splitLine":{
+        "show":false,
+        "lineStyle":{
+          "color":"red",
+          "width":1,
+          "type":"solid"
+        }
+      },
+      "axisLabel":{
+        "textStyle":{
+          "fontSize":12,
+          "color": "#333"
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "#333"
+        }
+      }
+    },
+    "series": [{
+      "name": "直接访问",
+      "type": "bar",
+      "data": [320, 332, 301, 334, 390, 330, 320],
+      "barWidth": 0,
+      "barMinHeight": 2,
+      "itemStyle": {
+        "normal": {
+          "barBorderRadius":0,
+          "color":"",
+          "label": {
+            "show": true,
+            "position": "top",
+            "textStyle": {
+              "color": "black",
+              "fontSize": 16,
+              "fontWeight": "bolder"
+            }
+          }
+        }
+      }
+    },{
+      "name": "邮件营销",
+      "type": "bar",
+      "data": [120, 132, 101, 134, 90, 230, 210],
+      "barWidth": 0,
+      "barMinHeight": 2,
+      "itemStyle": {
+        "normal": {
+          "barBorderRadius":0,
+          "color":"",
+          "label": {
+            "show": true,
+            "position": "top",
+            "textStyle": {
+              "color": "black",
+              "fontSize": 16,
+              "fontWeight": "bolder"
+            }
+          }
+        }
+      }
+    },{
+      "name": "联盟广告",
+      "type": "bar",
+      "data": [220, 182, 191, 234, 290, 330, 310],
+      "barWidth": 0,
+      "barMinHeight": 2,
+      "itemStyle": {
+        "normal": {
+          "barBorderRadius":0,
+          "color":"",
+          "label": {
+            "show": true,
+            "position": "top",
+            "textStyle": {
+              "color": "black",
+              "fontSize": 16,
+              "fontWeight": "bolder"
+            }
+          }
+        }
+      }
+    }]
+  },
+  "bar2": {
+      "title": {
+          "show": true,
+          "text": "某站点用户访问来源",
+          "left": "left",
+          "padding": [5,20,5,20],
+          "textStyle": {
+              "fontSize": 18,
+              "fontWeight": "bolder",
+              "color": "#c23531"
+          }
+      },
+      "legend": {
+          "show": true,
+          "top": "top",
+          "left": "center",
+          "orient": "horizontal",
+          "padding":[25,20,25,10],
+          "textStyle": {
+              "fontSize": 12
+          }
+      },
+      "grid": {
+          "left": 60,
+          "top": 60,
+          "right": 60,
+          "bottom": 60
+      },
+      "tooltip": {
+          "show":true,
+          "textStyle":{
+              "color":"#fff",
+              "fontSize": 18
+          }
+      },
+      "dataset": {
+          "source": [
+              ["product", "2015", "2016", "2017"],
+              ["Matcha Latte", 43.3, 85.8, 93.7],
+              ["Milk Tea", 83.1, 73.4, 55.1],
+              ["Cheese Cocoa", 86.4, 65.2, 82.5],
+              ["Walnut Brownie", 72.4, 53.9, 39.1]
+          ]
+      },
+      "xAxis": {
+          "show":true,
+          "type":"category",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "interval":"auto",
+              "rotate":0,
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          }
+      },
+      "yAxis": {
+          "show":true,
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          }
+      },
+      "series": [{
+          "type": "bar",
+          "barWidth": 30,
+          "barMinHeight": 2,
+          "itemStyle": {
+              "normal": {
+                  "barBorderRadius":0,
+                  "label": {
+                      "show": true,
+                      "position": "top",
+                      "textStyle": {
+                          "color": "black",
+                          "fontSize": 16,
+                          "fontWeight": "bolder"
+                      }
+                  }
+              }
+          }
+      },{
+          "type": "bar",
+          "barWidth": 30,
+          "barMinHeight": 2,
+          "itemStyle": {
+              "normal": {
+                  "barBorderRadius":0,
+                  "label": {
+                      "show": true,
+                      "position": "top",
+                      "textStyle": {
+                          "color": "black",
+                          "fontSize": 16,
+                          "fontWeight": "bolder"
+                      }
+                  }
+              }
+          }
+      },{
+          "type": "bar",
+          "barWidth": 30,
+          "barMinHeight": 2,
+          "itemStyle": {
+              "normal": {
+                  "barBorderRadius":0,
+                  "label": {
+                      "show": true,
+                      "position": "top",
+                      "textStyle": {
+                          "color": "black",
+                          "fontSize": 16,
+                          "fontWeight": "bolder"
+                      }
+                  }
+              }
+          }
+      }]
+  },
+  "line": {
+      "title": {
+          "show": true,
+          "text": "某站点用户访问来源",
+          "left": "left",
+          "padding": [5,20,5,10],
+          "textStyle": {
+              "fontSize": 18,
+              "fontWeight": "bolder",
+              "color": "#c23531"
+          }
+      },
+      "legend": {
+          "show": true,
+          "data": ["销量"],
+          "top": "top",
+          "left": "center",
+          "orient": "horizontal",
+          "padding":[25,20,25,10],
+          "textStyle": {
+              "color":  "#333",
+              "fontSize": 12
+          }
+      },
+      "grid": {
+          "left": 60,
+          "top": 60,
+          "right": 60,
+          "bottom": 60
+      },
+      "tooltip": {
+          "show":true,
+          "textStyle":{
+              "color":"#fff",
+              "fontSize": 18
+          }
+      },
+      "xAxis": {
+          "show":true,
+          "name":"服饰",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "interval":"auto",
+              "rotate":0,
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          },
+          "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+      },
+      "yAxis": {
+          "show":true,
+          "name":"销量",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          }
+      },
+      "series": [{
+          "name": "销量",
+          "type": "line",
+          "data": [5, 20, 36, 10, 10, 20],
+          "step": false,
+          "showSymbol": true,
+          "smooth": false,
+          "symbolSize":5,
+          "lineStyle":{
+              "width":2,
+              "color": "#c43632"
+          },
+          "itemStyle": {
+              "normal": {
+                  "label": {
+                      "show": true,
+                      "position": "top",
+                      "textStyle": {
+                          "color": "black",
+                          "fontSize": 16,
+                          "fontWeight": "bolder"
+                      }
+                  }
+              }
+          }
+      }]
+  },
+  "line3": {
+      "title": {
+          "show": true,
+          "text": "某站点用户访问来源",
+          "left": "left",
+          "padding": [5,20,5,10],
+          "textStyle": {
+              "fontSize": 18,
+              "fontWeight": "bolder",
+              "color": "#c23531"
+          }
+      },
+      "legend": {
+          "show": true,
+          "data": ["销量"],
+          "top": "top",
+          "left": "center",
+          "orient": "horizontal",
+          "padding":[25,20,25,10],
+          "textStyle": {
+              "color":  "#333",
+              "fontSize": 12
+          }
+      },
+      "grid": {
+          "left": 60,
+          "top": 60,
+          "right": 60,
+          "bottom": 60
+      },
+      "tooltip": {
+          "show":true,
+          "textStyle":{
+              "color":"#fff",
+              "fontSize": 18
+          }
+      },
+      "xAxis": {
+          "show":true,
+          "name":"服饰",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "interval":"auto",
+              "rotate":0,
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          },
+          "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+      },
+      "yAxis": {
+          "show":true,
+          "name":"销量",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          }
+      },
+      "series": [{
+          "name": "销量",
+          "type": "line",
+          "data": [5, 20, 36, 10, 10, 20],
+          "step": false,
+          "showSymbol": true,
+          "smooth": true,
+          "symbolSize":5,
+          "lineStyle":{
+              "width":2,
+              "color": "#c43632"
+          },
+          "itemStyle": {
+              "normal": {
+                  "label": {
+                      "show": true,
+                      "position": "top",
+                      "textStyle": {
+                          "color": "black",
+                          "fontSize": 16,
+                          "fontWeight": "bolder"
+                      }
+                  }
+              }
+          }
+      }]
+  },
+  "line4": {
+    "title": {
+      "show": true,
+      "text": "某楼盘销售情况",
+      "left": "left",
+      "textStyle": {
+        "fontSize": 18,
+        "fontWeight": "bolder",
+        "color": "#c23531"
+      }
+    },
+    "legend": {
+      "show": true,
+      "data": [ "意向","预购","成交"],
+      "top": "top",
+      "left": "center",
+      "orient": "horizontal",
+      "padding":[5,20,25,10],
+      "textStyle": {
+        "color":  "#333",
+        "fontSize": 12
+      }
+    },
+    "grid": {
+      "left": 60,
+      "top": 60,
+      "right": 60,
+      "bottom": 60
+    },
+    "tooltip": {
+      "show":true,
+      "trigger": "axis",
+      "textStyle":{
+        "color":"#fff",
+        "fontSize": 18
+      }
+    },
+    "xAxis": {
+      "show":true,
+      "type": "category",
+      "boundaryGap": false,
+      "splitLine":{
+        "show":false,
+        "lineStyle":{
+          "color":"red",
+          "width":1,
+          "type":"solid"
+        }
+      },
+      "axisLabel":{
+        "interval":"auto",
+        "rotate":0,
+        "textStyle":{
+          "fontSize":12,
+          "color": "#333"
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "#333"
+        }
+      },
+      "data": ["周一","周二","周三","周四","周五"]
+    },
+    "yAxis": {
+      "show":true,
+      "type": "value",
+      "splitLine":{
+        "show":false,
+        "lineStyle":{
+          "color":"red",
+          "width":1,
+          "type":"solid"
+        }
+      },
+      "axisLabel":{
+        "textStyle":{
+          "fontSize":12,
+          "color": "#333"
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "#333"
+        }
+      }
+    },
+    "series": [{
+      "name": "预购",
+      "type": "line",
+      "data":  [30, 182, 434, 791, 390],
+      "step": false,
+      "showSymbol": true,
+      "smooth": false,
+      "symbolSize":5,
+      "lineStyle":{
+        "width":2,
+        "color": null
+      },
+      "itemStyle": {
+        "normal": {
+          "label": {
+            "show": true,
+            "position": "top",
+            "textStyle": {
+              "color": "black",
+              "fontSize": 16,
+              "fontWeight": "bolder"
+            }
+          }
+        }
+      }
+    },
+      {
+        "name": "成交",
+        "type": "line",
+        "data":[10, 12, 21, 54, 260],
+        "step": false,
+        "showSymbol": true,
+        "smooth": false,
+        "symbolSize":5,
+        "lineStyle":{
+          "width":2,
+          "color": null
+        },
+        "itemStyle": {
+          "normal": {
+            "label": {
+              "show": true,
+              "position": "top",
+              "textStyle": {
+                "color": "black",
+                "fontSize": 16,
+                "fontWeight": "bolder"
+              }
+            }
+          }
+        }
+      },
+      {
+        "name": "意向",
+        "type": "line",
+        "data":[1320, 1132, 601, 234, 120],
+        "step": false,
+        "showSymbol": true,
+        "smooth": false,
+        "symbolSize":5,
+        "lineStyle":{
+          "width":2,
+          "color": null
+        },
+        "itemStyle": {
+          "normal": {
+            "label": {
+              "show": true,
+              "position": "top",
+              "textStyle": {
+                "color": "black",
+                "fontSize": 16,
+                "fontWeight": "bolder"
+              }
+            }
+          }
+        }
+      }]
+  },
+  "line5": {
+      "title": {
+          "show": true,
+          "text": "某站点用户访问来源",
+          "left": "left",
+          "padding": [5,20,5,10],
+          "textStyle": {
+              "fontSize": 18,
+              "fontWeight": "bolder",
+              "color": "#c23531"
+          }
+      },
+      "legend": {
+          "show": true,
+          "data": ["销量"],
+          "top": "top",
+          "left": "center",
+          "orient": "horizontal",
+          "padding":[25,20,25,10],
+          "textStyle": {
+              "color":  "#333",
+              "fontSize": 12
+          }
+      },
+      "grid": {
+          "left": 60,
+          "top": 60,
+          "right": 60,
+          "bottom": 60
+      },
+      "tooltip": {
+          "show":true,
+          "textStyle":{
+              "color":"#fff",
+              "fontSize": 18
+          }
+      },
+      "xAxis": {
+          "show":true,
+          "name":"服饰",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "interval":"auto",
+              "rotate":0,
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          },
+          "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+      },
+      "yAxis": {
+          "show":true,
+          "name":"销量",
+          "splitLine":{
+              "show":false,
+              "lineStyle":{
+                  "color":"red",
+                  "width":1,
+                  "type":"solid"
+              }
+          },
+          "axisLabel":{
+              "textStyle":{
+                  "fontSize":12,
+                  "color": "#333"
+              }
+          },
+          "axisLine": {
+              "lineStyle": {
+                  "color": "#333"
+              }
+          }
+      },
+      "series": [{
+          "name": "销量",
+          "type": "line",
+          "data": [5, 20, 36, 10, 10, 20],
+          "step": true,
+          "showSymbol": true,
+          "smooth": false,
+          "symbolSize":5,
+          "lineStyle":{
+              "width":2,
+              "color": "#c43632"
+          },
+          "itemStyle": {
+              "normal": {
+                  "label": {
+                      "show": true,
+                      "position": "top",
+                      "textStyle": {
+                          "color": "black",
+                          "fontSize": 16,
+                          "fontWeight": "bolder"
+                      }
+                  }
+              }
+          }
+      }]
+  },
+  "pie": {
+        "title": {
+            "show": true,
+            "text": "某站点用户访问来源",
+            "left": "left",
+            "padding": [5,20,5,10],
+            "textStyle": {
+                "fontSize": 18,
+                "fontWeight": "bolder",
+                "color": "#c23531"
+            }
+        },
+        "tooltip": {
+            "show":true,
+            "textStyle":{
+                "color":"#fff",
+                "fontSize": 18
+            }
+        },
+        "legend": {
+            "show": true,
+            "data": ["视频广告","联盟广告","邮件营销","直接访问","搜索引擎","间接访问"],
+            "top": "top",
+            "left": "center",
+            "orient": "horizontal",
+            "padding":[25,20,25,10],
+            "textStyle": {
+                "color":  "#333",
+                "fontSize": 12
+            }
+        },
+        "series": [
+            {
+                "name": "访问来源",
+                "type": "pie",
+                "isRadius":false,
+                "radius": "55%",
+                "minAngle":  0,
+                "roseType": "",
+                "autoSort": false,
+                "notCount": false,
+                "left": 60,
+                "top": 60,
+                "right": 60,
+                "bottom": 60,
+                "label": {
+                    "show": true,
+                    "position": "outside",
+                    "textStyle": {
+                        "color": "black",
+                        "fontSize": 16,
+                        "fontWeight": "bolder"
+                    }
+                },
+                "data":[
+                    {"value":1170, "name":"视频广告","itemStyle":{"color":null }},
+                    {"value":417, "name":"联盟广告","itemStyle":{"color":null }},
+                    {"value":335, "name":"邮件营销","itemStyle":{"color":null }},
+                    {"value":410, "name":"直接访问","itemStyle":{"color":null } },
+                    {"value":800, "name":"搜索引擎","itemStyle":{"color":null }}
+                ]
+            }
+        ]
+  },
+  "pie1": {
+        "title": {
+            "show": true,
+            "text": "某站点用户访问来源",
+            "left": "left",
+            "padding": [5,20,5,10],
+            "textStyle": {
+                "fontSize": 18,
+                "fontWeight": "bolder",
+                "color": "#c23531"
+            }
+        },
+        "tooltip": {
+            "show":true,
+            "textStyle":{
+                "color":"#fff",
+                "fontSize": 18
+            }
+        },
+        "legend": {
+            "show": true,
+            "data": ["视频广告","联盟广告","邮件营销","直接访问","搜索引擎","间接访问"],
+            "top": "top",
+            "left": "center",
+            "orient": "horizontal",
+            "padding":[25,20,25,10],
+            "textStyle": {
+                "color":  "#333",
+                "fontSize": 12
+            }
+        },
+        "series": [
+            {
+                "name": "访问来源",
+                "type": "pie",
+                "isRadius":true,
+                "radius": ["45%","55%"],
+                "minAngle":  0,
+                "roseType": "",
+                "autoSort": false,
+                "notCount": false,
+                "label": {
+                    "show": true,
+                    "position": "outside",
+                    "textStyle": {
+                        "color": "black",
+                        "fontSize": 16,
+                        "fontWeight": "bolder"
+                    }
+                },
+                "data":[
+                    {"value":1170, "name":"视频广告","itemStyle":{"color":null }},
+                    {"value":417, "name":"联盟广告","itemStyle":{"color":null }},
+                    {"value":335, "name":"邮件营销","itemStyle":{"color":null }},
+                    {"value":410, "name":"直接访问","itemStyle":{"color":null } },
+                    {"value":800, "name":"搜索引擎","itemStyle":{"color":null }}
+                ]
+            }
+        ]
+  },
+  "pie2": {
+        "title": {
+            "show": true,
+            "text": "某站点用户访问来源",
+            "left": "left",
+            "padding": [5,20,5,10],
+            "textStyle": {
+                "fontSize": 18,
+                "fontWeight": "bolder",
+                "color": "#c23531"
+            }
+        },
+        "tooltip": {
+            "show":true,
+            "textStyle":{
+                "color":"#fff",
+                "fontSize": 18
+            }
+        },
+        "legend": {
+            "show": true,
+            "data": ["视频广告","联盟广告","邮件营销","直接访问","搜索引擎","间接访问"],
+            "top": "top",
+            "left": "center",
+            "orient": "horizontal",
+            "padding":[25,20,25,10],
+            "textStyle": {
+                "color":  "#333",
+                "fontSize": 12
+            }
+        },
+        "series": [
+            {
+                "name": "访问来源",
+                "type": "pie",
+                "isRadius":false,
+                "radius": "55%",
+                "minAngle":  0,
+                "roseType": "radius",
+                "autoSort": false,
+                "notCount": false,
+                "label": {
+                    "show": true,
+                    "position": "outside",
+                    "textStyle": {
+                        "color": "black",
+                        "fontSize": 16,
+                        "fontWeight": "bolder"
+                    }
+                },
+                "data":[
+                    {"value":1170, "name":"视频广告","itemStyle":{"color":null }},
+                    {"value":417, "name":"联盟广告","itemStyle":{"color":null }},
+                    {"value":335, "name":"邮件营销","itemStyle":{"color":null }},
+                    {"value":410, "name":"直接访问","itemStyle":{"color":null } },
+                    {"value":800, "name":"搜索引擎","itemStyle":{"color":null }}
+                ]
+            }
+        ]
+  },
+  "linebar":{
+      "chartType":"linebar",
+      "title": {
+        "show": true,
+        "text": "某站点用户访问来源",
+        "left": "left",
+        "padding": [5,20,5,20],
+        "textStyle": {
+          "fontSize": 18,
+          "fontWeight": "bolder",
+          "color": "#c23531"
+        }
+      },
+      "legend": {
+        "show": true,
+        "data": ["蒸发量", "降水量", "平均温度"],
+        "top": "top",
+        "left": "center",
+        "orient": "horizontal",
+        "padding":[25,20,25,10],
+        "textStyle": {
+          "color":  "#333",
+          "fontSize": 12
+        }
+      },
+      "grid": {
+        "left": 60,
+        "top": 60,
+        "right": 60,
+        "bottom": 60
+      },
+      "tooltip": {
+        "show":true,
+        "trigger": "axis",
+        "axisPointer": {
+          "type": "cross",
+          "crossStyle": {
+            "color":"#999"
+          }
+        },
+        "textStyle":{
+          "color":"#fff",
+          "fontSize": 18
+        }
+      },
+      "xAxis": {
+        "show":true,
+        "type":  "category",
+        "data": [ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
+        "axisPointer": {
+          "type":  "shadow"
+        },
+        "splitLine":{
+          "show":false,
+          "lineStyle":{
+            "color":"red",
+            "width":1,
+            "type":"solid"
+          }
+        },
+        "axisLabel":{
+          "interval":"auto",
+          "rotate":0,
+          "textStyle":{
+            "fontSize":12,
+            "color": "#333"
+          }
+        },
+        "axisLine": {
+          "lineStyle": {
+            "color": "#333"
+          }
+        }
+      },
+      "yAxis": [{
+        "show":true,
+        "type": "value",
+        "name": "水量",
+        "splitLine":{
+          "show":false,
+          "lineStyle":{
+            "color":"red",
+            "width":1,
+            "type":"solid"
+          }
+        },
+        "axisLabel":{
+          "textStyle":{
+            "fontSize":12,
+            "color": "#333"
+          }
+        },
+        "axisLine": {
+          "lineStyle": {
+            "color": "#333"
+          }
+        }
+      },
+      {
+          "show":true,
+          "type": "value",
+          "name": "温度",
+          "splitLine":{
+            "show":false,
+            "lineStyle":{
+              "color":"red",
+              "width":1,
+              "type":"solid"
+            }
+          },
+          "axisLabel":{
+            "textStyle":{
+              "fontSize":12,
+              "color": "#333"
+            }
+          },
+          "axisLine": {
+            "lineStyle": {
+              "color": "#333"
+            }
+          }
+        }],
+      "series": [{
+        "name": "蒸发量",
+        "type": "bar",
+        "data": [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
+        "barWidth": 15,
+        "barMinHeight": 2,
+        "itemStyle": {
+          "normal": {
+            "barBorderRadius":0,
+            "color":null,
+            "label": {
+              "show": true,
+              "position": "top",
+              "textStyle": {
+                "color": "black",
+                "fontSize": 16,
+                "fontWeight": "bolder"
+              }
+            }
+          }
+        }
+      },{
+        "name": "降水量",
+        "type": "bar",
+        "data": [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
+        "barWidth":15,
+        "barMinHeight": 2,
+        "itemStyle": {
+          "normal": {
+            "barBorderRadius":0,
+            "color":null,
+            "label": {
+              "show": true,
+              "position": "top",
+              "textStyle": {
+                "color": "black",
+                "fontSize": 16,
+                "fontWeight": "bolder"
+              }
+            }
+          }
+        }
+      },
+      {
+        "name": "平均温度",
+        "type": "line",
+        "data": [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
+        "yAxisIndex": 1,
+        "step": false,
+        "showSymbol": true,
+        "smooth": false,
+        "symbolSize":5,
+        "lineStyle":{
+          "width":2,
+          "color": null
+        },
+        "itemStyle": {
+          "normal": {
+            "label": {
+              "show": true,
+              "position": "top",
+              "textStyle": {
+                "color": "black",
+                "fontSize": 16,
+                "fontWeight": "bolder"
+              }
+            }
+          }
+        }
+        }
+      ]
+    },
+  "map":{
+      "chartType":"map",
+      "title": {
+          "show": true,
+          "text": "地图",
+          "left": "left",
+          "padding": [5,20,5,10],
+          "textStyle": {
+              "fontSize": 18,
+              "fontWeight": "bolder",
+              "color": "#c23531"
+          }
+      },
+      "geo":{
+          "map": "china",
+          "layoutCenter": ["50%", "50%"],
+          "layoutSize": 600,
+          "zoom":0.5,
+          "roam": "move",
+          "label": {
+              "show": true,
+              "color":"#000",
+              "fontSize":12
+            },
+          "regions": [],
+          "emphasis": {
+              "label": {
+                  "color": "#fff"
+                },
+              "itemStyle": {
+                  "areaColor":"red"
+                }
+            },
+          "itemStyle": {
+              "borderWidth": 0.5,
+              "borderColor": "#000",
+              "areaColor": "#fff"
+            }
+      },
+      "series": [
+          {
+              "type": "map",
+              "coordinateSystem": "geo"
+          }
+      ]
+  },
+  "scatter": {
+    "title": {
+      "show": true,
+      "text": "散点图",
+      "left": "left",
+      "padding": [5,20,5,20],
+      "textStyle": {
+        "fontSize": 18,
+        "fontWeight": "bolder",
+        "color": "#c23531"
+      }
+    },
+    "legend": {
+      "show": true,
+      "data": [],
+      "top": "top",
+      "left": "center",
+      "orient": "horizontal",
+      "padding":[25,20,25,10],
+      "textStyle": {
+        "color":  "#333",
+        "fontSize": 12
+      }
+    },
+    "grid": {
+      "left": 60,
+      "top": 60,
+      "right": 60,
+      "bottom": 60
+    },
+    "tooltip": {
+      "show":true,
+      "textStyle":{
+        "color":"#fff",
+        "fontSize": 18
+      }
+    },
+    "xAxis": {
+      "show":true,
+      "name":"",
+      "splitLine":{
+        "show":false,
+        "lineStyle":{
+          "color":"red",
+          "width":1,
+          "type":"solid"
+        }
+      },
+      "axisLabel":{
+        "interval":"auto",
+        "rotate":0,
+        "textStyle":{
+          "fontSize":12,
+          "color": "#333"
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "#333"
+        }
+      }
+    },
+    "yAxis": {
+      "show":true,
+      "name":"",
+      "splitLine":{
+        "show":false,
+        "lineStyle":{
+          "color":"red",
+          "width":1,
+          "type":"solid"
+        }
+      },
+      "axisLabel":{
+        "textStyle":{
+          "fontSize":12,
+          "color": "#333"
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "#333"
+        }
+      }
+    },
+    "series": [{
+      "type": "scatter",
+      "symbolSize": 20,
+      "data": [
+        [10.0, 8.04],
+        [8.0, 6.95],
+        [13.0, 7.58],
+        [9.0, 8.81],
+        [11.0, 8.33],
+        [14.0, 9.96],
+        [6.0, 7.24],
+        [4.0, 4.26],
+        [12.0, 10.84],
+        [7.0, 4.82],
+        [5.0, 5.68]
+      ],
+      "itemStyle": {
+        "normal": {
+          "color":null,
+          "label": {
+            "show": true,
+            "position": "top",
+            "textStyle": {
+              "color": "black",
+              "fontSize": 16,
+              "fontWeight": "bolder"
+            }
+          }
+        }
+      }
+    }]
+  }
+}

+ 78 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/funnel.pyramid.json

@@ -0,0 +1,78 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["展现","点击","访问","咨询","订单"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "trigger": "item",
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "series": [
+    {
+      "name": "金字塔漏斗图",
+      "type": "funnel",
+      "left": "10%",
+      "top": 60,
+      "bottom": 60,
+      "width": "80%",
+      "sort": "ascending",
+      "gap": 2,
+      "orient": "vertical",
+      "label": {
+        "show": true,
+        "position": "inside",
+        "textStyle": {
+          "fontSize": 16,
+          "fontWeight": "normal"
+        }
+      },
+      "labelLine": {
+        "length": 10,
+        "lineStyle": {
+          "width": 1,
+          "type": "solid"
+        }
+      },
+      "itemStyle": {
+        "borderColor": "#fff",
+        "borderWidth": 1
+      },
+      "emphasis": {
+        "label": {
+          "fontSize": 20
+        }
+      },
+      "data": [
+        {"value": 60, "name": "访问"},
+        {"value": 40, "name": "咨询"},
+        {"value": 20, "name": "订单"},
+        {"value": 80, "name": "点击"},
+        {"value": 100, "name": "展现"}
+      ]
+    }
+  ]
+}

+ 78 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/funnel.simple.json

@@ -0,0 +1,78 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["展现","点击","访问","咨询","订单"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "trigger": "item",
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "series": [
+    {
+      "name": "漏斗图",
+      "type": "funnel",
+      "left": "10%",
+      "top": 60,
+      "bottom": 60,
+      "width": "80%",
+      "sort": "descending",
+      "gap": 2,
+      "orient": "vertical",
+      "label": {
+        "show": true,
+        "position": "inside",
+        "textStyle": {
+          "fontSize": 16,
+          "fontWeight": "normal"
+        }
+      },
+      "labelLine": {
+        "length": 10,
+        "lineStyle": {
+          "width": 1,
+          "type": "solid"
+        }
+      },
+      "itemStyle": {
+        "borderColor": "#fff",
+        "borderWidth": 1
+      },
+      "emphasis": {
+        "label": {
+          "fontSize": 20
+        }
+      },
+      "data": [
+        {"value": 60, "name": "访问"},
+        {"value": 40, "name": "咨询"},
+        {"value": 20, "name": "订单"},
+        {"value": 80, "name": "点击"},
+        {"value": 100, "name": "展现"}
+      ]
+    }
+  ]
+}

+ 76 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/gauge.simple.json

@@ -0,0 +1,76 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "series": [{
+    "name": "业务指标",
+    "type": "gauge",
+    "radius":"75%",
+    "center": [330, 200],
+    "itemStyle":{
+      "color":"#63869E"
+    },
+    "pointer": {
+      "show": true
+    },
+    "detail": {
+      "formatter": "{value}%",
+      "textStyle": {
+        "color": "rgba(0,0,0,1)",
+        "fontSize":25
+      }
+    },
+    "axisLabel": {
+      "show":true,
+      "color":"auto",
+      "textStyle": {
+        "fontSize": 10
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": [[0.2, "#91c7ae"], [0.8, "#63869E"], [1, "#C23531"]],
+        "width": 25
+      }
+    },
+    "axisTick": {
+      "length": 10,
+      "lineStyle": {
+        "color": "#fff"
+      }
+    },
+    "splitLine": {
+      "length": 30,
+      "lineStyle": {
+        "width": 3,
+        "color": "#ffffff"
+      }
+    },
+    "title": {
+      "show":true,
+      "textStyle": {
+        "fontSize": 20,
+        "color": "#000000",
+        "shadowColor": "#000",
+        "shadowBlur": 10
+      }
+    },
+    "data": [{"value": 50, "name": "完成率"}]
+  }]
+}

+ 77 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/gauge.simple180.json

@@ -0,0 +1,77 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "series": [{
+    "name": "业务指标",
+    "type": "gauge",
+    "startAngle":190,
+    "endAngle":-10,
+    "center": [330, 200],
+    "itemStyle":{
+      "color":"#63869E"
+    },
+    "pointer": {
+      "show": true
+    },
+    "detail": {
+      "formatter": "{value}%",
+      "textStyle": {
+        "color": "rgba(0,0,0,1)",
+        "fontSize":25
+      }
+    },
+    "axisLabel": {
+      "show":true,
+      "color":"auto",
+      "textStyle": {
+        "fontSize": 10
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": [[0.2, "#91c7ae"], [0.8, "#63869E"], [1, "#C23531"]],
+        "width": 25
+      }
+    },
+    "axisTick": {
+      "length": 10,
+      "lineStyle": {
+        "color": "#fff"
+      }
+    },
+    "splitLine": {
+      "length": 30,
+      "lineStyle": {
+        "width": 3,
+        "color": "#fff"
+      }
+    },
+    "title": {
+      "show":true,
+      "textStyle": {
+        "fontSize": 20,
+        "color": "#000",
+        "shadowColor": "#000",
+        "shadowBlur": 10
+      }
+    },
+    "data": [{"value": 60, "name": "成绩"}]
+  }]
+}

+ 169 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/graph.simple.json

@@ -0,0 +1,169 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["类目1","类目2","类目3","类目4","类目5","类目6"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+ // "animationDurationUpdate": 1500,
+ // "animationEasingUpdate":"quinticInOut",
+  "series": [{
+    "name": "关系图",
+    "type": "graph",
+    "layout": "circular",
+    "center": [320, 150],
+    "categories": [{
+      "name":"类目1",
+      "itemStyle":{
+        "color": ""
+      }
+    },{
+      "name":"类目2",
+      "itemStyle":{
+        "color": ""
+      }
+    },{
+      "name":"类目3",
+      "itemStyle":{
+        "color": ""
+      }
+    },{
+      "name":"类目4",
+      "itemStyle":{
+        "color": ""
+      }
+    },{
+      "name":"类目5",
+      "itemStyle":{
+        "color": ""
+      }
+    },{
+      "name":"类目6",
+      "itemStyle":{
+        "color": ""
+      }
+    }],
+    "label": {
+      "show":true,
+      "position": "right",
+      "textStyle": {
+        "color":  "#333",
+        "fontSize": 12
+      }
+    },
+    "lineStyle": {
+      "color": "source",
+      "curveness": 0.3
+    },
+    "data": [{
+      "name":"测试0",
+      "value":28,
+      "category":0
+    },{
+      "name":"测试1",
+      "value":9,
+      "category":1
+    },{
+      "name":"测试2",
+      "value":23,
+      "category": 2
+    },{
+      "name":"测试3",
+      "value":8,
+      "category": 3
+    },{
+      "name":"测试4",
+      "value":8,
+      "category": 4
+    },{
+      "name":"测试5",
+      "value":20,
+      "category": 5
+    }],
+    "links": [{
+      "source":"测试1",
+      "target":"测试0"
+    },{
+      "source":"测试2",
+      "target":"测试0"
+    },{
+      "source":"测试3",
+      "target":"测试1"
+    },{
+      "source":"测试4",
+      "target":"测试1"
+    },{
+      "source":"测试5",
+      "target":"测试2"
+    },{
+      "source":"测试5",
+      "target":"测试3"
+    },{
+      "source":"测试3",
+      "target":"测试2"
+    },{
+      "source":"测试3",
+      "target":"测试1"
+    },{
+      "source":"测试2",
+      "target":"测试1"
+    },{
+      "source":"测试2",
+      "target":"测试5"
+    },{
+      "source":"测试4",
+      "target":"测试5"
+    },{
+      "source":"测试4",
+      "target":"测试0"
+    },{
+      "source":"测试4",
+      "target":"测试1"
+    },{
+      "source":"测试4",
+      "target":"测试2"
+    },{
+      "source":"测试5",
+      "target":"测试0"
+    },{
+      "source":"测试5",
+      "target":"测试4"
+    },{
+      "source":"测试4",
+      "target":"测试3"
+    },{
+      "source":"测试3",
+      "target":"测试0"
+    },{
+      "source":"测试3",
+      "target":"测试1"
+    },{
+      "source":"测试0",
+      "target":"测试4"
+    }]
+  }]
+}

+ 117 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.area.json

@@ -0,0 +1,117 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+ /* "legend": {
+    "show": false,
+    "data": ["销量"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },*/
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"服饰",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+  },
+  "yAxis": {
+    "show":true,
+    "name":"销量",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "销量",
+    "type": "line",
+    "data": [5, 20, 36, 10, 10, 20],
+    "step": false,
+    "showSymbol": true,
+    "smooth": false,
+    "isArea": true,
+    "symbolSize":5,
+    "lineStyle":{
+      "width":2
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "areaStyle":{
+      "color": "#c43632",
+      "opacity":1
+    },
+    "itemStyle": {
+      "color": "#c43632"
+    }
+  }]
+}

+ 161 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.multi.json

@@ -0,0 +1,161 @@
+{
+  "title": {
+    "show": true,
+    "text": "某楼盘销售情况",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": [ "意向","预购","成交"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "trigger": "axis",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "type": "category",
+    "boundaryGap": true,
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["周一","周二","周三","周四","周五"]
+  },
+  "yAxis": {
+    "show":true,
+    "type": "value",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "预购",
+    "type": "line",
+    "data":  [30, 182, 434, 791, 390],
+    "step": false,
+    "showSymbol": true,
+    "smooth": false,
+    "symbolSize":5,
+    "lineStyle":{
+      "width":2
+    },
+    "itemStyle": {
+      "color":""
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    }
+  },
+    {
+      "name": "成交",
+      "type": "line",
+      "data":[10, 12, 21, 54, 260],
+      "step": false,
+      "showSymbol": true,
+      "smooth": false,
+      "symbolSize":5,
+      "lineStyle":{
+        "width":2
+      },
+      "itemStyle": {
+        "color":""
+      },
+      "label": {
+        "show": true,
+        "position": "top",
+        "textStyle": {
+          "color": "black",
+          "fontSize": 16,
+          "fontWeight": "bolder"
+        }
+      }
+    },
+    {
+      "name": "意向",
+      "type": "line",
+      "data":[1320, 1132, 601, 234, 120],
+      "step": false,
+      "showSymbol": true,
+      "smooth": false,
+      "symbolSize":5,
+      "lineStyle":{
+        "width":2
+      },
+      "itemStyle": {
+        "color":""
+      },
+      "label": {
+        "show": true,
+        "position": "top",
+        "textStyle": {
+          "color": "black",
+          "fontSize": 16,
+          "fontWeight": "bolder"
+        }
+      }
+    }]
+}

+ 116 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.simple.json

@@ -0,0 +1,116 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+/*  "legend": {
+    "show": false,
+    "data": ["销量"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },*/
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"服饰",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+  },
+  "yAxis": {
+    "show":true,
+    "name":"销量",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "销量",
+    "type": "line",
+    "data": [5, 20, 36, 10, 10, 20],
+    "step": false,
+    "showSymbol": true,
+    "smooth": false,
+    "symbolSize":5,
+    "isArea": false,
+    "lineStyle":{
+      "width":2
+    },
+    "itemStyle": {
+      "color":"#c43632"
+    },
+    "areaStyle":{
+      "color": "rgba(220,38,38,0)",
+      "opacity":1
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    }
+  }]
+}

+ 117 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.smooth.json

@@ -0,0 +1,117 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+ /* "legend": {
+    "show": false,
+    "data": ["销量"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },*/
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"服饰",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+  },
+  "yAxis": {
+    "show":true,
+    "name":"销量",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "销量",
+    "type": "line",
+    "data": [5, 20, 36, 10, 10, 20],
+    "step": false,
+    "showSymbol": true,
+    "smooth": true,
+    "symbolSize":5,
+    "isArea": false,
+    "lineStyle":{
+      "width":2
+    },
+    "areaStyle":{
+      "color": "rgba(220,38,38,0)",
+      "opacity":1
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "color": "#c43632"
+    }
+  }]
+}

+ 117 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/line.step.json

@@ -0,0 +1,117 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  /*"legend": {
+    "show": false,
+    "data": ["销量"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },*/
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"服饰",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
+  },
+  "yAxis": {
+    "show":true,
+    "name":"销量",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name": "销量",
+    "type": "line",
+    "data": [5, 20, 36, 10, 10, 20],
+    "step": true,
+    "showSymbol": true,
+    "smooth": false,
+    "isArea": false,
+    "symbolSize":5,
+    "lineStyle":{
+      "width":2
+    },
+    "areaStyle":{
+      "color": "rgba(220,38,38,0)",
+      "opacity":1
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "color": "#c43632"
+    }
+  }]
+}

+ 85 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/map.scatter.json

@@ -0,0 +1,85 @@
+{
+  "chartType":"map",
+  "title": {
+    "show": true,
+    "text": "主要城市空气质量",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "geo":{
+    "map": "china",
+    "layoutCenter": ["50%", "50%"],
+    "layoutSize": 600,
+    "zoom":0.7,
+    "roam": true,
+    "label": {
+      "show": true,
+      "color":"#000",
+      "fontSize":12
+    },
+    "regions": [],
+    "emphasis": {
+      "label": {
+        "color": "#fff"
+      },
+      "itemStyle": {
+        "areaColor":"red"
+      }
+    },
+    "itemStyle": {
+      "borderWidth": 0.5,
+      "borderColor": "#000",
+      "areaColor": "#61A0A8"
+    }
+  },
+  "series": [
+    {
+      "name": "",
+      "type": "scatter",
+      "coordinateSystem": "geo",
+      "data": [
+        { "name":"河北","value":279},
+        { "name":"海南","value":273},
+        { "name":"山东","value":229},
+        { "name":"甘肃","value":194},
+        { "name":"宁夏","value":193},
+        { "name":"浙江","value":177},
+        { "name":"湖南","value":119},
+        { "name":"湖北","value":79},
+        { "name":"河南","value":67},
+        { "name":"北京","value":58},
+        { "name":"天津","value":59},
+        { "name":"上海","value":63},
+        { "name":"广州","value":74}
+      ],
+      "encode": {
+        "value": [2]
+      },
+      "label": {
+        "formatter": "{b}",
+        "position": "right",
+        "show": false
+      },
+      "itemStyle": {
+        "color": "purple"
+      },
+      "emphasis": {
+        "label": {
+          "show": true
+        }
+      }
+    }
+  ]
+}

+ 47 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/map.simple.json

@@ -0,0 +1,47 @@
+{
+  "chartType":"map",
+  "title": {
+    "show": true,
+    "text": "中国地图",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "geo":{
+    "map": "china",
+    "layoutCenter": ["50%", "50%"],
+    "layoutSize": 600,
+    "zoom":0.7,
+    "roam": true,
+    "label": {
+      "show": true,
+      "color":"#000",
+      "fontSize":12
+    },
+    "regions": [],
+    "emphasis": {
+      "label": {
+        "color": "#fff"
+      },
+      "itemStyle": {
+        "areaColor":"red"
+      }
+    },
+    "itemStyle": {
+      "borderWidth": 0.5,
+      "borderColor": "#000",
+      "areaColor": "#61A0A8"
+    }
+  },
+  "series": [
+    {
+      "name": "地图",
+      "type": "map",
+      "coordinateSystem": "geo"
+    }
+  ]
+}

+ 187 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/mixed.linebar.json

@@ -0,0 +1,187 @@
+{
+  "chartType":"linebar",
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["蒸发量", "降水量", "平均温度"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "trigger": "axis",
+    "axisPointer": {
+      "type": "cross",
+      "crossStyle": {
+        "color":"#999"
+      }
+    },
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "type":  "category",
+    "data": [ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
+    "axisPointer": {
+      "type":  "shadow"
+    },
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "yAxis": [{
+    "show":true,
+    "type": "value",
+    "name": "水量",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },{
+      "show":true,
+      "type": "value",
+      "name": "温度",
+      "splitLine":{
+        "show":false,
+        "lineStyle":{
+          "color":"red",
+          "width":1,
+          "type":"solid"
+        }
+      },
+      "axisLabel":{
+        "textStyle":{
+          "fontSize":12,
+          "color": "#333"
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "#333"
+        }
+      }
+   }],
+  "series": [{
+    "name": "蒸发量",
+    "type": "line",
+    "data": [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
+    "barWidth": 15,
+    "barMinHeight": 2,
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    },
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    }
+  },{
+    "name": "降水量",
+    "type": "bar",
+    "data": [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
+    "barWidth":15,
+    "barMinHeight": 2,
+    "itemStyle": {
+      "barBorderRadius":0,
+      "color":""
+    },
+    "label": {
+      "show": true,
+      "position": "top",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    }
+  },
+    {
+      "name": "平均温度",
+      "type": "bar",
+      "data": [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
+      "yAxisIndex": 1,
+      "step": false,
+      "showSymbol": true,
+      "smooth": false,
+      "symbolSize":5,
+      "itemStyle": {
+        "color":""
+      },
+      "lineStyle":{
+        "width":2
+      },
+      "label": {
+        "show": true,
+        "position": "top",
+        "textStyle": {
+          "color": "",
+          "fontSize": 16,
+          "fontWeight": "bolder"
+        }
+      }
+    }
+  ]
+}

+ 101 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pictorial.spirits.json

@@ -0,0 +1,101 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "top": "5",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "max": 2000,
+    "name":"",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "margin": 10,
+      "textStyle":{
+        "fontSize":12,
+        "color": "green"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#999"
+      }
+    }
+  },
+  "grid": {
+    "top": 60,
+    "bottom": 60,
+    "left": 60,
+    "right": 60
+  },
+  "yAxis": {
+    "show":true,
+    "name":"",
+    "inverse": false,
+    "axisTick": {
+      "show": false
+    },
+    "axisLine": {
+      "show": false
+    },
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":16,
+        "color": "#999"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "data": ["2017", "2018", "2019", "2020"]
+  },
+  "series": [{
+    "type": "pictorialBar",
+    "symbol": "",
+    "symbolRepeat": "fixed",
+    "symbolMargin": "5%!",
+    "symbolClip": true,
+    "symbolSize": 30,
+    "symbolBoundingData": 2000,
+    "double": false,
+    "secondOpacity": 0.2,
+    "data": [891, 1220, 660, 1670],
+    "label": {
+      "show": true,
+      "position": "right",
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    }
+  }]
+}
+
+

+ 63 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pie.doughnut.json

@@ -0,0 +1,63 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{a} <br/>{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["视频广告","联盟广告","邮件营销","直接访问","搜索引擎","间接访问"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "series": [
+    {
+      "name": "访问来源",
+      "type": "pie",
+      "isRadius":true,
+      "radius": ["45%","55%"],
+      "minAngle":  0,
+      "roseType": "",
+      "isRose":false,
+      "autoSort": false,
+      "notCount": false,
+      "center": [320, 180],
+      "label": {
+        "show": true,
+        "position": "outside",
+        "textStyle": {
+          "color": "",
+          "fontSize": 16,
+          "fontWeight": "bolder"
+        }
+      },
+      "data":[
+        {"value":1170, "name":"视频广告","itemStyle":{"color":null }},
+        {"value":417, "name":"联盟广告","itemStyle":{"color":null }},
+        {"value":335, "name":"邮件营销","itemStyle":{"color":null }},
+        {"value":410, "name":"直接访问","itemStyle":{"color":null } },
+        {"value":800, "name":"搜索引擎","itemStyle":{"color":null }}
+      ]
+    }
+  ]
+}

+ 62 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pie.rose.json

@@ -0,0 +1,62 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{a} <br/>{b} : {c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["视频广告","联盟广告","邮件营销","直接访问","搜索引擎","间接访问"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "series": [
+    {
+      "name": "访问来源",
+      "type": "pie",
+      "isRadius":false,
+      "radius": "55%",
+      "minAngle":  0,
+      "roseType": "radius",
+      "isRose":true,
+      "autoSort": false,
+      "notCount": false,
+      "center": [320, 180],
+      "label": {
+        "show": true,
+        "position": "outside",
+        "textStyle": {
+          "fontSize": 16,
+          "fontWeight": "bolder"
+        }
+      },
+      "data":[
+        {"value":1170, "name":"视频广告","itemStyle":{"color":null }},
+        {"value":417, "name":"联盟广告","itemStyle":{"color":null }},
+        {"value":335, "name":"邮件营销","itemStyle":{"color":null }},
+        {"value":410, "name":"直接访问","itemStyle":{"color":null } },
+        {"value":800, "name":"搜索引擎","itemStyle":{"color":null }}
+      ]
+    }
+  ]
+}

+ 62 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/pie.simple.json

@@ -0,0 +1,62 @@
+{
+  "title": {
+    "show": true,
+    "text": "某站点用户访问来源",
+    "left": "left",
+    "padding": [5,20,5,10],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    },
+    "formatter": "{a} <br/>{b} : {c}"
+  },
+  "legend": {
+    "show": true,
+    "data": ["视频广告","联盟广告","邮件营销","直接访问","搜索引擎","间接访问"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "series": [
+    {
+      "name": "访问来源",
+      "type": "pie",
+      "isRadius":false,
+      "radius": "55%",
+      "minAngle":  0,
+      "roseType": "",
+      "isRose":false,
+      "autoSort": false,
+      "notCount": false,
+      "center": [320, 180],
+      "label": {
+        "show": true,
+        "position": "outside",
+        "textStyle": {
+          "fontSize": 16,
+          "fontWeight": "bolder"
+        }
+      },
+      "data":[
+        {"value":1170, "name":"视频广告","itemStyle":{"color":null }},
+        {"value":417, "name":"联盟广告","itemStyle":{"color":null }},
+        {"value":335, "name":"邮件营销","itemStyle":{"color":null }},
+        {"value":410, "name":"直接访问","itemStyle":{"color":null } },
+        {"value":800, "name":"搜索引擎","itemStyle":{"color":null }}
+      ]
+    }
+  ]
+}

+ 79 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/radar.basic.json

@@ -0,0 +1,79 @@
+{
+  "title": {
+    "show": true,
+    "text": "基础雷达图",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["预算分配(Allocated Budget)", "实际开销(Actual Spending)"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "radar": [{
+    "shape": "polygon",//circle
+    "center":[320, 200],
+    "name": {
+      "formatter": "【{value}】",
+      "textStyle": {
+        "fontSize":14,
+        "color": "#72ACD1"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "gray",
+        "opacity":0.5
+      }
+    },
+    "splitLine": {
+      "lineStyle": {
+        "color": "gray",
+        "opacity":0.5
+      }
+    },
+    "indicator": [
+      { "name": "销售(sales)", "max": 6500},
+      { "name": "管理(Administration)", "max": 16000},
+      { "name": "信息技术(Information Techology)", "max": 30000},
+      { "name": "客服(Customer Support)", "max": 38000},
+      { "name": "研发(Development)", "max": 52000},
+      { "name": "市场(Marketing)", "max": 25000}
+    ]
+  }],
+  "series": [{
+    "name": "预算 vs 开销(Budget vs spending)",
+    "type": "radar",
+    "data": [
+      {
+        "value": [4300, 10000, 28000, 35000, 50000, 19000],
+        "name": "预算分配(Allocated Budget)",
+        "lineStyle":{}
+      },
+      {
+        "value": [5000, 14000, 28000, 31000, 42000, 21000],
+        "name": "实际开销(Actual Spending)",
+        "lineStyle":{}
+      }
+    ]
+  }]
+}

+ 97 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/radar.custom.json

@@ -0,0 +1,97 @@
+{
+  "title": {
+    "show": true,
+    "text": "圆形雷达图",
+    "left": "left",
+    "padding": [8,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "legend": {
+    "show": true,
+    "data": ["图一", "图二"],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "radar": [
+    {
+      "indicator": [
+        { "name": "指标一", "max": 6500},
+        { "name": "指标二", "max": 6500},
+        { "name": "指标三", "max": 6500},
+        { "name": "指标四", "max": 6500},
+        { "name": "指标五", "max": 6500}
+      ],
+      "center":[320, 200],
+      "radius": 90,
+      "startAngle": 90,
+      "splitNumber": 4,
+      "shape": "circle",
+      "name": {
+        "formatter": "【{value}】",
+        "textStyle": {
+          "color": "#72ACD1"
+        }
+      },
+      "splitArea": {
+        "areaStyle": {
+          "color": [
+            "rgba(114, 172, 209, 0.2)",
+            "rgba(114, 172, 209, 0.4)",
+            "rgba(114, 172, 209, 0.6)",
+            "rgba(114, 172, 209, 0.8)",
+            "rgba(114, 172, 209, 1)"
+          ],
+          "shadowColor": "rgba(0, 0, 0, 0.3)",
+          "shadowBlur": 10
+        }
+      },
+      "axisLine": {
+        "lineStyle": {
+          "color": "gray",
+          "opacity":0.5
+        }
+      },
+      "splitLine": {
+        "lineStyle": {
+          "color": "gray",
+          "opacity":0.5
+        }
+      }
+    }
+  ],
+  "series": [
+    {
+      "name": "雷达图",
+      "type": "radar",
+      "data": [
+        {
+          "value": [1000, 2000, 3000, 4000, 2000],
+          "name": "图一",
+          "lineStyle":{}
+        },
+        {
+          "value": [5000, 4000, 3000, 100, 1500],
+          "name": "图二",
+          "lineStyle":{}
+        }
+      ]
+    }
+  ]
+}

+ 158 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/scatter.bubble.json

@@ -0,0 +1,158 @@
+{
+  "title": {
+    "show": true,
+    "text": "散点图",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "legend": {
+    "show": true,
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    },
+    "data": ["1990", "2015"]
+  },
+  "tooltip": {
+    "show":true,
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "yAxis": {
+    "show":true,
+    "name":"",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "name":"1990",
+    "type": "scatter",
+    "symbolSize": 20,
+    "itemStyle": {
+      "shadowBlur": 10,
+      "shadowColor": "rgba(25, 100, 150, 0.5)",
+      "shadowOffsetY": 5,
+      "color": {
+        "type": "radial",
+        "r": 0.8,
+        "colorStops": [{
+          "offset": 0, "color": "#E7727C" // 0% 处的颜色
+        },{
+          "offset":1, "color": "#D7291F" // 100% 处的颜色
+        }]
+      }
+    },
+    "data": [
+      [28604,77],
+      [31163,77.4],
+      [1516,68],
+      [13670,74.7],
+      [28599,75],
+      [29476,77.1],
+      [31476,75.4],
+      [28666,78.1],
+      [1777,57.7],
+      [29550,79.1],
+      [2076,67.9],
+      [12087,72],
+      [24021,75.4],
+      [43296,76.8],
+      [10088,70.8],
+      [19349,69.6]
+    ]
+  },{
+    "name":"2015",
+    "type": "scatter",
+    "symbolSize": 20,
+    "itemStyle": {
+      "shadowBlur": 10,
+      "shadowColor": "rgba(25, 100, 150, 0.5)",
+      "shadowOffsetY": 5,
+      "color": {
+        "type": "radial",
+        "r": 0.8,
+        "colorStops": [{
+          "offset": 0, "color": "#70D1E1" // 0% 处的颜色
+         },{
+          "offset":1, "color": "#0188FB" // 100% 处的颜色
+        }]
+      }
+    },
+    "data": [
+      [44056,81.8],
+      [43294,81.7],
+      [13334,76.9],
+      [21291,78.5],
+      [38923,80.8],
+      [37599,81.9],
+      [44053,81.1],
+      [42182,82.8],
+      [5903,66.8],
+      [36162,83.5],
+      [1390,71.4],
+      [34644,80.7],
+      [34186,80.6],
+      [64304,81.6],
+      [24787,77.3]
+    ]
+  }]
+}

+ 118 - 0
boman-report/src/main/resources/static/jmreport/desreport_/chartjson/scatter.simple.json

@@ -0,0 +1,118 @@
+{
+  "title": {
+    "show": true,
+    "text": "散点图",
+    "left": "left",
+    "padding": [5,20,5,20],
+    "textStyle": {
+      "fontSize": 18,
+      "fontWeight": "bolder",
+      "color": "#c23531"
+    }
+  },
+  /*"legend": {
+    "show": false,
+    "data": [],
+    "top": "top",
+    "left": "center",
+    "orient": "horizontal",
+    "padding":[25,20,25,10],
+    "textStyle": {
+      "color":  "#333",
+      "fontSize": 12
+    }
+  },*/
+  "grid": {
+    "left": 60,
+    "top": 60,
+    "right": 60,
+    "bottom": 60
+  },
+  "tooltip": {
+    "show":true,
+    "formatter": "{c}",
+    "textStyle":{
+      "color":"#fff",
+      "fontSize": 18
+    }
+  },
+  "xAxis": {
+    "show":true,
+    "name":"",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "interval":"auto",
+      "rotate":0,
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "yAxis": {
+    "show":true,
+    "name":"",
+    "splitLine":{
+      "show":false,
+      "lineStyle":{
+        "color":"red",
+        "width":1,
+        "type":"solid"
+      }
+    },
+    "axisLabel":{
+      "textStyle":{
+        "fontSize":12,
+        "color": "#333"
+      }
+    },
+    "axisLine": {
+      "lineStyle": {
+        "color": "#333"
+      }
+    }
+  },
+  "series": [{
+    "type": "scatter",
+    "symbolSize": 20,
+    "itemStyle": {
+      "color":"#C23531",
+      "opacity":1
+    },
+    "data": [
+      [10.0, 8.04],
+      [8.0, 6.95],
+      [13.0, 7.58],
+      [9.0, 8.81],
+      [11.0, 8.33],
+      [14.0, 9.96],
+      [6.0, 7.24],
+      [4.0, 4.26],
+      [12.0, 10.84],
+      [7.0, 4.82],
+      [5.0, 5.68]
+    ],
+    "label": {
+      "show": true,
+      "position": "top",
+      "opacity":1,
+      "textStyle": {
+        "color": "black",
+        "fontSize": 16,
+        "fontWeight": "bolder"
+      }
+    }
+  }]
+}

BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/authority/no-authority.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-1.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-2.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-3.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-4.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-5.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-5.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-6.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/bar-7.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel-simple.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/funnel.pyramid.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/gauge.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/gauge180.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/graph.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-1.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-2.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-3.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-4.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-4.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-5.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/line-6.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/map.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/map_scatter.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/mix-line-bar.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pictorialBar-spirit.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pictorialBar-spirit.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pictorialIcon/spirits.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-1.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-1.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-2.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-2.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-3.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/pie-3.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/radar-2.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/radar.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/radar.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/scatter-simple.jpg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/chartsImg/scatter_bubble.png


File diff suppressed because it is too large
+ 17 - 0
boman-report/src/main/resources/static/jmreport/desreport_/corelib/58eaeb4e52248a5c75936c6f4c33a370.svg


+ 104 - 0
boman-report/src/main/resources/static/jmreport/desreport_/corelib/cust.css

@@ -0,0 +1,104 @@
+/** list页面样式 */
+.ivu-tabs-nav .ivu-tabs-tab{color: #000000}
+.ivu-tabs-nav .ivu-tabs-tab-active {color: #2d8cf0;}
+.ivu-tabs-bar {border-bottom-color:  rgba(131, 125, 125, 0.5);}
+
+.excel-list-add{
+    height: 184px;
+    width: 258px;
+    border: 1px solid #00baff;
+    font-size: 14px;
+    color: #8eeeff;
+    background-image: linear-gradient(-90deg, rgba(169,222,225, .39) 0, rgba(0, 174, 255, .19) 100%);
+    box-shadow: 0 0 10px 0 rgba(55, 224, 255, .3);
+    cursor: pointer;
+}
+.excel-list-add a{
+    height: 100%;
+    color: #00BFFF;
+    flex-direction: column;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+.excel-list-add a:hover{
+    color:#2d8cf0;
+}
+.excel-view-item{
+    position: relative;
+    margin: 16px;
+    display: flex;
+    flex-direction: column;
+    width: 229px;
+    height: 162px;
+    /*border: 1px solid rgba(131, 125, 125,1);*/
+    border-radius: 5px;
+    overflow: hidden;
+}
+
+.excel-view-item:hover{
+    box-shadow: 0 0 20px 0 #000;
+    border: 1px solid #00baff;
+}
+.excel-view-item .thumb {
+    position: relative;
+    height: calc(100% - 36px);
+}
+.excel-view-item .thumb img{
+    width: 100%;height: 100%
+}
+.excel-view-item .item-footer{
+    font-size: 12px;
+    width: 100%;
+    height: 36px;
+    display: flex;
+    align-items: center;
+    position: absolute;
+    bottom: 0;
+    justify-content: space-between;
+    background: #1d262e;
+    box-sizing: border-box;
+    padding: 0 10px;
+    color: #bcc9d4;
+}
+.excel-view-item .item-name{
+    width: 100px;
+    padding: 0 5px;
+    line-height: 28px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    white-space: nowrap;
+    border: 1px solid transparent;
+}
+.opt-show{
+    color: #bcc9d4;
+}
+
+.excel-edit-container{
+    position: absolute;
+    top: 0;
+    left: 0;
+    background-color: rgba(29,38,46,0.5);
+    width: 100%;
+    height: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.excel-edit-container a{
+    display: inline-block;
+    vertical-align: middle;
+    height: 32px;
+    line-height: 32px;
+    padding: 0 30px;
+    box-sizing: border-box;
+    outline: 0;
+    text-align: center;
+    font-size: 14px;
+    background-image: linear-gradient(-225deg, #00d3f1 0, #12b3ff 100%);
+    color: #293f52;
+    border: none;
+    transition: .3s ease;
+    cursor: pointer;
+}

File diff suppressed because it is too large
+ 17 - 0
boman-report/src/main/resources/static/jmreport/desreport_/corelib/ece3e4fa05d4292823fdef970eaf1233.svg


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/0540532988b0d225f543519753f72473.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/0c74968b940136baec8566b2d95adeed.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/127a607b97c089a43dc00347b09fea99.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/1d1bc9c519706fbb04e69f9bc367f398.png


+ 749 - 0
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/2b9b4872cd25494093c1eb14f0264a0b.svg

@@ -0,0 +1,749 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="240"
+   height="144"
+   id="svg4136"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="jsoneditor-icons.svg">
+  <title
+     id="title6512">JSON Editor Icons</title>
+  <metadata
+     id="metadata4148">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>JSON Editor Icons</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs4146" />
+  <sodipodi:namedview
+     pagecolor="#ff63ff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1026"
+     id="namedview4144"
+     showgrid="true"
+     inkscape:zoom="4"
+     inkscape:cx="13.229181"
+     inkscape:cy="119.82429"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4136"
+     showguides="false"
+     borderlayer="false"
+     inkscape:showpageshadow="true"
+     showborder="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4640"
+       empspacing="24" />
+  </sodipodi:namedview>
+  <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+  <rect
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
+     id="svg_1"
+     height="16"
+     width="16"
+     y="4"
+     x="4" />
+  <rect
+     id="svg_1-7"
+     height="16"
+     width="16"
+     y="3.999995"
+     x="28.000006"
+     style="fill:#ec3f29;fill-opacity:0.94117647;stroke:none;stroke-width:0" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
+     x="52.000004"
+     y="3.999995"
+     width="16"
+     height="16"
+     id="rect4165" />
+  <rect
+     id="rect4175"
+     height="16"
+     width="16"
+     y="3.9999852"
+     x="172.00002"
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4175-3"
+     height="16"
+     width="16"
+     y="3.999995"
+     x="196"
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
+  <g
+     id="g4299"
+     style="stroke:none">
+    <rect
+       x="7.0000048"
+       y="10.999998"
+       width="9.9999924"
+       height="1.9999986"
+       id="svg_1-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
+    <rect
+       x="11.000005"
+       y="7.0000114"
+       width="1.9999955"
+       height="9.9999838"
+       id="svg_1-1-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
+  </g>
+  <g
+     id="g4299-3"
+     transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,19.029435,12.000001)"
+     style="stroke:none">
+    <rect
+       x="7.0000048"
+       y="10.999998"
+       width="9.9999924"
+       height="1.9999986"
+       id="svg_1-1-0"
+       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
+    <rect
+       x="11.000005"
+       y="7.0000114"
+       width="1.9999955"
+       height="9.9999838"
+       id="svg_1-1-1-9"
+       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
+  </g>
+  <rect
+     id="svg_1-7-5"
+     height="6.9999905"
+     width="6.9999909"
+     y="7.0000048"
+     x="55.000004"
+     style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
+  <rect
+     style="fill:#ffffff;fill-opacity:1;stroke:#4c4c4c;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     x="58"
+     y="10.00001"
+     width="6.9999909"
+     height="6.9999905"
+     id="rect4354" />
+  <rect
+     id="svg_1-7-5-7"
+     height="6.9999905"
+     width="6.9999909"
+     y="10.000005"
+     x="58.000004"
+     style="fill:#ffffff;fill-opacity:1;stroke:#3c80df;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647" />
+  <g
+     id="g4378">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
+       x="198"
+       y="10.999999"
+       width="7.9999909"
+       height="1.9999965"
+       id="svg_1-7-5-3" />
+    <rect
+       id="rect4374"
+       height="1.9999946"
+       width="11.999995"
+       y="7.0000005"
+       x="198"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
+    <rect
+       id="rect4376"
+       height="1.9999995"
+       width="3.9999928"
+       y="14.999996"
+       x="198"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
+  </g>
+  <g
+     transform="matrix(1,0,0,-1,-23.999995,23.999995)"
+     id="g4383">
+    <rect
+       id="rect4385"
+       height="1.9999965"
+       width="7.9999909"
+       y="10.999999"
+       x="198"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
+       x="198"
+       y="7.0000005"
+       width="11.999995"
+       height="1.9999946"
+       id="rect4387" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
+       x="198"
+       y="14.999996"
+       width="3.9999928"
+       height="1.9999995"
+       id="rect4389" />
+  </g>
+  <rect
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none"
+     id="rect3754-4"
+     width="16"
+     height="16"
+     x="76"
+     y="3.9999199" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 85.10447,6.0157384 -0.0156,1.4063 c 3.02669,-0.2402 0.33008,3.6507996 2.48438,4.5780996 -2.18694,1.0938 0.49191,4.9069 -2.45313,4.5781 l -0.0156,1.4219 c 5.70828,0.559 1.03264,-5.1005 4.70313,-5.2656 l 0,-1.4063 c -3.61303,-0.027 1.11893,-5.7069996 -4.70313,-5.3124996 z"
+     id="path4351"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccc" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 82.78125,5.9984384 0.0156,1.4063 c -3.02668,-0.2402 -0.33007,3.6506996 -2.48437,4.5780996 2.18694,1.0938 -0.49192,4.9069 2.45312,4.5781 l 0.0156,1.4219 c -5.70827,0.559 -1.03263,-5.1004 -4.70312,-5.2656 l 0,-1.4063 c 3.61303,-0.027 -1.11894,-5.7070996 4.70312,-5.3124996 z"
+     id="path4351-9"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccc" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none"
+     id="rect3754-25"
+     width="16"
+     height="16"
+     x="100"
+     y="3.9999199" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:none"
+     d="m 103.719,5.6719384 0,12.7187996 3.03125,0 0,-1.5313 -1.34375,0 0,-9.6249996 1.375,0 0,-1.5625 z"
+     id="path2987"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:none"
+     d="m 112.2185,5.6721984 0,12.7187996 -3.03125,0 0,-1.5313 1.34375,0 0,-9.6249996 -1.375,0 0,-1.5625 z"
+     id="path2987-1"
+     inkscape:connector-curvature="0" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none"
+     id="rect3754-73"
+     width="16"
+     height="16"
+     x="124"
+     y="3.9999199" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:none"
+     d="m 126.2824,17.602938 1.78957,0 1.14143,-2.8641 5.65364,0 1.14856,2.8641 1.76565,0 -4.78687,-11.1610996 -1.91903,0 z"
+     id="path3780"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccccccc" />
+  <path
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none"
+     d="m 129.72704,13.478838 4.60852,0.01 -2.30426,-5.5497996 z"
+     id="path3782"
+     inkscape:connector-curvature="0" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none"
+     id="rect3754-35"
+     width="16"
+     height="16"
+     x="148"
+     y="3.9999199" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:none"
+     d="m 156.47655,5.8917384 0,2.1797 0.46093,2.3983996 1.82813,0 0.39844,-2.3983996 0,-2.1797 z"
+     id="path5008-2"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccccc" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:none"
+     d="m 152.51561,5.8906384 0,2.1797 0.46094,2.3983996 1.82812,0 0.39844,-2.3983996 0,-2.1797 z"
+     id="path5008-2-8"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccccc" />
+  <rect
+     id="svg_1-7-2"
+     height="1.9999961"
+     width="11.999996"
+     y="64"
+     x="54"
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
+  <rect
+     id="svg_1-7-2-2"
+     height="2.9999905"
+     width="2.9999907"
+     y="52"
+     x="80.000008"
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
+     x="85.000008"
+     y="52"
+     width="2.9999907"
+     height="2.9999905"
+     id="rect4561" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
+     x="80.000008"
+     y="58"
+     width="2.9999907"
+     height="2.9999905"
+     id="rect4563" />
+  <rect
+     id="rect4565"
+     height="2.9999905"
+     width="2.9999907"
+     y="58"
+     x="85.000008"
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4567"
+     height="2.9999905"
+     width="2.9999907"
+     y="64"
+     x="80.000008"
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
+     x="85.000008"
+     y="64"
+     width="2.9999907"
+     height="2.9999905"
+     id="rect4569" />
+  <circle
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#4c4c4c;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+     id="path4571"
+     cx="110.06081"
+     cy="57.939209"
+     r="4.7438836" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
+     x="116.64566"
+     y="-31.79752"
+     width="4.229713"
+     height="6.4053884"
+     id="rect4563-2"
+     transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
+  <path
+     style="fill:#4c4c4c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 125,56 138.77027,56.095 132,64 Z"
+     id="path4613"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <path
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0"
+     id="path4615"
+     d="M 149,64 162.77027,63.905 156,56 Z"
+     style="fill:#4c4c4c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
+     x="54"
+     y="53"
+     width="11.999996"
+     height="1.9999961"
+     id="rect4638" />
+  <rect
+     id="svg_1-7-2-24"
+     height="1.9999957"
+     width="12.99999"
+     y="-56"
+     x="53"
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
+     transform="matrix(0,1,-1,0,0,0)" />
+  <rect
+     transform="matrix(0,1,-1,0,0,0)"
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
+     x="53"
+     y="-66"
+     width="12.99999"
+     height="1.9999957"
+     id="rect4657" />
+  <rect
+     id="rect4659"
+     height="0.99999291"
+     width="11.999999"
+     y="57"
+     x="54"
+     style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
+  <rect
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
+     x="54"
+     y="88.000122"
+     width="11.999996"
+     height="1.9999961"
+     id="rect4661" />
+  <rect
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
+     x="80.000008"
+     y="76.000122"
+     width="2.9999907"
+     height="2.9999905"
+     id="rect4663" />
+  <rect
+     id="rect4665"
+     height="2.9999905"
+     width="2.9999907"
+     y="76.000122"
+     x="85.000008"
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
+  <rect
+     id="rect4667"
+     height="2.9999905"
+     width="2.9999907"
+     y="82.000122"
+     x="80.000008"
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
+  <rect
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
+     x="85.000008"
+     y="82.000122"
+     width="2.9999907"
+     height="2.9999905"
+     id="rect4669" />
+  <rect
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
+     x="80.000008"
+     y="88.000122"
+     width="2.9999907"
+     height="2.9999905"
+     id="rect4671" />
+  <rect
+     id="rect4673"
+     height="2.9999905"
+     width="2.9999907"
+     y="88.000122"
+     x="85.000008"
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
+  <circle
+     r="4.7438836"
+     cy="81.939331"
+     cx="110.06081"
+     id="circle4675"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#d3d3d3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <rect
+     transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+     id="rect4677"
+     height="6.4053884"
+     width="4.229713"
+     y="-14.826816"
+     x="133.6163"
+     style="fill:#d3d3d3;fill-opacity:1;stroke:#d3d3d3;stroke-width:0;stroke-opacity:1" />
+  <path
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0"
+     id="path4679"
+     d="m 125,80.000005 13.77027,0.09499 L 132,87.999992 Z"
+     style="fill:#d3d3d3;fill-opacity:1;fill-rule:evenodd;stroke:#d3d3d3;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     style="fill:#d3d3d3;fill-opacity:1;fill-rule:evenodd;stroke:#d3d3d3;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 149,88.0002 162.77027,87.9052 156,80.0002 Z"
+     id="path4681"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <rect
+     id="rect4683"
+     height="1.9999961"
+     width="11.999996"
+     y="77.000122"
+     x="54"
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
+  <rect
+     transform="matrix(0,1,-1,0,0,0)"
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
+     x="77.000122"
+     y="-56"
+     width="12.99999"
+     height="1.9999957"
+     id="rect4685" />
+  <rect
+     id="rect4687"
+     height="1.9999957"
+     width="12.99999"
+     y="-66"
+     x="77.000122"
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
+     transform="matrix(0,1,-1,0,0,0)" />
+  <rect
+     style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
+     x="54"
+     y="81.000122"
+     width="11.999999"
+     height="0.99999291"
+     id="rect4689" />
+  <rect
+     id="rect4761-1"
+     height="1.9999945"
+     width="15.99999"
+     y="101"
+     x="76.000008"
+     style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4761-0"
+     height="1.9999945"
+     width="15.99999"
+     y="105"
+     x="76.000008"
+     style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4761-7"
+     height="1.9999945"
+     width="9"
+     y="109"
+     x="76.000008"
+     style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4761-1-1"
+     height="1.9999945"
+     width="12"
+     y="125"
+     x="76.000008"
+     style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4761-1-1-4"
+     height="1.9999945"
+     width="10"
+     y="137"
+     x="76.000008"
+     style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4761-1-1-4-4"
+     height="1.9999945"
+     width="10"
+     y="129"
+     x="82"
+     style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
+  <rect
+     id="rect4761-1-1-4-4-3"
+     height="1.9999945"
+     width="9"
+     y="133"
+     x="82"
+     style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
+  <path
+     inkscape:connector-curvature="0"
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     d="m 36.398438,100.0254 c -0.423362,-0.013 -0.846847,0.01 -1.265626,0.062 -1.656562,0.2196 -3.244567,0.9739 -4.507812,2.2266 L 29,100.5991 l -2.324219,7.7129 7.826172,-1.9062 -1.804687,-1.9063 c 1.597702,-1.5308 4.048706,-1.8453 5.984375,-0.7207 1.971162,1.1452 2.881954,3.3975 2.308593,5.5508 -0.573361,2.1533 -2.533865,3.6953 -4.830078,3.6953 l 0,3.0742 c 3.550756,0 6.710442,-2.4113 7.650391,-5.9414 0.939949,-3.5301 -0.618463,-7.2736 -3.710938,-9.0703 -1.159678,-0.6738 -2.431087,-1.0231 -3.701171,-1.0625 z"
+     id="path4138" />
+  <path
+     inkscape:connector-curvature="0"
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     d="m 59.722656,99.9629 c -1.270084,0.039 -2.541493,0.3887 -3.701172,1.0625 -3.092475,1.7967 -4.650886,5.5402 -3.710937,9.0703 0.939949,3.5301 4.09768,5.9414 7.648437,5.9414 l 0,-3.0742 c -2.296214,0 -4.256717,-1.542 -4.830078,-3.6953 -0.573361,-2.1533 0.337432,-4.4056 2.308594,-5.5508 1.935731,-1.1246 4.38863,-0.8102 5.986326,0.7207 l -1.806638,1.9063 7.828128,1.9062 -2.32422,-7.7129 -1.62696,1.7168 c -1.26338,-1.2531 -2.848917,-2.0088 -4.505855,-2.2285 -0.418778,-0.055 -0.842263,-0.076 -1.265625,-0.062 z"
+     id="path4138-1" />
+  <path
+     inkscape:connector-curvature="0"
+     style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
+     d="m 10.5,100 0,2 -2.4999996,0 L 12,107 l 4,-5 -2.5,0 0,-2 -3,0 z"
+     id="path3055-0-77" />
+  <path
+     style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.96599996;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 4.9850574,108.015 14.0298856,-0.03"
+     id="path5244-5-0-5"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cc" />
+  <path
+     style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.96599996;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 4.9849874,132.015 14.0298866,-0.03"
+     id="path5244-5-0-5-8"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cc" />
+  <path
+     inkscape:connector-curvature="0"
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.4;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     d="m 36.398438,123.9629 c -0.423362,-0.013 -0.846847,0.01 -1.265626,0.062 -1.656562,0.2196 -3.244567,0.9739 -4.507812,2.2266 L 29,124.5366 l -2.324219,7.7129 7.826172,-1.9062 -1.804687,-1.9063 c 1.597702,-1.5308 4.048706,-1.8453 5.984375,-0.7207 1.971162,1.1453 2.881954,3.3975 2.308593,5.5508 -0.573361,2.1533 -2.533864,3.6953 -4.830078,3.6953 l 0,3.0742 c 3.550757,0 6.710442,-2.4093 7.650391,-5.9394 0.939949,-3.5301 -0.618463,-7.2756 -3.710938,-9.0723 -1.159678,-0.6737 -2.431087,-1.0231 -3.701171,-1.0625 z"
+     id="path4138-12" />
+  <path
+     inkscape:connector-curvature="0"
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.4;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     d="m 59.722656,123.9629 c -1.270084,0.039 -2.541493,0.3888 -3.701172,1.0625 -3.092475,1.7967 -4.650886,5.5422 -3.710937,9.0723 0.939949,3.5301 4.09768,5.9394 7.648437,5.9394 l 0,-3.0742 c -2.296214,0 -4.256717,-1.542 -4.830078,-3.6953 -0.573361,-2.1533 0.337432,-4.4055 2.308594,-5.5508 1.935731,-1.1246 4.38863,-0.8102 5.986326,0.7207 l -1.806638,1.9063 7.828128,1.9062 -2.32422,-7.7129 -1.62696,1.7168 c -1.26338,-1.2531 -2.848917,-2.0088 -4.505855,-2.2285 -0.418778,-0.055 -0.842263,-0.076 -1.265625,-0.062 z"
+     id="path4138-1-3" />
+  <path
+     id="path6191"
+     d="m 10.5,116 0,-2 -2.4999996,0 L 12,109 l 4,5 -2.5,0 0,2 -3,0 z"
+     style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
+     inkscape:connector-curvature="0" />
+  <path
+     inkscape:connector-curvature="0"
+     style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
+     d="m 10.5,129 0,-2 -2.4999996,0 L 12,122 l 4,5 -2.5,0 0,2 -3,0 z"
+     id="path6193" />
+  <path
+     id="path6195"
+     d="m 10.5,135 0,2 -2.4999996,0 L 12,142 l 4,-5 -2.5,0 0,-2 -3,0 z"
+     style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
+     inkscape:connector-curvature="0" />
+  <path
+     sodipodi:type="star"
+     style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+     id="path4500"
+     sodipodi:sides="3"
+     sodipodi:cx="11.55581"
+     sodipodi:cy="60.073242"
+     sodipodi:r1="5.1116104"
+     sodipodi:r2="2.5558052"
+     sodipodi:arg1="0"
+     sodipodi:arg2="1.0471976"
+     inkscape:flatsided="false"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="m 16.66742,60.073242 -3.833708,2.213392 -3.8337072,2.213393 0,-4.426785 0,-4.426784 3.8337082,2.213392 z"
+     inkscape:transform-center-x="-1.2779026" />
+  <path
+     inkscape:transform-center-x="1.277902"
+     d="m -31.500004,60.073242 -3.833708,2.213392 -3.833707,2.213393 0,-4.426785 0,-4.426784 3.833707,2.213392 z"
+     inkscape:randomized="0"
+     inkscape:rounded="0"
+     inkscape:flatsided="false"
+     sodipodi:arg2="1.0471976"
+     sodipodi:arg1="0"
+     sodipodi:r2="2.5558052"
+     sodipodi:r1="5.1116104"
+     sodipodi:cy="60.073242"
+     sodipodi:cx="-36.611614"
+     sodipodi:sides="3"
+     id="path4502"
+     style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+     sodipodi:type="star"
+     transform="scale(-1,1)" />
+  <path
+     d="m 16.66742,60.073212 -3.833708,2.213392 -3.8337072,2.213392 0,-4.426784 0,-4.426785 3.8337082,2.213392 z"
+     inkscape:randomized="0"
+     inkscape:rounded="0"
+     inkscape:flatsided="false"
+     sodipodi:arg2="1.0471976"
+     sodipodi:arg1="0"
+     sodipodi:r2="2.5558052"
+     sodipodi:r1="5.1116104"
+     sodipodi:cy="60.073212"
+     sodipodi:cx="11.55581"
+     sodipodi:sides="3"
+     id="path4504"
+     style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+     sodipodi:type="star"
+     transform="matrix(0,1,-1,0,72.0074,71.7877)"
+     inkscape:transform-center-y="1.2779029" />
+  <path
+     inkscape:transform-center-y="-1.2779026"
+     transform="matrix(0,-1,-1,0,96,96)"
+     sodipodi:type="star"
+     style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+     id="path4506"
+     sodipodi:sides="3"
+     sodipodi:cx="11.55581"
+     sodipodi:cy="60.073212"
+     sodipodi:r1="5.1116104"
+     sodipodi:r2="2.5558052"
+     sodipodi:arg1="0"
+     sodipodi:arg2="1.0471976"
+     inkscape:flatsided="false"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="m 16.66742,60.073212 -3.833708,2.213392 -3.8337072,2.213392 0,-4.426784 0,-4.426785 3.8337082,2.213392 z" />
+  <path
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0"
+     id="path4615-5"
+     d="m 171.82574,65.174193 16.34854,0 -8.17427,-13.348454 z"
+     style="fill:#fbb917;fill-opacity:1;fill-rule:evenodd;stroke:#fbb917;stroke-width:1.65161395;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 179,55 0,6 2,0 0,-6"
+     id="path4300"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <path
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 179,62 0,2 2,0 0,-2"
+     id="path4300-6"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <path
+     style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.8"
+     d="M 99.994369,113.0221 102,114.98353 l 7,-6.9558 3,0.97227 2,-1 1,-2 0,-3 -3,3 -3,-3 3,-3 -3,0 -2,1 -1,2 0.99437,3.0221 z"
+     id="path4268"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccccccccccccc" />
+  <rect
+     id="rect4175-3-5"
+     height="16"
+     width="16"
+     y="4"
+     x="220"
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
+  <path
+     style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 234,6 0,2 -5,5 0,5 -2,0 0,-5 -5,-5 0,-2"
+     id="path3546"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccc" />
+  <g
+     transform="matrix(1.3333328,0,0,-1.5999992,-139.9999,127.19999)"
+     id="g4383-6">
+    <rect
+       id="rect4385-2"
+       height="1.2499905"
+       width="5.9999924"
+       y="12.625005"
+       x="198.00002"
+       style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0" />
+    <rect
+       style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
+       x="198.00002"
+       y="15.125007"
+       width="7.4999928"
+       height="1.2499949"
+       id="rect4387-9" />
+    <rect
+       style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
+       x="198.00002"
+       y="7.6250024"
+       width="2.9999909"
+       height="1.2499905"
+       id="rect4389-1-0" />
+    <rect
+       style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
+       x="198.00002"
+       y="10.125004"
+       width="4.4999919"
+       height="1.2499905"
+       id="rect4389-1-9" />
+    <path
+       style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:none;stroke-width:0.68465352px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 207.00001,16.375004 0,-5.625005 -2.25,0 3,-3.1250014 3,3.1250014 -2.25,0 0,5.625005 -1.5,0"
+       id="path4402"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+  <path
+     style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 164,100 0,3 -6,6 0,7 -4,0 0,-7 -6,-6 0,-3"
+     id="path3546-2-2"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccc" />
+  <rect
+     style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
+     id="svg_1-3"
+     height="16"
+     width="16"
+     y="28"
+     x="4" />
+  <path
+     sodipodi:nodetypes="ccccccccc"
+     inkscape:connector-curvature="0"
+     id="path4402-5-7"
+     d="m 15,41 0,-7 -4,0 0,3 -5,-4 5,-4 0,3 6,0 0,9"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.68465352px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+</svg>

BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/30e25c2abce295834a60fd9637bb4e0a.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/4319ed3209e5999879d00e2ea7eef42d.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/4b6b5c111a1a164649257c1d4bfbf784.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/50ddfa9d040f3585bd86a5f72c9cafe6.png


BIN
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/53b3da298ce02fdde6fd5a09a7624b4a.png


File diff suppressed because it is too large
+ 17 - 0
boman-report/src/main/resources/static/jmreport/desreport_/corelib/icons/58eaeb4e52248a5c75936c6f4c33a370.svg


Some files were not shown because too many files changed in this diff