mirror of
https://github.com/dataease/dataease.git
synced 2025-02-24 11:32:57 +08:00
fix: Excel追加了主键重复的数据,给出错误提示,提示内容:不能追加主键相同的数据。
This commit is contained in:
parent
4276063149
commit
36147eb59a
@ -17,6 +17,7 @@ import io.dataease.extensions.datasource.dto.DatasetTableDTO;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceDTO;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceRequest;
|
||||
import io.dataease.extensions.datasource.dto.TableField;
|
||||
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
|
||||
import io.dataease.job.schedule.ExtractDataJob;
|
||||
import io.dataease.job.schedule.ScheduleManager;
|
||||
import io.dataease.utils.BeanUtils;
|
||||
@ -26,7 +27,6 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobKey;
|
||||
import org.quartz.TriggerKey;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
@ -50,7 +50,6 @@ public class DatasourceSyncManage {
|
||||
@Resource
|
||||
private CalciteProvider calciteProvider;
|
||||
|
||||
@Async
|
||||
public void extractExcelData(CoreDatasource coreDatasource, String type) {
|
||||
if (coreDatasource == null) {
|
||||
LogUtil.error("Can not find CoreDatasource: " + coreDatasource.getName());
|
||||
@ -85,7 +84,12 @@ public class DatasourceSyncManage {
|
||||
}
|
||||
datasetTableTaskLog.setTaskStatus(TaskStatus.Error.toString());
|
||||
datasetTableTaskLog.setInfo(datasetTableTaskLog.getInfo() + "/n Failed to sync datatable: " + datasourceRequest.getTable() + ", " + e.getMessage());
|
||||
DEException.throwException(e);
|
||||
if (e.getMessage().contains("Duplicate entry")) {
|
||||
DEException.throwException("不能追加主键相同的数据, " + e.getMessage());
|
||||
} else {
|
||||
DEException.throwException(e);
|
||||
}
|
||||
|
||||
} finally {
|
||||
datasourceTaskServer.saveLog(datasetTableTaskLog);
|
||||
}
|
||||
@ -237,7 +241,7 @@ public class DatasourceSyncManage {
|
||||
totalPage = dataList.size() / pageNumber;
|
||||
}
|
||||
for (int page = 1; page <= totalPage; page++) {
|
||||
engineRequest.setQuery(engineProvider.insertSql(datasourceRequest.getTable(), extractType, dataList, page, pageNumber, tableFields));
|
||||
engineRequest.setQuery(engineProvider.insertSql(DatasourceConfiguration.DatasourceType.API.name(), datasourceRequest.getTable(), extractType, dataList, page, pageNumber, tableFields));
|
||||
calciteProvider.exec(engineRequest);
|
||||
}
|
||||
}
|
||||
@ -257,7 +261,7 @@ public class DatasourceSyncManage {
|
||||
totalPage = dataList.size() / pageNumber;
|
||||
}
|
||||
for (int page = 1; page <= totalPage; page++) {
|
||||
engineRequest.setQuery(engineProvider.insertSql(datasourceRequest.getTable(), extractType, dataList, page, pageNumber, tableFields));
|
||||
engineRequest.setQuery(engineProvider.insertSql(DatasourceConfiguration.DatasourceType.Excel.name(), datasourceRequest.getTable(), extractType, dataList, page, pageNumber, tableFields));
|
||||
calciteProvider.exec(engineRequest);
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ public abstract class EngineProvider {
|
||||
|
||||
public abstract String createTableSql(String name, List<TableField> tableFields, CoreDeEngine engine);
|
||||
|
||||
public abstract String insertSql(String tableName, DatasourceServer.UpdateType extractType, List<String[]> dataList, int page, int pageNumber, List<TableField> tableFields);
|
||||
public abstract String insertSql(String dsType, String tableName, DatasourceServer.UpdateType extractType, List<String[]> dataList, int page, int pageNumber, List<TableField> tableFields);
|
||||
|
||||
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ public class H2EngineProvider extends EngineProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String insertSql(String tableName, DatasourceServer.UpdateType extractType, List<String[]> dataList, int page, int pageNumber,List<TableField> tableFields) {
|
||||
public String insertSql(String dsType, String tableName, DatasourceServer.UpdateType extractType, List<String[]> dataList, int page, int pageNumber,List<TableField> tableFields) {
|
||||
String engineTableName;
|
||||
switch (extractType) {
|
||||
case all_scope:
|
||||
|
@ -31,7 +31,7 @@ public class MysqlEngineProvider extends EngineProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String insertSql(String tableName, DatasourceServer.UpdateType extractType, List<String[]> dataList, int page, int pageNumber, List<TableField> tableFields) {
|
||||
public String insertSql(String dsType, String tableName, DatasourceServer.UpdateType extractType, List<String[]> dataList, int page, int pageNumber, List<TableField> tableFields) {
|
||||
String engineTableName;
|
||||
switch (extractType) {
|
||||
case all_scope:
|
||||
@ -62,17 +62,20 @@ public class MysqlEngineProvider extends EngineProvider {
|
||||
values.append("('").append(String.join("','", Arrays.asList(strings1)))
|
||||
.append("'),");
|
||||
}
|
||||
List<TableField> keys = tableFields.stream().filter(tableField -> tableField.isPrimaryKey() && tableField.isChecked()).toList();
|
||||
List<TableField> notKeys = tableFields.stream().filter(tableField -> tableField.isChecked() && !tableField.isPrimaryKey()).toList();
|
||||
String insetSql = (insertSql + values.substring(0, values.length() - 1)).replaceAll("'null'", "null");
|
||||
if (CollectionUtils.isNotEmpty(keys) && extractType.equals(DatasourceServer.UpdateType.add_scope)) {
|
||||
insetSql = insetSql + " ON DUPLICATE KEY UPDATE ";
|
||||
List<String> updateColumes = new ArrayList<>();
|
||||
for (TableField notKey : notKeys) {
|
||||
updateColumes.add("column = VALUES(column)".replace("column", notKey.getName()));
|
||||
if (dsType.equalsIgnoreCase("api")) {
|
||||
List<TableField> keys = tableFields.stream().filter(tableField -> tableField.isPrimaryKey() && tableField.isChecked()).toList();
|
||||
List<TableField> notKeys = tableFields.stream().filter(tableField -> tableField.isChecked() && !tableField.isPrimaryKey()).toList();
|
||||
if (CollectionUtils.isNotEmpty(keys) && extractType.equals(DatasourceServer.UpdateType.add_scope)) {
|
||||
insetSql = insetSql + " ON DUPLICATE KEY UPDATE ";
|
||||
List<String> updateColumes = new ArrayList<>();
|
||||
for (TableField notKey : notKeys) {
|
||||
updateColumes.add("column = VALUES(column)".replace("column", notKey.getName()));
|
||||
}
|
||||
insetSql = insetSql + updateColumes.stream().collect(Collectors.joining(","));
|
||||
}
|
||||
insetSql = insetSql + updateColumes.stream().collect(Collectors.joining(","));
|
||||
}
|
||||
|
||||
return insetSql;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user