diff --git a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java index 4729dcb089..768acc42dd 100644 --- a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java +++ b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java @@ -6,7 +6,6 @@ import io.dataease.auth.entity.TokenInfo; import io.dataease.auth.service.AuthUserService; import io.dataease.auth.util.JWTUtils; import io.dataease.commons.utils.CommonBeanFactory; -import io.dataease.commons.utils.ServletUtils; import io.dataease.i18n.Translator; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authc.AuthenticationException; diff --git a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java index f751689c6e..e71b2ab696 100644 --- a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java +++ b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java @@ -84,24 +84,17 @@ public class JWTUtils { */ public static boolean loginExpire(String token){ if (Login_Interval==0) { - String property = CommonBeanFactory.getBean(Environment.class).getProperty("dataease.login_timeout"); - // 默认超时时间是8h - int minute = StringUtils.isNotEmpty(property) ? Integer.parseInt(property): (8*60); + int minute = CommonBeanFactory.getBean(Environment.class).getProperty("dataease.login_timeout", Integer.class, 8*60); // 分钟换算成毫秒 Login_Interval = minute * 1000 * 60; } Long now = System.currentTimeMillis(); Long lastOperateTime = tokenLastOperateTime(token); + if (ObjectUtils.isEmpty(lastOperateTime)) return true; boolean isExpire = false; if (lastOperateTime != null) { isExpire = now - lastOperateTime > Login_Interval; } - if (isExpire) { -// System.out.println("-----------------------"); -// System.out.println("-----上次操作时间是["+lastOperateTime+"]-----"); -// System.out.println("-----当前操作时间是["+now+"]-----"); -// System.out.println("-----------------------"); - } return isExpire; } @@ -116,7 +109,7 @@ public class JWTUtils { } /** - * 生成签名,5min后过期 + * 生成签名,1min后过期 * @param tokenInfo 用户信息 * @param secret 用户的密码 * @return 加密的token diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java index a3c52468e1..bdd70c8719 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java @@ -7,12 +7,13 @@ import io.dataease.dto.panel.PanelSharePo; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; public interface ExtPanelShareMapper { int batchInsert(@Param("shares") List shares); - List query(GridExample example); + List query(Map param); List queryWithResource(GridExample example); } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml index 1d29450bb7..6f17c63e55 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml @@ -16,16 +16,17 @@ - select distinct s.panel_group_id as id, g.create_by as creator, g.name from panel_share s left join panel_group g on g.id = s.panel_group_id - - - - - order by ${orderByClause} - + where + ( s.target_id = #{userId} and s.type = 0 ) or + ( s.target_id = #{deptId} and s.type = 1 ) or + s.target_id in + + #{roleId} + order by s.create_time desc diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml index a74e5045ff..2c1798644d 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysUserMapper.xml @@ -21,18 +21,21 @@ - - - + + + + + diff --git a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java index 6a5fdd24d8..8055b25533 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java @@ -202,7 +202,7 @@ public class JdbcProvider extends DatasourceProvider { tableFiled.setFieldSize(Integer.valueOf(resultSet.getString("COLUMN_SIZE"))); String dbType = resultSet.getString("TYPE_NAME"); tableFiled.setFieldType(dbType); - if(StringUtils.isNotEmpty(dbType) && dbType.equalsIgnoreCase("date") && tableFiled.getFieldSize() < 50 ){ + if(StringUtils.isNotEmpty(dbType) && dbType.toLowerCase().contains("date") && tableFiled.getFieldSize() < 50 ){ tableFiled.setFieldSize(50); } list.add(tableFiled); diff --git a/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java b/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java index 562561dcb2..1521cb2346 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java +++ b/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java @@ -73,12 +73,17 @@ public class ScheduleManager { triggerBuilder.withIdentity(triggerKey); + Date nTimeByCron = getNTimeByCron(cron); if (startTime.before(new Date())) { - triggerBuilder.startAt(getNTimeByCron(cron)); + triggerBuilder.startAt(nTimeByCron); } if (endTime != null) { - triggerBuilder.endAt(endTime); + if (endTime.before(nTimeByCron)) { + triggerBuilder.endAt(nTimeByCron); + } else { + triggerBuilder.endAt(endTime); + } } triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron)); @@ -151,12 +156,17 @@ public class ScheduleManager { triggerBuilder.withIdentity(triggerKey);// 触发器名,触发器组 + Date nTimeByCron = getNTimeByCron(cron); if (startTime.before(new Date())) { - triggerBuilder.startAt(getNTimeByCron(cron)); + triggerBuilder.startAt(nTimeByCron); } if (endTime != null) { - triggerBuilder.endAt(endTime); + if (endTime.before(nTimeByCron)) { + triggerBuilder.endAt(nTimeByCron); + } else { + triggerBuilder.endAt(endTime); + } } triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));// 触发器时间设定 diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 29d8d1b884..0b57ac3677 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -132,6 +132,8 @@ public class DataSetTableService { dataSetTableFieldsService.deleteByTableId(id); // 删除同步任务 dataSetTableTaskService.deleteByTableId(id); + // 删除关联关系 + dataSetTableUnionService.deleteUnionByTableId(id); try { deleteDorisTable(id, table); } catch (Exception e) { @@ -359,7 +361,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String sql = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class).getSql(); // 使用输入的sql先预执行一次,并拿到所有字段 - if(StringUtils.isEmpty(sql)){ + if (StringUtils.isEmpty(sql)) { throw new Exception(Translator.get("i18n_sql_not_empty")); } datasourceRequest.setQuery(sql); diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java index 9ee96a51ce..9eb4fd1503 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java @@ -76,6 +76,14 @@ public class DataSetTableUnionService { return sourceList; } + public void deleteUnionByTableId(String tableId) { + DatasetTableUnionExample datasetTableUnionExample = new DatasetTableUnionExample(); + DatasetTableUnionExample.Criteria criteriaSource = datasetTableUnionExample.createCriteria().andSourceTableIdEqualTo(tableId); + DatasetTableUnionExample.Criteria criteriaTarget = datasetTableUnionExample.createCriteria().andTargetTableIdEqualTo(tableId); + datasetTableUnionExample.or(criteriaTarget); + datasetTableUnionMapper.deleteByExample(datasetTableUnionExample); + } + private void checkUnion(DatasetTableUnion datasetTableUnion) { // check 关联关系是否存在 DatasetTableUnionExample datasetTableUnionExample = new DatasetTableUnionExample(); diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index f63a937c87..c2baf87982 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -27,10 +27,6 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; @@ -38,8 +34,6 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.pentaho.di.cluster.SlaveServer; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.row.ValueMetaInterface; -import org.pentaho.di.core.util.HttpClientManager; -import org.pentaho.di.core.util.Utils; import org.pentaho.di.job.Job; import org.pentaho.di.job.JobExecutionConfiguration; import org.pentaho.di.job.JobHopMeta; @@ -57,7 +51,6 @@ import org.pentaho.di.trans.step.StepMeta; import org.pentaho.di.trans.steps.excelinput.ExcelInputField; import org.pentaho.di.trans.steps.excelinput.ExcelInputMeta; import org.pentaho.di.trans.steps.excelinput.SpreadSheetType; -import org.pentaho.di.trans.steps.sql.ExecSQLMeta; import org.pentaho.di.trans.steps.tableinput.TableInputMeta; import org.pentaho.di.trans.steps.textfileoutput.TextFileField; import org.pentaho.di.trans.steps.textfileoutput.TextFileOutputMeta; @@ -70,16 +63,11 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import javax.naming.AuthenticationException; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.InetAddress; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.stream.Collectors; @Service @@ -133,7 +121,7 @@ public class ExtractDataService { switch (datasetTableField.getDeExtractType()) { case 0: if (datasetTableField.getSize() > 65533) { - Column_Fields = Column_Fields + "String" + ",`"; + Column_Fields = Column_Fields + "varchar(65533)" + ",`"; } else { Column_Fields = Column_Fields + "varchar(lenth)".replace("lenth", String.valueOf(datasetTableField.getSize())) + ",`"; } @@ -513,9 +501,14 @@ public class ExtractDataService { tmpSql = tmpSql + " limit 0"; } datasourceRequest.setQuery(tmpSql); - return String.join(",", datasourceProvider.fetchResultField(datasourceRequest).stream().map(TableFiled::getFieldName).collect(Collectors.toList())); + ListdorisFileds = new ArrayList<>(); + datasourceProvider.fetchResultField(datasourceRequest).stream().map(TableFiled::getFieldName).forEach(filed ->{ + dorisFileds.add(DorisTableUtils.columnName(filed)); + }); + return String.join(",", dorisFileds); } + private void generateTransFile(String extractType, DatasetTable datasetTable, Datasource datasource, List datasetTableFields, String selectSQL) throws Exception { TransMeta transMeta = new TransMeta(); String dorisOutputTable = null; @@ -532,6 +525,7 @@ public class ExtractDataService { case mysql: MysqlConfigration mysqlConfigration = new Gson().fromJson(datasource.getConfiguration(), MysqlConfigration.class); dataMeta = new DatabaseMeta("db", "MYSQL", "Native", mysqlConfigration.getHost(), mysqlConfigration.getDataBase(), mysqlConfigration.getPort().toString(), mysqlConfigration.getUsername(), mysqlConfigration.getPassword()); + dataMeta.addExtraOption("MYSQL","characterEncoding", "UTF-8"); transMeta.addDatabase(dataMeta); if (extractType.equalsIgnoreCase("all_scope")) { String tableName = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class).getTable(); diff --git a/backend/src/main/java/io/dataease/service/panel/ShareService.java b/backend/src/main/java/io/dataease/service/panel/ShareService.java index 0fcd5582ad..d3b8d07708 100644 --- a/backend/src/main/java/io/dataease/service/panel/ShareService.java +++ b/backend/src/main/java/io/dataease/service/panel/ShareService.java @@ -23,6 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -92,7 +93,14 @@ public class ShareService { Long deptId = user.getDeptId(); List roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList()); - List targetIds = new ArrayList<>(); + Map param = new HashMap<>(); + param.put("userId", userId); + param.put("deptId", deptId); + param.put("roleIds", roleIds); + + List datas = extPanelShareMapper.query(param); + + /*List targetIds = new ArrayList<>(); targetIds.add(userId); targetIds.add(deptId); targetIds.addAll(roleIds); @@ -105,14 +113,15 @@ public class ShareService { request.setConditions(new ArrayList(){{add(condition);}}); GridExample example = request.convertExample(); - List datas = extPanelShareMapper.query(example); + List datas = extPanelShareMapper.query(example);*/ List dtoLists = datas.stream().map(po -> BeanUtils.copyBean(new PanelShareDto(), po)).collect(Collectors.toList()); return convertTree(dtoLists); } //List构建Tree private List convertTree(List datas){ - Map> map = datas.stream().filter(panelShareDto -> StringUtils.isNotEmpty(panelShareDto.getCreator())).collect(Collectors.groupingBy(PanelShareDto::getCreator)); + String username = AuthUtils.getUser().getUsername(); + Map> map = datas.stream().filter(panelShareDto -> StringUtils.isNotEmpty(panelShareDto.getCreator()) && !StringUtils.equals(username, panelShareDto.getCreator())).collect(Collectors.groupingBy(PanelShareDto::getCreator)); return map.entrySet().stream().map(entry -> { PanelShareDto panelShareDto = new PanelShareDto(); panelShareDto.setName(entry.getKey()); diff --git a/backend/src/main/resources/ehcache/ehcache.xml b/backend/src/main/resources/ehcache/ehcache.xml index ff551ec033..82848300e9 100644 --- a/backend/src/main/resources/ehcache/ehcache.xml +++ b/backend/src/main/resources/ehcache/ehcache.xml @@ -29,7 +29,7 @@ diff --git a/frontend/src/api/dataset/dataset.js b/frontend/src/api/dataset/dataset.js index 1bf56d0bdd..610b9981f2 100644 --- a/frontend/src/api/dataset/dataset.js +++ b/frontend/src/api/dataset/dataset.js @@ -119,11 +119,11 @@ export function fieldValues(fieldId) { }) } -export function isKettleRunning() { +export function isKettleRunning(showLoading = true) { return request({ url: '/dataset/group/isKettleRunning', method: 'post', - loading: true + loading: showLoading }) } diff --git a/frontend/src/components/cron/cron.vue b/frontend/src/components/cron/cron.vue index b90f5aa0f9..d694fc9715 100644 --- a/frontend/src/components/cron/cron.vue +++ b/frontend/src/components/cron/cron.vue @@ -158,7 +158,7 @@ export default { } - diff --git a/frontend/src/views/panel/list/PanelList.vue b/frontend/src/views/panel/list/PanelList.vue index de9b7c46da..52f38538e4 100644 --- a/frontend/src/views/panel/list/PanelList.vue +++ b/frontend/src/views/panel/list/PanelList.vue @@ -1,5 +1,5 @@