!6 同步develop分支

* sync -- 同步develop分支
This commit is contained in:
KonBAI
2022-01-18 13:16:15 +00:00
parent a649962696
commit 5676316380
338 changed files with 10957 additions and 9551 deletions

View File

@@ -7,7 +7,7 @@ import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.CaptchaType;
import com.ruoyi.common.utils.RedisUtils;
import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.common.utils.spring.SpringUtils;

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.Api;
@@ -9,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisServerCommands;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -30,7 +30,7 @@ public class CacheController {
private final RedisTemplate<String, String> redisTemplate;
@ApiOperation("获取缓存监控详细信息")
@PreAuthorize("@ss.hasPermi('monitor:cache:list')")
@SaCheckPermission("monitor:cache:list")
@GetMapping()
public R<Map<String, Object>> getInfo() throws Exception {
Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) RedisServerCommands::info);

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
@@ -13,7 +14,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -35,7 +35,7 @@ public class SysLogininforController extends BaseController {
private final ISysLogininforService logininforService;
@ApiOperation("查询系统访问记录列表")
@PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
@SaCheckPermission("monitor:logininfor:list")
@GetMapping("/list")
public TableDataInfo<SysLogininfor> list(SysLogininfor logininfor, PageQuery pageQuery) {
return logininforService.selectPageLogininforList(logininfor, pageQuery);
@@ -43,7 +43,7 @@ public class SysLogininforController extends BaseController {
@ApiOperation("导出系统访问记录列表")
@Log(title = "登录日志", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
@SaCheckPermission("monitor:logininfor:export")
@PostMapping("/export")
public void export(SysLogininfor logininfor, HttpServletResponse response) {
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
@@ -51,7 +51,7 @@ public class SysLogininforController extends BaseController {
}
@ApiOperation("删除系统访问记录")
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
@SaCheckPermission("monitor:logininfor:remove")
@Log(title = "登录日志", businessType = BusinessType.DELETE)
@DeleteMapping("/{infoIds}")
public R<Void> remove(@PathVariable Long[] infoIds) {
@@ -59,7 +59,7 @@ public class SysLogininforController extends BaseController {
}
@ApiOperation("清空系统访问记录")
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
@SaCheckPermission("monitor:logininfor:remove")
@Log(title = "登录日志", businessType = BusinessType.CLEAN)
@DeleteMapping("/clean")
public R<Void> clean() {

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
@@ -13,7 +14,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -35,7 +35,7 @@ public class SysOperlogController extends BaseController {
private final ISysOperLogService operLogService;
@ApiOperation("查询操作日志记录列表")
@PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
@SaCheckPermission("monitor:operlog:list")
@GetMapping("/list")
public TableDataInfo<SysOperLog> list(SysOperLog operLog, PageQuery pageQuery) {
return operLogService.selectPageOperLogList(operLog, pageQuery);
@@ -43,7 +43,7 @@ public class SysOperlogController extends BaseController {
@ApiOperation("导出操作日志记录列表")
@Log(title = "操作日志", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
@SaCheckPermission("monitor:operlog:export")
@PostMapping("/export")
public void export(SysOperLog operLog, HttpServletResponse response) {
List<SysOperLog> list = operLogService.selectOperLogList(operLog);
@@ -52,7 +52,7 @@ public class SysOperlogController extends BaseController {
@ApiOperation("删除操作日志记录")
@Log(title = "操作日志", businessType = BusinessType.DELETE)
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
@SaCheckPermission("monitor:operlog:remove")
@DeleteMapping("/{operIds}")
public R<Void> remove(@PathVariable Long[] operIds) {
return toAjax(operLogService.deleteOperLogByIds(operIds));
@@ -60,7 +60,7 @@ public class SysOperlogController extends BaseController {
@ApiOperation("清空操作日志记录")
@Log(title = "操作日志", businessType = BusinessType.CLEAN)
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
@SaCheckPermission("monitor:operlog:remove")
@DeleteMapping("/clean")
public R<Void> clean() {
operLogService.cleanOperLog();

View File

@@ -1,27 +1,29 @@
package com.ruoyi.web.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
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.R;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.domain.dto.UserOnlineDTO;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.RedisUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.service.ISysUserOnlineService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 在线用户监控
@@ -34,34 +36,38 @@ import java.util.List;
@RequestMapping("/monitor/online")
public class SysUserOnlineController extends BaseController {
private final ISysUserOnlineService userOnlineService;
@ApiOperation("在线用户列表")
@PreAuthorize("@ss.hasPermi('monitor:online:list')")
@SaCheckPermission("monitor:online:list")
@GetMapping("/list")
public TableDataInfo<SysUserOnline> list(String ipaddr, String userName) {
Collection<String> keys = RedisUtils.keys(Constants.LOGIN_TOKEN_KEY + "*");
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
// 获取所有未过期的 token
List<String> keys = StpUtil.searchTokenValue("", -1, 0);
List<UserOnlineDTO> userOnlineDTOList = new ArrayList<>();
for (String key : keys) {
LoginUser user = RedisUtils.getCacheObject(key);
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) {
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
}
} else if (StringUtils.isNotEmpty(ipaddr)) {
if (StringUtils.equals(ipaddr, user.getIpaddr())) {
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
}
} else if (StringUtils.isNotEmpty(userName)) {
if (StringUtils.equals(userName, user.getUsername())) {
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
}
} else {
userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
String token = key.replace(Constants.LOGIN_TOKEN_KEY, "");
// 如果已经过期则踢下线
if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < 0) {
continue;
}
userOnlineDTOList.add(RedisUtils.getCacheObject(Constants.ONLINE_TOKEN_KEY + token));
}
Collections.reverse(userOnlineList);
userOnlineList.removeAll(Collections.singleton(null));
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
userOnlineDTOList = userOnlineDTOList.stream().filter(userOnline ->
StringUtils.equals(ipaddr, userOnline.getIpaddr()) &&
StringUtils.equals(userName, userOnline.getUserName())
).collect(Collectors.toList());
} else if (StringUtils.isNotEmpty(ipaddr)) {
userOnlineDTOList = userOnlineDTOList.stream().filter(userOnline ->
StringUtils.equals(ipaddr, userOnline.getIpaddr()))
.collect(Collectors.toList());
} else if (StringUtils.isNotEmpty(userName)) {
userOnlineDTOList = userOnlineDTOList.stream().filter(userOnline ->
StringUtils.equals(userName, userOnline.getUserName())
).collect(Collectors.toList());
}
Collections.reverse(userOnlineDTOList);
userOnlineDTOList.removeAll(Collections.singleton(null));
List<SysUserOnline> userOnlineList = BeanUtil.copyToList(userOnlineDTOList, SysUserOnline.class);
return TableDataInfo.build(userOnlineList);
}
@@ -69,11 +75,14 @@ public class SysUserOnlineController extends BaseController {
* 强退用户
*/
@ApiOperation("强退用户")
@PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
@SaCheckPermission("monitor:online:forceLogout")
@Log(title = "在线用户", businessType = BusinessType.FORCE)
@DeleteMapping("/{tokenId}")
public R<Void> forceLogout(@PathVariable String tokenId) {
RedisUtils.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId);
try {
StpUtil.kickoutByTokenValue(tokenId);
} catch (NotLoginException e) {
}
return R.success();
}
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
@@ -15,7 +16,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -40,7 +40,7 @@ public class SysConfigController extends BaseController {
* 获取参数配置列表
*/
@ApiOperation("获取参数配置列表")
@PreAuthorize("@ss.hasPermi('system:config:list')")
@SaCheckPermission("system:config:list")
@GetMapping("/list")
public TableDataInfo<SysConfig> list(SysConfig config, PageQuery pageQuery) {
return configService.selectPageConfigList(config, pageQuery);
@@ -48,7 +48,7 @@ public class SysConfigController extends BaseController {
@ApiOperation("导出参数配置列表")
@Log(title = "参数管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:config:export')")
@SaCheckPermission("system:config:export")
@PostMapping("/export")
public void export(SysConfig config, HttpServletResponse response) {
List<SysConfig> list = configService.selectConfigList(config);
@@ -59,7 +59,7 @@ public class SysConfigController extends BaseController {
* 根据参数编号获取详细信息
*/
@ApiOperation("根据参数编号获取详细信息")
@PreAuthorize("@ss.hasPermi('system:config:query')")
@SaCheckPermission("system:config:query")
@GetMapping(value = "/{configId}")
public R<SysConfig> getInfo(@ApiParam("参数ID") @PathVariable Long configId) {
return R.success(configService.selectConfigById(configId));
@@ -78,7 +78,7 @@ public class SysConfigController extends BaseController {
* 新增参数配置
*/
@ApiOperation("新增参数配置")
@PreAuthorize("@ss.hasPermi('system:config:add')")
@SaCheckPermission("system:config:add")
@Log(title = "参数管理", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysConfig config) {
@@ -92,7 +92,7 @@ public class SysConfigController extends BaseController {
* 修改参数配置
*/
@ApiOperation("修改参数配置")
@PreAuthorize("@ss.hasPermi('system:config:edit')")
@SaCheckPermission("system:config:edit")
@Log(title = "参数管理", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysConfig config) {
@@ -106,7 +106,7 @@ public class SysConfigController extends BaseController {
* 删除参数配置
*/
@ApiOperation("删除参数配置")
@PreAuthorize("@ss.hasPermi('system:config:remove')")
@SaCheckPermission("system:config:remove")
@Log(title = "参数管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{configIds}")
public R<Void> remove(@ApiParam("参数ID串") @PathVariable Long[] configIds) {
@@ -118,7 +118,7 @@ public class SysConfigController extends BaseController {
* 刷新参数缓存
*/
@ApiOperation("刷新参数缓存")
@PreAuthorize("@ss.hasPermi('system:config:remove')")
@SaCheckPermission("system:config:remove")
@Log(title = "参数管理", businessType = BusinessType.CLEAN)
@DeleteMapping("/refreshCache")
public R<Void> refreshCache() {

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ArrayUtil;
import com.ruoyi.common.annotation.Log;
@@ -15,7 +16,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -41,7 +41,7 @@ public class SysDeptController extends BaseController {
* 获取部门列表
*/
@ApiOperation("获取部门列表")
@PreAuthorize("@ss.hasPermi('system:dept:list')")
@SaCheckPermission("system:dept:list")
@GetMapping("/list")
public R<List<SysDept>> list(SysDept dept) {
List<SysDept> depts = deptService.selectDeptList(dept);
@@ -52,7 +52,7 @@ public class SysDeptController extends BaseController {
* 查询部门列表(排除节点)
*/
@ApiOperation("查询部门列表(排除节点)")
@PreAuthorize("@ss.hasPermi('system:dept:list')")
@SaCheckPermission("system:dept:list")
@GetMapping("/list/exclude/{deptId}")
public R<List<SysDept>> excludeChild(@ApiParam("部门ID") @PathVariable(value = "deptId", required = false) Long deptId) {
List<SysDept> depts = deptService.selectDeptList(new SysDept());
@@ -65,7 +65,7 @@ public class SysDeptController extends BaseController {
* 根据部门编号获取详细信息
*/
@ApiOperation("根据部门编号获取详细信息")
@PreAuthorize("@ss.hasPermi('system:dept:query')")
@SaCheckPermission("system:dept:query")
@GetMapping(value = "/{deptId}")
public R<SysDept> getInfo(@ApiParam("部门ID") @PathVariable Long deptId) {
deptService.checkDeptDataScope(deptId);
@@ -99,7 +99,7 @@ public class SysDeptController extends BaseController {
* 新增部门
*/
@ApiOperation("新增部门")
@PreAuthorize("@ss.hasPermi('system:dept:add')")
@SaCheckPermission("system:dept:add")
@Log(title = "部门管理", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysDept dept) {
@@ -113,7 +113,7 @@ public class SysDeptController extends BaseController {
* 修改部门
*/
@ApiOperation("修改部门")
@PreAuthorize("@ss.hasPermi('system:dept:edit')")
@SaCheckPermission("system:dept:edit")
@Log(title = "部门管理", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysDept dept) {
@@ -132,7 +132,7 @@ public class SysDeptController extends BaseController {
* 删除部门
*/
@ApiOperation("删除部门")
@PreAuthorize("@ss.hasPermi('system:dept:remove')")
@SaCheckPermission("system:dept:remove")
@Log(title = "部门管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{deptId}")
public R<Void> remove(@ApiParam("部门ID串") @PathVariable Long deptId) {

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
@@ -16,7 +17,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -40,7 +40,7 @@ public class SysDictDataController extends BaseController {
private final ISysDictTypeService dictTypeService;
@ApiOperation("查询字典数据列表")
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@SaCheckPermission("system:dict:list")
@GetMapping("/list")
public TableDataInfo<SysDictData> list(SysDictData dictData, PageQuery pageQuery) {
return dictDataService.selectPageDictDataList(dictData, pageQuery);
@@ -48,7 +48,7 @@ public class SysDictDataController extends BaseController {
@ApiOperation("导出字典数据列表")
@Log(title = "字典数据", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:dict:export')")
@SaCheckPermission("system:dict:export")
@PostMapping("/export")
public void export(SysDictData dictData, HttpServletResponse response) {
List<SysDictData> list = dictDataService.selectDictDataList(dictData);
@@ -59,7 +59,7 @@ public class SysDictDataController extends BaseController {
* 查询字典数据详细
*/
@ApiOperation("查询字典数据详细")
@PreAuthorize("@ss.hasPermi('system:dict:query')")
@SaCheckPermission("system:dict:query")
@GetMapping(value = "/{dictCode}")
public R<SysDictData> getInfo(@ApiParam("字典code") @PathVariable Long dictCode) {
return R.success(dictDataService.selectDictDataById(dictCode));
@@ -82,7 +82,7 @@ public class SysDictDataController extends BaseController {
* 新增字典类型
*/
@ApiOperation("新增字典类型")
@PreAuthorize("@ss.hasPermi('system:dict:add')")
@SaCheckPermission("system:dict:add")
@Log(title = "字典数据", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysDictData dict) {
@@ -93,7 +93,7 @@ public class SysDictDataController extends BaseController {
* 修改保存字典类型
*/
@ApiOperation("修改保存字典类型")
@PreAuthorize("@ss.hasPermi('system:dict:edit')")
@SaCheckPermission("system:dict:edit")
@Log(title = "字典数据", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysDictData dict) {
@@ -104,7 +104,7 @@ public class SysDictDataController extends BaseController {
* 删除字典类型
*/
@ApiOperation("删除字典类型")
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@SaCheckPermission("system:dict:remove")
@Log(title = "字典类型", businessType = BusinessType.DELETE)
@DeleteMapping("/{dictCodes}")
public R<Void> remove(@ApiParam("字典code串") @PathVariable Long[] dictCodes) {

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
@@ -15,7 +16,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -37,7 +37,7 @@ public class SysDictTypeController extends BaseController {
private final ISysDictTypeService dictTypeService;
@ApiOperation("查询字典类型列表")
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@SaCheckPermission("system:dict:list")
@GetMapping("/list")
public TableDataInfo<SysDictType> list(SysDictType dictType, PageQuery pageQuery) {
return dictTypeService.selectPageDictTypeList(dictType, pageQuery);
@@ -45,7 +45,7 @@ public class SysDictTypeController extends BaseController {
@ApiOperation("导出字典类型列表")
@Log(title = "字典类型", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:dict:export')")
@SaCheckPermission("system:dict:export")
@PostMapping("/export")
public void export(SysDictType dictType, HttpServletResponse response) {
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
@@ -56,7 +56,7 @@ public class SysDictTypeController extends BaseController {
* 查询字典类型详细
*/
@ApiOperation("查询字典类型详细")
@PreAuthorize("@ss.hasPermi('system:dict:query')")
@SaCheckPermission("system:dict:query")
@GetMapping(value = "/{dictId}")
public R<SysDictType> getInfo(@ApiParam("字典ID") @PathVariable Long dictId) {
return R.success(dictTypeService.selectDictTypeById(dictId));
@@ -66,7 +66,7 @@ public class SysDictTypeController extends BaseController {
* 新增字典类型
*/
@ApiOperation("新增字典类型")
@PreAuthorize("@ss.hasPermi('system:dict:add')")
@SaCheckPermission("system:dict:add")
@Log(title = "字典类型", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysDictType dict) {
@@ -80,7 +80,7 @@ public class SysDictTypeController extends BaseController {
* 修改字典类型
*/
@ApiOperation("修改字典类型")
@PreAuthorize("@ss.hasPermi('system:dict:edit')")
@SaCheckPermission("system:dict:edit")
@Log(title = "字典类型", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysDictType dict) {
@@ -94,7 +94,7 @@ public class SysDictTypeController extends BaseController {
* 删除字典类型
*/
@ApiOperation("删除字典类型")
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@SaCheckPermission("system:dict:remove")
@Log(title = "字典类型", businessType = BusinessType.DELETE)
@DeleteMapping("/{dictIds}")
public R<Void> remove(@ApiParam("字典ID串") @PathVariable Long[] dictIds) {
@@ -106,7 +106,7 @@ public class SysDictTypeController extends BaseController {
* 刷新字典缓存
*/
@ApiOperation("刷新字典缓存")
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@SaCheckPermission("system:dict:remove")
@Log(title = "字典类型", businessType = BusinessType.CLEAN)
@DeleteMapping("/refreshCache")
public R<Void> refreshCache() {

View File

@@ -1,14 +1,17 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.utils.LoginUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.vo.RouterVo;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.SysLoginService;
import com.ruoyi.system.service.SysPermissionService;
import io.swagger.annotations.Api;
@@ -39,7 +42,6 @@ public class SysLoginController {
private final SysLoginService loginService;
private final ISysMenuService menuService;
private final ISysUserService userService;
private final SysPermissionService permissionService;
/**
@@ -59,6 +61,16 @@ public class SysLoginController {
return R.success(ajax);
}
@ApiOperation("登出方法")
@PostMapping("/logout")
public R<Void> logout(){
try {
StpUtil.logout();
} catch (NotLoginException e) {
}
return R.success("退出成功");
}
/**
* 获取用户信息
*
@@ -67,7 +79,7 @@ public class SysLoginController {
@ApiOperation("获取用户信息")
@GetMapping("getInfo")
public R<Map<String, Object>> getInfo() {
SysUser user = userService.selectUserById(SecurityUtils.getUserId());
SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId());
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
// 权限集合
@@ -87,7 +99,7 @@ public class SysLoginController {
@ApiOperation("获取路由信息")
@GetMapping("getRouters")
public R<List<RouterVo>> getRouters() {
Long userId = SecurityUtils.getUserId();
Long userId = LoginUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
return R.success(menuService.buildMenus(menus));
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.tree.Tree;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
@@ -14,7 +15,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -40,7 +40,7 @@ public class SysMenuController extends BaseController {
* 获取菜单列表
*/
@ApiOperation("获取菜单列表")
@PreAuthorize("@ss.hasPermi('system:menu:list')")
@SaCheckPermission("system:menu:list")
@GetMapping("/list")
public R<List<SysMenu>> list(SysMenu menu) {
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
@@ -51,7 +51,7 @@ public class SysMenuController extends BaseController {
* 根据菜单编号获取详细信息
*/
@ApiOperation("根据菜单编号获取详细信息")
@PreAuthorize("@ss.hasPermi('system:menu:query')")
@SaCheckPermission("system:menu:query")
@GetMapping(value = "/{menuId}")
public R<SysMenu> getInfo(@ApiParam("菜单ID") @PathVariable Long menuId) {
return R.success(menuService.selectMenuById(menuId));
@@ -84,7 +84,7 @@ public class SysMenuController extends BaseController {
* 新增菜单
*/
@ApiOperation("新增菜单")
@PreAuthorize("@ss.hasPermi('system:menu:add')")
@SaCheckPermission("system:menu:add")
@Log(title = "菜单管理", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysMenu menu) {
@@ -100,7 +100,7 @@ public class SysMenuController extends BaseController {
* 修改菜单
*/
@ApiOperation("修改菜单")
@PreAuthorize("@ss.hasPermi('system:menu:edit')")
@SaCheckPermission("system:menu:edit")
@Log(title = "菜单管理", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysMenu menu) {
@@ -118,7 +118,7 @@ public class SysMenuController extends BaseController {
* 删除菜单
*/
@ApiOperation("删除菜单")
@PreAuthorize("@ss.hasPermi('system:menu:remove')")
@SaCheckPermission("system:menu:remove")
@Log(title = "菜单管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{menuId}")
public R<Void> remove(@ApiParam("菜单ID") @PathVariable("menuId") Long menuId) {

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
@@ -8,14 +9,13 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.service.ISysNoticeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 公告 信息操作处理
@@ -35,7 +35,7 @@ public class SysNoticeController extends BaseController {
* 获取通知公告列表
*/
@ApiOperation("获取通知公告列表")
@PreAuthorize("@ss.hasPermi('system:notice:list')")
@SaCheckPermission("system:notice:list")
@GetMapping("/list")
public TableDataInfo<SysNotice> list(SysNotice notice, PageQuery pageQuery) {
return noticeService.selectPageNoticeList(notice, pageQuery);
@@ -45,7 +45,7 @@ public class SysNoticeController extends BaseController {
* 根据通知公告编号获取详细信息
*/
@ApiOperation("根据通知公告编号获取详细信息")
@PreAuthorize("@ss.hasPermi('system:notice:query')")
@SaCheckPermission("system:notice:query")
@GetMapping(value = "/{noticeId}")
public R<SysNotice> getInfo(@ApiParam("公告ID") @PathVariable Long noticeId) {
return R.success(noticeService.selectNoticeById(noticeId));
@@ -55,7 +55,7 @@ public class SysNoticeController extends BaseController {
* 新增通知公告
*/
@ApiOperation("新增通知公告")
@PreAuthorize("@ss.hasPermi('system:notice:add')")
@SaCheckPermission("system:notice:add")
@Log(title = "通知公告", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysNotice notice) {
@@ -66,7 +66,7 @@ public class SysNoticeController extends BaseController {
* 修改通知公告
*/
@ApiOperation("修改通知公告")
@PreAuthorize("@ss.hasPermi('system:notice:edit')")
@SaCheckPermission("system:notice:edit")
@Log(title = "通知公告", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysNotice notice) {
@@ -77,7 +77,7 @@ public class SysNoticeController extends BaseController {
* 删除通知公告
*/
@ApiOperation("删除通知公告")
@PreAuthorize("@ss.hasPermi('system:notice:remove')")
@SaCheckPermission("system:notice:remove")
@Log(title = "通知公告", businessType = BusinessType.DELETE)
@DeleteMapping("/{noticeIds}")
public R<Void> remove(@ApiParam("公告ID串") @PathVariable Long[] noticeIds) {

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
@@ -18,7 +19,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -46,7 +46,7 @@ public class SysOssConfigController extends BaseController {
* 查询对象存储配置列表
*/
@ApiOperation("查询对象存储配置列表")
@PreAuthorize("@ss.hasPermi('system:oss:list')")
@SaCheckPermission("system:oss:list")
@GetMapping("/list")
public TableDataInfo<SysOssConfigVo> list(@Validated(QueryGroup.class) SysOssConfigBo bo, PageQuery pageQuery) {
return iSysOssConfigService.queryPageList(bo, pageQuery);
@@ -56,7 +56,7 @@ public class SysOssConfigController extends BaseController {
* 获取对象存储配置详细信息
*/
@ApiOperation("获取对象存储配置详细信息")
@PreAuthorize("@ss.hasPermi('system:oss:query')")
@SaCheckPermission("system:oss:query")
@GetMapping("/{ossConfigId}")
public R<SysOssConfigVo> getInfo(@ApiParam("OSS配置ID")
@NotNull(message = "主键不能为空")
@@ -68,7 +68,7 @@ public class SysOssConfigController extends BaseController {
* 新增对象存储配置
*/
@ApiOperation("新增对象存储配置")
@PreAuthorize("@ss.hasPermi('system:oss:add')")
@SaCheckPermission("system:oss:add")
@Log(title = "对象存储配置", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
@@ -80,7 +80,7 @@ public class SysOssConfigController extends BaseController {
* 修改对象存储配置
*/
@ApiOperation("修改对象存储配置")
@PreAuthorize("@ss.hasPermi('system:oss:edit')")
@SaCheckPermission("system:oss:edit")
@Log(title = "对象存储配置", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
@@ -92,7 +92,7 @@ public class SysOssConfigController extends BaseController {
* 删除对象存储配置
*/
@ApiOperation("删除对象存储配置")
@PreAuthorize("@ss.hasPermi('system:oss:remove')")
@SaCheckPermission("system:oss:remove")
@Log(title = "对象存储配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ossConfigIds}")
public R<Void> remove(@ApiParam("OSS配置ID串")
@@ -105,7 +105,7 @@ public class SysOssConfigController extends BaseController {
* 状态修改
*/
@ApiOperation("状态修改")
@PreAuthorize("@ss.hasPermi('system:oss:edit')")
@SaCheckPermission("system:oss:edit")
@Log(title = "对象存储状态修改", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public R<Void> changeStatus(@RequestBody SysOssConfigBo bo) {

View File

@@ -1,11 +1,11 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpException;
import cn.hutool.http.HttpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
@@ -28,7 +28,6 @@ import io.swagger.annotations.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -60,7 +59,7 @@ public class SysOssController extends BaseController {
* 查询OSS对象存储列表
*/
@ApiOperation("查询OSS对象存储列表")
@PreAuthorize("@ss.hasPermi('system:oss:list')")
@SaCheckPermission("system:oss:list")
@GetMapping("/list")
public TableDataInfo<SysOssVo> list(@Validated(QueryGroup.class) SysOssBo bo, PageQuery pageQuery) {
return iSysOssService.queryPageList(bo, pageQuery);
@@ -73,7 +72,7 @@ public class SysOssController extends BaseController {
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "文件", dataTypeClass = File.class, required = true),
})
@PreAuthorize("@ss.hasPermi('system:oss:upload')")
@SaCheckPermission("system:oss:upload")
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@RepeatSubmit
@PostMapping("/upload")
@@ -89,7 +88,7 @@ public class SysOssController extends BaseController {
}
@ApiOperation("下载OSS对象存储")
@PreAuthorize("@ss.hasPermi('system:oss:download')")
@SaCheckPermission("system:oss:download")
@GetMapping("/download/{ossId}")
public void download(@ApiParam("OSS对象ID") @PathVariable Long ossId, HttpServletResponse response) throws IOException {
SysOss sysOss = iSysOssService.getById(ossId);
@@ -116,7 +115,7 @@ public class SysOssController extends BaseController {
* 删除OSS对象存储
*/
@ApiOperation("删除OSS对象存储")
@PreAuthorize("@ss.hasPermi('system:oss:remove')")
@SaCheckPermission("system:oss:remove")
@Log(title = "OSS对象存储", businessType = BusinessType.DELETE)
@DeleteMapping("/{ossIds}")
public R<Void> remove(@ApiParam("OSS对象ID串")
@@ -129,13 +128,12 @@ public class SysOssController extends BaseController {
* 变更图片列表预览状态
*/
@ApiOperation("变更图片列表预览状态")
@PreAuthorize("@ss.hasPermi('system:oss:edit')")
@SaCheckPermission("system:oss:edit")
@Log(title = "OSS对象存储", businessType = BusinessType.UPDATE)
@PutMapping("/changePreviewListResource")
public R<Void> changePreviewListResource(@RequestBody String body) {
Map<String, Boolean> map = JsonUtils.parseMap(body);
SysConfig config = iSysConfigService.getOne(new LambdaQueryWrapper<SysConfig>()
.eq(SysConfig::getConfigKey, OssConstant.PEREVIEW_LIST_RESOURCE_KEY));
SysConfig config = iSysConfigService.getOne(new SysConfig().setConfigKey(OssConstant.PEREVIEW_LIST_RESOURCE_KEY));
config.setConfigValue(map.get("previewListResource").toString());
return toAjax(iSysConfigService.updateConfig(config));
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
@@ -15,7 +16,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -40,7 +40,7 @@ public class SysPostController extends BaseController {
* 获取岗位列表
*/
@ApiOperation("获取岗位列表")
@PreAuthorize("@ss.hasPermi('system:post:list')")
@SaCheckPermission("system:post:list")
@GetMapping("/list")
public TableDataInfo<SysPost> list(SysPost post, PageQuery pageQuery) {
return postService.selectPagePostList(post, pageQuery);
@@ -48,7 +48,7 @@ public class SysPostController extends BaseController {
@ApiOperation("导出岗位列表")
@Log(title = "岗位管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:post:export')")
@SaCheckPermission("system:post:export")
@PostMapping("/export")
public void export(SysPost post, HttpServletResponse response) {
List<SysPost> list = postService.selectPostList(post);
@@ -59,7 +59,7 @@ public class SysPostController extends BaseController {
* 根据岗位编号获取详细信息
*/
@ApiOperation("根据岗位编号获取详细信息")
@PreAuthorize("@ss.hasPermi('system:post:query')")
@SaCheckPermission("system:post:query")
@GetMapping(value = "/{postId}")
public R<SysPost> getInfo(@ApiParam("岗位ID") @PathVariable Long postId) {
return R.success(postService.selectPostById(postId));
@@ -69,7 +69,7 @@ public class SysPostController extends BaseController {
* 新增岗位
*/
@ApiOperation("新增岗位")
@PreAuthorize("@ss.hasPermi('system:post:add')")
@SaCheckPermission("system:post:add")
@Log(title = "岗位管理", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysPost post) {
@@ -85,7 +85,7 @@ public class SysPostController extends BaseController {
* 修改岗位
*/
@ApiOperation("修改岗位")
@PreAuthorize("@ss.hasPermi('system:post:edit')")
@SaCheckPermission("system:post:edit")
@Log(title = "岗位管理", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysPost post) {
@@ -101,7 +101,7 @@ public class SysPostController extends BaseController {
* 删除岗位
*/
@ApiOperation("删除岗位")
@PreAuthorize("@ss.hasPermi('system:post:remove')")
@SaCheckPermission("system:post:remove")
@Log(title = "岗位管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{postIds}")
public R<Void> remove(@ApiParam("岗位ID串") @PathVariable Long[] postIds) {

View File

@@ -5,11 +5,12 @@ import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.service.TokenService;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.LoginUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysOss;
import com.ruoyi.system.service.ISysOssService;
import com.ruoyi.system.service.ISysUserService;
@@ -40,7 +41,6 @@ import java.util.Map;
public class SysProfileController extends BaseController {
private final ISysUserService userService;
private final TokenService tokenService;
private final ISysOssService iSysOssService;
/**
@@ -49,12 +49,11 @@ public class SysProfileController extends BaseController {
@ApiOperation("个人信息")
@GetMapping
public R<Map<String, Object>> profile() {
LoginUser loginUser = getLoginUser();
SysUser user = userService.selectUserById(loginUser.getUserId());
SysUser user = userService.selectUserById(getUserId());
Map<String, Object> ajax = new HashMap<>();
ajax.put("user", user);
ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
ajax.put("roleGroup", userService.selectUserRoleGroup(user.getUserName()));
ajax.put("postGroup", userService.selectUserPostGroup(user.getUserName()));
return R.success(ajax);
}
@@ -73,9 +72,7 @@ public class SysProfileController extends BaseController {
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return R.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
LoginUser loginUser = getLoginUser();
SysUser sysUser = userService.selectUserById(loginUser.getUserId());
user.setUserId(sysUser.getUserId());
user.setUserId(getUserId());
user.setUserName(null);
user.setPassword(null);
if (userService.updateUserProfile(user) > 0) {
@@ -95,7 +92,7 @@ public class SysProfileController extends BaseController {
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
@PutMapping("/updatePwd")
public R<Void> updatePwd(String oldPassword, String newPassword) {
SysUser user = userService.selectUserById(SecurityUtils.getUserId());
SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId());
String userName = user.getUserName();
String password = user.getPassword();
if (!SecurityUtils.matchesPassword(oldPassword, password)) {
@@ -120,12 +117,11 @@ public class SysProfileController extends BaseController {
@Log(title = "用户头像", businessType = BusinessType.UPDATE)
@PostMapping("/avatar")
public R<Map<String, Object>> avatar(@RequestPart("avatarfile") MultipartFile file) {
Map<String, Object> ajax = new HashMap<>();
Map<String,Object> ajax = new HashMap<>();
if (!file.isEmpty()) {
LoginUser loginUser = getLoginUser();
SysOss oss = iSysOssService.upload(file);
String avatar = oss.getUrl();
if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
if (userService.updateUserAvatar(getUsername(), avatar)) {
ajax.put("imgUrl", avatar);
return R.success(ajax);
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
@@ -9,8 +10,8 @@ import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.service.TokenService;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.LoginUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysUserRole;
@@ -20,7 +21,6 @@ import com.ruoyi.system.service.SysPermissionService;
import io.swagger.annotations.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -40,12 +40,11 @@ import java.util.List;
public class SysRoleController extends BaseController {
private final ISysRoleService roleService;
private final TokenService tokenService;
private final ISysUserService userService;
private final SysPermissionService permissionService;
@ApiOperation("查询角色信息列表")
@PreAuthorize("@ss.hasPermi('system:role:list')")
@SaCheckPermission("system:role:list")
@GetMapping("/list")
public TableDataInfo<SysRole> list(SysRole role, PageQuery pageQuery) {
return roleService.selectPageRoleList(role, pageQuery);
@@ -53,7 +52,7 @@ public class SysRoleController extends BaseController {
@ApiOperation("导出角色信息列表")
@Log(title = "角色管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:role:export')")
@SaCheckPermission("system:role:export")
@PostMapping("/export")
public void export(SysRole role, HttpServletResponse response) {
List<SysRole> list = roleService.selectRoleList(role);
@@ -64,7 +63,7 @@ public class SysRoleController extends BaseController {
* 根据角色编号获取详细信息
*/
@ApiOperation("根据角色编号获取详细信息")
@PreAuthorize("@ss.hasPermi('system:role:query')")
@SaCheckPermission("system:role:query")
@GetMapping(value = "/{roleId}")
public R<SysRole> getInfo(@ApiParam("角色ID") @PathVariable Long roleId) {
roleService.checkRoleDataScope(roleId);
@@ -75,7 +74,7 @@ public class SysRoleController extends BaseController {
* 新增角色
*/
@ApiOperation("新增角色")
@PreAuthorize("@ss.hasPermi('system:role:add')")
@SaCheckPermission("system:role:add")
@Log(title = "角色管理", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysRole role) {
@@ -92,7 +91,7 @@ public class SysRoleController extends BaseController {
* 修改保存角色
*/
@ApiOperation("修改保存角色")
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysRole role) {
@@ -108,8 +107,8 @@ public class SysRoleController extends BaseController {
LoginUser loginUser = getLoginUser();
SysUser sysUser = userService.selectUserById(loginUser.getUserId());
if (StringUtils.isNotNull(sysUser) && !sysUser.isAdmin()) {
loginUser.setMenuPermissions(permissionService.getMenuPermission(sysUser));
tokenService.setLoginUser(loginUser);
loginUser.setMenuPermission(permissionService.getMenuPermission(sysUser));
LoginUtils.setLoginUser(loginUser);
}
return R.success();
}
@@ -120,7 +119,7 @@ public class SysRoleController extends BaseController {
* 修改保存数据权限
*/
@ApiOperation("修改保存数据权限")
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@PutMapping("/dataScope")
public R<Void> dataScope(@RequestBody SysRole role) {
@@ -132,7 +131,7 @@ public class SysRoleController extends BaseController {
* 状态修改
*/
@ApiOperation("状态修改")
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public R<Void> changeStatus(@RequestBody SysRole role) {
@@ -144,7 +143,7 @@ public class SysRoleController extends BaseController {
* 删除角色
*/
@ApiOperation("删除角色")
@PreAuthorize("@ss.hasPermi('system:role:remove')")
@SaCheckPermission("system:role:remove")
@Log(title = "角色管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{roleIds}")
public R<Void> remove(@ApiParam("岗位ID串") @PathVariable Long[] roleIds) {
@@ -155,7 +154,7 @@ public class SysRoleController extends BaseController {
* 获取角色选择框列表
*/
@ApiOperation("获取角色选择框列表")
@PreAuthorize("@ss.hasPermi('system:role:query')")
@SaCheckPermission("system:role:query")
@GetMapping("/optionselect")
public R<List<SysRole>> optionselect() {
return R.success(roleService.selectRoleAll());
@@ -165,7 +164,7 @@ public class SysRoleController extends BaseController {
* 查询已分配用户角色列表
*/
@ApiOperation("查询已分配用户角色列表")
@PreAuthorize("@ss.hasPermi('system:role:list')")
@SaCheckPermission("system:role:list")
@GetMapping("/authUser/allocatedList")
public TableDataInfo<SysUser> allocatedList(SysUser user, PageQuery pageQuery) {
return userService.selectAllocatedList(user, pageQuery);
@@ -175,7 +174,7 @@ public class SysRoleController extends BaseController {
* 查询未分配用户角色列表
*/
@ApiOperation("查询未分配用户角色列表")
@PreAuthorize("@ss.hasPermi('system:role:list')")
@SaCheckPermission("system:role:list")
@GetMapping("/authUser/unallocatedList")
public TableDataInfo<SysUser> unallocatedList(SysUser user, PageQuery pageQuery) {
return userService.selectUnallocatedList(user, pageQuery);
@@ -185,7 +184,7 @@ public class SysRoleController extends BaseController {
* 取消授权用户
*/
@ApiOperation("取消授权用户")
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PutMapping("/authUser/cancel")
public R<Void> cancelAuthUser(@RequestBody SysUserRole userRole) {
@@ -200,7 +199,7 @@ public class SysRoleController extends BaseController {
@ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query", dataTypeClass = String.class),
@ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query", dataTypeClass = String.class)
})
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PutMapping("/authUser/cancelAll")
public R<Void> cancelAuthUserAll(Long roleId, Long[] userIds) {
@@ -215,7 +214,7 @@ public class SysRoleController extends BaseController {
@ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query", dataTypeClass = String.class),
@ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query", dataTypeClass = String.class)
})
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PutMapping("/authUser/selectAll")
public R<Void> selectAuthUserAll(Long roleId, Long[] userIds) {

View File

@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -26,7 +27,6 @@ import com.ruoyi.system.service.ISysUserService;
import io.swagger.annotations.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -58,7 +58,7 @@ public class SysUserController extends BaseController {
* 获取用户列表
*/
@ApiOperation("获取用户列表")
@PreAuthorize("@ss.hasPermi('system:user:list')")
@SaCheckPermission("system:user:list")
@GetMapping("/list")
public TableDataInfo<SysUser> list(SysUser user, PageQuery pageQuery) {
return userService.selectPageUserList(user, pageQuery);
@@ -66,7 +66,7 @@ public class SysUserController extends BaseController {
@ApiOperation("导出用户列表")
@Log(title = "用户管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:user:export')")
@SaCheckPermission("system:user:export")
@PostMapping("/export")
public void export(SysUser user, HttpServletResponse response) {
List<SysUser> list = userService.selectUserList(user);
@@ -87,7 +87,7 @@ public class SysUserController extends BaseController {
@ApiImplicitParam(name = "file", value = "导入文件", dataType = "java.io.File", required = true),
})
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('system:user:import')")
@SaCheckPermission("system:user:import")
@PostMapping("/importData")
public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
@@ -104,8 +104,8 @@ public class SysUserController extends BaseController {
* 根据用户编号获取详细信息
*/
@ApiOperation("根据用户编号获取详细信息")
@PreAuthorize("@ss.hasPermi('system:user:query')")
@GetMapping(value = {"/", "/{userId}"})
@SaCheckPermission("system:user:query")
@GetMapping(value = {"/", "/{userId}" })
public R<Map<String, Object>> getInfo(@ApiParam("用户ID") @PathVariable(value = "userId", required = false) Long userId) {
userService.checkUserDataScope(userId);
Map<String, Object> ajax = new HashMap<>();
@@ -113,9 +113,10 @@ public class SysUserController extends BaseController {
ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
ajax.put("posts", postService.selectPostAll());
if (StringUtils.isNotNull(userId)) {
ajax.put("user", userService.selectUserById(userId));
SysUser sysUser = userService.selectUserById(userId);
ajax.put("user", sysUser);
ajax.put("postIds", postService.selectPostListByUserId(userId));
ajax.put("roleIds", roleService.selectRoleListByUserId(userId));
ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
}
return R.success(ajax);
}
@@ -124,7 +125,7 @@ public class SysUserController extends BaseController {
* 新增用户
*/
@ApiOperation("新增用户")
@PreAuthorize("@ss.hasPermi('system:user:add')")
@SaCheckPermission("system:user:add")
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysUser user) {
@@ -145,7 +146,7 @@ public class SysUserController extends BaseController {
* 修改用户
*/
@ApiOperation("修改用户")
@PreAuthorize("@ss.hasPermi('system:user:edit')")
@SaCheckPermission("system:user:edit")
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysUser user) {
@@ -164,7 +165,7 @@ public class SysUserController extends BaseController {
* 删除用户
*/
@ApiOperation("删除用户")
@PreAuthorize("@ss.hasPermi('system:user:remove')")
@SaCheckPermission("system:user:remove")
@Log(title = "用户管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{userIds}")
public R<Void> remove(@ApiParam("角色ID串") @PathVariable Long[] userIds) {
@@ -178,7 +179,7 @@ public class SysUserController extends BaseController {
* 重置密码
*/
@ApiOperation("重置密码")
@PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
@SaCheckPermission("system:user:resetPwd")
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping("/resetPwd")
public R<Void> resetPwd(@RequestBody SysUser user) {
@@ -191,7 +192,7 @@ public class SysUserController extends BaseController {
* 状态修改
*/
@ApiOperation("状态修改")
@PreAuthorize("@ss.hasPermi('system:user:edit')")
@SaCheckPermission("system:user:edit")
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public R<Void> changeStatus(@RequestBody SysUser user) {
@@ -203,7 +204,7 @@ public class SysUserController extends BaseController {
* 根据用户编号获取授权角色
*/
@ApiOperation("根据用户编号获取授权角色")
@PreAuthorize("@ss.hasPermi('system:user:query')")
@SaCheckPermission("system:user:query")
@GetMapping("/authRole/{userId}")
public R<Map<String, Object>> authRole(@ApiParam("用户ID") @PathVariable("userId") Long userId) {
SysUser user = userService.selectUserById(userId);
@@ -222,7 +223,7 @@ public class SysUserController extends BaseController {
@ApiImplicitParam(name = "userId", value = "用户Id", paramType = "query", dataTypeClass = String.class),
@ApiImplicitParam(name = "roleIds", value = "角色ID串", paramType = "query", dataTypeClass = String.class)
})
@PreAuthorize("@ss.hasPermi('system:user:edit')")
@SaCheckPermission("system:user:edit")
@Log(title = "用户管理", businessType = BusinessType.GRANT)
@PutMapping("/authRole")
public R<Void> insertAuthRole(Long userId, Long[] roleIds) {

View File

@@ -0,0 +1,117 @@
package com.ruoyi.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.workflow.domain.bo.FlowCategoryBo;
import com.ruoyi.workflow.domain.vo.FlowCategoryVo;
import com.ruoyi.workflow.service.IFlowCategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 流程分类Controller
*
* @author ruoyi
* @date 2022-01-15
*/
@Validated
@Api(value = "流程分类控制器", tags = {"流程分类管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/workflow/category")
public class FlowCategoryController extends BaseController {
private final IFlowCategoryService iFlowCategoryService;
/**
* 查询流程分类列表
*/
@ApiOperation("查询流程分类列表")
@SaCheckPermission("workflow:category:list")
@GetMapping("/list")
public TableDataInfo<FlowCategoryVo> list(@Validated(QueryGroup.class) FlowCategoryBo bo, PageQuery pageQuery) {
return iFlowCategoryService.queryPageList(bo, pageQuery);
}
/**
* 导出流程分类列表
*/
@ApiOperation("导出流程分类列表")
@SaCheckPermission("workflow:category:export")
@Log(title = "流程分类", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(@Validated FlowCategoryBo bo, HttpServletResponse response) {
List<FlowCategoryVo> list = iFlowCategoryService.queryList(bo);
ExcelUtil.exportExcel(list, "流程分类", FlowCategoryVo.class, response);
}
/**
* 获取流程分类详细信息
*/
@ApiOperation("获取流程分类详细信息")
@SaCheckPermission("workflow:category:query")
@GetMapping("/{categoryId}")
public R<FlowCategoryVo> getInfo(@ApiParam("主键")
@NotNull(message = "主键不能为空")
@PathVariable("categoryId") Long categoryId) {
return R.success(iFlowCategoryService.queryById(categoryId));
}
/**
* 新增流程分类
*/
@ApiOperation("新增流程分类")
@SaCheckPermission("workflow:category:add")
@Log(title = "流程分类", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody FlowCategoryBo bo) {
return toAjax(iFlowCategoryService.insertByBo(bo) ? 1 : 0);
}
/**
* 修改流程分类
*/
@ApiOperation("修改流程分类")
@SaCheckPermission("workflow:category:edit")
@Log(title = "流程分类", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody FlowCategoryBo bo) {
return toAjax(iFlowCategoryService.updateByBo(bo) ? 1 : 0);
}
/**
* 删除流程分类
*/
@ApiOperation("删除流程分类")
@SaCheckPermission("workflow:category:remove")
@Log(title = "流程分类" , businessType = BusinessType.DELETE)
@DeleteMapping("/{categoryIds}")
public R<Void> remove(@ApiParam("主键串")
@NotEmpty(message = "主键不能为空")
@PathVariable Long[] categoryIds) {
return toAjax(iFlowCategoryService.deleteWithValidByIds(Arrays.asList(categoryIds), true) ? 1 : 0);
}
}

View File

@@ -0,0 +1,155 @@
package com.ruoyi.web.controller.workflow;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.workflow.domain.dto.FlowProcDefDto;
import com.ruoyi.workflow.domain.dto.FlowSaveXmlVo;
import com.ruoyi.workflow.service.IFlowDefinitionService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
/**
* <p>
* 工作流程定义
* </p>
*
* @author XuanXuan
* @date 2021-04-03
*/
@Slf4j
@Api(tags = "流程定义")
@RestController
@RequestMapping("/workflow/definition")
public class FlowDefinitionController {
@Autowired
private IFlowDefinitionService flowDefinitionService;
@Autowired
private ISysUserService userService;
@Resource
private ISysRoleService sysRoleService;
@GetMapping(value = "/list")
@ApiOperation(value = "流程定义列表", response = FlowProcDefDto.class)
public R list(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum,
@ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize) {
return R.success(flowDefinitionService.list(pageNum, pageSize));
}
@ApiOperation(value = "导入流程文件", notes = "上传bpmn20的xml文件")
@PostMapping("/import")
public R importFile(@RequestParam(required = false) String name,
@RequestParam(required = false) String category,
MultipartFile file) {
try (InputStream in = file.getInputStream()) {
flowDefinitionService.importFile(name, category, in);
} catch (Exception e) {
log.error("导入失败:", e);
return R.success(e.getMessage());
}
return R.success("导入成功");
}
@ApiOperation(value = "读取xml文件")
@GetMapping("/readXml/{deployId}")
public R readXml(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId) {
try {
return flowDefinitionService.readXml(deployId);
} catch (Exception e) {
return R.error("加载xml文件异常");
}
}
@ApiOperation(value = "读取图片文件")
@GetMapping("/readImage/{deployId}")
public void readImage(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId, HttpServletResponse response) {
try (OutputStream os = response.getOutputStream()) {
BufferedImage image = ImageIO.read(flowDefinitionService.readImage(deployId));
response.setContentType("image/png");
if (image != null) {
ImageIO.write(image, "png", os);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@ApiOperation(value = "保存流程设计器内的xml文件")
@PostMapping("/save")
public R save(@RequestBody FlowSaveXmlVo vo) {
try (InputStream in = new ByteArrayInputStream(vo.getXml().getBytes(StandardCharsets.UTF_8))) {
flowDefinitionService.importFile(vo.getName(), vo.getCategory(), in);
} catch (Exception e) {
log.error("导入失败:", e);
return R.success(e.getMessage());
}
return R.success("导入成功");
}
@ApiOperation(value = "根据流程定义id启动流程实例")
@PostMapping("/start/{procDefId}")
public R start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
@ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables) {
return flowDefinitionService.startProcessInstanceById(procDefId, variables);
}
@ApiOperation(value = "激活或挂起流程定义")
@PutMapping(value = "/updateState")
public R updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state,
@ApiParam(value = "流程部署ID", required = true) @RequestParam String deployId) {
flowDefinitionService.updateState(state, deployId);
return R.success();
}
@ApiOperation(value = "删除流程")
@DeleteMapping(value = "/delete")
public R delete(@ApiParam(value = "流程部署ID", required = true) @RequestParam String deployId) {
flowDefinitionService.delete(deployId);
return R.success();
}
@ApiOperation(value = "指定流程办理人员列表")
@GetMapping("/userList")
public R userList(SysUser user) {
List<SysUser> list = userService.selectUserList(user);
return R.success(list);
}
@ApiOperation(value = "指定流程办理组列表")
@GetMapping("/roleList")
public R roleList(SysRole role) {
List<SysRole> list = sysRoleService.selectRoleList(role);
return R.success(list);
}
}

View File

@@ -0,0 +1,61 @@
package com.ruoyi.web.controller.workflow;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.workflow.domain.vo.FlowTaskVo;
import com.ruoyi.workflow.service.IFlowInstanceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* <p>工作流流程实例管理<p>
*
* @author XuanXuan
* @date 2021-04-03
*/
@Slf4j
@Api(tags = "工作流流程实例管理")
@RestController
@RequestMapping("/workflow/instance")
public class FlowInstanceController {
@Autowired
private IFlowInstanceService flowInstanceService;
@ApiOperation(value = "根据流程定义id启动流程实例")
@PostMapping("/startBy/{procDefId}")
public R startById(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
@ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables) {
return flowInstanceService.startProcessInstanceById(procDefId, variables);
}
@ApiOperation(value = "激活或挂起流程实例")
@PostMapping(value = "/updateState")
public R updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state,
@ApiParam(value = "流程实例ID", required = true) @RequestParam String instanceId) {
flowInstanceService.updateState(state,instanceId);
return R.success();
}
@ApiOperation("结束流程实例")
@PostMapping(value = "/stopProcessInstance")
public R stopProcessInstance(@RequestBody FlowTaskVo flowTaskVo) {
flowInstanceService.stopProcessInstance(flowTaskVo);
return R.success();
}
@ApiOperation(value = "删除流程实例")
@DeleteMapping(value = "/delete")
public R delete(@ApiParam(value = "流程实例ID", required = true) @RequestParam String instanceId,
@ApiParam(value = "删除原因") @RequestParam(required = false) String deleteReason) {
flowInstanceService.delete(instanceId,deleteReason);
return R.success();
}
}

View File

@@ -0,0 +1,191 @@
package com.ruoyi.web.controller.workflow;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.workflow.domain.dto.FlowTaskDto;
import com.ruoyi.workflow.domain.vo.FlowTaskVo;
import com.ruoyi.workflow.service.IFlowTaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* <p>工作流任务管理<p>
*
* @author XuanXuan
* @date 2021-04-03
*/
@Slf4j
@Api(tags = "工作流流程任务管理")
@RestController
@RequestMapping("/workflow/task")
public class FlowTaskController {
@Autowired
private IFlowTaskService flowTaskService;
@ApiOperation(value = "我发起的流程", response = FlowTaskDto.class)
@GetMapping(value = "/myProcess")
public R myProcess(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum,
@ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize) {
return flowTaskService.myProcess(pageNum, pageSize);
}
@ApiOperation(value = "取消申请", response = FlowTaskDto.class)
@PostMapping(value = "/stopProcess")
public R stopProcess(@RequestBody FlowTaskVo flowTaskVo) {
return flowTaskService.stopProcess(flowTaskVo);
}
@ApiOperation(value = "撤回流程", response = FlowTaskDto.class)
@PostMapping(value = "/revokeProcess")
public R revokeProcess(@RequestBody FlowTaskVo flowTaskVo) {
return flowTaskService.revokeProcess(flowTaskVo);
}
@ApiOperation(value = "获取待办列表", response = FlowTaskDto.class)
@GetMapping(value = "/todoList")
public R todoList(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum,
@ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize) {
return flowTaskService.todoList(pageNum, pageSize);
}
@ApiOperation(value = "获取已办任务", response = FlowTaskDto.class)
@GetMapping(value = "/finishedList")
public R finishedList(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum,
@ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize) {
return flowTaskService.finishedList(pageNum, pageSize);
}
@ApiOperation(value = "流程历史流转记录", response = FlowTaskDto.class)
@GetMapping(value = "/flowRecord")
public R flowRecord(String procInsId,String deployId) {
return flowTaskService.flowRecord(procInsId,deployId);
}
@ApiOperation(value = "获取流程变量", response = FlowTaskDto.class)
@GetMapping(value = "/processVariables/{taskId}")
public R processVariables(@ApiParam(value = "流程任务Id") @PathVariable(value = "taskId") String taskId) {
return flowTaskService.processVariables(taskId);
}
@ApiOperation(value = "审批任务")
@PostMapping(value = "/complete")
public R complete(@RequestBody FlowTaskVo flowTaskVo) {
return flowTaskService.complete(flowTaskVo);
}
@ApiOperation(value = "驳回任务")
@PostMapping(value = "/reject")
public R taskReject(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.taskReject(flowTaskVo);
return R.success();
}
@ApiOperation(value = "退回任务")
@PostMapping(value = "/return")
public R taskReturn(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.taskReturn(flowTaskVo);
return R.success();
}
@ApiOperation(value = "获取所有可回退的节点")
@PostMapping(value = "/returnList")
public R findReturnTaskList(@RequestBody FlowTaskVo flowTaskVo) {
return flowTaskService.findReturnTaskList(flowTaskVo);
}
@ApiOperation(value = "删除任务")
@DeleteMapping(value = "/delete")
public R delete(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.deleteTask(flowTaskVo);
return R.success();
}
@ApiOperation(value = "认领/签收任务")
@PostMapping(value = "/claim")
public R claim(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.claim(flowTaskVo);
return R.success();
}
@ApiOperation(value = "取消认领/签收任务")
@PostMapping(value = "/unClaim")
public R unClaim(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.unClaim(flowTaskVo);
return R.success();
}
@ApiOperation(value = "委派任务")
@PostMapping(value = "/delegate")
public R delegate(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.delegateTask(flowTaskVo);
return R.success();
}
@ApiOperation(value = "转办任务")
@PostMapping(value = "/assign")
public R assign(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.assignTask(flowTaskVo);
return R.success();
}
@ApiOperation(value = "获取下一节点")
@PostMapping(value = "/nextFlowNode")
public R getNextFlowNode(@RequestBody FlowTaskVo flowTaskVo) {
return flowTaskService.getNextFlowNode(flowTaskVo);
}
/**
* 生成流程图
*
* @param processId 任务ID
*/
@RequestMapping("/diagram/{processId}")
public void genProcessDiagram(HttpServletResponse response,
@PathVariable("processId") String processId) {
InputStream inputStream = flowTaskService.diagram(processId);
OutputStream os = null;
BufferedImage image = null;
try {
image = ImageIO.read(inputStream);
response.setContentType("image/png");
os = response.getOutputStream();
if (image != null) {
ImageIO.write(image, "png", os);
}
}catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (os != null) {
os.flush();
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 生成流程图
*
* @param procInsId 任务ID
*/
@RequestMapping("/flowViewer/{procInsId}")
public R getFlowViewer(@PathVariable("procInsId") String procInsId) {
return flowTaskService.getFlowViewer(procInsId);
}
}

View File

@@ -0,0 +1,104 @@
package com.ruoyi.web.controller.workflow;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.workflow.service.ISysDeployFormService;
import com.ruoyi.workflow.service.ISysFormService;
import com.ruoyi.system.domain.SysDeployForm;
import com.ruoyi.system.domain.SysForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 流程表单Controller
*
* @author XuanXuan
* @date 2021-04-03
*/
@RestController
@RequestMapping("/workflow/form")
public class SysFormController extends BaseController {
@Autowired
private ISysFormService SysFormService;
@Autowired
private ISysDeployFormService sysDeployFormService;
/**
* 查询流程表单列表
*/
@SaCheckPermission("flowable:form:list")
@GetMapping("/list")
public TableDataInfo list(SysForm sysForm, PageQuery pageQuery) {
return SysFormService.selectSysFormPage(sysForm, pageQuery);
}
/**
* 导出流程表单列表
*/
@SaCheckPermission("flowable:form:export")
@Log(title = "流程表单", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public void export(SysForm sysForm, HttpServletResponse response) {
List<SysForm> list = SysFormService.selectSysFormList(sysForm);
ExcelUtil.exportExcel(list, "form", SysForm.class, response);
}
/**
* 获取流程表单详细信息
*/
@SaCheckPermission("flowable:form:query")
@GetMapping(value = "/{formId}")
public R getInfo(@PathVariable("formId") Long formId) {
return R.success(SysFormService.selectSysFormById(formId));
}
/**
* 新增流程表单
*/
@SaCheckPermission("flowable:form:add")
@Log(title = "流程表单", businessType = BusinessType.INSERT)
@PostMapping
public R add(@RequestBody SysForm sysForm) {
return toAjax(SysFormService.insertSysForm(sysForm));
}
/**
* 修改流程表单
*/
@SaCheckPermission("flowable:form:edit")
@Log(title = "流程表单", businessType = BusinessType.UPDATE)
@PutMapping
public R edit(@RequestBody SysForm sysForm) {
return toAjax(SysFormService.updateSysForm(sysForm));
}
/**
* 删除流程表单
*/
@SaCheckPermission("flowable:form:remove")
@Log(title = "流程表单", businessType = BusinessType.DELETE)
@DeleteMapping("/{formIds}")
public R remove(@PathVariable Long[] formIds) {
return toAjax(SysFormService.deleteSysFormByIds(formIds));
}
/**
* 挂载流程表单
*/
@Log(title = "流程表单", businessType = BusinessType.INSERT)
@PostMapping("/addDeployForm")
public R addDeployForm(@RequestBody SysDeployForm sysDeployForm) {
return toAjax(sysDeployFormService.insertSysDeployForm(sysDeployForm));
}
}

View File

@@ -17,7 +17,7 @@ spring:
xxl:
job:
# 执行器开关
enabled: true
enabled: false
# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
admin-addresses: http://localhost:9100/xxl-job-admin
# 执行器通讯TOKEN非空时启用
@@ -121,7 +121,7 @@ spring:
# 数据库索引
database: 0
# 密码
password:
password: konbai123..
# 连接超时时间
timeout: 10s
# 是否开启ssl
@@ -129,9 +129,9 @@ spring:
redisson:
# 线程池数量
threads: 16
threads: 4
# Netty线程池数量
nettyThreads: 32
nettyThreads: 8
# 传输模式
transportMode: "NIO"
# 单节点配置
@@ -139,9 +139,9 @@ redisson:
# 客户端名称
clientName: ${ruoyi.name}
# 最小空闲连接数
connectionMinimumIdleSize: 32
connectionMinimumIdleSize: 8
# 连接池大小
connectionPoolSize: 64
connectionPoolSize: 32
# 连接空闲超时,单位:毫秒
idleConnectionTimeout: 10000
# 命令等待超时,单位:毫秒

View File

@@ -83,6 +83,10 @@ spring:
thymeleaf:
# 将系统模板放置到最前面 否则会与 springboot-admin 页面冲突
template-resolver-order: 1
mvc:
pathmatch:
# 适配 boot 2.6 路由与 springfox 兼容
matching-strategy: ANT_PATH_MATCHER
jackson:
# 日期格式化
date-format: yyyy-MM-dd HH:mm:ss
@@ -95,24 +99,46 @@ spring:
# 允许对象忽略json中不存在的属性
fail_on_unknown_properties: false
# token配置
token:
# 令牌自定义标识
header: Authorization
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟
expireTime: 30
# Sa-Token配置
sa-token:
# token名称 (同时也是cookie名称)
token-name: Authorization
# token有效期 设为一天 (必定过期) 单位: 秒
timeout: 86400
# token临时有效期 (指定时间无操作就过期) 单位: 秒
activity-timeout: 1800
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# 是否尝试从请求体里读取token
is-read-body: false
# 是否尝试从header里读取token
is-read-head: true
# 是否尝试从cookie里读取token
is-read-cookie: false
# token前缀
token-prefix: "Bearer"
# token风格
token-style: uuid
# jwt秘钥
jwt-secret-key: abcdefghijklmnopqrstuvwxyz
# 是否输出操作日志
is-log: true
# security配置
security:
# 登出路径
logout-url: /logout
# 匿名路径
anonymous:
# 排除路径
excludes:
- /login
- /logout
- /register
- /captchaImage
# 静态资源
- /*.html
- /**/*.html
- /**/*.css
- /**/*.js
# swagger 文档配置
- /doc.html
- /swagger-resources/**
@@ -221,6 +247,10 @@ knife4j:
enable: true
# 是否开启生产环境保护策略
production: @knife4j.production@
basic:
enable: true
username: ruoyi
password: 123456
# 前端Ui的个性化配置属性
setting:
# 默认语言

View File

@@ -5,13 +5,13 @@
value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${console.log.pattern}</pattern>
<pattern>${console.log.pattern}</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
</encoder>
</appender>
<!-- 控制台输出 -->
<appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -32,20 +32,20 @@
</filter>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
@@ -53,16 +53,16 @@
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${log.pattern}</pattern>
@@ -70,23 +70,23 @@
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.ruoyi" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<!-- 系统模块日志级别控制 -->
<logger name="com.ruoyi" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<root level="info">
<appender-ref ref="console" />
</root>
<root level="info">
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />