Merge branch 'master' of gitee.com:youlaiorg/youlai-boot

This commit is contained in:
2026-07-31 11:52:06 +08:00
9 changed files with 37 additions and 15 deletions

View File

@@ -8,7 +8,7 @@ import java.util.Set;
* 由 system 模块提供适配器实现,framework 层通过此接口获取角色权限集合, * 由 system 模块提供适配器实现,framework 层通过此接口获取角色权限集合,
* 不直接依赖 system 模块的 {@code RoleMenuService}。 * 不直接依赖 system 模块的 {@code RoleMenuService}。
* *
* @see com.youlai.boot.system.security.port.PermissionAdapter * @see com.youlai.boot.system.security.adapter.PermissionAdapter
*/ */
public interface PermissionPort { public interface PermissionPort {

View File

@@ -9,7 +9,7 @@ import com.youlai.boot.framework.security.model.SecurityUser;
* 由 system 模块提供适配器实现,framework 层通过此接口获取认证数据, * 由 system 模块提供适配器实现,framework 层通过此接口获取认证数据,
* 不直接依赖 system 模块的 {@code UserService} / {@code UserSocialService}。 * 不直接依赖 system 模块的 {@code UserService} / {@code UserSocialService}。
* *
* @see com.youlai.boot.system.security.port.UserAuthenticationAdapter * @see com.youlai.boot.system.security.adapter.UserAuthenticationAdapter
*/ */
public interface UserAuthenticationPort { public interface UserAuthenticationPort {

View File

@@ -13,7 +13,7 @@ import com.youlai.boot.common.result.ExcelResult;
import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.boot.common.util.ExcelUtils; import com.youlai.boot.common.util.ExcelUtils;
import com.youlai.boot.system.listener.UserImportListener; import com.youlai.boot.system.service.UserImportReader;
import com.youlai.boot.system.model.form.EmailUpdateForm; import com.youlai.boot.system.model.form.EmailUpdateForm;
import com.youlai.boot.system.model.form.MobileUpdateForm; import com.youlai.boot.system.model.form.MobileUpdateForm;
import com.youlai.boot.system.model.form.PasswordUpdateForm; import com.youlai.boot.system.model.form.PasswordUpdateForm;
@@ -184,9 +184,9 @@ public class UserController {
@PreAuthorize("@ss.hasPerm('sys:user:import')") @PreAuthorize("@ss.hasPerm('sys:user:import')")
@Log(module = LogModuleEnum.USER, value = ActionTypeEnum.IMPORT) @Log(module = LogModuleEnum.USER, value = ActionTypeEnum.IMPORT)
public Result<ExcelResult> importUsers(MultipartFile file) throws IOException { public Result<ExcelResult> importUsers(MultipartFile file) throws IOException {
UserImportListener listener = new UserImportListener(); UserImportReader reader = new UserImportReader();
ExcelUtils.importExcel(file.getInputStream(), UserImportForm.class, listener); ExcelUtils.importExcel(file.getInputStream(), UserImportForm.class, reader);
return Result.success(listener.getExcelResult()); return Result.success(reader.getExcelResult());
} }
@Operation(summary = "导出用户") @Operation(summary = "导出用户")

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.system.job; package com.youlai.boot.system.schedule;
import com.youlai.boot.support.sse.SseService; import com.youlai.boot.support.sse.SseService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@@ -0,0 +1,23 @@
package com.youlai.boot.system.schedule;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* XXL-JOB 示例任务。
* <p>
* 需在调度中心配置同名任务后方可执行。
*
* @author Ray.Hao
* @since 3.1.0
*/
@Component
@Slf4j
public class XxlJobSample {
@XxlJob("sampleJob")
public void execute() {
log.info("XXL-JOB 示例任务执行");
}
}

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.system.security.port; package com.youlai.boot.system.security.adapter;
import com.youlai.boot.framework.security.port.PermissionPort; import com.youlai.boot.framework.security.port.PermissionPort;
import com.youlai.boot.system.service.RoleMenuService; import com.youlai.boot.system.service.RoleMenuService;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.system.security.port; package com.youlai.boot.system.security.adapter;
import com.youlai.boot.common.enums.SocialPlatformEnum; import com.youlai.boot.common.enums.SocialPlatformEnum;
import com.youlai.boot.framework.security.model.SecurityUser; import com.youlai.boot.framework.security.model.SecurityUser;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.system.listener; package com.youlai.boot.system.service;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
@@ -17,7 +17,6 @@ import com.youlai.boot.system.enums.DictCodeEnum;
import com.youlai.boot.system.model.entity.SysUser; import com.youlai.boot.system.model.entity.SysUser;
import com.youlai.boot.system.model.entity.*; import com.youlai.boot.system.model.entity.*;
import com.youlai.boot.system.model.form.UserImportForm; import com.youlai.boot.system.model.form.UserImportForm;
import com.youlai.boot.system.service.*;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@@ -28,15 +27,15 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* 用户导入监听器 * 用户导入读取器。
* <p> * <p>
* <a href="https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read#%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E8%AF%BB%E7%9A%84%E7%9B%91%E5%90%AC%E5%99%A8">最简单的读的监听器</a> * 基于 EasyExcel 的 {@link AnalysisEventListener},逐行读取 Excel 并完成校验、持久化。
* *
* @author Ray * @author Ray
* @since 2022/4/10 * @since 2022/4/10
*/ */
@Slf4j @Slf4j
public class UserImportListener extends AnalysisEventListener<UserImportForm> { public class UserImportReader extends AnalysisEventListener<UserImportForm> {
/** /**
* Excel 导入结果 * Excel 导入结果
@@ -62,7 +61,7 @@ public class UserImportListener extends AnalysisEventListener<UserImportForm> {
* 构造方法 * 构造方法
* <p>在构造方法中给需要查询的内容查询好,尽量避免每条数据查询一次</p> * <p>在构造方法中给需要查询的内容查询好,尽量避免每条数据查询一次</p>
*/ */
public UserImportListener() { public UserImportReader() {
this.userService = SpringUtil.getBean(UserService.class); this.userService = SpringUtil.getBean(UserService.class);
this.passwordEncoder = SpringUtil.getBean(PasswordEncoder.class); this.passwordEncoder = SpringUtil.getBean(PasswordEncoder.class);
this.userRoleService = SpringUtil.getBean(UserRoleService.class); this.userRoleService = SpringUtil.getBean(UserRoleService.class);