feat - 新增一张加签记录表,用于 JVM 实例重启后的动态模型重载

This commit is contained in:
wangli 2025-10-17 18:39:14 +08:00
parent 565e6d320d
commit 4d1193d333
6 changed files with 150 additions and 1 deletions

View File

@ -193,7 +193,6 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(task.getProcessInstanceId())
// .moveExecutionsToSingleActivityId(Collections.singletonList(task.getExecutionId()), newUserTask.getId())
.moveActivityIdTo(task.getTaskDefinitionKey(), newUserTask.getId())
.changeState();
}

View File

@ -0,0 +1,48 @@
package cn.axzo.workflow.core.repository.entity;
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import cn.axzo.workflow.common.enums.BpmnCountersignTypeEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.conf.handler.ListAssigneeTypeHandler;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
/**
* 扩展动态前后加签记录,用于应用重启后的模型内容恢复
*
* @author wangli
* @since 2025-10-17 18:23
*/
@EqualsAndHashCode(callSuper = true)
@TableName(value = "ext_ax_dynamic_sign_record", autoResultMap = true)
@Data
@ToString(callSuper = true)
public class ExtAxDynamicSignRecord extends BaseEntity<ExtAxDynamicSignRecord> {
/**
* 流程实例 ID
*/
private String processInstanceId;
/**
* 流程实例对应的流程定义 ID
*/
private String processDefinitionId;
/**
* 加签次数
*/
private Integer counterSignCount;
/**
* 加签类型前加签/后加签
* {@link BpmnCountersignTypeEnum}
*/
private String counterSignType;
/**
* 被加签的审批人
*/
@TableField(value = "assigner_list", typeHandler = ListAssigneeTypeHandler.class)
private List<BpmnTaskDelegateAssigner> assignerList;
}

View File

@ -0,0 +1,14 @@
package cn.axzo.workflow.core.repository.mapper;
import cn.axzo.workflow.core.repository.entity.ExtAxDynamicSignRecord;
import org.apache.ibatis.annotations.Mapper;
/**
* 动态前后加签记录 Mapper
*
* @author wangli
* @since 2025-10-17 18:28
*/
@Mapper
public interface ExtAxDynamicSignRecordMapper extends BaseMapperX<ExtAxDynamicSignRecord> {
}

View File

@ -0,0 +1,13 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.repository.entity.ExtAxDynamicSignRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* 动态前后加签记录服务接口
*
* @author wangli
* @since 2025-10-17 18:30
*/
public interface ExtAxDynamicSignRecordService extends IService<ExtAxDynamicSignRecord> {
}

View File

@ -0,0 +1,24 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.repository.entity.ExtAxDynamicSignRecord;
import cn.axzo.workflow.core.repository.mapper.ExtAxDynamicSignRecordMapper;
import cn.axzo.workflow.core.service.ExtAxDynamicSignRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 流程签署业务信息记录
*
* @author wangli
* @since 2025-04-02 10:06
*/
@Service
@Slf4j
public class ExtAxDynamicSignRecordServiceImpl extends ServiceImpl<ExtAxDynamicSignRecordMapper, ExtAxDynamicSignRecord> implements ExtAxDynamicSignRecordService {
@Resource
private ExtAxDynamicSignRecordMapper extAxDynamicSignRecordMapper;
}

View File

@ -0,0 +1,51 @@
package cn.axzo.workflow.server.initializer;
import cn.axzo.workflow.core.repository.entity.ExtAxDynamicSignRecord;
import cn.axzo.workflow.core.service.ExtAxDynamicSignRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.SmartLifecycle;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 在框架提供 Web 服务前恢复动态前后加签的流程实例的内存中的模型
*
* @author wangli
* @since 2025-10-17 17:43
*/
@Slf4j
@Component
public class RecoverDynamicCounterSignProcess implements SmartLifecycle {
private final ExtAxDynamicSignRecordService extAxDynamicSignRecordService;
private boolean isRunning = false;
public RecoverDynamicCounterSignProcess(ExtAxDynamicSignRecordService extAxDynamicSignRecordService) {
this.extAxDynamicSignRecordService = extAxDynamicSignRecordService;
}
@Override
public void start() {
// TODO 恢复动态会签中的流程实例
log.info("executing before web server start");
List<ExtAxDynamicSignRecord> list = extAxDynamicSignRecordService.list();
isRunning = true;
}
@Override
public void stop() {
isRunning = false;
}
@Override
public boolean isRunning() {
return isRunning;
}
@Override
public int getPhase() {
return Integer.MAX_VALUE - 2; // 确保在Web服务器启动前执行
}
}