fix(log): 操作日志上面的统计图时间轴乱序

Closes #6004
This commit is contained in:
冷冷 committed 2024-11-24 18:05:51 +08:00
1 parent 64e17420ef
commit 3b7a66652a
1 file changed
+79 -74
@@ -40,6 +40,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -55,85 +56,89 @@ import java.util.stream.Collectors;
@Service
public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> implements SysLogService {
/**
* 批量插入前端错误日志
* @param preLogVoList 日志信息
* @return true/false
*/
@Override
public Boolean saveBatchLogs(List<PreLogVO> preLogVoList) {
List<SysLog> sysLogs = preLogVoList.stream().map(pre -> {
SysLog log = new SysLog();
log.setLogType(LogTypeEnum.ERROR.getType());
log.setTitle(pre.getInfo());
log.setException(pre.getStack());
log.setParams(pre.getMessage());
log.setCreateTime(LocalDateTime.now());
log.setRequestUri(pre.getUrl());
log.setCreateBy(pre.getUser());
return log;
}).collect(Collectors.toList());
return this.saveBatch(sysLogs);
}
/**
* 批量插入前端错误日志
*
* @param preLogVoList 日志信息
* @return true/false
*/
@Override
public Boolean saveBatchLogs(List<PreLogVO> preLogVoList) {
List<SysLog> sysLogs = preLogVoList.stream().map(pre -> {
SysLog log = new SysLog();
log.setLogType(LogTypeEnum.ERROR.getType());
log.setTitle(pre.getInfo());
log.setException(pre.getStack());
log.setParams(pre.getMessage());
log.setCreateTime(LocalDateTime.now());
log.setRequestUri(pre.getUrl());
log.setCreateBy(pre.getUser());
return log;
}).collect(Collectors.toList());
return this.saveBatch(sysLogs);
}
@Override
public Page getLogByPage(Page page, SysLogDTO sysLog) {
@Override
public Page getLogByPage(Page page, SysLogDTO sysLog) {
LambdaQueryWrapper<SysLog> wrapper = Wrappers.lambdaQuery();
if (StrUtil.isNotBlank(sysLog.getLogType())) {
wrapper.eq(SysLog::getLogType, sysLog.getLogType());
}
LambdaQueryWrapper<SysLog> wrapper = Wrappers.lambdaQuery();
if (StrUtil.isNotBlank(sysLog.getLogType())) {
wrapper.eq(SysLog::getLogType, sysLog.getLogType());
}
if (ArrayUtil.isNotEmpty(sysLog.getCreateTime())) {
wrapper.ge(SysLog::getCreateTime, sysLog.getCreateTime()[0])
.le(SysLog::getCreateTime, sysLog.getCreateTime()[1]);
}
if (ArrayUtil.isNotEmpty(sysLog.getCreateTime())) {
wrapper.ge(SysLog::getCreateTime, sysLog.getCreateTime()[0])
.le(SysLog::getCreateTime, sysLog.getCreateTime()[1]);
}
wrapper.eq(StrUtil.isNotBlank(sysLog.getServiceId()), SysLog::getServiceId, sysLog.getServiceId());
return baseMapper.selectPage(page, wrapper);
}
wrapper.eq(StrUtil.isNotBlank(sysLog.getServiceId()), SysLog::getServiceId, sysLog.getServiceId());
return baseMapper.selectPage(page, wrapper);
}
/**
* 插入日志
* @param sysLog 日志对象
* @return true/false
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveLog(SysLogDTO sysLog) {
TenantBroker.applyAs(sysLog::getTenantId, tenantId -> {
TenantContextHolder.setTenantId(tenantId);
SysLog log = new SysLog();
BeanUtils.copyProperties(sysLog, log, "createTime");
return baseMapper.insert(log);
});
return Boolean.TRUE;
}
/**
* 插入日志
*
* @param sysLog 日志对象
* @return true/false
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveLog(SysLogDTO sysLog) {
TenantBroker.applyAs(sysLog::getTenantId, tenantId -> {
TenantContextHolder.setTenantId(tenantId);
SysLog log = new SysLog();
BeanUtils.copyProperties(sysLog, log, "createTime");
return baseMapper.insert(log);
});
return Boolean.TRUE;
}
/**
* sum 函数计算三十天内的数据
* @return list map
*/
@Override
public List<Map<String, Object>> getLogSum() {
// 查询createTime 最近 30天的数据
List<SysLog> sysLogList = baseMapper
.selectList(Wrappers.<SysLog>lambdaQuery().ge(SysLog::getCreateTime, LocalDateTime.now().minusDays(30)));
return sysLogList.stream()
.collect(Collectors.groupingBy(log -> DateUtil.format(log.getCreateTime(), DatePattern.NORM_DATE_PATTERN)))
.entrySet()
.stream()
.map(entry -> {
Map<String, Object> map = entry.getValue()
.stream()
.collect(Collectors.groupingBy(SysLog::getLogType))
.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, value -> value.getValue().size()));
map.put(SysLog.Fields.createTime, entry.getKey());
return map;
})
.collect(Collectors.toList());
}
/**
* sum 函数计算三十天内的数据
*
* @return list map
*/
@Override
public List<Map<String, Object>> getLogSum() {
// 查询createTime最近30天的数据
List<SysLog> sysLogList = baseMapper
.selectList(Wrappers.<SysLog>lambdaQuery().ge(SysLog::getCreateTime, LocalDateTime.now().minusDays(30)));
return sysLogList.stream()
// 按照日期进行分组
.collect(Collectors.groupingBy(log -> DateUtil.format(log.getCreateTime(), DatePattern.NORM_DATE_PATTERN)))
.entrySet().stream()
// 将每个日期对应的日志按日志类型分组,并计算每种类型的日志数量
.map(entry -> {
Map<String, Object> map = entry.getValue().stream()
.collect(Collectors.groupingBy(SysLog::getLogType,
Collectors.collectingAndThen(Collectors.counting(), Long::intValue)));
map.put(SysLog.Fields.createTime, entry.getKey());
return map;
})
// 按createTime升序排序
.sorted(Comparator.comparing(map -> map.get(SysLog.Fields.createTime).toString()))
.collect(Collectors.toList());
}
}