From fb14860f184f08961439a2b36688a52420da9755 Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Fri, 15 May 2026 10:19:41 +0800 Subject: [PATCH] commit --- .../service/impl/SchoolOaTodoServiceImpl.java | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/budwk/app/flow/service/impl/SchoolOaTodoServiceImpl.java b/src/main/java/com/budwk/app/flow/service/impl/SchoolOaTodoServiceImpl.java index d7dbb4a..d3c5f03 100644 --- a/src/main/java/com/budwk/app/flow/service/impl/SchoolOaTodoServiceImpl.java +++ b/src/main/java/com/budwk/app/flow/service/impl/SchoolOaTodoServiceImpl.java @@ -48,6 +48,9 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { if (processTask == null || processTask.getId() == null) { throw new BaseException("学校OA待办同步失败:流程任务为空"); } + if (!isSchoolOaEnabled("创建待办", processTask.getId(), processTask.getProcessInstanceId())) { + return; + } if (Long.valueOf(0L).equals(processTask.getTaskParentId()) && "startTask".equals(processTask.getTaskName())) { return; } @@ -90,6 +93,9 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { if (processTask == null || processTask.getId() == null) { throw new BaseException("学校OA待办完成失败:流程任务为空"); } + if (!isSchoolOaEnabled("完成待办", processTask.getId(), processTask.getProcessInstanceId())) { + return; + } if (Long.valueOf(0L).equals(processTask.getTaskParentId()) && "startTask".equals(processTask.getTaskName())) { return; } @@ -110,6 +116,9 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { if (processTask == null || processTask.getId() == null) { throw new BaseException("学校OA待办删除失败:流程任务为空"); } + if (!isSchoolOaEnabled("删除待办", processTask.getId(), processTask.getProcessInstanceId())) { + return; + } if (Long.valueOf(0L).equals(processTask.getTaskParentId()) && "startTask".equals(processTask.getTaskName())) { return; } @@ -134,6 +143,9 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { if (flowId == null) { throw new BaseException("学校OA流程删除失败:流程实例ID为空"); } + if (!isSchoolOaEnabled("删除流程", null, flowId)) { + return; + } String deleteFlowUrl = requireConfig("school-oa.todo.delete-flow-url").replace("{flowId}", String.valueOf(flowId)); sendTodoRequest(deleteFlowUrl, "学校OA流程删除失败", "学校OA流程删除异常"); @@ -146,6 +158,9 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { if (processInstanceId == null) { throw new BaseException("学校OA待办修改失败:流程实例ID为空"); } + if (!isSchoolOaEnabled("修改完结待办", null, processInstanceId)) { + return; + } ProcessInstance instance = dao.fetch(ProcessInstance.class, processInstanceId); if (instance == null) { @@ -212,20 +227,27 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { body.set("receiveTime", receiveTime); String insertUrl = requireConfig("school-oa.todo.insert-url"); + String requestBody = JSONUtil.toJsonStr(body); + log.info("学校OA待办创建请求,url={},taskId={},processInstanceId={},receiveCode={},body={}", + insertUrl, task.getId(), instance.getId(), actor.getActorAccount(), requestBody); try { HttpRequest request = HttpUtil.createPost(insertUrl); setTodoRequestHeaders(request); - request.body(JSONUtil.toJsonStr(body)); + request.body(requestBody); String responseBody = request.execute().body(); + log.info("学校OA待办创建响应,taskId={},receiveCode={},response={}", task.getId(), actor.getActorAccount(), responseBody); JSONObject response = JSONUtil.parseObj(responseBody); if (response.getInt("state", 0) != 200) { + log.warn("学校OA待办创建失败响应,taskId={},receiveCode={},response={}", task.getId(), actor.getActorAccount(), responseBody); throw new BaseException("学校OA待办创建失败:{}", response.getStr("message", responseBody)); } log.info("学校OA待办创建成功,taskId={},receiveCode={},response={}", task.getId(), actor.getActorAccount(), responseBody); } catch (BaseException e) { throw e; } catch (Exception e) { + log.error("学校OA待办创建异常,url={},taskId={},processInstanceId={},receiveCode={},body={}", + insertUrl, task.getId(), instance.getId(), actor.getActorAccount(), requestBody, e); throw new BaseException("学校OA待办创建异常:{}", e.getMessage()); } } @@ -346,6 +368,20 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { return value; } + /** + * 判断学校 OA 同步开关是否开启。 + * 参数 action 表示当前待执行的 OA 动作;taskId、processInstanceId 用于日志定位业务来源; + * 返回值为 boolean,true 表示系统参数 AppSchoolOa 配置为 true,可继续请求 OA,false 表示跳过本次同步。 + */ + private boolean isSchoolOaEnabled(String action, Long taskId, Long processInstanceId) { + Boolean enabled = Globals.MyConfig.getBoolean("AppSchoolOa"); + if (!enabled) { + log.info("学校OA同步未开启,跳过{},AppSchoolOa={},taskId={},processInstanceId={}", + action, enabled, taskId, processInstanceId); + } + return enabled; + } + /** * 统一设置学校 OA 待办接口请求头。 * 请求头参数包含 app-code、secret-key、domain-name 和可选 intercept-domain-name; @@ -367,22 +403,27 @@ public class SchoolOaTodoServiceImpl implements SchoolOaTodoService { } private String sendTodoRequest(String url, JSONObject body, String failMessage, String errorMessage) { + String requestBody = body == null ? "" : JSONUtil.toJsonStr(body); + log.info("学校OA请求开始,url={},body={}", url, requestBody); try { HttpRequest request = HttpUtil.createPost(url); setTodoRequestHeaders(request); if (body != null) { - request.body(JSONUtil.toJsonStr(body)); + request.body(requestBody); } String responseBody = request.execute().body(); + log.info("学校OA请求响应,url={},response={}", url, responseBody); JSONObject response = JSONUtil.parseObj(responseBody); if (response.getInt("state", 0) != 200) { + log.warn("学校OA请求失败响应,url={},body={},response={}", url, requestBody, responseBody); throw new BaseException("{}:{}", failMessage, response.getStr("message", responseBody)); } return responseBody; } catch (BaseException e) { throw e; } catch (Exception e) { + log.error("学校OA请求异常,url={},body={}", url, requestBody, e); throw new BaseException("{}:{}", errorMessage, e.getMessage()); } }