From ac111a65d859561b65c45491189df848d5fb2629 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Wed, 22 Apr 2026 10:39:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=91=A8=E6=9C=9F=E6=80=A7?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=81=A2=E5=A4=8D?= =?UTF-8?q?jsonData=E5=AE=9A=E4=B9=89=EF=BC=8C=E5=AF=B9=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E6=80=A7=E4=BB=BB=E5=8A=A1=E5=8F=91=E8=B5=B7=E5=89=8D=E5=81=9A?= =?UTF-8?q?=E9=9D=9E=E7=A9=BA=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/modules/quartz/job/TaskJob.java | 81 ++++++++++++++++--- .../modules/tasktask/entity/TaskTask.java | 5 +- 2 files changed, 74 insertions(+), 12 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/TaskJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/TaskJob.java index ef4c855..57aa655 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/TaskJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/TaskJob.java @@ -2,6 +2,7 @@ package org.jeecg.modules.quartz.job; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.extbpm.process.entity.ExtActProcessForm; @@ -14,6 +15,7 @@ import org.jeecg.modules.tasktask.service.impl.TaskTaskServiceImpl; import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.util.List; @@ -39,20 +41,81 @@ public class TaskJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + log.info("--- 周期性遍历taskTask表开始 ---"); + long startTime = System.currentTimeMillis(); + LocalDateTime startDateTime = LocalDateTime.now(); - log.info(" --- 周期性遍历taskTask表 --- "); - LocalDateTime now = LocalDateTime.now(); - List executeTaskTaskList = taskTaskServiceImpl.lambdaQuery().eq(TaskTask::getBpmStatus, 1).eq(TaskTask::getTriggerType, FlowConstants.Strategy.RECURRING_ONLY).lt(TaskTask::getStartTime, now).list(); - log.info(" --- 待发起流程为 --- " + executeTaskTaskList.toString()); - for (TaskTask executeTaskTask : executeTaskTaskList) { +// 1. 查询建议:只查询必要的字段,避免 select * + List executeTaskTaskList = taskTaskServiceImpl + .lambdaQuery() + .select(TaskTask::getId, TaskTask::getFlowCode, TaskTask::getJsonData, + TaskTask::getFormUrl, TaskTask::getCreateBy) + .eq(TaskTask::getBpmStatus, 1) + .eq(TaskTask::getTriggerType, FlowConstants.Strategy.RECURRING_ONLY) + .lt(TaskTask::getStartTime, startDateTime) + .list(); + +// 2. 集合判空实践 + if (CollectionUtils.isEmpty(executeTaskTaskList)) { + log.info("--- 无待处理任务,结束执行 ---"); + return; + } + + log.info("--- 待发起流程数量: {} ---", executeTaskTaskList.size()); + + for (TaskTask task : executeTaskTaskList) { try { + // 3. 关键字段校验 + if(isAnyBlank(task)){ + continue; + } - bpmBaseExtApiImpl.startMutilProcess(executeTaskTask.getFlowCode(), executeTaskTask.getId(), executeTaskTask.getFormUrl(), executeTaskTask.getFormUrl(), executeTaskTask.getCreateBy(), JSON.toJSONString(executeTaskTask.getJsonData())); - } catch (Exception e) { - throw new RuntimeException(e); + String jsonData = task.getJsonData() != null ? JSON.toJSONString(task.getJsonData()) : "{}"; + + // 4. 执行业务逻辑 + Result res = bpmBaseExtApiImpl.startMutilProcess( + task.getFlowCode(), + task.getId(), + task.getFormUrl(), + task.getFormUrl(), + task.getCreateBy(), + jsonData + ); + if (res == null || !res.isSuccess()) { + log.error("任务ID: {} 发起流程失败,失败原因:{}", task.getId(), + res == null ? "返回结果为空" : res.getMessage()); + } else { + log.info("任务ID: {} 发起流程成功", task.getId()); + } + + } catch (Throwable e) { + // 兜底:防止极端异常 + log.error("任务ID: {} 发起流程异常", task.getId(), e); } } - log.info(" --- 执行完毕,时间:" + LocalDateTime.now() + "---"); + long costTime = System.currentTimeMillis() - startTime; + log.info("--- 执行完毕,时间:{} 毫秒 ---", costTime); + } + + private boolean isAnyBlank(TaskTask task) { + if (StringUtils.isBlank(task.getFlowCode())) { + log.warn("任务ID: {} 缺失 FlowCode,跳过", task.getId()); + return true; + } + if (StringUtils.isBlank(task.getId())) { + log.warn("任务数据异常:ID为空,跳过"); + return true; + } + if (StringUtils.isBlank(task.getFormUrl())) { + log.warn("任务ID: {} 缺失 FormUrl,跳过", task.getId()); + return true; + } + if (StringUtils.isBlank(task.getCreateBy())) { + log.warn("任务ID: {} 缺失 CreateBy,跳过", task.getId()); + return true; + } + // jsonData 如果允许为 {} 则不校验,若接口要求必须有内容则需校验 + return false; } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java index 7a2494e..cb1fcd1 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java @@ -235,9 +235,8 @@ public class TaskTask implements Serializable { @Schema(description = "表单组件路径") private java.lang.String formUrl; /**流程变量*/ - @Excel(name = "流程变量", width = 15) - @TableField(value = "json_data", typeHandler = FastjsonTypeHandler.class) - private List jsonData; + @TableField(typeHandler = JacksonTypeHandler.class) + private Map jsonData; @Excel(name = "是否立即发起流程", width = 15) @Schema(description = "1立即发起且非周期性发起,2不立即发起但周期性发起,3立即发起且周期性发起")