提交 974d7549 authored 作者: wangjiahao's avatar wangjiahao

Merge remote-tracking branch 'origin/main' into main

...@@ -6,16 +6,9 @@ import org.quartz.impl.triggers.CronTriggerImpl; ...@@ -6,16 +6,9 @@ import org.quartz.impl.triggers.CronTriggerImpl;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component @Component
public class ScheduleManager { public class ScheduleManager {
......
...@@ -7,5 +7,7 @@ package io.dataease.provider; ...@@ -7,5 +7,7 @@ package io.dataease.provider;
public abstract class DDLProvider { public abstract class DDLProvider {
public abstract String createView(String name, String viewSQL); public abstract String createView(String name, String viewSQL);
public abstract String dropTableOrView(String name); public abstract String dropTable(String name);
public abstract String dropView(String name);
} }
...@@ -15,7 +15,12 @@ public class DorisDDLProvider extends DDLProvider { ...@@ -15,7 +15,12 @@ public class DorisDDLProvider extends DDLProvider {
} }
@Override @Override
public String dropTableOrView(String name) { public String dropTable(String name) {
return "DROP TABLE IF EXISTS " + name; return "DROP TABLE IF EXISTS " + name;
} }
@Override
public String dropView(String name) {
return "DROP VIEW IF EXISTS " + name;
}
} }
...@@ -15,7 +15,12 @@ public class MysqlDDLProvider extends DDLProvider { ...@@ -15,7 +15,12 @@ public class MysqlDDLProvider extends DDLProvider {
} }
@Override @Override
public String dropTableOrView(String name) { public String dropTable(String name) {
return "DROP TABLE IF EXISTS " + name; return "DROP TABLE IF EXISTS " + name;
} }
@Override
public String dropView(String name) {
return "DROP VIEW IF EXISTS " + name;
}
} }
...@@ -34,9 +34,9 @@ public class ScheduleService { ...@@ -34,9 +34,9 @@ public class ScheduleService {
endTime = null; endTime = null;
} else { } else {
endTime = new Date(datasetTableTask.getEndTime()); endTime = new Date(datasetTableTask.getEndTime());
if (endTime.before(new Date())) { // if (endTime.before(new Date())) {
return; // return;
} // }
} }
scheduleManager.addOrUpdateCronJob(new JobKey(datasetTableTask.getId(), datasetTableTask.getTableId()), scheduleManager.addOrUpdateCronJob(new JobKey(datasetTableTask.getId(), datasetTableTask.getTableId()),
......
...@@ -127,28 +127,36 @@ public class DataSetTableService { ...@@ -127,28 +127,36 @@ public class DataSetTableService {
} }
public void delete(String id) throws Exception { public void delete(String id) throws Exception {
DatasetTable table = datasetTableMapper.selectByPrimaryKey(id);
datasetTableMapper.deleteByPrimaryKey(id); datasetTableMapper.deleteByPrimaryKey(id);
dataSetTableFieldsService.deleteByTableId(id); dataSetTableFieldsService.deleteByTableId(id);
// 删除同步任务 // 删除同步任务
dataSetTableTaskService.deleteByTableId(id); dataSetTableTaskService.deleteByTableId(id);
try { try {
deleteDorisTable(id); deleteDorisTable(id, table);
} catch (Exception e) { } catch (Exception e) {
} }
} }
private void deleteDorisTable(String datasetId) throws Exception { private void deleteDorisTable(String datasetId, DatasetTable table) throws Exception {
String dorisTableName = DorisTableUtils.dorisName(datasetId); String dorisTableName = DorisTableUtils.dorisName(datasetId);
Datasource dorisDatasource = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); Datasource dorisDatasource = (Datasource) CommonBeanFactory.getBean("DorisDatasource");
JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class);
DatasourceRequest datasourceRequest = new DatasourceRequest(); DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(dorisDatasource); datasourceRequest.setDatasource(dorisDatasource);
DDLProvider ddlProvider = ProviderFactory.getDDLProvider(dorisDatasource.getType()); DDLProvider ddlProvider = ProviderFactory.getDDLProvider(dorisDatasource.getType());
datasourceRequest.setQuery(ddlProvider.dropTableOrView(dorisTableName)); if (StringUtils.equalsIgnoreCase("custom", table.getType())) {
jdbcProvider.exec(datasourceRequest); datasourceRequest.setQuery(ddlProvider.dropView(dorisTableName));
datasourceRequest.setQuery(ddlProvider.dropTableOrView(DorisTableUtils.dorisTmpName(dorisTableName))); jdbcProvider.exec(datasourceRequest);
jdbcProvider.exec(datasourceRequest); datasourceRequest.setQuery(ddlProvider.dropView(DorisTableUtils.dorisTmpName(dorisTableName)));
jdbcProvider.exec(datasourceRequest);
} else {
datasourceRequest.setQuery(ddlProvider.dropTable(dorisTableName));
jdbcProvider.exec(datasourceRequest);
datasourceRequest.setQuery(ddlProvider.dropTable(DorisTableUtils.dorisTmpName(dorisTableName)));
jdbcProvider.exec(datasourceRequest);
}
} }
public List<DataSetTableDTO> list(DataSetTableRequest dataSetTableRequest) { public List<DataSetTableDTO> list(DataSetTableRequest dataSetTableRequest) {
...@@ -351,6 +359,9 @@ public class DataSetTableService { ...@@ -351,6 +359,9 @@ public class DataSetTableService {
datasourceRequest.setDatasource(ds); datasourceRequest.setDatasource(ds);
String sql = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class).getSql(); String sql = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class).getSql();
// 使用输入的sql先预执行一次,并拿到所有字段 // 使用输入的sql先预执行一次,并拿到所有字段
if(StringUtils.isEmpty(sql)){
throw new Exception(Translator.get("i18n_sql_not_empty"));
}
datasourceRequest.setQuery(sql); datasourceRequest.setQuery(sql);
List<TableFiled> previewFields = datasourceProvider.fetchResultField(datasourceRequest); List<TableFiled> previewFields = datasourceProvider.fetchResultField(datasourceRequest);
// 正式执行 // 正式执行
...@@ -567,7 +578,7 @@ public class DataSetTableService { ...@@ -567,7 +578,7 @@ public class DataSetTableService {
datasourceRequest.setDatasource(dorisDatasource); datasourceRequest.setDatasource(dorisDatasource);
DDLProvider ddlProvider = ProviderFactory.getDDLProvider(dorisDatasource.getType()); DDLProvider ddlProvider = ProviderFactory.getDDLProvider(dorisDatasource.getType());
// 先删除表 // 先删除表
datasourceRequest.setQuery(ddlProvider.dropTableOrView(dorisTableName)); datasourceRequest.setQuery(ddlProvider.dropView(dorisTableName));
jdbcProvider.exec(datasourceRequest); jdbcProvider.exec(datasourceRequest);
datasourceRequest.setQuery(ddlProvider.createView(dorisTableName, customSql)); datasourceRequest.setQuery(ddlProvider.createView(dorisTableName, customSql));
jdbcProvider.exec(datasourceRequest); jdbcProvider.exec(datasourceRequest);
...@@ -702,9 +713,9 @@ public class DataSetTableService { ...@@ -702,9 +713,9 @@ public class DataSetTableService {
tableFiled.setFieldName(columnName); tableFiled.setFieldName(columnName);
tableFiled.setRemarks(columnName); tableFiled.setRemarks(columnName);
fields.add(tableFiled); fields.add(tableFiled);
} else if (i == 1){ } else if (i == 1) {
r[j] = readCell(row.getCell(j), true, fields.get(j)); r[j] = readCell(row.getCell(j), true, fields.get(j));
}else { } else {
r[j] = readCell(row.getCell(j), false, null); r[j] = readCell(row.getCell(j), false, null);
} }
} }
...@@ -735,16 +746,16 @@ public class DataSetTableService { ...@@ -735,16 +746,16 @@ public class DataSetTableService {
TableFiled tableFiled = new TableFiled(); TableFiled tableFiled = new TableFiled();
tableFiled.setFieldType("TEXT"); tableFiled.setFieldType("TEXT");
tableFiled.setFieldSize(1024); tableFiled.setFieldSize(1024);
String columnName = readCell(row.getCell(j),false, null); String columnName = readCell(row.getCell(j), false, null);
if (StringUtils.isEmpty(columnName)) { if (StringUtils.isEmpty(columnName)) {
columnName = "NONE_" + String.valueOf(j); columnName = "NONE_" + String.valueOf(j);
} }
tableFiled.setFieldName(columnName); tableFiled.setFieldName(columnName);
tableFiled.setRemarks(columnName); tableFiled.setRemarks(columnName);
fields.add(tableFiled); fields.add(tableFiled);
} else if (i == 1){ } else if (i == 1) {
r[j] = readCell(row.getCell(j), true, fields.get(j)); r[j] = readCell(row.getCell(j), true, fields.get(j));
}else { } else {
r[j] = readCell(row.getCell(j), false, null); r[j] = readCell(row.getCell(j), false, null);
} }
} }
...@@ -798,28 +809,36 @@ public class DataSetTableService { ...@@ -798,28 +809,36 @@ public class DataSetTableService {
private String readCell(Cell cell, boolean cellType, TableFiled tableFiled) { private String readCell(Cell cell, boolean cellType, TableFiled tableFiled) {
CellType cellTypeEnum = cell.getCellTypeEnum(); CellType cellTypeEnum = cell.getCellTypeEnum();
if (cellTypeEnum.equals(CellType.STRING)) { if (cellTypeEnum.equals(CellType.STRING)) {
if(cellType){ tableFiled.setFieldType("TEXT"); } if (cellType) {
tableFiled.setFieldType("TEXT");
}
return cell.getStringCellValue(); return cell.getStringCellValue();
} }
if (cellTypeEnum.equals(CellType.NUMERIC)) { if (cellTypeEnum.equals(CellType.NUMERIC)) {
if(HSSFDateUtil.isCellDateFormatted(cell)){ if (HSSFDateUtil.isCellDateFormatted(cell)) {
if(cellType) { tableFiled.setFieldType("DATETIME"); } if (cellType) {
tableFiled.setFieldType("DATETIME");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try { try {
return sdf.format(cell.getDateCellValue()); return sdf.format(cell.getDateCellValue());
}catch (Exception e){ } catch (Exception e) {
return ""; return "";
} }
}else { } else {
double d = cell.getNumericCellValue(); double d = cell.getNumericCellValue();
try { try {
Double value = new Double(d); Double value = new Double(d);
double eps = 1e-10; double eps = 1e-10;
if(value - Math.floor(value) < eps){ if (value - Math.floor(value) < eps) {
if(cellType) { tableFiled.setFieldType("LONG"); } if (cellType) {
tableFiled.setFieldType("LONG");
}
return value.longValue() + ""; return value.longValue() + "";
}else { } else {
if(cellType){ tableFiled.setFieldType("DOUBLE");} if (cellType) {
tableFiled.setFieldType("DOUBLE");
}
NumberFormat nf = NumberFormat.getInstance(); NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false); nf.setGroupingUsed(false);
return nf.format(value); return nf.format(value);
......
...@@ -244,4 +244,5 @@ i18n_username_exists=ID is already exists ...@@ -244,4 +244,5 @@ i18n_username_exists=ID is already exists
i18n_ds_name_exists=Datasource name exists i18n_ds_name_exists=Datasource name exists
i18n_sync_job_exists=There is already a synchronization task running, please try again later i18n_sync_job_exists=There is already a synchronization task running, please try again later
i18n_datasource_check_fail=Invalid,please check config i18n_datasource_check_fail=Invalid,please check config
i18n_not_find_user=Can not find user. i18n_not_find_user=Can not find user.
\ No newline at end of file i18n_sql_not_empty=SQL can not be empty.
\ No newline at end of file
...@@ -246,4 +246,5 @@ i18n_username_exists=用户 ID 已存在 ...@@ -246,4 +246,5 @@ i18n_username_exists=用户 ID 已存在
i18n_ds_name_exists=数据源名称已存在 i18n_ds_name_exists=数据源名称已存在
i18n_sync_job_exists=已经有同步任务在运行,稍后重试 i18n_sync_job_exists=已经有同步任务在运行,稍后重试
i18n_datasource_check_fail=校验失败,请检查配置信息 i18n_datasource_check_fail=校验失败,请检查配置信息
i18n_not_find_user=未找到用户 i18n_not_find_user=未找到用户
\ No newline at end of file i18n_sql_not_empty=SQL 不能为空
\ No newline at end of file
...@@ -246,4 +246,5 @@ i18n_username_exists=用戶ID已存在 ...@@ -246,4 +246,5 @@ i18n_username_exists=用戶ID已存在
i18n_ds_name_exists=數據源名稱已存在 i18n_ds_name_exists=數據源名稱已存在
i18n_sync_job_exists=已經有同步任務在運行,稍後重試 i18n_sync_job_exists=已經有同步任務在運行,稍後重試
i18n_datasource_check_fail=校驗失敗,請檢查配置信息 i18n_datasource_check_fail=校驗失敗,請檢查配置信息
i18n_not_find_user=未找到用戶 i18n_not_find_user=未找到用戶
\ No newline at end of file i18n_sql_not_empty=SQL 不能為空
\ No newline at end of file
...@@ -85,10 +85,10 @@ export function getPreviewData(data) { ...@@ -85,10 +85,10 @@ export function getPreviewData(data) {
}) })
} }
export function fieldList(id) { export function fieldList(id, showLoading = true) {
return request({ return request({
url: '/dataset/field/list/' + id, url: '/dataset/field/list/' + id,
loading: true, loading: showLoading,
method: 'post' method: 'post'
}) })
} }
...@@ -102,11 +102,11 @@ export function batchEdit(data) { ...@@ -102,11 +102,11 @@ export function batchEdit(data) {
}) })
} }
export function post(url, data) { export function post(url, data, showLoading = true) {
return request({ return request({
url: url, url: url,
method: 'post', method: 'post',
loading: true, loading: showLoading,
data data
}) })
} }
......
...@@ -153,7 +153,7 @@ export default { ...@@ -153,7 +153,7 @@ export default {
} }
</script> </script>
<style lang="css"> <style lang="css" scoped>
.el-checkbox+.el-checkbox { .el-checkbox+.el-checkbox {
margin-left: 10px; margin-left: 10px;
} }
......
...@@ -135,7 +135,7 @@ export default { ...@@ -135,7 +135,7 @@ export default {
} }
</script> </script>
<style lang="css"> <style lang="css" scoped>
.el-checkbox+.el-checkbox { .el-checkbox+.el-checkbox {
margin-left: 10px; margin-left: 10px;
} }
......
...@@ -136,7 +136,7 @@ export default { ...@@ -136,7 +136,7 @@ export default {
} }
</script> </script>
<style lang="css"> <style lang="css" scoped>
.el-checkbox+.el-checkbox { .el-checkbox+.el-checkbox {
margin-left: 10px; margin-left: 10px;
} }
......
...@@ -139,7 +139,7 @@ export default { ...@@ -139,7 +139,7 @@ export default {
} }
</script> </script>
<style lang="css"> <style lang="css" scoped>
.el-checkbox+.el-checkbox { .el-checkbox+.el-checkbox {
margin-left: 10px; margin-left: 10px;
} }
......
...@@ -150,7 +150,7 @@ export default { ...@@ -150,7 +150,7 @@ export default {
} }
</script> </script>
<style lang="css"> <style lang="css" scoped>
.el-checkbox+.el-checkbox { .el-checkbox+.el-checkbox {
margin-left: 10px; margin-left: 10px;
} }
......
...@@ -123,7 +123,7 @@ export default { ...@@ -123,7 +123,7 @@ export default {
} }
</script> </script>
<style lang="css"> <style lang="css" scoped>
.el-checkbox+.el-checkbox { .el-checkbox+.el-checkbox {
margin-left: 10px; margin-left: 10px;
} }
......
...@@ -161,7 +161,7 @@ export default { ...@@ -161,7 +161,7 @@ export default {
}, },
'table': function() { 'table': function() {
if (this.table && this.table.sceneId) { if (this.table && this.table.sceneId) {
post('dataset/group/getScene/' + this.table.sceneId, {}).then(response => { post('dataset/group/getScene/' + this.table.sceneId, {}, false).then(response => {
this.currGroup = response.data this.currGroup = response.data
this.$nextTick(function() { this.$nextTick(function() {
...@@ -213,7 +213,7 @@ export default { ...@@ -213,7 +213,7 @@ export default {
tree(group) { tree(group) {
this.dsLoading = true this.dsLoading = true
post('/dataset/group/tree', group).then(response => { post('/dataset/group/tree', group, false).then(response => {
this.data = response.data this.data = response.data
this.dsLoading = false this.dsLoading = false
}) })
...@@ -227,7 +227,7 @@ export default { ...@@ -227,7 +227,7 @@ export default {
sort: 'type asc,create_time desc,name asc', sort: 'type asc,create_time desc,name asc',
sceneId: this.currGroup.id, sceneId: this.currGroup.id,
mode: this.mode < 0 ? null : this.mode mode: this.mode < 0 ? null : this.mode
}).then(response => { }, false).then(response => {
this.tables = response.data this.tables = response.data
for (let i = 0; i < this.tables.length; i++) { for (let i = 0; i < this.tables.length; i++) {
if (this.tables[i].mode === 1 && this.kettleRunning === false) { if (this.tables[i].mode === 1 && this.kettleRunning === false) {
...@@ -278,7 +278,7 @@ export default { ...@@ -278,7 +278,7 @@ export default {
} }
// check mode=1的数据集是否创建doris表 // check mode=1的数据集是否创建doris表
if (data.mode === 1) { if (data.mode === 1) {
post('/dataset/table/checkDorisTableIsExists/' + data.id, {}).then(response => { post('/dataset/table/checkDorisTableIsExists/' + data.id, {}, false).then(response => {
if (response.data) { if (response.data) {
this.$nextTick(function() { this.$nextTick(function() {
this.$emit('getTable', data) this.$emit('getTable', data)
......
...@@ -67,7 +67,7 @@ export default { ...@@ -67,7 +67,7 @@ export default {
if (this.table.id) { if (this.table.id) {
this.dataLoading = true this.dataLoading = true
this.table.row = 100 this.table.row = 100
post('/dataset/table/getPreviewData/1/100', this.table).then(response => { post('/dataset/table/getPreviewData/1/100', this.table, false).then(response => {
this.fields = response.data.fields this.fields = response.data.fields
this.data = response.data.data this.data = response.data.data
const datas = this.data const datas = this.data
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<layout-content :header="formType=='add' ? $t('user.create') : $t('user.modify')" back-name="system-user"> <layout-content :header="formType=='add' ? $t('user.create') : $t('user.modify')" back-name="system-user">
<el-form ref="createUserForm" :model="form" :rules="rule" size="small" label-width="auto" label-position="right"> <el-form ref="createUserForm" :model="form" :rules="rule" size="small" label-width="auto" label-position="right">
<el-form-item label="ID" prop="username"> <el-form-item label="ID" prop="username">
<el-input v-model="form.username" /> <el-input v-model="form.username" :disabled="formType !== 'add'" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('commons.phone')" prop="phone"> <el-form-item :label="$t('commons.phone')" prop="phone">
<el-input v-model="form.phone" /> <el-input v-model="form.phone" />
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item :label="$t('commons.status')"> <el-form-item :label="$t('commons.status')">
<el-radio-group v-model="form.enabled" style="width: 140px"> <el-radio-group v-model="form.enabled" :disabled="formType !== 'add' && form.isAdmin" style="width: 140px">
<el-radio :label="1">{{ $t('commons.enable') }}</el-radio> <el-radio :label="1">{{ $t('commons.enable') }}</el-radio>
<el-radio :label="0">{{ $t('commons.disable') }}</el-radio> <el-radio :label="0">{{ $t('commons.disable') }}</el-radio>
</el-radio-group> </el-radio-group>
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
<el-select <el-select
v-model="form.roleIds" v-model="form.roleIds"
style="width: 100%" style="width: 100%"
:disabled="formType !== 'add' && form.isAdmin"
multiple multiple
:placeholder="$t('commons.please_select')" :placeholder="$t('commons.please_select')"
@remove-tag="deleteTag" @remove-tag="deleteTag"
......
...@@ -187,6 +187,7 @@ export default { ...@@ -187,6 +187,7 @@ export default {
show: this.checkPermission(['user:edit']) show: this.checkPermission(['user:edit'])
}, { }, {
label: this.$t('commons.delete'), icon: 'el-icon-delete', type: 'danger', click: this.del, label: this.$t('commons.delete'), icon: 'el-icon-delete', type: 'danger', click: this.del,
disabled: this.btnDisabled,
show: this.checkPermission(['user:del']) show: this.checkPermission(['user:del'])
}, { }, {
label: this.$t('member.edit_password'), icon: 'el-icon-s-tools', type: 'success', click: this.editPassword, label: this.$t('member.edit_password'), icon: 'el-icon-s-tools', type: 'success', click: this.editPassword,
...@@ -489,6 +490,9 @@ export default { ...@@ -489,6 +490,9 @@ export default {
allRoles().then(res => { allRoles().then(res => {
this.roles = res.data this.roles = res.data
}) })
},
btnDisabled(row) {
return row.userId === 1
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论