package com.gccloud.bigscreen.core.module.dataset.utils;
import com.gccloud.bigscreen.core.module.dataset.common.DbCommon;
import com.gccloud.bigscreen.core.module.dataset.dto.DatasetParamDto;
import com.gccloud.bigscreen.core.module.dataset.entity.DatasourceConfig;
import com.gccloud.bigscreen.core.module.dataset.constant.ReportDbType;
import com.gccloud.bigscreen.core.exception.GlobalException;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.replace.Replace;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.util.TablesNamesFinder;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.json.JSONObject;
import org.springframework.util.StringUtils;
import java.io.StringReader;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.*;
/**
* @Description: 数据库连接工具类
* @Author liyong
* @Date 2021/11/25
*/
@Slf4j
public class TelePGDBUtils extends DbCommon {
private static final String CREATE_TABLE_SQL = "CREATE TABLE ";
private static final String DROP_TABLE_SQL = "DROP TABLE IF EXISTS ";
private static final CCJSqlParserManager pm = new CCJSqlParserManager();
/**
* 执行 sql脚本 获取数据 及结构
*
* @param sql 脚本
* @param params 入参
* @param datasourceConfig 数据源
*/
public static Map<String, List<Map<String, Object>>> getClickHouseValue(String sql, List<DatasetParamDto> params, DatasourceConfig datasourceConfig) {
List<DatasetParamDto> copyParamsList = new ArrayList<>(params);
sql = updateParamsConfig(sql, copyParamsList);
Map<String, List<Map<String, Object>>> map = new HashMap<>();
List<Map<String, Object>> dataPreview = new ArrayList<>();
List<Map<String, Object>> structurePreview = new ArrayList<>();
Connection conn = getConnection(datasourceConfig);
PreparedStatement pStemt;
try {
pStemt = conn.prepareStatement(sql);
if (copyParamsList.size() > 0) {
int size = copyParamsList.size();
for (int i = 0; i < size; i++) {
if (StringUtils.isEmpty(copyParamsList.get(i).getValue())) {
throw new GlobalException("参数值不能为空");
}
//判断参数类型是否是时间类型,进行转换
if (("Date").equalsIgnoreCase(copyParamsList.get(i).getType())) {
if (ReportDbType.TELEPG.getUpInfo().equalsIgnoreCase(datasourceConfig.getSourceType())) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(copyParamsList.get(i).getValue());
Timestamp timestamp = new Timestamp(date.getTime());
pStemt.setTimestamp(i + 1, timestamp);
} else {
pStemt.setObject(i + 1, copyParamsList.get(i).getValue());
}
} else if (("Integer").equalsIgnoreCase(copyParamsList.get(i).getType())) {
if (ReportDbType.TELEPG.getUpInfo().equalsIgnoreCase(datasourceConfig.getSourceType())) {
pStemt.setInt(i + 1, Integer.parseInt(copyParamsList.get(i).getValue()));
} else {
pStemt.setObject(i + 1, Integer.parseInt(copyParamsList.get(i).getValue()));
}
} else {
pStemt.setObject(i + 1, copyParamsList.get(i).getValue());
}
}
}
ResultSet clickRs = pStemt.executeQuery();
ResultSetMetaData metaData = clickRs.getMetaData();
int columnCount = metaData.getColumnCount();
while (clickRs.next()) {
//LinkedHashMap 保证数据字段顺序同数据库一致
LinkedHashMap<String, Object> map1 = new LinkedHashMap<>();
for (int i = 1; i <= columnCount; i++) {
map1.put(metaData.getColumnName(i), clickRs.getObject(i));
}
dataPreview.add(map1);
}
for (int i = 0; i < columnCount; i++) {
Map<String, Object> map2 = new HashMap<>();
map2.put("columnName", metaData.getColumnName(i + 1));
map2.put("columnType", metaData.getColumnTypeName(i + 1));
structurePreview.add(map2);
}
map.put("dataPreview", dataPreview);
map.put("structurePreview", structurePreview);
} catch (SQLException e) {
if (e.getMessage().contains("doesn't exist")) {
log.error("数据查询失败:查询表不存在:{}", e.getMessage());
throw new GlobalException("数据查询失败:查询表不存在");
} else {
log.error("数据查询失败:{}", e.getMessage());
throw new GlobalException("数据查询失败");
}
} catch (ArrayIndexOutOfBoundsException e) {
log.error(e.getMessage());
throw new GlobalException("请检查参数配置与SQL加工脚本是否对应");
} catch (Exception e) {
log.error("数据查询失败:{}", ExceptionUtils.getStackTrace(e));
throw new GlobalException("数据查询失败" + e.getMessage());
} finally {//关闭连接
finalUtils(conn);
}
return map;
}
public static Map<String, List<Map<String, Object>>> getHiveFieldComment(String sql, List<DatasetParamDto> params, DatasourceConfig datasourceConfig) {
Map<String, List<Map<String, Object>>> map = new HashMap<>();
List<Map<String, Object>> dataPreview = new ArrayList<>();
List<Map<String, Object>> structurePreview = new ArrayList<>();
Connection conn = getConnection(datasourceConfig);
PreparedStatement pStemt;
try {
pStemt = conn.prepareStatement(sql);
insertParamsConfig(params, pStemt);
ResultSet clickRs = pStemt.executeQuery();
ResultSetMetaData metaData = clickRs.getMetaData();
int columnCount = metaData.getColumnCount();
while (clickRs.next()) {
//LinkedHashMap 保证数据字段顺序同数据库一致
LinkedHashMap<String, Object> map1 = new LinkedHashMap<>();
for (int i = 1; i <= columnCount; i++) {
if (i == 2) {
continue;
}
map1.put(metaData.getColumnName(i), clickRs.getObject(i));
}
dataPreview.add(map1);
}
for (int i = 0; i < columnCount; i++) {
if (i == 1) {
continue;
}
Map<String, Object> map2 = new HashMap<>();
map2.put("columnName", metaData.getColumnName(i + 1));
map2.put("columnType", metaData.getColumnTypeName(i + 1));
structurePreview.add(map2);
}
map.put("dataPreview", dataPreview);
map.put("structurePreview", structurePreview);
} catch (SQLException e) {
if (e.getMessage().contains("doesn't exist")) {
log.error("数据查询失败:查询表不存在:{}", e.getMessage());
throw new GlobalException("数据查询失败:查询表不存在");
} else {
log.error("数据查询�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器,具备大屏目录管理、大屏设计、大屏预览能力,支持MySQL、Oracle、PostgreSQL、JSON等数据集接入,对于复杂数据处理还可以使用Groovy脚本数据集,使用简单,完全免费,代码开源。
资源推荐
资源详情
资源评论
收起资源包目录
人工智能-项目实践-数据预处理-基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echart (240个子文件)
.gitkeep 15B
.gitkeep 12B
TelePGDBUtils.java 32KB
DBUtils.java 27KB
DatasetProcessServiceImpl.java 24KB
DbCommon.java 23KB
DatasourceConfigServiceImpl.java 19KB
DsServiceImpl.java 17KB
ViewSqlProcess.java 14KB
OriginalTableServiceImpl.java 13KB
BaseChartDataService.java 11KB
BigScreenPageServiceImpl.java 10KB
ConditionSqlProcess.java 9KB
QueryWrapperUtils.java 9KB
StoredProcedureUtils.java 8KB
DatasetServiceImpl.java 8KB
BigScreenPageController.java 8KB
CategoryServiceImpl.java 7KB
PageTemplateController.java 7KB
ISuperService.java 5KB
BigScreenLocalFileServiceImpl.java 5KB
ChartDataController.java 4KB
CategoryTreeServiceImpl.java 4KB
IBasePageService.java 4KB
SwaggerBootstrapConfig.java 4KB
DESUtils.java 4KB
DataSourceController.java 4KB
BeanConvertUtils.java 3KB
PageDesignConstant.java 3KB
BigScreenPageDTO.java 3KB
ReportUtils.java 3KB
BigScreenFileController.java 3KB
CategoryController.java 3KB
DatasourceConfig.java 3KB
DatasetController.java 3KB
PageTemplateServiceImpl.java 3KB
GroovyUtils.java 3KB
JSON.java 3KB
LoginRequiredAspect.java 3KB
ReportConstant.java 3KB
DataSetDataSource.java 3KB
R.java 2KB
BigScreenGlobalExceptionHandler.java 2KB
ScreenTablesChart.java 2KB
DatasetProcessEntity.java 2KB
OracleTypes.java 2KB
OriginalTableController.java 2KB
DsController.java 2KB
BigScreenFileServiceImpl.java 2KB
ChartMockData.java 2KB
DatasetProcessController.java 2KB
BasePageDTOTypeHandler.java 2KB
ScreenMapChart.java 2KB
Chart.java 2KB
DatasourceConfigService.java 2KB
PageEntity.java 2KB
Permission.java 2KB
ScreenScrollBoardChart.java 2KB
Btn.java 2KB
TableUtils.java 2KB
CustomComponentChart.java 2KB
ReportLimit.java 2KB
CorsBeanConfig.java 2KB
CategoryTreeController.java 2KB
OriginalTable.java 2KB
TableNameUtils.java 2KB
DatasetService.java 2KB
ValidatorUtils.java 2KB
ObjectMapperConfiguration.java 2KB
DatasetEntity.java 2KB
IBigScreenPageService.java 2KB
ScreenBorderChart.java 2KB
DatasetDao.java 1KB
ChartDataVO.java 1KB
DsService.java 1KB
ChartDataSearchDTO.java 1KB
BigScreenFileEntity.java 1KB
SqlConditionModel.java 1KB
BigScreenConst.java 1KB
OriginalTableService.java 1KB
Webjars.java 1KB
ScreenDecorationChart.java 1KB
Linkage.java 1KB
TreeServiceImpl.java 1KB
CategoryDTO.java 1KB
Field.java 1KB
CategoryTree.java 1KB
ScreenTimeCountDownChart.java 1KB
PageTemplateEntity.java 1KB
ICategoryService.java 1KB
IPageTemplateService.java 1KB
SuperController.java 1KB
PageVO.java 1KB
DatasetProcessService.java 1KB
ScreenScrollRankingChart.java 1KB
CategoryTreeService.java 1KB
PageTemplateVO.java 1KB
OriginalTableDto.java 1KB
CategoryVO.java 1022B
SuperEntity.java 1019B
共 240 条
- 1
- 2
- 3
资源评论
博士僧小星
- 粉丝: 1922
- 资源: 5884
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功