From 508619b9f29aa61ac2a4fd88c9fe8fb89cbd47d6 Mon Sep 17 00:00:00 2001 From: Zangzhipeng Date: Tue, 12 Nov 2024 08:55:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8F=90=E4=BA=A4=EF=BC=88=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/LogApiController.java | 8 +- .../modules/system/dto/LogDTO.java | 5 + .../modules/system/mapper/LogApiMapper.xml | 15 ++- .../system/service/ILogApiService.java | 3 +- .../service/impl/LogApiServiceImpl.java | 122 ++++++++++++++++-- .../modules/system/vo/LogRecord.java | 2 + .../springblade/modules/system/vo/LogVO.java | 5 + 7 files changed, 140 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/springblade/modules/system/controller/LogApiController.java b/src/main/java/org/springblade/modules/system/controller/LogApiController.java index 4cba24f..e3bcebd 100644 --- a/src/main/java/org/springblade/modules/system/controller/LogApiController.java +++ b/src/main/java/org/springblade/modules/system/controller/LogApiController.java @@ -59,14 +59,14 @@ public class LogApiController { } /** + * 日志列表(登录,修改操作) * 查询多条(分页) */ @GetMapping("/logOnList") public R> logOnList(@ApiIgnore LogDTO log, Query query) { // HttpServletRequest request = WebUtil.getRequest(); - User user = UserCache.getUser("", ""); - Map> logList = logService.logOnList(log); - return R.data(null); - } + List logList = logService.logOnList(log); + return R.data(logList); + } } diff --git a/src/main/java/org/springblade/modules/system/dto/LogDTO.java b/src/main/java/org/springblade/modules/system/dto/LogDTO.java index 3ea852f..eae54f8 100644 --- a/src/main/java/org/springblade/modules/system/dto/LogDTO.java +++ b/src/main/java/org/springblade/modules/system/dto/LogDTO.java @@ -14,4 +14,9 @@ public class LogDTO { private String startTime; private String endTime; + + // 日志类型:1登录日志 2修改日志 + private String logType; + + private String userId; } diff --git a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml index 8031518..b05b518 100644 --- a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml +++ b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml @@ -27,14 +27,25 @@ tenant_id AS tenantId, create_by AS createBy, create_time AS createTime, - title AS title + title AS title, + method_name as methodName FROM `blade_log_api` WHERE create_by != '' + + and method_name = 'token' + + + and method_name != 'token' + + AND create_time BETWEEN #{startTime} AND #{endTime} + + + and create_by = #{userId} + ORDER BY create_time DESC - diff --git a/src/main/java/org/springblade/modules/system/service/ILogApiService.java b/src/main/java/org/springblade/modules/system/service/ILogApiService.java index dd141dd..8960d6b 100644 --- a/src/main/java/org/springblade/modules/system/service/ILogApiService.java +++ b/src/main/java/org/springblade/modules/system/service/ILogApiService.java @@ -4,6 +4,7 @@ package org.springblade.modules.system.service; import com.baomidou.mybatisplus.extension.service.IService; import org.springblade.core.log.model.LogApi; import org.springblade.modules.system.dto.LogDTO; +import org.springblade.modules.system.vo.LogRecord; import org.springblade.modules.system.vo.LogVO; import java.util.List; @@ -16,5 +17,5 @@ import java.util.Map; */ public interface ILogApiService extends IService { - Map> logOnList(LogDTO log); + List logOnList(LogDTO log); } diff --git a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java index d824e3b..b38acc9 100644 --- a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java +++ b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java @@ -2,19 +2,22 @@ package org.springblade.modules.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springblade.common.cache.UserCache; import org.springblade.core.log.model.LogApi; import org.springblade.modules.system.dto.LogDTO; +import org.springblade.modules.system.entity.User; import org.springblade.modules.system.mapper.LogApiMapper; import org.springblade.modules.system.service.ILogApiService; +import org.springblade.modules.system.vo.LogRecord; import org.springblade.modules.system.vo.LogVO; import org.springframework.stereotype.Service; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -25,19 +28,112 @@ import java.util.stream.Collectors; @Service public class LogApiServiceImpl extends ServiceImpl implements ILogApiService { - @Override - public Map> logOnList(LogDTO log) { - SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public List logOnList(LogDTO log) { + + List logRecords = new LinkedList<>(); + LogRecord logRecord = new LogRecord(); + + SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // yyyy-MM年月日志标识 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); + + // 按照月份查询日志所有数据 List logs = baseMapper.logOnList(log); - logs.forEach(logVO -> { - logVO.setTime(formatter2.format(logVO.getCreateTime())); - logVO.setTitle(logVO.getCreateBy() + ":" + logVO.getTitle()); - }); + // 记录年月 + AtomicReference yearMonth = new AtomicReference<>(null); + // logs遍历计数器 + AtomicInteger count = new AtomicInteger(0); + // logs总长度 + int totalLogs = logs.size(); + + // 遍历日志数据 +// logs.forEach(logInfo -> { + for (LogVO logInfo:logs){ + + count.incrementAndGet(); + // 当前年月 + String currentYearMonth = formatter.format(logInfo.getCreateTime()); + + // 记录年月是否为空,空则插入 + if (yearMonth.get() == null) { + // 当前年月赋值给记录年月 + yearMonth.set(currentYearMonth); + + // logRecord的当前年月是否为空,空则插入当前年月 + if(logRecord.getTime() == null){ + logRecord.setTime(currentYearMonth); + } + // 将该条数据插入logs + if(logRecord.getLogs() == null){ + logRecord.setLogs(new ArrayList<>()); + } + logRecord.getLogs().add(logInfo); + } else { + // 当前年月等于记录年月 + if (yearMonth.get().equals(currentYearMonth)) { + // 将该条数据插入logs + logRecord.getLogs().add(logInfo); + + }else{ // 当前年月不等于记录年月 + // 将当前年月赋值给记录年月 + yearMonth.set(currentYearMonth); + // 将上一组数据存入 + for (LogVO logVO : logRecord.getLogs()){ + User user = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy()); + if(user != null){ + logVO.setRealName(user.getRealName()); + logVO.setTitle(user.getRealName() + logVO.getTitle()); + } + +// formatter1.format(logVO.getCreateTime()).substring(8); + String substring = formatter1.format(logVO.getCreateTime()).substring(8); + logVO.setTime(substring.substring(0,2) + "日" + substring.substring(2)); + + + } + logRecords.add(logRecord); + + // 一组年月的日志已插入,logRecord对象创建一个新的 + logRecord = new LogRecord(); + // logRecord的当前年月是否为空,空则插入当前年月 + logRecord.setTime(currentYearMonth); + + // 将该条数据插入logs + logRecord.setLogs(new LinkedList<>(Collections.singletonList(logInfo))); + +// // 将logs内容创建新对象 +// logRecord.setLogs(new LinkedList<>()); +// // 将该条数据插入logs +// logRecord.getLogs().add(logInfo); + + } + } + if (count.get() == totalLogs) { + for (LogVO logVO : logRecord.getLogs()){ + User user = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy()); + if(user != null){ + logVO.setRealName(user.getRealName()); + logVO.setTitle(user.getRealName() + logVO.getTitle()); + } + + String substring = formatter1.format(logVO.getCreateTime()).substring(8); + logVO.setTime(substring.substring(0,2) + "日" + substring.substring(2)); + + } + // 最后一次执行的逻辑,将logRecord保存 + logRecords.add(logRecord); + } + }; + +// logs.forEach(logVO -> { +// logVO.setTime(formatter2.format(logVO.getCreateTime())); +// logVO.setTitle(logVO.getCreateBy() + ":" + logVO.getTitle()); +// }); - Map> groupedByMonth = logs.stream().collect(Collectors.groupingBy(date -> date.getTime().substring(0, 7))); +// Map> groupedByMonth = logs.stream().collect(Collectors.groupingBy(date -> date.getTime().substring(0, 7))); - return groupedByMonth; + return logRecords; } } diff --git a/src/main/java/org/springblade/modules/system/vo/LogRecord.java b/src/main/java/org/springblade/modules/system/vo/LogRecord.java index 4406378..7359bbf 100644 --- a/src/main/java/org/springblade/modules/system/vo/LogRecord.java +++ b/src/main/java/org/springblade/modules/system/vo/LogRecord.java @@ -14,8 +14,10 @@ import java.util.List; public class LogRecord { private static final long serialVersionUID = 1L; + // 时间 private String time; + // 日志实体 private List logs; } diff --git a/src/main/java/org/springblade/modules/system/vo/LogVO.java b/src/main/java/org/springblade/modules/system/vo/LogVO.java index c586d3a..5c797ae 100644 --- a/src/main/java/org/springblade/modules/system/vo/LogVO.java +++ b/src/main/java/org/springblade/modules/system/vo/LogVO.java @@ -1,6 +1,7 @@ package org.springblade.modules.system.vo; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.util.Date; @@ -18,9 +19,13 @@ public class LogVO { private String createBy; + @JsonIgnore private Date createTime; private String time; private String title; + + // 真实姓名 + private String realName; } From 8a60a52b6897d8cae2e5110fe62514cb088ad34c Mon Sep 17 00:00:00 2001 From: zhangqun <179111901@qq.com> Date: Wed, 13 Nov 2024 19:30:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=85=A5=E5=8F=82=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/LogApiController.java | 3 ++ .../modules/system/dto/LogDTO.java | 1 + .../system/service/ILogApiService.java | 1 - .../service/impl/LogApiServiceImpl.java | 50 +++++++++++-------- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/springblade/modules/system/controller/LogApiController.java b/src/main/java/org/springblade/modules/system/controller/LogApiController.java index e3bcebd..c8d3ca4 100644 --- a/src/main/java/org/springblade/modules/system/controller/LogApiController.java +++ b/src/main/java/org/springblade/modules/system/controller/LogApiController.java @@ -66,6 +66,9 @@ public class LogApiController { public R> logOnList(@ApiIgnore LogDTO log, Query query) { // HttpServletRequest request = WebUtil.getRequest(); + if(log.getLogType() == null || (!log.getLogType().equals("1") && !log.getLogType().equals("2"))){ + return R.fail("日志类型入参有误(logType in ('1','2'))"); + } List logList = logService.logOnList(log); return R.data(logList); } diff --git a/src/main/java/org/springblade/modules/system/dto/LogDTO.java b/src/main/java/org/springblade/modules/system/dto/LogDTO.java index eae54f8..221cdcd 100644 --- a/src/main/java/org/springblade/modules/system/dto/LogDTO.java +++ b/src/main/java/org/springblade/modules/system/dto/LogDTO.java @@ -18,5 +18,6 @@ public class LogDTO { // 日志类型:1登录日志 2修改日志 private String logType; + // 用户id private String userId; } diff --git a/src/main/java/org/springblade/modules/system/service/ILogApiService.java b/src/main/java/org/springblade/modules/system/service/ILogApiService.java index 8960d6b..79b4503 100644 --- a/src/main/java/org/springblade/modules/system/service/ILogApiService.java +++ b/src/main/java/org/springblade/modules/system/service/ILogApiService.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.springblade.core.log.model.LogApi; import org.springblade.modules.system.dto.LogDTO; import org.springblade.modules.system.vo.LogRecord; -import org.springblade.modules.system.vo.LogVO; import java.util.List; import java.util.Map; diff --git a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java index b38acc9..2cc4a6a 100644 --- a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java +++ b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java @@ -31,28 +31,32 @@ public class LogApiServiceImpl extends ServiceImpl impleme @Override public List logOnList(LogDTO log) { + if(log.getUserId() != null){ + User user = UserCache.getUser(Long.valueOf(log.getUserId())); + log.setUserId(user.getAccount()); + } + // 按照月份查询日志所有数据 + List logs = baseMapper.logOnList(log); + + // 返回集合创建 List logRecords = new LinkedList<>(); LogRecord logRecord = new LogRecord(); + // yyyy-MM-dd 日期格式转换 SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // yyyy-MM年月日志标识 + // yyyy-MM 年月日志标识 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); - // 按照月份查询日志所有数据 - List logs = baseMapper.logOnList(log); - // 记录年月 AtomicReference yearMonth = new AtomicReference<>(null); // logs遍历计数器 - AtomicInteger count = new AtomicInteger(0); + AtomicInteger count = new AtomicInteger(1); // logs总长度 int totalLogs = logs.size(); // 遍历日志数据 -// logs.forEach(logInfo -> { - for (LogVO logInfo:logs){ + for (LogVO logInfo:logs){ - count.incrementAndGet(); // 当前年月 String currentYearMonth = formatter.format(logInfo.getCreateTime()); @@ -75,23 +79,20 @@ public class LogApiServiceImpl extends ServiceImpl impleme if (yearMonth.get().equals(currentYearMonth)) { // 将该条数据插入logs logRecord.getLogs().add(logInfo); - }else{ // 当前年月不等于记录年月 // 将当前年月赋值给记录年月 yearMonth.set(currentYearMonth); // 将上一组数据存入 for (LogVO logVO : logRecord.getLogs()){ - User user = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy()); - if(user != null){ - logVO.setRealName(user.getRealName()); - logVO.setTitle(user.getRealName() + logVO.getTitle()); + User user1 = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy()); + if(user1 != null){ + logVO.setRealName(user1.getRealName()); + logVO.setTitle(user1.getRealName() + logVO.getTitle()); } // formatter1.format(logVO.getCreateTime()).substring(8); String substring = formatter1.format(logVO.getCreateTime()).substring(8); logVO.setTime(substring.substring(0,2) + "日" + substring.substring(2)); - - } logRecords.add(logRecord); @@ -110,21 +111,26 @@ public class LogApiServiceImpl extends ServiceImpl impleme } } + // 最后一次遍历,提交最后一组对象 if (count.get() == totalLogs) { - for (LogVO logVO : logRecord.getLogs()){ - User user = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy()); - if(user != null){ - logVO.setRealName(user.getRealName()); - logVO.setTitle(user.getRealName() + logVO.getTitle()); + // 遍历单条日志内容 + for (LogVO logVO : logRecord.getLogs()) { + // 查询缓存中的用户内容 + User user1 = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy()); + if(user1 != null){ + logVO.setRealName(user1.getRealName()); + logVO.setTitle(user1.getRealName() + logVO.getTitle()); } - String substring = formatter1.format(logVO.getCreateTime()).substring(8); logVO.setTime(substring.substring(0,2) + "日" + substring.substring(2)); - } + // 最后一次执行的逻辑,将logRecord保存 logRecords.add(logRecord); } + + // 计数器增加 + count.incrementAndGet(); }; // logs.forEach(logVO -> {