提交 50a84bdd 编写于 作者: J Joram Barrez

Cmmn: basic support for human task history

上级 c0c14988
......@@ -14,8 +14,8 @@ package org.flowable.cmmn.engine;
import org.flowable.cmmn.engine.history.HistoricCaseInstanceQuery;
import org.flowable.cmmn.engine.history.HistoricMilestoneInstanceQuery;
import org.flowable.cmmn.engine.history.HistoricTaskInstanceQuery;
import org.flowable.cmmn.engine.history.HistoricVariableInstanceQuery;
import org.flowable.task.service.history.HistoricTaskInstanceQuery;
/**
* @author Joram Barrez
......@@ -28,7 +28,7 @@ public interface CmmnHistoryService {
HistoricVariableInstanceQuery createHistoricVariableInstanceQuery();
// HistoricTaskInstanceQuery createHistoricTaskInstanceQuery();
HistoricTaskInstanceQuery createHistoricTaskInstanceQuery();
void deleteHistoricCaseInstance(String caseInstanceId);
}
......@@ -12,12 +12,41 @@
*/
package org.flowable.cmmn.engine.history;
import org.flowable.engine.common.api.query.Query;
import java.util.Date;
import org.flowable.task.service.TaskInfoQuery;
import org.flowable.task.service.history.HistoricTaskInstance;
/**
* @author Joram Barrez
*/
public interface HistoricTaskInstanceQuery extends Query<HistoricTaskInstanceQuery, HistoricTaskInstance> {
public interface HistoricTaskInstanceQuery extends TaskInfoQuery<HistoricTaskInstanceQuery, HistoricTaskInstance> {
HistoricTaskInstanceQuery caseInstanceId(String caseInstanceId);
HistoricTaskInstanceQuery caseDefinitionId(String caseDefinitionId);
HistoricTaskInstanceQuery planItemInstanceId(String planItemInstanceId);
HistoricTaskInstanceQuery taskDeleteReason(String taskDeleteReason);
HistoricTaskInstanceQuery taskDeleteReasonLike(String taskDeleteReasonLike);
HistoricTaskInstanceQuery finished();
HistoricTaskInstanceQuery unfinished();
HistoricTaskInstanceQuery taskParentTaskId(String parentTaskId);
HistoricTaskInstanceQuery taskCompletedOn(Date endDate);
HistoricTaskInstanceQuery taskCompletedBefore(Date endDate);
HistoricTaskInstanceQuery taskCompletedAfter(Date endDate);
HistoricTaskInstanceQuery orderByHistoricTaskInstanceDuration();
HistoricTaskInstanceQuery orderByHistoricTaskInstanceStartTime();
HistoricTaskInstanceQuery orderByHistoricTaskInstanceEndTime();
HistoricTaskInstanceQuery orderByDeleteReason();
}
......@@ -28,6 +28,7 @@ import org.flowable.cmmn.engine.impl.CmmnEngineImpl;
import org.flowable.cmmn.engine.impl.CmmnHistoryServiceImpl;
import org.flowable.cmmn.engine.impl.CmmnManagementServiceImpl;
import org.flowable.cmmn.engine.impl.CmmnRepositoryServiceImpl;
import org.flowable.cmmn.engine.impl.CmmnTaskServiceImpl;
import org.flowable.cmmn.engine.impl.ServiceImpl;
import org.flowable.cmmn.engine.impl.agenda.CmmnEngineAgendaFactory;
import org.flowable.cmmn.engine.impl.agenda.CmmnEngineAgendaSessionFactory;
......@@ -95,7 +96,6 @@ import org.flowable.cmmn.engine.impl.process.ProcessInstanceService;
import org.flowable.cmmn.engine.impl.runtime.CaseInstanceHelper;
import org.flowable.cmmn.engine.impl.runtime.CaseInstanceHelperImpl;
import org.flowable.cmmn.engine.impl.runtime.CmmnRuntimeServiceImpl;
import org.flowable.cmmn.engine.impl.task.CmmnTaskServiceImpl;
import org.flowable.cmmn.engine.impl.task.DefaultCmmnTaskVariableScopeResolver;
import org.flowable.engine.common.AbstractEngineConfiguration;
import org.flowable.engine.common.api.delegate.FlowableFunctionDelegate;
......
......@@ -15,10 +15,11 @@ package org.flowable.cmmn.engine.impl;
import org.flowable.cmmn.engine.CmmnHistoryService;
import org.flowable.cmmn.engine.history.HistoricCaseInstanceQuery;
import org.flowable.cmmn.engine.history.HistoricMilestoneInstanceQuery;
import org.flowable.cmmn.engine.history.HistoricTaskInstanceQuery;
import org.flowable.cmmn.engine.history.HistoricVariableInstanceQuery;
import org.flowable.cmmn.engine.impl.cmd.DeleteHistoricCaseInstanceCmd;
import org.flowable.cmmn.engine.impl.history.CmmnHistoricTaskInstanceQueryImpl;
import org.flowable.cmmn.engine.impl.history.CmmnHistoricVariableInstanceQueryImpl;
import org.flowable.task.service.history.HistoricTaskInstanceQuery;
/**
* @author Joram Barrez
......@@ -46,9 +47,9 @@ public class CmmnHistoryServiceImpl extends ServiceImpl implements CmmnHistorySe
commandExecutor.execute(new DeleteHistoricCaseInstanceCmd(caseInstanceId));
}
// @Override
// public HistoricTaskInstanceQuery createHistoricTaskInstanceQuery() {
//
// }
@Override
public HistoricTaskInstanceQuery createHistoricTaskInstanceQuery() {
return new CmmnHistoricTaskInstanceQueryImpl(commandExecutor);
}
}
......@@ -10,13 +10,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.flowable.cmmn.engine.impl.task;
package org.flowable.cmmn.engine.impl;
import java.util.Map;
import org.flowable.cmmn.engine.CmmnTaskService;
import org.flowable.cmmn.engine.impl.ServiceImpl;
import org.flowable.cmmn.engine.impl.cmd.CompleteTaskCmd;
import org.flowable.cmmn.engine.impl.task.CmmnTaskQueryImpl;
import org.flowable.cmmn.engine.task.TaskQuery;
/**
......
......@@ -73,6 +73,7 @@ public class HumanTaskActivityBehavior extends TaskActivityBehavior {
handleCandidateGroups(commandContext, planItemInstanceEntity, expressionManager, taskEntity);
taskService.insertTask(taskEntity, true);
CommandContextUtil.getCmmnHistoryManager(commandContext).recordTaskCreated(taskEntity);
} else {
// if not blocking, treat as a manual task. No need to create a task entry.
......@@ -253,6 +254,7 @@ public class HumanTaskActivityBehavior extends TaskActivityBehavior {
for (TaskEntity taskEntity : taskEntities) {
if (!taskEntity.isDeleted()) {
taskService.deleteTask(taskEntity, true);
CommandContextUtil.getCmmnHistoryManager(commandContext).recordTaskEnd(taskEntity, null);
}
}
......
......@@ -14,6 +14,7 @@ package org.flowable.cmmn.engine.impl.history;
import org.flowable.cmmn.engine.impl.persistence.entity.CaseInstanceEntity;
import org.flowable.cmmn.engine.runtime.MilestoneInstance;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity;
/**
......@@ -34,5 +35,11 @@ public interface CmmnHistoryManager {
void recordVariableUpdate(VariableInstanceEntity variable);
void recordVariableRemoved(VariableInstanceEntity variable);
void recordTaskCreated(TaskEntity task);
void recordTaskEnd(TaskEntity task, String deleteReason);
void recordTaskInfoChange(TaskEntity taskEntity);
}
......@@ -24,6 +24,7 @@ import org.flowable.cmmn.engine.impl.persistence.entity.HistoricMilestoneInstanc
import org.flowable.cmmn.engine.impl.util.CommandContextUtil;
import org.flowable.cmmn.engine.runtime.MilestoneInstance;
import org.flowable.engine.common.impl.history.HistoryLevel;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity;
/**
......@@ -120,4 +121,25 @@ public class DefaultCmmnHistoryManager implements CmmnHistoryManager {
}
}
@Override
public void recordTaskCreated(TaskEntity task) {
if (cmmnEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) {
CommandContextUtil.getHistoricTaskService().recordTaskCreated(task);
}
}
@Override
public void recordTaskEnd(TaskEntity task, String deleteReason) {
if (cmmnEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) {
CommandContextUtil.getHistoricTaskService().recordTaskEnd(task, deleteReason);
}
}
@Override
public void recordTaskInfoChange(TaskEntity taskEntity) {
if (cmmnEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) {
CommandContextUtil.getHistoricTaskService().recordTaskInfoChange(taskEntity);
}
}
}
......@@ -37,9 +37,9 @@ import org.flowable.engine.common.impl.el.ExpressionManager;
import org.flowable.engine.common.impl.interceptor.CommandContext;
import org.flowable.engine.common.impl.interceptor.EngineConfigurationConstants;
import org.flowable.engine.common.impl.persistence.cache.EntityCache;
import org.flowable.identitylink.service.IdentityLink;
import org.flowable.identitylink.service.IdentityLinkService;
import org.flowable.identitylink.service.IdentityLinkServiceConfiguration;
import org.flowable.task.service.HistoricTaskService;
import org.flowable.task.service.TaskService;
import org.flowable.task.service.TaskServiceConfiguration;
import org.flowable.variable.service.HistoricVariableService;
......@@ -224,6 +224,14 @@ public class CommandContextUtil {
return getTaskServiceConfiguration(commandContext).getTaskService();
}
public static HistoricTaskService getHistoricTaskService() {
return getHistoricTaskService(getCommandContext());
}
public static HistoricTaskService getHistoricTaskService(CommandContext commandContext) {
return getTaskServiceConfiguration(commandContext).getHistoricTaskService();
}
public static TaskServiceConfiguration getTaskServiceConfiguration() {
return getTaskServiceConfiguration(getCommandContext());
}
......
......@@ -14,14 +14,16 @@ package org.flowable.cmmn.test.task;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.flowable.cmmn.engine.impl.persistence.entity.PlanItemInstanceEntity;
import org.flowable.cmmn.engine.impl.variable.VariableScopeType;
import org.flowable.cmmn.engine.runtime.CaseInstance;
import org.flowable.cmmn.engine.runtime.PlanItemInstance;
import org.flowable.cmmn.engine.test.CmmnDeployment;
import org.flowable.cmmn.engine.test.FlowableCmmnTestCase;
import org.flowable.engine.common.impl.history.HistoryLevel;
import org.flowable.task.service.Task;
import org.flowable.task.service.history.HistoricTaskInstance;
import org.junit.Test;
/**
......@@ -37,8 +39,20 @@ public class CmmnTaskServiceTest extends FlowableCmmnTestCase {
assertNotNull(task);
assertEquals("johnDoe", task.getAssignee());
if (cmmnEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) {
HistoricTaskInstance historicTaskInstance = cmmnHistoryService.createHistoricTaskInstanceQuery().caseInstanceId(caseInstance.getId()).singleResult();
assertNotNull(historicTaskInstance);
assertNull(historicTaskInstance.getEndTime());
}
cmmnTaskService.complete(task.getId());
assertCaseInstanceEnded(caseInstance);
if (cmmnEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) {
HistoricTaskInstance historicTaskInstance = cmmnHistoryService.createHistoricTaskInstanceQuery().caseInstanceId(caseInstance.getId()).singleResult();
assertNotNull(historicTaskInstance);
assertNotNull(historicTaskInstance.getEndTime());
}
}
@Test
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册