diff --git a/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java b/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java index 8555d2c381..cc37ef3cb4 100644 --- a/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java +++ b/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java @@ -12,4 +12,6 @@ public class AccountLockStatus { private Long unlockTime; private Integer relieveTimes; + + private Integer remainderTimes; } diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java index 4455484c75..44fe78b13e 100644 --- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java +++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java @@ -81,8 +81,8 @@ public class AuthServer implements AuthApi { ValidateResult validateResult = ldapXpackService.login(request); if (!validateResult.isSuccess()) { - authUserService.recordLoginFail(username, 1); - DataEaseException.throwException(validateResult.getMsg()); + AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 1); + DataEaseException.throwException(appendLoginErrorMsg(validateResult.getMsg(), lockStatus)); } XpackLdapUserEntity ldapUserEntity = validateResult.getData(); if (StringUtils.isBlank(ldapUserEntity.getEmail())) { @@ -120,19 +120,19 @@ public class AuthServer implements AuthApi { SysUserEntity user = authUserService.getUserByName(username); if (ObjectUtils.isEmpty(user)) { - authUserService.recordLoginFail(username, 0); - DataEaseException.throwException(Translator.get("i18n_user_do_not_exist")); + AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0); + DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_id_or_pwd_error"), lockStatus)); } // 验证登录类型是否与用户类型相同 if (!sysUserService.validateLoginType(user.getFrom(), loginType)) { - authUserService.recordLoginFail(username, 0); - DataEaseException.throwException(Translator.get("i18n_login_type_error")); + AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0); + DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_login_type_error"), lockStatus)); } if (user.getEnabled() == 0) { - authUserService.recordLoginFail(username, 0); - DataEaseException.throwException(Translator.get("i18n_user_is_disable")); + AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0); + DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_user_is_disable"), lockStatus)); } String realPwd = user.getPassword(); @@ -144,8 +144,8 @@ public class AuthServer implements AuthApi { pwd = CodingUtil.md5(pwd); if (!StringUtils.equals(pwd, realPwd)) { - authUserService.recordLoginFail(username, 0); - DataEaseException.throwException(Translator.get("i18n_id_or_pwd_error")); + AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0); + DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_id_or_pwd_error"), lockStatus)); } } @@ -161,6 +161,15 @@ public class AuthServer implements AuthApi { return result; } + private String appendLoginErrorMsg(String msg, AccountLockStatus lockStatus) { + if (ObjectUtils.isEmpty(lockStatus)) return msg; + if (ObjectUtils.isNotEmpty(lockStatus.getRemainderTimes())) { + String i18n = Translator.get("i18n_login_remainder_times"); + msg += String.format(i18n, lockStatus.getRemainderTimes()); + } + return msg; + } + @Override public CurrentUserDto userInfo() { CurrentUserDto userDto = (CurrentUserDto) SecurityUtils.getSubject().getPrincipal(); diff --git a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java index e8704f5dc5..6db8a61695 100644 --- a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java +++ b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java @@ -55,7 +55,7 @@ public interface AuthUserService { void checkAdmin(String uname, String pwd); - void recordLoginFail(String username, Integer logintype); + AccountLockStatus recordLoginFail(String username, Integer logintype); void unlockAccount(String username, Integer logintype); diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java index f5329eb743..c65ef79ab6 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java @@ -277,14 +277,16 @@ public class AuthUserServiceImpl implements AuthUserService { } @Override - public void recordLoginFail(String username, Integer logintype) { - if (!supportLoginLimit()) return; + public AccountLockStatus recordLoginFail(String username, Integer logintype) { + if (!supportLoginLimit()) return null; long now = System.currentTimeMillis(); SysLoginLimit sysLoginLimit = new SysLoginLimit(); sysLoginLimit.setUsername(username); sysLoginLimit.setLoginType(logintype); sysLoginLimit.setRecordTime(now); sysLoginLimitMapper.insert(sysLoginLimit); + return lockStatus(username, logintype); + } @Override @@ -312,13 +314,16 @@ public class AuthUserServiceImpl implements AuthUserService { SysLoginLimitExample example = new SysLoginLimitExample(); example.createCriteria().andUsernameEqualTo(username).andLoginTypeEqualTo(logintype).andRecordTimeGreaterThan(dividingPointTime); List sysLoginLimits = sysLoginLimitMapper.selectByExample(example); + accountLockStatus.setRemainderTimes(limitTimes); if (CollectionUtils.isNotEmpty(sysLoginLimits)) { boolean needLock = sysLoginLimits.size() >= limitTimes; + accountLockStatus.setRemainderTimes(limitTimes - sysLoginLimits.size()); accountLockStatus.setLocked(needLock); if (needLock) { long unlockTime = now + (longRelieveTimes * 60L * 1000L); accountLockStatus.setUnlockTime(unlockTime); accountLockStatus.setRelieveTimes(relieveTimes); + accountLockStatus.setRemainderTimes(0); } } diff --git a/backend/src/main/java/io/dataease/commons/utils/DatasetUtils.java b/backend/src/main/java/io/dataease/commons/utils/DatasetUtils.java new file mode 100644 index 0000000000..35b97fd3bb --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/utils/DatasetUtils.java @@ -0,0 +1,26 @@ +package io.dataease.commons.utils; + +import io.dataease.dto.dataset.union.UnionDTO; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/11/28 + * Description: + */ +public class DatasetUtils { + + public static void getUnionTable(List tableIdList, List childrenDs) { + if (CollectionUtils.isNotEmpty(childrenDs)) { + for (UnionDTO unionDTO : childrenDs) { + String tableId = unionDTO.getCurrentDs().getId(); + tableIdList.add(tableId); + if (CollectionUtils.isNotEmpty(unionDTO.getChildrenDs())) { + getUnionTable(tableIdList, unionDTO.getChildrenDs()); + } + } + } + } +} diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.java b/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.java index 88fd842d99..0f10fb6c79 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.java @@ -8,4 +8,6 @@ import java.util.List; public interface ExtDataSetTableFieldMapper { List findByPanelId(@Param("panelId") String panelId); + List findByTableIds(@Param("tableIds") List tableIds); + } diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.xml b/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.xml index f42396ed96..4aec2878ca 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTableFieldMapper.xml @@ -7,23 +7,22 @@ + + diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java index a28e4145f3..4c6684cbcd 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java @@ -11,8 +11,13 @@ public interface ExtDataSetTableMapper { List search(DataSetTableRequest request); DataSetTableDTO searchOne(DataSetTableRequest request); + DataSetTableDTO findOneDetails(@Param("datasetTableId") String datasetTableId); + List searchDataSetTableWithPanelId(@Param("panelId") String panelId, @Param("userId") String userId); + List findByPanelId(@Param("panelId") String panelId); + List findByTableIds(@Param("tableIds") List tableIds); + } diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml index a2e4df7896..deaa2f183b 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml @@ -25,7 +25,7 @@ `info`, create_by, create_time, - ( SELECT nick_name FROM sys_user WHERE sys_user.username = dataset_table.create_by ) AS creator_name + (SELECT nick_name FROM sys_user WHERE sys_user.username = dataset_table.create_by) AS creator_name from dataset_table where id = #{datasetTableId} @@ -147,4 +147,13 @@ FROM panel_view WHERE panel_id = #{panelId})) + + diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java index c0c320d041..91ff96757e 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java @@ -1,8 +1,8 @@ package io.dataease.ext; -import io.dataease.ext.query.GridExample; import io.dataease.dto.dataset.DataSetTaskDTO; import io.dataease.dto.dataset.DataSetTaskLogDTO; +import io.dataease.ext.query.GridExample; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -25,4 +25,6 @@ public interface ExtDataSetTaskMapper { List taskWithTriggers(GridExample example); List findByPanelId(@Param("panelId") String panelId); + + List findByTableIds(@Param("tableIds") List tableIds); } diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml index b073d3c111..2680c1875c 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml @@ -8,19 +8,21 @@ - + - SELECT dataset_table_task_log.*, dataset_table_task.name, dataset_table.name as dataset_name FROM dataset_table_task_log LEFT JOIN dataset_table_task ON dataset_table_task_log.task_id = dataset_table_task.id LEFT JOIN dataset_table ON dataset_table_task_log.table_id = dataset_table.id - + order by ${orderByClause} @@ -30,13 +32,14 @@ - SELECT dataset_table_task_log.*, dataset_table_task.name, dataset_table.name as dataset_name FROM dataset_table_task_log LEFT JOIN dataset_table_task ON dataset_table_task_log.task_id = dataset_table_task.id LEFT JOIN dataset_table ON dataset_table_task_log.table_id = dataset_table.id - + order by ${orderByClause} @@ -47,12 +50,13 @@ + + - diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java index d9d1b687e0..18e91bf687 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java @@ -1,8 +1,8 @@ package io.dataease.ext; -import io.dataease.ext.query.GridExample; import io.dataease.controller.request.DatasourceUnionRequest; import io.dataease.dto.DatasourceDTO; +import io.dataease.ext.query.GridExample; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -15,7 +15,9 @@ public interface ExtDataSourceMapper { List findByPanelId(@Param("panelId") String panelId); - DatasourceDTO queryDetails(@Param("datasourceId") String datasourceId,@Param("userId") String userId); + List findByTableIds(@Param("tableIds") List tableIds); + + DatasourceDTO queryDetails(@Param("datasourceId") String datasourceId, @Param("userId") String userId); } diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml index 10ce945c85..782da6288a 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml @@ -130,6 +130,19 @@ WHERE panel_view.panel_id = #{panelId} + +