| /** | 
|  * 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<SysLogOperationDao, SysLogOperation> { | 
|     @Autowired | 
|     private SysRoleUserService sysRoleUserService; | 
|   | 
|     public List<SysLogOperation> page(QueryFilter queryFilter,String startCreateTime, String endCreateTime) { | 
|         String roleName = ""; | 
|         List<RoleDto> 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<SysLogOperation> 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<RoleDto> 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<SysLogOperation> list = baseDao.getList(queryFilter.getQueryParams()); | 
|             List<SysLogOperationExcel> sysLogOperationList = new ArrayList<SysLogOperationExcel>(); | 
|             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<SysLogOperation> sysLogOperationList = page(queryFilter,startCreateTime,endCreateTime); | 
|         List<SysLogOperation> list = new ArrayList<SysLogOperation>(); | 
|         for (SysLogOperation sysLogOperation : sysLogOperationList) { | 
|             SysLogOperation logOperation = new SysLogOperation(); | 
|             logOperation.setId(sysLogOperation.getId()); | 
|             list.add(logOperation); | 
|         } | 
|         baseDao.deleteCondition(list); | 
|     } | 
| } |