diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 0e316c6..7a8622a 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -375,6 +375,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { try { page.getRecords().forEach(businessAlertVo->{ + businessAlertVo.setHandleType(null); if (businessAlertVo.getBusinessType() == 2){ businessAlertVo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlertVo.getImages(), 3600).toString()); }else { @@ -431,6 +432,10 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { wrapper.like("t.job_name", bo.getJobName()); } + if (ObjectUtil.isNotEmpty(bo.getLabelEn())){ + wrapper.eq("t.label_en", bo.getLabelEn()); + } + if (ObjectUtil.isNotEmpty(bo.getStartTime()) && ObjectUtil.isNotEmpty(bo.getEndTime())){ wrapper.ge("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getStartTime()); wrapper.le("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getEndTime()); diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml index aa031b0..66499c7 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml @@ -91,7 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - order by t.status,t.create_time desc + order by t.create_time desc + + + diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java index dcd758f..86c0ee1 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java @@ -1,5 +1,6 @@ package org.dromara.workflow.controller; +import cn.hutool.core.util.ObjectUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -50,6 +51,10 @@ public class FlwTaskController extends BaseController { @PostMapping("/startWorkFlow") public R startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(startProcessBo); + + //加签 + flwTaskService.addSign(startProcessReturn.getProcessInstanceId()); + return R.ok("提交成功", startProcessReturn); } @@ -62,7 +67,13 @@ public class FlwTaskController extends BaseController { @RepeatSubmit() @PostMapping("/completeTask") public R completeTask(@Validated(AddGroup.class) @RequestBody CompleteTaskBo completeTaskBo) { - return toAjax(flwTaskService.completeTask(completeTaskBo)); + String instanceId = flwTaskService.completeTask(completeTaskBo); + + if (ObjectUtil.isNotEmpty(instanceId)){ + return toAjax(flwTaskService.addSign(Long.valueOf(instanceId))); + } + + return toAjax(true); } /** diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java index fa31d6c..c349234 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java @@ -57,4 +57,6 @@ public interface FlwTaskMapper { */ Page getTaskCopyByPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + List getPermissionFlag(@Param("definitionId") Long definitionId, + @Param("nodeCode") String nodeCode, @Param("nodeType") Integer nodeType); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index 52b4a0b..fa12064 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java @@ -37,7 +37,7 @@ public interface IFlwTaskService { * @param completeTaskBo 办理任务参数 * @return 结果 */ - boolean completeTask(CompleteTaskBo completeTaskBo); + String completeTask(CompleteTaskBo completeTaskBo); /** * 查询当前用户的待办任务 @@ -223,4 +223,7 @@ public interface IFlwTaskService { * @return 节点 */ FlowNode getByNodeCode(String nodeCode, Long definitionId); + + Boolean addSign(Long instanceId); + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 189a594..71ec239 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -41,6 +42,7 @@ import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.enums.MessageTypeEnum; +import org.dromara.workflow.common.enums.TaskAssigneeEnum; import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.bo.*; @@ -159,7 +161,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { */ @Override @Transactional(rollbackFor = Exception.class) - public boolean completeTask(CompleteTaskBo completeTaskBo) { + public String completeTask(CompleteTaskBo completeTaskBo) { try { // 获取任务ID并查询对应的流程任务和实例信息 Long taskId = completeTaskBo.getTaskId(); @@ -217,7 +219,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } //设置下一环节处理人 setNextHandler(ins.getId()); - return true; + return String.valueOf(ins.getId()); } catch (Exception e) { log.error(e.getMessage(), e); throw new ServiceException(e.getMessage()); @@ -713,9 +715,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Task task = taskService.getById(taskId); FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId()); if ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) { - if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) { - throw new ServiceException(task.getNodeName() + "不是会签节点!"); - } +// if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) { +// throw new ServiceException(task.getNodeName() + "不是会签节点!"); +// } } // 设置任务状态并执行对应的任务操作 switch (taskOperation) { @@ -864,7 +866,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService { completeTaskBo.setTaskId(taskId); completeTaskBo.setMessageType(List.of(MessageTypeEnum.SYSTEM_MESSAGE.getCode())); IFlwTaskService service = applicationContext.getBean(IFlwTaskService.class); - return service.completeTask(completeTaskBo); + service.completeTask(completeTaskBo); + return true; } /** @@ -880,4 +883,72 @@ public class FlwTaskServiceImpl implements IFlwTaskService { .eq(FlowNode::getDefinitionId, definitionId)); } + @Override + public Boolean addSign(Long instanceId) { + try { + + List flowTasks = selectByInstId(instanceId); + FlowTask flowTask1 = flowTasks.getFirst(); + + //判断是否有人员,进行加签 + //获取当前任务的办理人 + List currentTaskUser = currentTaskAllUser(flowTask1.getId()); + + FlowTask flowTask = flowTaskMapper.selectById(flowTask1.getId()); + if (ObjectUtil.isNull(flowTask)) { + throw new ServiceException("流程任务不存在或任务已审批!"); + } + + Instance ins = insService.getById(flowTask.getInstanceId()); + + //根据配置的人员查询系统中的用户 + Long definitionId = ins.getDefinitionId(); + String nodeCode = ins.getNodeCode(); + Integer nodeType = ins.getNodeType(); + List permissionUser = this.flwTaskMapper.getPermissionFlag(definitionId,nodeCode,nodeType); + String first = permissionUser.getFirst(); + + List totalUser = new ArrayList<>(); + + if (ObjectUtil.isNotEmpty(first)){ + String[] split = first.split("@@"); + for (String handleFlag : split) { + if (!handleFlag.equals("${handler}")){ + List remoteUserVos = flwTaskAssigneeService.fetchUsersByStorageId(handleFlag); + totalUser.addAll(remoteUserVos); + } + } + } + + //比较差值 + List different = totalUser.stream() + .filter(user -> currentTaskUser.stream().noneMatch(u -> u.getUserId().equals(user.getUserId()))) + .toList(); + + List userIds = different.stream() + .map(RemoteUserVo::getUserId) + .distinct() + .map(String::valueOf) + .toList(); + + //加签 + if (ObjectUtil.isNotEmpty(userIds)){ + TaskOperationBo taskOperationBo = new TaskOperationBo(); + taskOperationBo.setUserIds(userIds); + taskOperationBo.setTaskId(flowTask1.getId()); + + IFlwTaskService flwTaskService = applicationContext.getBean(IFlwTaskService.class); + + flwTaskService.taskOperation(taskOperationBo,"addSignature"); + } + + return true; + + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage(), e); + return false; + } + } + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index d113438..85a0841 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java @@ -136,7 +136,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public boolean completeTask(RemoteCompleteTask completeTask) { - return flwTaskService.completeTask(BeanUtil.toBean(completeTask, CompleteTaskBo.class)); + return ObjectUtil.isNotEmpty(flwTaskService.completeTask(BeanUtil.toBean(completeTask, CompleteTaskBo.class))); } /** diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml index f539030..6110a55 100644 --- a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml @@ -112,4 +112,9 @@ ) t ${ew.getCustomSqlSegment} + + +