|
|
|
|
@@ -21,14 +21,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
import com.github.tocrhz.mqtt.publisher.MqttPublisher;
|
|
|
|
|
import com.nimbusds.jose.JWSObject;
|
|
|
|
|
import com.njcn.common.config.GeneralInfo;
|
|
|
|
|
import com.njcn.common.pojo.constant.LogInfo;
|
|
|
|
|
import com.njcn.common.pojo.constant.OperateType;
|
|
|
|
|
import com.njcn.common.pojo.constant.SecurityConstants;
|
|
|
|
|
import com.njcn.common.pojo.dto.DeviceLogDTO;
|
|
|
|
|
import com.njcn.common.pojo.dto.LogInfoDTO;
|
|
|
|
|
import com.njcn.common.pojo.dto.UserTokenInfo;
|
|
|
|
|
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
|
|
|
|
import com.njcn.common.pojo.enums.common.LogEnum;
|
|
|
|
|
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
|
|
|
|
import com.njcn.common.pojo.exception.BusinessException;
|
|
|
|
|
import com.njcn.common.utils.PubUtils;
|
|
|
|
|
import com.njcn.common.utils.ReflectCommonUtil;
|
|
|
|
|
import com.njcn.oss.constant.OssPath;
|
|
|
|
|
import com.njcn.redis.utils.RedisUtil;
|
|
|
|
|
import com.njcn.system.enums.AuditLogEnum;
|
|
|
|
|
@@ -43,17 +50,21 @@ import com.njcn.system.service.AuditService;
|
|
|
|
|
import com.njcn.system.service.IConfigService;
|
|
|
|
|
import com.njcn.user.api.UserFeignClient;
|
|
|
|
|
import com.njcn.user.pojo.po.User;
|
|
|
|
|
import com.njcn.web.advice.DeviceLog;
|
|
|
|
|
import com.njcn.web.utils.RequestUtil;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import org.apache.commons.compress.utils.IOUtils;
|
|
|
|
|
import org.apache.commons.fileupload.FileItem;
|
|
|
|
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.http.MediaType;
|
|
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
@@ -91,33 +102,42 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
|
|
|
|
|
|
|
|
|
|
private final IConfigService iConfigService;
|
|
|
|
|
|
|
|
|
|
private final MqttPublisher publisher;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Page<AuditLogVO> getAuditLog(AuditParam auditParam) {
|
|
|
|
|
List<AuditLogVO> auditLogVOS = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<UserLog> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
lambdaQueryWrapper
|
|
|
|
|
.between(UserLog::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(auditParam.getSearchBeginTime())),
|
|
|
|
|
QueryWrapper<UserLog> queryWrapper = new QueryWrapper<>();
|
|
|
|
|
queryWrapper
|
|
|
|
|
.between("sys_user_log.create_time", DateUtil.beginOfDay(DateUtil.parse(auditParam.getSearchBeginTime())),
|
|
|
|
|
DateUtil.endOfDay(DateUtil.parse(auditParam.getSearchEndTime())))
|
|
|
|
|
.ne(UserLog::getLoginName,UNKNOWN_USER)
|
|
|
|
|
.orderByDesc(UserLog::getCreateTime);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.ne("sys_user_log.login_name", UNKNOWN_USER);
|
|
|
|
|
if (StrUtil.isNotBlank(auditParam.getLoginName())) {
|
|
|
|
|
lambdaQueryWrapper.eq(UserLog::getLoginName, auditParam.getLoginName());
|
|
|
|
|
queryWrapper.eq("sys_user_log.login_name", auditParam.getLoginName());
|
|
|
|
|
}
|
|
|
|
|
if (StrUtil.isNotBlank(auditParam.getOperateType())) {
|
|
|
|
|
lambdaQueryWrapper.eq(UserLog::getOperateType, auditParam.getOperateType());
|
|
|
|
|
queryWrapper.eq("sys_user_log.operate_type", auditParam.getOperateType());
|
|
|
|
|
}
|
|
|
|
|
if (Objects.nonNull(auditParam.getType())) {
|
|
|
|
|
lambdaQueryWrapper.eq(UserLog::getType, auditParam.getType());
|
|
|
|
|
queryWrapper.eq("sys_user_log.type", auditParam.getType());
|
|
|
|
|
}
|
|
|
|
|
if (Objects.nonNull(auditParam.getResult())) {
|
|
|
|
|
lambdaQueryWrapper.eq(UserLog::getResult, auditParam.getResult());
|
|
|
|
|
queryWrapper.eq("sys_user_log.result", auditParam.getResult());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (StrUtil.isNotBlank(auditParam.getSortBy()) && StrUtil.isNotBlank(auditParam.getOrderBy())) {
|
|
|
|
|
if (auditParam.getOrderBy().equalsIgnoreCase("desc")) {
|
|
|
|
|
queryWrapper.orderByDesc("sys_user_log." + auditParam.getSortBy());
|
|
|
|
|
} else {
|
|
|
|
|
queryWrapper.orderByAsc("sys_user_log." + auditParam.getSortBy());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
queryWrapper.orderByDesc("sys_user_log.create_time");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Page<UserLog> info = this.page(new Page<>(auditParam.getPageNum(), auditParam.getPageSize()), lambdaQueryWrapper);
|
|
|
|
|
Page<UserLog> info = this.page(new Page<>(auditParam.getPageNum(), auditParam.getPageSize()), queryWrapper);
|
|
|
|
|
|
|
|
|
|
Page<AuditLogVO> page = BeanUtil.copyProperties(info, Page.class);
|
|
|
|
|
if (CollUtil.isNotEmpty(info.getRecords())) {
|
|
|
|
|
@@ -156,6 +176,37 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
|
|
|
|
|
return page;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Async("asyncExecutor")
|
|
|
|
|
public void saveAuditLog(HttpServletRequest request, AuditParam auditParam, String methodDescribe) {
|
|
|
|
|
//处理审计日志
|
|
|
|
|
String loginName;
|
|
|
|
|
String userName;
|
|
|
|
|
String userIndex;
|
|
|
|
|
loginName = RequestUtil.getLoginNameByPayload(request);
|
|
|
|
|
userName = RequestUtil.getUserNickname(request);
|
|
|
|
|
userIndex = RequestUtil.getUserIndex(request);
|
|
|
|
|
String result = CommonResponseEnum.SUCCESS.getMessage();
|
|
|
|
|
String ip = RequestUtil.getRealIp(request);
|
|
|
|
|
String type = LogEnum.BUSINESS_COMMON.getOperateType();
|
|
|
|
|
String level = LogEnum.BUSINESS_COMMON.getOperateLevel();
|
|
|
|
|
String operateType = OperateType.QUERY;
|
|
|
|
|
Integer severity = levelStringToNumber(level);
|
|
|
|
|
if(auditParam.isExport()){
|
|
|
|
|
methodDescribe = "审计日志列表导出";
|
|
|
|
|
}else{
|
|
|
|
|
if (StrUtil.isNotBlank(auditParam.getSortBy()) && StrUtil.isNotBlank(auditParam.getOrderBy())) {
|
|
|
|
|
methodDescribe = methodDescribe.concat("并以")
|
|
|
|
|
.concat(auditParam.getSortName())
|
|
|
|
|
.concat("进行")
|
|
|
|
|
.concat(auditParam.getOrderBy().equalsIgnoreCase("desc")?"降序":"升序")
|
|
|
|
|
.concat("查询");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LogInfoDTO logInfoDTO = new LogInfoDTO(loginName, userName, ip, methodDescribe, operateType, result.equalsIgnoreCase("失败") ? 0 : 1, "", severity, type.equalsIgnoreCase("业务事件") ? 0 : 1, generalInfo.getMicroServiceName(), userIndex, LocalDateTime.now());
|
|
|
|
|
publisher.send("/userLog", PubUtils.obj2json(logInfoDTO), 2, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void logFileWriter() {
|
|
|
|
|
TimeInterval timeInterval = new TimeInterval();
|
|
|
|
|
@@ -440,4 +491,18 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
|
|
|
|
|
return newFile;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 严重度 文字 转 数字
|
|
|
|
|
*/
|
|
|
|
|
private Integer levelStringToNumber(String level) {
|
|
|
|
|
switch (level) {
|
|
|
|
|
case "中等":
|
|
|
|
|
return 1;
|
|
|
|
|
case "严重":
|
|
|
|
|
return 2;
|
|
|
|
|
default:
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|