添加oa推送补偿机制
This commit is contained in:
+1
@@ -20,6 +20,7 @@ public interface PushWorkflowIntegrationAPI {
|
|||||||
* @return*/
|
* @return*/
|
||||||
void sendTodoTask(List<UnifiedTodoVO> unifiedTodoVOList);
|
void sendTodoTask(List<UnifiedTodoVO> unifiedTodoVOList);
|
||||||
|
|
||||||
|
void sendTodoTaskMakeUpFor(List<UnifiedTodoVO> unifiedTodoVOList,String sendId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:
|
* @Author:
|
||||||
|
|||||||
+1
-7
@@ -50,16 +50,10 @@ public class SyncOaSendDataJob implements Job {
|
|||||||
List<UnifiedTodoVO> unifiedTodoVOList = JSON.parseObject(lawsUnifiedTodoLog.getJsonStr(),
|
List<UnifiedTodoVO> unifiedTodoVOList = JSON.parseObject(lawsUnifiedTodoLog.getJsonStr(),
|
||||||
new TypeReference<List<UnifiedTodoVO>>() {});
|
new TypeReference<List<UnifiedTodoVO>>() {});
|
||||||
try {
|
try {
|
||||||
pushWorkflowIntegrationAPI.sendTodoTask(unifiedTodoVOList);
|
pushWorkflowIntegrationAPI.sendTodoTaskMakeUpFor(unifiedTodoVOList, lawsUnifiedTodoLog.getId());
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
log.error("OA推送待办异常" + e.getMessage());
|
log.error("OA推送待办异常" + e.getMessage());
|
||||||
}
|
}
|
||||||
LambdaUpdateWrapper<LawsUnifiedTodoLog> updateWrapper = new LambdaUpdateWrapper<>();
|
|
||||||
updateWrapper.eq(LawsUnifiedTodoLog::getId,lawsUnifiedTodoLog.getId());
|
|
||||||
updateWrapper.set(LawsUnifiedTodoLog::getState,1);
|
|
||||||
updateWrapper.set(LawsUnifiedTodoLog::getCreateBy,"admin");
|
|
||||||
updateWrapper.set(LawsUnifiedTodoLog::getUpdateTime,new Date());
|
|
||||||
lawsUnifiedTodoLogService.update(updateWrapper);
|
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
log.error("OA推送待办定时推送异常" + e.getMessage());
|
log.error("OA推送待办定时推送异常" + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
+61
@@ -0,0 +1,61 @@
|
|||||||
|
package com.jero.modules.docking.hiwork.job;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.TypeReference;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.jero.common.api.PushWorkflowIntegrationAPI;
|
||||||
|
import com.jero.common.api.dto.message.UnifiedTodoVO;
|
||||||
|
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
|
||||||
|
import com.jero.modules.docking.hiwork.service.LawsUnifiedTodoLogService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.quartz.Job;
|
||||||
|
import org.quartz.JobExecutionContext;
|
||||||
|
import org.quartz.JobExecutionException;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 每天全量推送失败的待办
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class SyncOaSendDataMakeUpForJob implements Job {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private LawsUnifiedTodoLogService lawsUnifiedTodoLogService;
|
||||||
|
@Resource
|
||||||
|
private PushWorkflowIntegrationAPI pushWorkflowIntegrationAPI;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||||
|
QueryWrapper<LawsUnifiedTodoLog> queryLawsUnifiedTodoLog = new QueryWrapper<>();
|
||||||
|
queryLawsUnifiedTodoLog.eq("state","2");
|
||||||
|
queryLawsUnifiedTodoLog.eq("message_type","1");
|
||||||
|
queryLawsUnifiedTodoLog.and(o->o.eq("TIMESTAMPDIFF(MINUTE, create_time, NOW())",3).or()
|
||||||
|
.eq("TIMESTAMPDIFF(MINUTE, create_time, NOW())",5).or()
|
||||||
|
.eq("TIMESTAMPDIFF(MINUTE, create_time, NOW())", 10));
|
||||||
|
List<LawsUnifiedTodoLog> listLawsUnifiedTodoLog = lawsUnifiedTodoLogService.list(queryLawsUnifiedTodoLog);
|
||||||
|
if(CollectionUtils.isEmpty(listLawsUnifiedTodoLog)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (LawsUnifiedTodoLog lawsUnifiedTodoLog : listLawsUnifiedTodoLog) {
|
||||||
|
if(StringUtils.isBlank(lawsUnifiedTodoLog.getJsonStr())){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
log.info("发送id" + lawsUnifiedTodoLog.getId());
|
||||||
|
try {
|
||||||
|
List<UnifiedTodoVO> unifiedTodoVOList = JSON.parseObject(lawsUnifiedTodoLog.getJsonStr(),
|
||||||
|
new TypeReference<List<UnifiedTodoVO>>() {});
|
||||||
|
try {
|
||||||
|
pushWorkflowIntegrationAPI.sendTodoTaskMakeUpFor(unifiedTodoVOList, lawsUnifiedTodoLog.getId());
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("OA推送待办异常" + e.getMessage());
|
||||||
|
}
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("OA推送待办定时推送异常" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+15
-8
@@ -84,21 +84,28 @@ public class LawsUnifiedTodoLogServiceImpl extends ServiceImpl<LawsUnifiedTodoLo
|
|||||||
Integer messageType = lawsUnifiedTodoLogObj.getMessageType();
|
Integer messageType = lawsUnifiedTodoLogObj.getMessageType();
|
||||||
if (messageType == 1) { // 重发OA
|
if (messageType == 1) { // 重发OA
|
||||||
List<UnifiedTodoVO> unifiedTodoVOList = JSON.parseObject(jsonStr, new TypeReference<List<UnifiedTodoVO>>() {});
|
List<UnifiedTodoVO> unifiedTodoVOList = JSON.parseObject(jsonStr, new TypeReference<List<UnifiedTodoVO>>() {});
|
||||||
pushWorkflowIntegrationAPI.sendTodoTask(unifiedTodoVOList);
|
pushWorkflowIntegrationAPI.sendTodoTaskMakeUpFor(unifiedTodoVOList, lawsUnifiedTodoLogObj.getId());
|
||||||
}else if (messageType == 2) { // 重发飞书-待办
|
}else if (messageType == 2) { // 重发飞书-待办
|
||||||
InstanceDto instanceDto = JSON.parseObject(jsonStr, InstanceDto.class);
|
InstanceDto instanceDto = JSON.parseObject(jsonStr, InstanceDto.class);
|
||||||
feiShuDockingService.synchronizeApprovalInstance(instanceDto);
|
feiShuDockingService.synchronizeApprovalInstance(instanceDto);
|
||||||
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
LambdaUpdateWrapper<LawsUnifiedTodoLog> queryLawsUnifiedTodoLog = new LambdaUpdateWrapper<>();
|
||||||
|
queryLawsUnifiedTodoLog.eq(LawsUnifiedTodoLog::getId,lawsUnifiedTodoLog.getId());
|
||||||
|
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getState,1);
|
||||||
|
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getCreateBy,sysUser.getUsername());
|
||||||
|
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getUpdateTime,new Date());
|
||||||
|
update(queryLawsUnifiedTodoLog);
|
||||||
}else { // 重发飞书-消息
|
}else { // 重发飞书-消息
|
||||||
BotMessageDto botMessageDto = JSON.parseObject(jsonStr, BotMessageDto.class);
|
BotMessageDto botMessageDto = JSON.parseObject(jsonStr, BotMessageDto.class);
|
||||||
feiShuDockingService.sendHrefMessageByBot(botMessageDto);
|
feiShuDockingService.sendHrefMessageByBot(botMessageDto);
|
||||||
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
LambdaUpdateWrapper<LawsUnifiedTodoLog> queryLawsUnifiedTodoLog = new LambdaUpdateWrapper<>();
|
||||||
|
queryLawsUnifiedTodoLog.eq(LawsUnifiedTodoLog::getId,lawsUnifiedTodoLog.getId());
|
||||||
|
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getState,1);
|
||||||
|
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getCreateBy,sysUser.getUsername());
|
||||||
|
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getUpdateTime,new Date());
|
||||||
|
update(queryLawsUnifiedTodoLog);
|
||||||
}
|
}
|
||||||
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
LambdaUpdateWrapper<LawsUnifiedTodoLog> queryLawsUnifiedTodoLog = new LambdaUpdateWrapper<>();
|
|
||||||
queryLawsUnifiedTodoLog.eq(LawsUnifiedTodoLog::getId,lawsUnifiedTodoLog.getId());
|
|
||||||
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getState,1);
|
|
||||||
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getCreateBy,sysUser.getUsername());
|
|
||||||
queryLawsUnifiedTodoLog.set(LawsUnifiedTodoLog::getUpdateTime,new Date());
|
|
||||||
update(queryLawsUnifiedTodoLog);
|
|
||||||
return Result.OK("操作成功");
|
return Result.OK("操作成功");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+90
-61
@@ -116,7 +116,48 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI {
|
|||||||
log.info("统一待办推送入参" + jsonString);
|
log.info("统一待办推送入参" + jsonString);
|
||||||
ForkJoinPool pool = new ForkJoinPool();
|
ForkJoinPool pool = new ForkJoinPool();
|
||||||
CompletableFuture.runAsync(() -> {
|
CompletableFuture.runAsync(() -> {
|
||||||
push(ip + todoUrl,jsonString,reqJsonString, unifiedTodoList.get(0).getRequestname());
|
push(ip + todoUrl,jsonString,reqJsonString, unifiedTodoList.get(0).getRequestname(), null);
|
||||||
|
},pool);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("统一待办推送异常" + e);
|
||||||
|
}
|
||||||
|
long l1 = System.currentTimeMillis();
|
||||||
|
System.out.println("===========================OA" + (l1-l));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/10/13 15:12
|
||||||
|
* @Description: 统一待办集成
|
||||||
|
*
|
||||||
|
* @return*/
|
||||||
|
@Override
|
||||||
|
public void sendTodoTaskMakeUpFor(List<UnifiedTodoVO> unifiedTodoVOList,String sendId) {
|
||||||
|
if(!isWorkflow){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean successFlag = true;
|
||||||
|
if (CollectionUtils.isEmpty(unifiedTodoVOList)) {
|
||||||
|
return;
|
||||||
|
// throw new JeroBootException(ResultCommon.EMPTY_COMMON, "unifiedTodoVOList");
|
||||||
|
}
|
||||||
|
long l = System.currentTimeMillis();
|
||||||
|
String newDate = DateUtil.formatDateTime(new Date());
|
||||||
|
for (UnifiedTodoVO unifiedTodoVO : unifiedTodoVOList) {
|
||||||
|
String date = unifiedTodoVO.getDate();
|
||||||
|
if (StringUtils.isBlank(date)){
|
||||||
|
unifiedTodoVO.setDate(newDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
List<UnifiedTodo> unifiedTodoList = getHiworkTodos(unifiedTodoVOList);
|
||||||
|
String reqJsonString = JSONObject.toJSONString(unifiedTodoVOList);
|
||||||
|
String jsonString = JSONObject.toJSONString(unifiedTodoList);
|
||||||
|
log.info("统一待办推送入参" + jsonString);
|
||||||
|
ForkJoinPool pool = new ForkJoinPool();
|
||||||
|
CompletableFuture.runAsync(() -> {
|
||||||
|
push(ip + todoUrl,jsonString,reqJsonString, unifiedTodoList.get(0).getRequestname(),sendId);
|
||||||
},pool);
|
},pool);
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
log.error("统一待办推送异常" + e);
|
log.error("统一待办推送异常" + e);
|
||||||
@@ -134,73 +175,61 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI {
|
|||||||
System.out.println("===========================feishu" + (l1-l));
|
System.out.println("===========================feishu" + (l1-l));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void push(String url, String jsonString,String reqJsonString, String title) {
|
private void push(String url, String jsonString,String reqJsonString, String title,String sendId) {
|
||||||
// 设置最大重试次数
|
|
||||||
int maxRetries = 3;
|
|
||||||
// 当前重试次数
|
|
||||||
int retries = 0;
|
|
||||||
LawsUnifiedTodoLog lawsUnifiedTodoLog = new LawsUnifiedTodoLog();
|
LawsUnifiedTodoLog lawsUnifiedTodoLog = new LawsUnifiedTodoLog();
|
||||||
while (retries < maxRetries) {
|
log.info("==========OA调用");
|
||||||
log.info("==========OA调用");
|
// 远程调用
|
||||||
// 远程调用
|
try {
|
||||||
try {
|
sendData(url, jsonString, lawsUnifiedTodoLog);
|
||||||
HttpResponse execute = HttpRequest.post(url)
|
}catch (Exception e){
|
||||||
.header(Header.CONTENT_TYPE, "application/json;charset=UTF-8")
|
log.error("统一待办推送失败{}" + e.getMessage());
|
||||||
.body(jsonString)//表单内容
|
lawsUnifiedTodoLog.setState(2);
|
||||||
.timeout(3000)//超时,毫秒
|
lawsUnifiedTodoLog.setResponseBody(e.getMessage());
|
||||||
.execute();
|
|
||||||
log.info("==========OA调用成功");
|
|
||||||
if (execute.isOk()) {
|
|
||||||
String body = execute.body();
|
|
||||||
List<JSONObject> listJson = JSONArray.parseArray(body,JSONObject.class);
|
|
||||||
if(!CollectionUtils.isEmpty(listJson)) {
|
|
||||||
String operResult = String.valueOf(listJson.get(0).get("operResult"));
|
|
||||||
lawsUnifiedTodoLog.setResponseBody(body);
|
|
||||||
if (Objects.equals(operResult, "1")) {
|
|
||||||
log.info("统一待办推送成功");
|
|
||||||
lawsUnifiedTodoLog.setState(1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.info("统一待办推送失败{}",body);
|
|
||||||
lawsUnifiedTodoLog.setState(2);
|
|
||||||
retries++;
|
|
||||||
}else {
|
|
||||||
String body = execute.body();
|
|
||||||
lawsUnifiedTodoLog.setResponseBody(body);
|
|
||||||
List<JSONObject> listJson = JSONArray.parseArray(body,JSONObject.class);
|
|
||||||
if(!CollectionUtils.isEmpty(listJson)){
|
|
||||||
String operResult = String.valueOf(listJson.get(0).get("operResult"));
|
|
||||||
if (Objects.equals(operResult, "1")) {
|
|
||||||
log.info("统一待办推送成功");
|
|
||||||
lawsUnifiedTodoLog.setState(1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.info("统一待办推送失败{}",body);
|
|
||||||
lawsUnifiedTodoLog.setState(2);
|
|
||||||
retries++;
|
|
||||||
}
|
|
||||||
}catch (Exception e){
|
|
||||||
log.error("统一待办推送失败{}" + e.getMessage());
|
|
||||||
lawsUnifiedTodoLog.setState(2);
|
|
||||||
lawsUnifiedTodoLog.setResponseBody(e.getMessage());
|
|
||||||
retries++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
lawsUnifiedTodoLog.setId(sendId);
|
||||||
lawsUnifiedTodoLog.setUrl(url);
|
lawsUnifiedTodoLog.setUrl(url);
|
||||||
lawsUnifiedTodoLog.setJsonStr(reqJsonString);
|
lawsUnifiedTodoLog.setJsonStr(reqJsonString);
|
||||||
lawsUnifiedTodoLog.setMessageType(1);
|
lawsUnifiedTodoLog.setMessageType(1);
|
||||||
lawsUnifiedTodoLog.setTitle(title);
|
lawsUnifiedTodoLog.setTitle(title);
|
||||||
if(Objects.isNull(lawsUnifiedTodoLog.getState())){
|
unifiedTodoLogService.saveOrUpdate(lawsUnifiedTodoLog);
|
||||||
if (retries == maxRetries){
|
}
|
||||||
lawsUnifiedTodoLog.setState(2);
|
|
||||||
}else {
|
|
||||||
lawsUnifiedTodoLog.setState(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unifiedTodoLogService.add(lawsUnifiedTodoLog);
|
private void sendData(String url, String jsonString, LawsUnifiedTodoLog lawsUnifiedTodoLog) {
|
||||||
|
HttpResponse execute = HttpRequest.post(url)
|
||||||
|
.header(Header.CONTENT_TYPE, "application/json;charset=UTF-8")
|
||||||
|
.body(jsonString)//表单内容
|
||||||
|
.timeout(3000)//超时,毫秒
|
||||||
|
.execute();
|
||||||
|
log.info("==========OA调用成功");
|
||||||
|
if (execute.isOk()) {
|
||||||
|
String body = execute.body();
|
||||||
|
List<JSONObject> listJson = JSONArray.parseArray(body,JSONObject.class);
|
||||||
|
if(!CollectionUtils.isEmpty(listJson)) {
|
||||||
|
String operResult = String.valueOf(listJson.get(0).get("operResult"));
|
||||||
|
lawsUnifiedTodoLog.setResponseBody(body);
|
||||||
|
if (Objects.equals(operResult, "1")) {
|
||||||
|
log.info("统一待办推送成功");
|
||||||
|
lawsUnifiedTodoLog.setState(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("统一待办推送失败{}",body);
|
||||||
|
lawsUnifiedTodoLog.setState(2);
|
||||||
|
}else {
|
||||||
|
String body = execute.body();
|
||||||
|
lawsUnifiedTodoLog.setResponseBody(body);
|
||||||
|
List<JSONObject> listJson = JSONArray.parseArray(body,JSONObject.class);
|
||||||
|
if(!CollectionUtils.isEmpty(listJson)){
|
||||||
|
String operResult = String.valueOf(listJson.get(0).get("operResult"));
|
||||||
|
if (Objects.equals(operResult, "1")) {
|
||||||
|
log.info("统一待办推送成功");
|
||||||
|
lawsUnifiedTodoLog.setState(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("统一待办推送失败{}",body);
|
||||||
|
lawsUnifiedTodoLog.setState(2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
Reference in New Issue
Block a user