feat(bpm): 实现流程抄送处理功能

- 在控制器中新增处理当前用户待阅信息的接口
- 实现服务层处理抄送信息为已阅的逻辑
- 新增处理已完成请求的数据传输对象
- 修改接收时间戳字段类型为字符串
- 添加相关权限注解及接口文档说明
- 完善异常处理和日志记录机制
This commit is contained in:
2025-12-11 16:58:23 +08:00
parent 4a00c68bf8
commit 3bea2358fd
4 changed files with 84 additions and 6 deletions

View File

@@ -46,6 +46,6 @@ public class ProcessDoneRequestDTO {
* 接收时间戳
*/
@JsonProperty("receivets")
private Long receiveTs;
private String receiveTs;
}

View File

@@ -47,7 +47,7 @@ public class BpmProcessInstanceCopyController {
private IBpmTaskService bpmTaskService;
@PostMapping("/create")
@Operation(tags = "流程管理",summary = "抄送流程")
@Operation(tags = "流程管理", summary = "抄送流程")
// @PreAuthorize("@ss.hasPermission('bpm:process-instance-cc:create')")
public CommonResult<Boolean> createProcessInstanceCopy(@Valid @RequestBody BpmProcessInstanceCopyCreateReqVO createReqVO) {
processInstanceCopyService.createProcessInstanceCopy(getLoginUserId(), createReqVO);
@@ -55,7 +55,7 @@ public class BpmProcessInstanceCopyController {
}
@GetMapping("/my-page")
@Operation(tags = "流程管理",summary = "获得抄送流程分页列表")
@Operation(tags = "流程管理", summary = "获得抄送流程分页列表")
// @PreAuthorize("@ss.hasPermission('bpm:process-instance-cc:query')")
public CommonResult<PageResult<BpmProcessInstanceCopyPageItemRespVO>> getProcessInstanceCopyPage(
@Valid BpmProcessInstanceCopyMyPageReqVO pageReqVO) {
@@ -74,4 +74,11 @@ public class BpmProcessInstanceCopyController {
return success(BpmProcessInstanceCopyConvert.INSTANCE.convertPage(pageResult, taskNameMap, processNameMap, userMap));
}
@Operation(tags = "流程管理", summary = "处理当前用户待阅信息")
@PostMapping("/process-current-user-copy/{processInstanceId}")
public CommonResult<Boolean> processCurrentUserCopyInfo(@PathVariable String processInstanceId) {
boolean result = processInstanceCopyService.processCurrentUserCopyInfo(processInstanceId);
return success(result);
}
}

View File

@@ -37,4 +37,12 @@ public interface IBpmProcessInstanceCopyService {
*/
PageResult<BpmProcessInstanceCopyDO> getMyProcessInstanceCopyPage(Long userId,
BpmProcessInstanceCopyMyPageReqVO pageReqVO);
/**
* 处理当前用户待阅信息
*
* @param processInstanceId 流程实例ID
* @return 处理结果
*/
boolean processCurrentUserCopyInfo(String processInstanceId);
}

View File

@@ -9,6 +9,7 @@ import cn.hutool.core.util.StrUtil;
import com.jeelowcode.framework.utils.tool.spring.SpringUtils;
import com.jeelowcode.service.bpm.config.framework.portal.core.PortalRequest;
import com.jeelowcode.service.bpm.config.framework.portal.core.dto.PortalTodoResponseDTO;
import com.jeelowcode.service.bpm.config.framework.portal.core.dto.ProcessDoneRequestDTO;
import com.jeelowcode.service.bpm.config.framework.portal.core.dto.ReceiveCCRequestDTO;
import com.jeelowcode.service.system.api.IApiAdminUserApi;
import com.jeelowcode.service.system.dto.AdminUserRespDTO;
@@ -45,6 +46,7 @@ import java.util.stream.Collectors;
import static com.jeelowcode.tool.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.jeelowcode.tool.framework.common.util.json.JsonUtils.toJsonString;
import static com.jeelowcode.tool.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
/**
* 流程抄送 Service 实现类
@@ -189,4 +191,65 @@ public class BpmProcessInstanceCopyServiceImpl implements IBpmProcessInstanceCop
return processInstanceCopyMapper.selectPage(userId, pageReqVO);
}
@Override
public boolean processCurrentUserCopyInfo(String processInstanceId) {
// 获取当前登录用户ID
Long currentUserId = getLoginUserId();
// 查询当前用户是否有该流程实例的抄送信息
List<BpmProcessInstanceCopyDO> copyList = processInstanceCopyMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<BpmProcessInstanceCopyDO>()
.eq(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId)
.eq(BpmProcessInstanceCopyDO::getUserId, currentUserId)
);
// 如果没有查到抄送信息,则直接返回
if (CollUtil.isEmpty(copyList)) {
return false;
}
// 获取PortalRequest实例
PortalRequest portalRequest = SpringUtils.getBean(PortalRequest.class);
// 如果没有配置待办平台,则结束执行
if (!Objects.requireNonNull(portalRequest).available()) {
log.warn("[processCurrentUserCopyInfo][PortalRequest不可用]");
return false;
}
try {
// 遍历所有抄送信息调用PortalRequest处理待办为已办接口
for (BpmProcessInstanceCopyDO copy : copyList) {
// 获取流程实例信息
ProcessInstance processInstance = bpmProcessInstanceService.getProcessInstance(processInstanceId);
if (processInstance == null) {
log.warn("[processCurrentUserCopyInfo][流程实例不存在 processInstanceId({})]", processInstanceId);
continue;
}
// 获取用户信息
AdminUserRespDTO receiverUser = apiAdminUserApi.getUser(copy.getUserId());
AdminUserRespDTO startUser = apiAdminUserApi.getUser(copy.getStartUserId());
// 构建处理已完成请求参数
ProcessDoneRequestDTO requestDTO = new ProcessDoneRequestDTO()
.setFlowId(copy.getProcessInstanceId())
.setRequestName(copy.getProcessInstanceName() + "-" + startUser.getNickname() + "-" + DateUtil.formatDateTime(processInstance.getStartTime()))
.setWorkflowName(copy.getProcessInstanceName())
.setNodeName(copy.getTaskName())
.setReceiver(receiverUser.getUsername())
.setReceiveTs(String.valueOf(System.currentTimeMillis()));
// 调用处理待办为已办接口
PortalTodoResponseDTO response = portalRequest.processDoneRequest(requestDTO);
log.info("[processCurrentUserCopyInfo][处理待阅为已阅成功 response({})]", toJsonString(response));
}
return true;
} catch (Exception e) {
log.error("[processCurrentUserCopyInfo][处理待阅信息失败]", e);
return false;
}
}
}