From 8352f18b3a3150e57cce43ddea23071b6d78e0f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 11 Apr 2024 22:54:02 +0800 Subject: [PATCH 01/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=E5=8A=A0=E5=AF=86=E8=AF=B7=E6=B1=82=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/encrypt/filter/CryptoFilter.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java index 16d24fc21..98351321d 100644 --- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java @@ -11,7 +11,6 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.encrypt.properties.ApiDecryptProperties; import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.HandlerExecutionChain; @@ -43,27 +42,25 @@ public class CryptoFilter implements Filter { ServletResponse responseWrapper = null; EncryptResponseBodyWrapper responseBodyWrapper = null; - // 是否为 json 请求 - if (StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) { - // 是否为 put 或者 post 请求 - if (HttpMethod.PUT.matches(servletRequest.getMethod()) || HttpMethod.POST.matches(servletRequest.getMethod())) { - // 是否存在加密标头 - String headerValue = servletRequest.getHeader(properties.getHeaderFlag()); - if (StringUtils.isNotBlank(headerValue)) { - // 请求解密 - requestWrapper = new DecryptRequestBodyWrapper(servletRequest, properties.getPrivateKey(), properties.getHeaderFlag()); - } else { - // 是否有注解,有就报错,没有放行 - if (ObjectUtil.isNotNull(apiEncrypt)) { - HandlerExceptionResolver exceptionResolver = SpringUtils.getBean("handlerExceptionResolver", HandlerExceptionResolver.class); - exceptionResolver.resolveException( - servletRequest, servletResponse, null, - new ServiceException("没有访问权限,请联系管理员授权", HttpStatus.FORBIDDEN)); - return; - } + // 是否为 put 或者 post 请求 + if (HttpMethod.PUT.matches(servletRequest.getMethod()) || HttpMethod.POST.matches(servletRequest.getMethod())) { + // 是否存在加密标头 + String headerValue = servletRequest.getHeader(properties.getHeaderFlag()); + if (StringUtils.isNotBlank(headerValue)) { + // 请求解密 + requestWrapper = new DecryptRequestBodyWrapper(servletRequest, properties.getPrivateKey(), properties.getHeaderFlag()); + } else { + // 是否有注解,有就报错,没有放行 + if (ObjectUtil.isNotNull(apiEncrypt)) { + HandlerExceptionResolver exceptionResolver = SpringUtils.getBean("handlerExceptionResolver", HandlerExceptionResolver.class); + exceptionResolver.resolveException( + servletRequest, servletResponse, null, + new ServiceException("没有访问权限,请联系管理员授权", HttpStatus.FORBIDDEN)); + return; } } } + // 判断是否响应加密 if (responseFlag) { responseBodyWrapper = new EncryptResponseBodyWrapper(servletResponse); From 1abd2e7d7e2493481115758b07a9117f164649b4 Mon Sep 17 00:00:00 2001 From: songgaoshuai <1742057357@qq.com> Date: Wed, 17 Apr 2024 16:06:47 +0800 Subject: [PATCH 02/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E5=88=B0?= =?UTF-8?q?=E6=9C=9F=E6=97=B6=E9=97=B4=E7=94=9F=E6=88=90=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/flowable/config/GlobalFlowableListener.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java index b59fb45b2..9bb971a8c 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java @@ -23,6 +23,7 @@ import org.flowable.job.service.impl.persistence.entity.TimerJobEntity; import org.flowable.task.api.Task; import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @@ -50,6 +51,9 @@ public class GlobalFlowableListener implements FlowableEventListener { @Lazy private RepositoryService repositoryService; + @Value("${flowable.async-executor-activate}") + private boolean asyncExecutorActivate; + @Override public void onEvent(FlowableEvent flowableEvent) { if (flowableEvent instanceof FlowableEngineEvent flowableEngineEvent) { @@ -60,7 +64,7 @@ public class GlobalFlowableListener implements FlowableEventListener { FlowableEntityEvent flowableEntityEvent = (FlowableEntityEvent) flowableEngineEvent; Object entityObject = flowableEntityEvent.getEntity(); TaskEntity task = (TaskEntity) entityObject; - if (task.getDueDate() != null && task.getDueDate().after(new Date())) { + if (asyncExecutorActivate && task.getDueDate() != null && task.getDueDate().after(new Date())) { //删除之前已经存在的定时任务 TimerJobService timerJobService = CommandContextUtil.getTimerJobService(); List timerJobEntityList = timerJobService.findTimerJobsByProcessInstanceId(task.getProcessInstanceId()); From e1b94d6a28157b7658d7020851e2db0508099b1a Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 19 Apr 2024 05:00:57 +0000 Subject: [PATCH 03/38] =?UTF-8?q?!517=20=E5=9C=A8=E7=BA=BF=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=AE=A1=E7=90=86=20*=20update=20=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86=E4=B8=8E?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E8=AF=B7=E6=B1=82=E4=B8=80=E8=87=B4=20*=20up?= =?UTF-8?q?date=20=E5=9C=A8=E7=BA=BF=E7=99=BB=E5=BD=95=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A2=9E=E5=8A=A0=E9=80=80=E5=87=BA=E6=97=A5?= =?UTF-8?q?=E5=BF=97=20*=20add=20=E6=96=B0=E5=A2=9E=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitor/SysUserOnlineController.java | 40 +++++++++++++++++++ .../dromara/system/domain/SysUserOnline.java | 1 - 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java index def448d4d..9b08c2d2c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * 在线用户监控 @@ -87,4 +88,43 @@ public class SysUserOnlineController extends BaseController { } return R.ok(); } + + /** + * 获取当前用户登录在线设备 + */ + @GetMapping() + public TableDataInfo getInfo() { + // 获取指定账号 id 的 token 集合 + List tokenIds = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); + List userOnlineDTOList = tokenIds.stream() + .filter(token -> StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) >= -1) + .map(token -> (UserOnlineDTO) RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token)) + .collect(Collectors.toList()); + //复制和处理 SysUserOnline 对象列表 + Collections.reverse(userOnlineDTOList); + userOnlineDTOList.removeAll(Collections.singleton(null)); + List userOnlineList = BeanUtil.copyToList(userOnlineDTOList, SysUserOnline.class); + return TableDataInfo.build(userOnlineList); + } + + /** + * 强退当前在线设备 + * + * @param tokenId token值 + */ + @Log(title = "在线设备", businessType = BusinessType.FORCE) + @PostMapping("/{tokenId}") + public R remove(@PathVariable("tokenId") String tokenId) { + try { + // 获取指定账号 id 的 token 集合 + List keys = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); + keys.stream() + .filter(key -> key.equals(tokenId)) + .findFirst() + .ifPresent(key -> StpUtil.kickoutByTokenValue(tokenId)); + } catch (NotLoginException ignored) { + } + return R.ok(); + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java index 6def906e1..ba30eb609 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java @@ -7,7 +7,6 @@ import lombok.Data; * * @author Lion Li */ - @Data public class SysUserOnline { From 6cc2da03e03d597da09fd979b4474481c129aa6f Mon Sep 17 00:00:00 2001 From: wangql <937675070@qq.com> Date: Tue, 23 Apr 2024 10:18:50 +0800 Subject: [PATCH 04/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E6=A8=A1=E5=9D=97=E7=9A=84=E9=9B=86=E5=90=88?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB,=E7=BB=9F=E4=B8=80=E4=B8=BACollUtil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ActProcessDefinitionServiceImpl.java | 5 ++--- .../workflow/service/impl/ActTaskServiceImpl.java | 7 +++---- .../service/impl/WfTaskBackNodeServiceImpl.java | 8 ++++---- .../service/impl/WorkflowUserServiceImpl.java | 15 +++++++-------- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index 468e3978e..e1572ca08 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java @@ -3,7 +3,6 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; @@ -150,7 +149,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer processDefinitionVoList.add(processDefinitionVo); } } - return CollectionUtil.reverse(processDefinitionVoList); + return CollUtil.reverse(processDefinitionVoList); } /** @@ -195,7 +194,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer public boolean deleteDeployment(List deploymentIds, List processDefinitionIds) { try { List historicProcessInstances = QueryUtils.hisInstanceQuery().deploymentIdIn(deploymentIds).list(); - if (CollectionUtil.isNotEmpty(historicProcessInstances)) { + if (CollUtil.isNotEmpty(historicProcessInstances)) { Set defIds = StreamUtils.toSet(historicProcessInstances, HistoricProcessInstance::getProcessDefinitionId); List processDefinitions = QueryUtils.definitionQuery().processDefinitionIds(defIds).list(); if (CollUtil.isNotEmpty(processDefinitions)) { diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 08d99d689..d5c759929 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -2,7 +2,6 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -517,9 +516,9 @@ public class ActTaskServiceImpl implements IActTaskService { } taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment()); List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - if (CollectionUtil.isNotEmpty(list)) { + if (CollUtil.isNotEmpty(list)) { List subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); - if (CollectionUtil.isNotEmpty(subTasks)) { + if (CollUtil.isNotEmpty(subTasks)) { subTasks.forEach(e -> taskService.deleteTask(e.getId())); } runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus()); @@ -768,7 +767,7 @@ public class ActTaskServiceImpl implements IActTaskService { public List getInstanceVariable(String taskId) { List variableVoList = new ArrayList<>(); Map variableInstances = taskService.getVariableInstances(taskId); - if (CollectionUtil.isNotEmpty(variableInstances)) { + if (CollUtil.isNotEmpty(variableInstances)) { for (Map.Entry entry : variableInstances.entrySet()) { VariableVo variableVo = new VariableVo(); variableVo.setKey(entry.getKey()); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java index b65642939..0992f6f08 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java @@ -1,6 +1,6 @@ package org.dromara.workflow.service.impl; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; @@ -50,7 +50,7 @@ public class WfTaskBackNodeServiceImpl implements IWfTaskBackNodeService { } else { wfTaskBackNode.setTaskType(USER_TASK); } - if (CollectionUtil.isEmpty(list)) { + if (CollUtil.isEmpty(list)) { wfTaskBackNode.setOrderNo(0); wfTaskBackNodeMapper.insert(wfTaskBackNode); } else { @@ -96,14 +96,14 @@ public class WfTaskBackNodeServiceImpl implements IWfTaskBackNodeService { Integer orderNo = actTaskNode.getOrderNo(); List taskNodeList = getListByInstanceId(processInstanceId); List ids = new ArrayList<>(); - if (CollectionUtil.isNotEmpty(taskNodeList)) { + if (CollUtil.isNotEmpty(taskNodeList)) { for (WfTaskBackNode taskNode : taskNodeList) { if (taskNode.getOrderNo() >= orderNo) { ids.add(taskNode.getId()); } } } - if (CollectionUtil.isNotEmpty(ids)) { + if (CollUtil.isNotEmpty(ids)) { wfTaskBackNodeMapper.deleteBatchIds(ids); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java index c4b221df8..23dd1b609 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java @@ -1,7 +1,6 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -70,11 +69,11 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode()); if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { List assigneeList = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); - queryWrapper.notIn(CollectionUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList); + queryWrapper.notIn(CollUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList); } else { List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); List userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee())); - queryWrapper.notIn(CollectionUtil.isNotEmpty(userIds), SysUser::getUserId, userIds); + queryWrapper.notIn(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds); } queryWrapper.like(StringUtils.isNotEmpty(bo.getUserName()), SysUser::getUserName, bo.getUserName()); queryWrapper.like(StringUtils.isNotEmpty(bo.getNickName()), SysUser::getNickName, bo.getNickName()); @@ -109,7 +108,7 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { List userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee())); List sysUsers = null; - if (CollectionUtil.isNotEmpty(userIds)) { + if (CollUtil.isNotEmpty(userIds)) { sysUsers = sysUserMapper.selectVoBatchIds(userIds); } for (Long userId : userIds) { @@ -119,7 +118,7 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { taskVo.setProcessInstanceId(task.getProcessInstanceId()); taskVo.setName(task.getName()); taskVo.setAssignee(userId); - if (CollectionUtil.isNotEmpty(sysUsers)) { + if (CollUtil.isNotEmpty(sysUsers)) { sysUsers.stream().filter(u -> u.getUserId().toString().equals(userId.toString())).findFirst().ifPresent(u -> taskVo.setAssigneeName(u.getNickName())); } taskListVo.add(taskVo); @@ -127,10 +126,10 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { return taskListVo; } else if (multiInstance.getType() instanceof ParallelMultiInstanceBehavior) { List tasks = StreamUtils.filter(taskList, e -> StringUtils.isBlank(e.getParentTaskId()) && !e.getExecutionId().equals(task.getExecutionId()) && e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey())); - if (CollectionUtil.isNotEmpty(tasks)) { + if (CollUtil.isNotEmpty(tasks)) { List userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee())); List sysUsers = null; - if (CollectionUtil.isNotEmpty(userIds)) { + if (CollUtil.isNotEmpty(userIds)) { sysUsers = sysUserMapper.selectVoBatchIds(userIds); } for (Task t : tasks) { @@ -140,7 +139,7 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { taskVo.setProcessInstanceId(t.getProcessInstanceId()); taskVo.setName(t.getName()); taskVo.setAssignee(Long.valueOf(t.getAssignee())); - if (CollectionUtil.isNotEmpty(sysUsers)) { + if (CollUtil.isNotEmpty(sysUsers)) { sysUsers.stream().filter(u -> u.getUserId().toString().equals(t.getAssignee())).findFirst().ifPresent(e -> taskVo.setAssigneeName(e.getNickName())); } taskListVo.add(taskVo); From 748411c8dbd570928bb0dc021b5a6525e7c3c510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 23 Apr 2024 11:36:23 +0800 Subject: [PATCH 05/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=B5=8F=E8=A7=88=E5=99=A8=E6=97=A0=E6=B3=95=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=8A=A0=E5=AF=86=E5=93=8D=E5=BA=94=E5=A4=B4=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/encrypt/filter/EncryptResponseBodyWrapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/EncryptResponseBodyWrapper.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/EncryptResponseBodyWrapper.java index 05cf44470..c0af232ee 100644 --- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/EncryptResponseBodyWrapper.java +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/EncryptResponseBodyWrapper.java @@ -76,6 +76,7 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper { String encryptPassword = EncryptUtils.encryptByRsa(encryptAes, publicKey); // 设置响应头 + servletResponse.addHeader("Access-Control-Expose-Headers", headerFlag); servletResponse.setHeader(headerFlag, encryptPassword); servletResponse.setHeader("Access-Control-Allow-Origin", "*"); servletResponse.setHeader("Access-Control-Allow-Methods", "*"); From ea64f505afbe7df510c73b2f66b8cede6f008507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 24 Apr 2024 13:15:43 +0800 Subject: [PATCH 06/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20redis=20?= =?UTF-8?q?=E5=AF=B9Long=E5=80=BC=E7=9A=84=E5=AD=98=E5=82=A8=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=8D=E5=90=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/ruoyi-common-redis/pom.xml | 5 +++++ .../common/redis/config/RedisConfig.java | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ruoyi-common/ruoyi-common-redis/pom.xml b/ruoyi-common/ruoyi-common-redis/pom.xml index 140866575..f56f8aad3 100644 --- a/ruoyi-common/ruoyi-common-redis/pom.xml +++ b/ruoyi-common/ruoyi-common-redis/pom.xml @@ -37,6 +37,11 @@ com.github.ben-manes.caffeine caffeine + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java index f4328f4d4..039fd30b7 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java @@ -5,6 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.redis.config.properties.RedissonProperties; @@ -19,6 +22,10 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean; import org.springframework.core.task.VirtualThreadTaskExecutor; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.TimeZone; + /** * redis配置 * @@ -32,13 +39,16 @@ public class RedisConfig { @Autowired private RedissonProperties redissonProperties; - @Autowired - private ObjectMapper objectMapper; - @Bean public RedissonAutoConfigurationCustomizer redissonCustomizer() { return config -> { - ObjectMapper om = objectMapper.copy(); + JavaTimeModule javaTimeModule = new JavaTimeModule(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter)); + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter)); + ObjectMapper om = new ObjectMapper(); + om.registerModule(javaTimeModule); + om.setTimeZone(TimeZone.getDefault()); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // 指定序列化输入的类型,类必须是非final修饰的。序列化时将对象全类名一起保存下来 om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); From eb06eb7266be9a73433b049b0b08754491bddce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 24 Apr 2024 18:06:19 +0800 Subject: [PATCH 07/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E9=94=AE=E5=80=BC=E5=8F=AF=E9=87=8D=E5=A4=8D=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/SysDictDataController.java | 6 ++++++ .../system/service/ISysDictDataService.java | 9 +++++++++ .../service/impl/SysDictDataServiceImpl.java | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictDataController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictDataController.java index cc8034e62..57527511e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictDataController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictDataController.java @@ -87,6 +87,9 @@ public class SysDictDataController extends BaseController { @Log(title = "字典数据", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysDictDataBo dict) { + if (!dictDataService.checkDictDataUnique(dict)) { + return R.fail("新增字典数据'" + dict.getDictValue() + "'失败,字典键值已存在"); + } dictDataService.insertDictData(dict); return R.ok(); } @@ -98,6 +101,9 @@ public class SysDictDataController extends BaseController { @Log(title = "字典数据", businessType = BusinessType.UPDATE) @PutMapping public R edit(@Validated @RequestBody SysDictDataBo dict) { + if (!dictDataService.checkDictDataUnique(dict)) { + return R.fail("修改字典数据'" + dict.getDictValue() + "'失败,字典键值已存在"); + } dictDataService.updateDictData(dict); return R.ok(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java index 30442cec1..0e697db60 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictDataService.java @@ -64,4 +64,13 @@ public interface ISysDictDataService { * @return 结果 */ List updateDictData(SysDictDataBo bo); + + /** + * 校验字典键值是否唯一 + * + * @param dict 字典数据 + * @return 结果 + */ + boolean checkDictDataUnique(SysDictDataBo dict); + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java index 74d445453..1ab0fafd1 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictDataServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -135,4 +136,21 @@ public class SysDictDataServiceImpl implements ISysDictDataService { throw new ServiceException("操作失败"); } + /** + * 校验字典键值是否唯一 + * + * @param dict 字典数据 + * @return 结果 + */ + @Override + public boolean checkDictDataUnique(SysDictDataBo dict) { + Long dictCode = ObjectUtil.isNull(dict.getDictCode()) ? -1L : dict.getDictCode(); + SysDictData entity = baseMapper.selectOne(new LambdaQueryWrapper() + .eq(SysDictData::getDictType, dict.getDictType()).eq(SysDictData::getDictValue, dict.getDictValue())); + if (ObjectUtil.isNotNull(entity) && !dictCode.equals(entity.getDictCode())) { + return false; + } + return true; + } + } From 8482203c3b572e15249b3439d295219188543140 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Wed, 24 Apr 2024 14:29:46 +0000 Subject: [PATCH 08/38] =?UTF-8?q?!520=20add=20=E6=96=B0=E5=A2=9E=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E7=BC=96=E7=A0=81=E4=B8=8E=E9=83=A8=E9=97=A8=E7=BC=96?= =?UTF-8?q?=E7=A0=81=20=E5=B9=B6=E5=B0=86=E5=B2=97=E4=BD=8D=E6=94=BE?= =?UTF-8?q?=E5=88=B0=E9=83=A8=E9=97=A8=E4=B8=8B=20*=20add=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=B2=97=E4=BD=8D=E7=BC=96=E7=A0=81=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=20*=20add=20=E6=96=B0=E5=A2=9E=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E7=BC=96=E7=A0=81=E4=BB=A5=E5=8F=8A=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysPostController.java | 15 +++++- .../controller/system/SysUserController.java | 11 ++-- .../org/dromara/system/domain/SysDept.java | 7 ++- .../org/dromara/system/domain/SysPost.java | 10 ++++ .../dromara/system/domain/bo/SysDeptBo.java | 6 +++ .../dromara/system/domain/bo/SysPostBo.java | 18 ++++++- .../dromara/system/domain/vo/SysDeptVo.java | 6 +++ .../dromara/system/domain/vo/SysPostVo.java | 28 ++++++++-- .../dromara/system/mapper/SysPostMapper.java | 12 +++++ .../service/impl/SysDeptServiceImpl.java | 1 + .../service/impl/SysPostServiceImpl.java | 47 +++++++++++++---- .../resources/mapper/system/SysPostMapper.xml | 13 ++++- script/sql/oracle/oracle_ry_vue_5.X.sql | 35 ++++++++----- script/sql/postgres/postgres_ry_vue_5.X.sql | 34 ++++++++----- script/sql/ry_vue_5.X.sql | 31 ++++++----- script/sql/sqlserver/sqlserver_ry_vue_5.X.sql | 51 +++++++++++++------ .../sql/update/oracle/update_5.1.1-5.1.2.sql | 1 + .../sql/update/oracle/update_5.1.2-5.2.0.sql | 3 ++ .../update/postgres/update_5.1.1-5.1.2.sql | 1 - .../update/postgres/update_5.1.2-5.2.0.sql | 6 +++ .../update/sqlserver/update_5.1.2-5.2.0.sql | 11 ++++ script/sql/update/update_5.1.1-5.1.2.sql | 1 - script/sql/update/update_5.1.2-5.2.0.sql | 3 ++ 23 files changed, 267 insertions(+), 84 deletions(-) create mode 100644 script/sql/update/oracle/update_5.1.2-5.2.0.sql create mode 100644 script/sql/update/postgres/update_5.1.2-5.2.0.sql create mode 100644 script/sql/update/sqlserver/update_5.1.2-5.2.0.sql create mode 100644 script/sql/update/update_5.1.2-5.2.0.sql diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysPostController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysPostController.java index 330b3fb52..782bcfc55 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysPostController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysPostController.java @@ -1,6 +1,7 @@ package org.dromara.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.ObjectUtil; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.UserConstants; @@ -17,6 +18,7 @@ import org.dromara.system.service.ISysPostService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; /** @@ -112,11 +114,20 @@ public class SysPostController extends BaseController { * 获取岗位选择框列表 * * @param postIds 岗位ID串 + * @param deptId 部门id */ @SaCheckPermission("system:post:query") @GetMapping("/optionselect") - public R> optionselect(@RequestParam(required = false) Long[] postIds) { - return R.ok(postService.selectPostByIds(postIds == null ? null : List.of(postIds))); + public R> optionselect(@RequestParam(required = false) Long[] postIds, @RequestParam(required = false) Long deptId) { + List list = new ArrayList<>(); + if (ObjectUtil.isNotNull(deptId)) { + SysPostBo post = new SysPostBo(); + post.setDeptId(deptId); + list = postService.selectPostList(post); + } else if (postIds != null) { + list = postService.selectPostByIds(List.of(postIds)); + } + return R.ok(list); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index b1502ac92..e0011d9bf 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -132,16 +132,19 @@ public class SysUserController extends BaseController { SysUserInfoVo userInfoVo = new SysUserInfoVo(); SysRoleBo roleBo = new SysRoleBo(); roleBo.setStatus(UserConstants.ROLE_NORMAL); - SysPostBo postBo = new SysPostBo(); - postBo.setStatus(UserConstants.POST_NORMAL); List roles = roleService.selectRoleList(roleBo); userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin())); - userInfoVo.setPosts(postService.selectPostList(postBo)); if (ObjectUtil.isNotNull(userId)) { SysUserVo sysUser = userService.selectUserById(userId); userInfoVo.setUser(sysUser); userInfoVo.setRoleIds(roleService.selectRoleListByUserId(userId)); - userInfoVo.setPostIds(postService.selectPostListByUserId(userId)); + Long deptId = sysUser.getDeptId(); + if (ObjectUtil.isNotNull(deptId)) { + SysPostBo postBo = new SysPostBo(); + postBo.setDeptId(deptId); + userInfoVo.setPosts(postService.selectPostList(postBo)); + userInfoVo.setPostIds(postService.selectPostListByUserId(userId)); + } } return R.ok(userInfoVo); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDept.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDept.java index 70f1a9ad0..48ca6821b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDept.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDept.java @@ -3,9 +3,9 @@ package org.dromara.system.domain; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; -import org.dromara.common.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import org.dromara.common.tenant.core.TenantEntity; import java.io.Serial; @@ -39,6 +39,11 @@ public class SysDept extends TenantEntity { */ private String deptName; + /** + * 部门类别编码 + */ + private String deptCategory; + /** * 显示顺序 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysPost.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysPost.java index 7fe703974..2c985da6a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysPost.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysPost.java @@ -23,6 +23,11 @@ public class SysPost extends TenantEntity { @TableId(value = "post_id") private Long postId; + /** + * 部门id + */ + private Long deptId; + /** * 岗位编码 */ @@ -33,6 +38,11 @@ public class SysPost extends TenantEntity { */ private String postName; + /** + * 岗位类别编码 + */ + private String postCategory; + /** * 岗位排序 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java index a5031d7f6..5f64d6f30 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java @@ -38,6 +38,12 @@ public class SysDeptBo extends BaseEntity { @Size(min = 0, max = 30, message = "部门名称长度不能超过{max}个字符") private String deptName; + /** + * 部门类别编码 + */ + @Size(min = 0, max = 100, message = "部门类别编码长度不能超过{max}个字符") + private String deptCategory; + /** * 显示顺序 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysPostBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysPostBo.java index b93c39cd5..09805cdda 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysPostBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysPostBo.java @@ -25,6 +25,17 @@ public class SysPostBo extends BaseEntity { */ private Long postId; + /** + * 部门id(单部门) + */ + @NotNull(message = "部门id不能为空") + private Long deptId; + + /** + * 归属部门id(部门树) + */ + private Long belongDeptId; + /** * 岗位编码 */ @@ -39,6 +50,12 @@ public class SysPostBo extends BaseEntity { @Size(min = 0, max = 50, message = "岗位名称长度不能超过{max}个字符") private String postName; + /** + * 岗位类别编码 + */ + @Size(min = 0, max = 100, message = "类别编码长度不能超过{max}个字符") + private String postCategory; + /** * 显示顺序 */ @@ -55,5 +72,4 @@ public class SysPostBo extends BaseEntity { */ private String remark; - } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java index c4dd412b3..c56fb09bc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java @@ -52,6 +52,12 @@ public class SysDeptVo implements Serializable { @ExcelProperty(value = "部门名称") private String deptName; + /** + * 部门类别编码 + */ + @ExcelProperty(value = "部门类别编码") + private String deptCategory; + /** * 显示顺序 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java index 3e6c6a843..69be547a0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java @@ -2,18 +2,18 @@ package org.dromara.system.domain.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import org.dromara.system.domain.SysPost; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.system.domain.SysPost; import java.io.Serial; import java.io.Serializable; import java.util.Date; - - /** * 岗位信息视图对象 sys_post * @@ -33,6 +33,12 @@ public class SysPostVo implements Serializable { @ExcelProperty(value = "岗位序号") private Long postId; + /** + * 部门id + */ + @ExcelProperty(value = "部门id") + private Long deptId; + /** * 岗位编码 */ @@ -45,6 +51,12 @@ public class SysPostVo implements Serializable { @ExcelProperty(value = "岗位名称") private String postName; + /** + * 岗位类别编码 + */ + @ExcelProperty(value = "类别编码") + private String postCategory; + /** * 显示顺序 */ @@ -70,4 +82,10 @@ public class SysPostVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 部门名 + */ + @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "deptId") + private String deptName; + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysPostMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysPostMapper.java index d6d27596f..1658840dd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysPostMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysPostMapper.java @@ -1,5 +1,11 @@ package org.dromara.system.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.annotation.DataColumn; +import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysPost; import org.dromara.system.domain.vo.SysPostVo; @@ -13,6 +19,12 @@ import java.util.List; */ public interface SysPostMapper extends BaseMapperPlus { + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "p.create_by") + }) + Page selectPagePostList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** * 查询用户所属岗位组 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 86edf59d4..505403642 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -82,6 +82,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { lqw.eq(ObjectUtil.isNotNull(bo.getDeptId()), SysDept::getDeptId, bo.getDeptId()); lqw.eq(ObjectUtil.isNotNull(bo.getParentId()), SysDept::getParentId, bo.getParentId()); lqw.like(StringUtils.isNotBlank(bo.getDeptName()), SysDept::getDeptName, bo.getDeptName()); + lqw.like(StringUtils.isNotBlank(bo.getDeptCategory()), SysDept::getDeptCategory, bo.getDeptCategory()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysDept::getStatus, bo.getStatus()); lqw.orderByAsc(SysDept::getAncestors); lqw.orderByAsc(SysDept::getParentId); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java index 33b98af59..17cd5caae 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.UserConstants; @@ -14,10 +13,13 @@ import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.helper.DataBaseHelper; +import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysPost; import org.dromara.system.domain.SysUserPost; import org.dromara.system.domain.bo.SysPostBo; import org.dromara.system.domain.vo.SysPostVo; +import org.dromara.system.mapper.SysDeptMapper; import org.dromara.system.mapper.SysPostMapper; import org.dromara.system.mapper.SysUserPostMapper; import org.dromara.system.service.ISysPostService; @@ -25,6 +27,7 @@ import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * 岗位信息 服务层处理 @@ -36,12 +39,12 @@ import java.util.List; public class SysPostServiceImpl implements ISysPostService { private final SysPostMapper baseMapper; + private final SysDeptMapper deptMapper; private final SysUserPostMapper userPostMapper; @Override public TableDataInfo selectPagePostList(SysPostBo post, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(post); - Page page = baseMapper.selectVoPage(pageQuery.build(), lqw); + Page page = baseMapper.selectPagePostList(pageQuery.build(), buildQueryWrapper(post)); return TableDataInfo.build(page); } @@ -53,17 +56,39 @@ public class SysPostServiceImpl implements ISysPostService { */ @Override public List selectPostList(SysPostBo post) { - LambdaQueryWrapper lqw = buildQueryWrapper(post); - return baseMapper.selectVoList(lqw); + return baseMapper.selectVoList(buildQueryWrapper(post)); } + /** + * 根据查询条件构建查询包装器 + * + * @param bo 查询条件对象 + * @return 构建好的查询包装器 + */ private LambdaQueryWrapper buildQueryWrapper(SysPostBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getPostCode()), SysPost::getPostCode, bo.getPostCode()); - lqw.like(StringUtils.isNotBlank(bo.getPostName()), SysPost::getPostName, bo.getPostName()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysPost::getStatus, bo.getStatus()); - lqw.orderByAsc(SysPost::getPostSort); - return lqw; + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(bo.getPostCode()), SysPost::getPostCode, bo.getPostCode()) + .like(StringUtils.isNotBlank(bo.getPostCategory()), SysPost::getPostCategory, bo.getPostCategory()) + .like(StringUtils.isNotBlank(bo.getPostName()), SysPost::getPostName, bo.getPostName()) + .eq(StringUtils.isNotBlank(bo.getStatus()), SysPost::getStatus, bo.getStatus()) + .orderByAsc(SysPost::getPostSort); + if (ObjectUtil.isNotNull(bo.getDeptId())) { + //优先单部门搜索 + wrapper.eq(SysPost::getDeptId, bo.getDeptId()); + } else if (ObjectUtil.isNotNull(bo.getBelongDeptId())) { + //部门树搜索 + wrapper.and(x -> { + List deptIds = deptMapper.selectList(new LambdaQueryWrapper() + .select(SysDept::getDeptId) + .apply(DataBaseHelper.findInSet(bo.getBelongDeptId(), "ancestors"))) + .stream() + .map(SysDept::getDeptId) + .collect(Collectors.toList()); + deptIds.add(bo.getBelongDeptId()); + x.in(SysPost::getDeptId, deptIds); + }); + } + return wrapper; } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml index 199dffe4d..322403f68 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml @@ -7,8 +7,19 @@ + + selectBodyList = setOperationList.getSelects(); selectBodyList.forEach(s -> this.setWhere((PlainSelect) s, (String) obj)); } } @@ -113,5 +113,11 @@ public class PlusDataPermissionInterceptor extends JsqlParserSupport implements } } + @Override + public Expression buildTableExpression(Table table, Expression where, String whereSegment) { + // 只有新版数据权限处理器才会执行到这里 + final MultiDataPermissionHandler handler = (MultiDataPermissionHandler) dataPermissionHandler; + return handler.getSqlSegment(table, where, whereSegment); + } } diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/config/TenantConfig.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/config/TenantConfig.java index 0ff39fdc0..3fb99c5b1 100644 --- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/config/TenantConfig.java +++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/config/TenantConfig.java @@ -16,6 +16,7 @@ import org.redisson.config.ClusterServersConfig; import org.redisson.config.SingleServerConfig; import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cache.CacheManager; @@ -28,16 +29,22 @@ import org.springframework.context.annotation.Primary; * @author Lion Li */ @EnableConfigurationProperties(TenantProperties.class) -@AutoConfiguration(after = {RedisConfig.class, MybatisPlusConfig.class}) +@AutoConfiguration(after = {RedisConfig.class}) @ConditionalOnProperty(value = "tenant.enable", havingValue = "true") public class TenantConfig { - /** - * 多租户插件 - */ - @Bean - public TenantLineInnerInterceptor tenantLineInnerInterceptor(TenantProperties tenantProperties) { - return new TenantLineInnerInterceptor(new PlusTenantLineHandler(tenantProperties)); + @ConditionalOnBean(MybatisPlusConfig.class) + @AutoConfiguration(after = {MybatisPlusConfig.class}) + static class MybatisPlusConfigation { + + /** + * 多租户插件 + */ + @Bean + public TenantLineInnerInterceptor tenantLineInnerInterceptor(TenantProperties tenantProperties) { + return new TenantLineInnerInterceptor(new PlusTenantLineHandler(tenantProperties)); + } + } @Bean From aa0ebd45b9b5a1fb25c037cddcc4a5baa46ae553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E8=BE=9E=E6=9C=AA=E5=AF=92?= <545073804@qq.com> Date: Thu, 25 Apr 2024 07:33:32 +0000 Subject: [PATCH 14/38] =?UTF-8?q?update=20script/sql/sqlserver/sqlserver?= =?UTF-8?q?=5Fry=5Fvue=5F5.X.sql.=20update=20=E4=BC=98=E5=8C=96=20!pr520?= =?UTF-8?q?=20=E5=AD=98=E5=9C=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 秋辞未寒 <545073804@qq.com> --- script/sql/sqlserver/sqlserver_ry_vue_5.X.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql b/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql index c0d4a369e..16f075366 100644 --- a/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql +++ b/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql @@ -2188,8 +2188,8 @@ GO EXEC sys.sp_addextendedproperty 'MS_Description', N'岗位类别编码' , 'SCHEMA', N'dbo', - 'TABLE', N'post_category', - 'COLUMN', N'post_code' + 'TABLE', N'sys_post', + 'COLUMN', N'post_category' GO EXEC sys.sp_addextendedproperty 'MS_Description', N'岗位名称' , From 33de9f9337fa12106a9f779b61db560716641cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 25 Apr 2024 17:00:26 +0800 Subject: [PATCH 15/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20postgres=20?= =?UTF-8?q?=E5=90=88=E5=B9=B6=20test.sql=E5=87=BA=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/sql/postgres/postgres_ry_vue_5.X.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/script/sql/postgres/postgres_ry_vue_5.X.sql b/script/sql/postgres/postgres_ry_vue_5.X.sql index 32d7b0e90..2e92d4621 100644 --- a/script/sql/postgres/postgres_ry_vue_5.X.sql +++ b/script/sql/postgres/postgres_ry_vue_5.X.sql @@ -431,7 +431,7 @@ insert into sys_menu values('6', '系统管理', '0', '2', 'tenant', n insert into sys_menu values('2', '系统监控', '0', '3', 'monitor', null, '', '1', '0', 'M', '0', '0', '', 'monitor', 103, 1, now(), null, null, '系统监控目录'); insert into sys_menu values('3', '系统工具', '0', '4', 'tool', null, '', '1', '0', 'M', '0', '0', '', 'tool', 103, 1, now(), null, null, '系统工具目录'); insert into sys_menu values('4', 'PLUS官网', '0', '5', 'https://gitee.com/dromara/RuoYi-Vue-Plus', null, '', '0', '0', 'M', '0', '0', '', 'guide', 103, 1, now(), null, null, 'RuoYi-Vue-Plus官网地址'); -insert into sys_menu VALUES('5', '测试菜单', '0', '5', 'demo', null, '1', '0', 'M', '0', '0', null, 'star', 103, 1, now(), null, null, '测试菜单'); +insert into sys_menu VALUES('5', '测试菜单', '0', '5', 'demo', null, '', '1', '0', 'M', '0', '0', null, 'star', 103, 1, now(), null, null, '测试菜单'); -- 二级菜单 insert into sys_menu values('100', '用户管理', '1', '1', 'user', 'system/user/index', '', '1', '0', 'C', '0', '0', 'system:user:list', 'user', 103, 1, now(), null, null, '用户管理菜单'); insert into sys_menu values('101', '角色管理', '1', '2', 'role', 'system/role/index', '', '1', '0', 'C', '0', '0', 'system:role:list', 'peoples', 103, 1, now(), null, null, '角色管理菜单'); @@ -559,8 +559,8 @@ insert into sys_menu values('1065', '客户端管理导出', '123', '5', '#', ' -- 测试菜单 INSERT INTO sys_menu VALUES('1500', '测试单表', '5', '1', 'demo', 'demo/demo/index', '', '1', '0', 'C', '0', '0', 'demo:demo:list', '#', 103, 1, now(), NULL, NULL, '测试单表菜单'); INSERT INTO sys_menu VALUES('1501', '测试单表查询', '1500', '1', '#', '', '', '1', '0', 'F', '0', '0', 'demo:demo:query', '#', 103, 1, now(), NULL, NULL, ''); -INSERT INTO sys_menu VALUES('1502', '测试单表新增', '1500', '2,' '#', '', '', '1', '0', 'F', '0', '0', 'demo:demo:add', '#', 103, 1, now(), NULL, NULL, ''); -INSERT INTO sys_menu VALUES('1503', '测试单表修改', '1500', '3', '#', '', '', '1', '0,' 'F', '0', '0', 'demo:demo:edit', '#', 103, 1, now(), NULL, NULL, ''); +INSERT INTO sys_menu VALUES('1502', '测试单表新增', '1500', '2', '#', '', '', '1', '0', 'F', '0', '0', 'demo:demo:add', '#', 103, 1, now(), NULL, NULL, ''); +INSERT INTO sys_menu VALUES('1503', '测试单表修改', '1500', '3', '#', '', '', '1', '0', 'F', '0', '0', 'demo:demo:edit', '#', 103, 1, now(), NULL, NULL, ''); INSERT INTO sys_menu VALUES('1504', '测试单表删除', '1500', '4', '#', '', '', '1', '0', 'F', '0', '0', 'demo:demo:remove', '#', 103, 1, now(), NULL, NULL, ''); INSERT INTO sys_menu VALUES('1505', '测试单表导出', '1500', '5', '#', '', '', '1', '0', 'F', '0', '0', 'demo:demo:export', '#', 103, 1, now(), NULL, NULL, ''); INSERT INTO sys_menu VALUES('1506', '测试树表', '5', '1', 'tree', 'demo/tree/index', '', '1', '0', 'C', '0', '0', 'demo:tree:list', '#', 103, 1, now(), NULL, NULL, '测试树表菜单'); @@ -1267,8 +1267,8 @@ create table if not exists test_demo test_key varchar(255), value varchar(255), version int4 default 0, - create_time timestamp, create_dept int8, + create_time timestamp, create_by int8, update_time timestamp, update_by int8, @@ -1300,8 +1300,8 @@ create table if not exists test_tree user_id int8, tree_name varchar(255), version int4 default 0, - create_time timestamp, create_dept int8, + create_time timestamp, create_by int8, update_time timestamp, update_by int8, From c15a27709d7795c2677127e96dcea2917027e0ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 26 Apr 2024 20:25:15 +0800 Subject: [PATCH 16/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=B3=A8=E5=86=8C=20=E5=88=9B=E5=BB=BA=E4=BA=BA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=97=A0=E6=84=8F=E4=B9=89=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/web/service/SysRegisterService.java | 4 +--- .../org/dromara/system/service/impl/SysUserServiceImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java index 14fa0cc27..ddab279bc 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java @@ -1,7 +1,6 @@ package org.dromara.web.service; import cn.dev33.satoken.secure.BCrypt; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.Constants; @@ -61,8 +60,7 @@ public class SysRegisterService { boolean exist = TenantHelper.dynamic(tenantId, () -> { return userMapper.exists(new LambdaQueryWrapper() - .eq(SysUser::getUserName, sysUser.getUserName()) - .ne(ObjectUtil.isNotNull(sysUser.getUserId()), SysUser::getUserId, sysUser.getUserId())); + .eq(SysUser::getUserName, sysUser.getUserName())); }); if (exist) { throw new UserException("user.register.save.error", username); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index a4d553b49..2be074bb3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -316,8 +316,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { */ @Override public boolean registerUser(SysUserBo user, String tenantId) { - user.setCreateBy(user.getUserId()); - user.setUpdateBy(user.getUserId()); + user.setCreateBy(0L); + user.setUpdateBy(0L); SysUser sysUser = MapstructUtils.convert(user, SysUser.class); sysUser.setTenantId(tenantId); return baseMapper.insert(sysUser) > 0; From 64dccb192ca97c6cce06ed9e3e8f360d71126b27 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Fri, 26 Apr 2024 20:50:40 +0800 Subject: [PATCH 17/38] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E9=94=99=E8=AF=AF=E6=95=B0=E6=8D=AE=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ActProcessDefinitionServiceImpl.java | 26 +++++++++--------- script/bpmn/模型.zip | Bin 9880 -> 9767 bytes 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index e7860ce22..bbdc4bfdd 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java @@ -382,12 +382,12 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer if (CollUtil.isEmpty(wfDefinitionConfigs)) { ProcessDefinition processDefinition = QueryUtils.definitionQuery().processDefinitionKey("leave1").latestVersion().singleResult(); if (processDefinition != null) { - WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo(); - wfFormDefinition.setDefinitionId(processDefinition.getId()); - wfFormDefinition.setProcessKey(processDefinition.getKey()); - wfFormDefinition.setTableName("test_leave"); - wfFormDefinition.setVersion(processDefinition.getVersion()); - iWfDefinitionConfigService.saveOrUpdate(wfFormDefinition); + WfDefinitionConfigBo wfDefinitionConfigBo = new WfDefinitionConfigBo(); + wfDefinitionConfigBo.setDefinitionId(processDefinition.getId()); + wfDefinitionConfigBo.setProcessKey(processDefinition.getKey()); + wfDefinitionConfigBo.setTableName("test_leave"); + wfDefinitionConfigBo.setVersion(processDefinition.getVersion()); + iWfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); } } @@ -405,13 +405,13 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer WfDefinitionConfigVo definitionVo = iWfDefinitionConfigService.getByDefId(oldProcessDefinition.getId()); if (definitionVo != null) { iWfDefinitionConfigService.deleteByDefIds(Collections.singletonList(oldProcessDefinition.getId())); - WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo(); - wfFormDefinition.setDefinitionId(definition.getId()); - wfFormDefinition.setProcessKey(definition.getKey()); - wfFormDefinition.setTableName(definitionVo.getTableName()); - wfFormDefinition.setVersion(definition.getVersion()); - wfFormDefinition.setRemark(definitionVo.getRemark()); - iWfDefinitionConfigService.saveOrUpdate(wfFormDefinition); + WfDefinitionConfigBo wfDefinitionConfigBo = new WfDefinitionConfigBo(); + wfDefinitionConfigBo.setDefinitionId(definition.getId()); + wfDefinitionConfigBo.setProcessKey(definition.getKey()); + wfDefinitionConfigBo.setTableName(definitionVo.getTableName()); + wfDefinitionConfigBo.setVersion(definition.getVersion()); + wfDefinitionConfigBo.setRemark(definitionVo.getRemark()); + iWfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); } } //更新流程节点配置表单 diff --git a/script/bpmn/模型.zip b/script/bpmn/模型.zip index 6b8090a35100ddb6813e7f913385030932349e28..d886e0f52cbc73b567e207d955e0cbeb308d0091 100644 GIT binary patch literal 9767 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 J#8Ccz_g_&hC)WS~ literal 9880 zcmb7~Wl$Ya)~<1P4(@IT_n^VuHMqOGOK`W~4k5U^y9Br3?!h%UAE~VO7&!Kp2EU@)||v1MUmaJR7@&>Xd05d*9}(ZQSSA>~8n%xI6E-jhQ8ae0NKn&jWv` zE+!v{8M)StcM7#75pFuAmYs=DK$i}u(vXMqeLCd{I+W$^2uPN4sdZSAQB*4Uuzz^b z!WWW#JA7NPcx5Be0mVA$wz@*O>L>OR7jG1~cJ~WjF2`(SmH3yY*}4ljg;c=T*ze24 zsZezMNCeGj5F3&oR*sE(BOxf6KQp6teO!O_7FQpqo1e8YDso_bJKzY z5DQ@Fi`$#XBz3NUE!5+HPfm+T6hy&CBX6Bg$3N$hiQc?jd@lF9kOg#KUXy)&vsy{b z>J<#UnL>RtAHT&81%QJ_JKS#V&D+_9aXZ2!xC4l7PWePrAG@XJwmb^TjH?_pC}O48 z$x#vXG^WXAuhR(HoH%uF=dZu;TV~G~F9^H^Fuh&Bb^xanc>0KMI{nK4S|`f{`su9} z^~*N%)_4`kmFZ$J6QbXLl^)hEJkzRlRDAZ(t_Tb)GVZB^IHhlPl{%(2jsHq5A%y1( z848SbH<(?RZ~d}71%Zv;iu*YQgl#*w0T+Nq{y8yFfi?sTj@6Pw5hj`mbe1JpHTY}J zV>foG9GPCTWjh9!a>lnzcMOa0fd=aae67)bmxr}+Mn9}16VZ5{E0RYzKtQ(%!ix(h zU#bwYNjP;VuP5~w3*USe3pYE$#x6#GsSFS*GZGbilv2+!3DN{yC)dH2@-b+}<@$7B zyb4RbYC}iw)%oS_>1mJN$cWW$)}DnZ$EF8wgkn)7iQtuzG|IZrwx};Tqk7Hf_R;>rZ$j1Z^jFNYpV>)6_^VVQL6wJ z3ADmo?=}o+{bl=ow|z z-Os90QespfuMT_uzd+%}>p8yk{dH9=Sr!%<*?72SQXp+{_U-+1?`X zwEKEoSm7&=JnZ$WdoUE8_cM}0JR83&D{VMP8>{XYk+b9y9H-n- z6vyFSEtL8oR8PS5S+NBoH+|X1&L7+ig03l=R&1X^$v-R~SU!(1j_W|{MR2ZQv!LJ}NZ=;0MuGNhNg?ai2+ zZS%qus2uYIvnKn7g*g$qI;rf(hMh7Db{t@DGzk&5z!F9HMKs7VvGpv&L6Pjs9V(Qj z*t+Qsc>TE*tS`)AWi%T1NKjkV&G%1#$fy>hKgDHplaMq?8omiFLe4n1?ug}-t?wR&eZS&Mu5=r!S$ya-LokVJlIYsl1Fc! z_fMsI5ocCVwFNdaE7X&|Q9Yc~uJsOOjQCsqh@A_k=B-s~N9gWG*_EHSPpxZBo_xwp z6@dhXp#tT#qfN(kQ){waoQS2GFf&5Hd*_~IcuL}Iaqfsxl=d*4dy35OABr0GR_5Cq z)I4tV(eL;;Qx0P78mnG`7CRrx8+b!|#StdbalH*OKXtPQD>^dcLo*o%6O(F)e&c;3 z_yCH~T3@%S{0$gUsH__Ip}`Snc^)h_8VR)J(@GU%p_~8H z9`4BpWe5c$%M-7n8S2|ldyaG2K$5^II5FMnjpy*CTqisM8_SH$*34}M^vdPY%zV7> zz{M}cqnS$U!Vc4yq925yMhdaXhGMhgLg^}~Bs~VQ)L6QRxKPKUA86TC(F)2JAI8&; z6|XMz_s8Ioz1eBpns&uKdnm{Kr?3SK#Od9#G82uf5zjV7cWW$ol@KFkNnN{Y(sF6( zcBhvl*q3$?Nd3fS%_@Qz<9Qq=3>4Z+U2F>{WO>|dQ-huKMIp;H$aH#8su448!r>&>wT>K491PTU>nGLN zxnx!z<8scS)>O=LVW*Ut(T7mIhW?!BHJ0IXi}RF?&|B7W95k7-)25_Zc(ki88vwa) zMv1*kC)SjP8wv&vjdmg$%lpDCSv~VDqpuVVGn2d1Jzc*sVv3cDa|8|o5{UGlFhcvU z7};%4Kd9(DZ~s5i$NmRE#x-Q^RyeRb57c3LE2H^=?*M7jI0nG%8xPDNw&B$G56h5G zqgwDRG39oY6MWF;IjLWfTQR||Hqf)F)=OmTxMhqY74_*)I57cT&XDXNn!Ik`9mP6Z z<3sc|0VNBxUsR8_(NWbu)W-_e)qA<0{>)=@d!}D@&?^ie{T>z8%PTaa{w-;uHN8=r zp~+#>W@mVI7~#WmN2u3RdI?_ZIvc&sdEeHA1P1?_av+@VD3lwk%i0wG8Xf_cGPXYt zH8~&%DM>d`6Q$LBHmFbMXedhi+p-PU826fdB1z^$e_9jj4;bjdluy?FKKK^ebX(4c zI~1w+OfE@yyjmxe^vCW1kW%sVg`f994Ev=}t8L060 ztOrM;wy8K!hDjp5*Lz-OGbDF8zA>a9o1oxq9R9XJIRv-$&RRk9wap_Fncat|#6!H} zPe`KhB9nuU7FLFM;w($^Ze7gXSd6;G5xXmV{fZZ$ygQ53j;$d!oYrM)M~ALMmQ8rA zHYSHCJa;{`tb;H#T8XMJHBg` zr3~rBb-NVuV)?y1K899_B09l=3dLawnO>|PIAk)?-p27R9Bs)?V3KrJLf66X^NY5P ztPvXUwh2I@+EYiN7z`Lt#o^n>Q-k^HeVxYN_pjwS5DvX!zyK#;{4B>W3Eum@A?Nk zF^noe&{A8?UuB6MvO9T)$g38limd=-@~e5_6>QRUd> z*RHu|6ykY^57~$kgG#AriGmU+4FF-SJoH-62wZXP!;uOh4{V1-&9@PSTXxKKj46s% z{2NlrfHtZe=1vrFA4UeT3HQb*&3{D2rzfd?H z)mL#WPSS|1Cq-<0nh=1tg`k|8c8ro<^b>E79Oba>dSia7a^KKnbXPSGVF#Su}L3@pRy*8?KR z*9v1KX6!7(7VWA?gD0B4=eKL7C>*A4C*WnBByfIeL7Gu|qZ=kz_)KSXLfhXPmmxfy z5A0cr>hMZ(%M&qT^_{7=CrL$83JJLMWtzZc+bMEEJ225o>ScgrViLu#q+Ih1Qpj`=P){5A%Zkuk zdfYZUWzi9us;Rx#3-R5A2yHe#&9=<6m(H}MC7fTj3`KG~2vB*aEj}NYA%(zOL(G;d z=dlP^yL^PvZIN6(De+e-2}ts)1K3up8D;W^&m*?I`8RHhepF&<7#<1>x4ZnhkVp!E z5R_Ky@0l0G7WYAUp`Me^{v2sm zSg5E+ePv~o+9v_u)T>0!`>OIZoCGQ)#Spm3txIgEhx)ZO{-U=DUf*grF!G+#^>oU2q%{9pjMe3zZ?%Cu;iG zo1yon!T)%6YZt4ACBLr2r~CTwl%eOV@p5bZFh1(0zF}lj7;A_j@?f-+ho@anl?b&shLZJhq1(ojPC=^OZ5OumI|E-lRmJc_sa zFovc5Y6Xg+9L`7}w)sBL{e$oV{Ge2-_#Ge*)w8bKU$5I?J(j%Dy=_>l+%*Pp|#uh;)ZUSR89?j_e);=cBsTV{w`%1Ow^e;GV%ofHEK^jzIH9?aA4| z*G27^o)~i9+4a+Lg`*VO+*t6mX_Br$ySC12v*)7?Mvl#*KXF3&v>`Z$@){4J-3S!W zw6att0YpcaK8K$HLIPQM#gSw+A!2T3Ee-nT>^-)K6ikz>kt3|5h4$Ej42xd`Dcizy z)2tDQ*~j!z{3r4b$2)jRsdKnC2==@1l*Z~w!{L)B&s-iP=VA_i!!fr;{u^!}y2o4~J>e$#%eB83DXZ#{Q>jii>xk?m7hh}%Wq$pX zJxhX#sHRxs#79~JKIvoZs7Ik5cj#>DFmk6T=vb=qlyr7!C zDXHPLZAtz3E9W(?kc<*!i_uRVd|FLlJ`u=c<)ID(##xeL&y@vjOsIo&q|0H!<}Wgj zIsKP7@V_Wqb3S#K8QeurERFaGz8G>wft^FBp7%TB&o}d(u3wo}hI{_(B<57)FJKUb zIy_(HD3H`M&$na?Xk-r`wqq{H0d>ob%}w;BWv@itiO9rG*_&%F+>MUpJ#JxKM4Vs$ z|m;P=vsQCAAE)s{Q^6k^pcers7zMUe1y zdZ@;>EMvqXYACKme9x#1CpM3k!&XNvltZ*;x(uOQP>rDaGr3nFvpD|9A~cXnq~DTJ zSD=`Vl05v66nda%z=&l7;JU-L+tM|Z9#LmiMi`M*dA`jAQLy zk@qd@2-bfh^uKY$skhAcM7##UIhnUrTjI zYzbdan<*~v7@n=bqC`oITf9#Y6hdm*OW=d>h9TJm?oNsrGc(bMCxHb%1=vvFAl4PJk!2IFy8g8t!pl zNEb_!)retIqk#{d?Svl`BUGeM^NT1eo2Iq2#8QVdX*SmDB>?}aJ_Q2n8I%32sI0We z+w+6Fb##xgTa7&R6+MbBmhxoNWhd4hA)J7zvDTh#hwj8t-wg}CG5_@V5SPMl+mtd! zY5rJjUupO)9uGJb3|~^PxY;CX+gnQ;3zi#-V|I6%If5pd2Y!R#Ay_mV7$^-o&V~Ra z4uYl4!IxB`(v(is*#S%cOe4(?Kl|m)=Vj>ef%EP8_4)B?ex(d+LBOZ!^=_d_ow0@J z+L$)DUI04B(X5jf-g-*J|8^ehSWlN?e~ctmkxC!=c=z2l=hVo2(0=epwGxD?{GTClEUF%t!38AafEbKdyAs3F0ZIm?opJD<(?VyOb;pAm#|zHQtF&TmLaEUix3epP$M@?Jr{^Cgee0^ zey=BuAAC|SoMLLMTU^_5E!0nUuraSF=dg^{-eTWF{crkU#uv%8D(dQNG>4;ix# z{W5O8oWPFxW`wh8?3xVD{L5IQ{j>uFtMMT&%IxB9)x&`Mnxhix*mEg`<({Z<}7BmNk5fLFmr@H;6=?tA$1!h|37182Q`3-F6GK#Tg2x$qYffU+!V9Us4En~<@#F20`B(hncPaC&q@s{2OPx7 z76gGqSlmKF;gWUZaSU`@r9d1Qa{5g4N~m}Om@$ZD1SNrQW0N1T7=ML_zS*-Wt%EX1 z+*d{<2wR3eUAna-7U-S0;`?#wH)-o0PkY}Dak zn69XUq0WYHDH6(tO9ULv1}|X-V@@D7>79*|O?X-SZ7I0xN}VX-hA*H|2yl$B-9unm z8F1LL&(oP;>^}~i#SqsY)#>k;h)tym$pY~4i^yJYN9{&KH#%Q$w|+j4tc(tgo)gjg zz53h^)$J9e*fDmItuGQSd>4OGJ|sp9dP_(2Rc!gq>Dp^xa$tEm!@?b zx2I$%w%tMZuLrSR8JwmZu6O9vQyzbYt(+R`-k6XB$-I|jblMg_{Sux7uh^`LN3)9tLnko=4QXT@#$oZ;+aCl^X>d0E%q-B zz@mr*g|D0S06Hs0>3K}S+pO;i;)s*sla2d#mn9*9CIGzRoRY)7hPQU+Gx5ixug@zj<7c~cb9~?nv;%& zN#jaGcGtFn9Cnkhx$4jBs}GuWI1b@)0P@bbiHHugp(0Ddb^Dn$28R$R4j6I;-RXzr zZzz2ifIREw3MtrCHn!4>SSDsE`0-6k7{Yk`V^=V;b0!$d!VqNqE`LbB+#Pxpe~#f0bFX zio}fYAM;8rl>u%bDjZl&4KyhrIy?_>{y&#_pj+(__0N8$L8rB(7NKlYW4DFM%ZUVa z$jKv`RPZgFq&k|OvV;lincv%0GVlrPaG%dVbwPF~TC`k2AHY!<4?cD&-Rk zHD=g8L>mxSVmt|N&#HVAZj+g`oi&-1Hnd})Q(?b$U8=@LI!XSY|V-+Z6RHM9?WH%tlaKl!flR~P%=@O?if zVYe;$FTS(<$#)GcyPbEwpI21_`<0tIDdmI`Fr+`#=hM@<#=A#S-m#_qsL`1uxA-X0 z28KB$wc5Xzh4t8oOczv7zddQK^;qv0aJjf6?QI2K>K=LO^w4QH!R?fEwpLI=Kb998 ze|#fiB8&-nm|7W}=^+1nG5sSe*}bXjN5dweBTAl_MlK=JSva~-dki@}W+bB9hjsgx znjk)Nsb7RACsL*5!;Zr9U$cHeXRH_=&T{us?=(%NX3&mC+)Pj02|Iy(+eC6?0*!%f zSs2dvfZ1x>+v9U49u2HpwPBLr?m(v!w%tZIUKgwk!eP3jhJ>m-eMFn3bzZJpgT!89 za@}RrXzY&GQo9@mY0WV=owuTdgSa=6aP0vYBBwI#Bz)X?sDx!Mf~LJ&fXKt+gAXgJ zAxRZh1>oZrQN6xA$6izE={~>iUhOU&*HtleK5We&O{Vzy`n?WBE|}@D+WnND{7#kO zbcli($amI?sp6h`T{m>l#TPkN@|lOsC?#3lFR~Z+d#D&ZaTnb{RbRCd8mA{~-;^K3 z1*r6OqvRBR{7&8sA&tbw!3cw&_eX;+&j%#{*YQO5vHZs8Aq2dSrsB*9<5OCvjn?(I zYSM{_d>=#2FXgWfw-*M0fCfG)vQ)F4k4`n4TTzWz2$|Ti&X|hbXJedO(DsaFM(&L# zF4;{gG_fa5-m9rYSDC)Px3hZrg7QRT)@Xa`{Awy)(^8U9OkzgRO2`!PP=u(55Ke}( zAf1DB zZCqnY+NKWSh2MdZe3dl`ha`;&r2C=GmN)KT0K)?vg+x;B>!Wee_phzyFwQ78nR+RImT+-|v*vA(N(C0z^0ST|xP4SG=g=N+PUy!sU)gm7hOq36kiLvrzUv9uXeHx3OJ~;H?;0X;I23SFH)^;0LQC7r- zJy<(Am=|u*d8AC{7<6l!Gt=c7c&Q5hhr@n-)t{?QW-+3_+Oms(*2f%0mq6XN3u30- zh(y0;3bJL#T{ITq!CIJF_|knu{DH>be$&i1Uu0AUQsns!0Av<&T9psuc;P z%PW*<(PgDGpK#4FMCJx7&_}fKJTM1-*?RRJAZ}(5~IF$!-`WM)IErkNGi$*6l4x51o$%MpI2k-Uzm7 zo=2n1^~vpf0CqcpOAA`H0X1iB8M=SUdKVV)YRh+sFpgSJ(78MIaGiy-Mu@N(N=dF%C@V+m6b~A!C#uBAcL%|G$BQ#Pfy_$)M>_hztf=-U#FiIY_(?SIXqeE z(A>)F`<)W~1}6oAmDtL=7z+S?gA)`C0P>FmK!0|ce;)w)=kfn_9O&=pKf6!Asr-*o z^G@-X?&ANpB;=l)s8_~%*ozIW07n)QFJF8`hW=N{#s zXKnocaQ;gF50#O>bN^f$|9RH?@2llsxqJU@zw>AM@AdW17wDhU2MPZr{lBiZ3eu2J Tzn>QL`|mRt2*?}R@4Np2?onS< From 17bf0c06236c2956ad9b6fe2b89524de7a0c608c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 27 Apr 2024 16:15:06 +0800 Subject: [PATCH 18/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E8=A1=A8=E5=AF=BC=E5=85=A5=20?= =?UTF-8?q?=E6=8E=92=E9=99=A4=E5=B7=A5=E4=BD=9C=E6=B5=81=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/generator/GenTableMapper.xml | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index b1745891d..bd2c9e84b 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -20,6 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from information_schema.tables where table_schema = (select database()) AND table_name NOT LIKE 'pj_%' AND table_name NOT LIKE 'gen_%' + AND table_name NOT LIKE 'act_%' AND table_name NOT LIKE 'flw_%' AND table_name NOT IN @@ -41,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and dt.table_name = uo.object_name and uo.object_type = 'TABLE' AND dt.table_name NOT LIKE 'pj_%' AND dt.table_name NOT LIKE 'GEN_%' + AND dt.table_name NOT LIKE 'act_%' AND dt.table_name NOT LIKE 'flw_%' AND lower(dt.table_name) NOT IN @@ -70,6 +72,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND n.nspname ]]> ''::name ) list_table where table_name NOT LIKE 'pj_%' AND table_name NOT LIKE 'gen_%' + AND table_name NOT LIKE 'act_%' AND table_name NOT LIKE 'flw_%' AND table_name NOT IN @@ -93,6 +96,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" INNER JOIN SYS.EXTENDED_PROPERTIES F ON D.ID = F.MAJOR_ID AND F.MINOR_ID = 0 AND D.XTYPE = 'U' AND D.NAME != 'DTPROPERTIES' AND D.NAME NOT LIKE 'pj_%' AND D.NAME NOT LIKE 'gen_%' + AND D.NAME NOT LIKE 'act_%' AND D.NAME NOT LIKE 'flw_%' AND D.NAME NOT IN @@ -112,7 +116,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select table_name, table_comment, create_time, update_time from information_schema.tables - where table_name NOT LIKE 'pj_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database()) + where table_schema = (select database()) + and table_name NOT LIKE 'pj_%' and table_name NOT LIKE 'gen_%' + and table_name NOT LIKE 'act_%' AND table_name NOT LIKE 'flw_%' and table_name = #{tableName} @@ -179,6 +190,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and dt.table_name = uo.object_name and uo.object_type = 'TABLE' AND dt.table_name NOT LIKE 'pj_%' AND dt.table_name NOT LIKE 'GEN_%' + AND dt.table_name NOT LIKE 'act_%' AND dt.table_name NOT LIKE 'flw_%' AND dt.table_name NOT IN (select table_name from gen_table) and lower(dt.table_name) = #{tableName} @@ -197,6 +209,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND n.nspname ]]> ''::name ) list_table where table_name NOT LIKE 'pj_%' and table_name NOT LIKE 'gen_%' + and table_name NOT LIKE 'act_%' and table_name NOT LIKE 'flw_%' and table_name = #{tableName} @@ -208,6 +221,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" INNER JOIN SYS.EXTENDED_PROPERTIES F ON D.ID = F.MAJOR_ID AND F.MINOR_ID = 0 AND D.XTYPE = 'U' AND D.NAME != 'DTPROPERTIES' AND D.NAME NOT LIKE 'pj_%' AND D.NAME NOT LIKE 'gen_%' + AND D.NAME NOT LIKE 'act_%' AND D.NAME NOT LIKE 'flw_%' AND D.NAME = #{tableName} From d403688a0cc13c13ce725c7fb8217ae2f2091984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 27 Apr 2024 16:41:48 +0800 Subject: [PATCH 19/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20oracle=20?= =?UTF-8?q?=E6=8E=92=E9=99=A4=E8=A1=A8=E5=90=8D=E4=B8=8D=E7=94=9F=E6=95=88?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/generator/GenTableMapper.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index bd2c9e84b..20d54e1d0 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -41,8 +41,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where dt.table_name = dtc.table_name and dt.table_name = uo.object_name and uo.object_type = 'TABLE' - AND dt.table_name NOT LIKE 'pj_%' AND dt.table_name NOT LIKE 'GEN_%' - AND dt.table_name NOT LIKE 'act_%' AND dt.table_name NOT LIKE 'flw_%' + AND dt.table_name NOT LIKE 'PJ_%' AND dt.table_name NOT LIKE 'GEN_%' + AND dt.table_name NOT LIKE 'ACT_%' AND dt.table_name NOT LIKE 'FLW_%' AND lower(dt.table_name) NOT IN @@ -130,8 +130,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where dt.table_name = dtc.table_name and dt.table_name = uo.object_name and uo.object_type = 'TABLE' - and dt.table_name NOT LIKE 'pj_%' AND dt.table_name NOT LIKE 'GEN_%' - and dt.table_name NOT LIKE 'act_%' AND dt.table_name NOT LIKE 'flw_%' + and dt.table_name NOT LIKE 'PJ_%' AND dt.table_name NOT LIKE 'GEN_%' + and dt.table_name NOT LIKE 'ACT_%' AND dt.table_name NOT LIKE 'FLW_%' and lower(dt.table_name) in #{name} @@ -189,8 +189,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where dt.table_name = dtc.table_name and dt.table_name = uo.object_name and uo.object_type = 'TABLE' - AND dt.table_name NOT LIKE 'pj_%' AND dt.table_name NOT LIKE 'GEN_%' - AND dt.table_name NOT LIKE 'act_%' AND dt.table_name NOT LIKE 'flw_%' + AND dt.table_name NOT LIKE 'PJ_%' AND dt.table_name NOT LIKE 'GEN_%' + AND dt.table_name NOT LIKE 'ACT_%' AND dt.table_name NOT LIKE 'FLW_%' AND dt.table_name NOT IN (select table_name from gen_table) and lower(dt.table_name) = #{tableName} From 18e3b424d603aed47408081bf66398532b24df12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 28 Apr 2024 12:31:59 +0800 Subject: [PATCH 20/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=85=BC?= =?UTF-8?q?=E5=AE=B9redis5.0=E5=87=BA=E7=8E=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/common/redis/utils/RedisUtils.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java index ce32055bb..3fc3aac02 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java @@ -107,7 +107,11 @@ public class RedisUtils { bucket.setAndKeepTTL(value); } catch (Exception e) { long timeToLive = bucket.remainTimeToLive(); - setCacheObject(key, value, Duration.ofMillis(timeToLive)); + if (timeToLive == -1) { + setCacheObject(key, value); + } else { + setCacheObject(key, value, Duration.ofMillis(timeToLive)); + } } } else { bucket.set(value); From 31cd1258f86762324072490cc8010333630aa8df Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Mon, 29 Apr 2024 17:59:26 +0800 Subject: [PATCH 21/38] =?UTF-8?q?fix=20=E7=AB=99=E7=82=B9=E5=A1=AB?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E3=80=82=E9=9C=80=E8=A6=81=E5=90=AF=E7=94=A8?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E6=A0=B7=E5=BC=8F=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/common/oss/core/OssClient.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index eb1656c06..b8f84f8bf 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -83,6 +83,9 @@ public class OssClient { StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( AwsBasicCredentials.create(properties.getAccessKey(), properties.getSecretKey())); + //MinIO 使用 HTTPS 限制使用域名访问,站点填域名。需要启用路径样式访问 + boolean pathStyle = !StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE); + //创建AWS基于 CRT 的 S3 客户端 this.client = S3AsyncClient.crtBuilder() .credentialsProvider(credentialsProvider) @@ -91,15 +94,15 @@ public class OssClient { .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(10 * 1025 * 1024L) .checksumValidationEnabled(false) + .forcePathStyle(pathStyle) .build(); //AWS基于 CRT 的 S3 AsyncClient 实例用作 S3 传输管理器的底层客户端 this.transferManager = S3TransferManager.builder().s3Client(this.client).build(); - // 检查是否连接到 MinIO,MinIO 使用 HTTPS 限制使用域名访问,需要启用路径样式访问 + // 检查是否连接到 MinIO S3Configuration config = S3Configuration.builder().chunkedEncodingEnabled(false) - // minio 使用https限制使用域名访问 需要此配置 站点填域名 - .pathStyleAccessEnabled(!StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE)).build(); + .pathStyleAccessEnabled(pathStyle).build(); // 创建 预签名 URL 的生成器 实例,用于生成 S3 预签名 URL this.presigner = S3Presigner.builder() From 155aa3ba5ca5933fae9fa260c9abb85034b0f31b Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Mon, 29 Apr 2024 18:06:25 +0800 Subject: [PATCH 22/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=90=AF=E7=94=A8=E8=B7=AF=E5=BE=84=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/common/oss/core/OssClient.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index b8f84f8bf..5533297ac 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -84,7 +84,7 @@ public class OssClient { AwsBasicCredentials.create(properties.getAccessKey(), properties.getSecretKey())); //MinIO 使用 HTTPS 限制使用域名访问,站点填域名。需要启用路径样式访问 - boolean pathStyle = !StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE); + boolean isStyle = !StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE); //创建AWS基于 CRT 的 S3 客户端 this.client = S3AsyncClient.crtBuilder() @@ -94,15 +94,15 @@ public class OssClient { .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(10 * 1025 * 1024L) .checksumValidationEnabled(false) - .forcePathStyle(pathStyle) + .forcePathStyle(isStyle) .build(); //AWS基于 CRT 的 S3 AsyncClient 实例用作 S3 传输管理器的底层客户端 this.transferManager = S3TransferManager.builder().s3Client(this.client).build(); - // 检查是否连接到 MinIO + // 创建 S3 配置对象 S3Configuration config = S3Configuration.builder().chunkedEncodingEnabled(false) - .pathStyleAccessEnabled(pathStyle).build(); + .pathStyleAccessEnabled(isStyle).build(); // 创建 预签名 URL 的生成器 实例,用于生成 S3 预签名 URL this.presigner = S3Presigner.builder() From 9e5f7be1c5142b1cdafc7e7c79d88d8538265d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 30 Apr 2024 15:52:12 +0800 Subject: [PATCH 23/38] =?UTF-8?q?update=20=E5=A2=9E=E5=8A=A0=20job=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95demo=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/sql/easy_retry.sql | 2 ++ script/sql/oracle/easy_retry_oracle.sql | 5 ++++- script/sql/postgres/easy_retry_postgre.sql | 2 ++ script/sql/sqlserver/easy_retry_sqlserver.sql | 2 ++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/script/sql/easy_retry.sql b/script/sql/easy_retry.sql index c884c880a..6008a7c1a 100644 --- a/script/sql/easy_retry.sql +++ b/script/sql/easy_retry.sql @@ -310,6 +310,8 @@ CREATE TABLE `er_job` AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='任务信息'; +INSERT INTO `er_job` VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', now(), now(), 0); + CREATE TABLE `er_job_log_message` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', diff --git a/script/sql/oracle/easy_retry_oracle.sql b/script/sql/oracle/easy_retry_oracle.sql index 4c8c062af..78ef6ca79 100644 --- a/script/sql/oracle/easy_retry_oracle.sql +++ b/script/sql/oracle/easy_retry_oracle.sql @@ -474,8 +474,11 @@ COMMENT ON COLUMN er_job.resident IS '是否是常驻任务'; COMMENT ON COLUMN er_job.description IS '描述'; COMMENT ON COLUMN er_job.ext_attrs IS '扩展字段'; COMMENT ON COLUMN er_job.create_dt IS '创建时间'; -COMMENT ON COLUMN er_job.deleted IS '逻辑删除 1、删除'; COMMENT ON COLUMN er_job.update_dt IS '更新时间'; +COMMENT ON COLUMN er_job.deleted IS '逻辑删除 1、删除'; + +INSERT INTO er_job (namespace_id, group_name, job_name, args_str, args_type, next_trigger_at, job_status, task_type, route_key, executor_type, executor_info, trigger_type, trigger_interval, block_strategy,executor_timeout, max_retry_times, parallel_num, retry_interval, bucket_index, resident, description, ext_attrs, create_dt, update_dt, deleted) +VALUES ('dev', 'ruoyi_group', 'demo-job', NULL, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', SYSDATE, SYSDATE, 0); -- er_job_log_message CREATE TABLE er_job_log_message diff --git a/script/sql/postgres/easy_retry_postgre.sql b/script/sql/postgres/easy_retry_postgre.sql index 62801e941..58cd8acb6 100644 --- a/script/sql/postgres/easy_retry_postgre.sql +++ b/script/sql/postgres/easy_retry_postgre.sql @@ -463,6 +463,8 @@ COMMENT ON COLUMN er_job.deleted IS '逻辑删除 1、删除'; COMMENT ON COLUMN er_job.update_dt IS '更新时间'; COMMENT ON TABLE er_job IS '任务信息'; +INSERT INTO er_job VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', now(), now(), 0); + CREATE TABLE er_job_log_message ( id BIGSERIAL PRIMARY KEY, diff --git a/script/sql/sqlserver/easy_retry_sqlserver.sql b/script/sql/sqlserver/easy_retry_sqlserver.sql index da22b5f56..db6ad4f4c 100644 --- a/script/sql/sqlserver/easy_retry_sqlserver.sql +++ b/script/sql/sqlserver/easy_retry_sqlserver.sql @@ -418,6 +418,8 @@ EXEC sp_addextendedproperty 'TABLE', N'er_job' GO +INSERT INTO `er_job` VALUES (1, N'dev', N'ruoyi_group', N'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, N'testJobExecutor', 2, N'60', 1, 60, 3, 1, 1, 116, 0, N'', N'', getdate(), getdate(), 0); +GO -- er_job_log_message CREATE TABLE er_job_log_message From 659db611ea987ff89dded4a8c0099e88e0f3ac76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 30 Apr 2024 16:25:26 +0800 Subject: [PATCH 24/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=9D=99=E6=80=81=E8=B5=84=E6=BA=90=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E6=89=80=E6=9C=89=E8=AF=B7=E6=B1=82=E9=83=BD?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=AE=BF=E9=97=AE=E9=9D=99=E6=80=81=E8=B5=84?= =?UTF-8?q?=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index ad50248bc..be3ad2f3c 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -80,6 +80,8 @@ spring: # 设置总上传的文件大小 max-request-size: 20MB mvc: + # 设置静态资源路径 防止所有请求都去查静态资源 + static-path-pattern: /static/** format: date-time: yyyy-MM-dd HH:mm:ss jackson: From 2782c369c9317c916b4b63ea9589c8588ce7ed7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 30 Apr 2024 16:25:51 +0800 Subject: [PATCH 25/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=B8=B8?= =?UTF-8?q?=E8=A7=84web=E5=BC=82=E5=B8=B8=E7=8A=B6=E6=80=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/handler/GlobalExceptionHandler.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/handler/GlobalExceptionHandler.java b/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/handler/GlobalExceptionHandler.java index a4dcfe3fa..f2e573f9e 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/handler/GlobalExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/handler/GlobalExceptionHandler.java @@ -21,6 +21,7 @@ import org.springframework.web.bind.MissingPathVariableException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; +import org.springframework.web.servlet.NoHandlerFoundException; /** * 全局异常处理器 @@ -69,7 +70,7 @@ public class GlobalExceptionHandler { HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); - return R.fail(e.getMessage()); + return R.fail(HttpStatus.HTTP_BAD_METHOD, e.getMessage()); } /** @@ -111,6 +112,16 @@ public class GlobalExceptionHandler { return R.fail(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), e.getValue())); } + /** + * 找不到路由 + */ + @ExceptionHandler(NoHandlerFoundException.class) + public R handleNoHandlerFoundException(NoHandlerFoundException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}'不存在.", requestURI); + return R.fail(HttpStatus.HTTP_NOT_FOUND, e.getMessage()); + } + /** * 拦截未知的运行时异常 */ From f7f2c1730d5b3c8aa1f20dae033c26e34a540fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 30 Apr 2024 16:43:26 +0800 Subject: [PATCH 26/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=8B=86?= =?UTF-8?q?=E5=88=86=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/satoken/config/SaTokenConfig.java | 9 ++++ .../handler/SaTokenExceptionHandler.java | 52 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../common/web/config/ResourcesConfig.java | 9 ++++ .../web}/handler/GlobalExceptionHandler.java | 35 +------------ 5 files changed, 71 insertions(+), 35 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java rename ruoyi-common/{ruoyi-common-security/src/main/java/org/dromara/common/security => ruoyi-common-web/src/main/java/org/dromara/common/web}/handler/GlobalExceptionHandler.java (78%) diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java index ce8d85c0b..61c6b9acc 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java @@ -7,6 +7,7 @@ import cn.dev33.satoken.stp.StpLogic; import org.dromara.common.core.factory.YmlPropertySourceFactory; import org.dromara.common.satoken.core.dao.PlusSaTokenDao; import org.dromara.common.satoken.core.service.SaPermissionImpl; +import org.dromara.common.satoken.handler.SaTokenExceptionHandler; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; @@ -42,4 +43,12 @@ public class SaTokenConfig { return new PlusSaTokenDao(); } + /** + * 异常处理器 + */ + @Bean + public SaTokenExceptionHandler saTokenExceptionHandler() { + return new SaTokenExceptionHandler(); + } + } diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java new file mode 100644 index 000000000..a45af89d3 --- /dev/null +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java @@ -0,0 +1,52 @@ +package org.dromara.common.satoken.handler; + +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.exception.NotPermissionException; +import cn.dev33.satoken.exception.NotRoleException; +import cn.hutool.http.HttpStatus; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * SaToken异常处理器 + * + * @author Lion Li + */ +@Slf4j +@RestControllerAdvice +public class SaTokenExceptionHandler { + + /** + * 权限码异常 + */ + @ExceptionHandler(NotPermissionException.class) + public R handleNotPermissionException(NotPermissionException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage()); + return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权"); + } + + /** + * 角色权限异常 + */ + @ExceptionHandler(NotRoleException.class) + public R handleNotRoleException(NotRoleException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage()); + return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权"); + } + + /** + * 认证失败 + */ + @ExceptionHandler(NotLoginException.class) + public R handleNotLoginException(NotLoginException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage()); + return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源"); + } + +} diff --git a/ruoyi-common/ruoyi-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index f78c78171..6def72408 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,3 +1,2 @@ -org.dromara.common.security.handler.GlobalExceptionHandler org.dromara.common.security.handler.AllUrlHandler org.dromara.common.security.config.SecurityConfig diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java index 1b78ebcb8..1371913be 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java @@ -1,5 +1,6 @@ package org.dromara.common.web.config; +import org.dromara.common.web.handler.GlobalExceptionHandler; import org.dromara.common.web.interceptor.PlusWebInvokeTimeInterceptor; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; @@ -49,4 +50,12 @@ public class ResourcesConfig implements WebMvcConfigurer { // 返回新的CorsFilter return new CorsFilter(source); } + + /** + * 全局异常处理器 + */ + @Bean + public GlobalExceptionHandler globalExceptionHandler() { + return new GlobalExceptionHandler(); + } } diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/handler/GlobalExceptionHandler.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java similarity index 78% rename from ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/handler/GlobalExceptionHandler.java rename to ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java index f2e573f9e..bd47c189d 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/handler/GlobalExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java @@ -1,8 +1,5 @@ -package org.dromara.common.security.handler; +package org.dromara.common.web.handler; -import cn.dev33.satoken.exception.NotLoginException; -import cn.dev33.satoken.exception.NotPermissionException; -import cn.dev33.satoken.exception.NotRoleException; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; import jakarta.servlet.http.HttpServletRequest; @@ -32,36 +29,6 @@ import org.springframework.web.servlet.NoHandlerFoundException; @RestControllerAdvice public class GlobalExceptionHandler { - /** - * 权限码异常 - */ - @ExceptionHandler(NotPermissionException.class) - public R handleNotPermissionException(NotPermissionException e, HttpServletRequest request) { - String requestURI = request.getRequestURI(); - log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage()); - return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权"); - } - - /** - * 角色权限异常 - */ - @ExceptionHandler(NotRoleException.class) - public R handleNotRoleException(NotRoleException e, HttpServletRequest request) { - String requestURI = request.getRequestURI(); - log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage()); - return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权"); - } - - /** - * 认证失败 - */ - @ExceptionHandler(NotLoginException.class) - public R handleNotLoginException(NotLoginException e, HttpServletRequest request) { - String requestURI = request.getRequestURI(); - log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage()); - return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源"); - } - /** * 请求方式不支持 */ From 31d445c6a14edfe4f74cd60dcb6f8d84a50aaca1 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Mon, 6 May 2024 22:18:14 +0800 Subject: [PATCH 27/38] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E7=94=A8?= =?UTF-8?q?=E6=88=B7id=E7=BF=BB=E8=AF=91=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E8=AE=B0=E5=BD=95=E5=BE=85=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E5=80=99=E9=80=89=E4=BA=BA=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/service/UserService.java | 10 ++++++- .../core/impl/NicknameTranslationImpl.java | 4 ++- .../service/impl/SysUserServiceImpl.java | 26 ++++++++++++++++--- .../workflow/domain/vo/ActHistoryInfoVo.java | 2 +- .../impl/ActProcessInstanceServiceImpl.java | 24 ++++++++++------- 5 files changed, 49 insertions(+), 17 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java index f8f155a7b..f8c719319 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java @@ -19,10 +19,18 @@ public interface UserService { * 通过用户ID查询用户账户 * * @param userId 用户ID - * @return 用户账户 + * @return 用户名称 */ String selectNicknameById(Long userId); + /** + * 通过用户ID查询用户账户 + * + * @param userIds 用户ID 多个用逗号隔开 + * @return 用户名称 + */ + String selectNicknameByIds(String userIds); + /** * 通过用户ID查询用户手机号 * diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/NicknameTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/NicknameTranslationImpl.java index ac65f5afc..b92c7f0f5 100644 --- a/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/NicknameTranslationImpl.java +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/NicknameTranslationImpl.java @@ -20,7 +20,9 @@ public class NicknameTranslationImpl implements TranslationInterface { @Override public String translation(Object key, String other) { if (key instanceof Long id) { - return userService.selectNicknameById(id); + return userService.selectNicknameByIds(id.toString()); + } else if (key instanceof String ids) { + return userService.selectNicknameByIds(ids); } return null; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 2be074bb3..ad73de41b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.system.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -16,6 +17,7 @@ import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -27,16 +29,14 @@ import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUserPost; import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.bo.SysUserBo; -import org.dromara.system.domain.vo.SysPostVo; -import org.dromara.system.domain.vo.SysRoleVo; -import org.dromara.system.domain.vo.SysUserExportVo; -import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.domain.vo.*; import org.dromara.system.mapper.*; import org.dromara.system.service.ISysUserService; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -579,6 +579,24 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return ObjectUtil.isNull(sysUser) ? null : sysUser.getNickName(); } + /** + * 通过用户ID查询用户账户 + * + * @param userIds 用户ID 多个用逗号隔开 + * @return 用户账户 + */ + @Override + public String selectNicknameByIds(String userIds) { + List list = new ArrayList<>(); + for (Long id : StringUtils.splitTo(userIds, Convert::toLong)) { + String nickname = SpringUtils.getAopProxy(this).selectNicknameById(id); + if (StringUtils.isNotBlank(nickname)) { + list.add(nickname); + } + } + return String.join(StringUtils.SEPARATOR, list); + } + /** * 通过用户ID查询用户手机号 * diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java index 459b2d0f6..31b972262 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java @@ -59,7 +59,7 @@ public class ActHistoryInfoVo implements Serializable { /** * 办理人id */ - private Long assignee; + private String assignee; /** * 办理人名称 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index a0da21dcf..39fc8fc30 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; @@ -300,7 +301,6 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService for (HistoricTaskInstance historicTaskInstance : list) { ActHistoryInfoVo actHistoryInfoVo = new ActHistoryInfoVo(); BeanUtils.copyProperties(historicTaskInstance, actHistoryInfoVo); - actHistoryInfoVo.setAssignee(StringUtils.isNotBlank(historicTaskInstance.getAssignee()) ? Long.valueOf(historicTaskInstance.getAssignee()) : null); actHistoryInfoVo.setStatus(actHistoryInfoVo.getEndTime() == null ? "待处理" : "已处理"); if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) { actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis())); @@ -318,6 +318,12 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService historyInfoVo.setStartTime(e.getStartTime()); historyInfoVo.setEndTime(null); historyInfoVo.setRunDuration(null); + if (ObjectUtil.isEmpty(e.getAssignee())) { + ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(e.getId()); + if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { + historyInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); + } + } }); historyInfoVoList.add(historyInfoVo); } @@ -356,11 +362,6 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) { actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis())); } - try { - actHistoryInfoVo.setAssignee(StringUtils.isNotBlank(historicTaskInstance.getAssignee()) ? Long.valueOf(historicTaskInstance.getAssignee()) : null); - } catch (NumberFormatException ignored) { - log.warn("当前任务【{}】,办理人转换人员ID【{}】异常!", historicTaskInstance.getName(), historicTaskInstance.getAssignee()); - } //附件 if (CollUtil.isNotEmpty(attachmentList)) { List attachments = attachmentList.stream().filter(e -> e.getTaskId().equals(historicTaskInstance.getId())).collect(Collectors.toList()); @@ -368,6 +369,13 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService actHistoryInfoVo.setAttachmentList(attachments); } } + //设置人员id + if (ObjectUtil.isEmpty(historicTaskInstance.getAssignee())) { + ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(historicTaskInstance.getId()); + if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { + actHistoryInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); + } + } actHistoryInfoVoList.add(actHistoryInfoVo); } List collect = new ArrayList<>(); @@ -383,10 +391,6 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService Map> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey); for (Map.Entry> entry : groupByKey.entrySet()) { ActHistoryInfoVo actHistoryInfoVo = BeanUtil.toBean(entry.getValue().get(0), ActHistoryInfoVo.class); - String nickName = entry.getValue().stream().filter(e -> StringUtils.isNotBlank(e.getNickName()) && e.getEndTime() == null).map(ActHistoryInfoVo::getNickName).toList().stream().distinct().collect(Collectors.joining(StringUtils.SEPARATOR)); - if (StringUtils.isNotBlank(nickName)) { - actHistoryInfoVo.setNickName(nickName); - } actHistoryInfoVoList.stream().filter(e -> e.getTaskDefinitionKey().equals(entry.getKey()) && e.getEndTime() != null).findFirst() .ifPresent(e -> { actHistoryInfoVo.setStatus("已处理"); From ae0bd608a9e99b461bedbc06b33de1bbc7bcb6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 7 May 2024 18:13:37 +0800 Subject: [PATCH 28/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=A0=E7=94=A8=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/common/mybatis/config/MybatisPlusConfig.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java index 495daf10a..c157b47ec 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java @@ -58,8 +58,6 @@ public class MybatisPlusConfig { */ public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); - // 设置最大单页限制数量,默认 500 条,-1 不受限制 - paginationInnerInterceptor.setMaxLimit(-1L); // 分页合理化 paginationInnerInterceptor.setOverflow(true); return paginationInnerInterceptor; From bebd9e7a540741cfa0af80a70851efc576728d18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 8 May 2024 18:09:05 +0800 Subject: [PATCH 29/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8E=BB?= =?UTF-8?q?=E9=99=A4gc=E6=97=A5=E5=BF=97=E5=8F=82=E6=95=B0(=E6=9C=89?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E8=87=AA=E5=B7=B1=E5=8A=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/Dockerfile | 4 ++-- ruoyi-extend/ruoyi-easyretry-server/Dockerfile | 5 +++-- ruoyi-extend/ruoyi-monitor-admin/Dockerfile | 5 +++-- ruoyi-extend/ruoyi-powerjob-server/Dockerfile | 2 +- script/bin/ry.bat | 2 +- script/bin/ry.sh | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ruoyi-admin/Dockerfile b/ruoyi-admin/Dockerfile index 4237ef94c..609b04a43 100644 --- a/ruoyi-admin/Dockerfile +++ b/ruoyi-admin/Dockerfile @@ -19,6 +19,6 @@ ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_P # 应用名称 如果想区分集群节点监控 改成不同的名称即可 #-Dskywalking.agent.service_name=ruoyi-server \ #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \ - -jar app.jar \ - -XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS} + -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \ + -jar app.jar diff --git a/ruoyi-extend/ruoyi-easyretry-server/Dockerfile b/ruoyi-extend/ruoyi-easyretry-server/Dockerfile index 7ad0a0776..6fe5f0bf5 100644 --- a/ruoyi-extend/ruoyi-easyretry-server/Dockerfile +++ b/ruoyi-extend/ruoyi-easyretry-server/Dockerfile @@ -14,5 +14,6 @@ EXPOSE 1788 ADD ./target/ruoyi-easyretry-server.jar ./app.jar -ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar app.jar \ - -XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS} +ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom \ + -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \ + -jar app.jar diff --git a/ruoyi-extend/ruoyi-monitor-admin/Dockerfile b/ruoyi-extend/ruoyi-monitor-admin/Dockerfile index 7ae068200..a54f81686 100644 --- a/ruoyi-extend/ruoyi-monitor-admin/Dockerfile +++ b/ruoyi-extend/ruoyi-monitor-admin/Dockerfile @@ -13,5 +13,6 @@ EXPOSE 9090 ADD ./target/ruoyi-monitor-admin.jar ./app.jar -ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar app.jar \ - -XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS} +ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom \ + -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \ + -jar app.jar diff --git a/ruoyi-extend/ruoyi-powerjob-server/Dockerfile b/ruoyi-extend/ruoyi-powerjob-server/Dockerfile index 729bb2223..4423c7ce3 100644 --- a/ruoyi-extend/ruoyi-powerjob-server/Dockerfile +++ b/ruoyi-extend/ruoyi-powerjob-server/Dockerfile @@ -14,4 +14,4 @@ EXPOSE 7700 ADD ./target/ruoyi-powerjob-server.jar ./app.jar ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar app.jar \ - -XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS} + -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} diff --git a/script/bin/ry.bat b/script/bin/ry.bat index d214af4f6..ea98cbed0 100644 --- a/script/bin/ry.bat +++ b/script/bin/ry.bat @@ -5,7 +5,7 @@ rem jar平级目录 set AppName=ruoyi-admin.jar rem JVM参数 -set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC" +set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC" ECHO. diff --git a/script/bin/ry.sh b/script/bin/ry.sh index 0df25e733..a6f5d9cba 100644 --- a/script/bin/ry.sh +++ b/script/bin/ry.sh @@ -3,7 +3,7 @@ AppName=ruoyi-admin.jar # JVM参数 -JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC" +JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC" APP_HOME=`pwd` LOG_PATH=$APP_HOME/logs/$AppName.log From cb296ef2cd5f00b5593e3691ff7681a1dcfbd9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 9 May 2024 15:09:54 +0800 Subject: [PATCH 30/38] =?UTF-8?q?update=20=E9=87=8D=E6=9E=84=20workflow=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=B8=8E=20system=20=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E8=A7=A3=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/domain/dto/OssDTO.java | 46 ++++ .../common/core/domain/dto/RoleDTO.java | 4 + .../common/core/domain/dto/UserDTO.java | 73 ++++++ .../common/core/service/OssService.java | 11 + .../common/core/service/UserService.java | 19 ++ .../controller/system/SysUserController.java | 1 + .../dromara/system/domain/bo/SysUserBo.java | 5 + .../service/impl/SysOssServiceImpl.java | 20 ++ .../service/impl/SysUserServiceImpl.java | 26 ++- ruoyi-modules/ruoyi-workflow/pom.xml | 35 ++- .../controller/ActTaskController.java | 21 ++ .../controller/TestLeaveController.java | 1 - .../controller/WorkflowUserController.java | 72 ------ .../workflow/flowable/cmd/AttachmentCmd.java | 22 +- .../workflow/service/IActTaskService.java | 4 + .../service/IWorkflowUserService.java | 61 ----- .../service/impl/ActTaskServiceImpl.java | 86 +++++++ .../service/impl/WorkflowUserServiceImpl.java | 214 ------------------ .../dromara/workflow/utils/WorkflowUtils.java | 47 ++-- 19 files changed, 377 insertions(+), 391 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java new file mode 100644 index 000000000..463821c5f --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/OssDTO.java @@ -0,0 +1,46 @@ +package org.dromara.common.core.domain.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * OSS对象 + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class OssDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 对象存储主键 + */ + private Long ossId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 原名 + */ + private String originalName; + + /** + * 文件后缀名 + */ + private String fileSuffix; + + /** + * URL地址 + */ + private String url; + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java index 03d6166c8..aea8e7a9d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/RoleDTO.java @@ -3,6 +3,7 @@ package org.dromara.common.core.domain.dto; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; /** @@ -15,6 +16,9 @@ import java.io.Serializable; @NoArgsConstructor public class RoleDTO implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** * 角色ID */ diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java new file mode 100644 index 000000000..cb5def9a9 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java @@ -0,0 +1,73 @@ +package org.dromara.common.core.domain.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 用户 + * + * @author Michelle.Chung + */ +@Data +@NoArgsConstructor +public class UserDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户类型(sys_user系统用户) + */ + private String userType; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + /** + * 帐号状态(0正常 1停用) + */ + private String status; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java index 43742b32e..1a52de0dd 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/OssService.java @@ -1,5 +1,9 @@ package org.dromara.common.core.service; +import org.dromara.common.core.domain.dto.OssDTO; + +import java.util.List; + /** * 通用 OSS服务 * @@ -15,4 +19,11 @@ public interface OssService { */ String selectUrlByIds(String ossIds); + /** + * 通过ossId查询列表 + * + * @param ossIds ossId串逗号分隔 + * @return 列表 + */ + List selectByIds(String ossIds); } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java index f8c719319..0f2878da4 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java @@ -1,5 +1,9 @@ package org.dromara.common.core.service; +import org.dromara.common.core.domain.dto.UserDTO; + +import java.util.List; + /** * 通用 用户服务 * @@ -47,4 +51,19 @@ public interface UserService { */ String selectEmailById(Long userId); + /** + * 通过用户ID查询用户列表 + * + * @param userIds 用户ids + * @return 用户列表 + */ + List selectListByIds(List userIds); + + /** + * 通过角色ID查询用户ID + * + * @param roleIds 角色ids + * @return 用户ids + */ + List selectUserIdsByRoleIds(List roleIds); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index e0011d9bf..36104d627 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -296,4 +296,5 @@ public class SysUserController extends BaseController { public R> listByDept(@PathVariable @NotNull Long deptId) { return R.ok(userService.selectUserListByDept(deptId)); } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java index 011254ead..7ad2759b2 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java @@ -103,6 +103,11 @@ public class SysUserBo extends BaseEntity { */ private Long roleId; + /** + * 排除不查询的用户(工作流用) + */ + private String excludeUserIds; + public SysUserBo(Long userId) { this.userId = userId; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index 1df221c32..c901a2fa3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheNames; +import org.dromara.common.core.domain.dto.OssDTO; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.OssService; import org.dromara.common.core.utils.MapstructUtils; @@ -114,6 +116,24 @@ public class SysOssServiceImpl implements ISysOssService, OssService { return String.join(StringUtils.SEPARATOR, list); } + @Override + public List selectByIds(String ossIds) { + List list = new ArrayList<>(); + for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) { + SysOssVo vo = SpringUtils.getAopProxy(this).getById(id); + if (ObjectUtil.isNotNull(vo)) { + try { + vo.setUrl(this.matchingUrl(vo).getUrl()); + list.add(BeanUtil.toBean(vo, OssDTO.class)); + } catch (Exception ignored) { + // 如果oss异常无法连接则将数据直接返回 + list.add(BeanUtil.toBean(vo, OssDTO.class)); + } + } + } + return list; + } + private LambdaQueryWrapper buildQueryWrapper(SysOssBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index ad73de41b..93f1cc7fd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ArrayUtil; @@ -14,6 +15,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.UserConstants; +import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.MapstructUtils; @@ -29,7 +31,10 @@ import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUserPost; import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.bo.SysUserBo; -import org.dromara.system.domain.vo.*; +import org.dromara.system.domain.vo.SysPostVo; +import org.dromara.system.domain.vo.SysRoleVo; +import org.dromara.system.domain.vo.SysUserExportVo; +import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.mapper.*; import org.dromara.system.service.ISysUserService; import org.springframework.cache.annotation.Cacheable; @@ -92,6 +97,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService { ids.add(user.getDeptId()); w.in("u.dept_id", ids); }).orderByAsc("u.user_id"); + if (StringUtils.isNotBlank(user.getExcludeUserIds())) { + wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds())); + } return wrapper; } @@ -623,4 +631,20 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return ObjectUtil.isNull(sysUser) ? null : sysUser.getEmail(); } + @Override + public List selectListByIds(List userIds) { + if (CollUtil.isEmpty(userIds)) { + return List.of(); + } + List list = this.selectUserByIds(userIds, null); + return BeanUtil.copyToList(list, UserDTO.class); + } + + @Override + public List selectUserIdsByRoleIds(List roleIds) { + List userRoles = userRoleMapper.selectList( + new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds)); + return StreamUtils.toList(userRoles, SysUserRole::getUserId); + } + } diff --git a/ruoyi-modules/ruoyi-workflow/pom.xml b/ruoyi-modules/ruoyi-workflow/pom.xml index f0391e358..021709868 100644 --- a/ruoyi-modules/ruoyi-workflow/pom.xml +++ b/ruoyi-modules/ruoyi-workflow/pom.xml @@ -66,12 +66,6 @@ - - - org.dromara - ruoyi-system - - org.dromara ruoyi-common-websocket @@ -87,6 +81,35 @@ ruoyi-common-sms + + org.dromara + ruoyi-common-mybatis + + + org.dromara + ruoyi-common-web + + + org.dromara + ruoyi-common-log + + + org.dromara + ruoyi-common-idempotent + + + org.dromara + ruoyi-common-excel + + + org.dromara + ruoyi-common-translation + + + org.dromara + ruoyi-common-tenant + + diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java index aa290127a..907346447 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java @@ -271,4 +271,25 @@ public class ActTaskController extends BaseController { public R> getNodeList(@PathVariable String processInstanceId) { return R.ok(CollUtil.reverse(iWfTaskBackNodeService.getListByInstanceId(processInstanceId))); } + + /** + * 查询工作流任务用户选择加签人员 + * + * @param taskId 任务id + */ + @GetMapping("/getTaskUserIdsByAddMultiInstance/{taskId}") + public R getTaskUserIdsByAddMultiInstance(@PathVariable String taskId) { + return R.ok(actTaskService.getTaskUserIdsByAddMultiInstance(taskId)); + } + + /** + * 查询工作流选择减签人员 + * + * @param taskId 任务id + */ + @GetMapping("/getListByDeleteMultiInstance/{taskId}") + public R> getListByDeleteMultiInstance(@PathVariable String taskId) { + return R.ok(actTaskService.getListByDeleteMultiInstance(taskId)); + } + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java index 16d92ff6c..17b6755bd 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestLeaveController.java @@ -15,7 +15,6 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; -import org.dromara.workflow.domain.TestLeave; import org.dromara.workflow.domain.bo.TestLeaveBo; import org.dromara.workflow.domain.vo.TestLeaveVo; import org.dromara.workflow.service.ITestLeaveService; diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java deleted file mode 100644 index d553ad8f5..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.dromara.workflow.controller; - -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.system.domain.bo.SysUserBo; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.workflow.domain.bo.SysUserMultiBo; -import org.dromara.workflow.domain.vo.TaskVo; -import org.dromara.workflow.service.IWorkflowUserService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - - -/** - * 工作流用户选人管理 控制层 - * - * @author may - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/workflow/user") -public class WorkflowUserController extends BaseController { - - private final IWorkflowUserService workflowUserService; - - /** - * 分页查询工作流选择加签人员 - * - * @param bo 参数 - */ - @GetMapping("/getPageByAddMultiInstance") - public TableDataInfo getPageByAddMultiInstance(SysUserMultiBo bo, PageQuery pageQuery) { - return workflowUserService.getPageByAddMultiInstance(bo, pageQuery); - } - - /** - * 查询工作流选择减签人员 - * - * @param taskId 任务id - */ - @GetMapping("/getListByDeleteMultiInstance/{taskId}") - public R> getListByDeleteMultiInstance(@PathVariable String taskId) { - return R.ok(workflowUserService.getListByDeleteMultiInstance(taskId)); - } - - /** - * 按照用户id查询用户 - * - * @param userIds 用户id - */ - @GetMapping("/getUserListByIds/{userIds}") - public R> getUserListByIds(@PathVariable List userIds) { - return R.ok(workflowUserService.getUserListByIds(userIds)); - } - - /** - * 分页查询用户 - * - * @param sysUserBo 参数 - * @param pageQuery 分页 - */ - @GetMapping("/getPageByUserList") - public TableDataInfo getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery) { - return workflowUserService.getPageByUserList(sysUserBo, pageQuery); - } -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java index f0112529e..dd9849afc 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java @@ -1,20 +1,17 @@ package org.dromara.workflow.flowable.cmd; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; +import org.dromara.common.core.domain.dto.OssDTO; +import org.dromara.common.core.service.OssService; import org.dromara.common.core.utils.SpringUtils; -import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.system.domain.vo.SysOssVo; -import org.dromara.system.service.ISysOssService; import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.impl.persistence.entity.AttachmentEntity; import org.flowable.engine.impl.persistence.entity.AttachmentEntityManager; import org.flowable.engine.impl.util.CommandContextUtil; -import java.util.Arrays; import java.util.Date; import java.util.List; @@ -41,20 +38,19 @@ public class AttachmentCmd implements Command { public Boolean execute(CommandContext commandContext) { try { if (StringUtils.isNotBlank(fileId)) { - List fileIds = StreamUtils.toList(Arrays.asList(fileId.split(StrUtil.COMMA)), Long::valueOf); - List sysOssVos = SpringUtils.getBean(ISysOssService.class).listByIds(fileIds); - if (CollUtil.isNotEmpty(sysOssVos)) { - for (SysOssVo sysOssVo : sysOssVos) { + List ossList = SpringUtils.getBean(OssService.class).selectByIds(fileId); + if (CollUtil.isNotEmpty(ossList)) { + for (OssDTO oss : ossList) { AttachmentEntityManager attachmentEntityManager = CommandContextUtil.getAttachmentEntityManager(); AttachmentEntity attachmentEntity = attachmentEntityManager.create(); attachmentEntity.setRevision(1); attachmentEntity.setUserId(LoginHelper.getUserId().toString()); - attachmentEntity.setName(sysOssVo.getOriginalName()); - attachmentEntity.setDescription(sysOssVo.getOriginalName()); - attachmentEntity.setType(sysOssVo.getFileSuffix()); + attachmentEntity.setName(oss.getOriginalName()); + attachmentEntity.setDescription(oss.getOriginalName()); + attachmentEntity.setType(oss.getFileSuffix()); attachmentEntity.setTaskId(taskId); attachmentEntity.setProcessInstanceId(processInstanceId); - attachmentEntity.setContentId(sysOssVo.getOssId().toString()); + attachmentEntity.setContentId(oss.getOssId().toString()); attachmentEntity.setTime(new Date()); attachmentEntityManager.insert(attachmentEntity); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java index 45c3de230..d43828cff 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java @@ -142,4 +142,8 @@ public interface IActTaskService { * @return 结果 */ List getInstanceVariable(String taskId); + + String getTaskUserIdsByAddMultiInstance(String taskId); + + List getListByDeleteMultiInstance(String taskId); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java deleted file mode 100644 index 22639d586..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.system.domain.SysUserRole; -import org.dromara.system.domain.bo.SysUserBo; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.workflow.domain.bo.SysUserMultiBo; -import org.dromara.workflow.domain.vo.TaskVo; - -import java.util.List; - -/** - * 工作流用户选人管理 服务层 - * - * @author may - */ -public interface IWorkflowUserService { - - /** - * 分页查询工作流选择加签人员 - * - * @param sysUserMultiBo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo getPageByAddMultiInstance(SysUserMultiBo sysUserMultiBo, PageQuery pageQuery); - - /** - * 查询工作流选择减签人员 - * - * @param taskId 任务id - * @return 结果 - */ - List getListByDeleteMultiInstance(String taskId); - - /** - * 按照用户id查询用户 - * - * @param userIds 用户id - * @return 结果 - */ - List getUserListByIds(List userIds); - - /** - * 按照角色id查询关联用户id - * - * @param roleIds 角色id - * @return 结果 - */ - List getUserRoleListByRoleIds(List roleIds); - - /** - * 分页查询用户 - * - * @param sysUserBo 参数 - * @param pageQuery 分页 - * @return 结果 - */ - TableDataInfo getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery); -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index d5c759929..64cd9aee9 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -8,7 +8,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.dto.RoleDTO; +import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -79,6 +81,7 @@ public class ActTaskServiceImpl implements IActTaskService { private final ActHiTaskinstMapper actHiTaskinstMapper; private final IWfNodeConfigService iWfNodeConfigService; private final IWfDefinitionConfigService iWfDefinitionConfigService; + private final UserService userService; /** * 启动任务 @@ -777,4 +780,87 @@ public class ActTaskServiceImpl implements IActTaskService { } return variableVoList; } + + @Override + @SuppressWarnings("unchecked") + public String getTaskUserIdsByAddMultiInstance(String taskId) { + Task task = QueryUtils.taskQuery().taskId(taskId).singleResult(); + if (task == null) { + throw new ServiceException("任务不存在"); + } + MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); + if (multiInstance == null) { + return ""; + } + List userIds; + if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { + userIds = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); + } else { + List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); + userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee())); + } + return StringUtils.join(userIds, StringUtils.SEPARATOR); + } + + /** + * 查询工作流选择减签人员 + * + * @param taskId 任务id 任务id + */ + @Override + @SuppressWarnings("unchecked") + public List getListByDeleteMultiInstance(String taskId) { + Task task = QueryUtils.taskQuery().taskId(taskId).singleResult(); + List taskList = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); + MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); + List taskListVo = new ArrayList<>(); + if (multiInstance == null) { + return List.of(); + } + List assigneeList = new ArrayList<>(); + if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { + List variable = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); + for (Object o : variable) { + assigneeList.add(Long.valueOf(o.toString())); + } + } + + if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { + List userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee())); + List userList = userService.selectListByIds(userIds); + for (Long userId : userIds) { + TaskVo taskVo = new TaskVo(); + taskVo.setId("串行会签"); + taskVo.setExecutionId("串行会签"); + taskVo.setProcessInstanceId(task.getProcessInstanceId()); + taskVo.setName(task.getName()); + taskVo.setAssignee(userId); + if (CollUtil.isNotEmpty(userList)) { + userList.stream().filter(u -> u.getUserId().toString().equals(userId.toString())).findFirst().ifPresent(u -> taskVo.setAssigneeName(u.getNickName())); + } + taskListVo.add(taskVo); + } + return taskListVo; + } else if (multiInstance.getType() instanceof ParallelMultiInstanceBehavior) { + List tasks = StreamUtils.filter(taskList, e -> StringUtils.isBlank(e.getParentTaskId()) && !e.getExecutionId().equals(task.getExecutionId()) && e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey())); + if (CollUtil.isNotEmpty(tasks)) { + List userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee())); + List userList = userService.selectListByIds(userIds); + for (Task t : tasks) { + TaskVo taskVo = new TaskVo(); + taskVo.setId(t.getId()); + taskVo.setExecutionId(t.getExecutionId()); + taskVo.setProcessInstanceId(t.getProcessInstanceId()); + taskVo.setName(t.getName()); + taskVo.setAssignee(Long.valueOf(t.getAssignee())); + if (CollUtil.isNotEmpty(userList)) { + userList.stream().filter(u -> u.getUserId().toString().equals(t.getAssignee())).findFirst().ifPresent(e -> taskVo.setAssigneeName(e.getNickName())); + } + taskListVo.add(taskVo); + } + return taskListVo; + } + } + return List.of(); + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java deleted file mode 100644 index 23dd1b609..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java +++ /dev/null @@ -1,214 +0,0 @@ -package org.dromara.workflow.service.impl; - -import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.enums.UserStatus; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.system.domain.SysUser; -import org.dromara.system.domain.SysUserRole; -import org.dromara.system.domain.bo.SysUserBo; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.mapper.SysUserMapper; -import org.dromara.system.mapper.SysUserRoleMapper; -import org.dromara.workflow.domain.bo.SysUserMultiBo; -import org.dromara.workflow.domain.vo.MultiInstanceVo; -import org.dromara.workflow.domain.vo.TaskVo; -import org.dromara.workflow.service.IWorkflowUserService; -import org.dromara.workflow.utils.QueryUtils; -import org.dromara.workflow.utils.WorkflowUtils; -import org.flowable.engine.RuntimeService; -import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; -import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; -import org.flowable.task.api.Task; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * 工作流用户选人管理 业务处理层 - * - * @author may - */ -@RequiredArgsConstructor -@Service -public class WorkflowUserServiceImpl implements IWorkflowUserService { - - private final SysUserMapper sysUserMapper; - private final SysUserRoleMapper sysUserRoleMapper; - private final RuntimeService runtimeService; - - /** - * 分页查询工作流选择加签人员 - * - * @param bo 参数 - * @param pageQuery 分页 - */ - @Override - @SuppressWarnings("unchecked") - public TableDataInfo getPageByAddMultiInstance(SysUserMultiBo bo, PageQuery pageQuery) { - Task task = QueryUtils.taskQuery().taskId(bo.getTaskId()).singleResult(); - if (task == null) { - throw new ServiceException("任务不存在"); - } - MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); - if (multiInstance == null) { - return TableDataInfo.build(); - } - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - //检索条件 - queryWrapper.eq(StringUtils.isNotEmpty(bo.getDeptId()), SysUser::getDeptId, bo.getDeptId()); - queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode()); - if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - List assigneeList = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); - queryWrapper.notIn(CollUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList); - } else { - List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - List userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee())); - queryWrapper.notIn(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds); - } - queryWrapper.like(StringUtils.isNotEmpty(bo.getUserName()), SysUser::getUserName, bo.getUserName()); - queryWrapper.like(StringUtils.isNotEmpty(bo.getNickName()), SysUser::getNickName, bo.getNickName()); - Page page = new Page<>(pageQuery.getFirstNum(), pageQuery.getPageSize()); - Page userPage = sysUserMapper.selectVoPage(page, queryWrapper); - return TableDataInfo.build(recordPage(userPage)); - } - - /** - * 查询工作流选择减签人员 - * - * @param taskId 任务id 任务id - */ - @Override - @SuppressWarnings("unchecked") - public List getListByDeleteMultiInstance(String taskId) { - Task task = QueryUtils.taskQuery().taskId(taskId).singleResult(); - List taskList = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); - MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); - List taskListVo = new ArrayList<>(); - if (multiInstance == null) { - return Collections.emptyList(); - } - List assigneeList = new ArrayList<>(); - if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - List variable = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); - for (Object o : variable) { - assigneeList.add(Long.valueOf(o.toString())); - } - } - - if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - List userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee())); - List sysUsers = null; - if (CollUtil.isNotEmpty(userIds)) { - sysUsers = sysUserMapper.selectVoBatchIds(userIds); - } - for (Long userId : userIds) { - TaskVo taskVo = new TaskVo(); - taskVo.setId("串行会签"); - taskVo.setExecutionId("串行会签"); - taskVo.setProcessInstanceId(task.getProcessInstanceId()); - taskVo.setName(task.getName()); - taskVo.setAssignee(userId); - if (CollUtil.isNotEmpty(sysUsers)) { - sysUsers.stream().filter(u -> u.getUserId().toString().equals(userId.toString())).findFirst().ifPresent(u -> taskVo.setAssigneeName(u.getNickName())); - } - taskListVo.add(taskVo); - } - return taskListVo; - } else if (multiInstance.getType() instanceof ParallelMultiInstanceBehavior) { - List tasks = StreamUtils.filter(taskList, e -> StringUtils.isBlank(e.getParentTaskId()) && !e.getExecutionId().equals(task.getExecutionId()) && e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey())); - if (CollUtil.isNotEmpty(tasks)) { - List userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee())); - List sysUsers = null; - if (CollUtil.isNotEmpty(userIds)) { - sysUsers = sysUserMapper.selectVoBatchIds(userIds); - } - for (Task t : tasks) { - TaskVo taskVo = new TaskVo(); - taskVo.setId(t.getId()); - taskVo.setExecutionId(t.getExecutionId()); - taskVo.setProcessInstanceId(t.getProcessInstanceId()); - taskVo.setName(t.getName()); - taskVo.setAssignee(Long.valueOf(t.getAssignee())); - if (CollUtil.isNotEmpty(sysUsers)) { - sysUsers.stream().filter(u -> u.getUserId().toString().equals(t.getAssignee())).findFirst().ifPresent(e -> taskVo.setAssigneeName(e.getNickName())); - } - taskListVo.add(taskVo); - } - return taskListVo; - } - } - return Collections.emptyList(); - } - - /** - * 翻译部门 - * - * @param page 用户分页数据 - */ - private Page recordPage(Page page) { - List records = page.getRecords(); - if (CollUtil.isEmpty(records)) { - return page; - } - List collectDeptId = StreamUtils.toList(records, SysUserVo::getDeptId); - if (CollUtil.isEmpty(collectDeptId)) { - return page; - } - page.setRecords(records); - return page; - } - - /** - * 按照用户id查询用户 - * - * @param userIds 用户id - */ - @Override - public List getUserListByIds(List userIds) { - if (CollUtil.isEmpty(userIds)) { - return Collections.emptyList(); - } - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - // 检索条件 - queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode()); - queryWrapper.in(SysUser::getUserId, userIds); - return sysUserMapper.selectVoList(queryWrapper); - } - - /** - * 按照角色id查询关联用户id - * - * @param roleIds 角色id - */ - @Override - public List getUserRoleListByRoleIds(List roleIds) { - return sysUserRoleMapper.selectList(new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds)); - } - - /** - * 分页查询用户 - * - * @param sysUserBo 参数 - * @param pageQuery 分页 - */ - @Override - public TableDataInfo getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(sysUserBo.getDeptId() != null, SysUser::getDeptId, sysUserBo.getDeptId()); - queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode()); - queryWrapper.like(StringUtils.isNotEmpty(sysUserBo.getUserName()), SysUser::getUserName, sysUserBo.getUserName()); - queryWrapper.like(StringUtils.isNotEmpty(sysUserBo.getNickName()), SysUser::getNickName, sysUserBo.getNickName()); - Page userPage = sysUserMapper.selectVoPage(pageQuery.build(), queryWrapper); - return TableDataInfo.build(recordPage(userPage)); - } -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java index 6979671e2..f475f1978 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java @@ -7,6 +7,8 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.dromara.common.core.domain.dto.UserDTO; +import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; @@ -15,18 +17,18 @@ import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.websocket.dto.WebSocketMessageDto; import org.dromara.common.websocket.utils.WebSocketUtils; -import org.dromara.system.domain.SysUserRole; -import org.dromara.system.domain.vo.SysUserVo; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.enums.BusinessStatusEnum; import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.ActHiProcinst; import org.dromara.workflow.domain.ActHiTaskinst; -import org.dromara.workflow.domain.vo.*; +import org.dromara.workflow.domain.vo.MultiInstanceVo; +import org.dromara.workflow.domain.vo.ParticipantVo; +import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd; import org.dromara.workflow.mapper.ActHiTaskinstMapper; -import org.dromara.workflow.service.*; +import org.dromara.workflow.service.IActHiProcinstService; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.common.engine.api.delegate.Expression; @@ -41,7 +43,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; import java.util.*; -import static org.dromara.workflow.common.constant.FlowConstant.*; +import static org.dromara.workflow.common.constant.FlowConstant.PROCESS_INSTANCE_VO; /** * 工作流工具 @@ -52,7 +54,7 @@ import static org.dromara.workflow.common.constant.FlowConstant.*; public class WorkflowUtils { private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class); - private static final IWorkflowUserService WORKFLOW_USER_SERVICE = SpringUtils.getBean(IWorkflowUserService.class); + private static final UserService USER_SERVICE = SpringUtils.getBean(UserService.class); private static final IActHiProcinstService ACT_HI_PROCINST_SERVICE = SpringUtils.getBean(IActHiProcinstService.class); private static final ActHiTaskinstMapper ACT_HI_TASKINST_MAPPER = SpringUtils.getBean(ActHiTaskinstMapper.class); @@ -138,15 +140,14 @@ public class WorkflowUtils { List groupList = StreamUtils.filter(linksForTask, e -> StringUtils.isNotBlank(e.getGroupId())); if (CollUtil.isNotEmpty(groupList)) { List groupIds = StreamUtils.toList(groupList, e -> Long.valueOf(e.getGroupId())); - List sysUserRoles = WORKFLOW_USER_SERVICE.getUserRoleListByRoleIds(groupIds); - if (CollUtil.isNotEmpty(sysUserRoles)) { + List userIds = USER_SERVICE.selectUserIdsByRoleIds(groupIds); + if (CollUtil.isNotEmpty(userIds)) { participantVo.setGroupIds(groupIds); - List userIdList = StreamUtils.toList(sysUserRoles, SysUserRole::getUserId); - List sysUsers = WORKFLOW_USER_SERVICE.getUserListByIds(userIdList); - if (CollUtil.isNotEmpty(sysUsers)) { - List userIds = StreamUtils.toList(sysUsers, SysUserVo::getUserId); - List nickNames = StreamUtils.toList(sysUsers, SysUserVo::getNickName); - participantVo.setCandidate(userIds); + List userList = USER_SERVICE.selectListByIds(userIds); + if (CollUtil.isNotEmpty(userList)) { + List userIdList = StreamUtils.toList(userList, UserDTO::getUserId); + List nickNames = StreamUtils.toList(userList, UserDTO::getNickName); + participantVo.setCandidate(userIdList); participantVo.setCandidateName(nickNames); participantVo.setClaim(!StringUtils.isBlank(task.getAssignee())); } @@ -161,10 +162,10 @@ public class WorkflowUtils { } } - List sysUsers = WORKFLOW_USER_SERVICE.getUserListByIds(userIdList); - if (CollUtil.isNotEmpty(sysUsers)) { - List userIds = StreamUtils.toList(sysUsers, SysUserVo::getUserId); - List nickNames = StreamUtils.toList(sysUsers, SysUserVo::getNickName); + List userList = USER_SERVICE.selectListByIds(userIdList); + if (CollUtil.isNotEmpty(userList)) { + List userIds = StreamUtils.toList(userList, UserDTO::getUserId); + List nickNames = StreamUtils.toList(userList, UserDTO::getNickName); participantVo.setCandidate(userIds); participantVo.setCandidateName(nickNames); // 判断当前任务是否具有多个办理人 @@ -306,9 +307,9 @@ public class WorkflowUtils { for (Task t : list) { ParticipantVo taskParticipant = WorkflowUtils.getCurrentTaskParticipant(t.getId()); if (CollUtil.isNotEmpty(taskParticipant.getGroupIds())) { - List sysUserRoles = WORKFLOW_USER_SERVICE.getUserRoleListByRoleIds(taskParticipant.getGroupIds()); - if (CollUtil.isNotEmpty(sysUserRoles)) { - userIds.addAll(StreamUtils.toList(sysUserRoles, SysUserRole::getUserId)); + List userIdList = USER_SERVICE.selectUserIdsByRoleIds(taskParticipant.getGroupIds()); + if (CollUtil.isNotEmpty(userIdList)) { + userIds.addAll(userIdList); } } List candidate = taskParticipant.getCandidate(); @@ -317,7 +318,7 @@ public class WorkflowUtils { } } if (CollUtil.isNotEmpty(userIds)) { - List sysUserVoList = WORKFLOW_USER_SERVICE.getUserListByIds(new ArrayList<>(userIds)); + List userList = USER_SERVICE.selectListByIds(new ArrayList<>(userIds)); for (String code : messageType) { MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code); if (ObjectUtil.isNotEmpty(messageTypeEnum)) { @@ -329,7 +330,7 @@ public class WorkflowUtils { WebSocketUtils.publishMessage(dto); break; case EMAIL_MESSAGE: - MailUtils.sendText(StreamUtils.join(sysUserVoList, SysUserVo::getEmail), "单据审批提醒", message); + MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message); break; case SMS_MESSAGE: //todo 短信发送 From 405a98c8f3fb970806f93e70a8dc97da395c54d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 9 May 2024 17:08:21 +0800 Subject: [PATCH 31/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E5=91=BD=E5=90=8D=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ActTaskController.java | 4 ++-- .../service/impl/ActModelServiceImpl.java | 12 +++++----- .../impl/ActProcessDefinitionServiceImpl.java | 22 ++++++++--------- .../impl/ActProcessInstanceServiceImpl.java | 16 ++++++------- .../service/impl/ActTaskServiceImpl.java | 24 +++++++++---------- .../service/impl/TestLeaveServiceImpl.java | 4 ++-- .../service/impl/WfNodeConfigServiceImpl.java | 4 ++-- 7 files changed, 43 insertions(+), 43 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java index 907346447..7fc9b95fd 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java @@ -42,7 +42,7 @@ public class ActTaskController extends BaseController { private final TaskService taskService; - private final IWfTaskBackNodeService iWfTaskBackNodeService; + private final IWfTaskBackNodeService wfTaskBackNodeService; /** @@ -269,7 +269,7 @@ public class ActTaskController extends BaseController { */ @GetMapping("/getTaskNodeList/{processInstanceId}") public R> getNodeList(@PathVariable String processInstanceId) { - return R.ok(CollUtil.reverse(iWfTaskBackNodeService.getListByInstanceId(processInstanceId))); + return R.ok(CollUtil.reverse(wfTaskBackNodeService.getListByInstanceId(processInstanceId))); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java index f03173ed1..7ea53d81a 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java @@ -64,8 +64,8 @@ import java.util.zip.ZipOutputStream; public class ActModelServiceImpl implements IActModelService { private final RepositoryService repositoryService; - private final IWfNodeConfigService iWfNodeConfigService; - private final IWfDefinitionConfigService iWfDefinitionConfigService; + private final IWfNodeConfigService wfNodeConfigService; + private final IWfDefinitionConfigService wfDefinitionConfigService; /** * 分页查询模型 @@ -291,16 +291,16 @@ public class ActModelServiceImpl implements IActModelService { repositoryService.setProcessDefinitionCategory(definition.getId(), model.getCategory()); //更新流程定义配置 if (processDefinition != null) { - WfDefinitionConfigVo definitionVo = iWfDefinitionConfigService.getByDefId(processDefinition.getId()); + WfDefinitionConfigVo definitionVo = wfDefinitionConfigService.getByDefId(processDefinition.getId()); if (definitionVo != null) { - iWfDefinitionConfigService.deleteByDefIds(Collections.singletonList(processDefinition.getId())); + wfDefinitionConfigService.deleteByDefIds(Collections.singletonList(processDefinition.getId())); WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo(); wfFormDefinition.setDefinitionId(definition.getId()); wfFormDefinition.setProcessKey(definition.getKey()); wfFormDefinition.setTableName(definitionVo.getTableName()); wfFormDefinition.setVersion(definition.getVersion()); wfFormDefinition.setRemark(definitionVo.getRemark()); - iWfDefinitionConfigService.saveOrUpdate(wfFormDefinition); + wfDefinitionConfigService.saveOrUpdate(wfFormDefinition); } } //更新流程节点配置表单 @@ -321,7 +321,7 @@ public class ActModelServiceImpl implements IActModelService { } } if (CollUtil.isNotEmpty(wfNodeConfigList)) { - iWfNodeConfigService.saveOrUpdate(wfNodeConfigList); + wfNodeConfigService.saveOrUpdate(wfNodeConfigList); } return true; } catch (Exception e) { diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index bbdc4bfdd..c37e0d016 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java @@ -62,9 +62,9 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer private final RepositoryService repositoryService; private final ProcessMigrationService processMigrationService; private final IWfCategoryService wfCategoryService; - private final IWfDefinitionConfigService iWfDefinitionConfigService; + private final IWfDefinitionConfigService wfDefinitionConfigService; private final WfDefinitionConfigMapper wfDefinitionConfigMapper; - private final IWfNodeConfigService iWfNodeConfigService; + private final IWfNodeConfigService wfNodeConfigService; /** * 分页查询 @@ -95,7 +95,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer } if (CollUtil.isNotEmpty(definitionList)) { List ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); - List wfDefinitionConfigVos = iWfDefinitionConfigService.queryList(ids); + List wfDefinitionConfigVos = wfDefinitionConfigService.queryList(ids); for (ProcessDefinition processDefinition : definitionList) { ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); if (CollUtil.isNotEmpty(deploymentList)) { @@ -135,7 +135,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer } if (CollUtil.isNotEmpty(definitionList)) { List ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); - List wfDefinitionConfigVos = iWfDefinitionConfigService.queryList(ids); + List wfDefinitionConfigVos = wfDefinitionConfigService.queryList(ids); for (ProcessDefinition processDefinition : definitionList) { ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); if (CollUtil.isNotEmpty(deploymentList)) { @@ -203,9 +203,9 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer repositoryService.deleteDeployment(deploymentId); } //删除流程定义配置 - iWfDefinitionConfigService.deleteByDefIds(processDefinitionIds); + wfDefinitionConfigService.deleteByDefIds(processDefinitionIds); //删除节点配置 - iWfNodeConfigService.deleteByDefIds(processDefinitionIds); + wfNodeConfigService.deleteByDefIds(processDefinitionIds); return true; } catch (Exception e) { e.printStackTrace(); @@ -387,7 +387,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer wfDefinitionConfigBo.setProcessKey(processDefinition.getKey()); wfDefinitionConfigBo.setTableName("test_leave"); wfDefinitionConfigBo.setVersion(processDefinition.getVersion()); - iWfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); + wfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); } } @@ -402,16 +402,16 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer private void setWfConfig(ProcessDefinition oldProcessDefinition, ProcessDefinition definition) { //更新流程定义表单 if (oldProcessDefinition != null) { - WfDefinitionConfigVo definitionVo = iWfDefinitionConfigService.getByDefId(oldProcessDefinition.getId()); + WfDefinitionConfigVo definitionVo = wfDefinitionConfigService.getByDefId(oldProcessDefinition.getId()); if (definitionVo != null) { - iWfDefinitionConfigService.deleteByDefIds(Collections.singletonList(oldProcessDefinition.getId())); + wfDefinitionConfigService.deleteByDefIds(Collections.singletonList(oldProcessDefinition.getId())); WfDefinitionConfigBo wfDefinitionConfigBo = new WfDefinitionConfigBo(); wfDefinitionConfigBo.setDefinitionId(definition.getId()); wfDefinitionConfigBo.setProcessKey(definition.getKey()); wfDefinitionConfigBo.setTableName(definitionVo.getTableName()); wfDefinitionConfigBo.setVersion(definition.getVersion()); wfDefinitionConfigBo.setRemark(definitionVo.getRemark()); - iWfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); + wfDefinitionConfigService.saveOrUpdate(wfDefinitionConfigBo); } } //更新流程节点配置表单 @@ -432,7 +432,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer } } if (CollUtil.isNotEmpty(wfNodeConfigList)) { - iWfNodeConfigService.saveOrUpdate(wfNodeConfigList); + wfNodeConfigService.saveOrUpdate(wfNodeConfigList); } } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index 39fc8fc30..6339302c6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -76,8 +76,8 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService private final IActHiProcinstService actHiProcinstService; private final ManagementService managementService; private final FlowEventStrategy flowEventStrategy; - private final IWfTaskBackNodeService iWfTaskBackNodeService; - private final IWfNodeConfigService iWfNodeConfigService; + private final IWfTaskBackNodeService wfTaskBackNodeService; + private final IWfNodeConfigService wfNodeConfigService; @Value("${flowable.activity-font-name}") private String activityFontName; @@ -122,7 +122,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService } if (CollUtil.isNotEmpty(list)) { List processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (ProcessInstanceVo processInstanceVo : list) { if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); @@ -169,7 +169,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService } if (CollUtil.isNotEmpty(list)) { List processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (ProcessInstanceVo processInstanceVo : list) { if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); @@ -523,7 +523,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); } - iWfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); + wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); return true; } catch (Exception e) { e.printStackTrace(); @@ -558,7 +558,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); } - iWfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); + wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); return true; } catch (Exception e) { e.printStackTrace(); @@ -576,7 +576,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService public boolean deleteFinishAndHisInstance(List processInstanceIds) { try { historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); - iWfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); + wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); return true; } catch (Exception e) { e.printStackTrace(); @@ -677,7 +677,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService } if (CollUtil.isNotEmpty(list)) { List processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (ProcessInstanceVo processInstanceVo : list) { if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 64cd9aee9..75739c130 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -77,10 +77,10 @@ public class ActTaskServiceImpl implements IActTaskService { private final ManagementService managementService; private final FlowEventStrategy flowEventStrategy; private final ActTaskMapper actTaskMapper; - private final IWfTaskBackNodeService iWfTaskBackNodeService; + private final IWfTaskBackNodeService wfTaskBackNodeService; private final ActHiTaskinstMapper actHiTaskinstMapper; - private final IWfNodeConfigService iWfNodeConfigService; - private final IWfDefinitionConfigService iWfDefinitionConfigService; + private final IWfNodeConfigService wfNodeConfigService; + private final IWfDefinitionConfigService wfDefinitionConfigService; private final UserService userService; /** @@ -110,7 +110,7 @@ public class ActTaskServiceImpl implements IActTaskService { map.put("taskId", taskResult.get(0).getId()); return map; } - WfDefinitionConfigVo wfDefinitionConfigVo = iWfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName()); + WfDefinitionConfigVo wfDefinitionConfigVo = wfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName()); if (wfDefinitionConfigVo == null) { throw new ServiceException("请到流程定义绑定业务表名与流程KEY!"); } @@ -209,7 +209,7 @@ public class ActTaskServiceImpl implements IActTaskService { taskService.complete(completeTaskBo.getTaskId()); } //记录执行过的流程任务节点 - iWfTaskBackNodeService.recordExecuteNode(task); + wfTaskBackNodeService.recordExecuteNode(task); ProcessInstance pi = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); if (pi == null) { UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); @@ -284,7 +284,7 @@ public class ActTaskServiceImpl implements IActTaskService { List taskList = page.getRecords(); if (CollUtil.isNotEmpty(taskList)) { List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); @@ -338,7 +338,7 @@ public class ActTaskServiceImpl implements IActTaskService { List list = new ArrayList<>(); if (CollUtil.isNotEmpty(taskList)) { List processDefinitionIds = StreamUtils.toList(taskList, Task::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (Task task : taskList) { TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); if (CollUtil.isNotEmpty(processInstanceList)) { @@ -386,7 +386,7 @@ public class ActTaskServiceImpl implements IActTaskService { List taskList = page.getRecords(); if (CollUtil.isNotEmpty(taskList)) { List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { @@ -422,7 +422,7 @@ public class ActTaskServiceImpl implements IActTaskService { List taskList = page.getRecords(); if (CollUtil.isNotEmpty(taskList)) { List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { @@ -450,7 +450,7 @@ public class ActTaskServiceImpl implements IActTaskService { List taskList = page.getRecords(); if (CollUtil.isNotEmpty(taskList)) { List processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - List wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + List wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { @@ -725,7 +725,7 @@ public class ActTaskServiceImpl implements IActTaskService { managementService.executeCommand(deleteExecutionCmd); } - WfTaskBackNode wfTaskBackNode = iWfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId()); + WfTaskBackNode wfTaskBackNode = wfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId()); if (ObjectUtil.isNotNull(wfTaskBackNode) && wfTaskBackNode.getOrderNo() == 0) { runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus()); FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); @@ -734,7 +734,7 @@ public class ActTaskServiceImpl implements IActTaskService { } } //删除驳回后的流程节点 - iWfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId()); + wfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId()); } catch (Exception e) { throw new ServiceException(e.getMessage()); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java index 8d0086994..bee562739 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java @@ -35,7 +35,7 @@ import java.util.List; public class TestLeaveServiceImpl implements ITestLeaveService { private final TestLeaveMapper baseMapper; - private final IActProcessInstanceService iActProcessInstanceService; + private final IActProcessInstanceService actProcessInstanceService; /** * 查询请假 @@ -115,7 +115,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService { @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids) { List idList = StreamUtils.toList(ids, String::valueOf); - iActProcessInstanceService.deleteRunAndHisInstanceByBusinessKeys(idList); + actProcessInstanceService.deleteRunAndHisInstanceByBusinessKeys(idList); return baseMapper.deleteBatchIds(ids) > 0; } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java index 07a1d6337..c677102c0 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java @@ -27,7 +27,7 @@ import java.util.List; public class WfNodeConfigServiceImpl implements IWfNodeConfigService { private final WfNodeConfigMapper baseMapper; - private final IWfFormManageService iWfFormManageService; + private final IWfFormManageService wfFormManageService; /** * 查询节点配置 @@ -65,7 +65,7 @@ public class WfNodeConfigServiceImpl implements IWfNodeConfigService { List wfNodeConfigVos = baseMapper.selectVoList(new LambdaQueryWrapper().in(WfNodeConfig::getDefinitionId, ids)); if (CollUtil.isNotEmpty(wfNodeConfigVos)) { List formIds = StreamUtils.toList(wfNodeConfigVos, WfNodeConfigVo::getFormId); - List wfFormManageVos = iWfFormManageService.queryByIds(formIds); + List wfFormManageVos = wfFormManageService.queryByIds(formIds); for (WfNodeConfigVo wfNodeConfigVo : wfNodeConfigVos) { wfFormManageVos.stream().filter(e -> ObjectUtil.equals(e.getId(), wfNodeConfigVo.getFormId())).findFirst().ifPresent(wfNodeConfigVo::setWfFormManageVo); } From d6db49e6210a770beec058f444836f42f3f71cfa Mon Sep 17 00:00:00 2001 From: PhoenixL <545073804@qq.com> Date: Thu, 9 May 2024 17:17:03 +0800 Subject: [PATCH 32/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/common/oss/core/OssClient.java | 39 +++++++++++++++++-- .../service/impl/SysOssServiceImpl.java | 11 +----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index 5533297ac..fcad35b09 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -14,11 +14,14 @@ import org.dromara.common.oss.exception.OssException; import org.dromara.common.oss.properties.OssProperties; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.core.ResponseInputStream; import software.amazon.awssdk.core.async.AsyncRequestBody; +import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.core.async.BlockingInputStreamAsyncRequestBody; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.S3Configuration; +import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.NoSuchBucketException; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.presigner.S3Presigner; @@ -26,10 +29,7 @@ import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.*; import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.net.URI; import java.net.URL; import java.nio.file.Files; @@ -260,6 +260,37 @@ public class OssClient { return tempFilePath; } + /** + * 下载文件从 Amazon S3 到 输出流 + * + * @param key 文件在 Amazon S3 中的对象键 + * @param out 输出流 + * @return 输出流中写入的字节数(长度) + * @throws OssException 如果下载失败,抛出自定义异常 + */ + public long download(String key, OutputStream out) { + try { + // 构建下载请求 + DownloadRequest> downloadRequest = DownloadRequest.builder() + // 文件对象 + .getObjectRequest(y -> y.bucket(properties.getBucketName()) + .key(key) + .build()) + .addTransferListener(LoggingTransferListener.create()) + // 使用订阅转换器 + .responseTransformer(AsyncResponseTransformer.toBlockingInputStream()) + .build(); + // 使用 S3TransferManager 下载文件 + Download> responseFuture = transferManager.download(downloadRequest); + // 输出到流中 + try (ResponseInputStream responseStream = responseFuture.completionFuture().join().result()) { // auto-closeable stream + return responseStream.transferTo(out); // 阻塞调用线程 blocks the calling thread + } + } catch (Exception e) { + throw new OssException("文件下载失败,错误信息:[" + e.getMessage() + "]"); + } + } + /** * 删除云存储服务中指定路径下文件 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index 1df221c32..e4649f1c1 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java @@ -1,7 +1,6 @@ package org.dromara.system.service.impl; import cn.hutool.core.convert.Convert; -import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -35,7 +34,6 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -157,13 +155,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService { FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName()); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); OssClient storage = OssFactory.instance(sysOss.getService()); - try (InputStream inputStream = storage.getObjectContent(sysOss.getUrl())) { - int available = inputStream.available(); - IoUtil.copy(inputStream, response.getOutputStream(), available); - response.setContentLength(available); - } catch (Exception e) { - throw new ServiceException(e.getMessage()); - } + long contentLength = storage.download(sysOss.getFileName(), response.getOutputStream()); + response.setContentLengthLong(contentLength); } /** From 11c15c47d162902f33fd253061e695747fc875ca Mon Sep 17 00:00:00 2001 From: neviabit <10192451+neviabit@user.noreply.gitee.com> Date: Thu, 9 May 2024 10:08:09 +0000 Subject: [PATCH 33/38] =?UTF-8?q?fix=20=E4=BF=AE=E6=AD=A3=20=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E7=AD=96=E7=95=A5=E6=B3=A8=E9=87=8A=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/web/service/impl/XcxAuthStrategy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java index ccab778cf..aa8be73a7 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java @@ -20,7 +20,7 @@ import org.dromara.web.service.SysLoginService; import org.springframework.stereotype.Service; /** - * 邮件认证策略 + * 小程序认证策略 * * @author Michelle.Chung */ From 041d8399ba980cde6a8550893f2ac72a9bcdaf02 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Thu, 9 May 2024 21:40:54 +0800 Subject: [PATCH 34/38] =?UTF-8?q?add=20=E8=A1=A5=E5=85=85=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/workflow/service/IActTaskService.java | 12 ++++++++++++ .../workflow/service/impl/ActTaskServiceImpl.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java index d43828cff..8e9f76367 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java @@ -143,7 +143,19 @@ public interface IActTaskService { */ List getInstanceVariable(String taskId); + /** + * 查询工作流任务用户选择加签人员 + * + * @param taskId 任务id + * @return 结果 + */ String getTaskUserIdsByAddMultiInstance(String taskId); + /** + * 查询工作流选择减签人员 + * + * @param taskId 任务id + * @return 结果 + */ List getListByDeleteMultiInstance(String taskId); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 75739c130..1a4866d21 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -781,6 +781,12 @@ public class ActTaskServiceImpl implements IActTaskService { return variableVoList; } + /** + * 查询工作流任务用户选择加签人员 + * + * @param taskId 任务id + * @return + */ @Override @SuppressWarnings("unchecked") public String getTaskUserIdsByAddMultiInstance(String taskId) { From 14cedccaf3c9a7e2caa08e563b9a51e26a1c0d0f Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 10 May 2024 02:29:04 +0000 Subject: [PATCH 35/38] =?UTF-8?q?!530=20=E6=96=B0=E5=A2=9E=E5=88=86?= =?UTF-8?q?=E5=B8=83=E5=BC=8F=E9=94=81Lock4j=E5=BC=82=E5=B8=B8=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=20*=20update=20=E6=96=B0=E5=A2=9ERedis=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8=E5=A4=84=E7=90=86Lock4j?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/handler/RedisExceptionHandler.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/handler/RedisExceptionHandler.java diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/handler/RedisExceptionHandler.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/handler/RedisExceptionHandler.java new file mode 100644 index 000000000..5ed12a6e3 --- /dev/null +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/handler/RedisExceptionHandler.java @@ -0,0 +1,30 @@ +package org.dromara.common.redis.handler; + +import cn.hutool.http.HttpStatus; +import com.baomidou.lock.exception.LockFailureException; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * Redis异常处理器 + * + * @author AprilWind + */ +@Slf4j +@RestControllerAdvice +public class RedisExceptionHandler { + + /** + * 分布式锁Lock4j异常 + */ + @ExceptionHandler(LockFailureException.class) + public R handleLockFailureException(LockFailureException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("获取锁失败了'{}',发生Lock4j异常." + requestURI, e.getMessage()); + return R.fail(HttpStatus.HTTP_UNAVAILABLE, "业务处理中,请稍后再试..."); + } + +} From 3ffd1e3b41f87217f0b7fe5750858f2bba7fe7c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 10 May 2024 11:17:44 +0800 Subject: [PATCH 36/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8=E8=87=AA=E5=8A=A8=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/common/mybatis/config/MybatisPlusConfig.java | 9 +++++++++ .../org/dromara/common/redis/config/RedisConfig.java | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java index c157b47ec..0bc5b66a1 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerIntercept import org.dromara.common.core.factory.YmlPropertySourceFactory; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.mybatis.handler.InjectionMetaObjectHandler; +import org.dromara.common.mybatis.handler.MybatisExceptionHandler; import org.dromara.common.mybatis.interceptor.PlusDataPermissionInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.BeansException; @@ -87,6 +88,14 @@ public class MybatisPlusConfig { return new DefaultIdentifierGenerator(NetUtil.getLocalhost()); } + /** + * 异常处理器 + */ + @Bean + public MybatisExceptionHandler mybatisExceptionHandler() { + return new MybatisExceptionHandler(); + } + /** * PaginationInnerInterceptor 分页插件,自动识别数据库类型 * https://baomidou.com/pages/97710a/ diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java index 039fd30b7..f8fe79a8c 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java @@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.redis.config.properties.RedissonProperties; import org.dromara.common.redis.handler.KeyPrefixHandler; +import org.dromara.common.redis.handler.RedisExceptionHandler; import org.redisson.client.codec.StringCodec; import org.redisson.codec.CompositeCodec; import org.redisson.codec.TypedJsonJacksonCodec; @@ -97,6 +98,14 @@ public class RedisConfig { }; } + /** + * 异常处理器 + */ + @Bean + public RedisExceptionHandler redisExceptionHandler() { + return new RedisExceptionHandler(); + } + /** * redis集群配置 yml * From acaa220a70020127fe77971e21830bcf1e565b4a Mon Sep 17 00:00:00 2001 From: good <13.qq.com> Date: Sat, 11 May 2024 09:54:10 +0800 Subject: [PATCH 37/38] =?UTF-8?q?fix=20=E4=BF=AE=E6=AD=A3=20=E4=B8=BB?= =?UTF-8?q?=E5=BB=BA=E9=94=99=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dromara/system/domain/SysOssConfig.java | 2 +- .../java/org/dromara/system/domain/bo/SysOssConfigBo.java | 4 ++-- .../java/org/dromara/system/domain/vo/SysOssConfigVo.java | 2 +- script/sql/oracle/oracle_ry_vue_5.X.sql | 4 ++-- script/sql/postgres/postgres_ry_vue_5.X.sql | 4 ++-- script/sql/ry_vue_5.X.sql | 2 +- script/sql/sqlserver/sqlserver_ry_vue_5.X.sql | 4 ++-- script/sql/update/oracle/update_5.0-5.1.sql | 2 +- script/sql/update/postgres/update_5.0-5.1.sql | 2 +- script/sql/update/sqlserver/update_5.0-5.1.sql | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOssConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOssConfig.java index 8a9e25e08..4b67d63ea 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOssConfig.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOssConfig.java @@ -17,7 +17,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity; public class SysOssConfig extends BaseEntity { /** - * 主建 + * 主键 */ @TableId(value = "oss_config_id") private Long ossConfigId; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java index 5887ded89..3dc4328c0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java @@ -25,9 +25,9 @@ import lombok.EqualsAndHashCode; public class SysOssConfigBo extends BaseEntity { /** - * 主建 + * 主键 */ - @NotNull(message = "主建不能为空", groups = {EditGroup.class}) + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) private Long ossConfigId; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java index b88ec4090..e7cfde4fe 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java @@ -25,7 +25,7 @@ public class SysOssConfigVo implements Serializable { private static final long serialVersionUID = 1L; /** - * 主建 + * 主键 */ private Long ossConfigId; diff --git a/script/sql/oracle/oracle_ry_vue_5.X.sql b/script/sql/oracle/oracle_ry_vue_5.X.sql index b7b8fc441..191e66fe6 100644 --- a/script/sql/oracle/oracle_ry_vue_5.X.sql +++ b/script/sql/oracle/oracle_ry_vue_5.X.sql @@ -1186,7 +1186,7 @@ create table sys_oss_config ( alter table sys_oss_config add constraint pk_sys_oss_config primary key (oss_config_id); comment on table sys_oss_config is '对象存储配置表'; -comment on column sys_oss_config.oss_config_id is '主建'; +comment on column sys_oss_config.oss_config_id is '主键'; comment on column sys_oss_config.tenant_id is '租户编码'; comment on column sys_oss_config.config_key is '配置key'; comment on column sys_oss_config.access_key is 'accesskey'; @@ -1237,7 +1237,7 @@ create table sys_client ( alter table sys_client add constraint pk_sys_client primary key (id); comment on table sys_client is '系统授权表'; -comment on column sys_client.id is '主建'; +comment on column sys_client.id is '主键'; comment on column sys_client.client_id is '客户端id'; comment on column sys_client.client_key is '客户端key'; comment on column sys_client.client_secret is '客户端秘钥'; diff --git a/script/sql/postgres/postgres_ry_vue_5.X.sql b/script/sql/postgres/postgres_ry_vue_5.X.sql index 2e92d4621..3160711c7 100644 --- a/script/sql/postgres/postgres_ry_vue_5.X.sql +++ b/script/sql/postgres/postgres_ry_vue_5.X.sql @@ -1188,7 +1188,7 @@ create table if not exists sys_oss_config ); comment on table sys_oss_config is '对象存储配置表'; -comment on column sys_oss_config.oss_config_id is '主建'; +comment on column sys_oss_config.oss_config_id is '主键'; comment on column sys_oss_config.tenant_id is '租户编码'; comment on column sys_oss_config.config_key is '配置key'; comment on column sys_oss_config.access_key is 'accessKey'; @@ -1238,7 +1238,7 @@ create table sys_client ( ); comment on table sys_client is '系统授权表'; -comment on column sys_client.id is '主建'; +comment on column sys_client.id is '主键'; comment on column sys_client.client_id is '客户端id'; comment on column sys_client.client_key is '客户端key'; comment on column sys_client.client_secret is '客户端秘钥'; diff --git a/script/sql/ry_vue_5.X.sql b/script/sql/ry_vue_5.X.sql index 618b6c7e2..d4b7c869b 100644 --- a/script/sql/ry_vue_5.X.sql +++ b/script/sql/ry_vue_5.X.sql @@ -817,7 +817,7 @@ create table sys_oss ( -- OSS对象存储动态配置表 -- ---------------------------- create table sys_oss_config ( - oss_config_id bigint(20) not null comment '主建', + oss_config_id bigint(20) not null comment '主键', tenant_id varchar(20) default '000000'comment '租户编号', config_key varchar(20) not null default '' comment '配置key', access_key varchar(255) default '' comment 'accessKey', diff --git a/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql b/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql index 16f075366..6401f9581 100644 --- a/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql +++ b/script/sql/sqlserver/sqlserver_ry_vue_5.X.sql @@ -2988,7 +2988,7 @@ ON [PRIMARY] GO EXEC sp_addextendedproperty - 'MS_Description', N'主建', + 'MS_Description', N'主键', 'SCHEMA', N'dbo', 'TABLE', N'sys_oss_config', 'COLUMN', N'oss_config_id' @@ -3150,7 +3150,7 @@ ON [PRIMARY] GO EXEC sp_addextendedproperty - 'MS_Description', N'主建', + 'MS_Description', N'主键', 'SCHEMA', N'dbo', 'TABLE', N'sys_client', 'COLUMN', N'id' diff --git a/script/sql/update/oracle/update_5.0-5.1.sql b/script/sql/update/oracle/update_5.0-5.1.sql index 363d4abab..09cfae825 100644 --- a/script/sql/update/oracle/update_5.0-5.1.sql +++ b/script/sql/update/oracle/update_5.0-5.1.sql @@ -98,7 +98,7 @@ create table sys_client ( alter table sys_client add constraint pk_sys_client primary key (id); comment on table sys_client is '系统授权表'; -comment on column sys_client.id is '主建'; +comment on column sys_client.id is '主键'; comment on column sys_client.client_id is '客户端id'; comment on column sys_client.client_key is '客户端key'; comment on column sys_client.client_secret is '客户端秘钥'; diff --git a/script/sql/update/postgres/update_5.0-5.1.sql b/script/sql/update/postgres/update_5.0-5.1.sql index fa2eb3e72..f5f0a5c7a 100644 --- a/script/sql/update/postgres/update_5.0-5.1.sql +++ b/script/sql/update/postgres/update_5.0-5.1.sql @@ -97,7 +97,7 @@ create table sys_client ( ); comment on table sys_client is '系统授权表'; -comment on column sys_client.id is '主建'; +comment on column sys_client.id is '主键'; comment on column sys_client.client_id is '客户端id'; comment on column sys_client.client_key is '客户端key'; comment on column sys_client.client_secret is '客户端秘钥'; diff --git a/script/sql/update/sqlserver/update_5.0-5.1.sql b/script/sql/update/sqlserver/update_5.0-5.1.sql index 605f02ff8..bde3813ac 100644 --- a/script/sql/update/sqlserver/update_5.0-5.1.sql +++ b/script/sql/update/sqlserver/update_5.0-5.1.sql @@ -250,7 +250,7 @@ ON [PRIMARY] GO EXEC sp_addextendedproperty -'MS_Description', N'主建', +'MS_Description', N'主键', 'SCHEMA', N'dbo', 'TABLE', N'sys_client', 'COLUMN', N'id' From ea5d657e3177df33c306734e7516703fb60af101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 11 May 2024 19:52:33 +0800 Subject: [PATCH 38/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E8=B4=A6=E5=8F=B7=E5=8F=AF=E4=BB=A5=E8=A2=AB=E5=90=8C?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=94=A8=E6=88=B7=E5=A4=9A=E6=AC=A1=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/web/service/SysLoginService.java | 13 ++++++++++--- .../org/dromara/system/domain/bo/SysSocialBo.java | 6 +++--- .../dromara/system/service/ISysSocialService.java | 6 ++---- .../system/service/impl/SysSocialServiceImpl.java | 10 ++++++++-- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java index b2c9d3a6b..243d68518 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java @@ -5,6 +5,7 @@ import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.lock.annotation.Lock4j; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthUser; @@ -64,20 +65,24 @@ public class SysLoginService { * 绑定第三方用户 * * @param authUserData 授权响应实体 - * @return 统一响应实体 */ + @Lock4j public void socialRegister(AuthUser authUserData) { String authId = authUserData.getSource() + authUserData.getUuid(); // 第三方用户信息 SysSocialBo bo = BeanUtil.toBean(authUserData, SysSocialBo.class); BeanUtil.copyProperties(authUserData.getToken(), bo); - bo.setUserId(LoginHelper.getUserId()); + Long userId = LoginHelper.getUserId(); + bo.setUserId(userId); bo.setAuthId(authId); bo.setOpenId(authUserData.getUuid()); bo.setUserName(authUserData.getUsername()); bo.setNickName(authUserData.getNickname()); // 查询是否已经绑定用户 - List list = sysSocialService.selectByAuthId(authId); + SysSocialBo params = new SysSocialBo(); + params.setUserId(userId); + params.setSource(bo.getSource()); + List list = sysSocialService.queryList(params); if (CollUtil.isEmpty(list)) { // 没有绑定用户, 新增用户信息 sysSocialService.insertByBo(bo); @@ -85,6 +90,8 @@ public class SysLoginService { // 更新用户信息 bo.setId(list.get(0).getId()); sysSocialService.updateByBo(bo); + // 如果要绑定的平台账号已经被绑定过了 是否抛异常自行决断 + // throw new ServiceException("此平台账号已经被绑定!"); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java index 7784271bc..cede1e945 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java @@ -29,9 +29,9 @@ public class SysSocialBo extends TenantEntity { private Long id; /** - * 的唯一ID + * 认证唯一ID */ - @NotBlank(message = "的唯一ID不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotBlank(message = "认证唯一ID不能为空", groups = { AddGroup.class, EditGroup.class }) private String authId; /** @@ -64,7 +64,7 @@ public class SysSocialBo extends TenantEntity { /** * 用户的 ID */ - @NotBlank(message = "用户的 ID不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotBlank(message = "用户的ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long userId; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java index d5702c94a..cc7016e42 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java @@ -21,7 +21,7 @@ public interface ISysSocialService { /** * 查询社会化关系列表 */ - List queryList(); + List queryList(SysSocialBo bo); /** * 查询社会化关系列表 @@ -45,9 +45,7 @@ public interface ISysSocialService { /** - * 根据 authId 查询 SysSocial 表和 SysUser 表,返回 SysSocialAuthResult 映射的对象 - * @param authId 认证ID - * @return SysSocial + * 根据 authId 查询 */ List selectByAuthId(String authId); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java index aa86ae113..9c54cbc81 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java @@ -1,8 +1,10 @@ package org.dromara.system.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; import org.dromara.system.domain.SysSocial; import org.dromara.system.domain.bo.SysSocialBo; import org.dromara.system.domain.vo.SysSocialVo; @@ -37,8 +39,12 @@ public class SysSocialServiceImpl implements ISysSocialService { * 授权列表 */ @Override - public List queryList() { - return baseMapper.selectVoList(); + public List queryList(SysSocialBo bo) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .eq(ObjectUtil.isNotNull(bo.getUserId()), SysSocial::getUserId, bo.getUserId()) + .eq(StringUtils.isNotBlank(bo.getAuthId()), SysSocial::getAuthId, bo.getAuthId()) + .eq(StringUtils.isNotBlank(bo.getSource()), SysSocial::getSource, bo.getSource()); + return baseMapper.selectVoList(lqw); } @Override