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}
+
+
+