package com.camunda.zqh.service;
import com.camunda.zqh.dto.ApproveOrRejectRequestDTO;
import com.camunda.zqh.dto.ProcessTaskResponseDTO;
import com.camunda.zqh.dto.StudentHolidayRequestDTO;
import com.camunda.zqh.model.Employee;
import com.camunda.zqh.model.HolidayRequest;
import com.camunda.zqh.model.HolidayStatus;
import com.camunda.zqh.model.Student;
import com.camunda.zqh.repository.HolidayRequestRepository;
import org.camunda.bpm.engine.ProcessEngine;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@Service
public class CustomService {
@Autowired
private ProcessEngine processEngine;
@Autowired
private RestTemplate restTemplate;
@Autowired
private HolidayRequestRepository holidayRequestRepository;
@Value("${bpm.holidayProcessId}")
private String holidayRequestBpmKey;
@Value("${bpm.activeTask}")
private String activeTaskUrl;
@Value("${bpm.completeTask}")
private String completeTaskUrl;
private HttpHeaders headers() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
// Do any additional configuration here
return builder.build();
}
public void startProcess(String businessKey, StudentHolidayRequestDTO studentHolidayRequestDTO) {
// 1. 设置变量
Map<String, Object> variables = new HashMap<>();
variables.put("studentId", studentHolidayRequestDTO.getStudentId());
variables.put("studentName", studentHolidayRequestDTO.getStudentName());
variables.put("holidayDaysCount", studentHolidayRequestDTO.getRequestDaysCount());
// 2.开启流程实例
processEngine.getRuntimeService().startProcessInstanceByKey(holidayRequestBpmKey, businessKey, variables);
// 3.
startHolidayRequestProcess(studentHolidayRequestDTO, businessKey);
}
public void startHolidayRequestProcess(StudentHolidayRequestDTO studentHolidayRequestDTO, String businessKey) {
// 1. save holiday request
HolidayRequest holidayRequest = new HolidayRequest();
holidayRequest.setBusinessKey(businessKey);
holidayRequest.setHolidayStatus(new HolidayStatus(1));
holidayRequest.setEmployeeId(new Employee(1L));
holidayRequest.setHolidayStage("class teacher approval pending");
holidayRequest.setStudent(new Student(studentHolidayRequestDTO.getStudentId()));
holidayRequest.setRequestDays(studentHolidayRequestDTO.getRequestDaysCount());
holidayRequest = holidayRequestRepository.save(holidayRequest);
System.out.println("holidayRequest save success! requestId:{}" + holidayRequest.getRequestId());
// 2. query task list, then complete
// todo 这里查询结果打印出来...
completeTask(businessKey, null);
}
public void approve(ApproveOrRejectRequestDTO approveOrRejectRequestDTO) {
// 1. query holiday request
Optional<HolidayRequest> holidayRequestOptional = holidayRequestRepository.findByRequestId(approveOrRejectRequestDTO.getHolidayRequestId());
if (!holidayRequestOptional.isPresent()) {
// 查不到请假记录,直接返回(也可做error提示)
return;
}
HolidayRequest holidayRequest = holidayRequestOptional.get();
// 2.update holiday request status
holidayRequest.setBusinessKey(approveOrRejectRequestDTO.getBusinessKey());
holidayRequest.setHolidayStage(approveOrRejectRequestDTO.getHolidayStage());
holidayRequest.setHolidayStatus(new HolidayStatus(approveOrRejectRequestDTO.getHolidayStatusId()));
holidayRequestRepository.save(holidayRequest);
// 3.approve or deny
JSONObject variables = new JSONObject();
JSONObject mainVariable = new JSONObject();
JSONObject trueValue = new JSONObject();
trueValue.put("value", true);
JSONObject falseValue = new JSONObject();
falseValue.put("value", false);
// for test type
if (approveOrRejectRequestDTO.getHolidayStatusId() == 2) {
variables.put("approved", trueValue);
variables.put("isFurtherApprovelRequired", falseValue);
} else if (approveOrRejectRequestDTO.getHolidayStatusId() == 4) {
variables.put("approved", trueValue);
variables.put("isFurtherApprovelRequired", trueValue);
} else if (approveOrRejectRequestDTO.getHolidayStatusId() == 3) {
variables.put("approved", falseValue);
}
mainVariable.put("variables", variables);
completeTask(approveOrRejectRequestDTO.getBusinessKey(), mainVariable);
}
public String getCurrentTaskIdByBusinessKey(String businessKey) {
String url = activeTaskUrl + businessKey;
HttpEntity<String> entity = new HttpEntity<>(headers());
// send http request for holiday request, to get task list
ResponseEntity<ProcessTaskResponseDTO[]> result =
restTemplate.exchange(url, HttpMethod.GET, entity, ProcessTaskResponseDTO[].class);
System.out.println("当前任务列表:" + result);
return Objects.requireNonNull(result.getBody())[0].getId();
}
public void completeTask(String businessKey, JSONObject variables) {
String url = completeTaskUrl.replace("$TASK_ID", getCurrentTaskIdByBusinessKey(businessKey));
HttpEntity<String> entity;
if (null == variables) {
entity = new HttpEntity<>(headers());
} else {
entity = new HttpEntity<>(variables.toString(), headers());
}
System.out.println("entity===>" + entity);
restTemplate.exchange(url, HttpMethod.POST, entity, Object.class);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于 Spring Boot 的 Camunda 请假流程 demo 示例
共42个文件
java:13个
class:13个
xml:6个
需积分: 14 34 下载量 172 浏览量
2023-02-19
09:59:14
上传
评论 1
收藏 102KB ZIP 举报
温馨提示
以请假流程作为 Camunda 基本使用示例,学生先发起请假,然后老师审批,若审批时需要进一步审批,则再次发起审批
资源推荐
资源详情
资源评论
收起资源包目录
camunda-holiday-demo.zip (42个子文件)
camunda-holiday-demo
camunda-h2-database.mv.db 360KB
camunda-h2-database.trace.db 18KB
pom.xml 3KB
src
test
java
main
.DS_Store 6KB
resources
holiday.bpmn 10KB
log4j.properties 218B
application.yaml 470B
java
com
camunda
zqh
Application.java 308B
repository
HolidayRequestRepository.java 667B
delegate
HolidayRejectLoggingDelegate.java 1KB
controller
ProcessController.java 1KB
service
CustomService.java 6KB
model
HolidayRequest.java 387B
Employee.java 248B
Student.java 1KB
HolidayStatus.java 278B
dto
StudentHolidayRequestDTO.java 202B
ApproveOrRejectRequestDTO.java 281B
ProcessTaskResponseDTO.java 273B
listener
ClassTeacherListener.java 1KB
.idea
jarRepositories.xml 845B
runConfigurations.xml 337B
workspace.xml 3KB
misc.xml 528B
compiler.xml 604B
.gitignore 176B
target
classes
holiday.bpmn 10KB
log4j.properties 218B
application.yaml 470B
com
camunda
zqh
repository
HolidayRequestRepository.class 1KB
delegate
HolidayRejectLoggingDelegate.class 1KB
Application.class 689B
controller
ProcessController.class 2KB
service
CustomService.class 8KB
model
HolidayRequest.class 4KB
Student.class 1KB
HolidayStatus.class 2KB
Employee.class 2KB
dto
ProcessTaskResponseDTO.class 3KB
StudentHolidayRequestDTO.class 2KB
ApproveOrRejectRequestDTO.class 3KB
listener
ClassTeacherListener.class 2KB
generated-sources
annotations
共 42 条
- 1
资源评论
bboyzqh
- 粉丝: 8085
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功