Compare commits

...

3 Commits

Author SHA1 Message Date
songgaoshuai
0dce571270 add 增加催办接口,调整消息发送 2025-07-22 11:46:04 +08:00
songgaoshuai
9375578925 add 增加修改流程变量接口 2025-07-22 10:39:17 +08:00
songgaoshuai
e19ccf5064 remove 删除无用导入 2025-07-22 09:49:40 +08:00
10 changed files with 193 additions and 4 deletions

View File

@ -13,6 +13,7 @@ import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.bo.FlowInvalidBo;
import org.dromara.workflow.domain.bo.FlowVariableBo;
import org.dromara.workflow.domain.vo.FlowInstanceVo;
import org.dromara.workflow.service.IFlwInstanceService;
import org.springframework.validation.annotation.Validated;
@ -142,6 +143,17 @@ public class FlwInstanceController extends BaseController {
return R.ok(flwInstanceService.instanceVariable(instanceId));
}
/**
* 修改流程变量
*
* @param bo 参数
*/
@RepeatSubmit()
@PutMapping("/updateVariable")
public R<Void> updateVariable(@Validated @RequestBody FlowVariableBo bo) {
return toAjax(flwInstanceService.updateVariable(bo));
}
/**
* 作废流程
*

View File

@ -209,4 +209,16 @@ public class FlwTaskController extends BaseController {
return R.ok(flwTaskService.currentTaskAllUser(List.of(taskId)));
}
/**
* 催办任务
*
* @param bo 参数
* @return 结果
*/
@PostMapping("/urgeTask")
public R<Void> urgeTask(@RequestBody FlowUrgeTaskBo bo) {
return toAjax(flwTaskService.urgeTask(bo));
}
}

View File

@ -0,0 +1,38 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 流程变量参数
*
* @author may
*/
@Data
public class FlowUrgeTaskBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务id
*/
@NotNull(message = "任务id为空", groups = AddGroup.class)
private List<Long> taskIdList;
/**
* 消息类型
*/
private List<String> messageType;
/**
* 催办内容
*/
@NotNull(message = "催办内容为空", groups = AddGroup.class)
private String message;
}

View File

@ -0,0 +1,39 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程变量参数
*
* @author may
*/
@Data
public class FlowVariableBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
@NotNull(message = "流程实例id为空", groups = AddGroup.class)
private Long instanceId;
/**
* 流程变量key
*/
@NotNull(message = "流程变量key为空", groups = AddGroup.class)
private String key;
/**
* 流程变量value
*/
@NotNull(message = "流程变量value为空", groups = AddGroup.class)
private String value;
}

View File

@ -1,5 +1,7 @@
package org.dromara.workflow.service;
import org.dromara.common.core.domain.dto.UserDTO;
import java.util.List;
/**
@ -19,6 +21,16 @@ public interface IFlwCommonService {
*/
void sendMessage(String flowName, Long instId, List<String> messageType, String message);
/**
* 发送消息
*
* @param messageType 消息类型
* @param message 消息内容
* @param subject 邮件标题
* @param userList 接收用户
*/
void sendMessage(List<String> messageType, String message, String subject, List<UserDTO> userList);
/**
* 申请人节点编码
*

View File

@ -6,6 +6,7 @@ import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.bo.FlowInvalidBo;
import org.dromara.workflow.domain.bo.FlowVariableBo;
import org.dromara.workflow.domain.vo.FlowInstanceVo;
import java.util.List;
@ -125,6 +126,14 @@ public interface IFlwInstanceService {
*/
Map<String, Object> instanceVariable(Long instanceId);
/**
* 更新流程变量
*
* @param bo 参数
* @return 结果
*/
boolean updateVariable(FlowVariableBo bo);
/**
* 设置流程变量
*

View File

@ -198,4 +198,12 @@ public interface IFlwTaskService {
* @return 节点
*/
FlowNode getByNodeCode(String nodeCode, Long definitionId);
/**
* 催办任务
*
* @param bo 参数
* @return 结果
*/
boolean urgeTask(FlowUrgeTaskBo bo);
}

View File

@ -12,7 +12,6 @@ import org.dromara.common.mail.utils.MailUtils;
import org.dromara.common.sse.dto.SseMessageDto;
import org.dromara.common.sse.utils.SseMessageUtils;
import org.dromara.warm.flow.core.entity.Node;
import org.dromara.warm.flow.core.entity.Task;
import org.dromara.warm.flow.core.enums.SkipType;
import org.dromara.warm.flow.core.service.NodeService;
import org.dromara.warm.flow.orm.entity.FlowTask;
@ -22,7 +21,6 @@ import org.dromara.workflow.service.IFlwCommonService;
import org.dromara.workflow.service.IFlwTaskService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -57,6 +55,19 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
if (CollUtil.isEmpty(userList)) {
return;
}
sendMessage(messageType, message, "单据审批提醒", userList);
}
/**
* 发送消息
*
* @param messageType 消息类型
* @param message 消息内容
* @param subject 邮件标题
* @param userList 接收用户
*/
@Override
public void sendMessage(List<String> messageType, String message, String subject, List<UserDTO> userList) {
for (String code : messageType) {
MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code);
if (ObjectUtil.isEmpty(messageTypeEnum)) {
@ -70,7 +81,7 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
SseMessageUtils.publishMessage(dto);
}
case EMAIL_MESSAGE -> {
MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message);
MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), subject, message);
}
case SMS_MESSAGE -> {
//todo 短信发送
@ -78,7 +89,6 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
default -> throw new IllegalStateException("Unexpected value: " + messageTypeEnum);
}
}
}

View File

@ -39,6 +39,7 @@ import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.bo.FlowInvalidBo;
import org.dromara.workflow.domain.bo.FlowVariableBo;
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowInstanceVo;
import org.dromara.workflow.handler.FlowProcessEventHandler;
@ -356,6 +357,30 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
return Map.of("variableList", variableList, "variable", flowInstance.getVariable());
}
/**
* 设置流程变量
*
* @param bo 参数
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateVariable(FlowVariableBo bo) {
FlowInstance flowInstance = flowInstanceMapper.selectById(bo.getInstanceId());
if (flowInstance == null) {
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
}
try {
Map<String, Object> variableMap = new HashMap<>(Optional.ofNullable(flowInstance.getVariableMap()).orElse(Collections.emptyMap()));
variableMap.put(bo.getKey(), bo.getValue());
flowInstance.setVariable(FlowEngine.jsonConvert.objToStr(variableMap));
flowInstanceMapper.updateById(flowInstance);
} catch (Exception e) {
log.error("设置流程变量失败: {}", e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
return true;
}
/**
* 设置流程变量
*

View File

@ -721,4 +721,28 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
.eq(FlowNode::getDefinitionId, definitionId));
}
/**
* 催办任务
*
* @param bo 参数
*/
@Override
public boolean urgeTask(FlowUrgeTaskBo bo) {
try {
if (CollUtil.isEmpty(bo.getTaskIdList())) {
return false;
}
List<UserDTO> userList = this.currentTaskAllUser(bo.getTaskIdList());
if (CollUtil.isEmpty(userList)) {
return false;
}
List<String> messageType = bo.getMessageType();
String message = bo.getMessage();
flwCommonService.sendMessage(messageType, message, "单据审批提醒", userList);
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
return true;
}
}