diff --git a/system/src/main/java/com/sdm/system/dao/SysLogMapper.java b/system/src/main/java/com/sdm/system/dao/SysLogMapper.java index 28cfe8cc..6ec61d16 100644 --- a/system/src/main/java/com/sdm/system/dao/SysLogMapper.java +++ b/system/src/main/java/com/sdm/system/dao/SysLogMapper.java @@ -17,20 +17,23 @@ import java.util.Map; public interface SysLogMapper extends BaseMapper { List countDailyLoginUsers(@Param("startTime") String startTime, - @Param("endTime") String endTime); + @Param("endTime") String endTime, + @Param("tenantId") Long tenantId); List getHourlyOnlineUsers(@Param("date") String date); /** * 查找在指定时间之前最后登录的用户 */ - List findLastLoginBeforeDate(@Param("beforeTime") LocalDateTime beforeTime); + List findLastLoginBeforeDate(@Param("beforeTime") LocalDateTime beforeTime, + @Param("tenantId") Long tenantId); /** * 查找用户在指定时间之后的下一次退出时间 */ - List findNextLogoutTimes(@Param("userIds") List userIds, @Param("afterTime") LocalDateTime afterTime); + List findNextLogoutTimes(@Param("userIds") List userIds, + @Param("afterTime") LocalDateTime afterTime, + @Param("tenantId") Long tenantId); - List> findActiveSessionsOnDate(@Param("targetDate") String targetDate); } diff --git a/system/src/main/java/com/sdm/system/model/entity/SysLog.java b/system/src/main/java/com/sdm/system/model/entity/SysLog.java index 6cf8dc8b..7a2ad3bb 100644 --- a/system/src/main/java/com/sdm/system/model/entity/SysLog.java +++ b/system/src/main/java/com/sdm/system/model/entity/SysLog.java @@ -123,6 +123,13 @@ public class SysLog implements Serializable { @TableField("serviceId") private String serviceId; + /** + * 租户编号 + */ + @Schema(description = "租户编号") + @TableField("tenantId") + private Long tenantId; + /** * 删除标记 */ diff --git a/system/src/main/java/com/sdm/system/service/impl/ISysLogServiceImpl.java b/system/src/main/java/com/sdm/system/service/impl/ISysLogServiceImpl.java index aef85dec..5093ede9 100644 --- a/system/src/main/java/com/sdm/system/service/impl/ISysLogServiceImpl.java +++ b/system/src/main/java/com/sdm/system/service/impl/ISysLogServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.sdm.common.common.SdmResponse; +import com.sdm.common.common.ThreadLocalContext; import com.sdm.common.entity.req.system.UserQueryReq; import com.sdm.common.entity.resp.PageDataResp; import com.sdm.common.entity.resp.system.CIDUserResp; @@ -63,6 +64,7 @@ public class ISysLogServiceImpl extends ServiceImpl implem wrapper.ge(SysLog::getCreateTime, sysLog.getCreateTimeArr()[0]) .le(SysLog::getCreateTime, sysLog.getCreateTimeArr()[1]); } + wrapper.eq(SysLog::getTenantId, sysLog.getTenantId()); wrapper.orderByDesc(SysLog::getCreateTime); PageHelper.startPage(sysLog.getCurrent(), sysLog.getSize()); List sysLogList = this.list(wrapper); @@ -86,7 +88,8 @@ public class ISysLogServiceImpl extends ServiceImpl implem public SdmResponse> getUserLoginStatistics(SysLogDTO sysLog) { String startDate = sysLog.getCreateTimeArr()[0]; String endDate = sysLog.getCreateTimeArr()[1]; - List respList = baseMapper.countDailyLoginUsers(startDate + " 00:00:00", endDate + " 23:59:59"); + Long tenantId = ThreadLocalContext.getTenantId(); + List respList = baseMapper.countDailyLoginUsers(startDate + " 00:00:00", endDate + " 23:59:59", tenantId); // 将结果转换为Map,方便查找 Map resultMap = respList.stream() .collect(Collectors.toMap( @@ -122,13 +125,14 @@ public class ISysLogServiceImpl extends ServiceImpl implem // result.setDate(dateStr); // result.setHourlyStats(hourlyStats); // return SdmResponse.success(result); - return SdmResponse.success(getHourlyOnlineUsers(LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")))); + Long tenantId = ThreadLocalContext.getTenantId(); + return SdmResponse.success(getHourlyOnlineUsers(LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")), tenantId)); } /** * 统计指定日期每小时的在线用户数(处理任意时间登录未退出的情况) */ - public Map getHourlyOnlineUsers(LocalDate targetDate) { + public Map getHourlyOnlineUsers(LocalDate targetDate, Long tenantId) { LocalDateTime now = LocalDateTime.now(); LocalDate today = now.toLocalDate(); @@ -143,12 +147,13 @@ public class ISysLogServiceImpl extends ServiceImpl implem LocalDateTime targetDayEnd = targetDate.plusDays(1).atStartOfDay(); // 2. 获取所有在目标日期之前登录的用户及其最后登录时间 - List UserLastLoginDtos = baseMapper.findLastLoginBeforeDate(targetDayEnd); + List UserLastLoginDtos = baseMapper.findLastLoginBeforeDate(targetDayEnd, tenantId); // 3. 获取这些用户在目标日期及之后的退出时间 Map userLogoutTimes = getUserNextLogoutTimes( UserLastLoginDtos.stream().map(UserLastLoginDto::getUserId).collect(Collectors.toList()), - targetDayStart + targetDayStart, + tenantId ); // 4. 构建用户会话 @@ -235,12 +240,12 @@ public class ISysLogServiceImpl extends ServiceImpl implem session.getEffectiveLogoutTime().isAfter(periodStart); } - private Map getUserNextLogoutTimes(List userIds, LocalDateTime afterTime) { + private Map getUserNextLogoutTimes(List userIds, LocalDateTime afterTime, Long tenantId) { Map logoutTimes = new HashMap<>(); // 批量查询用户的下一次退出时间 - List logouts = baseMapper.findNextLogoutTimes(userIds, afterTime); + List logouts = baseMapper.findNextLogoutTimes(userIds, afterTime, tenantId); for (UserLogoutDto logout : logouts) { logoutTimes.put(logout.getUserId(), logout.getLogoutTime()); diff --git a/system/src/main/resources/mapper/SysLogMapper.xml b/system/src/main/resources/mapper/SysLogMapper.xml index 23d49a41..446f1eb5 100644 --- a/system/src/main/resources/mapper/SysLogMapper.xml +++ b/system/src/main/resources/mapper/SysLogMapper.xml @@ -64,6 +64,7 @@ sys_log WHERE title = '登录成功' AND createTime < #{beforeTime} + AND tenantId = #{tenantId} GROUP BY createBy @@ -81,6 +82,7 @@ #{userId} + AND l1.tenantId = #{tenantId} GROUP BY l1.createBy, l1.createTime