This commit is contained in:
2026-05-15 10:19:41 +08:00
parent d37105f03b
commit fb14860f18
@@ -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 用于日志定位业务来源;
* 返回值为 booleantrue 表示系统参数 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());
}
}