From 339bc8acc390915aaabc8767a25b198ec7781deb Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Tue, 16 Dec 2025 17:37:45 -0800 Subject: [PATCH 01/14] fix: modify resource upload --- .../update_resource_table_ddl_2025_1217.sql | 2 + .../it/common/exception/ExceptionEnum.java | 6 +- .../common/utils/MultipartFileHashUtils.java | 74 +++++++++++++++++++ .../it/controller/ResourceController.java | 3 + .../it/login/controller/LoginController.java | 4 +- .../login/service/impl/LoginServiceImpl.java | 2 + .../tinyengine/it/model/entity/Resource.java | 3 + .../material/impl/ResourceServiceImpl.java | 4 +- .../main/resources/mappers/ResourceMapper.xml | 11 ++- 9 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 app/src/main/resources/sql/mysql/update_resource_table_ddl_2025_1217.sql create mode 100644 base/src/main/java/com/tinyengine/it/common/utils/MultipartFileHashUtils.java diff --git a/app/src/main/resources/sql/mysql/update_resource_table_ddl_2025_1217.sql b/app/src/main/resources/sql/mysql/update_resource_table_ddl_2025_1217.sql new file mode 100644 index 00000000..7329c08b --- /dev/null +++ b/app/src/main/resources/sql/mysql/update_resource_table_ddl_2025_1217.sql @@ -0,0 +1,2 @@ +ALTER TABLE t_resource + ADD COLUMN hash VARCHAR(100) AFTER thumbnail_url; \ No newline at end of file diff --git a/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java b/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java index 328a4e6b..691324a8 100644 --- a/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java +++ b/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java @@ -311,7 +311,11 @@ public enum ExceptionEnum implements IBaseError { /** * Cm 337 exception enum. */ - CM337("CM337", "组织不存在"); + CM337("CM337", "组织不存在"), + /** + * Cm 338 exception enum. + */ + CM338("CM338", "用户不存在,请重新注册"); /** * 错误码 diff --git a/base/src/main/java/com/tinyengine/it/common/utils/MultipartFileHashUtils.java b/base/src/main/java/com/tinyengine/it/common/utils/MultipartFileHashUtils.java new file mode 100644 index 00000000..dd2989bf --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/common/utils/MultipartFileHashUtils.java @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +package com.tinyengine.it.common.utils; + +import org.springframework.web.multipart.MultipartFile; +import java.security.MessageDigest; +import java.io.InputStream; + +/** + * The type MultipartFileHashUtils. + * + * @since 2025-12-17 + */ +public class MultipartFileHashUtils { + + /** + * 计算MultipartFile的MD5哈希 + */ + public static String getMultipartFileMD5(MultipartFile file) throws Exception { + return getMultipartFileHash(file, "MD5"); + } + + /** + * 计算MultipartFile的SHA-256哈希 + */ + public static String getMultipartFileSHA256(MultipartFile file) throws Exception { + return getMultipartFileHash(file, "SHA-256"); + } + + /** + * 通用方法:计算MultipartFile的哈希值 + */ + public static String getMultipartFileHash(MultipartFile file, String algorithm) + throws Exception { + + MessageDigest digest = MessageDigest.getInstance(algorithm); + + try (InputStream inputStream = file.getInputStream()) { + byte[] buffer = new byte[8192]; + int bytesRead; + + while ((bytesRead = inputStream.read(buffer)) != -1) { + digest.update(buffer, 0, bytesRead); + } + } + + return bytesToHex(digest.digest()); + } + + /** + * 字节数组转十六进制字符串 + */ + private static String bytesToHex(byte[] bytes) { + StringBuilder hexString = new StringBuilder(); + for (byte b : bytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + return hexString.toString(); + } +} diff --git a/base/src/main/java/com/tinyengine/it/controller/ResourceController.java b/base/src/main/java/com/tinyengine/it/controller/ResourceController.java index 7810f557..7a5229f0 100644 --- a/base/src/main/java/com/tinyengine/it/controller/ResourceController.java +++ b/base/src/main/java/com/tinyengine/it/controller/ResourceController.java @@ -18,6 +18,7 @@ import com.tinyengine.it.common.exception.ServiceException; import com.tinyengine.it.common.log.SystemControllerLog; import com.tinyengine.it.common.utils.ImageThumbnailGenerator; +import com.tinyengine.it.common.utils.MultipartFileHashUtils; import com.tinyengine.it.common.utils.Utils; import com.tinyengine.it.model.entity.Resource; import com.tinyengine.it.service.material.ResourceService; @@ -200,10 +201,12 @@ public Result resourceUpload(@RequestParam MultipartFile file, Integer } // 将文件转为 Base64 String base64 = ImageThumbnailGenerator.convertToBase64(file); + String imageHash = MultipartFileHashUtils.getMultipartFileMD5(file); Resource resource = new Resource(); resource.setName(fileName); resource.setResourceData(base64); resource.setAppId(appId); + resource.setHash(imageHash); Resource result = resourceService.resourceUpload(resource); return Result.success(result); } diff --git a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java index 252ff776..512863b9 100644 --- a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java +++ b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java @@ -143,8 +143,8 @@ public Result login(@RequestBody User user) throws Exception { User userParam = new User(); userParam.setUsername(user.getUsername()); List users = userService.queryUserByCondition(userParam); - if (users.isEmpty()) { - Result.failed(ExceptionEnum.CM004); + if (users == null || users.isEmpty()) { + Result.failed(ExceptionEnum.CM338); } User userResult = users.get(0); diff --git a/base/src/main/java/com/tinyengine/it/login/service/impl/LoginServiceImpl.java b/base/src/main/java/com/tinyengine/it/login/service/impl/LoginServiceImpl.java index 7cd9b96c..6dce3fe3 100644 --- a/base/src/main/java/com/tinyengine/it/login/service/impl/LoginServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/login/service/impl/LoginServiceImpl.java @@ -76,6 +76,8 @@ public User createUser(User user) throws Exception { authUsersUnitsRoles.setUnitType("tenant"); authUsersUnitsRoles.setUnitId(1); authUsersUnitsRoles.setUserId(Integer.valueOf(user.getId())); + authUsersUnitsRoles.setCreatedBy(user.getId()); + authUsersUnitsRoles.setLastUpdatedBy(user.getId()); authUsersUnitsRolesMapper.createAuthUsersUnitsRoles(authUsersUnitsRoles); return result; } diff --git a/base/src/main/java/com/tinyengine/it/model/entity/Resource.java b/base/src/main/java/com/tinyengine/it/model/entity/Resource.java index 310acef1..3b6c511c 100644 --- a/base/src/main/java/com/tinyengine/it/model/entity/Resource.java +++ b/base/src/main/java/com/tinyengine/it/model/entity/Resource.java @@ -52,6 +52,9 @@ public class Resource extends BaseEntity { @Schema(name = "thumbnailUrl", description = "缩略图url") private String thumbnailUrl; + @Schema(name = "hash", description = "图片内容hash") + private String hash; + @Schema(name = "category", description = "分类") private String category; diff --git a/base/src/main/java/com/tinyengine/it/service/material/impl/ResourceServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/material/impl/ResourceServiceImpl.java index 80370085..73bccaee 100644 --- a/base/src/main/java/com/tinyengine/it/service/material/impl/ResourceServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/material/impl/ResourceServiceImpl.java @@ -20,6 +20,7 @@ import com.tinyengine.it.common.exception.ServiceException; import com.tinyengine.it.common.log.SystemServiceLog; import com.tinyengine.it.common.utils.ImageThumbnailGenerator; +import com.tinyengine.it.common.utils.MultipartFileHashUtils; import com.tinyengine.it.common.utils.Utils; import com.tinyengine.it.mapper.ResourceGroupResourceMapper; import com.tinyengine.it.mapper.ResourceMapper; @@ -201,8 +202,7 @@ public Resource resourceUpload(Resource resource) { resource.setThumbnailData(ImageThumbnailGenerator.createThumbnail(resource.getResourceData(), 200, 200)); } QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("name", resource.getName()); - queryWrapper.eq("category", resource.getCategory()); + queryWrapper.eq("hash", resource.getHash()); // 接入租户系统需添加租户id查询 Resource resourceResult = this.baseMapper.selectOne(queryWrapper); if (resourceResult != null) { diff --git a/base/src/main/resources/mappers/ResourceMapper.xml b/base/src/main/resources/mappers/ResourceMapper.xml index 2bf0c081..b14ba0c4 100644 --- a/base/src/main/resources/mappers/ResourceMapper.xml +++ b/base/src/main/resources/mappers/ResourceMapper.xml @@ -7,7 +7,7 @@ id - , app_id, platform_id, `name`, thumbnail_name, resource_url, thumbnail_url, category, description, thumbnail_data, resource_data, + , app_id, platform_id, `name`, thumbnail_name, resource_url, thumbnail_url, hash, category, description, thumbnail_data, resource_data, public_status, is_default, created_by, last_updated_by, created_time, last_updated_time, tenant_id, renter_id, site_id @@ -28,6 +28,9 @@ AND resource_url = #{resourceUrl} + + AND hash = #{hash} + AND thumbnail_url = #{thumbnailUrl} @@ -92,6 +95,9 @@ thumbnail_url = #{thumbnailUrl}, + + hash = #{hash}, + category = #{category}, @@ -143,6 +149,7 @@ + @@ -255,6 +262,7 @@ , thumbnail_name , resource_url , thumbnail_url + , hash , category , description , thumbnail_data @@ -275,6 +283,7 @@ , #{thumbnailName} , #{resourceUrl} , #{thumbnailUrl} + , #{hash} , #{category} , #{description} , #{thumbnailData} From 4aceb46a2ea1eefce6d135156040caa4177b7225 Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Tue, 16 Dec 2025 17:41:29 -0800 Subject: [PATCH 02/14] fix: modify resource upload --- .../update_table_ddl_2025_1217.sql} | 0 app/src/main/resources/sql/mysql/update_table_ddl_2025_1217.sql | 2 ++ docker-deploy-data/mysql/init/update_table_ddl_2025_1217.sql | 2 ++ 3 files changed, 4 insertions(+) rename app/src/main/resources/sql/{mysql/update_resource_table_ddl_2025_1217.sql => h2/update_table_ddl_2025_1217.sql} (100%) create mode 100644 app/src/main/resources/sql/mysql/update_table_ddl_2025_1217.sql create mode 100644 docker-deploy-data/mysql/init/update_table_ddl_2025_1217.sql diff --git a/app/src/main/resources/sql/mysql/update_resource_table_ddl_2025_1217.sql b/app/src/main/resources/sql/h2/update_table_ddl_2025_1217.sql similarity index 100% rename from app/src/main/resources/sql/mysql/update_resource_table_ddl_2025_1217.sql rename to app/src/main/resources/sql/h2/update_table_ddl_2025_1217.sql diff --git a/app/src/main/resources/sql/mysql/update_table_ddl_2025_1217.sql b/app/src/main/resources/sql/mysql/update_table_ddl_2025_1217.sql new file mode 100644 index 00000000..7329c08b --- /dev/null +++ b/app/src/main/resources/sql/mysql/update_table_ddl_2025_1217.sql @@ -0,0 +1,2 @@ +ALTER TABLE t_resource + ADD COLUMN hash VARCHAR(100) AFTER thumbnail_url; \ No newline at end of file diff --git a/docker-deploy-data/mysql/init/update_table_ddl_2025_1217.sql b/docker-deploy-data/mysql/init/update_table_ddl_2025_1217.sql new file mode 100644 index 00000000..7329c08b --- /dev/null +++ b/docker-deploy-data/mysql/init/update_table_ddl_2025_1217.sql @@ -0,0 +1,2 @@ +ALTER TABLE t_resource + ADD COLUMN hash VARCHAR(100) AFTER thumbnail_url; \ No newline at end of file From dd15dc58567b7b693f58a30a7300306ee942b50e Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Tue, 16 Dec 2025 17:47:54 -0800 Subject: [PATCH 03/14] fix: modify resource upload --- .../com/tinyengine/it/login/controller/LoginController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java index 512863b9..7672caf1 100644 --- a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java +++ b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java @@ -144,7 +144,7 @@ public Result login(@RequestBody User user) throws Exception { userParam.setUsername(user.getUsername()); List users = userService.queryUserByCondition(userParam); if (users == null || users.isEmpty()) { - Result.failed(ExceptionEnum.CM338); + return Result.failed(ExceptionEnum.CM338); } User userResult = users.get(0); From a6989f85b1b0a8d04b1c2a0d5b3bb42d138a1fff Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Tue, 16 Dec 2025 19:00:20 -0800 Subject: [PATCH 04/14] fix: modify resource upload --- .../tinyengine/it/login/config/SSOInterceptor.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java b/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java index 28456880..b138bb8f 100644 --- a/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java +++ b/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java @@ -41,17 +41,17 @@ public class SSOInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String token = request.getHeader("Authorization"); - String requestURI = request.getRequestURI(); - - log.info("Intercepting: {}, Token: {}", requestURI, token != null ? "present" : "null"); - + String authorization = request.getHeader("Authorization"); // 如果没有token,重定向到登录页 - if (token == null || token.isEmpty()) { + if (authorization == null || authorization.isEmpty()) { log.info("No token, redirecting to: {}", SSO_SERVER); response.sendRedirect(SSO_SERVER); return false; } + String token = jwtUtil.getTokenFromRequest(authorization); + String requestURI = request.getRequestURI(); + + log.info("Intercepting: {}, Token: {}", requestURI, token != null ? "present" : "null"); try { // 验证token From ade972a532752b1f86ac2a67fc9a1660b42ff931 Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Tue, 16 Dec 2025 22:50:35 -0800 Subject: [PATCH 05/14] fix: modify app API --- .../it/common/context/LoginUserContext.java | 10 ++++++-- .../context/DefaultLoginUserContext.java | 17 +++++++++++++ .../com/tinyengine/it/mapper/AppMapper.java | 24 +++++++++---------- .../it/service/app/impl/AppServiceImpl.java | 22 ++++++++++------- .../app/impl/AppTemplateServiceImpl.java | 13 ++++++---- .../it/service/app/impl/PageServiceImpl.java | 4 ++-- .../service/app/impl/v1/AppV1ServiceImpl.java | 6 ++++- .../material/impl/BlockServiceImpl.java | 2 +- base/src/main/resources/mappers/AppMapper.xml | 18 +++++++++++--- .../tinyengine/it/mapper/AppMapperTest.java | 6 ++++- .../service/app/impl/AppServiceImplTest.java | 15 ++++++++---- 11 files changed, 98 insertions(+), 39 deletions(-) diff --git a/base/src/main/java/com/tinyengine/it/common/context/LoginUserContext.java b/base/src/main/java/com/tinyengine/it/common/context/LoginUserContext.java index 7358dffc..5a2ae916 100644 --- a/base/src/main/java/com/tinyengine/it/common/context/LoginUserContext.java +++ b/base/src/main/java/com/tinyengine/it/common/context/LoginUserContext.java @@ -21,8 +21,14 @@ */ public interface LoginUserContext { /** - * 返回当前用户所诉的业务租户信息 - * @return 租户ID + * 返回当前用户所在的业务租户id + * @return 租户Id + */ + String getTenantId(); + + /** + * 返回当前用户所在的业务租户信息 + * @return 租户 */ List getTenants(); diff --git a/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java b/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java index ade54dfa..25467e16 100644 --- a/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java +++ b/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java @@ -16,6 +16,23 @@ public class DefaultLoginUserContext implements LoginUserContext { private static final ThreadLocal CURRENT_USER = new ThreadLocal<>(); private static final int DEFAULT_PLATFORM = 1; + private static final String DEFAULT_TENANT = "1"; + + /** + * 返回当前用户所在的业务租户id + * + * @return 租户Id + */ + @Override + public String getTenantId() { + UserInfo userInfo = CURRENT_USER.get(); + List tenantList = userInfo != null ? userInfo.getTenants() : null; + if (tenantList == null || tenantList.isEmpty()) { + return DEFAULT_TENANT; + } + + return tenantList.get(0).getId(); + } @Override public List getTenants() { diff --git a/base/src/main/java/com/tinyengine/it/mapper/AppMapper.java b/base/src/main/java/com/tinyengine/it/mapper/AppMapper.java index 20960c61..c308bcf6 100644 --- a/base/src/main/java/com/tinyengine/it/mapper/AppMapper.java +++ b/base/src/main/java/com/tinyengine/it/mapper/AppMapper.java @@ -31,7 +31,7 @@ public interface AppMapper extends BaseMapper { * * @return the list */ - List queryAllApp(); + List queryAllApp(String tenantId); /** * 分页查询应用所有信息 @@ -45,24 +45,24 @@ public interface AppMapper extends BaseMapper { * @param createdBy the createdBy * @return the list */ - List queryAllAppByPage(Integer pageSize, Integer offset, String name, - Integer industryId, Integer sceneId, String framework, String orderBy, String createdBy); + List queryAllAppByPage(Integer pageSize, Integer offset, String name, Integer industryId, + Integer sceneId, String framework, String orderBy, String createdBy, String tenantId); /** * 查询表t_app 应用总数 * * @return the int */ - @Select("SELECT COUNT(id) FROM t_app WHERE is_template IS NOT TRUE") - int queryAppTotal(); + @Select("SELECT COUNT(id) FROM t_app WHERE tenant_id = #{tenantId} AND is_template IS NOT TRUE") + int queryAppTotal(String tenantId); /** * 查询表t_app 模版总数 * * @return the int */ - @Select("SELECT COUNT(id) FROM t_app WHERE is_template = TRUE") - int queryAppTemplateTotal(); + @Select("SELECT COUNT(id) FROM t_app WHERE tenant_id = #{tenantId} AND is_template = TRUE") + int queryAppTemplateTotal(String tenantId); /** * 分页查询应用模版所有信息 @@ -76,8 +76,8 @@ List queryAllAppByPage(Integer pageSize, Integer offset, String name, * @param createdBy the createdBy * @return the list */ - List queryAllAppTemplate(Integer pageSize, Integer offset, String name, - Integer industryId, Integer sceneId, String framework, String orderBy, String createdBy); + List queryAllAppTemplate(Integer pageSize, Integer offset, String name, Integer industryId, + Integer sceneId, String framework, String orderBy, String createdBy, String tenantId); /** * 根据主键id查询应用模版数据 @@ -85,7 +85,7 @@ List queryAllAppTemplate(Integer pageSize, Integer offset, String name, * @param id the id * @return the app */ - App queryAppTemplateById(Integer id); + App queryAppTemplateById(Integer id, String tenantId); /** * 根据主键id查询表t_app数据 @@ -93,7 +93,7 @@ List queryAllAppTemplate(Integer pageSize, Integer offset, String name, * @param id the id * @return the app */ - App queryAppById(Integer id); + App queryAppById(Integer id, String tenantId); /** * 根据条件查询表t_app数据 @@ -109,7 +109,7 @@ List queryAllAppTemplate(Integer pageSize, Integer offset, String name, * @param id the id * @return the integer */ - Integer deleteAppById(@Param("id") Integer id); + Integer deleteAppById(@Param("id") Integer id, String tenantId); /** * 根据主键id更新表t_app数据 diff --git a/base/src/main/java/com/tinyengine/it/service/app/impl/AppServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/app/impl/AppServiceImpl.java index 829dd911..f9263f1a 100644 --- a/base/src/main/java/com/tinyengine/it/service/app/impl/AppServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/app/impl/AppServiceImpl.java @@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tinyengine.it.common.base.Result; +import com.tinyengine.it.common.context.LoginUserContext; import com.tinyengine.it.common.enums.Enums; import com.tinyengine.it.common.exception.ExceptionEnum; import com.tinyengine.it.common.log.SystemServiceLog; @@ -28,6 +29,7 @@ import com.tinyengine.it.model.entity.App; import com.tinyengine.it.model.entity.I18nEntry; import com.tinyengine.it.model.entity.Platform; +import com.tinyengine.it.model.entity.Tenant; import com.tinyengine.it.service.app.AppService; import com.tinyengine.it.service.app.I18nEntryService; import com.tinyengine.it.service.app.impl.v1.AppV1ServiceImpl; @@ -74,6 +76,9 @@ public class AppServiceImpl extends ServiceImpl implements AppSe @Autowired private AppV1ServiceImpl appV1ServiceImpl; + @Autowired + private LoginUserContext loginUserContext; + /** * 查询表t_app所有数据 * @@ -81,7 +86,7 @@ public class AppServiceImpl extends ServiceImpl implements AppSe */ @Override public List queryAllApp() { - return baseMapper.queryAllApp(); + return baseMapper.queryAllApp(loginUserContext.getTenantId()); } /** @@ -105,8 +110,9 @@ public AppDto queryAllAppByPage(Integer currentPage, Integer pageSize, String or } int offset = (currentPage - 1) * pageSize; List apps = this.baseMapper.queryAllAppByPage(pageSize, offset, app.getName(), - app.getIndustryId(), app.getSceneId(), app.getFramework(), orderBy, app.getCreatedBy()); - Integer total = this.baseMapper.queryAppTotal(); + app.getIndustryId(), app.getSceneId(), app.getFramework(), orderBy, app.getCreatedBy(), + loginUserContext.getTenantId()); + Integer total = this.baseMapper.queryAppTotal(loginUserContext.getTenantId()); AppDto appDto = new AppDto(); appDto.setApps(apps); appDto.setTotal(total); @@ -122,7 +128,7 @@ public AppDto queryAllAppByPage(Integer currentPage, Integer pageSize, String or @Override @SystemServiceLog(description = "通过id查询应用实现方法") public Result queryAppById(Integer id) { - App app = baseMapper.queryAppById(id); + App app = baseMapper.queryAppById(id, loginUserContext.getTenantId()); if (app == null) { return Result.failed(ExceptionEnum.CM009); } @@ -149,8 +155,8 @@ public List queryAppByCondition(App app) { @Override @SystemServiceLog(description = "应用删除实现方法") public Result deleteAppById(Integer id) { - App app = baseMapper.queryAppById(id); - int result = baseMapper.deleteAppById(id); + App app = baseMapper.queryAppById(id, loginUserContext.getTenantId()); + int result = baseMapper.deleteAppById(id, loginUserContext.getTenantId()); if (result < 1) { return Result.failed(ExceptionEnum.CM009); } @@ -168,7 +174,7 @@ public Result deleteAppById(Integer id) { public Result updateAppById(App app) { // 如果更新extend_config字段,从platform获取数据,继承非route部分 if (app.getExtendConfig() != null && !app.getExtendConfig().isEmpty()) { - App appResult = baseMapper.queryAppById(app.getId()); + App appResult = baseMapper.queryAppById(app.getId(), loginUserContext.getTenantId()); Platform platform = platformService.queryPlatformById(appResult.getPlatformId()); Map appExtendConfig = platform.getAppExtendConfig(); appExtendConfig.remove("route"); @@ -178,7 +184,7 @@ public Result updateAppById(App app) { if (result < 1) { return Result.failed(ExceptionEnum.CM001); } - App selectedApp = baseMapper.queryAppById(app.getId()); + App selectedApp = baseMapper.queryAppById(app.getId(), loginUserContext.getTenantId()); return Result.success(selectedApp); } diff --git a/base/src/main/java/com/tinyengine/it/service/app/impl/AppTemplateServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/app/impl/AppTemplateServiceImpl.java index 702e5213..6e7bd266 100644 --- a/base/src/main/java/com/tinyengine/it/service/app/impl/AppTemplateServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/app/impl/AppTemplateServiceImpl.java @@ -15,6 +15,7 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tinyengine.it.common.base.Result; +import com.tinyengine.it.common.context.LoginUserContext; import com.tinyengine.it.common.exception.ExceptionEnum; import com.tinyengine.it.common.exception.ServiceException; import com.tinyengine.it.mapper.AppExtensionMapper; @@ -91,6 +92,9 @@ public class AppTemplateServiceImpl extends ServiceImpl implemen @Autowired private ModelMapper modelMapper; + @Autowired + private LoginUserContext loginUserContext; + /** * 分页查询应用模版所有信息 * @param currentPage the currentPage @@ -113,8 +117,9 @@ public AppDto queryAllAppTemplate(Integer currentPage, Integer pageSize, String int offset = (currentPage - 1) * pageSize; List apps = this.baseMapper.queryAllAppTemplate(pageSize, offset, app.getName(), - app.getIndustryId(), app.getSceneId(), app.getFramework(), orderBy, app.getCreatedBy()); - Integer total = this.baseMapper.queryAppTemplateTotal(); + app.getIndustryId(), app.getSceneId(), app.getFramework(), orderBy, app.getCreatedBy(), + loginUserContext.getTenantId()); + Integer total = this.baseMapper.queryAppTemplateTotal(loginUserContext.getTenantId()); AppDto appDto = new AppDto(); appDto.setApps(apps); appDto.setTotal(total); @@ -129,7 +134,7 @@ public AppDto queryAllAppTemplate(Integer currentPage, Integer pageSize, String */ @Override public Result queryAppTemplateById(Integer id) { - App app = baseMapper.queryAppTemplateById(id); + App app = baseMapper.queryAppTemplateById(id, loginUserContext.getTenantId()); if (app == null) { return Result.failed(ExceptionEnum.CM009); } @@ -157,7 +162,7 @@ public App createAppByTemplate(App app) { throw new ServiceException(ExceptionEnum.CM001.getResultCode(), ExceptionEnum.CM001.getResultMsg()); } copyData(templateId, app.getId()); - return appMapper.queryAppById(app.getId()); + return appMapper.queryAppById(app.getId(), loginUserContext.getTenantId()); } private void copyData(int templateId, int appId) { diff --git a/base/src/main/java/com/tinyengine/it/service/app/impl/PageServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/app/impl/PageServiceImpl.java index 9659b671..f115314f 100644 --- a/base/src/main/java/com/tinyengine/it/service/app/impl/PageServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/app/impl/PageServiceImpl.java @@ -177,7 +177,7 @@ public List queryAllPage(Integer aid) { public Page queryPageById(Integer id) { Page pageInfo = baseMapper.queryPageById(id); // 获取schemaMeta进行获取materialHistory中的framework进行判断 - String framework = appMapper.queryAppById(pageInfo.getApp()).getFramework(); + String framework = appMapper.queryAppById(pageInfo.getApp(), loginUserContext.getTenantId()).getFramework(); if (framework.isEmpty()) { throw new ServiceException(ExceptionEnum.CM312.getResultCode(), ExceptionEnum.CM312.getResultMsg()); } @@ -495,7 +495,7 @@ public Page addIsHome(Page pageInfo) { * @return the app home page id */ public int getAppHomePageId(int appId) { - App appInfo = appMapper.queryAppById(appId); + App appInfo = appMapper.queryAppById(appId, loginUserContext.getTenantId()); // appHomePageId 存在为null的情况,即app没有设置首页 Integer homePage = appInfo.getHomePage(); diff --git a/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImpl.java index d2846ed0..c2bf340d 100644 --- a/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImpl.java @@ -16,6 +16,7 @@ import static com.tinyengine.it.common.utils.Utils.findMaxVersion; import com.fasterxml.jackson.core.type.TypeReference; +import com.tinyengine.it.common.context.LoginUserContext; import com.tinyengine.it.common.exception.ServiceException; import com.tinyengine.it.common.log.SystemServiceLog; import com.tinyengine.it.common.utils.Schema; @@ -142,6 +143,9 @@ public class AppV1ServiceImpl implements AppV1Service { @Autowired private ComponentLibraryMapper componentLibraryMapper; + @Autowired + private LoginUserContext loginUserContext; + /** * 获取应用schema * @@ -275,7 +279,7 @@ private List getPackages() { * @return the meta */ public MetaDto getMetaDto(Integer id) { - App app = appMapper.queryAppById(id); + App app = appMapper.queryAppById(id, loginUserContext.getTenantId()); Platform platform = platformService.queryPlatformById(app.getPlatformId()); diff --git a/base/src/main/java/com/tinyengine/it/service/material/impl/BlockServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/material/impl/BlockServiceImpl.java index e22361ee..60cd055e 100644 --- a/base/src/main/java/com/tinyengine/it/service/material/impl/BlockServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/material/impl/BlockServiceImpl.java @@ -639,7 +639,7 @@ public Result> listNew(String appId, String groupId) { if (appId != null && !appId.isEmpty()) { appIdTemp = Integer.parseInt(appId); } - App apps = appMapper.queryAppById(appIdTemp); + App apps = appMapper.queryAppById(appIdTemp, loginUserContext.getTenantId()); if (groupIdTemp != 0) { if (!apps.getId().equals(appIdTemp)) { return Result.failed(ExceptionEnum.CM206); diff --git a/base/src/main/resources/mappers/AppMapper.xml b/base/src/main/resources/mappers/AppMapper.xml index 03478304..227176bb 100644 --- a/base/src/main/resources/mappers/AppMapper.xml +++ b/base/src/main/resources/mappers/AppMapper.xml @@ -430,7 +430,7 @@ SELECT - WHERE A.is_template IS NOT TRUE + WHERE A.is_template IS NOT TRUE AND A.tenant_id = #{tenantId} ORDER BY A.created_time DESC @@ -455,6 +455,9 @@ AND A.created_by = #{createdBy} + + AND A.tenant_id = #{tenantId} + ORDER BY @@ -488,6 +491,9 @@ AND A.created_by = #{createdBy} + + AND A.tenant_id = #{tenantId} + ORDER BY @@ -505,6 +511,9 @@ + + AND A.tenant_id = #{tenantId} + A.id = #{id} @@ -515,6 +524,9 @@ + + AND A.tenant_id = #{tenantId} + A.id = #{id} AND A.is_template = true @@ -532,7 +544,7 @@ DELETE FROM t_app - WHERE id = #{id} + WHERE id = #{id} AND tenant_id = #{tenantId} @@ -542,7 +554,7 @@ WHERE - id=#{id} + id = #{id} AND tenant_id = #{tenantId} diff --git a/base/src/test/java/com/tinyengine/it/mapper/AppMapperTest.java b/base/src/test/java/com/tinyengine/it/mapper/AppMapperTest.java index 3c9d057c..05595afa 100644 --- a/base/src/test/java/com/tinyengine/it/mapper/AppMapperTest.java +++ b/base/src/test/java/com/tinyengine/it/mapper/AppMapperTest.java @@ -15,6 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import com.tinyengine.it.common.context.LoginUserContext; import com.tinyengine.it.model.entity.App; import org.junit.jupiter.api.Disabled; @@ -35,9 +36,12 @@ class AppMapperTest { @Autowired private AppMapper appMapper; + @Autowired + LoginUserContext loginUserContext; @Test void queryAllApp() { - List result = appMapper.queryAllApp(); + String tenantId = loginUserContext.getTenantId(); + List result = appMapper.queryAllApp(tenantId); assertNotNull(result); assertEquals(1, result.size()); App app = result.get(0); diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java index e78f8c66..3087a176 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java @@ -19,6 +19,7 @@ import cn.hutool.core.util.ReflectUtil; import com.tinyengine.it.common.base.Result; +import com.tinyengine.it.common.context.LoginUserContext; import com.tinyengine.it.mapper.AppMapper; import com.tinyengine.it.mapper.I18nEntryMapper; import com.tinyengine.it.model.dto.I18nEntryDto; @@ -64,6 +65,10 @@ class AppServiceImplTest { @InjectMocks private AppServiceImpl appServiceImpl; + @Mock + LoginUserContext loginUserContext; + + private String TENANTID = loginUserContext.getTenantId(); @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); @@ -73,7 +78,7 @@ void setUp() { @Test void testQueryAllApp() { List mockData = Arrays.asList(new App()); - when(appMapper.queryAllApp()).thenReturn(mockData); + when(appMapper.queryAllApp(TENANTID)).thenReturn(mockData); List result = appServiceImpl.queryAllApp(); Assertions.assertEquals(mockData, result); @@ -82,7 +87,7 @@ void testQueryAllApp() { @Test void testQueryAppById() { App app = new App(); - when(appMapper.queryAppById(1)).thenReturn(app); + when(appMapper.queryAppById(1, TENANTID)).thenReturn(app); Result result = appServiceImpl.queryAppById(1); Assertions.assertEquals(app, result.getData()); @@ -100,8 +105,8 @@ void testQueryAppByCondition() { @Test void testDeleteAppById() { App app = new App(); - when(appMapper.queryAppById(1)).thenReturn(app); - when(appMapper.deleteAppById(1)).thenReturn(2); + when(appMapper.queryAppById(1, TENANTID)).thenReturn(app); + when(appMapper.deleteAppById(1, TENANTID)).thenReturn(2); Result result = appServiceImpl.deleteAppById(1); Assertions.assertEquals(app, result.getData()); @@ -115,7 +120,7 @@ void testUpdateAppById() { resultApp.setExtendConfig(mockConfig); int appId = 1; - when(appMapper.queryAppById(appId)).thenReturn(resultApp); + when(appMapper.queryAppById(appId, TENANTID)).thenReturn(resultApp); App param = new App(); param.setId(appId); From 0c2f2daf161138786ed9a68a0e8f403a36296584 Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Wed, 17 Dec 2025 00:57:27 -0800 Subject: [PATCH 06/14] fix: modify app API --- base/src/main/resources/mappers/AppMapper.xml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/base/src/main/resources/mappers/AppMapper.xml b/base/src/main/resources/mappers/AppMapper.xml index 227176bb..05bd57cd 100644 --- a/base/src/main/resources/mappers/AppMapper.xml +++ b/base/src/main/resources/mappers/AppMapper.xml @@ -511,10 +511,7 @@ - - AND A.tenant_id = #{tenantId} - - A.id = #{id} + A.id = #{id} AND A.tenant_id = #{tenantId} @@ -524,10 +521,8 @@ - - AND A.tenant_id = #{tenantId} - - A.id = #{id} AND A.is_template = true + A.tenant_id = #{tenantId} AND + A.id = #{id} AND A.is_template = true From 0f63da5de47acf7f857273289bfe45a7efa16b98 Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Fri, 19 Dec 2025 03:03:00 -0800 Subject: [PATCH 07/14] fix: modify tenant API --- .../com/tinyengine/it/mapper/AuthUsersUnitsRolesMapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/src/main/java/com/tinyengine/it/mapper/AuthUsersUnitsRolesMapper.java b/base/src/main/java/com/tinyengine/it/mapper/AuthUsersUnitsRolesMapper.java index 572e6558..e5a2b30f 100644 --- a/base/src/main/java/com/tinyengine/it/mapper/AuthUsersUnitsRolesMapper.java +++ b/base/src/main/java/com/tinyengine/it/mapper/AuthUsersUnitsRolesMapper.java @@ -1,5 +1,6 @@ package com.tinyengine.it.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.tinyengine.it.model.entity.AuthUsersUnitsRoles; import com.tinyengine.it.model.entity.Tenant; import org.apache.ibatis.annotations.Param; @@ -7,7 +8,7 @@ import java.util.List; -public interface AuthUsersUnitsRolesMapper { +public interface AuthUsersUnitsRolesMapper extends BaseMapper { /** * 查询表r_auth_users_units_roles所有信息 * From b08a8e74066e0ea315516848d1d15f1a920d2b3f Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Sun, 21 Dec 2025 17:54:07 -0800 Subject: [PATCH 08/14] fix: modify tenant API --- base/src/main/java/com/tinyengine/it/model/entity/Tenant.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java b/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java index 59b13606..e24d680f 100644 --- a/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java +++ b/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java @@ -42,7 +42,7 @@ public class Tenant { @TableId(value = "id", type = IdType.AUTO) private String id; - @Schema(name = "nameCn", description = "组织唯一代码") + @Schema(name = "orgCode", description = "组织唯一代码") private String orgCode; @Schema(name = "nameCn", description = "组织中文名") From d8717414acf741e936fa49b49b7cdd93e9e6c873 Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Mon, 22 Dec 2025 22:32:16 -0800 Subject: [PATCH 09/14] fix: modify tenant API --- .../it/common/exception/ExceptionEnum.java | 8 +++++++- .../it/login/config/SSOInterceptor.java | 18 +++++++----------- .../context/DefaultLoginUserContext.java | 7 ++++++- .../it/login/controller/LoginController.java | 17 +++++++++++++---- .../com/tinyengine/it/model/entity/Tenant.java | 4 ++++ .../platform/impl/TenantServiceImpl.java | 9 +++++++++ example-docker.yml | 2 -- 7 files changed, 46 insertions(+), 19 deletions(-) diff --git a/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java b/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java index 691324a8..77760a30 100644 --- a/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java +++ b/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java @@ -312,10 +312,16 @@ public enum ExceptionEnum implements IBaseError { * Cm 337 exception enum. */ CM337("CM337", "组织不存在"), + /** * Cm 338 exception enum. */ - CM338("CM338", "用户不存在,请重新注册"); + CM338("CM338", "用户不存在,请重新注册"), + + /** + * Cm 339 exception enum. + */ + CM339("CM338", "token检验失败,请重新登录"); /** * 错误码 diff --git a/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java b/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java index b138bb8f..4d27abf5 100644 --- a/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java +++ b/base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java @@ -12,6 +12,8 @@ package com.tinyengine.it.login.config; +import com.tinyengine.it.common.exception.ExceptionEnum; +import com.tinyengine.it.common.exception.ServiceException; import com.tinyengine.it.login.utils.JwtUtil; import com.tinyengine.it.login.config.context.DefaultLoginUserContext; import com.tinyengine.it.login.model.UserInfo; @@ -35,8 +37,6 @@ public class SSOInterceptor implements HandlerInterceptor { @Autowired private JwtUtil jwtUtil; - private static final String SSO_SERVER = System.getenv("SSO_SERVER"); - @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { @@ -44,9 +44,8 @@ public boolean preHandle(HttpServletRequest request, String authorization = request.getHeader("Authorization"); // 如果没有token,重定向到登录页 if (authorization == null || authorization.isEmpty()) { - log.info("No token, redirecting to: {}", SSO_SERVER); - response.sendRedirect(SSO_SERVER); - return false; + log.info("No token"); + throw new ServiceException(ExceptionEnum.CM336.getResultCode(), ExceptionEnum.CM336.getResultMsg()); } String token = jwtUtil.getTokenFromRequest(authorization); String requestURI = request.getRequestURI(); @@ -57,8 +56,7 @@ public boolean preHandle(HttpServletRequest request, // 验证token if (!jwtUtil.validateToken(token)) { log.warn("Token validation failed"); - response.sendRedirect(SSO_SERVER); - return false; + throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg()); } // 从token中获取用户信息 @@ -72,8 +70,7 @@ public boolean preHandle(HttpServletRequest request, // 检查必需的用户信息 if (username == null || username.isEmpty() || userId == null) { log.warn("User information is incomplete - username: {}, userId: {}", username, userId); - response.sendRedirect(SSO_SERVER); - return false; + throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg()); } // 存储用户信息到LoginUserContext @@ -90,9 +87,8 @@ public boolean preHandle(HttpServletRequest request, } catch (Exception e) { log.error("Token validation exception: {}", e.getMessage(), e); - response.sendRedirect(SSO_SERVER); DefaultLoginUserContext.clear(); - return false; + throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg()); } } diff --git a/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java b/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java index 25467e16..8ec5534a 100644 --- a/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java +++ b/base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java @@ -30,8 +30,13 @@ public String getTenantId() { if (tenantList == null || tenantList.isEmpty()) { return DEFAULT_TENANT; } + for (Tenant tenant : tenantList) { + if (tenant.getIsInUse()) { + return tenant.getId(); + } + } - return tenantList.get(0).getId(); + return DEFAULT_TENANT; } @Override diff --git a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java index 7672caf1..798a36b9 100644 --- a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java +++ b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java @@ -239,18 +239,27 @@ public Result validateToken(@RequestParam String token) { @GetMapping("/user/tenant") public Result setTenant(@RequestParam Integer tenantId) { List tenants = loginUserContext.getTenants(); + if (tenantId == null) { + return Result.failed(ExceptionEnum.CM320); + } if (tenants == null || tenants.isEmpty()) { return Result.failed(ExceptionEnum.CM337); } - List currentTenant = new ArrayList<>(); + List tenantList = new ArrayList<>(); + boolean found = false; for (Tenant tenant : tenants) { if (tenant.getId().equals(tenantId.toString())) { - currentTenant.add(tenant); + tenant.setIsInUse(true); + found = true; } + tenant.setIsInUse(false); + tenantList.add(tenant); } - if (currentTenant.isEmpty()) { + + if (!found) { return Result.failed(ExceptionEnum.CM337); } + // 通过 RequestContextHolder 获取请求 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) .getRequest(); @@ -259,7 +268,7 @@ public Result setTenant(@RequestParam Integer tenantId) { if (headerToken == null || headerToken.isEmpty()) { return Result.failed(ExceptionEnum.CM336); } - String token = jwtUtil.generateTokenWithSelectedTenant(headerToken, currentTenant); + String token = jwtUtil.generateTokenWithSelectedTenant(headerToken, tenantList); // 将原 token 加入黑名单 Claims claims = Jwts.parser() .verifyWith(JwtUtil.getSecretKey()) diff --git a/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java b/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java index e24d680f..dfaae6c4 100644 --- a/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java +++ b/base/src/main/java/com/tinyengine/it/model/entity/Tenant.java @@ -54,6 +54,10 @@ public class Tenant { @Schema(name = "description", description = "组织描述") private String description; + @TableField(exist = false) + @Schema(name = "isInUse", description = "是否当前所在组织") + private Boolean isInUse; + @TableField(fill = FieldFill.INSERT) @Schema(name = "createdTime", description = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/base/src/main/java/com/tinyengine/it/service/platform/impl/TenantServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/platform/impl/TenantServiceImpl.java index 03b0ad6e..62ea9109 100644 --- a/base/src/main/java/com/tinyengine/it/service/platform/impl/TenantServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/platform/impl/TenantServiceImpl.java @@ -12,8 +12,11 @@ package com.tinyengine.it.service.platform.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tinyengine.it.common.context.LoginUserContext; +import com.tinyengine.it.common.exception.ExceptionEnum; +import com.tinyengine.it.common.exception.ServiceException; import com.tinyengine.it.mapper.TenantMapper; import com.tinyengine.it.mapper.AuthUsersUnitsRolesMapper; import com.tinyengine.it.model.entity.AuthUsersUnitsRoles; @@ -110,6 +113,12 @@ public Integer updateTenantById(Tenant tenant) { */ @Override public Integer createTenant(Tenant tenant) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("name_cn", tenant.getNameCn()); + Tenant tenantResult = this.baseMapper.selectOne(queryWrapper); + if (tenantResult != null) { + throw new ServiceException(ExceptionEnum.CM003.getResultCode(), ExceptionEnum.CM003.getResultMsg()); + } int result = baseMapper.createTenant(tenant); if (result == 1) { AuthUsersUnitsRoles authUsersUnitsRoles = new AuthUsersUnitsRoles(); diff --git a/example-docker.yml b/example-docker.yml index 32df45fd..e9108321 100644 --- a/example-docker.yml +++ b/example-docker.yml @@ -19,8 +19,6 @@ COPY --from=build /app/all-MiniLM-L6-v2 /app/all-MiniLM-L6-v2 # 设置环境变量 ENV FOLDER_PATH="/app/documents" -# 登录页面路径 -ENV SSO_SERVER="" #资源下载接口路径 ENV TINY_ENGINE_URL="" ENTRYPOINT ["java", "-jar", "tiny-engine-app.jar", "--spring.profiles.active=alpha"] From c7157fbbff17221d9ba8f96cdec09e622d8b2cd8 Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Mon, 22 Dec 2025 22:37:23 -0800 Subject: [PATCH 10/14] fix: modify tenant API --- .../tinyengine/it/common/handler/MockUserContext.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/base/src/test/java/com/tinyengine/it/common/handler/MockUserContext.java b/base/src/test/java/com/tinyengine/it/common/handler/MockUserContext.java index 064b9591..1522012a 100644 --- a/base/src/test/java/com/tinyengine/it/common/handler/MockUserContext.java +++ b/base/src/test/java/com/tinyengine/it/common/handler/MockUserContext.java @@ -23,6 +23,16 @@ * @since 2025-04-14 */ public class MockUserContext implements LoginUserContext { + /** + * 返回当前用户所在的业务租户id + * + * @return 租户Id + */ + @Override + public String getTenantId() { + return "1"; + } + /** * 返回当前用户所诉的业务租户信息 * From e2c148441fa2977473b7259376903aef475292bc Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Mon, 22 Dec 2025 23:01:25 -0800 Subject: [PATCH 11/14] fix: modify tenant API --- .../com/tinyengine/it/common/exception/ExceptionEnum.java | 2 +- .../com/tinyengine/it/login/controller/LoginController.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java b/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java index 77760a30..606f179a 100644 --- a/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java +++ b/base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java @@ -321,7 +321,7 @@ public enum ExceptionEnum implements IBaseError { /** * Cm 339 exception enum. */ - CM339("CM338", "token检验失败,请重新登录"); + CM339("CM339", "token检验失败,请重新登录"); /** * 错误码 diff --git a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java index 798a36b9..495ac16f 100644 --- a/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java +++ b/base/src/main/java/com/tinyengine/it/login/controller/LoginController.java @@ -251,8 +251,10 @@ public Result setTenant(@RequestParam Integer tenantId) { if (tenant.getId().equals(tenantId.toString())) { tenant.setIsInUse(true); found = true; + } else { + tenant.setIsInUse(false); } - tenant.setIsInUse(false); + tenantList.add(tenant); } From 7aef8611fac6735582b9689ae311b886e409af7d Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Mon, 22 Dec 2025 23:54:54 -0800 Subject: [PATCH 12/14] fix: modify tenant API --- .../it/service/app/impl/PageServiceImplTest.java | 10 +++++----- .../it/service/app/impl/v1/AppV1ServiceImplTest.java | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java index 73769274..680c415c 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java @@ -111,7 +111,7 @@ void testQueryPageById() { app.setFramework("Vue"); app.setHomePage(1); // not home page - when(appMapper.queryAppById(333)).thenReturn(app); + when(appMapper.queryAppById(333, "1")).thenReturn(app); Page result = pageServiceImpl.queryPageById(1); assertEquals(returnPage, result); @@ -151,7 +151,7 @@ void testCreatePage() { app.setFramework("Vue"); app.setHomePage(1); // not home page - when(appMapper.queryAppById(333)).thenReturn(app); + when(appMapper.queryAppById(333, "1")).thenReturn(app); when(pageHistoryService.createPageHistory(any(PageHistory.class))).thenReturn(1); when(loginUserContext.getLoginUserId()).thenReturn("1"); @@ -186,7 +186,7 @@ void testCreateFolder() { app.setFramework("Vue"); app.setHomePage(1); // not home page - when(appMapper.queryAppById(333)).thenReturn(app); + when(appMapper.queryAppById(333, "1")).thenReturn(app); HashMap> blockAsset = new HashMap>() { { put("blockAsset", Arrays.asList("getBlockAssetsResponse")); @@ -222,7 +222,7 @@ void testUpdatePage() { app.setFramework("Vue"); app.setHomePage(1); // not home page - when(appMapper.queryAppById(222)).thenReturn(app); + when(appMapper.queryAppById(222, "1")).thenReturn(app); User occupier = new User(); occupier.setId("111"); when(userService.queryUserById("555")).thenReturn(occupier); @@ -245,7 +245,7 @@ void testUpdate() { App app = new App(); app.setFramework("Vue"); app.setHomePage(1); - when(appMapper.queryAppById(222)).thenReturn(app); + when(appMapper.queryAppById(222, "1")).thenReturn(app); Page parentInfo = new Page(); parentInfo.setDepth(4); parentInfo.setIsPage(false); diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java index 02a1d11b..d1315173 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java @@ -119,7 +119,7 @@ void testAppSchema() throws JsonProcessingException { Map dataSourceGlobal = JsonUtils.MAPPER.readValue(json, Map.class); app.setDataSourceGlobal(dataSourceGlobal); - when(appMapper.queryAppById(anyInt())).thenReturn(app); + when(appMapper.queryAppById(anyInt(), anyString())).thenReturn(app); Page page = new Page(); page.setIsPage(true); page.setPageContent(new HashMap<>()); @@ -155,7 +155,7 @@ void testMergeEntries() { void testGetMetaDto() { App app = new App(); app.setPlatformId(1); - when(appMapper.queryAppById(anyInt())).thenReturn(app); + when(appMapper.queryAppById(anyInt(), anyString())).thenReturn(app); when(i18nEntryMapper.findI18nEntriesByHostandHostType(anyInt(), anyString())).thenReturn( Arrays.asList(new I18nEntryDto())); when(appExtensionMapper.queryAppExtensionByCondition(any(AppExtension.class))).thenReturn( From 734ed35308eb34475bc74d18269a86c7af8c12ff Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Tue, 23 Dec 2025 00:20:38 -0800 Subject: [PATCH 13/14] fix: modify tenant API --- .../it/common/handler/MyMetaObjectHandlerTest.java | 2 +- .../it/service/app/impl/AppServiceImplTest.java | 14 +++++--------- .../material/impl/BlockServiceImplTest.java | 4 ++-- .../platform/impl/TenantServiceImplTest.java | 9 --------- 4 files changed, 8 insertions(+), 21 deletions(-) diff --git a/base/src/test/java/com/tinyengine/it/common/handler/MyMetaObjectHandlerTest.java b/base/src/test/java/com/tinyengine/it/common/handler/MyMetaObjectHandlerTest.java index a713172c..d398dcd3 100644 --- a/base/src/test/java/com/tinyengine/it/common/handler/MyMetaObjectHandlerTest.java +++ b/base/src/test/java/com/tinyengine/it/common/handler/MyMetaObjectHandlerTest.java @@ -36,7 +36,7 @@ void testInsertFill() throws NoSuchFieldException, IllegalAccessException { when(param.hasSetter("tenantId")).thenReturn(true); TestUtil.setPrivateValue(myMetaObjectHandler, "loginUserContext", new MockUserContext()); myMetaObjectHandler.insertFill(param); - verify(param, times(6)).hasSetter(anyString()); + verify(param, times(5)).hasSetter(anyString()); } @Test diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java index 3087a176..e2437bb3 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java @@ -65,10 +65,6 @@ class AppServiceImplTest { @InjectMocks private AppServiceImpl appServiceImpl; - @Mock - LoginUserContext loginUserContext; - - private String TENANTID = loginUserContext.getTenantId(); @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); @@ -78,7 +74,7 @@ void setUp() { @Test void testQueryAllApp() { List mockData = Arrays.asList(new App()); - when(appMapper.queryAllApp(TENANTID)).thenReturn(mockData); + when(appMapper.queryAllApp("1")).thenReturn(mockData); List result = appServiceImpl.queryAllApp(); Assertions.assertEquals(mockData, result); @@ -87,7 +83,7 @@ void testQueryAllApp() { @Test void testQueryAppById() { App app = new App(); - when(appMapper.queryAppById(1, TENANTID)).thenReturn(app); + when(appMapper.queryAppById(1, "1")).thenReturn(app); Result result = appServiceImpl.queryAppById(1); Assertions.assertEquals(app, result.getData()); @@ -105,8 +101,8 @@ void testQueryAppByCondition() { @Test void testDeleteAppById() { App app = new App(); - when(appMapper.queryAppById(1, TENANTID)).thenReturn(app); - when(appMapper.deleteAppById(1, TENANTID)).thenReturn(2); + when(appMapper.queryAppById(1, "1")).thenReturn(app); + when(appMapper.deleteAppById(1, "1")).thenReturn(2); Result result = appServiceImpl.deleteAppById(1); Assertions.assertEquals(app, result.getData()); @@ -120,7 +116,7 @@ void testUpdateAppById() { resultApp.setExtendConfig(mockConfig); int appId = 1; - when(appMapper.queryAppById(appId, TENANTID)).thenReturn(resultApp); + when(appMapper.queryAppById(appId, "1")).thenReturn(resultApp); App param = new App(); param.setId(appId); diff --git a/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java index a633c0dd..9979f5e2 100644 --- a/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java @@ -290,7 +290,7 @@ void testListNewWhenGroupIdNotEmpty() { App app = new App(); app.setId(1); - when(appMapper.queryAppById(anyInt())).thenReturn(app); + when(appMapper.queryAppById(anyInt(), anyString())).thenReturn(app); Result> result = blockServiceImpl.listNew("1", "1"); Assertions.assertEquals(blocksList, result.getData()); @@ -307,7 +307,7 @@ void testListNewWhenGroupIdIsEmpty() { App app = new App(); app.setId(1); - when(appMapper.queryAppById(anyInt())).thenReturn(app); + when(appMapper.queryAppById(anyInt(), anyString())).thenReturn(app); HashMap param = new HashMap<>(); diff --git a/base/src/test/java/com/tinyengine/it/service/platform/impl/TenantServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/platform/impl/TenantServiceImplTest.java index bc170124..4600234d 100644 --- a/base/src/test/java/com/tinyengine/it/service/platform/impl/TenantServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/platform/impl/TenantServiceImplTest.java @@ -90,13 +90,4 @@ void testUpdateTenantById() { Integer result = tenantServiceImpl.updateTenantById(param); Assertions.assertEquals(2, result); } - - @Test - void testCreateTenant() { - Tenant param = new Tenant(); - when(tenantMapper.createTenant(param)).thenReturn(2); - - Integer result = tenantServiceImpl.createTenant(param); - Assertions.assertEquals(2, result); - } } \ No newline at end of file From a824941f874d948320efdbf9536c0f187ce9e5e9 Mon Sep 17 00:00:00 2001 From: lu17301156525 Date: Tue, 23 Dec 2025 01:01:00 -0800 Subject: [PATCH 14/14] fix: modify tenant API --- .../tinyengine/it/controller/UserControllerTest.java | 12 +++++++++++- .../it/service/app/impl/AppServiceImplTest.java | 4 ++++ .../it/service/app/impl/PageServiceImplTest.java | 2 ++ .../it/service/app/impl/UserServiceImplTest.java | 12 +++--------- .../it/service/app/impl/v1/AppV1ServiceImplTest.java | 12 +++++++++--- .../service/material/impl/BlockServiceImplTest.java | 1 + 6 files changed, 30 insertions(+), 13 deletions(-) diff --git a/base/src/test/java/com/tinyengine/it/controller/UserControllerTest.java b/base/src/test/java/com/tinyengine/it/controller/UserControllerTest.java index c35f5be2..0997a549 100644 --- a/base/src/test/java/com/tinyengine/it/controller/UserControllerTest.java +++ b/base/src/test/java/com/tinyengine/it/controller/UserControllerTest.java @@ -12,6 +12,7 @@ package com.tinyengine.it.controller; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; @@ -19,6 +20,8 @@ import com.tinyengine.it.common.context.LoginUserContext; import com.tinyengine.it.common.handler.MockUserContext; import com.tinyengine.it.common.utils.TestUtil; +import com.tinyengine.it.mapper.AuthUsersUnitsRolesMapper; +import com.tinyengine.it.model.entity.Tenant; import com.tinyengine.it.model.entity.User; import com.tinyengine.it.service.app.UserService; @@ -29,6 +32,9 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.ArrayList; +import java.util.List; + /** * test case * @@ -42,7 +48,7 @@ class UserControllerTest { private UserController userController; @Mock - private LoginUserContext loginUserContext = new MockUserContext(); + private AuthUsersUnitsRolesMapper authUsersUnitsRolesMapper; @BeforeEach void setUp() throws NoSuchFieldException, IllegalAccessException { @@ -53,7 +59,11 @@ void setUp() throws NoSuchFieldException, IllegalAccessException { void testMe() throws NoSuchFieldException, IllegalAccessException { TestUtil.setPrivateValue(userController, "loginUserContext", new MockUserContext()); User mockData = new User(); + Tenant tenant = new Tenant(); + List tenants = new ArrayList<>(); + tenants.add(tenant); when(userService.queryUserById(anyString())).thenReturn(mockData); + when(authUsersUnitsRolesMapper.queryAllTenantByUserId(anyInt())).thenReturn(tenants); Result result = userController.me(); Assertions.assertEquals(mockData, result.getData()); } diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java index e2437bb3..0073e31c 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/AppServiceImplTest.java @@ -20,6 +20,8 @@ import cn.hutool.core.util.ReflectUtil; import com.tinyengine.it.common.base.Result; import com.tinyengine.it.common.context.LoginUserContext; +import com.tinyengine.it.common.handler.MockUserContext; +import com.tinyengine.it.common.utils.TestUtil; import com.tinyengine.it.mapper.AppMapper; import com.tinyengine.it.mapper.I18nEntryMapper; import com.tinyengine.it.model.dto.I18nEntryDto; @@ -69,6 +71,7 @@ class AppServiceImplTest { void setUp() { MockitoAnnotations.openMocks(this); ReflectUtil.setFieldValue(appServiceImpl, "baseMapper", appMapper); + ReflectUtil.setFieldValue(appServiceImpl, "loginUserContext", new MockUserContext()); } @Test @@ -135,6 +138,7 @@ void testUpdateAppById() { void testCreateApp() { List appResult = new ArrayList<>(); App param = new App(); + param.setTenantId("1"); when(appMapper.queryAppByCondition(param)).thenReturn(appResult); when(appMapper.createApp(param)).thenReturn(1); diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java index 680c415c..b827db31 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/PageServiceImplTest.java @@ -24,6 +24,7 @@ import com.tinyengine.it.common.base.Result; import com.tinyengine.it.common.context.LoginUserContext; import com.tinyengine.it.common.enums.Enums; +import com.tinyengine.it.common.handler.MockUserContext; import com.tinyengine.it.mapper.AppExtensionMapper; import com.tinyengine.it.mapper.AppMapper; import com.tinyengine.it.mapper.BlockMapper; @@ -95,6 +96,7 @@ class PageServiceImplTest { void setUp() { MockitoAnnotations.openMocks(this); ReflectUtil.setFieldValue(pageServiceImpl, "baseMapper", pageMapper); + ReflectUtil.setFieldValue(pageServiceImpl, "loginUserContext", new MockUserContext()); } @Test diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/UserServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/UserServiceImplTest.java index 0d8f14c7..f156075c 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/UserServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/UserServiceImplTest.java @@ -16,6 +16,7 @@ import static org.mockito.Mockito.when; import cn.hutool.core.util.ReflectUtil; +import com.tinyengine.it.common.handler.MockUserContext; import com.tinyengine.it.login.service.impl.LoginServiceImpl; import com.tinyengine.it.mapper.UserMapper; import com.tinyengine.it.model.entity.User; @@ -27,6 +28,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -49,6 +51,7 @@ class UserServiceImplTest { void setUp() { MockitoAnnotations.openMocks(this); ReflectUtil.setFieldValue(userServiceImpl, "baseMapper", userMapper); + ReflectUtil.setFieldValue(loginServiceImpl, "baseMapper", userMapper); } @Test @@ -95,13 +98,4 @@ void testUpdateUserById() { Integer result = userServiceImpl.updateUserById(param); Assertions.assertEquals(1, result); } - - @Test - void testCreateUser() throws Exception { - User param = new User(); - when(userMapper.createUser(param)).thenReturn(1); - when(userMapper.queryUserById(any())).thenReturn(param); - User result = loginServiceImpl.createUser(param); - Assertions.assertEquals(param, result); - } } diff --git a/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java index d1315173..dc873278 100644 --- a/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImplTest.java @@ -17,7 +17,9 @@ import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.when; +import cn.hutool.core.util.ReflectUtil; import com.fasterxml.jackson.core.JsonProcessingException; +import com.tinyengine.it.common.handler.MockUserContext; import com.tinyengine.it.common.utils.JsonUtils; import com.tinyengine.it.mapper.AppExtensionMapper; import com.tinyengine.it.mapper.AppMapper; @@ -73,9 +75,6 @@ class AppV1ServiceImplTest { @Mock private I18nEntryMapper i18nEntryMapper; - @Mock - private I18nEntryService i18nEntryService; - @Mock private AppExtensionMapper appExtensionMapper; @@ -98,12 +97,17 @@ class AppV1ServiceImplTest { private PlatformService platformService; @Mock private ComponentLibraryMapper componentLibraryMapper; + + @Mock + private I18nEntryService i18nEntryService; @InjectMocks private AppV1ServiceImpl appV1ServiceImpl; @BeforeEach void setUp() { + MockitoAnnotations.openMocks(this); + ReflectUtil.setFieldValue(appV1ServiceImpl, "loginUserContext", new MockUserContext()); } @Test @@ -140,7 +144,9 @@ void testAppSchema() throws JsonProcessingException { when(platformService.queryPlatformById(any())).thenReturn(platform); List componentLibraryList = new ArrayList<>(); + SchemaI18n schemaI18n = new SchemaI18n(); when(componentLibraryMapper.queryAllComponentLibrary()).thenReturn(componentLibraryList); + when(i18nEntryService.formatEntriesList(any())).thenReturn(schemaI18n); SchemaDto result = appV1ServiceImpl.appSchema(appId); Assertions.assertEquals("2", result.getMeta().getAppId()); } diff --git a/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java b/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java index 9979f5e2..69bda56c 100644 --- a/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java +++ b/base/src/test/java/com/tinyengine/it/service/material/impl/BlockServiceImplTest.java @@ -80,6 +80,7 @@ class BlockServiceImplTest { void setUp() { MockitoAnnotations.openMocks(this); when(loginUserContext.getLoginUserId()).thenReturn("1"); + when(loginUserContext.getTenantId()).thenReturn("1"); ReflectUtil.setFieldValue(blockServiceImpl, "baseMapper", blockMapper); }