From ac111a65d859561b65c45491189df848d5fb2629 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Wed, 22 Apr 2026 10:39:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E6=80=A7=E5=8F=91=E8=B5=B7=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=81=A2?= =?UTF-8?q?=E5=A4=8DjsonData=E5=AE=9A=E4=B9=89=EF=BC=8C=E5=AF=B9=E5=91=A8?= =?UTF-8?q?=E6=9C=9F=E6=80=A7=E4=BB=BB=E5=8A=A1=E5=8F=91=E8=B5=B7=E5=89=8D?= =?UTF-8?q?=E5=81=9A=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立即发起且周期性发起") From f7924b9973c287c22dfd842cab09cc291333f90b Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Wed, 22 Apr 2026 10:55:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=80=9A=E8=BF=87businessId=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2tasktask=E4=B8=AD=E9=97=B4=E8=A1=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tasktask/controller/TaskTaskController.java | 14 ++++++++++++++ .../modules/tasktask/service/ITaskTaskService.java | 3 +++ .../tasktask/service/impl/TaskTaskServiceImpl.java | 10 ++++++++++ 3 files changed, 27 insertions(+) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java index c132ae5..eb2629b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java @@ -10,8 +10,10 @@ import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import liquibase.pro.packaged.E; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; +import org.flowable.task.api.Task; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; @@ -37,6 +39,7 @@ import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecg.common.system.base.controller.JeecgController; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; @@ -192,6 +195,17 @@ public class TaskTaskController extends JeecgController> queryByBusinessId(@RequestParam(name = "businessId", required = true) String businessId) throws Exception { + List taskTaskList = taskTaskService.getTaskTaskListByBusinessId(businessId); + if (CollectionUtils.isEmpty(taskTaskList)) { + return Result.error("未找到对应数据"); + } + return Result.OK(taskTaskList); + } + /** * 导出excel * diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java index 548f294..4067099 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java @@ -4,6 +4,8 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.modules.tasktask.entity.TaskTask; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * @Description: 事项任务计划表(发起流程) * @Author: jeecg-boot @@ -14,4 +16,5 @@ public interface ITaskTaskService extends IService { boolean singleFlowStart(TaskTask taskTask,String userName) throws Exception; boolean multiFlowStart(TaskTask taskTask,String userName,Integer intervalType, Integer startCount) throws Exception; Result handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount)throws Exception; + List getTaskTaskListByBusinessId(String businessId) throws Exception; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java index 0cf1f36..3e41091 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java @@ -1,6 +1,7 @@ package org.jeecg.modules.tasktask.service.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.commons.lang.StringUtils; import org.apache.shiro.util.Assert; import org.jeecg.common.api.vo.Result; @@ -121,4 +122,13 @@ public class TaskTaskServiceImpl extends ServiceImpl i return Result.ok(); } + public List getTaskTaskListByBusinessId(String businessId) throws Exception{ + if (StringUtils.isBlank(businessId)) { + return Collections.emptyList(); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TaskTask::getBusinessId, businessId); + // 2. 查询不到数据 → MP 本身会返回空集合,不是 null + return this.list(queryWrapper); + } }