提交 17dc74bb 编写于 作者: F frederikheremans

ACT-209 createTime exposed on Task interface + querying possible for tasks...

ACT-209 createTime exposed on Task interface + querying possible for tasks created on/before/after given date
上级 8e0dd5da
...@@ -14,6 +14,7 @@ package org.activiti.engine.impl; ...@@ -14,6 +14,7 @@ package org.activiti.engine.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.List; import java.util.List;
import org.activiti.engine.ActivitiException; import org.activiti.engine.ActivitiException;
...@@ -44,6 +45,9 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas ...@@ -44,6 +45,9 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
protected String processInstanceId; protected String processInstanceId;
protected String executionId; protected String executionId;
protected TaskQueryProperty orderProperty; protected TaskQueryProperty orderProperty;
protected Date createTime;
protected Date createTimeBefore;
protected Date createTimeAfter;
public TaskQueryImpl() { public TaskQueryImpl() {
} }
...@@ -142,6 +146,21 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas ...@@ -142,6 +146,21 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
return this; return this;
} }
public TaskQueryImpl createdOn(Date createTime) {
this.createTime = createTime;
return this;
}
public TaskQuery createdBefore(Date before) {
this.createTimeBefore = before;
return this;
}
public TaskQuery createdAfter(Date after) {
this.createTimeAfter = after;
return this;
}
public List<String> getCandidateGroups() { public List<String> getCandidateGroups() {
if (candidateGroup!=null) { if (candidateGroup!=null) {
return Collections.singletonList(candidateGroup); return Collections.singletonList(candidateGroup);
...@@ -281,5 +300,14 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas ...@@ -281,5 +300,14 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
public TaskQueryProperty getOrderProperty() { public TaskQueryProperty getOrderProperty() {
return orderProperty; return orderProperty;
} }
public Date getCreateTime() {
return createTime;
}
public Date getCreateTimeBefore() {
return createTimeBefore;
}
public Date getCreateTimeAfter() {
return createTimeAfter;
}
} }
...@@ -40,11 +40,13 @@ import org.activiti.engine.task.TaskQuery; ...@@ -40,11 +40,13 @@ import org.activiti.engine.task.TaskQuery;
public class TaskServiceImpl extends ServiceImpl implements TaskService { public class TaskServiceImpl extends ServiceImpl implements TaskService {
public Task newTask() { public Task newTask() {
return new TaskEntity(null); return newTask(null);
} }
public Task newTask(String taskId) { public Task newTask(String taskId) {
return new TaskEntity(taskId); TaskEntity task = TaskEntity.create();
task.setId(taskId);
return task;
} }
public void saveTask(Task task) { public void saveTask(Task task) {
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
*/ */
package org.activiti.engine.task; package org.activiti.engine.task;
import java.util.Date;
/** Represents one task for a human user. /** Represents one task for a human user.
...@@ -53,4 +55,7 @@ public interface Task { ...@@ -53,4 +55,7 @@ public interface Task {
String getProcessDefinitionId(); String getProcessDefinitionId();
String getFormResourceKey(); String getFormResourceKey();
Date getCreateTime();
} }
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
*/ */
package org.activiti.engine.task; package org.activiti.engine.task;
import java.util.Date;
import org.activiti.engine.query.Query; import org.activiti.engine.query.Query;
/** /**
...@@ -61,7 +63,16 @@ public interface TaskQuery extends Query<TaskQuery, Task>{ ...@@ -61,7 +63,16 @@ public interface TaskQuery extends Query<TaskQuery, Task>{
/** Only select tasks for the given execution. */ /** Only select tasks for the given execution. */
TaskQuery executionId(String executionId); TaskQuery executionId(String executionId);
/** Only select tasks that are created on the given date. **/
TaskQuery createdOn(Date createTime);
/** Only select tasks that are created before the given date. **/
TaskQuery createdBefore(Date before);
/** Only select tasks that are created after the given date. **/
TaskQuery createdAfter(Date after);
// ordering //////////////////////////////////////////////////////////// // ordering ////////////////////////////////////////////////////////////
/** Order by task id (needs to be followed by {@link #asc()} or {@link #desc()}). */ /** Order by task id (needs to be followed by {@link #asc()} or {@link #desc()}). */
......
...@@ -139,6 +139,15 @@ ...@@ -139,6 +139,15 @@
<if test="executionId != null"> <if test="executionId != null">
and T.EXECUTION_ID_ = #{executionId} and T.EXECUTION_ID_ = #{executionId}
</if> </if>
<if test="createTime != null">
and T.CREATE_TIME_ = #{createTime}
</if>
<if test="createTimeBefore != null">
and T.CREATE_TIME_ &lt; #{createTimeBefore}
</if>
<if test="createTimeAfter != null">
and T.CREATE_TIME_ &gt; #{createTimeAfter}
</if>
<if test="candidateUser != null || candidateGroups != null"> <if test="candidateUser != null || candidateGroups != null">
and T.ASSIGNEE_ is null and T.ASSIGNEE_ is null
and I.TYPE_ = 'candidate' and I.TYPE_ = 'candidate'
......
...@@ -12,16 +12,20 @@ ...@@ -12,16 +12,20 @@
*/ */
package org.activiti.engine.test.api.task; package org.activiti.engine.test.api.task;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import org.activiti.engine.ActivitiException; import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.test.ActivitiInternalTestCase; import org.activiti.engine.impl.test.ActivitiInternalTestCase;
import org.activiti.engine.impl.util.ClockUtil;
import org.activiti.engine.task.Task; import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery; import org.activiti.engine.task.TaskQuery;
/** /**
* @author Joram Barrez * @author Joram Barrez
* @author Frederik Heremans
*/ */
public class TaskQueryTest extends ActivitiInternalTestCase { public class TaskQueryTest extends ActivitiInternalTestCase {
...@@ -283,6 +287,49 @@ public class TaskQueryTest extends ActivitiInternalTestCase { ...@@ -283,6 +287,49 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
} }
} }
public void testQueryCreatedOn() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Exact matching of createTime, should result in 6 tasks
Date createTime = sdf.parse("01/01/2001 01:01:01.000");
TaskQuery query = taskService.createTaskQuery().createdOn(createTime);
assertEquals(6, query.count());
assertEquals(6, query.list().size());
}
public void testQueryCreatedBefore() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Should result in 7 tasks
Date before = sdf.parse("03/02/2002 02:02:02.000");
TaskQuery query = taskService.createTaskQuery().createdBefore(before);
assertEquals(7, query.count());
assertEquals(7, query.list().size());
before = sdf.parse("01/01/2001 01:01:01.000");
query = taskService.createTaskQuery().createdBefore(before);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
}
public void testQueryCreatedAfter() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Should result in 3 tasks
Date after = sdf.parse("03/03/2003 03:03:03.000");
TaskQuery query = taskService.createTaskQuery().createdAfter(after);
assertEquals(3, query.count());
assertEquals(3, query.list().size());
after = sdf.parse("05/05/2005 05:05:05.000");
query = taskService.createTaskQuery().createdAfter(after);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
}
public void testQueryPaging() { public void testQueryPaging() {
TaskQuery query = taskService.createTaskQuery().candidateUser("kermit"); TaskQuery query = taskService.createTaskQuery().candidateUser("kermit");
...@@ -330,10 +377,12 @@ public class TaskQueryTest extends ActivitiInternalTestCase { ...@@ -330,10 +377,12 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
* assigned to accountancy group - 1 task assigned to both the management and * assigned to accountancy group - 1 task assigned to both the management and
* accountancy group * accountancy group
*/ */
private List<String> generateTestTasks() { private List<String> generateTestTasks() throws Exception {
List<String> ids = new ArrayList<String>(); List<String> ids = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// 6 tasks for kermit // 6 tasks for kermit
ClockUtil.setCurrentTime(sdf.parse("01/01/2001 01:01:01.000"));
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
Task task = taskService.newTask(); Task task = taskService.newTask();
task.setName("testTask"); task.setName("testTask");
...@@ -344,6 +393,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase { ...@@ -344,6 +393,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
taskService.addCandidateUser(task.getId(), "kermit"); taskService.addCandidateUser(task.getId(), "kermit");
} }
ClockUtil.setCurrentTime(sdf.parse("02/02/2002 02:02:02.000"));
// 1 task for gonzo // 1 task for gonzo
Task task = taskService.newTask(); Task task = taskService.newTask();
task.setName("gonzoTask"); task.setName("gonzoTask");
...@@ -353,6 +403,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase { ...@@ -353,6 +403,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
taskService.setAssignee(task.getId(), "gonzo"); taskService.setAssignee(task.getId(), "gonzo");
ids.add(task.getId()); ids.add(task.getId());
ClockUtil.setCurrentTime(sdf.parse("03/03/2003 03:03:03.000"));
// 2 tasks for management group // 2 tasks for management group
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
task = taskService.newTask(); task = taskService.newTask();
...@@ -363,6 +414,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase { ...@@ -363,6 +414,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
ids.add(task.getId()); ids.add(task.getId());
} }
ClockUtil.setCurrentTime(sdf.parse("04/04/2004 04:04:04.000"));
// 2 tasks for accountancy group // 2 tasks for accountancy group
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
task = taskService.newTask(); task = taskService.newTask();
...@@ -373,6 +425,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase { ...@@ -373,6 +425,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
ids.add(task.getId()); ids.add(task.getId());
} }
ClockUtil.setCurrentTime(sdf.parse("05/05/2005 05:05:05.000"));
// 1 task assigned to management and accountancy group // 1 task assigned to management and accountancy group
task = taskService.newTask(); task = taskService.newTask();
task.setName("managementAndAccountancyTask"); task.setName("managementAndAccountancyTask");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册