用户模块和设备模块存在循环引用,把用户模块常用方法抽出一个工具类,以后设备模块等和用户相关的模块,直接引用工具类,避免循环引用

--DeviceServiceImpl.java 修改设备模块获取用户名的方式,使用用户工具类
--SysUserService.java 新建用户工具类,定义了赋值用户名方法
--SysUserServiceImpl.java 实现工具类,重写了赋值用户名的方法
This commit is contained in:
剑雨
2025-04-03 09:41:14 +08:00
parent 2fb7281d07
commit 083e7071f0
3 changed files with 51 additions and 8 deletions
@@ -22,7 +22,6 @@ import cn.hutool.core.util.RandomUtil;
import xiaozhi.common.constant.Constant;
import xiaozhi.common.exception.RenException;
import xiaozhi.common.page.ExtendPageData;
import xiaozhi.common.page.PageData;
import xiaozhi.common.service.impl.BaseServiceImpl;
import xiaozhi.common.user.UserDetail;
import xiaozhi.common.utils.ConvertUtils;
@@ -36,14 +35,14 @@ import xiaozhi.modules.device.entity.DeviceEntity;
import xiaozhi.modules.device.service.DeviceService;
import xiaozhi.modules.device.vo.UserShowDeviceListVO;
import xiaozhi.modules.security.user.SecurityUser;
import xiaozhi.modules.sys.service.SysUserService;
import xiaozhi.modules.sys.service.SysUserUtilService;
@Service
public class DeviceServiceImpl extends BaseServiceImpl<DeviceDao, DeviceEntity> implements DeviceService {
private final DeviceDao deviceDao;
private final SysUserService sysUserService;
private final SysUserUtilService sysUserUtilService;
private final String frontedUrl;
@@ -51,11 +50,11 @@ public class DeviceServiceImpl extends BaseServiceImpl<DeviceDao, DeviceEntity>
private final RedisTemplate<String, Object> redisTemplate;
// 添加构造函数来初始化 deviceMapper
public DeviceServiceImpl(DeviceDao deviceDao, SysUserService sysUserService,
public DeviceServiceImpl(DeviceDao deviceDao, SysUserUtilService sysUserUtilService,
@Value("${app.fronted-url:http://localhost:8001}") String frontedUrl,
RedisTemplate<String, Object> redisTemplate) {
this.deviceDao = deviceDao;
this.sysUserService = sysUserService;
this.sysUserUtilService = sysUserUtilService;
this.frontedUrl = frontedUrl;
this.redisTemplate = redisTemplate;
}
@@ -239,9 +238,8 @@ public class DeviceServiceImpl extends BaseServiceImpl<DeviceDao, DeviceEntity>
UserShowDeviceListVO vo = ConvertUtils.sourceToTarget(device, UserShowDeviceListVO.class);
// 把最后修改的时间,改为简短描述的时间
vo.setRecentChatTime(DateUtils.getShortTime(device.getUpdateDate()));
// 获取用户名
String username = sysUserService.getByUserId(device.getUserId()).getUsername();
vo.setBindUserName(username);
sysUserUtilService.assignUsername(device.getUserId(),
vo::setBindUserName);
vo.setDeviceType(device.getBoard());
return vo;
}).toList();
@@ -0,0 +1,19 @@
package xiaozhi.modules.sys.service;
import java.util.function.Consumer;
/**
* 定义一个系统用户工具类,避免和用户模块循环依赖
* 如用户和设备互相依赖,用户需要获取所有设备,设备又需要获取每个设备的用户名
* @author zjy
* @since 2025-4-2
*/
public interface SysUserUtilService {
/**
* 赋值用户名
* @param userId 用户id
* @param setter 赋值方法
*/
void assignUsername( Long userId, Consumer<String> setter);
}
@@ -0,0 +1,26 @@
package xiaozhi.modules.sys.service.impl;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import xiaozhi.common.redis.RedisUtils;
import xiaozhi.common.service.impl.BaseServiceImpl;
import xiaozhi.modules.sys.dao.SysUserDao;
import xiaozhi.modules.sys.entity.SysUserEntity;
import xiaozhi.modules.sys.service.SysUserUtilService;
import java.util.function.Consumer;
@Service
@AllArgsConstructor
public class SysUserUtilServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntity> implements SysUserUtilService {
private RedisUtils redisUtils;
@Override
public void assignUsername(Long userId, Consumer<String> setter) {
SysUserEntity entity = baseDao.selectById(userId);
if (entity != null) {
setter.accept(entity.getUsername());
}
}
}