diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/CommonMapper.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/CommonMapper.java new file mode 100644 index 000000000..ddb73069d --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/CommonMapper.java @@ -0,0 +1,18 @@ +package cn.axzo.workflow.core.repository.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * TODO + * + * @author wangli + * @since 2024/4/28 14:44 + */ +@Mapper +public interface CommonMapper { + List> executeDynamicSQL(@Param("sql") String sql); +} diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxHiTaskInstServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxHiTaskInstServiceImpl.java index 55de0277b..e6faf607f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxHiTaskInstServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxHiTaskInstServiceImpl.java @@ -15,6 +15,8 @@ import javax.annotation.Resource; import java.util.List; import java.util.Objects; +import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING; + /** * 流程定义扩展表操作服务实现 * @@ -66,6 +68,14 @@ public class ExtAxHiTaskInstServiceImpl implements ExtAxHiTaskInstService { @Override public void updateByTaskIdAndInstanceId(String taskId, String processInstanceId, String assignee, BpmnProcessInstanceResultEnum resultEnum) { + ExtAxHiTaskInst existence = getByTaskId(taskId, processInstanceId); + if (Objects.nonNull(existence)) { + log.info("更新扩展任务实例表数据: taskId:{}, instanceId:{}, currentStatus:{}, anticipateStatus: {}", + taskId, processInstanceId, existence.getStatus(), resultEnum.getStatus()); + } else { + log.warn("无法正确更新扩展任务表数据: taskId:{}, instanceId:{}, anticipateStatus: {}", + taskId, processInstanceId, resultEnum.getStatus()); + } ExtAxHiTaskInst entity = new ExtAxHiTaskInst(); if (StringUtils.hasText(assignee)) { entity.setAssignee(assignee); @@ -74,7 +84,9 @@ public class ExtAxHiTaskInstServiceImpl implements ExtAxHiTaskInstService { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() .eq(ExtAxHiTaskInst::getTaskId, taskId) - .eq(ExtAxHiTaskInst::getProcInstId, processInstanceId); + .eq(ExtAxHiTaskInst::getProcInstId, processInstanceId) + // 可能由于事件消费时, 嵌套了引擎操作, 会引起一部分的消息顺序异常, 导致状态被异常变更 + .eq(ExtAxHiTaskInst::getStatus, PROCESSING.getStatus()); extAxHiTaskInstMapper.update(entity, wrapper); } } diff --git a/workflow-engine-core/src/main/resources/mapper/common.xml b/workflow-engine-core/src/main/resources/mapper/common.xml new file mode 100644 index 000000000..5f60c52e2 --- /dev/null +++ b/workflow-engine-core/src/main/resources/mapper/common.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/workflow-engine-server/pom.xml b/workflow-engine-server/pom.xml index dab288f14..279ccf123 100644 --- a/workflow-engine-server/pom.xml +++ b/workflow-engine-server/pom.xml @@ -115,6 +115,10 @@ org.apache.maven maven-artifact + + com.xuxueli + xxl-job-core + diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/WebMvcConfig.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/WebMvcConfiguration.java similarity index 92% rename from workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/WebMvcConfig.java rename to workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/WebMvcConfiguration.java index 40d54f391..b13b9074f 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/WebMvcConfig.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/WebMvcConfiguration.java @@ -13,7 +13,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; * @since 2024/2/6 11:35 */ @Configuration(proxyBeanMethods = false) -public class WebMvcConfig implements WebMvcConfigurer { +public class WebMvcConfiguration implements WebMvcConfigurer { @Autowired private RequestHeaderContextInterceptor requestHeaderContextInterceptor; diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/XxlJobConfiguration.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/XxlJobConfiguration.java new file mode 100644 index 000000000..2e952a1f0 --- /dev/null +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/config/XxlJobConfiguration.java @@ -0,0 +1,56 @@ +package cn.axzo.workflow.server.common.config; + +import cn.azxo.framework.common.annotation.OnlyPodsEnvironment; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * TODO + * + * @author wangli + * @since 2024/4/28 14:02 + */ +@Configuration +public class XxlJobConfiguration { + Logger logger = LoggerFactory.getLogger(XxlJobConfiguration.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.executor.appname}") + private String appName; + + @Value("") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("") + private String accessToken; + + @Value("") + private String logPath; + + @Value("-1") + private int logRetentionDays; + + @Bean + @OnlyPodsEnvironment + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appName); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } +} diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/xxljob/OperationDataJobHandler.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/xxljob/OperationDataJobHandler.java new file mode 100644 index 000000000..37333b0dd --- /dev/null +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/xxljob/OperationDataJobHandler.java @@ -0,0 +1,37 @@ +package cn.axzo.workflow.server.xxljob; + +import cn.axzo.framework.jackson.utility.JSON; +import cn.axzo.workflow.core.repository.mapper.CommonMapper; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.IJobHandler; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 操作数据表 + * + * @author wangli + * @since 2024/4/28 14:06 + */ +@Component +@RequiredArgsConstructor +@Slf4j +public class OperationDataJobHandler extends IJobHandler { + @Resource + private CommonMapper commonMapper; + + @Override + @XxlJob("executeDynamicSql") + public ReturnT execute(String s) throws Exception { + List> maps = commonMapper.executeDynamicSQL(s); + XxlJobLogger.log("result: {}", JSON.toJSONString(maps)); + return ReturnT.SUCCESS; + } +}