mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
1、组织权限菜单过滤条件修复;2、更新用户修改手机号清空密码,前端入参移除username;3、报表接口使用ureport既有;
This commit is contained in:
+28
-11
@@ -1,13 +1,17 @@
|
||||
package com.cf.imes.module.report.controller.admin.datasource;
|
||||
|
||||
import com.bstek.common.config.DataSourceConfig;
|
||||
import com.bstek.common.utils.MultipleJdbcTemplate;
|
||||
import com.bstek.datasource.bean.DataSourceInfo;
|
||||
import com.bstek.datasource.bean.PreviewParams;
|
||||
import com.bstek.datasource.service.DataSourceService;
|
||||
import com.bstek.ureport.definition.dataset.Field;
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetFieldVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceRespVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||
import com.cf.imes.module.report.service.datasource.ReportDatasourceService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@@ -22,6 +26,7 @@ import javax.validation.Valid;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.cf.imes.framework.common.pojo.CommonResult.error;
|
||||
import static com.cf.imes.framework.common.pojo.CommonResult.success;
|
||||
@@ -41,6 +46,12 @@ public class ReportDatasourceController {
|
||||
@Resource
|
||||
private ReportDatasourceService datasourceService;
|
||||
|
||||
@Resource
|
||||
private DataSourceConfig dataSourceConfig;
|
||||
|
||||
@Resource
|
||||
private DataSourceService ureportDataSourceService;
|
||||
|
||||
@PutMapping("/datasource")
|
||||
@Operation(summary = "创建报表数据源")
|
||||
// @PreAuthorize("@ss.hasPermission('report:datasource:create')")
|
||||
@@ -98,29 +109,35 @@ public class ReportDatasourceController {
|
||||
@GetMapping("/buildin/datasources")
|
||||
@Operation(summary = "获取内置数据源")
|
||||
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
|
||||
public CommonResult<List<ReportDatasourceRespVO>> getBuildinDatasources() {
|
||||
return success(BeanUtils.toBean(datasourceService.getBuildinDatasources(), ReportDatasourceRespVO.class));
|
||||
public CommonResult<List<DataSourceInfo>> getBuildinDatasources() {
|
||||
return CommonResult.success(dataSourceConfig.getDatasource());
|
||||
}
|
||||
|
||||
@PostMapping("/datasource/connect")
|
||||
@Operation(summary = "测试数据源连接")
|
||||
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
|
||||
public CommonResult<Boolean> testDatasourceConnect(@RequestBody ReportDatasourceTestConnReqVO reqVO) {
|
||||
boolean connResult = datasourceService.testConnect(reqVO);
|
||||
return connResult ? success(true) : error(DATASOURCE_CONNECT_FAIL);
|
||||
public CommonResult<Boolean> testDatasourceConnect(@RequestBody DataSourceInfo info) {
|
||||
String success = MultipleJdbcTemplate.testConnection(info);
|
||||
return Objects.equals("success", success) ? success(true) : error(DATASOURCE_CONNECT_FAIL);
|
||||
}
|
||||
|
||||
@PostMapping("/datasource/tables")
|
||||
@Operation(summary = "获取数据源表列表")
|
||||
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
|
||||
public CommonResult<List<Map<String, String>>> getDatasourceTables(@RequestBody ReportDatasourceTestConnReqVO reqVO) {
|
||||
return success(datasourceService.getDatasourceTables(reqVO));
|
||||
public CommonResult<List<Map<String, String>>> getDatasourceTables(@RequestBody DataSourceInfo info) {
|
||||
return success(ureportDataSourceService.selectTableList(info));
|
||||
}
|
||||
|
||||
@PostMapping("/datasource/table/fields")
|
||||
@Operation(summary = "获取数据源表字段")
|
||||
// @PreAuthorize("@ss.hasPermission('report:datasource:query')")
|
||||
public CommonResult<List<ReportDatasetFieldVO>> getDatasourceTableFields(@RequestBody ReportDatasourceTestConnReqVO reqVO) {
|
||||
return success(datasourceService.getTableFields(reqVO));
|
||||
public CommonResult<List<Field>> getDatasourceTableFields(@RequestBody PreviewParams previewParams) {
|
||||
return success(datasourceService.getTableFields(previewParams));
|
||||
}
|
||||
|
||||
@PostMapping("/datasource/preview")
|
||||
@Operation(summary = "数据源预览")
|
||||
public CommonResult<Map<String, Object>> previewData(@RequestBody PreviewParams previewParams) {
|
||||
return success(ureportDataSourceService.previewData(previewParams));
|
||||
}
|
||||
}
|
||||
|
||||
+6
-27
@@ -1,15 +1,14 @@
|
||||
package com.cf.imes.module.report.service.datasource;
|
||||
|
||||
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetFieldVO;
|
||||
import com.bstek.datasource.bean.PreviewParams;
|
||||
import com.bstek.ureport.definition.dataset.Field;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 报表数据源 Service 接口
|
||||
@@ -63,12 +62,6 @@ public interface ReportDatasourceService {
|
||||
*/
|
||||
List<ReportBeanDatasourceRespVO> getBeanDatasourceList();
|
||||
|
||||
/**
|
||||
* 获取内置数据源列表
|
||||
* @return
|
||||
*/
|
||||
List<ReportDatasourceDO> getBuildinDatasources();
|
||||
|
||||
/**
|
||||
* 获取bean方法
|
||||
*
|
||||
@@ -77,27 +70,13 @@ public interface ReportDatasourceService {
|
||||
*/
|
||||
List<String> loadBeanMethods(String beanId);
|
||||
|
||||
/**
|
||||
* 测试数据源连接
|
||||
*
|
||||
* @param reqVO 连接信息请求
|
||||
* @return
|
||||
*/
|
||||
boolean testConnect(ReportDatasourceTestConnReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 获取数据源表列表
|
||||
*
|
||||
* @param reqVO 连接信息请求
|
||||
* @return
|
||||
*/
|
||||
List<Map<String, String>> getDatasourceTables(ReportDatasourceTestConnReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 获取数据源表字段
|
||||
*
|
||||
* @param reqVO 连接信息请求
|
||||
* @param previewParams 连接信息请求
|
||||
* @return
|
||||
*/
|
||||
List<ReportDatasetFieldVO> getTableFields(ReportDatasourceTestConnReqVO reqVO);
|
||||
List<Field> getTableFields(PreviewParams previewParams);
|
||||
|
||||
|
||||
}
|
||||
|
||||
+14
-107
@@ -4,6 +4,9 @@ import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.sql.SqlInjectionUtils;
|
||||
import com.bstek.common.utils.MultipleJdbcTemplate;
|
||||
import com.bstek.datasource.bean.DataSourceInfo;
|
||||
import com.bstek.datasource.bean.PreviewParams;
|
||||
import com.bstek.ureport.definition.dataset.Field;
|
||||
import com.bstek.ureport.definition.dataset.Parameter;
|
||||
import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
|
||||
@@ -11,19 +14,14 @@ import com.bstek.ureport.utils.ProcedureUtils;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
|
||||
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetFieldVO;
|
||||
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetParameterVO;
|
||||
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
|
||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
|
||||
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
|
||||
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||
import com.cf.imes.module.report.dal.mysql.dataset.ReportDatasetMapper;
|
||||
import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper;
|
||||
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
||||
import com.cf.imes.module.report.framework.ureport.annotation.CfReportSpringbeanDatasource;
|
||||
import com.cf.imes.module.report.service.dataset.ReportDatasetService;
|
||||
import com.cf.imes.module.report.util.SqlInjectionUtil;
|
||||
@@ -41,11 +39,7 @@ import javax.annotation.Resource;
|
||||
import javax.sql.DataSource;
|
||||
import java.lang.reflect.Method;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.ResultSetMetaData;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -160,21 +154,6 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
||||
return beanDatasourceRespVOList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public List<ReportDatasourceDO> getBuildinDatasources() {
|
||||
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(new LambdaQueryWrapperX<ReportDatasourceDO>()
|
||||
.eqIfPresent(ReportDatasourceDO::getType, ReportTemplateTypeEnum.SYSTEM)
|
||||
.orderByDesc(ReportDatasourceDO::getCreateTime));
|
||||
// 查询数据集
|
||||
if (CollUtil.isNotEmpty(reportDatasourceDOS)) {
|
||||
reportDatasourceDOS.forEach(reportDatasourceDO -> {
|
||||
queryDatasetInSource(reportDatasourceDO);
|
||||
});
|
||||
}
|
||||
return reportDatasourceDOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> loadBeanMethods(String beanId) {
|
||||
Object obj = applicationContext.getBean(beanId);
|
||||
@@ -205,71 +184,25 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean testConnect(ReportDatasourceTestConnReqVO reqVO) {
|
||||
public List<Field> getTableFields(PreviewParams previewParams) {
|
||||
Connection conn = null;
|
||||
String sql = previewParams.getSql();
|
||||
List<Parameter> parameters = previewParams.getParameters();
|
||||
DataSourceInfo info = previewParams.getInfo();
|
||||
try {
|
||||
// 获取数据库连接
|
||||
conn = buildConn(reqVO);
|
||||
} catch (Exception ex) {
|
||||
log.error("[testConnect][报表数据源测试连接失败:{}]", ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
JdbcUtils.closeConnection(conn);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, String>> getDatasourceTables(ReportDatasourceTestConnReqVO reqVO) {
|
||||
Connection conn = null;
|
||||
ResultSet rs = null;
|
||||
List<Map<String, String>> tables = new ArrayList<Map<String, String>>();
|
||||
try {
|
||||
// 获取数据库连接
|
||||
conn = buildConn(reqVO);
|
||||
DatabaseMetaData metaData = conn.getMetaData();
|
||||
String url = metaData.getURL();
|
||||
String schema = null;
|
||||
if (url.toLowerCase().contains("oracle")) {
|
||||
schema = metaData.getUserName();
|
||||
}
|
||||
|
||||
rs = metaData.getTables(conn.getCatalog(), schema, null, new String[]{"TABLE", "VIEW"});
|
||||
// 轮询获取表信息
|
||||
while (rs.next()) {
|
||||
Map<String, String> table = new HashMap<String, String>();
|
||||
table.put("name", rs.getString("TABLE_NAME"));
|
||||
table.put("type", rs.getString("TABLE_TYPE"));
|
||||
tables.add(table);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
log.error("[testConnect][报表数据源库表失败:{}]", ex.getMessage());
|
||||
} finally {
|
||||
JdbcUtils.closeResultSet(rs);
|
||||
JdbcUtils.closeConnection(conn);
|
||||
}
|
||||
return tables;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportDatasetFieldVO> getTableFields(ReportDatasourceTestConnReqVO reqVO) {
|
||||
Connection conn = null;
|
||||
String sql = reqVO.getSql();
|
||||
List<ReportDatasetParameterVO> parameters = reqVO.getParameters();
|
||||
try {
|
||||
if(StringUtils.isEmpty(sql)) {
|
||||
if (StringUtils.isEmpty(sql)) {
|
||||
throw exception(DATASET_SQL_REQUIRED);
|
||||
}
|
||||
// 获取数据库连接
|
||||
conn = buildConn(reqVO);
|
||||
conn = MultipleJdbcTemplate.buildConnection(info);
|
||||
// 自定义工具校验sql
|
||||
if (SqlInjectionUtil.checkEditSql(sql)) {
|
||||
throw exception(DATASET_SQL_ILLEGAL);
|
||||
}
|
||||
// 检查参数sql注入
|
||||
for (ReportDatasetParameterVO parameterVO : parameters) {
|
||||
for (Parameter parameter : parameters) {
|
||||
// mybatis-plus util检查参数
|
||||
if (SqlInjectionUtils.check(parameterVO.getDefaultValue())) {
|
||||
if (SqlInjectionUtils.check(parameter.getDefaultValue())) {
|
||||
throw exception(DATASET_SQL_INJECTION_RISK);
|
||||
}
|
||||
}
|
||||
@@ -282,19 +215,18 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
||||
Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params);
|
||||
String sqlForUse = sqlDatasetDefinition.parseSql(pmap);
|
||||
if (ProcedureUtils.isProcedure(sqlForUse)) {
|
||||
List<Field> fields = ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
|
||||
return BeanUtils.toBean(fields, ReportDatasetFieldVO.class);
|
||||
return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
|
||||
}
|
||||
DataSource dataSource = new SingleConnectionDataSource(conn, false);
|
||||
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
|
||||
final List<ReportDatasetFieldVO> fields = new ArrayList<>();
|
||||
final List<Field> fields = new ArrayList<>();
|
||||
jdbcTemplate.query(sqlForUse, pmap, (ResultSetExtractor<Integer>) rs -> {
|
||||
ResultSetMetaData metadata = rs.getMetaData();
|
||||
List<String> metadataList = new ArrayList<>();
|
||||
for (int i = 1; i <= metadata.getColumnCount(); i++) {
|
||||
String columnName = metadata.getColumnLabel(i);
|
||||
metadataList.add(columnName);
|
||||
fields.add(new ReportDatasetFieldVO(columnName));
|
||||
fields.add(new Field(columnName));
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@@ -309,31 +241,6 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建数据库连接
|
||||
* 有数据源id从库里查数据源信息
|
||||
* 没有数据源id用请求中的driver等连接
|
||||
* @param reqVO
|
||||
* @return
|
||||
* @throws ClassNotFoundException
|
||||
* @throws SQLException
|
||||
*/
|
||||
private Connection buildConn(ReportDatasourceTestConnReqVO reqVO) throws ClassNotFoundException, SQLException {
|
||||
Long datasourceId = reqVO.getDatasourceId();
|
||||
Connection conn = null;
|
||||
if (ObjectUtil.isNotNull(datasourceId)) {
|
||||
ReportDatasourceDO datasourceDO = datasourceMapper.selectById(datasourceId);
|
||||
if (ObjectUtil.isNotNull(datasourceDO)) {
|
||||
Class.forName(datasourceDO.getDriver());
|
||||
conn = DriverManager.getConnection(datasourceDO.getUrl(), datasourceDO.getUsername(), datasourceDO.getPassword());
|
||||
}
|
||||
} else {
|
||||
Class.forName(reqVO.getDriver());
|
||||
conn = DriverManager.getConnection(reqVO.getUrl(), reqVO.getUserName(), reqVO.getPassword());
|
||||
}
|
||||
return conn;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询数据源下的数据集
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user