三、admin包
--web包
-----controller包
-----------common包
CommonController.java------通用请求处理
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ruoyi.web.controller.common; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.common.config.Global; import com.ruoyi.common.utils.file.FileUtils; /** * 通用请求处理 * * @author ruoyi */ @Controller public class CommonController { private static final Logger log = LoggerFactory.getLogger(CommonController.class); @RequestMapping("common/download") public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); try { String filePath = Global.getDownloadPath() + fileName; response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName=" + setFileDownloadHeader(request, realFileName)); FileUtils.writeBytes(filePath, response.getOutputStream()); if (delete) { FileUtils.deleteFile(filePath); } } catch (Exception e) { log.error("下载文件失败", e); } } public String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { final String agent = request.getHeader("USER-AGENT"); String filename = fileName; if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 filename = new String(fileName.getBytes(), "ISO8859-1"); } else if (agent.contains("Chrome")) { // google浏览器 filename = URLEncoder.encode(filename, "utf-8"); } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; } }
-----------monitor包
DruidController.java-------druid监控(是阿里创建的一种连接池)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ruoyi.web.controller.monitor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.web.core.base.BaseController; /** * druid 监控 * * @author ruoyi */ @Controller @RequestMapping("/monitor/data") public class DruidController extends BaseController { private String prefix = "/monitor/druid"; @RequiresPermissions("monitor:data:view") @GetMapping() public String index() { return redirect(prefix + "/index"); } }
SysJobController.java-------调度任务信息操作处理
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ruoyi.web.controller.monitor; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.quartz.domain.SysJob; import com.ruoyi.quartz.service.ISysJobService; import com.ruoyi.web.core.base.BaseController; /** * 调度任务信息操作处理 * * @author ruoyi */ @Controller @RequestMapping("/monitor/job") public class SysJobController extends BaseController { private String prefix = "monitor/job"; @Autowired private ISysJobService jobService; @RequiresPermissions("monitor:job:view") @GetMapping() public String job() { return prefix + "/job"; } @RequiresPermissions("monitor:job:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(SysJob job) { startPage(); List<SysJob> list = jobService.selectJobList(job); return getDataTable(list); } @Log(title = "定时任务", businessType = BusinessType.EXPORT) @RequiresPermissions("monitor:job:export") @PostMapping("/export") @ResponseBody public AjaxResult export(SysJob job) { List<SysJob> list = jobService.selectJobList(job); ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class); return util.exportExcel(list, "job"); } @Log(title = "定时任务", businessType = BusinessType.DELETE) @RequiresPermissions("monitor:job:remove") @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { try { jobService.deleteJobByIds(ids); return success(); } catch (Exception e) { e.printStackTrace(); return error(e.getMessage()); } } /** * 任务调度状态修改 */ @Log(title = "定时任务", businessType = BusinessType.UPDATE) @RequiresPermissions("monitor:job:changeStatus") @PostMapping("/changeStatus") @ResponseBody public AjaxResult changeStatus(SysJob job) { job.setUpdateBy(ShiroUtils.getLoginName()); return toAjax(jobService.changeStatus(job)); } /** * 任务调度立即执行一次 */ @Log(title = "定时任务", businessType = BusinessType.UPDATE) @RequiresPermissions("monitor:job:changeStatus") @PostMapping("/run") @ResponseBody public AjaxResult run(SysJob job) { return toAjax(jobService.run(job)); } /** * 新增调度 */ @GetMapping("/add") public String add() { return prefix + "/add"; } /** * 新增保存调度 */ @Log(title = "定时任务", businessType = BusinessType.INSERT) @RequiresPermissions("monitor:job:add") @PostMapping("/add") @ResponseBody public AjaxResult addSave(SysJob job) { job.setCreateBy(ShiroUtils.getLoginName()); return toAjax(jobService.insertJobCron(job)); } /** * 修改调度 */ @GetMapping("/edit/{jobId}") public String edit(@PathVariable("jobId") Long jobId, ModelMap mmap) { mmap.put("job", jobService.selectJobById(jobId)); return prefix + "/edit"; } /** * 修改保存调度 */ @Log(title = "定时任务", businessType = BusinessType.UPDATE) @RequiresPermissions("monitor:job:edit") @PostMapping("/edit") @ResponseBody public AjaxResult editSave(SysJob job) { job.setUpdateBy(ShiroUtils.getLoginName()); return toAjax(jobService.updateJobCron(job)); } }
SysJobLogController.java-------调度日志操作处理
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ruoyi.web.controller.monitor; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.quartz.domain.SysJobLog; import com.ruoyi.quartz.service.ISysJobLogService; import com.ruoyi.web.core.base.BaseController; /** * 调度日志操作处理 * * @author ruoyi */ @Controller @RequestMapping("/monitor/jobLog") public class SysJobLogController extends BaseController { private String prefix = "monitor/job"; @Autowired private ISysJobLogService jobLogService; @RequiresPermissions("monitor:job:view") @GetMapping() public String jobLog() { return prefix + "/jobLog"; } @RequiresPermissions("monitor:job:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(SysJobLog jobLog) { startPage(); List<SysJobLog> list = jobLogService.selectJobLogList(jobLog); return getDataTable(list); } @Log(title = "调度日志", businessType = BusinessType.EXPORT) @RequiresPermissions("monitor:job:export") @PostMapping("/export") @ResponseBody public AjaxResult export(SysJobLog jobLog) { List<SysJobLog> list = jobLogService.selectJobLogList(jobLog); ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class); return util.exportExcel(list, "jobLog"); } @Log(title = "调度日志", businessType = BusinessType.DELETE) @RequiresPermissions("monitor:job:remove") @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { return toAjax(jobLogService.deleteJobLogByIds(ids)); } @Log(title = "调度日志", businessType = BusinessType.CLEAN) @RequiresPermissions("monitor:job:remove") @PostMapping("/clean") @ResponseBody public AjaxResult clean() { jobLogService.cleanJobLog(); return success(); } }
SysLogininforController.java---------系统访问记录
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ruoyi.web.controller.monitor; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.system.domain.SysLogininfor; import com.ruoyi.system.service.ISysLogininforService; import com.ruoyi.web.core.base.BaseController; /** * 系统访问记录 * * @author ruoyi */ @Controller @RequestMapping("/monitor/logininfor") public class SysLogininforController extends BaseController { private String prefix = "monitor/logininfor"; @Autowired private ISysLogininforService logininforService; @RequiresPermissions("monitor:logininfor:view") @GetMapping() public String logininfor() { return prefix + "/logininfor"; } @RequiresPermissions("monitor:logininfor:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(SysLogininfor logininfor) { startPage(); List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); return getDataTable(list); } @Log(title = "登陆日志", businessType = BusinessType.EXPORT) @RequiresPermissions("monitor:logininfor:export") @PostMapping("/export") @ResponseBody public AjaxResult export(SysLogininfor logininfor) { List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class); return util.exportExcel(list, "logininfor"); } @RequiresPermissions("monitor:logininfor:remove") @Log(title = "登陆日志", businessType = BusinessType.DELETE) @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { return toAjax(logininforService.deleteLogininforByIds(ids)); } @RequiresPermissions("monitor:logininfor:remove") /** * 例如: @RequiresPermissions({"file:read", "write:aFile.txt"} ) * void someMethod(); * 要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。 */ @Log(title = "登陆日志", businessType = BusinessType.CLEAN) @PostMapping("/clean") @ResponseBody /** * @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML * * 数据 */ public AjaxResult clean() { logininforService.cleanLogininfor(); return success(); } }
SysOperlogController.java---------操作日志记录
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ruoyi.web.controller.monitor; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.system.domain.SysOperLog; import com.ruoyi.system.service.ISysOperLogService; import com.ruoyi.web.core.base.BaseController; /** * 操作日志记录 * * @author ruoyi */ @Controller @RequestMapping("/monitor/operlog") public class SysOperlogController extends BaseController { private String prefix = "monitor/operlog"; @Autowired private ISysOperLogService operLogService; @RequiresPermissions("monitor:operlog:view") @GetMapping() public String operlog() { return prefix + "/operlog"; } @RequiresPermissions("monitor:operlog:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(SysOperLog operLog) { startPage(); List<SysOperLog> list = operLogService.selectOperLogList(operLog); return getDataTable(list); } @Log(title = "操作日志", businessType = BusinessType.EXPORT) @RequiresPermissions("monitor:operlog:export") @PostMapping("/export") @ResponseBody public AjaxResult export(SysOperLog operLog) { List<SysOperLog> list = operLogService.selectOperLogList(operLog); ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class); return util.exportExcel(list, "operLog"); } @RequiresPermissions("monitor:operlog:remove") @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { return toAjax(operLogService.deleteOperLogByIds(ids)); } @RequiresPermissions("monitor:operlog:detail") @GetMapping("/detail/{operId}") public String detail(@PathVariable("operId") Long deptId, ModelMap mmap) { mmap.put("operLog", operLogService.selectOperLogById(deptId)); return prefix + "/detail"; } @Log(title = "操作日志", businessType = BusinessType.CLEAN) @RequiresPermissions("monitor:operlog:remove") @PostMapping("/clean") @ResponseBody public AjaxResult clean() { operLogService.cleanOperLog(); return success(); } }
SysUserOnlineController.java--------在线用户监控
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ruoyi.web.controller.monitor; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.OnlineStatus; import com.ruoyi.framework.shiro.session.OnlineSession; import com.ruoyi.framework.shiro.session.OnlineSessionDAO; import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.system.domain.SysUserOnline;