From 1b8ce155f25d65c6181fa70d33e22b756f263845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Thu, 26 Sep 2024 19:25:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0oa=E6=8E=A8=E9=80=81=E8=A1=A5?= =?UTF-8?q?=E5=81=BF=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/PushWorkflowIntegrationAPI.java | 1 + .../docking/hiwork/job/SyncOaSendDataJob.java | 8 +- .../job/SyncOaSendDataMakeUpForJob.java | 61 +++++++ .../impl/LawsUnifiedTodoLogServiceImpl.java | 23 ++- .../service/impl/UnifiedTodoServiceImpl.java | 151 +++++++++++------- 5 files changed, 168 insertions(+), 76 deletions(-) create mode 100644 laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataMakeUpForJob.java diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/api/PushWorkflowIntegrationAPI.java b/laws-base/laws-base-core/src/main/java/com/jero/common/api/PushWorkflowIntegrationAPI.java index c6f40b89..51d21fb1 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/common/api/PushWorkflowIntegrationAPI.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/api/PushWorkflowIntegrationAPI.java @@ -20,6 +20,7 @@ public interface PushWorkflowIntegrationAPI { * @return*/ void sendTodoTask(List unifiedTodoVOList); + void sendTodoTaskMakeUpFor(List unifiedTodoVOList,String sendId); /** * @Author: diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataJob.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataJob.java index a31317a7..8e50951d 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataJob.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataJob.java @@ -50,16 +50,10 @@ public class SyncOaSendDataJob implements Job { List unifiedTodoVOList = JSON.parseObject(lawsUnifiedTodoLog.getJsonStr(), new TypeReference>() {}); try { - pushWorkflowIntegrationAPI.sendTodoTask(unifiedTodoVOList); + pushWorkflowIntegrationAPI.sendTodoTaskMakeUpFor(unifiedTodoVOList, lawsUnifiedTodoLog.getId()); }catch (Exception e){ log.error("OA推送待办异常" + e.getMessage()); } - LambdaUpdateWrapper 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){ log.error("OA推送待办定时推送异常" + e.getMessage()); } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataMakeUpForJob.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataMakeUpForJob.java new file mode 100644 index 00000000..c4d3ee95 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/job/SyncOaSendDataMakeUpForJob.java @@ -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 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 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 unifiedTodoVOList = JSON.parseObject(lawsUnifiedTodoLog.getJsonStr(), + new TypeReference>() {}); + try { + pushWorkflowIntegrationAPI.sendTodoTaskMakeUpFor(unifiedTodoVOList, lawsUnifiedTodoLog.getId()); + }catch (Exception e){ + log.error("OA推送待办异常" + e.getMessage()); + } + }catch (Exception e){ + log.error("OA推送待办定时推送异常" + e.getMessage()); + } + } + } +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/LawsUnifiedTodoLogServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/LawsUnifiedTodoLogServiceImpl.java index 8119b2a6..f2bb4308 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/LawsUnifiedTodoLogServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/LawsUnifiedTodoLogServiceImpl.java @@ -84,21 +84,28 @@ public class LawsUnifiedTodoLogServiceImpl extends ServiceImpl unifiedTodoVOList = JSON.parseObject(jsonStr, new TypeReference>() {}); - pushWorkflowIntegrationAPI.sendTodoTask(unifiedTodoVOList); + pushWorkflowIntegrationAPI.sendTodoTaskMakeUpFor(unifiedTodoVOList, lawsUnifiedTodoLogObj.getId()); }else if (messageType == 2) { // 重发飞书-待办 InstanceDto instanceDto = JSON.parseObject(jsonStr, InstanceDto.class); feiShuDockingService.synchronizeApprovalInstance(instanceDto); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + LambdaUpdateWrapper 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 { // 重发飞书-消息 BotMessageDto botMessageDto = JSON.parseObject(jsonStr, BotMessageDto.class); feiShuDockingService.sendHrefMessageByBot(botMessageDto); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + LambdaUpdateWrapper 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 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("操作成功"); } } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/UnifiedTodoServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/UnifiedTodoServiceImpl.java index 2ae464b3..80c4d244 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/UnifiedTodoServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/service/impl/UnifiedTodoServiceImpl.java @@ -116,7 +116,48 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI { log.info("统一待办推送入参" + jsonString); ForkJoinPool pool = new ForkJoinPool(); 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 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 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); }catch (Exception e){ log.error("统一待办推送异常" + e); @@ -134,73 +175,61 @@ public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI { System.out.println("===========================feishu" + (l1-l)); } - private void push(String url, String jsonString,String reqJsonString, String title) { - // 设置最大重试次数 - int maxRetries = 3; - // 当前重试次数 - int retries = 0; + private void push(String url, String jsonString,String reqJsonString, String title,String sendId) { LawsUnifiedTodoLog lawsUnifiedTodoLog = new LawsUnifiedTodoLog(); - while (retries < maxRetries) { - log.info("==========OA调用"); - // 远程调用 - try { - 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 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 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++; - } + log.info("==========OA调用"); + // 远程调用 + try { + sendData(url, jsonString, lawsUnifiedTodoLog); + }catch (Exception e){ + log.error("统一待办推送失败{}" + e.getMessage()); + lawsUnifiedTodoLog.setState(2); + lawsUnifiedTodoLog.setResponseBody(e.getMessage()); } + lawsUnifiedTodoLog.setId(sendId); lawsUnifiedTodoLog.setUrl(url); lawsUnifiedTodoLog.setJsonStr(reqJsonString); lawsUnifiedTodoLog.setMessageType(1); lawsUnifiedTodoLog.setTitle(title); - if(Objects.isNull(lawsUnifiedTodoLog.getState())){ - if (retries == maxRetries){ - lawsUnifiedTodoLog.setState(2); - }else { - lawsUnifiedTodoLog.setState(1); - } - } + unifiedTodoLogService.saveOrUpdate(lawsUnifiedTodoLog); + } - 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 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 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