流程集成飞书推送待办

This commit is contained in:
梁琦涛
2024-07-29 18:53:26 +08:00
parent dc5a6a88bd
commit b8ea5f5b5e
8 changed files with 60 additions and 25 deletions
@@ -23,6 +23,8 @@ public class UnifiedTodoVO {
private String processDefinitionId; private String processDefinitionId;
@ApiModelProperty(value = "0:待办,2:已办,4:办结,8:待阅,10:已阅") @ApiModelProperty(value = "0:待办,2:已办,4:办结,8:待阅,10:已阅")
private String isRemark; private String isRemark;
@ApiModelProperty(value = "0:待办,2:已办,3:转办,4:办结")
private String isStatus;
@ApiModelProperty(value = "转办时用") @ApiModelProperty(value = "转办时用")
private String toUserId; private String toUserId;
@ApiModelProperty(value = "发送时的时间") @ApiModelProperty(value = "发送时的时间")
@@ -349,6 +349,9 @@ public class CommonConstant {
public static final String TODO_TYPE_0 = "0"; public static final String TODO_TYPE_0 = "0";
//已办 //已办
public static final String TODO_TYPE_2 = "2"; public static final String TODO_TYPE_2 = "2";
//转办
public static final String TODO_TYPE_3 = "3";
//办结 //办结
public static final String TODO_TYPE_4 = "4"; public static final String TODO_TYPE_4 = "4";
} }
@@ -4,6 +4,8 @@ import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.dto.message.UnifiedTodoVO; import com.jero.common.api.dto.message.UnifiedTodoVO;
import com.jero.common.constant.CommonConstant; import com.jero.common.constant.CommonConstant;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.CommitFlagEnum; import com.jero.modules.activiti.enums.CommitFlagEnum;
@@ -11,13 +13,12 @@ import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.docking.feishu.dto.InstanceDto; import com.jero.modules.docking.feishu.dto.InstanceDto;
import com.jero.modules.docking.feishu.service.IFeiShuDockingService; import com.jero.modules.docking.feishu.service.IFeiShuDockingService;
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
import com.jero.modules.docking.hiwork.service.ISendFeiShuService; import com.jero.modules.docking.hiwork.service.ISendFeiShuService;
import com.jero.modules.docking.hiwork.service.LawsUnifiedTodoLogService;
import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -35,22 +36,28 @@ import java.util.Objects;
@Service @Service
public class SendFeiShuServiceImpl implements ISendFeiShuService { public class SendFeiShuServiceImpl implements ISendFeiShuService {
@Resource
private ISysUserService sysUserService;
@Resource @Resource
private ProcessApprovalRecordService processApprovalRecordService; private ProcessApprovalRecordService processApprovalRecordService;
@Resource @Resource
private ProcessAllService processAllService; private ProcessAllService processAllService;
@Resource @Resource
private LawsUnifiedTodoLogService unifiedTodoLogService; private ISysUserService sysUserService;
@Resource @Resource
private IFeiShuDockingService feiShuDockingService; private IFeiShuDockingService feiShuDockingService;
@Resource
private ISysBaseAPI sysBaseAPI;
@Value("${feishu.isSendStatus}") @Value("${feishu.isSendStatus}")
private boolean isSendStatus; private boolean isSendStatus;
@Value("${feishu.redirect_prefix}") @Value("${feishu.promoter_pc_link}")
private String redirectPrefix; private String promoterPcLink;
@Value("${feishu.review_pc_link}")
private String reviewPcLink;
@Value("${feishu.promoter_mobile_link}")
private String promoterMobileLink;
@Value("${feishu.review_mobile_link}")
private String reviewMobileLink;
/** /**
* @Author: liao * @Author: liao
@@ -66,6 +73,10 @@ public class SendFeiShuServiceImpl implements ISendFeiShuService {
if(CollectionUtils.isEmpty(unifiedTodoVOList)){ if(CollectionUtils.isEmpty(unifiedTodoVOList)){
return; return;
} }
sendData(unifiedTodoVOList);
}
private void sendData(List<UnifiedTodoVO> unifiedTodoVOList){
for (UnifiedTodoVO unifiedTodoVO : unifiedTodoVOList) { for (UnifiedTodoVO unifiedTodoVO : unifiedTodoVOList) {
ProcessApprovalRecord processApprovalRecord = ProcessApprovalRecord processApprovalRecord =
@@ -81,21 +92,21 @@ public class SendFeiShuServiceImpl implements ISendFeiShuService {
break; break;
} }
String userId; String userId;
if (unifiedTodoVO.getToUserId() == null){ if (StringUtils.isEmpty(unifiedTodoVO.getToUserId())){
userId = processApprovalRecord.getUserId(); userId = processApprovalRecord.getUserId();
}else { }else {
userId = unifiedTodoVO.getToUserId(); userId = unifiedTodoVO.getToUserId();
} }
String date = DateUtil.formatDateTime(new Date()); String transferTaskId = processApprovalRecord.getTransferTaskId();
SysUser sysUser = sysUserService.getById(userId);
String noticeTitle = processApprovalRecord.getTaskName() + "(" + sysUser.getRealname() + " " + date + ")";
String taskId = processApprovalRecord.getTaskId(); String taskId = processApprovalRecord.getTaskId();
InstanceDto instanceDto = new InstanceDto(); InstanceDto instanceDto = new InstanceDto();
instanceDto.setPromoterUserId(processAll.getCreateUserId()); instanceDto.setPromoterUserId(processAll.getCreateUserId());
instanceDto.setReviewedIds(userId); instanceDto.setReviewedIds(userId);
instanceDto.setTitle(noticeTitle); String title = sysBaseAPI.translateDict("prc_type",String.valueOf(processAll.getPrcType()));
instanceDto.setTitle(title);
instanceDto.setProcessType(processAll.getPrcType());
instanceDto.setProcessInstanceId(processApprovalRecord.getProcessInstanceId()); instanceDto.setProcessInstanceId(processApprovalRecord.getProcessInstanceId());
instanceDto.setTaskIds(taskId); instanceDto.setTaskIds(StringUtils.isBlank(transferTaskId) ? taskId : transferTaskId);
// PENDING 审批中 APPROVED: 审批流程结束,结果为同意 REJECTED: 审批流程结束,结果为拒绝 // PENDING 审批中 APPROVED: 审批流程结束,结果为同意 REJECTED: 审批流程结束,结果为拒绝
// CANCELED 审批发起人撤回 DELETED: 审批被删除 HIDDEN 状态隐藏(不显示状态) TERMINATED:审批终止 // CANCELED 审批发起人撤回 DELETED: 审批被删除 HIDDEN 状态隐藏(不显示状态) TERMINATED:审批终止
@@ -103,21 +114,23 @@ public class SendFeiShuServiceImpl implements ISendFeiShuService {
String status = ""; String status = "";
String instanceStatus = ""; String instanceStatus = "";
//PENDING:待审批 APPROVED:任务同意 REJECTED:任务拒绝 TRANSFERRED:任务转交 //PENDING:待审批 APPROVED:任务同意 REJECTED:任务拒绝 TRANSFERRED:任务转交
switch (unifiedTodoVO.getIsRemark()){ switch (unifiedTodoVO.getIsStatus()){
// 0待办,2已办,4办结 // 0待办,2已办,4办结
case CommonConstant.TODO_TYPE_0: status = instanceStatus = "PENDING"; break; case CommonConstant.TODO_TYPE_0: status = instanceStatus = "PENDING";
break;
default: status = instanceStatus = default: status = instanceStatus =
Objects.equals(processApprovalRecord.getCommitFlag(), Objects.equals(processApprovalRecord.getCommitFlag(),
CommitFlagEnum.PASS.getValue()) ? "APPROVED" : "REJECTED"; break; CommitFlagEnum.PASS.getValue()) ? "APPROVED" : "REJECTED";
break;
} }
instanceDto.setInstanceStatus(instanceStatus); instanceDto.setInstanceStatus(instanceStatus);
instanceDto.setTaskStatus(status); instanceDto.setTaskStatus(status);
instanceDto.setPromoterPcLink(redirectPrefix + "/workCenter/processCenter/processCenter"); instanceDto.setPromoterPcLink(promoterPcLink);
instanceDto.setReviewPcLink(redirectPrefix + "/workCenter/processCenter/processCenter"); instanceDto.setReviewPcLink(reviewPcLink);
// todo 移动端跳转地址 // todo 移动端跳转地址
instanceDto.setPromoterMobileLink(redirectPrefix + "/workCenter/processCenter/processCenter"); instanceDto.setPromoterMobileLink(promoterMobileLink);
instanceDto.setReviewMobileLink(redirectPrefix + "/workCenter/processCenter/processCenter"); instanceDto.setReviewMobileLink(reviewMobileLink);
feiShuDockingService.synchronizeApprovalInstance(instanceDto); feiShuDockingService.synchronizeApprovalInstance(instanceDto);
} }
} }
@@ -204,10 +204,11 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI {
if (StrUtil.isNotBlank(processAll.getProjectId())){ if (StrUtil.isNotBlank(processAll.getProjectId())){
projectId = processAll.getProjectId(); projectId = processAll.getProjectId();
} }
String transferTaskId = processApprovalRecord.getTransferTaskId();
String url = hiworkFontUrl String url = hiworkFontUrl
.replace("{projectId}",projectId) .replace("{projectId}",projectId)
.replace("{taskName}",processApprovalRecord.getTaskName()) .replace("{taskName}",processApprovalRecord.getTaskName())
.replace("{taskId}", taskId) .replace("{taskId}", StringUtils.isBlank(transferTaskId) ? taskId : transferTaskId)
.replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId()) .replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId())
.replace("{nodeId}",processApprovalRecord.getNodeId()); .replace("{nodeId}",processApprovalRecord.getNodeId());
// 跳转链接 // 跳转链接
@@ -217,7 +218,7 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI {
String appUrl = hiworkFontAppUrl String appUrl = hiworkFontAppUrl
.replace("{projectId}",projectId) .replace("{projectId}",projectId)
.replace("{taskName}",processApprovalRecord.getTaskName()) .replace("{taskName}",processApprovalRecord.getTaskName())
.replace("{taskId}", taskId) .replace("{taskId}", StringUtils.isBlank(transferTaskId) ? taskId : transferTaskId)
.replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId()) .replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId())
.replace("{nodeId}",processApprovalRecord.getNodeId()); .replace("{nodeId}",processApprovalRecord.getNodeId());
String appBusinessLink = appUrl.replace("{url}", Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType()))); String appBusinessLink = appUrl.replace("{url}", Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType())));
@@ -213,4 +213,12 @@ public class ProcessApprovalRecord {
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty(value = "快照Id") @ApiModelProperty(value = "快照Id")
private String snapshotId; private String snapshotId;
/**
* 转办任务id
*/
@TableField(value = "transfer_task_id")
@ApiModelProperty(value = "转办任务id")
private String transferTaskId;
} }
@@ -192,6 +192,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
unifiedTodoVO.setRecordId(approvalRecord.getId()); unifiedTodoVO.setRecordId(approvalRecord.getId());
unifiedTodoVO.setProcessDefinitionId(processDefinitionId); unifiedTodoVO.setProcessDefinitionId(processDefinitionId);
unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_0); unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_0);
unifiedTodoVO.setIsStatus(CommonConstant.TODO_TYPE_0);
list.add(unifiedTodoVO); list.add(unifiedTodoVO);
pushWorkflowIntegrationAPI.sendTodoTask(list); pushWorkflowIntegrationAPI.sendTodoTask(list);
} }
@@ -221,14 +222,21 @@ public class MyGlobalEventListener implements ActivitiEventListener {
UnifiedTodoVO unifiedTodoVO = new UnifiedTodoVO(); UnifiedTodoVO unifiedTodoVO = new UnifiedTodoVO();
unifiedTodoVO.setRecordId(approvalRecord.getId()); unifiedTodoVO.setRecordId(approvalRecord.getId());
unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_2); unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_2);
unifiedTodoVO.setIsStatus(CommonConstant.TODO_TYPE_3);
unifiedTodoVO.setProcessDefinitionId(processDefinitionId); unifiedTodoVO.setProcessDefinitionId(processDefinitionId);
list.add(unifiedTodoVO); list.add(unifiedTodoVO);
pushWorkflowIntegrationAPI.sendTodoTask(list); pushWorkflowIntegrationAPI.sendTodoTask(list);
//更新转办任务id
LambdaUpdateWrapper<ProcessApprovalRecord> update = new LambdaUpdateWrapper<>();
update.eq(ProcessApprovalRecord::getTaskId,taskId);
update.set(ProcessApprovalRecord::getTransferTaskId,taskId+"_"+System.currentTimeMillis());
recordService.update(update);
// 生成被转办人的待办 // 生成被转办人的待办
list.clear(); list.clear();
unifiedTodoVO.setToUserId(assignee); unifiedTodoVO.setToUserId(assignee);
unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_0); unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_0);
unifiedTodoVO.setIsStatus(CommonConstant.TODO_TYPE_0);
list.add(unifiedTodoVO); list.add(unifiedTodoVO);
pushWorkflowIntegrationAPI.sendTodoTask(list); pushWorkflowIntegrationAPI.sendTodoTask(list);
} }
@@ -315,6 +323,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
unifiedTodoVO.setRecordId(approvalRecord.getId()); unifiedTodoVO.setRecordId(approvalRecord.getId());
unifiedTodoVO.setProcessDefinitionId(processDefinitionId); unifiedTodoVO.setProcessDefinitionId(processDefinitionId);
unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_2); unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_2);
unifiedTodoVO.setIsStatus(CommonConstant.TODO_TYPE_2);
list.add(unifiedTodoVO); list.add(unifiedTodoVO);
pushWorkflowIntegrationAPI.sendTodoTask(list); pushWorkflowIntegrationAPI.sendTodoTask(list);
} }
@@ -445,6 +454,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
unifiedTodoVO.setRecordId(approvalRecord.getId()); unifiedTodoVO.setRecordId(approvalRecord.getId());
unifiedTodoVO.setProcessDefinitionId(processDefinitionId); unifiedTodoVO.setProcessDefinitionId(processDefinitionId);
unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_2); unifiedTodoVO.setIsRemark(CommonConstant.TODO_TYPE_2);
unifiedTodoVO.setIsStatus(CommonConstant.TODO_TYPE_2);
list.add(unifiedTodoVO); list.add(unifiedTodoVO);
} }
pushWorkflowIntegrationAPI.sendTodoTask(list); pushWorkflowIntegrationAPI.sendTodoTask(list);
@@ -80,7 +80,6 @@ public class ProcessMarketStandardReleaseServiceImpl extends ServiceImpl<Process
private SendMessageAPI sendMessageAPI; private SendMessageAPI sendMessageAPI;
@Override @Override
@Transactional(rollbackFor = JeroBootException.class)
public void startProcess(ProcessInfoVO<ProcessMarketStandardRelease> processInfoVO) { public void startProcess(ProcessInfoVO<ProcessMarketStandardRelease> processInfoVO) {
// 验证是否已发起流程 // 验证是否已发起流程
checkProcessStatus(processInfoVO.getBusinessInfoDTO().getManifestId()); checkProcessStatus(processInfoVO.getBusinessInfoDTO().getManifestId());
@@ -80,7 +80,6 @@ public class ProcessNewStandardImportServiceImpl extends ServiceImpl<ProcessNewS
private ProcessEngine processEngine; private ProcessEngine processEngine;
@Override @Override
@Transactional(rollbackFor = JeroBootException.class)
public void startProcess(ProcessInfoVO<ProcessNewStandardImport> processInfoVO) { public void startProcess(ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
// 流程Key // 流程Key
String processDefinitionKey = ProcessType.NEW_STANDARD_IMPORT.getProcessKey(); String processDefinitionKey = ProcessType.NEW_STANDARD_IMPORT.getProcessKey();