dataease-dm/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java
2022-03-01 17:28:48 +08:00

203 lines
9.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package io.dataease.controller.dataset;
import cn.hutool.core.collection.CollectionUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.auth.annotation.DePermission;
import io.dataease.auth.annotation.DePermissions;
import io.dataease.auth.filter.F2CLinkFilter;
import io.dataease.base.domain.DatasetTable;
import io.dataease.base.domain.DatasetTableField;
import io.dataease.commons.constants.DePermissionType;
import io.dataease.commons.constants.ResourceAuthLevel;
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.dataease.service.dataset.PermissionService;
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 springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author gin
* @Date 2021/2/24 4:28 下午
*/
@Api(tags = "数据集:数据集字段")
@ApiSupport(order = 60)
@RestController
@RequestMapping("/dataset/field")
public class DataSetTableFieldController {
@Resource
private DataSetTableFieldsService dataSetTableFieldsService;
@Autowired
private DataSetFieldService dataSetFieldService;
@Resource
private DataSetTableService dataSetTableService;
@Resource
private PermissionService permissionService;
@DePermission(type = DePermissionType.DATASET)
@ApiOperation("查询表下属字段")
@PostMapping("list/{tableId}")
public List<DatasetTableField> list(@PathVariable String tableId) {
DatasetTableField datasetTableField = DatasetTableField.builder().build();
datasetTableField.setTableId(tableId);
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
fields = permissionService.filterColumnPermissons(fields, new ArrayList<>(), tableId, null);
return fields;
}
@DePermission(type = DePermissionType.DATASET)
@ApiOperation("查询表下属字段")
@PostMapping("listWithPermission/{tableId}")
public List<DatasetTableField> listWithPermission(@PathVariable String tableId) {
DatasetTableField datasetTableField = DatasetTableField.builder().build();
datasetTableField.setTableId(tableId);
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
List<String> desensitizationList = new ArrayList<>();
fields = permissionService.filterColumnPermissons(fields, desensitizationList, tableId, null);
fields = fields.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName())).collect(Collectors.toList());
return fields;
}
//管理权限,可以列出所有字段
@DePermission(type = DePermissionType.DATASET)
@ApiOperation("查询表下属字段")
@PostMapping("listForPermissionSeting/{tableId}")
public List<DatasetTableField> listForPermissionSeting(@PathVariable String tableId) {
DatasetTableField datasetTableField = DatasetTableField.builder().build();
datasetTableField.setTableId(tableId);
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
return fields;
}
//管理权限,可以列出所有字段
@DePermission(type = DePermissionType.DATASET)
@ApiOperation("分组查询表下属字段")
@PostMapping("listByDQ/{tableId}")
public DatasetTableField4Type listByDQ(@PathVariable String tableId) {
DatasetTableField datasetTableField = DatasetTableField.builder().build();
datasetTableField.setTableId(tableId);
datasetTableField.setGroupType("d");
List<DatasetTableField> dimensionList = dataSetTableFieldsService.list(datasetTableField);
datasetTableField.setGroupType("q");
List<DatasetTableField> quotaList = dataSetTableFieldsService.list(datasetTableField);
DatasetTableField4Type datasetTableField4Type = new DatasetTableField4Type();
datasetTableField4Type.setDimensionList(dimensionList);
datasetTableField4Type.setQuotaList(quotaList);
return datasetTableField4Type;
}
@DePermission(type = DePermissionType.DATASET, value = "tableId", level = ResourceAuthLevel.DATASET_LEVEL_MANAGE)
@ApiOperation("批量更新")
@PostMapping("batchEdit")
public void batchEdit(@RequestBody List<DatasetTableField> list) {
dataSetTableFieldsService.batchEdit(list);
}
@DePermission(type = DePermissionType.DATASET, value = "tableId", level = ResourceAuthLevel.DATASET_LEVEL_MANAGE)
@ApiOperation("保存")
@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);
}
@DePermissions(value = {
@DePermission(type = DePermissionType.DATASET, level = ResourceAuthLevel.DATASET_LEVEL_MANAGE, paramIndex = 1)
})
@ApiOperation("删除")
@PostMapping("delete/{id}/{tableId}")
public void delete(@PathVariable String id, @PathVariable String tableId) {
dataSetTableFieldsService.delete(id);
}
@ApiIgnore
@PostMapping("linkMultFieldValues")
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();
multFieldValuesRequest.setUserId(userId);
return multFieldValues(multFieldValuesRequest);
}
@ApiIgnore
@PostMapping("multFieldValues")
public List<Object> multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
List<Object> results = new ArrayList<>();
for (String fieldId : multFieldValuesRequest.getFieldIds()) {
List<Object> fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId(), true);
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 "";
return t.toString();
}))),
ArrayList::new));
return list;
}
@ApiIgnore
@PostMapping("multFieldValuesForPermissions")
public List<Object> multFieldValuesForPermissions(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
List<Object> results = new ArrayList<>();
for (String fieldId : multFieldValuesRequest.getFieldIds()) {
List<Object> fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId(), false);
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 "";
return t.toString();
}))),
ArrayList::new));
return list;
}
}