From d10ba456d70e0a7c5970c80f79906b79d9ec571e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Mon, 31 Mar 2025 15:26:46 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E5=88=A0=E9=99=A4=E7=94=A8=E6=88=B7=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E7=BC=BA=E5=B0=91=E5=AF=B9=E8=AF=9D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20--AdminController.java=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=B0=83=E7=94=A8=E7=9A=84=E6=96=B9=E6=B3=95=E5=90=8D?= =?UTF-8?q?=E5=AD=97=20--AgentService.java=20=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E7=94=A8=E6=88=B7id=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E4=BD=93=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=20--AgentServiceImpl.java=20=E5=AE=9E=E7=8E=B0=E4=BA=86?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=B9=E6=B3=95=20--DeviceService.java?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=8C=87=E5=AE=9A=E7=94=A8=E6=88=B7?= =?UTF-8?q?id=E8=AE=BE=E5=A4=87=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=20--DeviceServiceImpl.java=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=BA=86=E5=88=A0=E9=99=A4=E6=96=B9=E6=B3=95=20--SysU?= =?UTF-8?q?serService.java=20=E4=BF=AE=E6=94=B9=E5=88=A0=E9=99=A4=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E7=9A=84=E6=96=B9=E6=B3=95=E5=90=8D=E5=AD=97=20--SysU?= =?UTF-8?q?serServiceImpl.java=20=E5=AE=8C=E6=88=90=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/agent/service/AgentService.java | 6 ++++++ .../agent/service/impl/AgentServiceImpl.java | 10 ++++++++++ .../modules/device/service/DeviceService.java | 8 +++++++- .../device/service/impl/DeviceServiceImpl.java | 8 ++++++++ .../modules/sys/controller/AdminController.java | 2 +- .../modules/sys/service/SysUserService.java | 6 +++++- .../sys/service/impl/SysUserServiceImpl.java | 17 +++++++++++++---- 7 files changed, 50 insertions(+), 7 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java index da958e4c..7d5285e8 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java @@ -22,4 +22,10 @@ public interface AgentService extends BaseService { * 获取智能体详情 */ AgentEntity getAgentById(String id); + + /** + * 删除这个用户的所有 + * @param userId + */ + void deleteAgentByUserId(String userId); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java index 8e73c003..40579cee 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java @@ -4,16 +4,19 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springframework.transaction.annotation.Transactional; import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.modules.agent.dao.AgentDao; import xiaozhi.modules.agent.entity.AgentEntity; import xiaozhi.modules.agent.service.AgentService; +import xiaozhi.modules.device.entity.DeviceEntity; @Service public class AgentServiceImpl extends BaseServiceImpl implements AgentService { @@ -62,4 +65,11 @@ public class AgentServiceImpl extends BaseServiceImpl imp return super.insert(entity); } + + @Override + public void deleteAgentByUserId(String userId) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("user_id", userId); + baseDao.delete(wrapper); + } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java index bc26f649..5f91bb2e 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java @@ -26,7 +26,7 @@ public interface DeviceService { DeviceEntity bindDevice(DeviceBindDTO deviceHeader); /** - * 获取用户设备列表 + * 获取用户指定智能体的设备列表, */ List getUserDevices(Long userId, String agentId); @@ -39,4 +39,10 @@ public interface DeviceService { * 设备激活 */ Boolean deviceActivation(String activationCode); + + /** + * 删除此用户的所有设备 + * @param userId 用户id + */ + void deleteByUserId(Long userId); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java index 4fd63826..685536c6 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java @@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import cn.hutool.core.util.RandomUtil; +import org.springframework.transaction.annotation.Transactional; import xiaozhi.common.exception.RenException; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.user.UserDetail; @@ -197,6 +198,13 @@ public class DeviceServiceImpl extends BaseServiceImpl baseDao.delete(wrapper); } + @Override + public void deleteByUserId(Long userId) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("user_id", userId); + baseDao.delete(wrapper); + } + private DeviceReportRespDTO.ServerTime buildServerTime() { DeviceReportRespDTO.ServerTime serverTime = new DeviceReportRespDTO.ServerTime(); TimeZone tz = TimeZone.getDefault(); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java index ee551400..9e811237 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java @@ -70,7 +70,7 @@ public class AdminController { @Operation(summary = "用户删除") @RequiresPermissions("sys:role:superAdmin") public Result delete(@PathVariable Long id) { - sysUserService.delete(new Long[] { id }); + sysUserService.deleteById( id ); return new Result<>(); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java index 261fbf96..1b9ac9bc 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java @@ -19,7 +19,11 @@ public interface SysUserService extends BaseService { void save(SysUserDTO dto); - void delete(Long[] ids); + /** + * 删除指定用户,且有关联的数据设备和智能体 + * @param ids + */ + void deleteById(Long ids); /** * 验证是否允许修改密码更改 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java index 71d507c6..f705e5fa 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -1,6 +1,5 @@ package xiaozhi.modules.sys.service.impl; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,6 +21,8 @@ import xiaozhi.common.exception.RenException; import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.modules.agent.service.AgentService; +import xiaozhi.modules.device.service.DeviceService; import xiaozhi.modules.security.password.PasswordUtils; import xiaozhi.modules.sys.dao.SysUserDao; import xiaozhi.modules.sys.dto.AdminPageUserDTO; @@ -40,6 +41,10 @@ import xiaozhi.modules.sys.vo.AdminPageUserVO; public class SysUserServiceImpl extends BaseServiceImpl implements SysUserService { private final SysUserDao sysUserDao; + private final DeviceService deviceService; + + private final AgentService agentService; + @Override public SysUserDTO getByUsername(String username) { QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -87,10 +92,14 @@ public class SysUserServiceImpl extends BaseServiceImpl Date: Mon, 31 Mar 2025 16:30:56 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20--AdminPageUserDTO.java=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=9A=84dto=E7=9A=84=E8=AF=B4=E6=98=8E=20--AdminPageU?= =?UTF-8?q?serVO.java=20=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E6=AE=B5=20--DeviceService.java=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=95=B0=E9=87=8F=E5=AE=9A=E4=B9=89=20--DeviceService?= =?UTF-8?q?Impl.java=20=E5=AE=9E=E7=8E=B0=E6=9F=A5=E8=AF=A2=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=AE=BE=E5=A4=87=E6=96=B9=E6=B3=95=20--SysUserServic?= =?UTF-8?q?eImpl.java=20=E5=AE=8C=E5=96=84=E5=88=86=E9=A1=B5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E6=9F=A5=E8=AF=A2=E5=87=BA=E6=AF=8F=E4=B8=AA?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=9A=84=E8=AE=BE=E5=A4=87=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E5=92=8C=E7=8A=B6=E6=80=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xiaozhi/modules/device/service/DeviceService.java | 7 +++++++ .../modules/device/service/impl/DeviceServiceImpl.java | 7 +++++++ .../java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java | 2 +- .../modules/sys/service/impl/SysUserServiceImpl.java | 6 ++++-- .../main/java/xiaozhi/modules/sys/vo/AdminPageUserVO.java | 3 +++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java index 5f91bb2e..a1574c8d 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java @@ -45,4 +45,11 @@ public interface DeviceService { * @param userId 用户id */ void deleteByUserId(Long userId); + + /** + * 获取指定用户的设备数量 + * @param userId 用户id + * @return 设备数量 + */ + Long selectCountByUserId(Long userId); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java index 685536c6..38801ca7 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java @@ -205,6 +205,13 @@ public class DeviceServiceImpl extends BaseServiceImpl baseDao.delete(wrapper); } + @Override + public Long selectCountByUserId(Long userId) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("user_id", userId); + return baseDao.selectCount(wrapper); + } + private DeviceReportRespDTO.ServerTime buildServerTime() { DeviceReportRespDTO.ServerTime serverTime = new DeviceReportRespDTO.ServerTime(); TimeZone tz = TimeZone.getDefault(); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java index 7de3843a..4e158ca4 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java @@ -10,7 +10,7 @@ import lombok.Data; * @since 2025-3-21 */ @Data -@Schema(description = "音色分页参数") +@Schema(description = "管理员分页用户的参数DTO") public class AdminPageUserDTO { @Schema(description = "手机号码") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java index f705e5fa..043144c4 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -161,12 +161,14 @@ public class SysUserServiceImpl extends BaseServiceImpl() // 必须按照手机号码查找 .eq(StringUtils.isNotBlank(dto.getMobile()), "username", dto.getMobile())); + // 循环处理page获取回来的数据,返回需要的字段 List list = page.getRecords().stream().map(user -> { AdminPageUserVO adminPageUserVO = new AdminPageUserVO(); adminPageUserVO.setUserid(user.getId().toString()); adminPageUserVO.setMobile(user.getUsername()); - // TODO 2. 等设备功能写好,获取对应数据 - adminPageUserVO.setDeviceCount("0"); + String deviceCount = deviceService.selectCountByUserId(user.getId()).toString(); + adminPageUserVO.setDeviceCount(deviceCount); + adminPageUserVO.setStatus(user.getStatus().toString()); return adminPageUserVO; }).toList(); return new PageData<>(list, page.getTotal()); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/AdminPageUserVO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/AdminPageUserVO.java index b7a399c2..7b845edf 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/AdminPageUserVO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/AdminPageUserVO.java @@ -20,4 +20,7 @@ public class AdminPageUserVO { @Schema(description = "用户id") private String userid; + + @Schema(description = "用户状态") + private String status; } From 4c0d55d2e62188b4bec98e618aa772f7153c9aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Wed, 2 Apr 2025 15:59:18 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=B1=82=E5=AE=8C=E5=96=84=E7=9A=84=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E8=AE=BE=E5=A4=87=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20--AdminController.java=20=E5=AE=8C=E5=96=84=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E5=85=A8=E9=83=A8=E8=AE=BE=E5=A4=87=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20--DateUtils.java=20=E7=BC=96=E5=86=99=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E8=BF=94=E5=9B=9E=E7=AE=80=E7=9F=AD=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E7=9A=84=E6=96=B9=E6=B3=95=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E5=88=9A=E5=88=9A=EF=BC=8C=E5=87=A0=E5=88=86=E9=92=9F=E5=89=8D?= =?UTF-8?q?=20--DevicePageUserDTO.java=20=E5=AE=9A=E4=B9=89=E4=BA=86?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=BB=80=E4=B9=88=E6=9F=A5=E6=89=BE=E5=8F=82?= =?UTF-8?q?=E6=95=B0=20--DeviceService.java=20=E5=AE=9A=E4=B9=89=E4=BA=86?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=96=B9=E6=B3=95=20--DeviceServiceImpl.java?= =?UTF-8?q?=20=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=88=86=E9=A1=B5=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=85=A8=E9=83=A8=E8=AE=BE=E5=A4=87=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95=20--ExtendPageData.java=20=E6=89=A9=E5=B1=95=E7=9A=84?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E5=AF=B9=E8=B1=A1=EF=BC=8C=E5=A4=9A=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E4=B8=80=E4=B8=AA=E9=A1=B5=E6=95=B0=20--UserShowDevic?= =?UTF-8?q?eListVO.java=20=E5=AE=9A=E4=B9=89=E4=BA=86=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E8=AE=BE=E5=A4=87=E6=AF=8F=E4=B8=AA=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E7=9A=84=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiaozhi/common/page/ExtendPageData.java | 38 +++++++++++++++ .../java/xiaozhi/common/utils/DateUtils.java | 38 +++++++++++++++ .../modules/device/dto/DevicePageUserDTO.java | 24 ++++++++++ .../modules/device/service/DeviceService.java | 11 +++++ .../service/impl/DeviceServiceImpl.java | 46 +++++++++++++++++-- .../device/vo/UserShowDeviceListVO.java | 31 +++++++++++++ .../sys/controller/AdminController.java | 16 +++++-- 7 files changed, 197 insertions(+), 7 deletions(-) create mode 100644 main/manager-api/src/main/java/xiaozhi/common/page/ExtendPageData.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/device/vo/UserShowDeviceListVO.java diff --git a/main/manager-api/src/main/java/xiaozhi/common/page/ExtendPageData.java b/main/manager-api/src/main/java/xiaozhi/common/page/ExtendPageData.java new file mode 100644 index 00000000..a838baf5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/page/ExtendPageData.java @@ -0,0 +1,38 @@ +package xiaozhi.common.page; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 扩展的分页对象 + * @author zjy + * @since 2025-4-2 + */ +@Data +@Schema(description = "分页数据") +public class ExtendPageData implements Serializable { + @Schema(description = "总记录数") + private int totalCount; + + @Schema(description = "页数") + private int totalPage; + + @Schema(description = "列表数据") + private List list; + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + * @param page 页数 + */ + public ExtendPageData(List list, long total, long page) { + this.list = list; + this.totalCount = (int) total; + this.totalPage = (int) page; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java index 9e5ef3e1..bfa7afed 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java @@ -2,6 +2,9 @@ package xiaozhi.common.utils; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.Date; /** @@ -60,4 +63,39 @@ public class DateUtils { return null; } + /** + * 获取简短的时间字符串:10秒前返回刚刚,多少秒前,几小时前,超过一周返回年月日时分秒 + * @param date + * @return + */ + public static String getShortTime(Date date) { + if (date == null) { + return null; + } + // 将 Date 转换为 Instant + LocalDateTime localDateTime = date.toInstant() + // 获取系统默认时区 + .atZone(ZoneId.systemDefault()) + // 转换为 LocalDateTime + .toLocalDateTime(); + // 当前时间 + LocalDateTime now = LocalDateTime.now(); + // 时间差,单位为秒 + long secondsBetween = ChronoUnit.SECONDS.between(localDateTime, now); + + if (secondsBetween <= 10) { + return "刚刚"; + } else if (secondsBetween < 60) { + return secondsBetween + "秒前"; + } else if (secondsBetween < 60 * 60) { + return secondsBetween / 60 + "分钟前"; + } else if (secondsBetween < 86400) { + return secondsBetween / 3600 + "小时前"; + } else if (secondsBetween < 604800) { + return secondsBetween / 86400 + "天前"; + } else { + // 超过一周,显示完整日期时间 + return format(date,DATE_TIME_PATTERN); + } + } } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java new file mode 100644 index 00000000..40e67445 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java @@ -0,0 +1,24 @@ +package xiaozhi.modules.device.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 查询所有设备的DTO + * + * @author zjy + * @since 2025-3-21 + */ +@Data +@Schema(description = "查询所有设备的DTO") +public class DevicePageUserDTO { + + @Schema(description = "设备关键词") + private String keywords; + + @Schema(description = "页数") + private String page; + + @Schema(description = "显示列数") + private String limit; +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java index a1574c8d..1d8b2970 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java @@ -2,10 +2,13 @@ package xiaozhi.modules.device.service; import java.util.List; +import xiaozhi.common.page.ExtendPageData; import xiaozhi.modules.device.dto.DeviceBindDTO; +import xiaozhi.modules.device.dto.DevicePageUserDTO; import xiaozhi.modules.device.dto.DeviceReportReqDTO; import xiaozhi.modules.device.dto.DeviceReportRespDTO; import xiaozhi.modules.device.entity.DeviceEntity; +import xiaozhi.modules.device.vo.UserShowDeviceListVO; public interface DeviceService { @@ -52,4 +55,12 @@ public interface DeviceService { * @return 设备数量 */ Long selectCountByUserId(Long userId); + + /** + * 分页获取全部设备信息 + * + * @param dto 分页查找参数 + * @return 用户列表分页数据 + */ + ExtendPageData page(DevicePageUserDTO dto); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java index 38801ca7..06b64d9e 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.TimeZone; import java.util.concurrent.TimeUnit; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; @@ -18,33 +19,43 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import cn.hutool.core.util.RandomUtil; -import org.springframework.transaction.annotation.Transactional; +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; +import xiaozhi.common.utils.DateUtils; import xiaozhi.modules.device.dao.DeviceDao; import xiaozhi.modules.device.dto.DeviceBindDTO; +import xiaozhi.modules.device.dto.DevicePageUserDTO; import xiaozhi.modules.device.dto.DeviceReportReqDTO; import xiaozhi.modules.device.dto.DeviceReportRespDTO; 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; @Service public class DeviceServiceImpl extends BaseServiceImpl implements DeviceService { private final DeviceDao deviceDao; + private final SysUserService sysUserService; + private final String frontedUrl; + private final RedisTemplate redisTemplate; // 添加构造函数来初始化 deviceMapper - public DeviceServiceImpl(DeviceDao deviceDao, - @Value("${app.fronted-url:http://localhost:8001}") String frontedUrl, - RedisTemplate redisTemplate) { + public DeviceServiceImpl(DeviceDao deviceDao, SysUserService sysUserService, + @Value("${app.fronted-url:http://localhost:8001}") String frontedUrl, + RedisTemplate redisTemplate) { this.deviceDao = deviceDao; + this.sysUserService = sysUserService; this.frontedUrl = frontedUrl; this.redisTemplate = redisTemplate; } @@ -212,6 +223,33 @@ public class DeviceServiceImpl extends BaseServiceImpl return baseDao.selectCount(wrapper); } + @Override + public ExtendPageData page(DevicePageUserDTO dto) { + Map params = new HashMap(); + params.put(Constant.PAGE, dto.getPage()); + params.put(Constant.LIMIT, dto.getLimit()); + IPage page = baseDao.selectPage( + getPage(params, "sort", true), + // 定义查询条件 + new QueryWrapper() + // 必须设备关键词查找 + .like(StringUtils.isNotBlank(dto.getKeywords()), "alias", dto.getKeywords())); + // 循环处理page获取回来的数据,返回需要的字段 + List list = page.getRecords().stream().map(device -> { + UserShowDeviceListVO vo = ConvertUtils.sourceToTarget(device, UserShowDeviceListVO.class); + // 把最后修改的时间,改为简短描述的时间 + vo.setRecentChatTime(DateUtils.getShortTime(device.getUpdateDate())); + // 获取用户名 + String username = sysUserService.getByUserId(device.getUserId()).getUsername(); + vo.setBindUserName(username); + vo.setDeviceType(device.getBoard()); + return vo; + }).toList(); + //计算页数 + long num = page.getTotal() / Long.parseLong(dto.getPage()); + return new ExtendPageData<>(list, page.getTotal(), num); + } + private DeviceReportRespDTO.ServerTime buildServerTime() { DeviceReportRespDTO.ServerTime serverTime = new DeviceReportRespDTO.ServerTime(); TimeZone tz = TimeZone.getDefault(); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/vo/UserShowDeviceListVO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/vo/UserShowDeviceListVO.java new file mode 100644 index 00000000..e3a5d8fd --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/vo/UserShowDeviceListVO.java @@ -0,0 +1,31 @@ +package xiaozhi.modules.device.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "用户显示设备列表VO") +public class UserShowDeviceListVO { + + @Schema(description = "app版本") + private String appVersion; + + @Schema(description = "绑定用户名称") + private String bindUserName; + + @Schema(description = "设备型号") + private String deviceType; + + @Schema(description = "设备唯一标识符") + private String id; + + @Schema(description = "mac地址") + private String macAddress; + + @Schema(description = "开启OTA") + private Integer otaUpgrade; + + @Schema(description = "最近对话时间") + private String recentChatTime; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java index 9e811237..5eb48fde 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java @@ -17,9 +17,13 @@ import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import xiaozhi.common.constant.Constant; +import xiaozhi.common.page.ExtendPageData; import xiaozhi.common.page.PageData; import xiaozhi.common.utils.Result; import xiaozhi.common.validator.ValidatorUtils; +import xiaozhi.modules.device.dto.DevicePageUserDTO; +import xiaozhi.modules.device.service.DeviceService; +import xiaozhi.modules.device.vo.UserShowDeviceListVO; import xiaozhi.modules.sys.dto.AdminPageUserDTO; import xiaozhi.modules.sys.service.SysUserService; import xiaozhi.modules.sys.vo.AdminPageUserVO; @@ -37,6 +41,8 @@ import xiaozhi.modules.sys.vo.AdminPageUserVO; public class AdminController { private final SysUserService sysUserService; + private final DeviceService deviceService; + @GetMapping("/users") @Operation(summary = "分页查找用户") @RequiresPermissions("sys:role:superAdmin") @@ -82,9 +88,13 @@ public class AdminController { @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), }) - public Result pageDevice( + public Result> pageDevice( @Parameter(hidden = true) @RequestParam Map params) { - // TODO 等设备功能模块写好 - return new Result().error(600, "等设备功能模块写好"); + DevicePageUserDTO dto = new DevicePageUserDTO(); + dto.setKeywords((String) params.get("keywords")); + dto.setLimit((String) params.get(Constant.LIMIT)); + dto.setPage((String) params.get(Constant.PAGE)); + ExtendPageData page = deviceService.page(dto); + return new Result>().ok(page); } } From 2fb7281d078a71ef809abeada940f52d2392a619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Wed, 2 Apr 2025 16:03:46 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=B1=82=E5=88=86=E9=A1=B5=E8=8E=B7=E5=8F=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8E=A5=E5=8F=A3=E6=94=B9=E5=9B=9E=E4=BD=BF=E7=94=A8?= =?UTF-8?q?ExtendPageData=E3=80=82=E7=AC=A6=E5=90=88=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89=20--AdminController.java?= =?UTF-8?q?=20--SysUserService.java=20--SysUserServiceImpl.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiaozhi/modules/sys/controller/AdminController.java | 6 +++--- .../java/xiaozhi/modules/sys/service/SysUserService.java | 4 ++-- .../modules/sys/service/impl/SysUserServiceImpl.java | 8 +++++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java index 5eb48fde..917ae82d 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java @@ -51,7 +51,7 @@ public class AdminController { @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), }) - public Result> pageUser( + public Result> pageUser( @Parameter(hidden = true) @RequestParam Map params) { AdminPageUserDTO dto = new AdminPageUserDTO(); dto.setMobile((String) params.get("mobile")); @@ -59,8 +59,8 @@ public class AdminController { dto.setPage((String) params.get("pages")); ValidatorUtils.validateEntity(dto); - PageData page = sysUserService.page(dto); - return new Result>().ok(page); + ExtendPageData page = sysUserService.page(dto); + return new Result>().ok(page); } @PutMapping("/users/{id}") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java index 1b9ac9bc..dbdf06f0 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java @@ -1,6 +1,6 @@ package xiaozhi.modules.sys.service; -import xiaozhi.common.page.PageData; +import xiaozhi.common.page.ExtendPageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.sys.dto.AdminPageUserDTO; import xiaozhi.modules.sys.dto.PasswordDTO; @@ -55,5 +55,5 @@ public interface SysUserService extends BaseService { * @param dto 分页查找参数 * @return 用户列表分页数据 */ - PageData page(AdminPageUserDTO dto); + ExtendPageData page(AdminPageUserDTO dto); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java index 043144c4..2335c7e1 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -18,7 +18,7 @@ import lombok.AllArgsConstructor; import xiaozhi.common.constant.Constant; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; -import xiaozhi.common.page.PageData; +import xiaozhi.common.page.ExtendPageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.utils.ConvertUtils; import xiaozhi.modules.agent.service.AgentService; @@ -151,7 +151,7 @@ public class SysUserServiceImpl extends BaseServiceImpl page(AdminPageUserDTO dto) { + public ExtendPageData page(AdminPageUserDTO dto) { Map params = new HashMap(); params.put(Constant.PAGE, dto.getPage()); params.put(Constant.LIMIT, dto.getLimit()); @@ -171,7 +171,9 @@ public class SysUserServiceImpl extends BaseServiceImpl(list, page.getTotal()); + //计算页数 + long num = page.getTotal() / Long.parseLong(dto.getPage()); + return new ExtendPageData<>(list, page.getTotal(),num); } private boolean isStrongPassword(String password) { From 083e7071f00aa3c4274556d1a9f4be6d295c952e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Thu, 3 Apr 2025 09:41:14 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=92=8C=E8=AE=BE=E5=A4=87=E6=A8=A1=E5=9D=97=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E5=BC=95=E7=94=A8=EF=BC=8C=E6=8A=8A=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=A8=A1=E5=9D=97=E5=B8=B8=E7=94=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=8A=BD=E5=87=BA=E4=B8=80=E4=B8=AA=E5=B7=A5=E5=85=B7=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=90=8E=E8=AE=BE=E5=A4=87=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=AD=89=E5=92=8C=E7=94=A8=E6=88=B7=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=EF=BC=8C=E7=9B=B4=E6=8E=A5=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=EF=BC=8C=E9=81=BF=E5=85=8D=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E5=BC=95=E7=94=A8=20--DeviceServiceImpl.java=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BE=E5=A4=87=E6=A8=A1=E5=9D=97=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E5=90=8D=E7=9A=84=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=E7=94=A8=E6=88=B7=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=B1=BB=20--SysUserService.java=20=E6=96=B0=E5=BB=BA=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=B7=A5=E5=85=B7=E7=B1=BB=EF=BC=8C=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E4=BA=86=E8=B5=8B=E5=80=BC=E7=94=A8=E6=88=B7=E5=90=8D=E6=96=B9?= =?UTF-8?q?=E6=B3=95=20--SysUserServiceImpl.java=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=EF=BC=8C=E9=87=8D=E5=86=99=E4=BA=86?= =?UTF-8?q?=E8=B5=8B=E5=80=BC=E7=94=A8=E6=88=B7=E5=90=8D=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DeviceServiceImpl.java | 14 +++++----- .../sys/service/SysUserUtilService.java | 19 ++++++++++++++ .../service/impl/SysUserUtilServiceImpl.java | 26 +++++++++++++++++++ 3 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserUtilService.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java index 06b64d9e..f94038b8 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java @@ -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 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 private final RedisTemplate redisTemplate; // 添加构造函数来初始化 deviceMapper - public DeviceServiceImpl(DeviceDao deviceDao, SysUserService sysUserService, + public DeviceServiceImpl(DeviceDao deviceDao, SysUserUtilService sysUserUtilService, @Value("${app.fronted-url:http://localhost:8001}") String frontedUrl, RedisTemplate 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 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(); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserUtilService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserUtilService.java new file mode 100644 index 00000000..0fa3fc4a --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserUtilService.java @@ -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 setter); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java new file mode 100644 index 00000000..513da17b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java @@ -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 implements SysUserUtilService { + + private RedisUtils redisUtils; + + @Override + public void assignUsername(Long userId, Consumer setter) { + SysUserEntity entity = baseDao.selectById(userId); + if (entity != null) { + setter.accept(entity.getUsername()); + } + } +} From 06e4834e2746676d32a7d7f137d120c100187324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Thu, 3 Apr 2025 09:49:39 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=9A=84=E5=90=8D=E7=A7=B0=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95=20--RedisKeys.java=20=E8=AE=BE=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=96=B0key=20--SysUserUtilServiceImpl.java=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=B5=8B=E5=80=BC=E7=94=A8=E6=88=B7=E5=90=8D=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E6=8A=8A=E7=94=A8=E6=88=B7=E5=90=8D?= =?UTF-8?q?=E6=9A=82=E5=AD=98=E5=9C=A8redis=E3=80=82=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=9B=B8=E5=90=8C=E7=9A=84=E4=B8=8D=E9=9C=80=E8=A6=81=E9=A2=91?= =?UTF-8?q?=E7=B9=81=E5=8E=BB=E6=95=B0=E6=8D=AE=E5=BA=93=E6=9F=A5=E6=89=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/xiaozhi/common/redis/RedisKeys.java | 9 +++++++++ .../sys/service/impl/SysUserUtilServiceImpl.java | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java index 21121fd7..d71040e0 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java @@ -26,4 +26,13 @@ public class RedisKeys { public static String getDeviceCaptchaKey(String captcha) { return "sys:device:captcha:" + captcha; } + + /** + * 用户id的Key + */ + public static String getUserIdKey(Long userid) { + return "sys:username:id:" + userid; + } + + } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java index 513da17b..8fd0351a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java @@ -2,6 +2,7 @@ package xiaozhi.modules.sys.service.impl; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import xiaozhi.common.redis.RedisKeys; import xiaozhi.common.redis.RedisUtils; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.modules.sys.dao.SysUserDao; @@ -18,9 +19,17 @@ public class SysUserUtilServiceImpl extends BaseServiceImpl setter) { - SysUserEntity entity = baseDao.selectById(userId); - if (entity != null) { - setter.accept(entity.getUsername()); + String userIdKey = RedisKeys.getUserIdKey(userId); + String username = redisUtils.get(userIdKey).toString(); + if(username != null){ + setter.accept(username); + }else { + SysUserEntity entity = baseDao.selectById(userId); + if (entity != null) { + username = entity.getUsername(); + redisUtils.set(userIdKey,username,10); + setter.accept(username); + } } } } From e474a2114ccda4e5eaa75f736c1fe4c721cee4e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Thu, 3 Apr 2025 10:16:47 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=AA=8C=E8=AF=81=20--AdminController.java=20--AdminP?= =?UTF-8?q?ageUserDTO.java=20--DevicePageUserDTO.java=20=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E9=AA=8C=E8=AF=81=E8=AF=B4=E6=98=8E=20--vali?= =?UTF-8?q?dation.properties=20--validation=5Fen=5FUS.properties=20--valid?= =?UTF-8?q?ation=5Fzh=5FCN.properties=20--validation=5Fzh=5FTW.properties?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xiaozhi/modules/device/dto/DevicePageUserDTO.java | 3 +++ .../java/xiaozhi/modules/sys/controller/AdminController.java | 5 +++-- .../main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java | 3 +++ .../src/main/resources/i18n/validation.properties | 2 ++ .../src/main/resources/i18n/validation_en_US.properties | 2 ++ .../src/main/resources/i18n/validation_zh_CN.properties | 2 ++ .../src/main/resources/i18n/validation_zh_TW.properties | 2 ++ 7 files changed, 17 insertions(+), 2 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java index 40e67445..26bccbfd 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java @@ -1,6 +1,7 @@ package xiaozhi.modules.device.dto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; import lombok.Data; /** @@ -17,8 +18,10 @@ public class DevicePageUserDTO { private String keywords; @Schema(description = "页数") + @Min(value = 0, message = "{page.number}") private String page; @Schema(description = "显示列数") + @Min(value = 0, message = "{limit.number}") private String limit; } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java index 917ae82d..93eb0b3c 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java @@ -57,7 +57,7 @@ public class AdminController { dto.setMobile((String) params.get("mobile")); dto.setLimit((String) params.get(Constant.LIMIT)); dto.setPage((String) params.get("pages")); - + ValidatorUtils.validateEntity(dto); ValidatorUtils.validateEntity(dto); ExtendPageData page = sysUserService.page(dto); return new Result>().ok(page); @@ -76,7 +76,7 @@ public class AdminController { @Operation(summary = "用户删除") @RequiresPermissions("sys:role:superAdmin") public Result delete(@PathVariable Long id) { - sysUserService.deleteById( id ); + sysUserService.deleteById(id); return new Result<>(); } @@ -94,6 +94,7 @@ public class AdminController { dto.setKeywords((String) params.get("keywords")); dto.setLimit((String) params.get(Constant.LIMIT)); dto.setPage((String) params.get(Constant.PAGE)); + ValidatorUtils.validateEntity(dto); ExtendPageData page = deviceService.page(dto); return new Result>().ok(page); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java index 4e158ca4..a9d960a1 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java @@ -1,6 +1,7 @@ package xiaozhi.modules.sys.dto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; import lombok.Data; /** @@ -17,8 +18,10 @@ public class AdminPageUserDTO { private String mobile; @Schema(description = "页数") + @Min(value = 0, message = "{sort.number}") private String page; @Schema(description = "显示列数") + @Min(value = 0, message = "{sort.number}") private String limit; } diff --git a/main/manager-api/src/main/resources/i18n/validation.properties b/main/manager-api/src/main/resources/i18n/validation.properties index e7452e47..008f2a03 100644 --- a/main/manager-api/src/main/resources/i18n/validation.properties +++ b/main/manager-api/src/main/resources/i18n/validation.properties @@ -3,6 +3,8 @@ id.require=ID\u4E0D\u80FD\u4E3A\u7A7A id.null=ID\u5FC5\u987B\u4E3A\u7A7A sort.number=\u6392\u5E8F\u503C\u4E0D\u80FD\u5C0F\u4E8E0 +page.number=\u9875\u6570\u4E0D\u80FD\u5C0F\u4E8E0 +limit.number=\u5217\u6570\u4E0D\u80FD\u5C0F\u4E8E0 sysdict.type.require=\u5B57\u5178\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A sysdict.name.require=\u5B57\u5178\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A diff --git a/main/manager-api/src/main/resources/i18n/validation_en_US.properties b/main/manager-api/src/main/resources/i18n/validation_en_US.properties index 37bebf18..2840d605 100644 --- a/main/manager-api/src/main/resources/i18n/validation_en_US.properties +++ b/main/manager-api/src/main/resources/i18n/validation_en_US.properties @@ -3,6 +3,8 @@ id.require=ID can not be empty id.null=ID has to be empty sort.number=The sort value cannot be less than 0 +page.number=The page value cannot be less than 0 +limit.number=The limit value cannot be less than 0 sysdict.type.require=The dictionary type cannot be empty sysdict.name.require=The dictionary name cannot be empty diff --git a/main/manager-api/src/main/resources/i18n/validation_zh_CN.properties b/main/manager-api/src/main/resources/i18n/validation_zh_CN.properties index 41bf1e69..c86aded7 100644 --- a/main/manager-api/src/main/resources/i18n/validation_zh_CN.properties +++ b/main/manager-api/src/main/resources/i18n/validation_zh_CN.properties @@ -3,6 +3,8 @@ id.require=ID\u4E0D\u80FD\u4E3A\u7A7A id.null=ID\u5FC5\u987B\u4E3A\u7A7A sort.number=\u6392\u5E8F\u503C\u4E0D\u80FD\u5C0F\u4E8E0 +page.number=\u9801\u6578\u4E0D\u80FD\u5C0F\u4E8E0 +limit.number=\u5217\u6578\u4E0D\u80FD\u5C0F\u4E8E0 sysdict.type.require=\u5B57\u5178\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A sysdict.name.require=\u5B57\u5178\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A diff --git a/main/manager-api/src/main/resources/i18n/validation_zh_TW.properties b/main/manager-api/src/main/resources/i18n/validation_zh_TW.properties index 9241c97a..23c59eef 100644 --- a/main/manager-api/src/main/resources/i18n/validation_zh_TW.properties +++ b/main/manager-api/src/main/resources/i18n/validation_zh_TW.properties @@ -3,6 +3,8 @@ id.require=ID\u4E0D\u80FD\u4E3A\u7A7A id.null=ID\u5FC5\u987B\u4E3A\u7A7A sort.number=\u6392\u5E8F\u503C\u4E0D\u80FD\u5C0F\u4E8E0 +page.number=\u9875\u6570\u4E0D\u80FD\u5C0F\u4E8E0 +limit.number=\u5217\u6570\u4E0D\u80FD\u5C0F\u4E8E0 sysdict.type.require=\u5B57\u5178\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A sysdict.name.require=\u5B57\u5178\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A