ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-ui/.env.development | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-ui/.env.production | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-ui/.env.staging | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-ui/vue.config.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java
@@ -70,20 +70,31 @@ return page; } public static <T> Page<T> buildPage() { return buildPage(null, null); } /** * 构建 MP 普通分页对象 * @param <T> domain 实体 * @return 分页对象 */ public static <T> Page<T> buildPage() { public static <T> Page<T> buildPage(String defaultOrderByColumn, String defaultIsAsc) { Integer pageNum = ServletUtils.getParameterToInt(PAGE_NUM, DEFAULT_PAGE_NUM); Integer pageSize = ServletUtils.getParameterToInt(PAGE_SIZE, DEFAULT_PAGE_SIZE); String orderByColumn = ServletUtils.getParameter(ORDER_BY_COLUMN); String isAsc = ServletUtils.getParameter(IS_ASC); String orderByColumn = ServletUtils.getParameter(ORDER_BY_COLUMN, defaultOrderByColumn); String isAsc = ServletUtils.getParameter(IS_ASC, defaultIsAsc); // 兼容前端排序类型 if ("ascending".equals(isAsc)) { isAsc = "asc"; } else if ("descending".equals(isAsc)) { isAsc = "desc"; } Page<T> page = new Page<>(pageNum, pageSize); if (StrUtil.isNotBlank(orderByColumn)) { String orderBy = SqlUtil.escapeOrderBySql(orderByColumn); if ("asc".equals(isAsc)) { orderBy = StrUtil.toUnderlineCase(orderBy); if ("asc".equals(isAsc)) { page.addOrder(OrderItem.asc(orderBy)); } else if ("desc".equals(isAsc)) { page.addOrder(OrderItem.desc(orderBy)); ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
@@ -1,144 +1,144 @@ package com.ruoyi.quartz.controller; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.exception.job.TaskException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.quartz.domain.SysJob; import com.ruoyi.quartz.service.ISysJobService; import com.ruoyi.quartz.util.CronUtils; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 调度任务信息操作处理 * * @author ruoyi */ @RestController @RequestMapping("/monitor/job") public class SysJobController extends BaseController { @Autowired private ISysJobService jobService; /** * 查询定时任务列表 */ @PreAuthorize("@ss.hasPermi('monitor:job:list')") @GetMapping("/list") public TableDataInfo list(SysJob sysJob) { return jobService.selectPageJobList(sysJob); } /** * 导出定时任务列表 */ @PreAuthorize("@ss.hasPermi('monitor:job:export')") @Log(title = "定时任务", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(SysJob sysJob) { List<SysJob> list = jobService.selectJobList(sysJob); ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class); return util.exportExcel(list, "定时任务"); } /** * 获取定时任务详细信息 */ @PreAuthorize("@ss.hasPermi('monitor:job:query')") @GetMapping(value = "/{jobId}") public AjaxResult getInfo(@PathVariable("jobId") Long jobId) { return AjaxResult.success(jobService.selectJobById(jobId)); } /** * 新增定时任务 */ @PreAuthorize("@ss.hasPermi('monitor:job:add')") @Log(title = "定时任务", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody SysJob sysJob) throws SchedulerException, TaskException { if (!CronUtils.isValid(sysJob.getCronExpression())) { return AjaxResult.error("新增任务'" + sysJob.getJobName() + "'失败,Cron表达式不正确"); } else if (StringUtils.containsIgnoreCase(sysJob.getInvokeTarget(), Constants.LOOKUP_RMI)) { return AjaxResult.error("新增任务'" + sysJob.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); } sysJob.setCreateBy(SecurityUtils.getUsername()); return toAjax(jobService.insertJob(sysJob)); } /** * 修改定时任务 */ @PreAuthorize("@ss.hasPermi('monitor:job:edit')") @Log(title = "定时任务", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody SysJob sysJob) throws SchedulerException, TaskException { if (!CronUtils.isValid(sysJob.getCronExpression())) { return AjaxResult.error("修改任务'" + sysJob.getJobName() + "'失败,Cron表达式不正确"); } else if (StringUtils.containsIgnoreCase(sysJob.getInvokeTarget(), Constants.LOOKUP_RMI)) { return AjaxResult.error("修改任务'" + sysJob.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); } sysJob.setUpdateBy(SecurityUtils.getUsername()); return toAjax(jobService.updateJob(sysJob)); } /** * 定时任务状态修改 */ @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") @Log(title = "定时任务", businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException { SysJob newJob = jobService.selectJobById(job.getJobId()); newJob.setStatus(job.getStatus()); return toAjax(jobService.changeStatus(newJob)); } /** * 定时任务立即执行一次 */ @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") @Log(title = "定时任务", businessType = BusinessType.UPDATE) @PutMapping("/run") public AjaxResult run(@RequestBody SysJob job) throws SchedulerException { jobService.run(job); return AjaxResult.success(); } /** * 删除定时任务 */ @PreAuthorize("@ss.hasPermi('monitor:job:remove')") @Log(title = "定时任务", businessType = BusinessType.DELETE) @DeleteMapping("/{jobIds}") public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException { jobService.deleteJobByIds(jobIds); return AjaxResult.success(); } } package com.ruoyi.quartz.controller; import cn.hutool.core.util.StrUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.exception.job.TaskException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.quartz.domain.SysJob; import com.ruoyi.quartz.service.ISysJobService; import com.ruoyi.quartz.util.CronUtils; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 调度任务信息操作处理 * * @author ruoyi */ @RestController @RequestMapping("/monitor/job") public class SysJobController extends BaseController { @Autowired private ISysJobService jobService; /** * 查询定时任务列表 */ @PreAuthorize("@ss.hasPermi('monitor:job:list')") @GetMapping("/list") public TableDataInfo list(SysJob sysJob) { return jobService.selectPageJobList(sysJob); } /** * 导出定时任务列表 */ @PreAuthorize("@ss.hasPermi('monitor:job:export')") @Log(title = "定时任务", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(SysJob sysJob) { List<SysJob> list = jobService.selectJobList(sysJob); ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class); return util.exportExcel(list, "定时任务"); } /** * 获取定时任务详细信息 */ @PreAuthorize("@ss.hasPermi('monitor:job:query')") @GetMapping(value = "/{jobId}") public AjaxResult getInfo(@PathVariable("jobId") Long jobId) { return AjaxResult.success(jobService.selectJobById(jobId)); } /** * 新增定时任务 */ @PreAuthorize("@ss.hasPermi('monitor:job:add')") @Log(title = "定时任务", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody SysJob sysJob) throws SchedulerException, TaskException { if (!CronUtils.isValid(sysJob.getCronExpression())) { return AjaxResult.error("新增任务'" + sysJob.getJobName() + "'失败,Cron表达式不正确"); } else if (StrUtil.containsIgnoreCase(sysJob.getInvokeTarget(), Constants.LOOKUP_RMI)) { return AjaxResult.error("新增任务'" + sysJob.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); } sysJob.setCreateBy(SecurityUtils.getUsername()); return toAjax(jobService.insertJob(sysJob)); } /** * 修改定时任务 */ @PreAuthorize("@ss.hasPermi('monitor:job:edit')") @Log(title = "定时任务", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody SysJob sysJob) throws SchedulerException, TaskException { if (!CronUtils.isValid(sysJob.getCronExpression())) { return AjaxResult.error("修改任务'" + sysJob.getJobName() + "'失败,Cron表达式不正确"); } else if (StrUtil.containsIgnoreCase(sysJob.getInvokeTarget(), Constants.LOOKUP_RMI)) { return AjaxResult.error("修改任务'" + sysJob.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); } sysJob.setUpdateBy(SecurityUtils.getUsername()); return toAjax(jobService.updateJob(sysJob)); } /** * 定时任务状态修改 */ @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") @Log(title = "定时任务", businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException { SysJob newJob = jobService.selectJobById(job.getJobId()); newJob.setStatus(job.getStatus()); return toAjax(jobService.changeStatus(newJob)); } /** * 定时任务立即执行一次 */ @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") @Log(title = "定时任务", businessType = BusinessType.UPDATE) @PutMapping("/run") public AjaxResult run(@RequestBody SysJob job) throws SchedulerException { jobService.run(job); return AjaxResult.success(); } /** * 删除定时任务 */ @PreAuthorize("@ss.hasPermi('monitor:job:remove')") @Log(title = "定时任务", businessType = BusinessType.DELETE) @DeleteMapping("/{jobIds}") public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException { jobService.deleteJobByIds(jobIds); return AjaxResult.success(); } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -1,7 +1,7 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -64,14 +63,13 @@ for (SysDept dept : depts) { tempList.add(dept.getDeptId()); } for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext(); ) { SysDept dept = (SysDept) iterator.next(); // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(dept.getParentId())) { recursionFn(depts, dept); returnList.add(dept); } } for (SysDept dept : depts) { // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(dept.getParentId())) { recursionFn(depts, dept); returnList.add(dept); } } if (returnList.isEmpty()) { returnList = depts; } @@ -137,7 +135,7 @@ int result = count(new LambdaQueryWrapper<SysDept>() .eq(SysDept::getParentId, deptId) .last("limit 1")); return result > 0 ? true : false; return result > 0; } /** @@ -150,7 +148,7 @@ public boolean checkDeptExistUser(Long deptId) { int result = userMapper.selectCount(new LambdaQueryWrapper<SysUser>() .eq(SysUser::getDeptId, deptId)); return result > 0 ? true : false; return result > 0; } /** @@ -218,16 +216,12 @@ * * @param dept 当前部门 */ private void updateParentDeptStatus(SysDept dept) { String updateBy = dept.getUpdateBy(); dept = getById(dept.getDeptId()); dept.setUpdateBy(updateBy); update(null,new LambdaUpdateWrapper<SysDept>() .set(StrUtil.isNotBlank(dept.getStatus()), SysDept::getStatus,dept.getStatus()) .set(StrUtil.isNotBlank(dept.getUpdateBy()), SysDept::getUpdateBy,dept.getUpdateBy()) .in(SysDept::getDeptId, Arrays.asList(dept.getAncestors().split(",")))); private void updateParentDeptStatusNormal(SysDept dept) { String ancestors = dept.getAncestors(); Long[] deptIds = Convert.toLongArray(ancestors); update(null, new LambdaUpdateWrapper<SysDept>() .set(SysDept::getStatus, "0") .in(SysDept::getDeptId, Arrays.asList(deptIds))); } /** @@ -278,13 +272,11 @@ */ private List<SysDept> getChildList(List<SysDept> list, SysDept t) { List<SysDept> tlist = new ArrayList<SysDept>(); Iterator<SysDept> it = list.iterator(); while (it.hasNext()) { SysDept n = (SysDept) it.next(); if (Validator.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) { tlist.add(n); } } for (SysDept n : list) { if (Validator.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) { tlist.add(n); } } return tlist; } @@ -292,6 +284,6 @@ * 判断是否有子节点 */ private boolean hasChild(List<SysDept> list, SysDept t) { return getChildList(list, t).size() > 0 ? true : false; return getChildList(list, t).size() > 0; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
@@ -36,9 +36,8 @@ params.get("beginTime")) .apply(Validator.isNotEmpty(params.get("endTime")), "date_format(login_time,'%y%m%d') <= date_format({0},'%y%m%d')", params.get("endTime")) .orderByDesc(SysLogininfor::getInfoId); return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); params.get("endTime")); return PageUtils.buildDataInfo(page(PageUtils.buildPage("info_id","desc"), lqw)); } /** ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -25,7 +25,7 @@ /** * 菜单 业务层处理 * * * @author ruoyi */ @Service @@ -137,7 +137,7 @@ router.setComponent(getComponent(menu)); router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StrUtil.equals("1", menu.getIsCache()))); List<SysMenu> cMenus = menu.getChildren(); if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { router.setAlwaysShow(true); router.setRedirect("noRedirect"); router.setChildren(buildMenus(cMenus)); @@ -170,14 +170,13 @@ for (SysMenu dept : menus) { tempList.add(dept.getMenuId()); } for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext(); ) { SysMenu menu = (SysMenu) iterator.next(); // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(menu.getParentId())) { recursionFn(menus, menu); returnList.add(menu); } } for (SysMenu menu : menus) { // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(menu.getParentId())) { recursionFn(menus, menu); returnList.add(menu); } } if (returnList.isEmpty()) { returnList = menus; } @@ -216,7 +215,7 @@ @Override public boolean hasChildByMenuId(Long menuId) { int result = count(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId,menuId)); return result > 0 ? true : false; return result > 0; } /** @@ -228,7 +227,7 @@ @Override public boolean checkMenuExistRole(Long menuId) { int result = roleMenuMapper.selectCount(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getMenuId,menuId)); return result > 0 ? true : false; return result > 0; } /** @@ -364,14 +363,13 @@ */ public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) { List<SysMenu> returnList = new ArrayList<SysMenu>(); for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext(); ) { SysMenu t = (SysMenu) iterator.next(); // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 if (t.getParentId() == parentId) { recursionFn(list, t); returnList.add(t); } } for (SysMenu t : list) { // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 if (t.getParentId() == parentId) { recursionFn(list, t); returnList.add(t); } } return returnList; } @@ -397,13 +395,11 @@ */ private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) { List<SysMenu> tlist = new ArrayList<SysMenu>(); Iterator<SysMenu> it = list.iterator(); while (it.hasNext()) { SysMenu n = (SysMenu) it.next(); if (n.getParentId().longValue() == t.getMenuId().longValue()) { tlist.add(n); } } for (SysMenu n : list) { if (n.getParentId().longValue() == t.getMenuId().longValue()) { tlist.add(n); } } return tlist; } @@ -411,6 +407,6 @@ * 判断是否有子节点 */ private boolean hasChild(List<SysMenu> list, SysMenu t) { return getChildList(list, t).size() > 0 ? true : false; return getChildList(list, t).size() > 0; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
@@ -45,9 +45,8 @@ params.get("beginTime")) .apply(Validator.isNotEmpty(params.get("endTime")), "date_format(oper_time,'%y%m%d') <= date_format({0},'%y%m%d')", params.get("endTime")) .orderByDesc(SysOperLog::getOperId); return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); params.get("endTime")); return PageUtils.buildDataInfo(page(PageUtils.buildPage("oper_id","desc"), lqw)); } /** ruoyi-ui/.env.development
@@ -1,5 +1,5 @@ # 页面标题 VUE_APP_TITLE = 若依管理系统 VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统 # 开发环境配置 ENV = 'development' ruoyi-ui/.env.production
@@ -1,5 +1,5 @@ # 页面标题 VUE_APP_TITLE = 若依管理系统 VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统 # 生产环境配置 ENV = 'production' ruoyi-ui/.env.staging
@@ -1,5 +1,5 @@ # 页面标题 VUE_APP_TITLE = 若依管理系统 VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统 NODE_ENV = production ruoyi-ui/vue.config.js
@@ -5,7 +5,7 @@ return path.join(__dirname, dir) } const name = defaultSettings.title || 'RuoYi-Vue-Plus后台管理系统' // 网页标题 const name = process.env.VUE_APP_TITLE || 'RuoYi-Vue-Plus后台管理系统' // 网页标题 const port = process.env.port || process.env.npm_config_port || 80 // 端口