/** * Copyright (c) 2018 人人开源 All rights reserved. * * https://www.renren.io * * 版权所有,侵权必究! */ package com.zt.modules.log.service; import com.zt.common.db.query.QueryFilter; import com.zt.common.service.BaseService; import com.zt.common.utils.ExcelUtils; import com.zt.core.context.UserContext; import com.zt.modules.log.dao.SysLogOperationDao; import com.zt.modules.log.excel.SysLogOperationExcel; import com.zt.modules.log.model.SysLogOperation; import com.zt.modules.sys.dto.RoleDto; import com.zt.modules.sys.service.SysRoleUserService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 操作日志 * * @author Mark sunlightcs@gmail.com * @since 1.0.0 */ @Service public class SysLogOperationService extends BaseService { @Autowired private SysRoleUserService sysRoleUserService; public List page(QueryFilter queryFilter,String startCreateTime, String endCreateTime) { String roleName = ""; List roles = sysRoleUserService.getUserRoles(UserContext.getUser().getId()); if (roles != null && roles.size() > 0) { // 同时拥有两种权限查看全部 if (roles.stream().filter(p -> p.getCode().equals("xtbmybm")).count() > 0 && roles.stream().filter(p -> p.getCode().equals("xtsjybm")).count() > 0) { roleName = "all"; } else { // 如果当前用户拥有角色编码为xtbmy的角色权限,则查看除系统管理员(拥有角色编码为xtgly权限的用户)、系统保密员(拥有角色编码为xtsjy权限的用户)以外的用户登录、操作日志 if (roles.stream().filter(p -> p.getCode().equals("xtbmybm")).count() > 0) { roleName = "xtbmybm"; } // 如果当前用户拥有角色编码为xtsjy的角色权限,则查看系统管理员(拥有角色编码为xtgly权限的用户)、系统保密员的登录(拥有角色编码为xtsjy权限的用户)、操作日志 else if (roles.stream().filter(p -> p.getCode().equals("xtsjybm")).count() > 0) { roleName = "xtsjybm"; } else { roleName = "other"; } } } else { roleName = "other"; } if (StringUtils.isNotBlank(startCreateTime)) { queryFilter.getParams().put("startCreateTime",startCreateTime); } if (StringUtils.isNotBlank(endCreateTime)) { StringBuilder endCreateTimeBuilder = new StringBuilder(); endCreateTimeBuilder.append(endCreateTime); endCreateTimeBuilder.append(" 23:59:59"); queryFilter.getParams().put("endCreateTime",endCreateTimeBuilder.toString() ); } queryFilter.addParam("action", roleName); queryFilter.addParam("currentUserId", UserContext.getUser().getId()); List list = baseDao.getList(queryFilter.getQueryParams()); return queryFilter.getPageList(list); } public void list(HttpServletResponse response, Integer status,String startCreateTime, String endCreateTime) throws IOException { try { // 导出文件名称 String fileName = "操作日志"; QueryFilter queryFilter = new QueryFilter(); if (status != null) { queryFilter.getParams().put("status", status); } if (StringUtils.isNotBlank(startCreateTime)) { queryFilter.getParams().put("startCreateTime",startCreateTime); } if (StringUtils.isNotBlank(endCreateTime)) { queryFilter.getParams().put("endCreateTime",endCreateTime); } String roleName = ""; List roles = sysRoleUserService.getUserRoles(UserContext.getUser().getId()); if (roles != null && roles.size() > 0) { // 同时拥有两种权限查看全部 if (roles.stream().filter(p -> p.getCode().equals("xtbmybm")).count() > 0 && roles.stream().filter(p -> p.getCode().equals("xtsjybm")).count() > 0) { roleName = "all"; } else { // 如果当前用户拥有角色编码为xtbmy的角色权限,则查看除系统管理员(拥有角色编码为xtgly权限的用户)、系统保密员(拥有角色编码为xtsjy权限的用户)以外的用户登录、操作日志 if (roles.stream().filter(p -> p.getCode().equals("xtbmybm")).count() > 0) { roleName = "xtbmybm"; } // 如果当前用户拥有角色编码为xtsjy的角色权限,则查看系统管理员(拥有角色编码为xtgly权限的用户)、系统保密员的登录(拥有角色编码为xtsjy权限的用户)、操作日志 else if (roles.stream().filter(p -> p.getCode().equals("xtsjybm")).count() > 0) { roleName = "xtsjybm"; } else { roleName = "other"; } } } else { roleName = "other"; } queryFilter.addParam("action", roleName); queryFilter.addParam("currentUserId", UserContext.getUser().getId()); List list = baseDao.getList(queryFilter.getQueryParams()); List sysLogOperationList = new ArrayList(); for (SysLogOperation sysLogOperation : list) { SysLogOperationExcel logOperation = new SysLogOperationExcel(); logOperation.setCreatorName(sysLogOperation.getCreatorName()); logOperation.setOperation(sysLogOperation.getOperation()); logOperation.setRequestUri(sysLogOperation.getRequestUri()); logOperation.setRequestMethod(sysLogOperation.getRequestMethod()); String requestParams = sysLogOperation.getRequestParams(); if (requestParams != null && !requestParams.equals("") && requestParams.length()>30000) { String substring = requestParams.substring(0, 15000); logOperation.setRequestParams(substring); }else { logOperation.setRequestParams(requestParams); } logOperation.setRequestTime(sysLogOperation.getRequestTime()); if (sysLogOperation.getStatus() == 0) { logOperation.setStatus("失败"); }else { logOperation.setStatus("成功"); } logOperation.setIp(sysLogOperation.getIp()); logOperation.setUserAgent(sysLogOperation.getUserAgent()); logOperation.setCreateDate(sysLogOperation.getCreateDate()); sysLogOperationList.add(logOperation); } ExcelUtils.export(response, fileName, new String[]{"操作日志"},new List[]{sysLogOperationList}); } catch (Exception e) { e.printStackTrace(); } } @Transactional(rollbackFor = Exception.class) public void insert(SysLogOperation entity) { baseDao.insert(entity); } public void delete(Integer status,String startCreateTime, String endCreateTime) { QueryFilter queryFilter = new QueryFilter(); if (status != null) { queryFilter.getParams().put("status", status); } List sysLogOperationList = page(queryFilter,startCreateTime,endCreateTime); List list = new ArrayList(); for (SysLogOperation sysLogOperation : sysLogOperationList) { SysLogOperation logOperation = new SysLogOperation(); logOperation.setId(sysLogOperation.getId()); list.add(logOperation); } baseDao.deleteCondition(list); } }