流程集成飞书推送待办

This commit is contained in:
梁琦涛
2024-07-29 13:51:39 +08:00
parent 2b2a8a7ddf
commit 944902d1b7
7 changed files with 202 additions and 2 deletions
@@ -69,6 +69,7 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService {
private ISysRoleService sysRoleService;
@Resource
private LawsUnifiedTodoLogService lawsUnifiedTodoLogService;
@Resource
private CommonAPI commonAPI;
@Value("${feishu.app_id}")
private String appId;
@@ -491,7 +492,7 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService {
private void logMessage(String dto, JSONObject jsonResponse, String url, Integer messageType) {
LawsUnifiedTodoLog logEntry = new LawsUnifiedTodoLog();
logEntry.setJsonStr(dto);
logEntry.setResponseBody("success");
logEntry.setResponseBody(JSON.toJSONString(jsonResponse));
logEntry.setState("0".equals(jsonResponse.getString("code")) ? 1 : 2);
logEntry.setMessageType(messageType);
logEntry.setUrl(url);
@@ -0,0 +1,31 @@
package com.jero.modules.docking.hiwork.controller;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.api.vo.Result;
import com.jero.modules.docking.hiwork.service.impl.HiworkService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author liJiaRao
* @date 2024-03-01 14:01
*/
@RestController
@RequestMapping("/hiWorkOa")
@Slf4j
public class HiWorkOaController {
@Resource
private HiworkService hiworkService;
@ApiOperation("获取操作失败流程数据")
@PostMapping("/getSendOaErrorData")
public Result<?> getSendOaErrorData(@RequestBody JSONObject jsonObject){
return hiworkService.getSendOaErrorData(jsonObject);
}
}
@@ -0,0 +1,19 @@
package com.jero.modules.docking.hiwork.service;
import com.jero.common.api.dto.message.UnifiedTodoVO;
import java.util.List;
/**
* @Author: liao
* @Date: 2023/10/16 15:18
* @Description: 统一消息集成
*/
public interface ISendFeiShuService {
/**
* 发送飞书待办
* @param unifiedTodoVOList
*/
void sendTodoTask(List<UnifiedTodoVO> unifiedTodoVOList);
}
@@ -2,14 +2,19 @@ package com.jero.modules.docking.hiwork.service.impl;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.modules.docking.hiwork.entity.HiworkUserInfo;
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
import com.jero.modules.docking.hiwork.service.LawsUnifiedTodoLogService;
import com.jero.modules.system.service.ILoginService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author liJiaRao
@@ -20,6 +25,8 @@ import javax.annotation.Resource;
public class HiworkService {
@Resource
private ILoginService loginService;
@Resource
private LawsUnifiedTodoLogService lawsUnifiedTodoLogService;
@Value("${hiwork.appkey}")
private String appkey;
@@ -48,4 +55,16 @@ public class HiworkService {
log.info("userid:"+userid);
return loginService.loginByUserName(userid);
}
public Result<?> getSendOaErrorData(JSONObject jsonObject){
LambdaQueryWrapper<LawsUnifiedTodoLog> queryLawsUnifiedTodoLog = new LambdaQueryWrapper<>();
queryLawsUnifiedTodoLog.eq(LawsUnifiedTodoLog::getMessageType,1);
queryLawsUnifiedTodoLog.eq(LawsUnifiedTodoLog::getState,2);
List<LawsUnifiedTodoLog> listLawsUnifiedTodoLog = lawsUnifiedTodoLogService.list(queryLawsUnifiedTodoLog);
if(CollectionUtils.isEmpty(listLawsUnifiedTodoLog)){
return Result.OK();
}
return Result.OK();
}
}
@@ -0,0 +1,124 @@
package com.jero.modules.docking.hiwork.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.dto.message.UnifiedTodoVO;
import com.jero.common.constant.CommonConstant;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.docking.feishu.dto.InstanceDto;
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.LawsUnifiedTodoLogService;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @Author: liao
* @Date: 2023/10/13 14:23
* @Description: 待办
*/
@Slf4j
@Service
public class SendFeiShuServiceImpl implements ISendFeiShuService {
@Resource
private ISysUserService sysUserService;
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private ProcessAllService processAllService;
@Resource
private LawsUnifiedTodoLogService unifiedTodoLogService;
@Resource
private IFeiShuDockingService feiShuDockingService;
@Value("${feishu.isSendStatus}")
private boolean isSendStatus;
@Value("${feishu.redirect_prefix}")
private String redirectPrefix;
/**
* @Author: liao
* @Date: 2023/10/13 15:12
* @Description: 统一待办集成
*
* @return*/
@Override
public void sendTodoTask(List<UnifiedTodoVO> unifiedTodoVOList) {
if(!isSendStatus){
return;
}
if(CollectionUtils.isEmpty(unifiedTodoVOList)){
return;
}
for (UnifiedTodoVO unifiedTodoVO : unifiedTodoVOList) {
ProcessApprovalRecord processApprovalRecord =
processApprovalRecordService.getById(unifiedTodoVO.getRecordId());
if(Objects.isNull(processApprovalRecord)){
break;
}
LambdaQueryWrapper<ProcessAll> queryProcessAll = new LambdaQueryWrapper<>();
queryProcessAll.eq(ProcessAll::getProcessDefinitionId,unifiedTodoVO.getProcessDefinitionId());
queryProcessAll.eq(ProcessAll::getProcessInstanceId,processApprovalRecord.getProcessInstanceId());
ProcessAll processAll = processAllService.getOne(queryProcessAll,false);
if(Objects.isNull(processAll)){
break;
}
String userId;
if (unifiedTodoVO.getToUserId() == null){
userId = processApprovalRecord.getUserId();
}else {
userId = unifiedTodoVO.getToUserId();
}
String date = DateUtil.formatDateTime(new Date());
SysUser sysUser = sysUserService.getById(userId);
String noticeTitle = processApprovalRecord.getTaskName() + "(" + sysUser.getRealname() + " " + date + ")";
String taskId = processApprovalRecord.getTaskId();
InstanceDto instanceDto = new InstanceDto();
instanceDto.setPromoterUserId(processAll.getCreateUserId());
instanceDto.setReviewedIds(userId);
instanceDto.setTitle(noticeTitle);
instanceDto.setProcessInstanceId(processApprovalRecord.getProcessInstanceId());
instanceDto.setTaskIds(taskId);
// PENDING 审批中 APPROVED: 审批流程结束,结果为同意 REJECTED: 审批流程结束,结果为拒绝
// CANCELED 审批发起人撤回 DELETED: 审批被删除 HIDDEN 状态隐藏(不显示状态) TERMINATED:审批终止
instanceDto.setInstanceStartTime(processAll.getReceivedTaskTime());
String status = "";
String instanceStatus = "";
//PENDING:待审批 APPROVED:任务同意 REJECTED:任务拒绝 TRANSFERRED:任务转交
switch (unifiedTodoVO.getIsRemark()){
// 0待办,2已办,4办结
case CommonConstant.TODO_TYPE_0: status = instanceStatus = "PENDING"; break;
default: status = instanceStatus =
Objects.equals(processApprovalRecord.getCommitFlag(),
CommitFlagEnum.PASS.getValue()) ? "APPROVED" : "REJECTED"; break;
}
instanceDto.setInstanceStatus(instanceStatus);
instanceDto.setTaskStatus(status);
instanceDto.setPromoterPcLink(redirectPrefix + "/workCenter/processCenter/processCenter");
instanceDto.setReviewPcLink(redirectPrefix + "/workCenter/processCenter/processCenter");
// todo 移动端跳转地址
instanceDto.setPromoterMobileLink(redirectPrefix + "/workCenter/processCenter/processCenter");
instanceDto.setReviewMobileLink(redirectPrefix + "/workCenter/processCenter/processCenter");
feiShuDockingService.synchronizeApprovalInstance(instanceDto);
}
}
}
@@ -20,6 +20,7 @@ import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
import com.jero.modules.docking.hiwork.entity.UnifiedTodo;
import com.jero.modules.docking.hiwork.service.ISendFeiShuService;
import com.jero.modules.docking.hiwork.service.LawsUnifiedTodoLogService;
import com.jero.modules.docking.hiwork.util.HiworkPostUtil;
import com.jero.modules.system.entity.SysUser;
@@ -61,6 +62,8 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI {
private RestTemplate restTemplate;
@Resource
private LawsUnifiedTodoLogService unifiedTodoLogService;
@Resource
private ISendFeiShuService sendFeiShuService;
@Value("${hiwork.ip}")
private String ip;
@@ -86,6 +89,9 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI {
* @return*/
@Override
public void sendTodoTask(List<UnifiedTodoVO> unifiedTodoVOList) {
// 发送飞书
sendFeiShuService.sendTodoTask(unifiedTodoVOList);
if(!isWorkflow){
return;
}
@@ -330,7 +330,7 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
LambdaQueryWrapper<ProcessNodeLink> queryProcessNodeLink = new LambdaQueryWrapper<>();
queryProcessNodeLink.eq(ProcessNodeLink::getProcessDefinitionId,processDefinitionId);
queryProcessNodeLink.eq(ProcessNodeLink::getProcessNodeId,processNode.getId());
queryProcessNodeLink.eq(ProcessNodeLink::getProcessDefinitionId, processDefinitionId);
queryProcessNodeLink.eq(ProcessNodeLink::getProcessInstanceId, processInstanceId);
queryProcessNodeLink.eq(ProcessNodeLink::getUserId,userId);
long l = processNodeLinkService.count(queryProcessNodeLink);
if(l > 0){