Authored by wangtao

报表版本升级;新增数据es数据转换器

### Java template
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.idea/
... ...
... ... @@ -178,6 +178,13 @@
<scope>runtime</scope>
</dependency>-->
<!-- elastic相关-->
<!--<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>x-pack-sql-jdbc</artifactId>
<version>6.8.11</version>
</dependency>-->
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
... ...
... ... @@ -9,7 +9,7 @@ import org.springframework.core.env.Environment;
/**
* 积木报表独立服务启动类
*/
@SpringBootApplication(scanBasePackages = {"org.jeecg.modules.jmreport"})
@SpringBootApplication(scanBasePackages = {"org.jeecg.modules.jmreport","org.jeecg.modules.dataconvert"})
@MapperScan({"org.jeecg.modules.jmreport.ext.dao", "org.jeecgframework.minidao.**"})
public class JimuReportApplication {
... ... @@ -18,7 +18,7 @@ public class JimuReportApplication {
Environment env = application.getEnvironment();
String port = env.getProperty("server.port");
//String path = oConvertUtils.getString(env.getProperty("server.servlet.context-path"));
System.out.print("\n----------------------------------------------------------\n\t" + "Application JimuReport Demo is running! Access URL:\n\t" + "Local: \t\thttp://localhost:" + port + "/jmreport/list\n\t" + "----------------------------------------------------------");
System.out.print("\n----------------------------------------------------------\n\t" + "报表服务启动成功, 访问地址:\n\t" + "本地访问: \t\thttp://localhost:" + port + "/jmreport/list\n\t" + "----------------------------------------------------------");
}
}
... ...
package org.jeecg.modules.app;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.dataconvert.ApiDataConvertAdapterBase;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* @author Wang
* @description 描述
* @create 2022-05-17 20:01
*/
@Component
@Slf4j
public class AppStart implements ApplicationRunner {
private final ApplicationContext context;
public AppStart(ApplicationContext context) {
this.context = context;
}
/**
* @param args
* @throws Exception
*/
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("\n\n\n\n 数据转换器");
context.getBeansOfType(ApiDataConvertAdapterBase.class).forEach((k, v) -> {
log.info("\t\t 转换器名称:{},转换器描述:{}", v.key(), v.desc());
});
log.info("\n\n\n\n 数据转换器");
}
}
... ...
package org.jeecg.modules.dataconvert;
import org.jeecg.modules.jmreport.desreport.render.handler.convert.ApiDataConvertAdapter;
/**
* @author Wang
* @description 描述
* @create 2022-05-17 19:56
*/
public interface ApiDataConvertAdapterBase extends ApiDataConvertAdapter {
/**
* 当前转换器的key
* @return
*/
String key();
/**
* 描述
* @return
*/
String desc();
}
... ...
package org.jeecg.modules.dataconvert;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Objects;
/**
* @author Wang
* @description es数据转换器
* http://report.jeecg.com/2293839
* https://github.com/fengcharly/elasticsearch-sql-jdbc
* @create 2022-05-17 19:04
*/
@Component(EsDataConvertAggregationsAdapter.convertName)
public class EsDataConvertAggregationsAdapter implements ApiDataConvertAdapterBase {
public static final String convertName = "EsDataConvertAgg";
private String total = null;
/**
* 当前转换器的key
*
* @return
*/
@Override
public String key() {
return convertName;
}
/**
* 描述
*
* @return
*/
@Override
public String desc() {
return "针对es分组查询的结果处理,规范返回给前端!";
}
/**
* 返回list数据集,转换成积木报表需要格式{},没有嵌套
* 注意:需要json格式,不用data包裹起来了
*
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getData(JSONObject jsonObject) {
if (jsonObject.containsKey("aggregations")) {
JSONObject aggregations = jsonObject.getJSONObject("aggregations");
if (aggregations == null || aggregations.isEmpty()) {
return "";
}
JSONArray array = new JSONArray();
JSONObject data = new JSONObject();
aggregations.forEach((k, v) -> {
JSONObject itemValue = (JSONObject) v;
if (itemValue.containsKey("buckets")) {
JSONArray buckets = itemValue.getJSONArray("buckets");
getBuckets(k, array, null, buckets);
} else if(Arrays.asList("min","max","avg").contains(k)){
/*
"aggregations": {
"min": {
"value": 0.009999999776482582
},
"max": {
"value": 100.0
}
}
*/
data.put(k,itemValue.get("value"));
}
});
if(!data.isEmpty()){
array.add(data);
}
return array.toJSONString();
}
return "";
}
/**
* 解析buckets数据
*
* @param parentKey
* @param array
* @param buckets
*/
private void getBuckets(String parentKey, JSONArray array, JSONObject parentData, JSONArray buckets) {
parentKey = parentKey.replace(".","").toLowerCase();
if (buckets == null || buckets.isEmpty()) {
return;
}
String finalParentKey = parentKey;
buckets.stream().forEach(item -> {
JSONObject itemData = (JSONObject) item;
JSONObject data = new JSONObject();
if (parentData != null) {
data = parentData;
}
JSONObject finalData = data;
itemData.forEach((k, v) -> {
// 不是对象类型
if (!(v instanceof JSONObject)) {
if (Objects.equals("key", k)) {
finalData.put(finalParentKey, v);
} else {
finalData.put(k.toLowerCase(), v);
}
} else {
JSONObject agg = (JSONObject) v;
agg.forEach((k1, v1) -> {
if (Objects.equals("buckets", k1)) {
JSONArray bucketsChild = (JSONArray) v1;
getBuckets(k, array, finalData, bucketsChild);
}
});
}
array.add(finalData);
});
});
}
}
... ...
package org.jeecg.modules.dataconvert;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
/**
* @author Wang
* @description es数据转换器
* http://report.jeecg.com/2293839
* https://github.com/fengcharly/elasticsearch-sql-jdbc
* @create 2022-05-17 19:04
*/
@Component(EsDataConvertHitsAdapter.convertName)
public class EsDataConvertHitsAdapter implements ApiDataConvertAdapterBase {
public static final String convertName = "EsDataConvertHits";
private String total = null;
/**
* 当前转换器的key
*
* @return
*/
@Override
public String key() {
return convertName;
}
/**
* 描述
*
* @return
*/
@Override
public String desc() {
return "针对普通es查询结果处理,规范返回给前端!";
}
/**
* 返回list数据集,转换成积木报表需要格式{},没有嵌套
* 注意:需要json格式,不用data包裹起来了
*
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getData(JSONObject jsonObject) {
if (jsonObject.containsKey("hits")) {
JSONObject hits = jsonObject.getJSONObject("hits");
if (hits.containsKey("hits")) {
JSONArray array = new JSONArray();
total = hits.getString("total");
JSONArray hitsArr = hits.getJSONArray("hits");
if (hitsArr == null || hitsArr.isEmpty()) {
return "";
}
hitsArr.stream().forEach(item -> {
JSONObject itemData = (JSONObject) item;
if (itemData.containsKey("_source")) {
JSONObject source = itemData.getJSONObject("_source");
JSONObject data = new JSONObject();
source.forEach((k,v) ->{
data.put(k.toLowerCase(),v);
});
array.add(data);
}
});
return array.toJSONString();
}
}
return "";
}
@Override
public String getCount(JSONObject jsonObject) {
if (total != null) {
return total;
}
if (jsonObject.containsKey("hits")) {
JSONObject hits = jsonObject.getJSONObject("hits");
if (hits.containsKey("hits")) {
total = hits.getString("total");
return total;
}
}
return "0";
}
}
... ...
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.jeecg.modules.jmreport.desreport.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import org.jeecg.modules.jmreport.api.data.IDataSetFactory;
import org.jeecg.modules.jmreport.common.b.d;
import org.jeecg.modules.jmreport.common.b.f;
import org.jeecg.modules.jmreport.common.b.g;
import org.jeecg.modules.jmreport.common.b.i;
import org.jeecg.modules.jmreport.common.constant.c;
import org.jeecg.modules.jmreport.common.expetion.JimuReportException;
import org.jeecg.modules.jmreport.config.client.JmReportTokenClient;
import org.jeecg.modules.jmreport.desreport.entity.JmReportDbField;
import org.jeecg.modules.jmreport.desreport.express.ExpressUtil;
import org.jeecg.modules.jmreport.desreport.model.JmPage;
import org.jeecg.modules.jmreport.desreport.render.utils.FreeMarkerUtils;
import org.jeecg.modules.jmreport.dyndb.query.a;
import org.jeecg.modules.jmreport.dyndb.util.b;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
public class e {
private static final Logger e = LoggerFactory.getLogger(e.class);
private static JmReportTokenClient f;
public static final String a = " where ";
public static final String b = " and ";
public static final String c = " or ";
public static final String d = "0";
public e() {
}
public static boolean a(List var0) {
return var0 != null && var0.size() > 0;
}
public static JSONObject a(JSONObject var0) {
ArrayList var1 = new ArrayList();
Iterator var2 = var0.keySet().iterator();
while(var2.hasNext()) {
String var3 = (String)var2.next();
if (g.d(var3) != null && !"NaN".equals(var3) && !"len".equals(var3) && !"cells".equals(var3)) {
var1.add(Integer.parseInt(var3));
}
}
Collections.sort(var1);
JSONArray var8 = new JSONArray();
JSONObject var4 = new JSONObject(true);
JSONObject var7;
for(Iterator var5 = var1.iterator(); var5.hasNext(); var7 = null) {
Integer var6 = (Integer)var5.next();
var7 = var0.getJSONObject(String.valueOf(var6));
var8.add(var7);
var4.put(String.valueOf(var6), var7);
}
return var4;
}
public static List<Map<String, Object>> b(List<Map<String, Object>> var0) {
if (g.c(var0)) {
return null;
} else {
ArrayList var1 = new ArrayList();
Iterator var2 = var0.iterator();
while(true) {
Map var3;
do {
if (!var2.hasNext()) {
return var1;
}
var3 = (Map)var2.next();
} while(var3 == null);
LinkedHashMap var4 = new LinkedHashMap(5);
Set var5 = var3.keySet();
Object var8;
String var11;
for(Iterator var6 = var5.iterator(); var6.hasNext(); var4.put(var11, var8)) {
String var7 = (String)var6.next();
var8 = var3.get(var7);
if (var8 instanceof Clob) {
var8 = a((Clob)var8);
} else if (var8 instanceof byte[]) {
var8 = new String((byte[])((byte[])var8));
} else if (var8 instanceof Blob) {
try {
if (var8 != null) {
Blob var9 = (Blob)var8;
var8 = new String(var9.getBytes(1L, (int)var9.length()), "UTF-8");
}
} catch (Exception var10) {
var10.printStackTrace();
}
}
var11 = var7.toLowerCase();
if (var8 != null && var8.toString().matches("^[\\s\\S]*\\.0+$")) {
var8 = var8.toString();
}
}
var1.add(var4);
}
}
}
public static String a(Clob var0) {
String var1 = "";
try {
Reader var2 = var0.getCharacterStream();
char[] var3 = new char[(int)var0.length()];
var2.read(var3);
var1 = new String(var3);
var2.close();
} catch (IOException var4) {
var4.printStackTrace();
} catch (SQLException var5) {
var5.printStackTrace();
}
return var1;
}
private static void a(String var0, String var1, String var2, StringBuffer var3) {
if ("number".equals(var0)) {
var3.append(var1);
} else if (org.jeecg.modules.jmreport.dyndb.util.b.b(var2) && var0.toLowerCase().indexOf("date") >= 0) {
var3.append(l.a(var1));
} else {
var3.append("'" + var1 + "'");
}
}
public static void a(String var0, String var1, JmReportDbField var2, JSONObject var3, StringBuffer var4) {
String var5 = var2.getFieldName();
String var6 = var0 + "__" + var5;
String var7 = var2.getWidgetType();
Object var8;
String var9;
if (org.jeecg.modules.jmreport.common.constant.c.h.equals(var2.getSearchMode())) {
var8 = var3.get(var6 + "_begin");
if (var8 != null) {
var9 = var8.toString();
if (!"".equals(var9)) {
var4.append(" AND " + var5 + ">=");
a(var7, var9, var1, var4);
}
}
Object var12 = var3.get(var6 + "_end");
if (var12 != null) {
String var10 = var12.toString();
if (!"".equals(var10)) {
var4.append(" AND " + var5 + "<=");
a(var7, var10, var1, var4);
}
}
} else {
var8 = var3.get(var6);
if (var8 != null) {
var9 = var8.toString();
if (!"".equals(var9)) {
var4.append(" AND ");
if (org.jeecg.modules.jmreport.dyndb.util.b.b(var1) && var7.toLowerCase().indexOf("date") >= 0) {
var4.append(var5 + "=" + l.a(var9));
} else {
boolean var13 = !"number".equals(var7);
String var11 = org.jeecg.modules.jmreport.dyndb.query.a.a(var5, "", var8, var13);
var4.append(var11);
}
}
}
}
}
public static String a(String var0, Map<String, Object> var1) {
if (var0 != null && !"".equals(var0)) {
if (var0.endsWith(";")) {
var0 = var0.substring(0, var0.length() - 1);
}
i.a(var0);
var0 = b(var0, var1);
var0 = a(var0, "\\$");
return var0;
} else {
throw new JimuReportException("sql为空");
}
}
public static String a(String var0, Map<String, Object> var1, JSONArray var2) {
if (var0 != null && !"".equals(var0)) {
if (var0.endsWith(";")) {
var0 = var0.substring(0, var0.length() - 1);
}
i.a(var0);
var0 = b(var0, var1);
var0 = a(var2, var0);
var0 = a(var0, "\\$");
return var0;
} else {
throw new JimuReportException("sql为空");
}
}
public static String a(String var0, String var1) {
var0 = var0.replaceAll("(?i) where ", " where ");
var0 = var0.replaceAll("(?i) and ", " and ");
var0 = var0.replaceAll("(?i) or ", " or ");
String var2 = "(,\\s*|\\s*(\\w|\\.)+\\s*[^, ]+ *\\S*)" + var1 + "\\{\\w+\\}\\S*";
Pattern var3 = Pattern.compile(var2);
for(Matcher var4 = var3.matcher(var0); var4.find(); e.debug("${}替换后结果 ==>" + var0)) {
String var5 = var4.group();
e.debug("${}匹配带参SQL片段 ==>" + var5);
String var6;
if (var5.indexOf(" where ") != -1) {
var6 = var5.substring(0, var5.indexOf(" where "));
var0 = var0.replace(var5, var6 + " where 1=1");
} else if (var5.indexOf(" and ") != -1) {
var5 = var5.substring(var5.indexOf("and"));
if (var5.indexOf("(") != -1) {
var5 = var5.substring(var5.indexOf("(") + 1);
var0 = var0.replace(var5, " 1=1 ");
} else {
var0 = var0.replace(var5, "and 1=1");
}
} else if (var5.indexOf(" or ") != -1) {
var5 = var5.substring(var5.indexOf("or"));
if (var5.indexOf("(") != -1) {
var5 = var5.substring(var5.indexOf("(") + 1);
var0 = var0.replace(var5, " 1=1 ");
} else {
var0 = var0.replace(var5, "or 1=1");
}
} else if (var5.startsWith(",")) {
var0 = var0.replace(var5, " ,1 ");
} else {
var6 = e(var0);
if (!var0.contains("case") && g.c(var6) != null) {
var0 = var0.replace(var5, " 1=1 ");
}
}
}
var0 = var0.replaceAll("(?i)\\(\\s*1=1\\s*(AND|OR)", "(");
var0 = var0.replaceAll("(?i)(AND|OR)\\s*1=1", "");
return var0;
}
public static String b(String var0, Map<String, Object> var1) {
if (var1 != null) {
Set var2 = a(var0);
if (null != var2 && var2.size() > 0) {
Iterator var3 = var2.iterator();
while(var3.hasNext()) {
String var4 = (String)var3.next();
if (var1.get(var4) != null) {
String var5 = var1.get(var4).toString();
var0 = var0.replace("#{" + var4 + "}", var5);
} else {
var0 = var0.replace("#{" + var4 + "}", "");
}
}
}
} else {
var0 = a(var0, "\\#");
}
return var0;
}
public static Set<String> a(String var0) {
if (g.c(var0) != null) {
return null;
} else {
HashSet var1 = new HashSet();
String var2 = "\\#\\{\\w+\\}";
Pattern var3 = Pattern.compile(var2);
Matcher var4 = var3.matcher(var0);
while(var4.find()) {
String var5 = var4.group();
var1.add(var5.substring(var5.indexOf("{") + 1, var5.indexOf("}")));
}
return var1;
}
}
public static List<String> b(String var0) {
if (g.c(var0) != null) {
return null;
} else {
ArrayList var1 = new ArrayList();
String var2 = "\\$\\{\\w+\\}";
Pattern var3 = Pattern.compile(var2);
Matcher var4 = var3.matcher(var0);
while(var4.find()) {
String var5 = var4.group();
var1.add(var5.substring(var5.indexOf("{") + 1, var5.indexOf("}")));
}
return var1;
}
}
public static String a(String var0, Map<String, Object> var1, String var2) {
HttpServletRequest var3 = org.jeecg.modules.jmreport.common.b.f.getHttpServletRequest();
String var4 = a(var3);
String var5 = "\\{\\{\\s*domainURL\\s*\\}\\}";
var0 = a(var0, var5, var4);
String var6 = "#\\{\\s*sys_base_path\\s*\\}";
var0 = a(var0, var6, var4);
String var7 = "#\\{\\s*api_base_path\\s*\\}";
var0 = a(var0, var7, var2);
var0 = b(var0, var1);
return var0;
}
private static String a(String var0, String var1, String var2) {
Pattern var3 = Pattern.compile(var1);
Matcher var4 = var3.matcher(var0);
if (var4.find()) {
var0 = var0.replaceAll(var1, var2);
}
return var0;
}
public static String a(HttpServletRequest var0) {
String var1 = var0.getScheme();
String var2 = var0.getServerName();
int var3 = var0.getServerPort();
String var4 = var0.getContextPath();
return var1 + "://" + var2 + ":" + var3 + var4;
}
public static String b(String url, String token) {
HttpHeaders var2 = a();
if (var2 == null) {
var2 = new HttpHeaders();
if (g.c(token) != null && f != null) {
token = f.getToken();
}
var2.add("X-Access-Token", token);
var2.add("token", token);
}
ResponseEntity var3 = null;
try {
// es查询不拼接分页字段
if(url.indexOf("/_sql?sql=") != -1 && url.indexOf("&") != -1){
url = url.split("&")[0];
}
var3 = n.a(url, var2, String.class, new Object[0]);
} catch (Exception var5) {
e.error("GET 请求url=" + url + " , api调用专用 error: " + var5.getMessage());
return null;
}
return (String)var3.getBody();
}
public static String a(String var0, String var1, Map<String, Object> var2) {
HttpHeaders var3 = a();
if (var3 == null) {
var3 = new HttpHeaders();
if (g.c(var1) != null && f != null) {
var1 = f.getToken();
}
var3.add("X-Access-Token", var1);
var3.add("token", var1);
}
ResponseEntity var4 = null;
try {
var4 = n.a(var0, var3, var2, String.class, new Object[0]);
} catch (Exception var6) {
e.error("POST请求 URL=" + var0 + " , api调用专用 error: " + var6.getMessage());
return null;
}
return (String)var4.getBody();
}
public static String a(String var0, String var1, JSONObject var2) {
HashMap var3 = new HashMap(5);
if (var2 != null) {
Iterator var4 = var2.entrySet().iterator();
while(var4.hasNext()) {
Map.Entry var5 = (Map.Entry)var4.next();
var3.put(var5.getKey(), var5.getValue());
}
}
return a((String)var0, (String)var1, (Map)var3);
}
private static boolean a(InputStream var0) {
if (var0 == null) {
return false;
} else {
BufferedImage var1 = null;
boolean var2;
try {
var1 = ImageIO.read(var0);
if (var1 == null || var1.getWidth((ImageObserver)null) <= 0 || var1.getHeight((ImageObserver)null) <= 0) {
var2 = false;
return var2;
}
var2 = true;
} catch (Exception var7) {
boolean var3 = false;
return var3;
} finally {
var1 = null;
}
return var2;
}
}
public static void a(String var0, File var1) {
ByteArrayInputStream var2 = null;
FileOutputStream var3 = null;
ResponseEntity var4 = n.a(var0, byte[].class);
byte[] var5 = (byte[])var4.getBody();
short var6 = 1024;
try {
var2 = new ByteArrayInputStream(var5);
if (a((InputStream)var2)) {
throw new JimuReportException("图片格式非法,存在安全漏洞风险!");
}
var3 = new FileOutputStream(var1);
boolean var7 = false;
byte[] var8 = new byte[var6];
int var27;
while((var27 = var2.read(var8, 0, var6)) != -1) {
var3.write(var8, 0, var27);
}
var3.flush();
} catch (FileNotFoundException var24) {
var24.printStackTrace();
} catch (IOException var25) {
var25.printStackTrace();
} finally {
if (var2 != null) {
try {
var2.close();
} catch (IOException var23) {
var23.printStackTrace();
}
}
if (var3 != null) {
try {
var3.close();
} catch (IOException var22) {
var22.printStackTrace();
}
}
}
}
private static String l(String var0) {
if (var0.indexOf("token") < 0) {
return null;
} else {
int var1 = var0.indexOf("?");
if (var1 < 0) {
return null;
} else {
String var2 = var0.substring(var1 + 1);
String[] var3 = var2.split("&");
String var4 = null;
String[] var5 = var3;
int var6 = var3.length;
for(int var7 = 0; var7 < var6; ++var7) {
String var8 = var5[var7];
String[] var9 = var8.split("=");
if (var9[0].equals("token")) {
var4 = var9[1];
break;
}
}
return var4;
}
}
}
public static Object c(String var0, String var1) {
if (g.d(var1) != null) {
Object var2 = null;
if ("java-class".equals(var0)) {
try {
var2 = c(var1).newInstance();
} catch (InstantiationException var4) {
e.error(var4.getMessage(), var4);
} catch (IllegalAccessException var5) {
e.error(var5.getMessage(), var5);
}
} else if ("spring-key".equals(var0)) {
var2 = org.jeecg.modules.jmreport.common.b.f.a(var1);
}
return var2;
} else {
return null;
}
}
public static Class c(String var0) {
Class var1 = null;
try {
var1 = Class.forName(var0);
return var1;
} catch (ClassNotFoundException var3) {
var3.printStackTrace();
throw new RuntimeException(var0 + " not found!");
}
}
public static IDataSetFactory d(String var0, String var1) {
Object var2 = c(var0, var1);
if (var2 != null && var2 instanceof IDataSetFactory) {
IDataSetFactory var3 = (IDataSetFactory)var2;
return var3;
} else {
return null;
}
}
public static List<Map<String, Object>> a(IDataSetFactory var0, Map<String, Object> var1, Boolean var2) {
List var3;
if (var2) {
JmPage var4 = var0.createPageData(var1);
var3 = var4.getRecords();
} else {
var3 = var0.createData(var1);
}
ArrayList var11 = null;
if (var3 != null && var3.size() > 0) {
var11 = new ArrayList();
Map var5 = (Map)var3.get(0);
int var6 = 1;
Iterator var7 = var5.entrySet().iterator();
while(var7.hasNext()) {
Map.Entry var8 = (Map.Entry)var7.next();
String var9 = (String)var8.getKey();
LinkedHashMap var10 = new LinkedHashMap();
var10.put("fieldName", var9);
var10.put("fieldText", var9);
var10.put("widgetType", "String");
var10.put("orderNum", var6++);
var11.add(var10);
}
}
return var11;
}
public static Map<String, Object> b(JSONObject var0) {
HashMap var1 = new HashMap(5);
Iterator var2 = var0.entrySet().iterator();
while(var2.hasNext()) {
Map.Entry var3 = (Map.Entry)var2.next();
var1.put(var3.getKey(), var3.getValue());
}
return var1;
}
private static HttpHeaders a() {
HttpHeaders var0 = null;
if (f == null) {
f = (JmReportTokenClient)org.jeecg.modules.jmreport.common.b.f.a(JmReportTokenClient.class);
}
if (f != null) {
var0 = f.customApiHeader();
}
return var0;
}
public static String d(String var0) {
String var1 = var0.replaceAll("\\{\"", "{'").replaceAll("\":\"", "':'").replaceAll("\",\"", "','").replaceAll("\":", "':").replaceAll(",\"", ",'").replaceAll("\"\\}", "'}").replaceAll("\"", "").replaceAll(" ", "").replaceAll("'", "\"").replaceAll("\\\\", "");
return var1;
}
public static String a(String var0, SimpleDateFormat var1) {
Matcher var2 = k.b.matcher(var0);
if (var2.find()) {
Date var3 = new Date(Long.valueOf(var0));
String var4 = var1.format(var3);
return var4;
} else {
return "";
}
}
public static String a(String var0, Integer var1) {
DecimalFormat var2 = null;
String var3 = "###,##0";
String var4 = org.jeecg.modules.jmreport.common.b.d.a(var1, var3, var0);
var2 = new DecimalFormat(var4);
double var5 = 0.0;
try {
var5 = Double.parseDouble(var0);
} catch (Exception var8) {
var5 = 0.0;
}
return var2.format(var5);
}
public static boolean a(int var0, String var1, String var2) {
if (var1 != null && var1.length() == var0) {
SimpleDateFormat var4 = new SimpleDateFormat(var2);
try {
Date var5 = var4.parse(var1);
return var1.equals(var4.format(var5));
} catch (Exception var6) {
return false;
}
} else {
return false;
}
}
public static String e(String var0) {
if (var0.toLowerCase().trim().startsWith("call")) {
StringBuilder var1 = new StringBuilder(var0.length() + 10);
var1.append("{");
var1.append(var0.trim());
var1.append("}");
return var1.toString();
} else {
return null;
}
}
public static String b(String var0, Integer var1) {
DecimalFormat var2 = null;
String var3 = org.jeecg.modules.jmreport.common.b.d.a(var1, "###,##0", var0);
var2 = new DecimalFormat(var3);
double var4 = 0.0;
try {
var4 = Double.parseDouble(var0);
} catch (Exception var7) {
var4 = 0.0;
}
return var2.format(var4);
}
public static String c(String var0, Integer var1) {
String var2 = org.jeecg.modules.jmreport.common.b.d.a(var1, "###,##0", var0);
DecimalFormat var3 = new DecimalFormat(var2);
BigDecimal var4 = new BigDecimal(var0);
return var3.format(var4) + "%";
}
public static String e(String var0, String var1) {
if ("date".equals(var0)) {
if (var1 != null && !"".equals(var1)) {
if ("yyyy-mm-dd HH:mm:ss".equalsIgnoreCase(var1)) {
return "datetime";
} else if ("yyyy-mm-dd".equalsIgnoreCase(var1)) {
return "date";
} else if ("yyyy".equalsIgnoreCase(var1)) {
return "year";
} else if ("yyyy-mm".equalsIgnoreCase(var1)) {
return "month";
} else if ("MM".equals(var1)) {
return "month";
} else if ("dd".equals(var1)) {
return "date";
} else {
Matcher var2 = k.e.matcher(var1);
return var2.find() ? "time" : "datetime";
}
} else {
return "date";
}
} else {
return var0;
}
}
public static JSONObject f(String var0) {
JSONObject var1 = new JSONObject();
if (var0 != null && var0.indexOf("?") > 0) {
String var2 = var0.substring(var0.indexOf("?") + 1);
String[] var3 = var2.split("&");
String[] var4 = var3;
int var5 = var3.length;
for(int var6 = 0; var6 < var5; ++var6) {
String var7 = var4[var6];
String[] var8 = var7.split("=");
String var9 = "";
if (var8.length == 2) {
var9 = var8[1];
}
var1.put(var8[0], var9);
}
}
return var1;
}
public static <T> String a(T var0, Class<T> var1, String var2, Map<String, String> var3) {
ArrayList var4 = new ArrayList();
ArrayList var5 = new ArrayList();
if (var3 == null) {
var3 = a(var1);
}
Iterator var6 = var3.keySet().iterator();
String var7;
String var8;
while(var6.hasNext()) {
var7 = (String)var6.next();
try {
var8 = (String)var3.get(var7);
String[] var9 = var8.split("#");
String var10 = var9[0];
String var11 = var9[1];
var4.add(var11);
Method var12 = var1.getMethod(var7);
Object var13 = var12.invoke(var0);
if (var13 == null) {
var5.add("null");
} else if ("".equals(var13.toString())) {
var5.add("''");
} else if ("date".equals(var10)) {
Date var14 = (Date)var13;
String var15 = ExpressUtil.getDatetimeFormat().format(var14);
var5.add("'" + var15 + "'");
} else if ("int".equals(var10)) {
var5.add(var13.toString());
} else {
String var20 = var13.toString().replaceAll("\\'", "\\'\\'");
var5.add("'" + var20 + "'");
}
} catch (NoSuchMethodException var16) {
var16.printStackTrace();
} catch (IllegalAccessException var17) {
var17.printStackTrace();
} catch (InvocationTargetException var18) {
var18.printStackTrace();
}
}
String var19 = String.join(",", var4);
var7 = String.join(",", var5);
var8 = "insert into " + var2 + "(" + var19 + ") values (" + var7 + ");\r\n";
return var8;
}
public static Map<String, String> a(Class var0) {
Field[] var1 = var0.getDeclaredFields();
HashMap var2 = new HashMap(5);
Field[] var3 = var1;
int var4 = var1.length;
for(int var5 = 0; var5 < var4; ++var5) {
Field var6 = var3[var5];
if (a(var6)) {
String var7 = var6.getName();
String var8 = g.d(var7);
String var9 = "get" + var7.substring(0, 1).toUpperCase() + var7.substring(1);
String var10 = var6.getType().toString().toLowerCase();
if (var10.indexOf("date") >= 0) {
var2.put(var9, "date#" + var8);
} else if (var10.indexOf("int") >= 0) {
var2.put(var9, "int#" + var8);
} else {
var2.put(var9, "string#" + var8);
}
}
}
return var2;
}
// public static <T> String a(List<T> var0, Class<T> var1, String var2) {
// StringBuffer var3 = new StringBuffer();
// Map var4 = a(var1);
// Iterator var5 = var0.iterator();
//
// while(var5.hasNext()) {
// Object var6 = var5.next();
// var3.append(a(var6, var1, var2, var4));
// }
//
// var3.append("\r\n");
// return var3.toString();
// }
private static boolean a(Field var0) {
Class var1 = var0.getType();
String var2 = var1.toString().toLowerCase();
String var3 = "list";
String var4 = "map";
String var5 = "static";
if (var2.indexOf(var3) < 0 && var2.indexOf(var4) < 0) {
Annotation[] var6 = var0.getAnnotations();
if (var6 != null) {
Annotation[] var7 = var6;
int var8 = var6.length;
for(int var9 = 0; var9 < var8; ++var9) {
Annotation var10 = var7[var9];
String var11 = var10.toString().toLowerCase();
if (var11.indexOf("transient") >= 0) {
return false;
}
}
}
String var12 = Modifier.toString(var0.getModifiers()).toLowerCase();
if (var12.indexOf("transient") >= 0) {
return false;
} else {
return var12.indexOf(var5) < 0;
}
} else {
return false;
}
}
public static String a(JSONArray var0, String var1) {
HashMap var2 = new HashMap(5);
String var3 = "\\$\\{(\\S+)\\}";
Pattern var4 = Pattern.compile(var3);
Matcher var5 = var4.matcher(var1);
while(var5.find()) {
String var6 = var5.group().replace("${", "").replace("}", "");
var2.put(var6, var5.group());
}
if (null != var0 && var0.size() > 0) {
for(int var11 = 0; var11 < var0.size(); ++var11) {
JSONObject var7 = var0.getJSONObject(var11);
Object var8 = var7.get("paramName");
Object var9 = var7.get("paramValue");
String var10;
if (g.d(var8) && g.d(var9)) {
var10 = ExpressUtil.a(String.valueOf(var9), (Map)null);
var1 = var1.replace("${" + var8 + "}", var10);
var1 = var1.replace("'${" + var8 + "}'", var10);
}
if (g.d(var8)) {
if (g.d(var9)) {
var10 = ExpressUtil.a(String.valueOf(var9), (Map)null);
var2.put(String.valueOf(var8), var10);
} else {
var2.put(String.valueOf(var8), "");
}
}
}
}
var1 = FreeMarkerUtils.a(var1, var2);
return var1;
}
public static String f(String var0, String var1) {
if (var0.startsWith("=")) {
int var2 = var0.indexOf("(") + 1;
int var3 = var0.lastIndexOf(")");
String var4 = var0.substring(var2, var3);
String[] var5 = var4.split(",");
if (var0.contains(":")) {
var5 = var4.split(":");
} else {
var5 = var4.split(",");
}
ArrayList var6 = new ArrayList();
String[] var7 = var5;
int var8 = var5.length;
for(int var9 = 0; var9 < var8; ++var9) {
String var10 = var7[var9];
Pattern var11 = Pattern.compile("([A-Z]+)([0-9]+)");
Matcher var12 = var11.matcher(var10);
if (var12.find()) {
String var13 = var12.group(1);
String var14 = var12.group(2);
var1 = String.format(var1, var14);
var6.add(var13 + g(var14, var1));
} else {
var6.add(var10);
}
}
String var15 = "";
if (var0.contains(":")) {
var15 = String.join(":", var6);
} else {
var15 = String.join(",", var6);
}
String var16 = var0.substring(0, var2) + var15 + var0.substring(var3);
System.out.println("result:" + var16);
return var16;
} else {
return var0;
}
}
private static String g(String var0, String var1) {
return var1;
}
public static String g(String var0) {
return var0.replaceAll("\\\\", "");
}
public static String h(String var0) {
if (g.d(var0) != null && var0.indexOf("?") != 0) {
String var1 = var0.substring(var0.indexOf("?"), var0.length());
if (var1.indexOf("+") != -1) {
var1 = var1.replaceAll("\\+", "%2B");
}
if (var1.indexOf("#") != -1) {
var1 = var1.replaceAll("#", "%23");
}
if (var1.indexOf("&") != -1) {
var1 = var1.replaceAll("@", "%26");
}
String var2 = var0.substring(0, var0.indexOf("?"));
var0 = var2 + var1;
}
return var0;
}
public static String i(String var0) {
if (var0.indexOf("http") == -1) {
HttpServletRequest var1 = org.jeecg.modules.jmreport.common.b.f.getHttpServletRequest();
String var2 = a(var1);
var0 = var2 + var0;
}
return var0;
}
public static String j(String var0) {
String var1 = "^[a-z0-9A-Z#]+$";
boolean var2 = FunctionAnalysisUtils.a(var1, var0);
if (!var2) {
return "";
} else if (var0.contains("rgb")) {
var0 = var0.replace("rgb", "").replace("(", "").replace(")", "");
String[] var8 = var0.split(",");
return var8.length == 3 ? var0 : "";
} else {
String var3;
if (!var0.contains("#")) {
var3 = org.jeecg.modules.jmreport.desreport.util.c.a(var0);
return var3;
} else {
int var4;
int var5;
if (var0.length() == 4) {
var0 = var0.replace("#", "");
var3 = "";
for(var4 = 0; var4 < var0.length(); ++var4) {
var5 = var0.charAt(var4);
var3 = var3 + var5 + var5;
}
var0 = "#" + var3;
}
if (var0.length() == 7) {
try {
int var7 = Integer.parseInt(var0.substring(1, 3), 16);
var4 = Integer.parseInt(var0.substring(3, 5), 16);
var5 = Integer.parseInt(var0.substring(5, 7), 16);
return var7 + "," + var4 + "," + var5;
} catch (NumberFormatException var6) {
e.info("颜色转换不了16进制,rgb:" + var0);
return "";
}
} else {
return "";
}
}
}
}
public static String k(String var0) {
if (var0.endsWith(";")) {
var0 = var0.substring(0, var0.length() - 1);
}
return var0;
}
}
... ...