Merge remote-tracking branch 'origin/main' into main
@ -4,6 +4,7 @@
|
||||
|
||||
<resultMap id="panelStoreMap" type="io.dataease.dto.panel.PanelStoreDto" >
|
||||
<id column="store_id" property="storeId"></id>
|
||||
<result column="panel_group_id" property="panelGroupId"></result>
|
||||
<result column="name" property="name"></result>
|
||||
</resultMap>
|
||||
|
||||
@ -11,7 +12,7 @@
|
||||
|
||||
|
||||
<select id="query" parameterType="io.dataease.base.mapper.ext.query.GridExample" resultMap="panelStoreMap">
|
||||
select s.store_id, g.name
|
||||
select s.store_id,s.panel_group_id, g.name
|
||||
from panel_store s
|
||||
left join panel_group g on g.id = s.panel_group_id
|
||||
<if test="_parameter != null">
|
||||
|
@ -22,15 +22,15 @@ public class CommonConfig {
|
||||
private Environment env; // 保存了配置文件的信息
|
||||
private static String root_path = "/opt/dataease/data/kettle/";
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public org.apache.hadoop.conf.Configuration configuration() {
|
||||
org.apache.hadoop.conf.Configuration configuration = new org.apache.hadoop.conf.Configuration();
|
||||
configuration.set("hbase.zookeeper.quorum", env.getProperty("hbase.zookeeper.quorum"));
|
||||
configuration.set("hbase.zookeeper.property.clientPort", env.getProperty("hbase.zookeeper.property.clientPort"));
|
||||
configuration.set("hbase.client.retries.number", env.getProperty("hbase.client.retries.number", "1"));
|
||||
return configuration;
|
||||
}
|
||||
// @Bean
|
||||
// @ConditionalOnMissingBean
|
||||
// public org.apache.hadoop.conf.Configuration configuration() {
|
||||
// org.apache.hadoop.conf.Configuration configuration = new org.apache.hadoop.conf.Configuration();
|
||||
// configuration.set("hbase.zookeeper.quorum", env.getProperty("hbase.zookeeper.quorum"));
|
||||
// configuration.set("hbase.zookeeper.property.clientPort", env.getProperty("hbase.zookeeper.property.clientPort"));
|
||||
// configuration.set("hbase.client.retries.number", env.getProperty("hbase.client.retries.number", "1"));
|
||||
// return configuration;
|
||||
// }
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
|
@ -7,6 +7,7 @@ import io.dataease.datasource.dto.MysqlConfigrationDTO;
|
||||
import io.dataease.datasource.dto.SqlServerConfigration;
|
||||
import io.dataease.datasource.dto.TableFiled;
|
||||
import io.dataease.datasource.request.DatasourceRequest;
|
||||
import org.apache.arrow.util.VisibleForTesting;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -39,6 +40,23 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
return list;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void exec(DatasourceRequest datasourceRequest) throws Exception {
|
||||
Connection connection = null;
|
||||
try {
|
||||
connection = getConnectionFromPool(datasourceRequest);
|
||||
Statement stat = connection.createStatement();
|
||||
stat.execute(datasourceRequest.getQuery());
|
||||
} catch (SQLException e) {
|
||||
throw new Exception("ERROR:" + e.getMessage(), e);
|
||||
} catch (Exception e) {
|
||||
throw new Exception("ERROR:" + e.getMessage(), e);
|
||||
}finally {
|
||||
returnSource(connection, datasourceRequest.getDatasource().getId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ResultSet getDataResultSet(DatasourceRequest datasourceRequest) throws Exception {
|
||||
ResultSet rs;
|
||||
@ -47,7 +65,6 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
connection = getConnectionFromPool(datasourceRequest);
|
||||
Statement stat = connection.createStatement();
|
||||
rs = stat.executeQuery(datasourceRequest.getQuery());
|
||||
returnSource(connection, datasourceRequest.getDatasource().getId());
|
||||
} catch (SQLException e) {
|
||||
throw new Exception("ERROR:" + e.getMessage(), e);
|
||||
} catch (Exception e) {
|
||||
@ -66,7 +83,6 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
connection = getConnectionFromPool(datasourceRequest);
|
||||
Statement stat = connection.createStatement();
|
||||
ResultSet rs = stat.executeQuery(datasourceRequest.getQuery() + MessageFormat.format(" LIMIT {0}, {1}", (datasourceRequest.getStartPage() - 1) * datasourceRequest.getPageSize(), datasourceRequest.getPageSize()));
|
||||
returnSource(connection, datasourceRequest.getDatasource().getId());
|
||||
list = fetchResult(rs);
|
||||
} catch (SQLException e) {
|
||||
throw new Exception("ERROR:" + e.getMessage(), e);
|
||||
@ -174,8 +190,6 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
return list;
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
@Override
|
||||
public void test(DatasourceRequest datasourceRequest) throws Exception {
|
||||
String queryStr = getTablesSql(datasourceRequest);
|
||||
|
@ -12,4 +12,5 @@ import lombok.Setter;
|
||||
public class DataTableInfoDTO {
|
||||
private String table;
|
||||
private String sql;
|
||||
private String data;// file path
|
||||
}
|
||||
|
@ -11,5 +11,7 @@ public class PanelStoreDto {
|
||||
private Long storeId;
|
||||
@ApiModelProperty("仪表板名称")
|
||||
private String name;
|
||||
@ApiModelProperty("仪表板Id")
|
||||
private String panelGroupId;
|
||||
|
||||
}
|
||||
|
@ -33,20 +33,20 @@ public class AppStartReadHBaseListener implements ApplicationListener<Applicatio
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
|
||||
System.out.println("================= Read HBase start =================");
|
||||
// 项目启动,从数据集中找到定时抽取的表,从HBase中读取放入缓存
|
||||
DatasetTableExample datasetTableExample = new DatasetTableExample();
|
||||
datasetTableExample.createCriteria().andModeEqualTo(1);
|
||||
List<DatasetTable> datasetTables = datasetTableMapper.selectByExampleWithBLOBs(datasetTableExample);
|
||||
for (DatasetTable table : datasetTables) {
|
||||
// commonThreadPool.addTask(() -> {
|
||||
try {
|
||||
List<DatasetTableField> fields = dataSetTableFieldsService.getFieldsByTableId(table.getId());
|
||||
sparkCalc.getHBaseDataAndCache(table.getId(), fields);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// });
|
||||
}
|
||||
// System.out.println("================= Read HBase start =================");
|
||||
// // 项目启动,从数据集中找到定时抽取的表,从HBase中读取放入缓存
|
||||
// DatasetTableExample datasetTableExample = new DatasetTableExample();
|
||||
// datasetTableExample.createCriteria().andModeEqualTo(1);
|
||||
// List<DatasetTable> datasetTables = datasetTableMapper.selectByExampleWithBLOBs(datasetTableExample);
|
||||
// for (DatasetTable table : datasetTables) {
|
||||
//// commonThreadPool.addTask(() -> {
|
||||
// try {
|
||||
// List<DatasetTableField> fields = dataSetTableFieldsService.getFieldsByTableId(table.getId());
|
||||
// sparkCalc.getHBaseDataAndCache(table.getId(), fields);
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
//// });
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
@ -18,13 +18,11 @@ import io.dataease.dto.dataset.DataTableInfoDTO;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.xssf.usermodel.XSSFRow;
|
||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
@ -37,7 +35,6 @@ import java.io.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.sql.ResultSet;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
@ -163,11 +160,6 @@ public class DataSetTableService {
|
||||
}
|
||||
|
||||
public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest) throws Exception {
|
||||
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
|
||||
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(ds);
|
||||
|
||||
DatasetTableField datasetTableField = DatasetTableField.builder().build();
|
||||
datasetTableField.setTableId(dataSetTableRequest.getId());
|
||||
datasetTableField.setChecked(Boolean.TRUE);
|
||||
@ -176,18 +168,38 @@ public class DataSetTableService {
|
||||
|
||||
DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class);
|
||||
DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(dataSetTableRequest.getId());
|
||||
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) {
|
||||
String table = dataTableInfoDTO.getTable();
|
||||
datasourceRequest.setQuery(createQuerySQL(ds.getType(), table, fieldArray) + " LIMIT 0," + dataSetTableRequest.getRow());
|
||||
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) {
|
||||
String sql = dataTableInfoDTO.getSql();
|
||||
datasourceRequest.setQuery(createQuerySQL(ds.getType(), " (" + sql + ") AS tmp ", fieldArray) + " LIMIT 0," + dataSetTableRequest.getRow());
|
||||
}
|
||||
|
||||
List<String[]> data = new ArrayList<>();
|
||||
try {
|
||||
data.addAll(datasourceProvider.getData(datasourceRequest));
|
||||
} catch (Exception e) {
|
||||
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) {
|
||||
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
|
||||
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(ds);
|
||||
|
||||
String table = dataTableInfoDTO.getTable();
|
||||
datasourceRequest.setQuery(createQuerySQL(ds.getType(), table, fieldArray) + " LIMIT 0," + dataSetTableRequest.getRow());
|
||||
|
||||
try {
|
||||
data.addAll(datasourceProvider.getData(datasourceRequest));
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) {
|
||||
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
|
||||
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(ds);
|
||||
|
||||
String sql = dataTableInfoDTO.getSql();
|
||||
datasourceRequest.setQuery(createQuerySQL(ds.getType(), " (" + sql + ") AS tmp ", fieldArray) + " LIMIT 0," + dataSetTableRequest.getRow());
|
||||
|
||||
try {
|
||||
data.addAll(datasourceProvider.getData(datasourceRequest));
|
||||
} catch (Exception e) {
|
||||
}
|
||||
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) {
|
||||
|
||||
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) {
|
||||
|
||||
}
|
||||
|
||||
List<Map<String, Object>> jsonArray = new ArrayList<>();
|
||||
@ -315,6 +327,19 @@ public class DataSetTableService {
|
||||
datasourceRequest.setQuery(new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class).getSql());
|
||||
ResultSet dataResultSet = datasourceProvider.getDataResultSet(datasourceRequest);
|
||||
fields = datasourceProvider.fetchResultField(dataResultSet);
|
||||
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) {
|
||||
DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class);
|
||||
String path = dataTableInfoDTO.getData();
|
||||
File file = new File(path);
|
||||
// save field
|
||||
Map<String, Object> map = parseExcel(path.substring(path.lastIndexOf("/") + 1), new FileInputStream(file), false);
|
||||
fields = (List<TableFiled>) map.get("fields");
|
||||
List<Map<String, Object>> data = (List<Map<String, Object>>) map.get("data");
|
||||
// save data
|
||||
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) {
|
||||
// save field
|
||||
|
||||
// save data
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(fields)) {
|
||||
for (int i = 0; i < fields.size(); i++) {
|
||||
@ -324,7 +349,11 @@ public class DataSetTableService {
|
||||
datasetTableField.setOriginName(filed.getFieldName());
|
||||
datasetTableField.setName(filed.getRemarks());
|
||||
datasetTableField.setType(filed.getFieldType());
|
||||
datasetTableField.setDeType(transFieldType(ds.getType(), filed.getFieldType()));
|
||||
if (ObjectUtils.isEmpty(ds)) {
|
||||
datasetTableField.setDeType(transFieldType(filed.getFieldType()));
|
||||
} else {
|
||||
datasetTableField.setDeType(transFieldType(ds.getType(), filed.getFieldType()));
|
||||
}
|
||||
datasetTableField.setChecked(true);
|
||||
datasetTableField.setColumnIndex(i);
|
||||
datasetTableField.setLastSyncTime(syncTime);
|
||||
@ -345,6 +374,21 @@ public class DataSetTableService {
|
||||
}
|
||||
}
|
||||
|
||||
public Integer transFieldType(String field) {
|
||||
switch (field) {
|
||||
case "TEXT":
|
||||
return 0;
|
||||
case "TIME":
|
||||
return 1;
|
||||
case "INT":
|
||||
return 2;
|
||||
case "DOUBLE":
|
||||
return 3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public Integer transFieldType(String type, String field) {
|
||||
DatasourceTypes datasourceType = DatasourceTypes.valueOf(type);
|
||||
switch (datasourceType) {
|
||||
@ -455,20 +499,33 @@ public class DataSetTableService {
|
||||
|
||||
public Map<String, Object> excelSaveAndParse(MultipartFile file) throws Exception {
|
||||
String filename = file.getOriginalFilename();
|
||||
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
|
||||
// parse file
|
||||
Map<String, Object> fileMap = parseExcel(filename, file.getInputStream(), true);
|
||||
// save file
|
||||
String filePath = saveFile(file);
|
||||
Map<String, Object> map = new HashMap<>(fileMap);
|
||||
map.put("path", filePath);
|
||||
return map;
|
||||
}
|
||||
|
||||
private Map<String, Object> parseExcel(String filename, InputStream inputStream, boolean isPreview) throws Exception {
|
||||
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
|
||||
List<TableFiled> fields = new ArrayList<>();
|
||||
List<String[]> data = new ArrayList<>();
|
||||
List<Map<String, Object>> jsonArray = new ArrayList<>();
|
||||
|
||||
InputStream inputStream = file.getInputStream();
|
||||
if (StringUtils.equalsIgnoreCase(suffix, "xls")) {
|
||||
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
|
||||
HSSFSheet sheet0 = workbook.getSheetAt(0);
|
||||
if (sheet0.getNumMergedRegions() > 0) {
|
||||
throw new RuntimeException("Sheet have merged regions.");
|
||||
}
|
||||
int rows = Math.min(sheet0.getPhysicalNumberOfRows(), 100);
|
||||
int rows;
|
||||
if (isPreview) {
|
||||
rows = Math.min(sheet0.getPhysicalNumberOfRows(), 100);
|
||||
} else {
|
||||
rows = sheet0.getPhysicalNumberOfRows();
|
||||
}
|
||||
for (int i = 0; i < rows; i++) {
|
||||
HSSFRow row = sheet0.getRow(i);
|
||||
String[] r = new String[row.getPhysicalNumberOfCells()];
|
||||
@ -477,6 +534,7 @@ public class DataSetTableService {
|
||||
TableFiled tableFiled = new TableFiled();
|
||||
tableFiled.setFieldName(readCell(row.getCell(j)));
|
||||
tableFiled.setRemarks(readCell(row.getCell(j)));
|
||||
tableFiled.setFieldType("TEXT");
|
||||
fields.add(tableFiled);
|
||||
} else {
|
||||
r[j] = readCell(row.getCell(j));
|
||||
@ -492,7 +550,12 @@ public class DataSetTableService {
|
||||
if (sheet0.getNumMergedRegions() > 0) {
|
||||
throw new RuntimeException("Sheet have merged regions.");
|
||||
}
|
||||
int rows = Math.min(sheet0.getPhysicalNumberOfRows(), 100);
|
||||
int rows;
|
||||
if (isPreview) {
|
||||
rows = Math.min(sheet0.getPhysicalNumberOfRows(), 100);
|
||||
} else {
|
||||
rows = sheet0.getPhysicalNumberOfRows();
|
||||
}
|
||||
for (int i = 0; i < rows; i++) {
|
||||
XSSFRow row = sheet0.getRow(i);
|
||||
String[] r = new String[row.getPhysicalNumberOfCells()];
|
||||
@ -501,6 +564,7 @@ public class DataSetTableService {
|
||||
TableFiled tableFiled = new TableFiled();
|
||||
tableFiled.setFieldName(readCell(row.getCell(j)));
|
||||
tableFiled.setRemarks(readCell(row.getCell(j)));
|
||||
tableFiled.setFieldType("TEXT");
|
||||
fields.add(tableFiled);
|
||||
} else {
|
||||
r[j] = readCell(row.getCell(j));
|
||||
@ -518,13 +582,16 @@ public class DataSetTableService {
|
||||
TableFiled tableFiled = new TableFiled();
|
||||
tableFiled.setFieldName(s1);
|
||||
tableFiled.setRemarks(s1);
|
||||
tableFiled.setFieldType("TEXT");
|
||||
fields.add(tableFiled);
|
||||
}
|
||||
int num = 1;
|
||||
String line = null;
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (num > 100) {
|
||||
break;
|
||||
if (isPreview) {
|
||||
if (num > 100) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
data.add(line.split(","));
|
||||
num++;
|
||||
@ -546,7 +613,6 @@ public class DataSetTableService {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("fields", fields);
|
||||
map.put("data", jsonArray);
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
@ -568,4 +634,19 @@ public class DataSetTableService {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
private String saveFile(MultipartFile file) throws Exception {
|
||||
String filename = file.getOriginalFilename();
|
||||
File p = new File(path);
|
||||
if (!p.exists()) {
|
||||
p.mkdirs();
|
||||
}
|
||||
String filePath = path + AuthUtils.getUser().getUsername() + "/" + filename;
|
||||
File f = new File(filePath);
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(f);
|
||||
fileOutputStream.write(file.getBytes());
|
||||
fileOutputStream.flush();
|
||||
fileOutputStream.close();
|
||||
return filePath;
|
||||
}
|
||||
}
|
||||
|
@ -56,6 +56,9 @@ import org.pentaho.di.trans.TransHopMeta;
|
||||
import org.pentaho.di.trans.TransMeta;
|
||||
import org.pentaho.di.trans.step.StepMeta;
|
||||
import org.pentaho.di.trans.steps.tableinput.TableInputMeta;
|
||||
import org.pentaho.di.trans.steps.textfileoutput.TextFileField;
|
||||
import org.pentaho.di.trans.steps.textfileoutput.TextFileOutput;
|
||||
import org.pentaho.di.trans.steps.textfileoutput.TextFileOutputMeta;
|
||||
import org.pentaho.di.trans.steps.userdefinedjavaclass.InfoStepDefinition;
|
||||
import org.pentaho.di.trans.steps.userdefinedjavaclass.UserDefinedJavaClassDef;
|
||||
import org.pentaho.di.trans.steps.userdefinedjavaclass.UserDefinedJavaClassMeta;
|
||||
@ -105,6 +108,7 @@ public class ExtractDataService {
|
||||
private static String currentUpdateTime = "${__current_update_time__}";
|
||||
private static String dataease_column_family = "dataease";
|
||||
private static String root_path = "/opt/dataease/data/kettle/";
|
||||
private static String data_path = "/opt/dataease/data/db/";
|
||||
private static String hbase_conf_file = "/opt/dataease/conf/hbase-site.xml";
|
||||
private static String pentaho_mappings = "pentaho_mappings";
|
||||
|
||||
@ -129,7 +133,7 @@ public class ExtractDataService {
|
||||
DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog();
|
||||
UpdateType updateType = UpdateType.valueOf(type);
|
||||
try {
|
||||
Admin admin = getConnection().getAdmin();
|
||||
// Admin admin = getConnection().getAdmin();
|
||||
DatasetTable datasetTable = dataSetTableService.get(datasetTableId);
|
||||
Datasource datasource = datasourceMapper.selectByPrimaryKey(datasetTable.getDataSourceId());
|
||||
List<DatasetTableField> datasetTableFields = dataSetTableFieldsService.list(DatasetTableField.builder().tableId(datasetTable.getId()).build());
|
||||
@ -141,10 +145,10 @@ public class ExtractDataService {
|
||||
writeDatasetTableTaskLog(datasetTableTaskLog, datasetTableId, taskId);
|
||||
|
||||
//check pentaho_mappings table
|
||||
TableName pentaho_mappings = TableName.valueOf(this.pentaho_mappings);
|
||||
if (!admin.tableExists(pentaho_mappings)) {
|
||||
creatHaseTable(pentaho_mappings, admin, Arrays.asList("columns", "key"));
|
||||
}
|
||||
// TableName pentaho_mappings = TableName.valueOf(this.pentaho_mappings);
|
||||
// if (!admin.tableExists(pentaho_mappings)) {
|
||||
// creatHaseTable(pentaho_mappings, admin, Arrays.asList("columns", "key"));
|
||||
// }
|
||||
|
||||
//check pentaho files
|
||||
if (!isExitFile("job_" + datasetTableId + ".kjb") || !isExitFile("trans_" + datasetTableId + ".ktr")) {
|
||||
@ -152,25 +156,25 @@ public class ExtractDataService {
|
||||
generateJobFile("all_scope", datasetTable);
|
||||
}
|
||||
|
||||
if (!admin.tableExists(hbaseTable)) {
|
||||
creatHaseTable(hbaseTable, admin, Arrays.asList(dataease_column_family));
|
||||
}
|
||||
admin.disableTable(hbaseTable);
|
||||
admin.truncateTable(hbaseTable, true);
|
||||
// if (!admin.tableExists(hbaseTable)) {
|
||||
// creatHaseTable(hbaseTable, admin, Arrays.asList(dataease_column_family));
|
||||
// }
|
||||
// admin.disableTable(hbaseTable);
|
||||
// admin.truncateTable(hbaseTable, true);
|
||||
|
||||
extractData(datasetTable, "all_scope");
|
||||
// after sync complete,read data to cache from HBase
|
||||
sparkCalc.getHBaseDataAndCache(datasetTableId, dataSetTableFieldsService.getFieldsByTableId(datasetTableId));
|
||||
// sparkCalc.getHBaseDataAndCache(datasetTableId, dataSetTableFieldsService.getFieldsByTableId(datasetTableId));
|
||||
datasetTableTaskLog.setStatus(JobStatus.Completed.name());
|
||||
datasetTableTaskLog.setEndTime(System.currentTimeMillis());
|
||||
dataSetTableTaskLogService.save(datasetTableTaskLog);
|
||||
break;
|
||||
case add_scope:
|
||||
// 增量更新
|
||||
if (!admin.tableExists(hbaseTable)) {
|
||||
LogUtil.error("TableName error, dataaset: " + datasetTableId);
|
||||
return;
|
||||
}
|
||||
// if (!admin.tableExists(hbaseTable)) {
|
||||
// LogUtil.error("TableName error, dataaset: " + datasetTableId);
|
||||
// return;
|
||||
// }
|
||||
DatasetTableIncrementalConfig datasetTableIncrementalConfig = dataSetTableService.incrementalConfig(datasetTableId);
|
||||
if (datasetTableIncrementalConfig == null || StringUtils.isEmpty(datasetTableIncrementalConfig.getTableId())) {
|
||||
return;
|
||||
@ -209,7 +213,7 @@ public class ExtractDataService {
|
||||
extractData(datasetTable, "incremental_delete");
|
||||
}
|
||||
// after sync complete,read data to cache from HBase
|
||||
sparkCalc.getHBaseDataAndCache(datasetTableId, dataSetTableFieldsService.getFieldsByTableId(datasetTableId));
|
||||
// sparkCalc.getHBaseDataAndCache(datasetTableId, dataSetTableFieldsService.getFieldsByTableId(datasetTableId));
|
||||
datasetTableTaskLog.setStatus(JobStatus.Completed.name());
|
||||
datasetTableTaskLog.setEndTime(System.currentTimeMillis());
|
||||
dataSetTableTaskLogService.save(datasetTableTaskLog);
|
||||
@ -239,17 +243,17 @@ public class ExtractDataService {
|
||||
dataSetTableTaskLogService.save(datasetTableTaskLog);
|
||||
}
|
||||
|
||||
private void creatHaseTable(TableName tableName, Admin admin, List<String> columnFamily) throws Exception {
|
||||
TableDescriptorBuilder descBuilder = TableDescriptorBuilder.newBuilder(tableName);
|
||||
Collection<ColumnFamilyDescriptor> families = new ArrayList<>();
|
||||
for (String s : columnFamily) {
|
||||
ColumnFamilyDescriptor hcd = ColumnFamilyDescriptorBuilder.of(s);
|
||||
families.add(hcd);
|
||||
}
|
||||
descBuilder.setColumnFamilies(families);
|
||||
TableDescriptor desc = descBuilder.build();
|
||||
admin.createTable(desc);
|
||||
}
|
||||
// private void creatHaseTable(TableName tableName, Admin admin, List<String> columnFamily) throws Exception {
|
||||
// TableDescriptorBuilder descBuilder = TableDescriptorBuilder.newBuilder(tableName);
|
||||
// Collection<ColumnFamilyDescriptor> families = new ArrayList<>();
|
||||
// for (String s : columnFamily) {
|
||||
// ColumnFamilyDescriptor hcd = ColumnFamilyDescriptorBuilder.of(s);
|
||||
// families.add(hcd);
|
||||
// }
|
||||
// descBuilder.setColumnFamilies(families);
|
||||
// TableDescriptor desc = descBuilder.build();
|
||||
// admin.createTable(desc);
|
||||
// }
|
||||
|
||||
private void extractData(DatasetTable datasetTable, String extractType) throws Exception {
|
||||
KettleFileRepository repository = CommonBeanFactory.getBean(KettleFileRepository.class);
|
||||
@ -285,13 +289,13 @@ public class ExtractDataService {
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized Connection getConnection() throws Exception {
|
||||
if (connection == null || connection.isClosed()) {
|
||||
Configuration cfg = CommonBeanFactory.getBean(Configuration.class);
|
||||
connection = ConnectionFactory.createConnection(cfg, pool);
|
||||
}
|
||||
return connection;
|
||||
}
|
||||
// private synchronized Connection getConnection() throws Exception {
|
||||
// if (connection == null || connection.isClosed()) {
|
||||
// Configuration cfg = CommonBeanFactory.getBean(Configuration.class);
|
||||
// connection = ConnectionFactory.createConnection(cfg, pool);
|
||||
// }
|
||||
// return connection;
|
||||
// }
|
||||
|
||||
private boolean isExitFile(String fileName) {
|
||||
File file = new File(root_path + fileName);
|
||||
@ -380,6 +384,15 @@ public class ExtractDataService {
|
||||
switch (extractType) {
|
||||
case "all_scope":
|
||||
transName = "trans_" + datasetTable.getId();
|
||||
datasetTableFields.sort((o1, o2) -> {
|
||||
if (o1.getOriginName() == null) {
|
||||
return -1;
|
||||
}
|
||||
if (o2.getOriginName() == null) {
|
||||
return 1;
|
||||
}
|
||||
return o1.getOriginName().compareTo(o2.getOriginName());
|
||||
});
|
||||
selectSQL = dataSetTableService.createQuerySQL(datasource.getType(), table, datasetTableFields.stream().map(DatasetTableField::getOriginName).toArray(String[]::new));
|
||||
break;
|
||||
case "incremental_add":
|
||||
@ -422,70 +435,90 @@ public class ExtractDataService {
|
||||
fromStep.setLocation(100, 100);
|
||||
transMeta.addStep(fromStep);
|
||||
|
||||
//第二个 (User defined Java class)
|
||||
UserDefinedJavaClassMeta userDefinedJavaClassMeta = new UserDefinedJavaClassMeta();
|
||||
List<UserDefinedJavaClassMeta.FieldInfo> fields = new ArrayList<>();
|
||||
UserDefinedJavaClassMeta.FieldInfo fieldInfo = new UserDefinedJavaClassMeta.FieldInfo("uuid", ValueMetaInterface.TYPE_STRING, -1, -1);
|
||||
fields.add(fieldInfo);
|
||||
userDefinedJavaClassMeta.setFieldInfo(fields);
|
||||
List<UserDefinedJavaClassDef> definitions = new ArrayList<UserDefinedJavaClassDef>();
|
||||
UserDefinedJavaClassDef userDefinedJavaClassDef = new UserDefinedJavaClassDef(UserDefinedJavaClassDef.ClassType.TRANSFORM_CLASS, "Processor", code);
|
||||
userDefinedJavaClassDef.setActive(true);
|
||||
definitions.add(userDefinedJavaClassDef);
|
||||
userDefinedJavaClassMeta.replaceDefinitions(definitions);
|
||||
//第二个 (TextFileOutput)
|
||||
TextFileOutputMeta textFileOutputMeta = new TextFileOutputMeta();
|
||||
textFileOutputMeta.setFilename(data_path + datasetTable.getId());
|
||||
textFileOutputMeta.setExtension("txt");
|
||||
textFileOutputMeta.setSeparator(";");
|
||||
textFileOutputMeta.setFileCompression("None");
|
||||
textFileOutputMeta.setEnclosure("\"");
|
||||
textFileOutputMeta.setEncoding("UTF-8");
|
||||
TextFileField[] outputFields = new TextFileField[1];
|
||||
outputFields[0] = new TextFileField();
|
||||
textFileOutputMeta.setOutputFields(outputFields);
|
||||
|
||||
StepMeta userDefinedJavaClassStep = new StepMeta("UserDefinedJavaClass", "UserDefinedJavaClass", userDefinedJavaClassMeta);
|
||||
userDefinedJavaClassStep.setLocation(300, 100);
|
||||
userDefinedJavaClassStep.setDraw(true);
|
||||
transMeta.addStep(userDefinedJavaClassStep);
|
||||
|
||||
//第三个 (HBaseOutputMeta)
|
||||
NamedClusterService namedClusterService = new NamedClusterManager();
|
||||
NamedCluster clusterTemplate = new NamedClusterImpl();
|
||||
clusterTemplate.setName("hadoop");
|
||||
clusterTemplate.setZooKeeperHost(zkHost);
|
||||
clusterTemplate.setZooKeeperPort(zkPort);
|
||||
clusterTemplate.setStorageScheme("HDFS");
|
||||
namedClusterService.setClusterTemplate(clusterTemplate);
|
||||
|
||||
List<ClusterInitializerProvider> providers = new ArrayList<>();
|
||||
ClusterInitializer clusterInitializer = new ClusterInitializerImpl(providers);
|
||||
NamedClusterServiceLocator namedClusterServiceLocator = new NamedClusterServiceLocatorImpl(clusterInitializer);
|
||||
|
||||
List<RuntimeTestActionHandler> runtimeTestActionHandlers = new ArrayList<>();
|
||||
RuntimeTestActionHandler defaultHandler = null;
|
||||
|
||||
RuntimeTestActionService runtimeTestActionService = new RuntimeTestActionServiceImpl(runtimeTestActionHandlers, defaultHandler);
|
||||
RuntimeTester runtimeTester = new RuntimeTesterImpl(new ArrayList<>(Arrays.asList(mock(RuntimeTest.class))), mock(ExecutorService.class), "modules");
|
||||
|
||||
Put put = new Put((datasetTable.getId() + "," + "target_mapping").getBytes());
|
||||
for (DatasetTableField datasetTableField : datasetTableFields) {
|
||||
put.addColumn("columns".getBytes(), (dataease_column_family + "," + datasetTableField.getOriginName() + "," + datasetTableField.getOriginName()).getBytes(), transToColumnType(datasetTableField.getDeType()).getBytes());
|
||||
}
|
||||
put.addColumn("key".getBytes(), "uuid".getBytes(), "String".getBytes());
|
||||
TableName pentaho_mappings = TableName.valueOf(this.pentaho_mappings);
|
||||
Table tab = getConnection().getTable(pentaho_mappings);
|
||||
tab.put(put);
|
||||
|
||||
HBaseOutputMeta hBaseOutputMeta = new HBaseOutputMeta(namedClusterService, namedClusterServiceLocator, runtimeTestActionService, runtimeTester);
|
||||
hBaseOutputMeta.setTargetTableName(datasetTable.getId());
|
||||
hBaseOutputMeta.setTargetMappingName("target_mapping");
|
||||
hBaseOutputMeta.setNamedCluster(clusterTemplate);
|
||||
hBaseOutputMeta.setCoreConfigURL(hbase_conf_file);
|
||||
hBaseOutputMeta.setDisableWriteToWAL(true);
|
||||
hBaseOutputMeta.setWriteBufferSize("31457280"); //30M
|
||||
if (extractType.equalsIgnoreCase("incremental_delete")) {
|
||||
hBaseOutputMeta.setDeleteRowKey(true);
|
||||
}
|
||||
StepMeta tostep = new StepMeta("HBaseOutput", "HBaseOutput", hBaseOutputMeta);
|
||||
StepMeta tostep = new StepMeta("TextFileOutput", "TextFileOutput", textFileOutputMeta);
|
||||
tostep.setLocation(600, 100);
|
||||
|
||||
tostep.setDraw(true);
|
||||
transMeta.addStep(tostep);
|
||||
TransHopMeta hi1 = new TransHopMeta(fromStep, userDefinedJavaClassStep);
|
||||
TransHopMeta hi2 = new TransHopMeta(userDefinedJavaClassStep, tostep);
|
||||
TransHopMeta hi1 = new TransHopMeta(fromStep, tostep);
|
||||
transMeta.addTransHop(hi1);
|
||||
transMeta.addTransHop(hi2);
|
||||
|
||||
|
||||
// //第二个 (User defined Java class)
|
||||
// UserDefinedJavaClassMeta userDefinedJavaClassMeta = new UserDefinedJavaClassMeta();
|
||||
// List<UserDefinedJavaClassMeta.FieldInfo> fields = new ArrayList<>();
|
||||
// UserDefinedJavaClassMeta.FieldInfo fieldInfo = new UserDefinedJavaClassMeta.FieldInfo("uuid", ValueMetaInterface.TYPE_STRING, -1, -1);
|
||||
// fields.add(fieldInfo);
|
||||
// userDefinedJavaClassMeta.setFieldInfo(fields);
|
||||
// List<UserDefinedJavaClassDef> definitions = new ArrayList<UserDefinedJavaClassDef>();
|
||||
// UserDefinedJavaClassDef userDefinedJavaClassDef = new UserDefinedJavaClassDef(UserDefinedJavaClassDef.ClassType.TRANSFORM_CLASS, "Processor", code);
|
||||
// userDefinedJavaClassDef.setActive(true);
|
||||
// definitions.add(userDefinedJavaClassDef);
|
||||
// userDefinedJavaClassMeta.replaceDefinitions(definitions);
|
||||
//
|
||||
// StepMeta userDefinedJavaClassStep = new StepMeta("UserDefinedJavaClass", "UserDefinedJavaClass", userDefinedJavaClassMeta);
|
||||
// userDefinedJavaClassStep.setLocation(300, 100);
|
||||
// userDefinedJavaClassStep.setDraw(true);
|
||||
// transMeta.addStep(userDefinedJavaClassStep);
|
||||
//
|
||||
// //第三个 (HBaseOutputMeta)
|
||||
// NamedClusterService namedClusterService = new NamedClusterManager();
|
||||
// NamedCluster clusterTemplate = new NamedClusterImpl();
|
||||
// clusterTemplate.setName("hadoop");
|
||||
// clusterTemplate.setZooKeeperHost(zkHost);
|
||||
// clusterTemplate.setZooKeeperPort(zkPort);
|
||||
// clusterTemplate.setStorageScheme("HDFS");
|
||||
// namedClusterService.setClusterTemplate(clusterTemplate);
|
||||
//
|
||||
// List<ClusterInitializerProvider> providers = new ArrayList<>();
|
||||
// ClusterInitializer clusterInitializer = new ClusterInitializerImpl(providers);
|
||||
// NamedClusterServiceLocator namedClusterServiceLocator = new NamedClusterServiceLocatorImpl(clusterInitializer);
|
||||
//
|
||||
// List<RuntimeTestActionHandler> runtimeTestActionHandlers = new ArrayList<>();
|
||||
// RuntimeTestActionHandler defaultHandler = null;
|
||||
//
|
||||
// RuntimeTestActionService runtimeTestActionService = new RuntimeTestActionServiceImpl(runtimeTestActionHandlers, defaultHandler);
|
||||
// RuntimeTester runtimeTester = new RuntimeTesterImpl(new ArrayList<>(Arrays.asList(mock(RuntimeTest.class))), mock(ExecutorService.class), "modules");
|
||||
//
|
||||
// Put put = new Put((datasetTable.getId() + "," + "target_mapping").getBytes());
|
||||
// for (DatasetTableField datasetTableField : datasetTableFields) {
|
||||
// put.addColumn("columns".getBytes(), (dataease_column_family + "," + datasetTableField.getOriginName() + "," + datasetTableField.getOriginName()).getBytes(), transToColumnType(datasetTableField.getDeType()).getBytes());
|
||||
// }
|
||||
// put.addColumn("key".getBytes(), "uuid".getBytes(), "String".getBytes());
|
||||
// TableName pentaho_mappings = TableName.valueOf(this.pentaho_mappings);
|
||||
// Table tab = getConnection().getTable(pentaho_mappings);
|
||||
// tab.put(put);
|
||||
//
|
||||
// HBaseOutputMeta hBaseOutputMeta = new HBaseOutputMeta(namedClusterService, namedClusterServiceLocator, runtimeTestActionService, runtimeTester);
|
||||
// hBaseOutputMeta.setTargetTableName(datasetTable.getId());
|
||||
// hBaseOutputMeta.setTargetMappingName("target_mapping");
|
||||
// hBaseOutputMeta.setNamedCluster(clusterTemplate);
|
||||
// hBaseOutputMeta.setCoreConfigURL(hbase_conf_file);
|
||||
// hBaseOutputMeta.setDisableWriteToWAL(true);
|
||||
// hBaseOutputMeta.setWriteBufferSize("31457280"); //30M
|
||||
// if (extractType.equalsIgnoreCase("incremental_delete")) {
|
||||
// hBaseOutputMeta.setDeleteRowKey(true);
|
||||
// }
|
||||
// StepMeta tostep = new StepMeta("HBaseOutput", "HBaseOutput", hBaseOutputMeta);
|
||||
// tostep.setLocation(600, 100);
|
||||
//
|
||||
// tostep.setDraw(true);
|
||||
// transMeta.addStep(tostep);
|
||||
// TransHopMeta hi1 = new TransHopMeta(fromStep, userDefinedJavaClassStep);
|
||||
// TransHopMeta hi2 = new TransHopMeta(userDefinedJavaClassStep, tostep);
|
||||
// transMeta.addTransHop(hi1);
|
||||
// transMeta.addTransHop(hi2);
|
||||
|
||||
String transXml = transMeta.getXML();
|
||||
File file = new File(root_path + transName + ".ktr");
|
||||
|
@ -41,6 +41,7 @@ import java.util.List;
|
||||
@Service
|
||||
public class SparkCalc {
|
||||
private static String column_family = "dataease";
|
||||
private static String data_path = "/opt/dataease/data/db/";
|
||||
@Resource
|
||||
private Environment env; // 保存了配置文件的信息
|
||||
|
||||
@ -54,12 +55,13 @@ public class SparkCalc {
|
||||
sqlContext.setConf("spark.sql.shuffle.partitions", env.getProperty("spark.sql.shuffle.partitions", "1"));
|
||||
sqlContext.setConf("spark.default.parallelism", env.getProperty("spark.default.parallelism", "1"));
|
||||
|
||||
Dataset<Row> dataFrame = CacheUtil.getInstance().getCacheData(hTable);
|
||||
if (ObjectUtils.isEmpty(dataFrame)) {
|
||||
dataFrame = getHBaseDataAndCache(sparkContext, sqlContext, hTable, fields);
|
||||
}
|
||||
Dataset<Row> dataFrame = getData(sparkContext, sqlContext, hTable, fields);
|
||||
// Dataset<Row> dataFrame = CacheUtil.getInstance().getCacheData(hTable);
|
||||
// if (ObjectUtils.isEmpty(dataFrame)) {
|
||||
// dataFrame = getData(sparkContext, sqlContext, hTable, fields);
|
||||
// }
|
||||
|
||||
dataFrame.createOrReplaceTempView(tmpTable);
|
||||
dataFrame.createOrReplaceTempView( tmpTable);
|
||||
Dataset<Row> sql = sqlContext.sql(getSQL(xAxis, yAxis, tmpTable, requestList));
|
||||
// transform
|
||||
List<String[]> data = new ArrayList<>();
|
||||
@ -86,6 +88,69 @@ public class SparkCalc {
|
||||
return getHBaseDataAndCache(sparkContext, sqlContext, hTable, fields);
|
||||
}
|
||||
|
||||
public Dataset<Row> getData(JavaSparkContext sparkContext, SQLContext sqlContext, String tableId, List<DatasetTableField> fields) throws Exception {
|
||||
fields.sort((o1, o2) -> {
|
||||
if (o1.getOriginName() == null) {
|
||||
return -1;
|
||||
}
|
||||
if (o2.getOriginName() == null) {
|
||||
return 1;
|
||||
}
|
||||
return o1.getOriginName().compareTo(o2.getOriginName());
|
||||
});
|
||||
|
||||
JavaRDD<String> pairRDD = sparkContext.textFile(data_path + tableId + ".txt");
|
||||
|
||||
JavaRDD<Row> rdd = pairRDD.mapPartitions( (FlatMapFunction<java.util.Iterator<String>, Row>) tuple2Iterator -> {
|
||||
List<Row> iterator = new ArrayList<>();
|
||||
while (tuple2Iterator.hasNext()) {
|
||||
String[] items = tuple2Iterator.next().split(";");
|
||||
List<Object> list = new ArrayList<>();
|
||||
for(int i=0; i<items.length; i++){
|
||||
String l = items[i];
|
||||
DatasetTableField x = fields.get(i);
|
||||
if (x.getDeType() == 0 || x.getDeType() == 1) {
|
||||
list.add(l);
|
||||
} else if (x.getDeType() == 2) {
|
||||
if (StringUtils.isEmpty(l)) {
|
||||
l = "0";
|
||||
}
|
||||
if (StringUtils.equalsIgnoreCase(l,"Y")) {
|
||||
l = "1";
|
||||
}
|
||||
if (StringUtils.equalsIgnoreCase(l,"N")) {
|
||||
l = "0";
|
||||
}
|
||||
list.add(Long.valueOf(l));
|
||||
} else if (x.getDeType() == 3) {
|
||||
if (StringUtils.isEmpty(l)) {
|
||||
l = "0.0";
|
||||
}
|
||||
list.add(Double.valueOf(l));
|
||||
}
|
||||
}
|
||||
iterator.add(RowFactory.create(list.toArray()));
|
||||
}
|
||||
return iterator.iterator();
|
||||
});
|
||||
|
||||
List<StructField> structFields = new ArrayList<>();
|
||||
// struct顺序要与rdd顺序一致
|
||||
fields.forEach(x -> {
|
||||
if (x.getDeType() == 0 || x.getDeType() == 1) {
|
||||
structFields.add(DataTypes.createStructField(x.getOriginName(), DataTypes.StringType, true));
|
||||
} else if (x.getDeType() == 2) {
|
||||
structFields.add(DataTypes.createStructField(x.getOriginName(), DataTypes.LongType, true));
|
||||
} else if (x.getDeType() == 3) {
|
||||
structFields.add(DataTypes.createStructField(x.getOriginName(), DataTypes.DoubleType, true));
|
||||
}
|
||||
});
|
||||
StructType structType = DataTypes.createStructType(structFields);
|
||||
|
||||
Dataset<Row> dataFrame = sqlContext.createDataFrame(rdd, structType);
|
||||
return dataFrame;
|
||||
}
|
||||
|
||||
public Dataset<Row> getHBaseDataAndCache(JavaSparkContext sparkContext, SQLContext sqlContext, String hTable, List<DatasetTableField> fields) throws Exception {
|
||||
Scan scan = new Scan();
|
||||
scan.addFamily(Bytes.toBytes(column_family));
|
||||
@ -145,7 +210,7 @@ public class SparkCalc {
|
||||
StructType structType = DataTypes.createStructType(structFields);
|
||||
|
||||
Dataset<Row> dataFrame = sqlContext.createDataFrame(rdd, structType).persist(StorageLevel.MEMORY_AND_DISK_SER());
|
||||
CacheUtil.getInstance().addCacheData(hTable, dataFrame);
|
||||
// CacheUtil.getInstance().addCacheData(hTable, dataFrame);
|
||||
dataFrame.count();
|
||||
return dataFrame;
|
||||
}
|
||||
|
@ -60,6 +60,8 @@ logging.level.org.springframework.web=trace
|
||||
logging.level.org.springframework.boot.web=trace
|
||||
spring.mvc.log-request-details=true
|
||||
pagehelper.PageRowBounds=true
|
||||
#excel等用户上传文件路径
|
||||
upload.file.path=/opt/dataease/data/upload/
|
||||
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS `dataset_table`
|
||||
`id` varchar(50) NOT NULL COMMENT 'ID',
|
||||
`name` varchar(64) NOT NULL COMMENT '表名称',
|
||||
`scene_id` varchar(50) NOT NULL COMMENT '场景ID',
|
||||
`data_source_id` varchar(50) NOT NULL COMMENT '数据源ID',
|
||||
`data_source_id` varchar(50) COMMENT '数据源ID',
|
||||
`type` varchar(50) COMMENT 'db,sql,excel,custom',
|
||||
`mode` int(10) DEFAULT 0 COMMENT '连接模式:0-直连,1-定时同步',
|
||||
`info` longtext COMMENT '表原始信息',
|
||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 5.0 KiB |
27
frontend/src/api/panel/enshrine.js
Normal file
@ -0,0 +1,27 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function saveEnshrine(panelGroupId) {
|
||||
return request({
|
||||
url: '/api/store/' + panelGroupId,
|
||||
method: 'post',
|
||||
loading: true
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteEnshrine(id) {
|
||||
return request({
|
||||
url: '/api/store/remove/' + id,
|
||||
method: 'post',
|
||||
loading: true
|
||||
})
|
||||
}
|
||||
|
||||
export function enshrineList(data) {
|
||||
return request({
|
||||
url: '/api/store/list',
|
||||
method: 'post',
|
||||
loading: true,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
BIN
frontend/src/assets/DataEase-black.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
frontend/src/assets/DataEase-white.png
Normal file
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 355 KiB After Width: | Height: | Size: 675 KiB |
@ -1 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574649229600" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3752" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M942 191.9C939.8 128.9 748.1 78 512 78S84.2 128.9 82 191.9V831c0 63.5 192.5 115 430 115s430-51.5 430-115V191.9z m-56.7 393.8c-4.6 3.3-11.6 7.4-21.9 12.2-21.3 9.8-50.5 19.1-84.4 26.8-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 0.1-0.1 0.2-0.1 0.3-0.2h-7v-123c72.2 36.4 215.3 61.1 380 61.1s307.8-24.8 380-61.1v122.9h-7l0.3 0.3z m0-177c-4.6 3.3-11.6 7.4-21.9 12.2-21.3 9.8-50.5 19.1-84.4 26.8-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 0.1-0.1 0.2-0.1 0.3-0.2h-7V246.9c72.2 36.4 215.3 61.1 380 61.1s307.8-24.8 380-61.1v161.6h-7c0.1 0 0.2 0.1 0.3 0.2zM160.7 180.8C182 171 211.2 161.7 245 154c74-16.8 168.8-26 267-26s193 9.2 267 26c33.9 7.7 63.1 16.9 84.4 26.8 10.3 4.8 17.3 8.9 21.9 12.2-4.6 3.3-11.6 7.4-21.9 12.2C842 215 812.8 224.3 779 232c-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 4.7-3.3 11.7-7.4 22-12.2zM885.3 831c-4.6 3.3-11.6 7.4-21.9 12.2C842 853 812.8 862.3 779 870c-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 0.1-0.1 0.2-0.1 0.3-0.2h-7V639.5c72.2 36.4 215.3 61.1 380 61.1s307.8-24.8 380-61.1v191.3h-7c0.1 0.1 0.2 0.1 0.3 0.2z" fill="#cdcdcd" p-id="3753"></path></svg>
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574649229600" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3752" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M942 191.9C939.8 128.9 748.1 78 512 78S84.2 128.9 82 191.9V831c0 63.5 192.5 115 430 115s430-51.5 430-115V191.9z m-56.7 393.8c-4.6 3.3-11.6 7.4-21.9 12.2-21.3 9.8-50.5 19.1-84.4 26.8-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 0.1-0.1 0.2-0.1 0.3-0.2h-7v-123c72.2 36.4 215.3 61.1 380 61.1s307.8-24.8 380-61.1v122.9h-7l0.3 0.3z m0-177c-4.6 3.3-11.6 7.4-21.9 12.2-21.3 9.8-50.5 19.1-84.4 26.8-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 0.1-0.1 0.2-0.1 0.3-0.2h-7V246.9c72.2 36.4 215.3 61.1 380 61.1s307.8-24.8 380-61.1v161.6h-7c0.1 0 0.2 0.1 0.3 0.2zM160.7 180.8C182 171 211.2 161.7 245 154c74-16.8 168.8-26 267-26s193 9.2 267 26c33.9 7.7 63.1 16.9 84.4 26.8 10.3 4.8 17.3 8.9 21.9 12.2-4.6 3.3-11.6 7.4-21.9 12.2C842 215 812.8 224.3 779 232c-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 4.7-3.3 11.7-7.4 22-12.2zM885.3 831c-4.6 3.3-11.6 7.4-21.9 12.2C842 853 812.8 862.3 779 870c-74 16.8-168.8 26-267 26s-193-9.2-267-26c-33.9-7.7-63.1-16.9-84.4-26.8-10.3-4.8-17.3-8.9-21.9-12.2 0.1-0.1 0.2-0.1 0.3-0.2h-7V639.5c72.2 36.4 215.3 61.1 380 61.1s307.8-24.8 380-61.1v191.3h-7c0.1 0.1 0.2 0.1 0.3 0.2z" p-id="3753"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="1799" t="1553478255619" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path fill="#bfbfbf" d="M329.285097 317.714062l-8.422833 4.428869c-8.78099 4.584412-13.528108 14.84715-11.923564 24.415063 1.644453 4.909823 3.491521 9.864672 5.492084 14.747889 2.030239 4.854565 4.230348 9.652847 6.53688 14.293541 5.621021 7.891737 16.246009 11.824303 25.699312 8.858762l9.041934-2.868327c14.741749-3.860934 31.115672-0.056282 42.62582 11.512195 11.549034 11.526521 15.374152 27.863604 11.549034 42.570561l-2.882654 9.126868c-2.958378 9.438976 0.938372 20.042475 8.830109 25.706475 4.634554 2.328022 9.403161 4.52813 14.323217 6.529717 4.876054 2.043542 9.80839 3.846608 14.739702 5.478781 9.538237 1.603521 19.87363-3.123131 24.414039-11.910261l4.402263-8.388041c7.67889-13.144368 21.915126-22.002107 38.267559-22.002107 16.338107 0 30.547737 8.829086 38.255279 21.931498l4.41352 8.459672c4.584412 8.78713 14.84715 13.513782 24.414039 11.910261 4.91187-1.632173 9.851369-3.462868 14.734586-5.478781 4.882194-2.030239 9.66615-4.201695 14.322194-6.529717 7.891737-5.622044 11.809977-16.253172 8.843412-25.706475l-2.852978-9.041934c-3.859911-14.733563-0.069585-31.085996 11.484565-42.655496 11.55415-11.525498 27.878954-15.372106 42.599214-11.512195l9.097192 2.88163c9.426697 2.952238 20.044522-0.937348 25.693172-8.829086 2.313695-4.656043 4.527107-9.411347 6.54302-14.322194 2.029216-4.883217 3.847631-9.80839 5.495154-14.748912 1.616824-9.581216-3.108804-19.843954-11.911284-24.429389l-8.402367-4.400217c-13.132088-7.665587-21.98778-21.901823-21.98778-38.255279 0-16.32378 8.830109-30.589692 21.974477-38.268582l8.416693-4.443196c8.80248-4.571109 13.528108-14.832823 11.924587-24.400736-1.6465-4.910846-3.479241-9.850345-5.493108-14.733563-2.031263-4.868891-4.202719-9.680477-6.529717-14.308891-5.622044-7.890714-16.253172-11.82328-25.708522-8.842389l-9.05626 2.852978c-14.747889 3.861958-31.071669 0.057305-42.654472-11.512195-11.55415-11.55415-15.344476-27.877931-11.484565-42.612517l2.852978-9.05626c2.966565-9.44-0.951675-20.043499-8.856715-25.692149-4.641717-2.328022-9.397021-4.542456-14.307867-6.544043-4.883217-2.029216-9.82374-3.846608-14.734586-5.465478-9.567913-1.632173-19.872606 3.123131-24.414039 11.895935l-4.400217 8.389064c-7.67889 13.174044-21.931498 22.002107-38.268582 22.002107-16.309454 0-30.576389-8.828063-38.267559-22.002107l-4.387937-8.389064c-4.554736-8.771781-14.8318-13.528108-24.405853-11.895935-4.954849 1.604544-9.873882 3.435239-14.763239 5.4225-4.883217 2.044566-9.688663 4.217045-14.323217 6.545066-7.891737 5.649674-11.808954 16.266475-8.830109 25.735128l2.826372 9.05626c3.882424 14.762215 0.057305 31.085996-11.491729 42.612517-11.510148 11.5695-27.849278 15.373129-42.611493 11.526521l-9.070586-2.867304c-9.44-2.980891-20.063965 0.951675-25.686009 8.842389-2.342348 4.628414-4.52813 9.44-6.53688 14.308891-2.036379 4.882194-3.847631 9.822716-5.492084 14.733563-1.603521 9.581216 3.142573 19.85828 11.923564 24.443715l8.402367 4.400217c13.156648 7.67889 21.986757 21.944801 21.986757 38.268582C351.251388 295.79689 342.421278 310.019823 329.285097 317.714062zM511.977999 171.706687c59.532885 0 107.795075 48.275493 107.795075 107.779725 0 59.490929-48.26219 107.752096-107.795075 107.752096-59.533908 0-107.752096-48.26219-107.752096-107.752096C404.226926 219.98218 452.445114 171.706687 511.977999 171.706687z" p-id="1800"/><path fill="#bfbfbf" d="M924.647713 689.174212 798.570249 689.174212 798.570249 581.650313c0-26.387997-21.476127-47.850821-47.864124-47.850821L276.2543 533.799492c-26.386974 0-47.851844 21.462824-47.851844 47.850821l0 107.523899L99.345124 689.174212c-20.419052 0-36.95568 16.550954-36.95568 36.948517l0 184.771237c0 20.399609 16.536628 36.962843 36.95568 36.962843l273.965675 0c20.397562 0 36.947494-16.564257 36.947494-36.962843L410.258293 726.122729c0-20.398586-16.550954-36.948517-36.947494-36.948517l-123.103736 0L250.207064 581.650313c0-14.366196 11.68104-26.047236 26.047236-26.047236l474.451826 0c14.364149 0 26.062586 11.68104 26.062586 26.047236l0 107.523899L650.689201 689.174212c-20.412912 0-36.962843 16.550954-36.962843 36.948517l0 184.771237c0 20.399609 16.549931 36.962843 36.962843 36.962843l273.958512 0c20.397562 0 36.96182-16.564257 36.96182-36.962843L961.609533 726.122729C961.609533 705.725166 945.044252 689.174212 924.647713 689.174212z" p-id="1801"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="1799" t="1553478255619" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path d="M329.285097 317.714062l-8.422833 4.428869c-8.78099 4.584412-13.528108 14.84715-11.923564 24.415063 1.644453 4.909823 3.491521 9.864672 5.492084 14.747889 2.030239 4.854565 4.230348 9.652847 6.53688 14.293541 5.621021 7.891737 16.246009 11.824303 25.699312 8.858762l9.041934-2.868327c14.741749-3.860934 31.115672-0.056282 42.62582 11.512195 11.549034 11.526521 15.374152 27.863604 11.549034 42.570561l-2.882654 9.126868c-2.958378 9.438976 0.938372 20.042475 8.830109 25.706475 4.634554 2.328022 9.403161 4.52813 14.323217 6.529717 4.876054 2.043542 9.80839 3.846608 14.739702 5.478781 9.538237 1.603521 19.87363-3.123131 24.414039-11.910261l4.402263-8.388041c7.67889-13.144368 21.915126-22.002107 38.267559-22.002107 16.338107 0 30.547737 8.829086 38.255279 21.931498l4.41352 8.459672c4.584412 8.78713 14.84715 13.513782 24.414039 11.910261 4.91187-1.632173 9.851369-3.462868 14.734586-5.478781 4.882194-2.030239 9.66615-4.201695 14.322194-6.529717 7.891737-5.622044 11.809977-16.253172 8.843412-25.706475l-2.852978-9.041934c-3.859911-14.733563-0.069585-31.085996 11.484565-42.655496 11.55415-11.525498 27.878954-15.372106 42.599214-11.512195l9.097192 2.88163c9.426697 2.952238 20.044522-0.937348 25.693172-8.829086 2.313695-4.656043 4.527107-9.411347 6.54302-14.322194 2.029216-4.883217 3.847631-9.80839 5.495154-14.748912 1.616824-9.581216-3.108804-19.843954-11.911284-24.429389l-8.402367-4.400217c-13.132088-7.665587-21.98778-21.901823-21.98778-38.255279 0-16.32378 8.830109-30.589692 21.974477-38.268582l8.416693-4.443196c8.80248-4.571109 13.528108-14.832823 11.924587-24.400736-1.6465-4.910846-3.479241-9.850345-5.493108-14.733563-2.031263-4.868891-4.202719-9.680477-6.529717-14.308891-5.622044-7.890714-16.253172-11.82328-25.708522-8.842389l-9.05626 2.852978c-14.747889 3.861958-31.071669 0.057305-42.654472-11.512195-11.55415-11.55415-15.344476-27.877931-11.484565-42.612517l2.852978-9.05626c2.966565-9.44-0.951675-20.043499-8.856715-25.692149-4.641717-2.328022-9.397021-4.542456-14.307867-6.544043-4.883217-2.029216-9.82374-3.846608-14.734586-5.465478-9.567913-1.632173-19.872606 3.123131-24.414039 11.895935l-4.400217 8.389064c-7.67889 13.174044-21.931498 22.002107-38.268582 22.002107-16.309454 0-30.576389-8.828063-38.267559-22.002107l-4.387937-8.389064c-4.554736-8.771781-14.8318-13.528108-24.405853-11.895935-4.954849 1.604544-9.873882 3.435239-14.763239 5.4225-4.883217 2.044566-9.688663 4.217045-14.323217 6.545066-7.891737 5.649674-11.808954 16.266475-8.830109 25.735128l2.826372 9.05626c3.882424 14.762215 0.057305 31.085996-11.491729 42.612517-11.510148 11.5695-27.849278 15.373129-42.611493 11.526521l-9.070586-2.867304c-9.44-2.980891-20.063965 0.951675-25.686009 8.842389-2.342348 4.628414-4.52813 9.44-6.53688 14.308891-2.036379 4.882194-3.847631 9.822716-5.492084 14.733563-1.603521 9.581216 3.142573 19.85828 11.923564 24.443715l8.402367 4.400217c13.156648 7.67889 21.986757 21.944801 21.986757 38.268582C351.251388 295.79689 342.421278 310.019823 329.285097 317.714062zM511.977999 171.706687c59.532885 0 107.795075 48.275493 107.795075 107.779725 0 59.490929-48.26219 107.752096-107.795075 107.752096-59.533908 0-107.752096-48.26219-107.752096-107.752096C404.226926 219.98218 452.445114 171.706687 511.977999 171.706687z" p-id="1800"/><path d="M924.647713 689.174212 798.570249 689.174212 798.570249 581.650313c0-26.387997-21.476127-47.850821-47.864124-47.850821L276.2543 533.799492c-26.386974 0-47.851844 21.462824-47.851844 47.850821l0 107.523899L99.345124 689.174212c-20.419052 0-36.95568 16.550954-36.95568 36.948517l0 184.771237c0 20.399609 16.536628 36.962843 36.95568 36.962843l273.965675 0c20.397562 0 36.947494-16.564257 36.947494-36.962843L410.258293 726.122729c0-20.398586-16.550954-36.948517-36.947494-36.948517l-123.103736 0L250.207064 581.650313c0-14.366196 11.68104-26.047236 26.047236-26.047236l474.451826 0c14.364149 0 26.062586 11.68104 26.062586 26.047236l0 107.523899L650.689201 689.174212c-20.412912 0-36.962843 16.550954-36.962843 36.948517l0 184.771237c0 20.399609 16.549931 36.962843 36.962843 36.962843l273.958512 0c20.397562 0 36.96182-16.564257 36.96182-36.962843L961.609533 726.122729C961.609533 705.725166 945.044252 689.174212 924.647713 689.174212z" p-id="1801"/></svg>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
@ -1 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574576079728" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6611" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M981.917808 277.742466H813.589041V122.038356c0-19.638356-15.430137-35.068493-35.068493-35.068493H252.493151c-19.638356 0-35.068493 15.430137-35.068493 35.068493v155.70411H42.082192c-19.638356 0-35.068493 15.430137-35.068493 35.068493V911.780822c0 19.638356 15.430137 35.068493 35.068493 35.068493h939.835616c19.638356 0 35.068493-15.430137 35.068493-35.068493V312.810959c0-19.638356-15.430137-35.068493-35.068493-35.068493z m-694.356164-120.635617H743.452055v120.635617H287.561644v-120.635617zM252.493151 347.879452h694.356164v133.260274h-74.345205v-50.49863c0-19.638356-15.430137-35.068493-35.068494-35.068493h-117.830137c-19.638356 0-35.068493 15.430137-35.068493 35.068493v50.49863h-336.657534v-50.49863c0-19.638356-15.430137-35.068493-35.068493-35.068493h-117.830137c-19.638356 0-35.068493 15.430137-35.068493 35.068493v50.49863H77.150685v-133.260274H252.493151z m549.873972 119.232877v140.273972h-47.69315v-140.273972h47.69315z m-526.027397 0v140.273972h-47.693151v-140.273972h47.693151zM77.150685 876.712329V551.276712h81.358904v89.775343c0 19.638356 15.430137 35.068493 35.068493 35.068493h117.830137c19.638356 0 35.068493-15.430137 35.068493-35.068493v-89.775343h336.657535v89.775343c0 19.638356 15.430137 35.068493 35.068493 35.068493h117.830137c19.638356 0 35.068493-15.430137 35.068493-35.068493v-89.775343h74.345205v324.032877H77.150685z" p-id="6612" fill="#bfbfbf"></path></svg>
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574576079728" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6611" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M981.917808 277.742466H813.589041V122.038356c0-19.638356-15.430137-35.068493-35.068493-35.068493H252.493151c-19.638356 0-35.068493 15.430137-35.068493 35.068493v155.70411H42.082192c-19.638356 0-35.068493 15.430137-35.068493 35.068493V911.780822c0 19.638356 15.430137 35.068493 35.068493 35.068493h939.835616c19.638356 0 35.068493-15.430137 35.068493-35.068493V312.810959c0-19.638356-15.430137-35.068493-35.068493-35.068493z m-694.356164-120.635617H743.452055v120.635617H287.561644v-120.635617zM252.493151 347.879452h694.356164v133.260274h-74.345205v-50.49863c0-19.638356-15.430137-35.068493-35.068494-35.068493h-117.830137c-19.638356 0-35.068493 15.430137-35.068493 35.068493v50.49863h-336.657534v-50.49863c0-19.638356-15.430137-35.068493-35.068493-35.068493h-117.830137c-19.638356 0-35.068493 15.430137-35.068493 35.068493v50.49863H77.150685v-133.260274H252.493151z m549.873972 119.232877v140.273972h-47.69315v-140.273972h47.69315z m-526.027397 0v140.273972h-47.693151v-140.273972h47.693151zM77.150685 876.712329V551.276712h81.358904v89.775343c0 19.638356 15.430137 35.068493 35.068493 35.068493h117.830137c19.638356 0 35.068493-15.430137 35.068493-35.068493v-89.775343h336.657535v89.775343c0 19.638356 15.430137 35.068493 35.068493 35.068493h117.830137c19.638356 0 35.068493-15.430137 35.068493-35.068493v-89.775343h74.345205v324.032877H77.150685z" p-id="6612"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
@ -74,7 +74,7 @@ export default {
|
||||
},
|
||||
login: {
|
||||
title: '系统登录',
|
||||
welcome: '欢迎使用DATAEASE',
|
||||
welcome: '欢迎使用DataEase',
|
||||
logIn: '登录',
|
||||
username: '账号',
|
||||
password: '密码',
|
||||
|
@ -1,6 +1,8 @@
|
||||
<template>
|
||||
<div class="top-nav" :style="{'background-color': theme}">
|
||||
<div class="log">DATA_EASE</div>
|
||||
<div class="log">
|
||||
<img src="@/assets/DataEase-white.png" width="160" alt="" style="padding-top: 8px;">
|
||||
</div>
|
||||
<el-menu
|
||||
:active-text-color="variables.topMenuActiveText"
|
||||
:default-active="activeMenu"
|
||||
|
@ -2,7 +2,7 @@ module.exports = {
|
||||
TokenKey: 'Authorization',
|
||||
RefreshTokenKey: 'refreshauthorization',
|
||||
LinkTokenKey: 'LINK-PWD-TOKEN',
|
||||
title: 'DATA_EASE',
|
||||
title: 'DataEase',
|
||||
|
||||
/**
|
||||
* @type {boolean} true | false
|
||||
|
@ -10,8 +10,9 @@
|
||||
overflow: hidden;
|
||||
|
||||
.log {
|
||||
padding: 0 20px;
|
||||
padding: 0 16px;
|
||||
line-height: 56px;
|
||||
height: 56px;
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
// color: rgb(191, 203, 217);
|
||||
@ -37,7 +38,7 @@
|
||||
background-color: $subMenuHover !important;
|
||||
color: $subMenuActiveText !important;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
.is-active {
|
||||
background-color: $subMenuHover !important;
|
||||
|
@ -4,7 +4,7 @@
|
||||
**/
|
||||
|
||||
/* theme color */
|
||||
$--color-primary: #1890ff;
|
||||
$--color-primary: #f1a826;
|
||||
$--color-success: #13ce66;
|
||||
$--color-warning: #ffba00;
|
||||
$--color-danger: #ff4949;
|
||||
@ -27,7 +27,7 @@ $--font-path: "~element-ui/lib/theme-chalk/fonts";
|
||||
|
||||
// sidebar
|
||||
$menuText:rgba(255,255,255,0.87);
|
||||
$menuActiveText:#409EFF;
|
||||
$menuActiveText:#f18126;
|
||||
$topMenuActiveText:#f4f4f5;
|
||||
$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951
|
||||
|
||||
@ -38,7 +38,7 @@ $menuHover: rgba(158, 158, 158, 0.2);
|
||||
|
||||
$subMenuBg:#1f2d3d;
|
||||
// $subMenuHover:#001528;
|
||||
$subMenuHover:#1682e6;
|
||||
$subMenuHover:#f18126;
|
||||
|
||||
$sideBarWidth: 210px;
|
||||
$topBarHeight: 56px;
|
||||
|
@ -662,9 +662,9 @@ export default {
|
||||
}
|
||||
|
||||
.item:hover {
|
||||
color: #1890ff;
|
||||
background: #e8f4ff;
|
||||
border-color: #a3d3ff;
|
||||
color: #f1a826;
|
||||
background: #fffcef;
|
||||
border-color: #f3c13c;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
<el-button size="mini" @click="cancel">
|
||||
{{ $t('dataset.cancel') }}
|
||||
</el-button>
|
||||
<el-button :disabled="!form.name || fileList.length === 0" size="mini" type="primary" @click="save">
|
||||
<el-button :disabled="!name || fileList.length === 0" size="mini" type="primary" @click="save">
|
||||
{{ $t('dataset.confirm') }}
|
||||
</el-button>
|
||||
</el-row>
|
||||
@ -18,9 +18,9 @@
|
||||
<el-row>
|
||||
<el-row>
|
||||
<el-col style="width: 500px;">
|
||||
<el-form :model="form" :inline="true" size="mini" class="row-style">
|
||||
<el-form :inline="true" size="mini" class="row-style">
|
||||
<el-form-item>
|
||||
<el-input v-model="form.name" :placeholder="$t('commons.name')" />
|
||||
<el-input v-model="name" :placeholder="$t('commons.name')" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-upload
|
||||
@ -88,16 +88,15 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
name: ''
|
||||
},
|
||||
name: '',
|
||||
fields: [],
|
||||
data: [],
|
||||
mode: '1',
|
||||
height: 600,
|
||||
fileList: [],
|
||||
headers: { Authorization: token },
|
||||
baseUrl: process.env.VUE_APP_BASE_API
|
||||
baseUrl: process.env.VUE_APP_BASE_API,
|
||||
path: ''
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -130,17 +129,17 @@ export default {
|
||||
// })
|
||||
// },
|
||||
uploadSuccess(response, file, fileList) {
|
||||
console.log(response)
|
||||
console.log(file)
|
||||
console.log(fileList)
|
||||
|
||||
// console.log(response)
|
||||
// console.log(file)
|
||||
// console.log(fileList)
|
||||
this.path = response.data.path
|
||||
this.fields = response.data.fields
|
||||
this.data = response.data.data
|
||||
const datas = this.data
|
||||
this.$refs.plxTable.reloadData(datas)
|
||||
|
||||
if (file.name.lastIndexOf('.') > 0) {
|
||||
this.form.name = file.name.substring(0, file.name.lastIndexOf('.'))
|
||||
this.name = file.name.substring(0, file.name.lastIndexOf('.'))
|
||||
}
|
||||
this.fileList = fileList
|
||||
},
|
||||
@ -148,20 +147,16 @@ export default {
|
||||
save() {
|
||||
// console.log(this.checkTableList);
|
||||
// console.log(this.scene);
|
||||
const sceneId = this.param.id
|
||||
const dataSourceId = this.dataSource
|
||||
const tables = []
|
||||
const mode = this.mode
|
||||
this.checkTableList.forEach(function(name) {
|
||||
tables.push({
|
||||
name: name,
|
||||
sceneId: sceneId,
|
||||
dataSourceId: dataSourceId,
|
||||
type: 'excel',
|
||||
mode: parseInt(mode)
|
||||
})
|
||||
})
|
||||
post('/dataset/table/batchAdd', tables).then(response => {
|
||||
const table = {
|
||||
id: this.param.tableId,
|
||||
name: this.name,
|
||||
sceneId: this.param.id,
|
||||
dataSourceId: null,
|
||||
type: 'excel',
|
||||
mode: parseInt(this.mode),
|
||||
info: '{"data":"' + this.path + '"}'
|
||||
}
|
||||
post('/dataset/table/update', table).then(response => {
|
||||
this.$store.dispatch('dataset/setSceneData', new Date().getTime())
|
||||
this.cancel()
|
||||
})
|
||||
|
@ -89,7 +89,7 @@
|
||||
<svg-icon v-if="data.type === 'excel'" icon-class="ds-excel" class="ds-icon-excel" />
|
||||
<svg-icon v-if="data.type === 'custom'" icon-class="ds-custom" class="ds-icon-custom" />
|
||||
</span>
|
||||
<span>
|
||||
<span v-if="data.type === 'db' || data.type === 'sql'">
|
||||
<span v-if="data.mode === 0" style="margin-left: 6px"><i class="el-icon-s-operation" /></span>
|
||||
<span v-if="data.mode === 1" style="margin-left: 6px"><i class="el-icon-alarm-clock" /></span>
|
||||
</span>
|
||||
|
@ -138,9 +138,9 @@
|
||||
</div>
|
||||
</el-dialog>
|
||||
<el-row>
|
||||
<el-button icon="el-icon-download" size="mini">
|
||||
{{ $t('dataset.sync_now') }}
|
||||
</el-button>
|
||||
<!-- <el-button icon="el-icon-download" size="mini">-->
|
||||
<!-- {{ $t('dataset.sync_now') }}-->
|
||||
<!-- </el-button>-->
|
||||
<el-button icon="el-icon-plus" size="mini" @click="addTask(undefined)">
|
||||
{{ $t('dataset.add_task') }}
|
||||
</el-button>
|
||||
|
@ -36,7 +36,7 @@
|
||||
<el-tab-pane :label="$t('dataset.join_view')" name="joinView">
|
||||
关联视图 TODO
|
||||
</el-tab-pane>
|
||||
<el-tab-pane v-if="table.mode === 1" :label="$t('dataset.update_info')" name="updateInfo">
|
||||
<el-tab-pane v-if="table.mode === 1 && (table.type === 'db' || table.type === 'sql')" :label="$t('dataset.update_info')" name="updateInfo">
|
||||
<update-info :table="table" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
@ -186,7 +186,7 @@
|
||||
<svg-icon v-if="data.type === 'excel'" icon-class="ds-excel" class="ds-icon-excel" />
|
||||
<svg-icon v-if="data.type === 'custom'" icon-class="ds-custom" class="ds-icon-custom" />
|
||||
</span>
|
||||
<span>
|
||||
<span v-if="data.type === 'db' || data.type === 'sql'">
|
||||
<span v-if="data.mode === 0" style="margin-left: 6px"><i class="el-icon-s-operation" /></span>
|
||||
<span v-if="data.mode === 1" style="margin-left: 6px"><i class="el-icon-alarm-clock" /></span>
|
||||
</span>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<el-col :span="12">
|
||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" size="default">
|
||||
<div class="login-logo">
|
||||
<img src="@/assets/RackShift-black.png" alt="">
|
||||
<img src="@/assets/DataEase-black.png" alt="">
|
||||
</div>
|
||||
<div class="login-title">
|
||||
{{ $t('login.title') }}
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
<script>
|
||||
import { loadTree } from '@/api/panel/share'
|
||||
import { uuid } from 'vue-uuid'
|
||||
import { get } from '@/api/panel/panel'
|
||||
export default {
|
||||
name: 'ShareTree',
|
||||
data() {
|
||||
@ -41,7 +43,19 @@ export default {
|
||||
})
|
||||
},
|
||||
handleNodeClick(data) {
|
||||
console.log(data)
|
||||
get('panel/group/findOne/' + data.id).then(response => {
|
||||
this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData)))
|
||||
this.$store.commit('setCanvasStyle', JSON.parse(response.data.panelStyle))
|
||||
|
||||
this.$store.dispatch('panel/setPanelInfo', data)
|
||||
})
|
||||
},
|
||||
resetID(data) {
|
||||
data.forEach(item => {
|
||||
item.id = uuid.v1()
|
||||
})
|
||||
|
||||
return data
|
||||
}
|
||||
}
|
||||
}
|
||||
|
96
frontend/src/views/panel/enshrine/index.vue
Normal file
@ -0,0 +1,96 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-table
|
||||
|
||||
class="de-filter-data-table"
|
||||
:data="starDatas"
|
||||
:show-header="false"
|
||||
:highlight-current-row="true"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column prop="name" label="名称">
|
||||
<template :id="scope.row.storeId" slot-scope="scope">
|
||||
<div class="start-item">
|
||||
<div class="filter-db-row star-item-content" @click="showPanel(scope.row)">
|
||||
<i class="el-icon-s-data" />
|
||||
<span> {{ scope.row.name }}</span>
|
||||
</div>
|
||||
<div class="star-item-close">
|
||||
<i class="el-icon-close " @click="remove(scope.row)" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { deleteEnshrine, enshrineList } from '@/api/panel/enshrine'
|
||||
import { uuid } from 'vue-uuid'
|
||||
import { get } from '@/api/panel/panel'
|
||||
export default {
|
||||
name: 'Enshrine',
|
||||
data() {
|
||||
return {
|
||||
starDatas: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
},
|
||||
methods: {
|
||||
showPanel(row) {
|
||||
get('panel/group/findOne/' + row.panelGroupId).then(response => {
|
||||
this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData)))
|
||||
this.$store.commit('setCanvasStyle', JSON.parse(response.data.panelStyle))
|
||||
const data = {
|
||||
id: row.panelGroupId,
|
||||
name: row.name
|
||||
}
|
||||
this.$store.dispatch('panel/setPanelInfo', data)
|
||||
})
|
||||
},
|
||||
resetID(data) {
|
||||
data.forEach(item => {
|
||||
item.id = uuid.v1()
|
||||
})
|
||||
|
||||
return data
|
||||
},
|
||||
remove(row) {
|
||||
deleteEnshrine(row.storeId).then(res => {
|
||||
this.initData()
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
enshrineList({}).then(res => {
|
||||
this.starDatas = res.data
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.start-item {
|
||||
width: 100%;
|
||||
height: 25px;
|
||||
margin: 0 0 0 10px;
|
||||
}
|
||||
.star-item-content {
|
||||
width: calc(100% - 60px);
|
||||
position: absolute;
|
||||
}
|
||||
.star-item-close {
|
||||
width: 25px;
|
||||
right: 5px;
|
||||
position: absolute;
|
||||
display: none;
|
||||
}
|
||||
.start-item:hover {
|
||||
.star-item-close {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -6,9 +6,9 @@
|
||||
<span slot="label"><i class="el-icon-document" />列表</span>
|
||||
<panel-list />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="panels_star">
|
||||
<el-tab-pane name="panels_star" :lazy="true">
|
||||
<span slot="label"><i class="el-icon-star-off" />收藏</span>
|
||||
开发中...
|
||||
<enshrine v-if="showEnshrine" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="panels_share" :lazy="true">
|
||||
<span slot="label"><i class="el-icon-share" />分享</span>
|
||||
@ -29,14 +29,16 @@ import DeAsideContainer from '@/components/dataease/DeAsideContainer'
|
||||
import PanelList from '../list/PanelList'
|
||||
import PanelViewShow from '../list/PanelViewShow'
|
||||
import ShareTree from '../GrantAuth/shareTree'
|
||||
import Enshrine from '../enshrine/index'
|
||||
|
||||
export default {
|
||||
name: 'PanelMain',
|
||||
components: { DeMainContainer, DeContainer, DeAsideContainer, PanelList, PanelViewShow, ShareTree },
|
||||
components: { DeMainContainer, DeContainer, DeAsideContainer, PanelList, PanelViewShow, ShareTree, Enshrine },
|
||||
data() {
|
||||
return {
|
||||
activeName: 'PanelList',
|
||||
showShare: false
|
||||
showShare: false,
|
||||
showEnshrine: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@ -45,10 +47,17 @@ export default {
|
||||
if (tab.name === 'panels_share') {
|
||||
this.refreshShare()
|
||||
}
|
||||
if (tab.name === 'panels_star') {
|
||||
this.refreshEnshrine()
|
||||
}
|
||||
},
|
||||
refreshShare() {
|
||||
this.showShare = false
|
||||
this.$nextTick(() => (this.showShare = true))
|
||||
},
|
||||
refreshEnshrine() {
|
||||
this.showEnshrine = false
|
||||
this.$nextTick(() => (this.showEnshrine = true))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,18 @@
|
||||
<el-button class="el-icon-view" size="mini" circle @click="clickPreview" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
|
||||
<span v-if="!hasStar && panelInfo" style="float: right;margin-right: 10px">
|
||||
<el-tooltip content="收藏">
|
||||
<el-button class="el-icon-star-off" size="mini" circle @click="star" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
|
||||
<span v-if="hasStar && panelInfo" style="float: right;margin-right: 10px">
|
||||
<el-tooltip content="取消">
|
||||
<el-button class="el-icon-star-on" size="mini" circle @click="unstar" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
</el-row>
|
||||
<!--TODO 仪表盘预览区域-->
|
||||
<el-row class="panel-design-preview">
|
||||
@ -48,7 +60,7 @@ import SaveToTemplate from '@/views/panel/list/SaveToTemplate'
|
||||
import { mapState } from 'vuex'
|
||||
import html2canvas from 'html2canvas'
|
||||
import FileSaver from 'file-saver'
|
||||
|
||||
import { enshrineList, saveEnshrine, deleteEnshrine } from '@/api/panel/enshrine'
|
||||
export default {
|
||||
name: 'PanelViewShow',
|
||||
components: { Preview, SaveToTemplate },
|
||||
@ -57,7 +69,8 @@ export default {
|
||||
showMain: true,
|
||||
templateInfo: '',
|
||||
templateSaveTitle: '保存为模板',
|
||||
templateSaveShow: false
|
||||
templateSaveShow: false,
|
||||
hasStar: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -73,7 +86,10 @@ export default {
|
||||
panelInfo(newVal, oldVla) {
|
||||
// 刷新 进行重新渲染
|
||||
this.showMain = false
|
||||
this.$nextTick(() => { this.showMain = true })
|
||||
this.$nextTick(() => {
|
||||
this.showMain = true
|
||||
this.initHasStar()
|
||||
})
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@ -138,6 +154,22 @@ export default {
|
||||
},
|
||||
closeSaveDialog() {
|
||||
this.templateSaveShow = false
|
||||
},
|
||||
star() {
|
||||
this.panelInfo && saveEnshrine(this.panelInfo.id).then(res => {
|
||||
this.hasStar = true
|
||||
})
|
||||
},
|
||||
unstar() {
|
||||
this.panelInfo && deleteEnshrine(this.panelInfo.id).then(res => {
|
||||
this.hasStar = false
|
||||
})
|
||||
},
|
||||
initHasStar() {
|
||||
const param = {}
|
||||
enshrineList(param).then(res => {
|
||||
this.hasStar = res.data && res.data.some(item => item.panelGroupId === this.panelInfo.id)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|