main
黄海 1 year ago
parent 313e3a75ed
commit 15a35c1f9e

@ -1,4 +1,5 @@
package com.dsideal.QingLong.Util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.StrKit;
@ -7,6 +8,7 @@ import com.jfinal.plugin.activerecord.Record;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class JSONUtil {
public static Record parse(JSONObject jobj) {
return buildJSONObject(jobj);
@ -53,4 +55,46 @@ public class JSONUtil {
}
return result;
}
/**
* : JSONSQL
*
* @param tableName
* @param jsonObject JSON
* @param type_id 12
* @return
*/
public static String generateCreateTableStatement(String tableName, JSONObject jsonObject, int type_id) {
String type_str = "";
if (type_id > 1) type_str = "TEMPORARY";
StringBuilder createTableBuilder = new StringBuilder("CREATE " + type_str + " TABLE " + tableName + " (\n");
//添加ID主键
createTableBuilder.append(" ").append("id").append(" ").append("char(36) NOT NULL");
createTableBuilder.append(",\n");
for (String key : jsonObject.keySet()) {
Object value = jsonObject.get(key);
String sqlType = getSqlType(value);
createTableBuilder.append(" ").append(key).append(" ").append(sqlType);
createTableBuilder.append(",\n");
}
createTableBuilder.append("PRIMARY KEY (\"id\")");
createTableBuilder.append("\n);");
return createTableBuilder.toString();
}
private static String getSqlType(Object value) {
if (value instanceof Integer) {
return "INTEGER";
} else if (value instanceof String) {
return "VARCHAR(255)";
} else if (value instanceof Double || value instanceof Float) {
return "DOUBLE PRECISION";
} else if (value instanceof Boolean) {
return "BOOLEAN";
} else {
return "VARCHAR(255)"; // 默认类型
}
}
}

@ -1,34 +0,0 @@
package com.dsideal.QingLong.Util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class JsonToSql {
public static String generateCreateTableStatement(String tableName, JSONObject jsonObject) {
StringBuilder createTableBuilder = new StringBuilder("CREATE TEMPORARY TABLE " + tableName + " (\n");
for (String key : jsonObject.keySet()) {
Object value = jsonObject.get(key);
String sqlType = getSqlType(value);
createTableBuilder.append(" ").append(key).append(" ").append(sqlType);
createTableBuilder.append(",\n");
}
createTableBuilder.setLength(createTableBuilder.length() - 2); // 删除最后一个逗号和换行符
createTableBuilder.append("\n);");
return createTableBuilder.toString();
}
private static String getSqlType(Object value) {
if (value instanceof Integer) {
return "INTEGER";
} else if (value instanceof String) {
return "VARCHAR(255)";
} else if (value instanceof Double || value instanceof Float) {
return "DOUBLE PRECISION";
} else if (value instanceof Boolean) {
return "BOOLEAN";
} else {
return "VARCHAR(255)"; // 默认类型
}
}
}

@ -12,6 +12,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dsideal.QingLong.Start;
import com.dsideal.QingLong.Util.CommonUtil;
import com.dsideal.QingLong.Util.JSONUtil;
import com.jfinal.kit.JsonKit;
import com.jfinal.kit.Kv;
import com.jfinal.kit.PropKit;
@ -27,7 +28,6 @@ import java.sql.SQLException;
import java.util.*;
import java.text.SimpleDateFormat;
import static com.dsideal.QingLong.Util.JsonToSql.generateCreateTableStatement;
public class ZbdcModel {
/**
@ -657,9 +657,6 @@ public class ZbdcModel {
return Db.find(sql);
}
/**
*
*/
/**
*
*/
@ -2331,14 +2328,12 @@ public class ZbdcModel {
// 如果值是字符串,尝试转换为数字
if (value instanceof String) {
String stringValue = (String) value;
try {
// 尝试去除百分号并转换为浮点数
if (stringValue.endsWith("%")) {
String numberStr = stringValue.substring(0, stringValue.length() - 1);
return Double.parseDouble(numberStr) / 100.0;
}
// 尝试转换为整数
return Integer.parseInt(stringValue);
} catch (NumberFormatException e) {
@ -2346,7 +2341,6 @@ public class ZbdcModel {
return stringValue;
}
}
// 如果不是数字也不是字符串,返回原值
return value;
}
@ -2397,7 +2391,12 @@ public class ZbdcModel {
Object convertedValue = convertValue(value);
jsonObject.put(key, convertedValue);
}
String createSql = generateCreateTableStatement(table_name, jsonObject);
//删除表
String delSql = "drop table if exists " + table_name;
Db.update(delSql);
String createSql = JSONUtil.generateCreateTableStatement(table_name, jsonObject, 1);//生成正式表
//事务处理
Connection conn = null;
try {
@ -2419,17 +2418,50 @@ public class ZbdcModel {
Object convertedValue = convertValue(value);
record.set(key, convertedValue);
}
record.set("id", UUID.randomUUID().toString().toUpperCase());
writeList.add(record);
}
if (!writeList.isEmpty()) {
Db.batchSave("t_zbdc_temp", writeList, 1000);
Db.batchSave(table_name, writeList, 100);
conn.commit();//提交
}
//马上查询
String sql = "select * from t_zbdc_temp";
List<Record> l1 = Db.find(sql);
FileUtil.writeUtf8String(JsonKit.toJson(l1), "c://1.json");
//String sql = "select * from " + table_name;
//List<Record> l1 = Db.find(sql);
//System.out.println(l1);
Set<String> fields = new HashSet<>();
for (int i = 0; i < ja.size(); i++) {
JSONObject jo = ja.getJSONObject(i);
// 遍历JSON对象以收集所有字段
fields.addAll(jo.keySet());
}
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("SELECT area_name, ");
// 为每个字段添加SUM聚合函数除了area_name, year, bureau_id, bureau_name
for (String field : fields) {
if (!field.equals("area_name") && !field.equals("year") &&
!field.equals("bureau_id") && !field.equals("bureau_name")) {
sqlBuilder.append("SUM(").append(field).append(") AS ").append(field).append(", ");
}
}
// 去除最后一个逗号
if (sqlBuilder.charAt(sqlBuilder.length() - 1) == ',') {
sqlBuilder.deleteCharAt(sqlBuilder.length() - 1);
}
// 添加统计个数的字段
sqlBuilder.append(" COUNT(1) AS cnt ")
.append("FROM t_zbdc_temp ")
.append("GROUP BY area_name;");
// 输出生成的SQL查询
System.out.println(sqlBuilder.toString());
} catch (Exception err) {
System.out.println(err.toString());
System.out.println(err);
if (null != conn) {
conn.rollback();//回滚
}

Loading…
Cancel
Save