flowable 如何获取请假的天数
时间: 2024-03-15 20:40:11 浏览: 72
Flowable 是一个基于RxJava的响应式编程库,用于处理异步数据流。它提供了一种简洁、可组合的方式来处理数据流,并且可以方便地进行线程切换、错误处理等操作。
关于请假天数的获取,具体的实现方式可能因具体的业务需求而有所不同。一般而言,可以通过以下步骤来获取请假天数:
1. 用户输入请假开始日期和结束日期。
2. 将输入的日期转换为合适的数据类型,比如`Date`或`LocalDate`。
3. 计算请假天数,可以使用日期相关的库或者自行编写计算逻辑。一种常见的方式是计算两个日期之间的天数差。
4. 将请假天数返回给用户或进行后续处理。
相关问题
flowable的请假工作流代码
以下是一个基于Flowable的请假工作流代码示例:
```java
@Service
public class LeaveProcessServiceImpl implements LeaveProcessService {
private final static Logger logger = LoggerFactory.getLogger(LeaveProcessServiceImpl.class);
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
/**
* 发起请假申请
* @param leaveLeaveRequestDTO 请假信息
* @param assignee 处理人
* @return
*/
@Override
public String startLeaveProcess(LeaveRequestDTO leaveLeaveRequestDTO, String assignee) {
logger.info("开始发起请假申请");
// 通过指定流程定义的key启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess");
// 获取当前流程实例的任务
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
// 设置任务的处理人
taskService.setAssignee(task.getId(), assignee);
// 将请假申请信息与任务关联
taskService.setVariable(task.getId(), "leaveLeaveRequestDTO", leaveLeaveRequestDTO);
logger.info("请假申请发起成功,流程实例ID为:{}", processInstance.getId());
return processInstance.getId();
}
/**
* 处理请假申请
* @param taskId 任务ID
* @param approved 是否同意
* @return
*/
@Override
public String handleLeaveProcess(String taskId, boolean approved) {
logger.info("开始处理请假申请,任务ID为:{}", taskId);
// 获取当前任务
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 获取与任务关联的请假申请信息
LeaveRequestDTO leaveRequestDTO = (LeaveRequestDTO) taskService.getVariable(taskId, "leaveLeaveRequestDTO");
// 如果同意请假申请,更新请假信息并完成任务;否则直接完成任务
if (approved) {
leaveRequestDTO.setStatus(LeaveStatus.APPROVED);
logger.info("请假申请已通过");
} else {
leaveRequestDTO.setStatus(LeaveStatus.REJECTED);
logger.info("请假申请已驳回");
}
// 更新请假申请信息
taskService.setVariable(task.getId(), "leaveLeaveRequestDTO", leaveRequestDTO);
// 完成任务
taskService.complete(taskId);
logger.info("请假申请处理完成,任务ID为:{}", taskId);
return taskId;
}
/**
* 获取请假申请历史记录
* @param processInstanceId 流程实例ID
* @return
*/
@Override
public List<LeaveRequestDTO> getLeaveRequestHistory(String processInstanceId) {
logger.info("开始获取请假申请历史记录,流程实例ID为:{}", processInstanceId);
// 查询流程实例的历史记录
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId).finished().list();
List<LeaveRequestDTO> leaveRequestDTOList = new ArrayList<>();
for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) {
// 获取任务关联的请假申请信息
LeaveRequestDTO leaveRequestDTO = (LeaveRequestDTO) historyService.getVariable(historicTaskInstance.getId(), "leaveLeaveRequestDTO");
leaveRequestDTO.setApproved(historicTaskInstance.getEndTime() != null);
leaveRequestDTOList.add(leaveRequestDTO);
}
logger.info("请假申请历史记录获取成功,流程实例ID为:{}", processInstanceId);
return leaveRequestDTOList;
}
}
```
该代码示例中,通过`runtimeService.startProcessInstanceByKey`方法启动了一个key为`leaveProcess`的流程实例。在流程实例启动后,通过`taskService.createTaskQuery().processInstanceId`查询出该流程实例的任务,并设置任务处理人和任务关联的请假申请信息。在处理任务时,需要先查询任务关联的请假申请信息,然后根据是否同意请假申请更新请假信息。最后,通过`taskService.complete`方法完成任务。在获取请假申请历史记录时,通过`historyService.createHistoricTaskInstanceQuery()`查询出与该流程实例关联的历史任务,并根据任务ID获取任务关联的请假申请信息。
flowable获取taskID
在Activiti (Flowable) 工作流引擎中,如果你想要获取任务(task)的 ID,通常是在处理用户任务或者监听工作流实例的过程中。你可以通过以下几个步骤来获取:
1. **查询任务**:首先,你需要查询当前的任务集合,这可以使用`TaskService`提供的方法,如`TaskQuery`。例如:
```java
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().list();
```
2. **访问任务详情**:查询到任务列表后,你可以遍历并获取每个任务的ID:
```java
for (Task task : tasks) {
String taskId = task.getId(); // 这就是你要的task ID
System.out.println("Task ID: " + taskId);
}
```
3. **根据流程实例获取任务**:如果你知道某个流程实例的ID,可以直接通过该实例获取关联的任务:
```java
Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult();
Task task = taskService.createTaskQuery().executionId(execution.getId()).singleResult();
String taskId = task.getId();
```
记得,`processEngine` 和 `runtimeService` 都是 Activiti 提供的服务,分别用于管理和执行工作流。
阅读全文