mirror of
https://github.com/dataease/dataease.git
synced 2026-06-13 01:01:20 +08:00
feat(X-Pack): [数据填报]选项值的绑定,可以绑定拥有读数据权限的数据源表字段
This commit is contained in:
@@ -3,6 +3,7 @@ package io.dataease.controller.datafill;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.google.gson.Gson;
|
||||
import io.dataease.commons.utils.AuthUtils;
|
||||
import io.dataease.commons.utils.PageUtils;
|
||||
import io.dataease.commons.utils.Pager;
|
||||
@@ -25,10 +26,7 @@ import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
@ApiIgnore
|
||||
@RequestMapping("dataFilling")
|
||||
@@ -193,20 +191,33 @@ public class DataFillController {
|
||||
@ApiIgnore
|
||||
@PostMapping("/form/{formId}/excel/template")
|
||||
public void getExcelTemplate(@PathVariable String formId, HttpServletResponse response) throws Exception {
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码
|
||||
String fileName = URLEncoder.encode("template", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
||||
// 这里需要设置不关闭流
|
||||
EasyExcel.write(response.getOutputStream())
|
||||
.head(dataFillService.getExcelHead(formId))
|
||||
.automaticMergeHead(false)
|
||||
.inMemory(true)
|
||||
.registerWriteHandler(dataFillService.getCommentWriteHandler(formId))
|
||||
.autoCloseStream(Boolean.FALSE)
|
||||
.sheet("模板")
|
||||
.doWrite(new ArrayList());
|
||||
try {
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码
|
||||
String fileName = URLEncoder.encode("template", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
||||
// 这里需要设置不关闭流
|
||||
EasyExcel.write(response.getOutputStream())
|
||||
.head(dataFillService.getExcelHead(formId))
|
||||
.automaticMergeHead(false)
|
||||
.inMemory(true)
|
||||
.registerWriteHandler(dataFillService.getCommentWriteHandler(formId))
|
||||
.autoCloseStream(Boolean.FALSE)
|
||||
.sheet("模板")
|
||||
.doWrite(new ArrayList());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// 重置response
|
||||
response.reset();
|
||||
response.setContentType("application/json");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
response.setStatus(500);
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("success", false);
|
||||
map.put("message", e.getMessage());
|
||||
response.getWriter().println(new Gson().toJson(map));
|
||||
}
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@@ -216,4 +227,10 @@ public class DataFillController {
|
||||
dataFillDataService.importExcelData(file, formId);
|
||||
}
|
||||
|
||||
@ApiIgnore
|
||||
@PostMapping("/form/{optionDatasource}/{optionTable}/{optionColumn}/options/{optionOrder}")
|
||||
public List<ExtTableField.Option> listColumnData(@PathVariable String optionDatasource, @PathVariable String optionTable, @PathVariable String optionColumn, @PathVariable String optionOrder) throws Exception {
|
||||
return dataFillDataService.listColumnData(optionDatasource, optionTable, optionColumn, optionOrder);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -89,6 +89,18 @@ public class MysqlExtDDLProvider extends DefaultExtDDLProvider {
|
||||
return baseSql;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String searchColumnData(String table, String column, String order) {
|
||||
String baseSql = "SELECT DISTINCT `$Column_Field$` FROM `$TABLE_NAME$` ORDER BY `$Column_Field$` $Column_Order$;";
|
||||
baseSql = baseSql.replace("$TABLE_NAME$", table).replace("$Column_Field$", column).replace("$Column_Field$", column);
|
||||
if (StringUtils.equalsIgnoreCase(order, "desc")) {
|
||||
baseSql = baseSql.replace("$Column_Order$", "DESC");
|
||||
} else {
|
||||
baseSql = baseSql.replace("$Column_Order$", "ASC");
|
||||
}
|
||||
return baseSql;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String whereSql(String tableName, List<TableField> searchFields) {
|
||||
StringBuilder builder = new StringBuilder("WHERE 1 = 1 ");
|
||||
|
||||
@@ -689,6 +689,35 @@ public class DataFillDataService {
|
||||
return rowId;
|
||||
}
|
||||
|
||||
public List<ExtTableField.Option> listColumnData(String optionDatasource, String optionTable, String optionColumn, String optionOrder) throws Exception {
|
||||
Datasource ds = datasource.get(optionDatasource);
|
||||
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(ds);
|
||||
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||
|
||||
String sql = extDDLProvider.searchColumnData(optionTable, optionColumn, optionOrder);
|
||||
|
||||
datasourceRequest.setQuery(sql);
|
||||
|
||||
List<String[]> data = datasourceProvider.getData(datasourceRequest);
|
||||
|
||||
List<ExtTableField.Option> result = new ArrayList<>();
|
||||
for (String[] datum : data) {
|
||||
ExtTableField.Option option = new ExtTableField.Option();
|
||||
if (StringUtils.isBlank(datum[0])) {
|
||||
continue;
|
||||
}
|
||||
option.setName(datum[0]);
|
||||
option.setValue(datum[0]);
|
||||
result.add(option);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class ExcelDataListener extends AnalysisEventListener<Map<Integer, String>> {
|
||||
private List<List<String>> data = new ArrayList<>();
|
||||
@@ -840,7 +869,16 @@ public class DataFillDataService {
|
||||
default:
|
||||
if (StringUtils.equalsIgnoreCase(field.getType(), "select") && !field.getSettings().isMultiple() || StringUtils.equalsIgnoreCase(field.getType(), "radio")) {
|
||||
boolean has = false;
|
||||
for (ExtTableField.Option option : field.getSettings().getOptions()) {
|
||||
List<ExtTableField.Option> options = field.getSettings().getOptions();
|
||||
if (field.getSettings().getOptionSourceType() == 2
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionDatasource())
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionTable())
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionColumn())
|
||||
) {
|
||||
options = listColumnData(field.getSettings().getOptionDatasource(), field.getSettings().getOptionTable(), field.getSettings().getOptionColumn(), field.getSettings().getOptionOrder());
|
||||
}
|
||||
|
||||
for (ExtTableField.Option option : options) {
|
||||
if (StringUtils.equals((String) option.getValue(), excelRowData)) {
|
||||
has = true;
|
||||
break;
|
||||
@@ -867,9 +905,19 @@ public class DataFillDataService {
|
||||
|
||||
List<String> result = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(list)) {
|
||||
|
||||
List<ExtTableField.Option> options = field.getSettings().getOptions();
|
||||
if (field.getSettings().getOptionSourceType() == 2
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionDatasource())
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionTable())
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionColumn())
|
||||
) {
|
||||
options = listColumnData(field.getSettings().getOptionDatasource(), field.getSettings().getOptionTable(), field.getSettings().getOptionColumn(), field.getSettings().getOptionOrder());
|
||||
}
|
||||
|
||||
for (String str : list) {
|
||||
boolean has = false;
|
||||
for (ExtTableField.Option option : field.getSettings().getOptions()) {
|
||||
for (ExtTableField.Option option : options) {
|
||||
if (StringUtils.equals((String) option.getValue(), str)) {
|
||||
has = true;
|
||||
break;
|
||||
@@ -877,6 +925,8 @@ public class DataFillDataService {
|
||||
}
|
||||
if (has) {
|
||||
result.add(str);
|
||||
} else {
|
||||
DataEaseException.throwException("[" + field.getSettings().getName() + "] 输入值[" + str + "]不在范围内");
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isEmpty(result)) {
|
||||
|
||||
@@ -527,6 +527,21 @@ public class DataFillService {
|
||||
ExtTableField end = gson.fromJson(gson.toJson(field), ExtTableField.class);
|
||||
end.getSettings().getMapping().setColumnName(end.getSettings().getMapping().getColumnName2());
|
||||
fields.add(end);
|
||||
} else if (StringUtils.equalsIgnoreCase(field.getType(), "select") || StringUtils.equalsIgnoreCase(field.getType(), "radio") || StringUtils.equalsIgnoreCase(field.getType(), "checkbox")) {
|
||||
if (field.getSettings().getOptionSourceType() == 2
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionDatasource())
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionTable())
|
||||
&& StringUtils.isNotBlank(field.getSettings().getOptionColumn())
|
||||
) {
|
||||
List<ExtTableField.Option> columnData = new ArrayList<>();
|
||||
try {
|
||||
columnData = dataFillDataService.listColumnData(field.getSettings().getOptionDatasource(), field.getSettings().getOptionTable(), field.getSettings().getOptionColumn(), field.getSettings().getOptionOrder());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
field.getSettings().setOptions(columnData);
|
||||
}
|
||||
fields.add(field);
|
||||
} else {
|
||||
fields.add(field);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user