mirror of
https://github.com/dataease/dataease.git
synced 2026-05-22 21:38:32 +08:00
Merge remote-tracking branch 'origin/dev' into dev
# Conflicts: # frontend/src/lang/en.js # frontend/src/lang/tw.js # frontend/src/lang/zh.js
This commit is contained in:
@@ -97,7 +97,7 @@ public class DataSetTableController {
|
||||
@ApiOperation("查询预览数据")
|
||||
@PostMapping("getPreviewData/{page}/{pageSize}")
|
||||
public Map<String, Object> getPreviewData(@RequestBody DataSetTableRequest dataSetTableRequest, @PathVariable Integer page, @PathVariable Integer pageSize) throws Exception {
|
||||
return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize);
|
||||
return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize, null);
|
||||
}
|
||||
|
||||
@ApiOperation("根据sql查询预览数据")
|
||||
|
||||
@@ -4,25 +4,30 @@ import com.auth0.jwt.JWT;
|
||||
import com.auth0.jwt.interfaces.DecodedJWT;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||
import io.dataease.auth.filter.F2CLinkFilter;
|
||||
import io.dataease.base.domain.DatasetTable;
|
||||
import io.dataease.base.domain.DatasetTableField;
|
||||
import io.dataease.commons.exception.DEException;
|
||||
import io.dataease.controller.request.dataset.DataSetTableRequest;
|
||||
import io.dataease.controller.request.dataset.MultFieldValuesRequest;
|
||||
import io.dataease.controller.response.DatasetTableField4Type;
|
||||
import io.dataease.i18n.Translator;
|
||||
import io.dataease.service.dataset.DataSetFieldService;
|
||||
import io.dataease.service.dataset.DataSetTableFieldsService;
|
||||
import io.dataease.service.dataset.DataSetTableService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.TreeSet;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -40,6 +45,9 @@ public class DataSetTableFieldController {
|
||||
@Autowired
|
||||
private DataSetFieldService dataSetFieldService;
|
||||
|
||||
@Resource
|
||||
private DataSetTableService dataSetTableService;
|
||||
|
||||
@ApiOperation("查询表下属字段")
|
||||
@PostMapping("list/{tableId}")
|
||||
public List<DatasetTableField> list(@PathVariable String tableId) {
|
||||
@@ -74,6 +82,15 @@ public class DataSetTableFieldController {
|
||||
@PostMapping("save")
|
||||
public DatasetTableField save(@RequestBody DatasetTableField datasetTableField) {
|
||||
dataSetTableFieldsService.checkFieldName(datasetTableField);
|
||||
try {
|
||||
// 执行一次sql,确保数据集中所有字段均能正确执行
|
||||
DatasetTable datasetTable = dataSetTableService.get(datasetTableField.getTableId());
|
||||
DataSetTableRequest dataSetTableRequest = new DataSetTableRequest();
|
||||
BeanUtils.copyProperties(datasetTable, dataSetTableRequest);
|
||||
dataSetTableService.getPreviewData(dataSetTableRequest, 1, 1, Collections.singletonList(datasetTableField));
|
||||
} catch (Exception e) {
|
||||
DEException.throwException(Translator.get("i18n_calc_field_error"));
|
||||
}
|
||||
return dataSetTableFieldsService.save(datasetTableField);
|
||||
}
|
||||
|
||||
@@ -85,8 +102,10 @@ public class DataSetTableFieldController {
|
||||
|
||||
@ApiOperation("多字段值枚举")
|
||||
@PostMapping("linkMultFieldValues")
|
||||
public List<Object> linkMultFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
|
||||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
||||
public List<Object> linkMultFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest)
|
||||
throws Exception {
|
||||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
|
||||
.getRequest();
|
||||
String linkToken = request.getHeader(F2CLinkFilter.LINK_TOKEN_KEY);
|
||||
DecodedJWT jwt = JWT.decode(linkToken);
|
||||
Long userId = jwt.getClaim("userId").asLong();
|
||||
@@ -99,18 +118,21 @@ public class DataSetTableFieldController {
|
||||
public List<Object> multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
|
||||
List<Object> results = new ArrayList<>();
|
||||
for (String fieldId : multFieldValuesRequest.getFieldIds()) {
|
||||
results.addAll(dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId()));
|
||||
List<Object> fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId());
|
||||
if (CollectionUtil.isNotEmpty(fieldValues)) {
|
||||
results.addAll(fieldValues);
|
||||
}
|
||||
|
||||
}
|
||||
ArrayList<Object> list = results.stream().collect(
|
||||
Collectors.collectingAndThen(
|
||||
Collectors.toCollection(
|
||||
() -> new TreeSet<>(Comparator.comparing(t -> {
|
||||
if (ObjectUtils.isEmpty(t)) return "";
|
||||
if (ObjectUtils.isEmpty(t))
|
||||
return "";
|
||||
return t.toString();
|
||||
}))
|
||||
), ArrayList::new
|
||||
)
|
||||
);
|
||||
}))),
|
||||
ArrayList::new));
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,13 @@ import java.util.List;
|
||||
|
||||
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.RequestPart;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import io.dataease.commons.exception.DEException;
|
||||
import io.dataease.commons.utils.LogUtil;
|
||||
import io.dataease.plugins.config.SpringContextUtil;
|
||||
import io.dataease.plugins.xpack.theme.dto.ThemeDto;
|
||||
import io.dataease.plugins.xpack.theme.dto.ThemeItem;
|
||||
@@ -20,10 +21,8 @@ import io.dataease.plugins.xpack.theme.service.ThemeXpackService;
|
||||
@RestController
|
||||
public class ThemeServer {
|
||||
|
||||
|
||||
|
||||
@PostMapping("/themes")
|
||||
public List<ThemeDto> themes(){
|
||||
public List<ThemeDto> themes() {
|
||||
|
||||
ThemeXpackService themeXpackService = SpringContextUtil.getBean(ThemeXpackService.class);
|
||||
return themeXpackService.themes();
|
||||
@@ -36,15 +35,22 @@ public class ThemeServer {
|
||||
}
|
||||
|
||||
@PostMapping("/save")
|
||||
public void save(@RequestPart("request") ThemeRequest request, @RequestPart(value = "file", required = false) MultipartFile bodyFile) {
|
||||
public void save(@RequestPart("request") ThemeRequest request,
|
||||
@RequestPart(value = "file", required = false) MultipartFile bodyFile) {
|
||||
ThemeXpackService themeXpackService = SpringContextUtil.getBean(ThemeXpackService.class);
|
||||
themeXpackService.save(request, bodyFile);
|
||||
try {
|
||||
themeXpackService.save(request, bodyFile);
|
||||
} catch (Exception e) {
|
||||
LogUtil.error(e.getMessage(), e);
|
||||
DEException.throwException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/delete/{themeId}")
|
||||
public void save(@PathVariable("themeId") int themeId) {
|
||||
public void delete(@PathVariable("themeId") int themeId) {
|
||||
ThemeXpackService themeXpackService = SpringContextUtil.getBean(ThemeXpackService.class);
|
||||
themeXpackService.deleteTheme(themeId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class XEmailTaskServer {
|
||||
|
||||
@PostMapping("/queryTasks/{goPage}/{pageSize}")
|
||||
public Pager<List<XpackTaskGridDTO>> queryTask(@PathVariable int goPage, @PathVariable int pageSize,
|
||||
@RequestBody XpackGridRequest request) {
|
||||
@RequestBody XpackGridRequest request) {
|
||||
EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class);
|
||||
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
|
||||
List<XpackTaskGridDTO> tasks = emailXpackService.taskGrid(request);
|
||||
@@ -87,7 +87,7 @@ public class XEmailTaskServer {
|
||||
try {
|
||||
fileId = emailXpackService.print(url, token, buildPixel(request.getPixel()));
|
||||
} catch (Exception e) {
|
||||
LogUtil.error(e);
|
||||
LogUtil.error(e.getMessage(), e);
|
||||
DEException.throwException("预览失败,请联系管理员");
|
||||
}
|
||||
String imageUrl = "/system/ui/image/" + fileId;
|
||||
@@ -116,7 +116,7 @@ public class XEmailTaskServer {
|
||||
|
||||
@PostMapping("/queryInstancies/{goPage}/{pageSize}")
|
||||
public Pager<List<XpackTaskInstanceDTO>> instancesGrid(@PathVariable int goPage, @PathVariable int pageSize,
|
||||
@RequestBody XpackGridRequest request) {
|
||||
@RequestBody XpackGridRequest request) {
|
||||
EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class);
|
||||
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
|
||||
List<XpackTaskInstanceDTO> instances = emailXpackService.taskInstanceGrid(request);
|
||||
|
||||
@@ -2,6 +2,7 @@ package io.dataease.provider.datasource;
|
||||
|
||||
import com.alibaba.druid.filter.Filter;
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.pool.DruidPooledConnection;
|
||||
import com.alibaba.druid.wall.WallFilter;
|
||||
import com.google.gson.Gson;
|
||||
import io.dataease.commons.constants.DatasourceTypes;
|
||||
@@ -18,6 +19,7 @@ import javax.annotation.PostConstruct;
|
||||
import java.beans.PropertyVetoException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
@@ -143,6 +145,10 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
}
|
||||
List<TableFiled> list = new LinkedList<>();
|
||||
try (Connection connection = getConnectionFromPool(datasourceRequest)) {
|
||||
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("oracle")) {
|
||||
Method setRemarksReporting = extendedJdbcClassLoader.loadClass("oracle.jdbc.driver.OracleConnection").getMethod("setRemarksReporting",boolean.class);
|
||||
setRemarksReporting.invoke(((DruidPooledConnection) connection).getConnection(), true);
|
||||
}
|
||||
DatabaseMetaData databaseMetaData = connection.getMetaData();
|
||||
ResultSet resultSet = databaseMetaData.getColumns(null, "%", datasourceRequest.getTable(), "%");
|
||||
while (resultSet.next()) {
|
||||
|
||||
@@ -459,16 +459,16 @@ public class DataSetTableService {
|
||||
List<Long> roleIds = new ArrayList<>();
|
||||
Long deptId = null;
|
||||
|
||||
if(user == null && userId == null ){
|
||||
if (user == null && userId == null) {
|
||||
return datasetRowPermissions;
|
||||
}
|
||||
|
||||
if(user != null && userId != null ){
|
||||
if (user != null && userId != null) {
|
||||
return datasetRowPermissions;
|
||||
}
|
||||
|
||||
if(user != null){
|
||||
if(user.getIsAdmin()){
|
||||
if (user != null) {
|
||||
if (user.getIsAdmin()) {
|
||||
return datasetRowPermissions;
|
||||
}
|
||||
userId = user.getUserId();
|
||||
@@ -476,9 +476,9 @@ public class DataSetTableService {
|
||||
roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
if(userId != null){
|
||||
if (userId != null) {
|
||||
SysUserEntity userEntity = authUserService.getUserById(userId);
|
||||
if(userEntity.getIsAdmin()){
|
||||
if (userEntity.getIsAdmin()) {
|
||||
return datasetRowPermissions;
|
||||
}
|
||||
deptId = userEntity.getDeptId();
|
||||
@@ -514,7 +514,7 @@ public class DataSetTableService {
|
||||
List<ChartFieldCustomFilterDTO> customFilter = new ArrayList<>();
|
||||
for (DatasetRowPermissions datasetRowPermissions : rowPermissions(datasetTable.getId(), user)) {
|
||||
ChartFieldCustomFilterDTO dto = new ChartFieldCustomFilterDTO();
|
||||
if(StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())){
|
||||
if (StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())) {
|
||||
continue;
|
||||
}
|
||||
DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId());
|
||||
@@ -525,7 +525,7 @@ public class DataSetTableService {
|
||||
dto.setId(field.getId());
|
||||
dto.setFilterType(datasetRowPermissions.getFilterType());
|
||||
if (datasetRowPermissions.getFilterType().equalsIgnoreCase("logic")) {
|
||||
if(StringUtils.isEmpty(datasetRowPermissions.getFilter())){
|
||||
if (StringUtils.isEmpty(datasetRowPermissions.getFilter())) {
|
||||
continue;
|
||||
}
|
||||
List<ChartCustomFilterItemDTO> lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartCustomFilterItemDTO.class);
|
||||
@@ -536,7 +536,7 @@ public class DataSetTableService {
|
||||
dto.setLogic(datasetRowPermissions.getLogic());
|
||||
customFilter.add(dto);
|
||||
} else {
|
||||
if(StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())){
|
||||
if (StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())) {
|
||||
continue;
|
||||
}
|
||||
dto.setEnumCheckField(Arrays.asList(datasetRowPermissions.getEnumCheckField().split(",").clone()));
|
||||
@@ -546,10 +546,13 @@ public class DataSetTableService {
|
||||
return customFilter;
|
||||
}
|
||||
|
||||
public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize) throws Exception {
|
||||
public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize, List<DatasetTableField> extFields) throws Exception {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
DatasetTableField datasetTableField = DatasetTableField.builder().tableId(dataSetTableRequest.getId()).checked(Boolean.TRUE).build();
|
||||
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
|
||||
if (CollectionUtils.isNotEmpty(extFields)) {
|
||||
fields.addAll(extFields);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(fields)) {
|
||||
map.put("fields", fields);
|
||||
map.put("data", new ArrayList<>());
|
||||
@@ -578,7 +581,7 @@ public class DataSetTableService {
|
||||
if (ObjectUtils.isEmpty(ds)) {
|
||||
throw new RuntimeException(Translator.get("i18n_datasource_delete"));
|
||||
}
|
||||
if(StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")){
|
||||
if (StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")) {
|
||||
throw new Exception(Translator.get("i18n_invalid_ds"));
|
||||
}
|
||||
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
@@ -646,7 +649,7 @@ public class DataSetTableService {
|
||||
if (ObjectUtils.isEmpty(ds)) {
|
||||
throw new RuntimeException(Translator.get("i18n_datasource_delete"));
|
||||
}
|
||||
if(StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")){
|
||||
if (StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")) {
|
||||
throw new Exception(Translator.get("i18n_invalid_ds"));
|
||||
}
|
||||
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
|
||||
@@ -300,3 +300,4 @@ i18n_invalid_ds=Invalid Datasource
|
||||
定时报告=Regular report
|
||||
i18n_rp_exist=Row permission of the same type already exists
|
||||
i18n_field_name_repeat=Field name can't repeat
|
||||
i18n_calc_field_error=Field expression error
|
||||
|
||||
@@ -299,3 +299,4 @@ i18n_invalid_ds=无效数据源
|
||||
定时报告=定时报告
|
||||
i18n_rp_exist=已有同类型的行权限存在
|
||||
i18n_field_name_repeat=字段名不能重复
|
||||
i18n_calc_field_error=字段表达式语法错误
|
||||
|
||||
@@ -302,3 +302,4 @@ i18n_invalid_ds=無效數據源
|
||||
定时报告=定時報告
|
||||
i18n_rp_exist=已有同類型餓行權限存在
|
||||
i18n_field_name_repeat=字段名不能重復
|
||||
i18n_calc_field_error=字段表達式語法錯誤
|
||||
|
||||
Reference in New Issue
Block a user