Commit c039e7e6 by yuwei

项目初始化

parent a52c139f
...@@ -16,6 +16,7 @@ public class DataConstant { ...@@ -16,6 +16,7 @@ public class DataConstant {
TOKENTYPE("bearer "), TOKENTYPE("bearer "),
//security授权角色前缀 //security授权角色前缀
ROLEPREFIX("ROLE_"); ROLEPREFIX("ROLE_");
Security(String val){ Security(String val){
this.val = val; this.val = val;
} }
...@@ -33,6 +34,7 @@ public class DataConstant { ...@@ -33,6 +34,7 @@ public class DataConstant {
public enum TrueOrFalse { public enum TrueOrFalse {
FALSE("0",false), FALSE("0",false),
TRUE("1",true); TRUE("1",true);
TrueOrFalse(String key, boolean val){ TrueOrFalse(String key, boolean val){
this.key = key; this.key = key;
this.val = val; this.val = val;
...@@ -62,6 +64,7 @@ public class DataConstant { ...@@ -62,6 +64,7 @@ public class DataConstant {
DEPT("user_dept", "用户部门"), DEPT("user_dept", "用户部门"),
ROLE("user_role", "用户角色"), ROLE("user_role", "用户角色"),
POST("user_post", "用户岗位"); POST("user_post", "用户岗位");
UserAdditionalInfo(String key, String val){ UserAdditionalInfo(String key, String val){
this.key = key; this.key = key;
this.val = val; this.val = val;
...@@ -85,6 +88,7 @@ public class DataConstant { ...@@ -85,6 +88,7 @@ public class DataConstant {
public enum EnableState { public enum EnableState {
DISABLE("0","禁用"), DISABLE("0","禁用"),
ENABLE("1","启用"); ENABLE("1","启用");
EnableState(String key, String val){ EnableState(String key, String val){
this.key = key; this.key = key;
this.val = val; this.val = val;
...@@ -107,34 +111,13 @@ public class DataConstant { ...@@ -107,34 +111,13 @@ public class DataConstant {
*/ */
public enum AuditState{ public enum AuditState{
WAIT("1","待提交"), WAIT("1","待提交"),
AUDIT("2","审核中"), BACK("2", "已退回"),
AGREE("3","成功"), AUDIT("3","审核中"),
REJECT("4","失败"), AGREE("4","通过"),
CANCEL("5", "已撤销"); REJECT("5","不通过"),
AuditState(String key, String val){ CANCEL("6", "已撤销");
this.key = key;
this.val = val;
}
private final String key;
private final String val;
public String getKey() { AuditState(String key, String val){
return key;
}
public String getVal() {
return val;
}
}
/**
* 流程审批状态
*/
public enum ApproveState{
REJECT("0","不通过"),
AGREE("1","通过");
ApproveState(String key, String val){
this.key = key; this.key = key;
this.val = val; this.val = val;
} }
......
...@@ -17,6 +17,11 @@ spring: ...@@ -17,6 +17,11 @@ spring:
port: 5672 port: 5672
username: admin username: admin
password: 1234@abcd password: 1234@abcd
publisher-confrems: true
publisher-returns: true
listener:
simple:
acknowledge-mode: manual
datasource: datasource:
dynamic: dynamic:
primary: mysql primary: mysql
......
...@@ -30,8 +30,12 @@ public class RabbitMqListenerConfig { ...@@ -30,8 +30,12 @@ public class RabbitMqListenerConfig {
try { try {
log.info("fanoutQueueRelease接收到了:{}", id); log.info("fanoutQueueRelease接收到了:{}", id);
queueHandlerService.handlerRelease(id); queueHandlerService.handlerRelease(id);
// 手动确认
channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
}catch (Exception e){ }catch (Exception e){
log.error("全局异常信息ex={}, StackTrace={}", e.getMessage(), ThrowableUtil.getStackTrace(e)); log.error("全局异常信息ex={}, StackTrace={}", e.getMessage(), ThrowableUtil.getStackTrace(e));
// 拒绝策略
channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
} }
} }
...@@ -45,8 +49,12 @@ public class RabbitMqListenerConfig { ...@@ -45,8 +49,12 @@ public class RabbitMqListenerConfig {
try { try {
log.info("fanoutQueueCancel接收到了:{}", id); log.info("fanoutQueueCancel接收到了:{}", id);
queueHandlerService.handlerCancel(id); queueHandlerService.handlerCancel(id);
// 手动确认
channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
}catch (Exception e){ }catch (Exception e){
log.error("全局异常信息ex={}, StackTrace={}", e.getMessage(), ThrowableUtil.getStackTrace(e)); log.error("全局异常信息ex={}, StackTrace={}", e.getMessage(), ThrowableUtil.getStackTrace(e));
// 拒绝策略
channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
} }
} }
} }
...@@ -363,20 +363,48 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit ...@@ -363,20 +363,48 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
@Override @Override
public void releaseDataApi(String id) { public void releaseDataApi(String id) {
// 消息是否成功发送到Exchange
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
if (ack) {
log.info("消息成功发送到Exchange");
DataApiEntity dataApiEntity = new DataApiEntity();
dataApiEntity.setId(id);
dataApiEntity.setStatus(DataConstant.ApiState.RELEASE.getKey());
dataApiDao.updateById(dataApiEntity);
} else {
log.error("消息发送到Exchange失败, {}, cause: {}", correlationData, cause);
}
});
// 触发setReturnCallback回调必须设置mandatory=true, 否则Exchange没有找到Queue就会丢弃掉消息, 而不会触发回调
rabbitTemplate.setMandatory(true);
// 消息是否从Exchange路由到Queue, 注意: 这是一个失败回调, 只有消息从Exchange路由到Queue失败才会回调这个方法
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
log.error("消息从Exchange路由到Queue失败: exchange: {}, route: {}, replyCode: {}, replyText: {}, message: {}", exchange, routingKey, replyCode, replyText, message);
});
rabbitTemplate.convertAndSend(RabbitMqConstant.FANOUT_EXCHANGE_API_RELEASE_NAME, "", id); rabbitTemplate.convertAndSend(RabbitMqConstant.FANOUT_EXCHANGE_API_RELEASE_NAME, "", id);
DataApiEntity dataApiEntity = new DataApiEntity();
dataApiEntity.setId(id);
dataApiEntity.setStatus(DataConstant.ApiState.RELEASE.getKey());
dataApiDao.updateById(dataApiEntity);
} }
@Override @Override
public void cancelDataApi(String id) { public void cancelDataApi(String id) {
// 消息是否成功发送到Exchange
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
if (ack) {
log.info("消息成功发送到Exchange");
DataApiEntity dataApiEntity = new DataApiEntity();
dataApiEntity.setId(id);
dataApiEntity.setStatus(DataConstant.ApiState.CANCEL.getKey());
dataApiDao.updateById(dataApiEntity);
} else {
log.error("消息发送到Exchange失败, {}, cause: {}", correlationData, cause);
}
});
// 触发setReturnCallback回调必须设置mandatory=true, 否则Exchange没有找到Queue就会丢弃掉消息, 而不会触发回调
rabbitTemplate.setMandatory(true);
// 消息是否从Exchange路由到Queue, 注意: 这是一个失败回调, 只有消息从Exchange路由到Queue失败才会回调这个方法
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
log.error("消息从Exchange路由到Queue失败: exchange: {}, route: {}, replyCode: {}, replyText: {}, message: {}", exchange, routingKey, replyCode, replyText, message);
});
rabbitTemplate.convertAndSend(RabbitMqConstant.FANOUT_EXCHANGE_API_CANCEL_NAME, "", id); rabbitTemplate.convertAndSend(RabbitMqConstant.FANOUT_EXCHANGE_API_CANCEL_NAME, "", id);
DataApiEntity dataApiEntity = new DataApiEntity();
dataApiEntity.setId(id);
dataApiEntity.setStatus(DataConstant.ApiState.CANCEL.getKey());
dataApiDao.updateById(dataApiEntity);
} }
@Override @Override
......
...@@ -22,7 +22,7 @@ public class ProcessInstanceCreateRequest implements Serializable { ...@@ -22,7 +22,7 @@ public class ProcessInstanceCreateRequest implements Serializable {
@ApiModelProperty(value = "业务ID") @ApiModelProperty(value = "业务ID")
private String businessKey; private String businessKey;
@ApiModelProperty(value = "业务类型") @ApiModelProperty(value = "业务类型")
private String businessType; private String businessCode;
@ApiModelProperty(value = "业务名称") @ApiModelProperty(value = "业务名称")
private String businessName; private String businessName;
@ApiModelProperty(value = "流程参数") @ApiModelProperty(value = "流程参数")
...@@ -31,7 +31,7 @@ public class ProcessInstanceCreateRequest implements Serializable { ...@@ -31,7 +31,7 @@ public class ProcessInstanceCreateRequest implements Serializable {
public Map<String, Object> getVariables() { public Map<String, Object> getVariables() {
variables.put(VariablesEnum.submitter.toString(), submitter); variables.put(VariablesEnum.submitter.toString(), submitter);
variables.put(VariablesEnum.businessKey.toString(), businessKey); variables.put(VariablesEnum.businessKey.toString(), businessKey);
variables.put(VariablesEnum.businessType.toString(), businessType); variables.put(VariablesEnum.businessCode.toString(), businessCode);
variables.put(VariablesEnum.businessName.toString(), businessName); variables.put(VariablesEnum.businessName.toString(), businessName);
return variables; return variables;
} }
......
...@@ -10,7 +10,7 @@ import lombok.Getter; ...@@ -10,7 +10,7 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum ActionEnum { public enum ActionEnum {
COMPLETE("complete", "完成任务"), COMPLETE("complete", "任务完成"),
CLAIM("claim", "任务签收"), CLAIM("claim", "任务签收"),
UNCLAIM("unclaim", "任务反签收"), UNCLAIM("unclaim", "任务反签收"),
DELEGATE("delegate", "任务委派"), DELEGATE("delegate", "任务委派"),
......
...@@ -26,13 +26,13 @@ public enum VariablesEnum { ...@@ -26,13 +26,13 @@ public enum VariablesEnum {
/** 失败结束节点 */ /** 失败结束节点 */
rejectEnd, rejectEnd,
/** 活动主题 */ /** 业务主题 */
businessName, businessName,
/** 活动类型 */ /** 业务类型 */
businessType, businessCode,
/** 主键id */ /** 业务主键 */
businessKey, businessKey,
/** 审核结果 */ /** 审核结果 */
......
...@@ -12,6 +12,6 @@ public class FlowInstanceQuery extends BaseQueryParams { ...@@ -12,6 +12,6 @@ public class FlowInstanceQuery extends BaseQueryParams {
private String name; private String name;
private String businessKey; private String businessKey;
private String businessType; private String businessCode;
private String businessName; private String businessName;
} }
...@@ -17,7 +17,7 @@ public class FlowTaskQuery extends BaseQueryParams { ...@@ -17,7 +17,7 @@ public class FlowTaskQuery extends BaseQueryParams {
private List<String> groupIds; private List<String> groupIds;
private String name; private String name;
private String businessKey; private String businessKey;
private String businessType; private String businessCode;
private String businessName; private String businessName;
private String taskDefinitionKey; private String taskDefinitionKey;
private String processInstanceId; private String processInstanceId;
......
...@@ -52,7 +52,7 @@ public class FlowHistTaskVo implements Serializable { ...@@ -52,7 +52,7 @@ public class FlowHistTaskVo implements Serializable {
* 业务相关 * 业务相关
*/ */
private String businessKey; private String businessKey;
private String businessType; private String businessCode;
private String businessName; private String businessName;
private Map<String,Object> variables; private Map<String,Object> variables;
...@@ -61,7 +61,7 @@ public class FlowHistTaskVo implements Serializable { ...@@ -61,7 +61,7 @@ public class FlowHistTaskVo implements Serializable {
if(null != variables){ if(null != variables){
//放入业务常量 //放入业务常量
this.businessKey = (String) variables.get(VariablesEnum.businessKey.toString()); this.businessKey = (String) variables.get(VariablesEnum.businessKey.toString());
this.businessType = (String) variables.get(VariablesEnum.businessType.toString()); this.businessCode = (String) variables.get(VariablesEnum.businessCode.toString());
this.businessName = (String) variables.get(VariablesEnum.businessName.toString()); this.businessName = (String) variables.get(VariablesEnum.businessName.toString());
} }
} }
......
...@@ -53,10 +53,14 @@ public class FlowTaskVo implements Serializable { ...@@ -53,10 +53,14 @@ public class FlowTaskVo implements Serializable {
private Boolean isUpdated; private Boolean isUpdated;
private Boolean isDeleted; private Boolean isDeleted;
/** /**
* 是否委派任务
*/
private Boolean isDelegation;
/**
* 业务相关 * 业务相关
*/ */
private String businessKey; private String businessKey;
private String businessType; private String businessCode;
private String businessName; private String businessName;
private Map<String,Object> variables; private Map<String,Object> variables;
...@@ -65,7 +69,7 @@ public class FlowTaskVo implements Serializable { ...@@ -65,7 +69,7 @@ public class FlowTaskVo implements Serializable {
if(null != variables){ if(null != variables){
//放入业务常量 //放入业务常量
this.businessKey = (String) variables.get(VariablesEnum.businessKey.toString()); this.businessKey = (String) variables.get(VariablesEnum.businessKey.toString());
this.businessType = (String) variables.get(VariablesEnum.businessType.toString()); this.businessCode = (String) variables.get(VariablesEnum.businessCode.toString());
this.businessName = (String) variables.get(VariablesEnum.businessName.toString()); this.businessName = (String) variables.get(VariablesEnum.businessName.toString());
} }
} }
......
...@@ -29,9 +29,9 @@ public class FlowInstanceController extends BaseController { ...@@ -29,9 +29,9 @@ public class FlowInstanceController extends BaseController {
@PostMapping("/startById") @PostMapping("/startById")
@ApiOperation(value = "启动通过流程定义ID流程实例") @ApiOperation(value = "启动通过流程定义ID流程实例")
@ApiImplicitParam(name = "request", value = "启动流程实例实体request", required = true, dataType = "ProcessInstanceCreateRequest") @ApiImplicitParam(name = "request", value = "启动流程实例实体request", required = true, dataType = "ProcessInstanceCreateRequest")
public R startById(@RequestBody ProcessInstanceCreateRequest request) { public FlowInstanceVo startById(@RequestBody ProcessInstanceCreateRequest request) {
flowInstanceService.startProcessInstanceById(request); FlowInstanceVo flowInstanceVo = flowInstanceService.startProcessInstanceById(request);
return R.ok(); return flowInstanceVo;
} }
@ApiOperation(value = "分页查询") @ApiOperation(value = "分页查询")
......
...@@ -24,6 +24,17 @@ public class FlowTaskController extends BaseController { ...@@ -24,6 +24,17 @@ public class FlowTaskController extends BaseController {
@Autowired @Autowired
private FlowTaskService flowTaskService; private FlowTaskService flowTaskService;
@ApiOperation(value = "执行任务", notes = "执行任务类型:claim签收 unclaim反签收 complete完成 delegate任务委派 resolve任务归还 assignee任务转办")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "request", value = "执行任务实体request", required = true, dataType = "TaskRequest")
})
@PostMapping(value = "/execute/{taskId}")
public R executeTask(@PathVariable String taskId, @RequestBody TaskRequest request) {
flowTaskService.execute(request);
return R.ok();
}
@ApiOperation(value = "分页查询待办任务") @ApiOperation(value = "分页查询待办任务")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "flowTaskQuery", value = "查询实体flowTaskQuery", required = true, dataTypeClass = FlowTaskQuery.class) @ApiImplicitParam(name = "flowTaskQuery", value = "查询实体flowTaskQuery", required = true, dataTypeClass = FlowTaskQuery.class)
...@@ -45,15 +56,4 @@ public class FlowTaskController extends BaseController { ...@@ -45,15 +56,4 @@ public class FlowTaskController extends BaseController {
JsonPage<FlowHistTaskVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), page.getRecords()); JsonPage<FlowHistTaskVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), page.getRecords());
return R.ok().setData(jsonPage); return R.ok().setData(jsonPage);
} }
@ApiOperation(value = "执行任务", notes = "执行任务类型:claim签收 unclaim反签收 complete完成 delegate任务委派 resolve任务归还 assignee任务转办")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "request", value = "执行任务实体request", required = true, dataType = "TaskRequest")
})
@PostMapping(value = "/execute/{taskId}")
public R executeTask(@PathVariable String taskId, @RequestBody TaskRequest request) {
flowTaskService.execute(request);
return R.ok();
}
} }
package cn.datax.service.workflow.flowable; package cn.datax.service.workflow.flowable;
import cn.datax.common.core.DataConstant;
import cn.datax.service.workflow.api.enums.VariablesEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener; import org.flowable.engine.delegate.ExecutionListener;
import java.util.Map;
@Slf4j @Slf4j
public class EndTaskListener implements ExecutionListener { public class EndTaskListener implements ExecutionListener {
@Override @Override
public void notify(DelegateExecution delegateExecution) { public void notify(DelegateExecution delegateExecution) {
log.info("业务编号{}", delegateExecution.getProcessInstanceBusinessKey()); log.info("业务编号{}", delegateExecution.getProcessInstanceBusinessKey());
log.info("节点{},{}", delegateExecution.getId(), delegateExecution.getEventName()); log.info("节点{},{},{}", delegateExecution.getId(), delegateExecution.getEventName(), delegateExecution.getCurrentActivityId());
log.info("Variables:{}", delegateExecution.getVariables());
// 业务状态变更操作
Map<String, Object> variables = delegateExecution.getVariables();
// 发送消息队列
String businessKey = (String) variables.get(VariablesEnum.businessKey.toString());
String businessCode = (String) variables.get(VariablesEnum.businessCode.toString());
log.info("业务结束:{},{}", businessKey, businessCode);
if (delegateExecution.getCurrentActivityId().equals(VariablesEnum.approveEnd.toString())) {
log.info("业务结束状态:{}", DataConstant.AuditState.AGREE.getKey());
} else if (delegateExecution.getCurrentActivityId().equals(VariablesEnum.rejectEnd.toString())) {
log.info("业务结束状态:{}", DataConstant.AuditState.REJECT.getKey());
}
} }
} }
...@@ -7,7 +7,7 @@ import org.flowable.task.service.delegate.DelegateTask; ...@@ -7,7 +7,7 @@ import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener; import org.flowable.task.service.delegate.TaskListener;
@Slf4j @Slf4j
public class FinalAuditTaskListener implements TaskListener { public class FinalAuditCreateTaskListener implements TaskListener {
@Override @Override
public void notify(DelegateTask delegateTask) { public void notify(DelegateTask delegateTask) {
...@@ -16,6 +16,7 @@ public class FinalAuditTaskListener implements TaskListener { ...@@ -16,6 +16,7 @@ public class FinalAuditTaskListener implements TaskListener {
taskService.setAssignee(delegateTask.getId(), "1214835832967581698"); taskService.setAssignee(delegateTask.getId(), "1214835832967581698");
// taskService.addCandidateUser(delegateTask.getId(), ""); // taskService.addCandidateUser(delegateTask.getId(), "");
// taskService.addCandidateGroup(delegateTask.getId(), ""); // taskService.addCandidateGroup(delegateTask.getId(), "");
log.info("Variables:{}", delegateTask.getVariables());
log.info("任务执行人:{}", delegateTask.getAssignee()); log.info("任务执行人:{}", delegateTask.getAssignee());
log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey()); log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey());
log.info("退出终审节点用户任务启动监听器"); log.info("退出终审节点用户任务启动监听器");
......
package cn.datax.service.workflow.flowable;
import cn.datax.common.utils.SpringContextHolder;
import cn.datax.service.workflow.api.enums.VariablesEnum;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.TaskService;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;
import java.util.Map;
import java.util.Optional;
@Slf4j
public class InitialAuditCompleteTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
log.info("进入初审节点用户任务完成监听器");
log.info("Variables:{}", delegateTask.getVariables());
log.info("任务执行人:{}", delegateTask.getAssignee());
log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey());
Map<String, Object> variables = delegateTask.getVariables();
Boolean approved = (Boolean) Optional.ofNullable(variables).map(s -> s.get(VariablesEnum.approved)).orElse(true);
log.info("审核结果: {}", approved);
// 退回操作
if (!approved) {
// 发送消息队列
String businessKey = (String) variables.get(VariablesEnum.businessKey.toString());
String businessCode = (String) variables.get(VariablesEnum.businessCode.toString());
log.info("业务退回:{},{}", businessKey, businessCode);
}
log.info("退出初审节点用户任务完成监听器");
}
}
...@@ -7,7 +7,7 @@ import org.flowable.task.service.delegate.DelegateTask; ...@@ -7,7 +7,7 @@ import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener; import org.flowable.task.service.delegate.TaskListener;
@Slf4j @Slf4j
public class InitialAuditTaskListener implements TaskListener { public class InitialAuditCreateTaskListener implements TaskListener {
@Override @Override
public void notify(DelegateTask delegateTask) { public void notify(DelegateTask delegateTask) {
...@@ -16,6 +16,7 @@ public class InitialAuditTaskListener implements TaskListener { ...@@ -16,6 +16,7 @@ public class InitialAuditTaskListener implements TaskListener {
taskService.setAssignee(delegateTask.getId(), "1214835832967581698"); taskService.setAssignee(delegateTask.getId(), "1214835832967581698");
// taskService.addCandidateUser(delegateTask.getId(), ""); // taskService.addCandidateUser(delegateTask.getId(), "");
// taskService.addCandidateGroup(delegateTask.getId(), ""); // taskService.addCandidateGroup(delegateTask.getId(), "");
log.info("Variables:{}", delegateTask.getVariables());
log.info("任务执行人:{}", delegateTask.getAssignee()); log.info("任务执行人:{}", delegateTask.getAssignee());
log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey()); log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey());
log.info("退出初审节点用户任务启动监听器"); log.info("退出初审节点用户任务启动监听器");
......
package cn.datax.service.workflow.flowable;
import cn.datax.common.core.DataConstant;
import cn.datax.service.workflow.api.enums.VariablesEnum;
import lombok.extern.slf4j.Slf4j;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;
import java.util.Map;
@Slf4j
public class SubmitCompleteTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
log.info("进入提交节点用户任务完成监听器");
log.info("Variables:{}", delegateTask.getVariables());
log.info("任务执行人:{}", delegateTask.getAssignee());
log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey());
// 业务状态变更操作
Map<String, Object> variables = delegateTask.getVariables();
// 发送消息队列
String businessKey = (String) variables.get(VariablesEnum.businessKey.toString());
String businessCode = (String) variables.get(VariablesEnum.businessCode.toString());
log.info("业务审核中:{},{}", businessKey, businessCode);
log.info("业务审核中状态:{}", DataConstant.AuditState.AUDIT.getKey());
log.info("退出提交节点用户任务完成监听器");
}
}
...@@ -38,8 +38,9 @@ public interface FlowInstanceService { ...@@ -38,8 +38,9 @@ public interface FlowInstanceService {
/** /**
* 启动流程实例 * 启动流程实例
* @param request * @param request
* @return
*/ */
void startProcessInstanceById(ProcessInstanceCreateRequest request); FlowInstanceVo startProcessInstanceById(ProcessInstanceCreateRequest request);
/** /**
* 获取流程图图片 * 获取流程图图片
......
...@@ -7,6 +7,7 @@ import cn.datax.service.workflow.api.query.FlowInstanceQuery; ...@@ -7,6 +7,7 @@ import cn.datax.service.workflow.api.query.FlowInstanceQuery;
import cn.datax.service.workflow.api.vo.FlowInstanceVo; import cn.datax.service.workflow.api.vo.FlowInstanceVo;
import cn.datax.service.workflow.service.FlowInstanceService; import cn.datax.service.workflow.service.FlowInstanceService;
import cn.datax.service.workflow.utils.BeanCopyUtil; import cn.datax.service.workflow.utils.BeanCopyUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -25,6 +26,7 @@ import org.flowable.engine.runtime.ProcessInstanceBuilder; ...@@ -25,6 +26,7 @@ import org.flowable.engine.runtime.ProcessInstanceBuilder;
import org.flowable.engine.runtime.ProcessInstanceQuery; import org.flowable.engine.runtime.ProcessInstanceQuery;
import org.flowable.engine.task.Comment; import org.flowable.engine.task.Comment;
import org.flowable.image.impl.DefaultProcessDiagramGenerator; import org.flowable.image.impl.DefaultProcessDiagramGenerator;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
...@@ -61,11 +63,11 @@ public class FlowInstanceServiceImpl implements FlowInstanceService { ...@@ -61,11 +63,11 @@ public class FlowInstanceServiceImpl implements FlowInstanceService {
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessKey())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessKey())){
processInstanceQuery.processInstanceBusinessKey(flowInstanceQuery.getBusinessKey()); processInstanceQuery.processInstanceBusinessKey(flowInstanceQuery.getBusinessKey());
} }
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessType())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessCode())){
processInstanceQuery.variableValueEquals(VariablesEnum.businessType.toString(), flowInstanceQuery.getBusinessType()); processInstanceQuery.variableValueEquals(VariablesEnum.businessCode.toString(), flowInstanceQuery.getBusinessCode());
} }
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessName())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessName())){
processInstanceQuery.variableValueEquals(VariablesEnum.businessName.toString(), flowInstanceQuery.getBusinessName()); processInstanceQuery.variableValueLike(VariablesEnum.businessName.toString(), flowInstanceQuery.getBusinessName());
} }
List<ProcessInstance> processInstanceList = processInstanceQuery.includeProcessVariables() List<ProcessInstance> processInstanceList = processInstanceQuery.includeProcessVariables()
.orderByStartTime().desc() .orderByStartTime().desc()
...@@ -97,10 +99,10 @@ public class FlowInstanceServiceImpl implements FlowInstanceService { ...@@ -97,10 +99,10 @@ public class FlowInstanceServiceImpl implements FlowInstanceService {
} }
@Override @Override
public void startProcessInstanceById(ProcessInstanceCreateRequest request) { public FlowInstanceVo startProcessInstanceById(ProcessInstanceCreateRequest request) {
Assert.notNull(request.getSubmitter(), "请输入提交人"); Assert.notNull(request.getSubmitter(), "请输入提交人");
Assert.notNull(request.getBusinessKey(), "请输入业务id"); Assert.notNull(request.getBusinessKey(), "请输入业务id");
Assert.notNull(request.getBusinessType(), "请输入业务类型"); Assert.notNull(request.getBusinessCode(), "请输入业务类型");
Assert.notNull(request.getProcessDefinitionId(), "请输入流程定义ID"); Assert.notNull(request.getProcessDefinitionId(), "请输入流程定义ID");
ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder(); ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder();
if(StrUtil.isNotBlank(request.getProcessDefinitionId())){ if(StrUtil.isNotBlank(request.getProcessDefinitionId())){
...@@ -114,10 +116,25 @@ public class FlowInstanceServiceImpl implements FlowInstanceService { ...@@ -114,10 +116,25 @@ public class FlowInstanceServiceImpl implements FlowInstanceService {
processInstanceBuilder.name(request.getBusinessName()); processInstanceBuilder.name(request.getBusinessName());
} }
processInstanceBuilder.variables(request.getVariables()); processInstanceBuilder.variables(request.getVariables());
Authentication.setAuthenticatedUserId(SecurityUtil.getUserId()); Authentication.setAuthenticatedUserId(request.getSubmitter());
ProcessInstance processInstance = processInstanceBuilder.start(); ProcessInstance processInstance = processInstanceBuilder.start();
Authentication.setAuthenticatedUserId(null); Authentication.setAuthenticatedUserId(null);
log.info("发起流程成功,流程ID:{}", processInstance.getId()); log.info("发起流程成功,流程ID:{}", processInstance.getId());
this.completeFirstTask(request.getSubmitter(), processInstance.getProcessInstanceId());
FlowInstanceVo flowInstanceVo = new FlowInstanceVo();
BeanUtil.copyProperties(processInstance, flowInstanceVo);
return flowInstanceVo;
}
private void completeFirstTask(String submitter, String processInstanceId){
Task task = taskService.createTaskQuery().taskAssignee(submitter).processInstanceId(processInstanceId).active().singleResult();
if (task != null) {
log.info("自动完成第一个任务,任务ID:{}", task.getId());
Comment comment = taskService.addComment(task.getId(), processInstanceId, "任务提交");
comment.setUserId(submitter);
taskService.saveComment(comment);
taskService.complete(task.getId());
}
} }
@Override @Override
...@@ -175,11 +192,11 @@ public class FlowInstanceServiceImpl implements FlowInstanceService { ...@@ -175,11 +192,11 @@ public class FlowInstanceServiceImpl implements FlowInstanceService {
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessKey())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessKey())){
historicProcessInstanceQuery.processInstanceBusinessKey(flowInstanceQuery.getBusinessKey()); historicProcessInstanceQuery.processInstanceBusinessKey(flowInstanceQuery.getBusinessKey());
} }
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessType())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessCode())){
historicProcessInstanceQuery.variableValueEquals(VariablesEnum.businessType.toString(), flowInstanceQuery.getBusinessType()); historicProcessInstanceQuery.variableValueEquals(VariablesEnum.businessCode.toString(), flowInstanceQuery.getBusinessCode());
} }
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessName())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessName())){
historicProcessInstanceQuery.variableValueEquals(VariablesEnum.businessName.toString(), flowInstanceQuery.getBusinessName()); historicProcessInstanceQuery.variableValueLike(VariablesEnum.businessName.toString(), flowInstanceQuery.getBusinessName());
} }
List<HistoricProcessInstance> historicProcessInstanceList = historicProcessInstanceQuery.includeProcessVariables() List<HistoricProcessInstance> historicProcessInstanceList = historicProcessInstanceQuery.includeProcessVariables()
.orderByProcessInstanceStartTime().desc() .orderByProcessInstanceStartTime().desc()
...@@ -197,11 +214,11 @@ public class FlowInstanceServiceImpl implements FlowInstanceService { ...@@ -197,11 +214,11 @@ public class FlowInstanceServiceImpl implements FlowInstanceService {
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessKey())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessKey())){
historicProcessInstanceQuery.processInstanceBusinessKey(flowInstanceQuery.getBusinessKey()); historicProcessInstanceQuery.processInstanceBusinessKey(flowInstanceQuery.getBusinessKey());
} }
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessType())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessCode())){
historicProcessInstanceQuery.variableValueEquals(VariablesEnum.businessType.toString(), flowInstanceQuery.getBusinessType()); historicProcessInstanceQuery.variableValueEquals(VariablesEnum.businessCode.toString(), flowInstanceQuery.getBusinessCode());
} }
if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessName())){ if(StrUtil.isNotBlank(flowInstanceQuery.getBusinessName())){
historicProcessInstanceQuery.variableValueEquals(VariablesEnum.businessName.toString(), flowInstanceQuery.getBusinessName()); historicProcessInstanceQuery.variableValueLike(VariablesEnum.businessName.toString(), flowInstanceQuery.getBusinessName());
} }
List<HistoricProcessInstance> historicProcessInstanceList = historicProcessInstanceQuery.includeProcessVariables() List<HistoricProcessInstance> historicProcessInstanceList = historicProcessInstanceQuery.includeProcessVariables()
.orderByProcessInstanceStartTime().desc() .orderByProcessInstanceStartTime().desc()
......
...@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.HistoryService; import org.flowable.engine.HistoryService;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.engine.task.Comment; import org.flowable.engine.task.Comment;
import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery; import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
...@@ -45,8 +46,8 @@ public class FlowTaskServiceImpl implements FlowTaskService { ...@@ -45,8 +46,8 @@ public class FlowTaskServiceImpl implements FlowTaskService {
if(StrUtil.isNotBlank(flowTaskQuery.getBusinessKey())){ if(StrUtil.isNotBlank(flowTaskQuery.getBusinessKey())){
taskQuery.processInstanceBusinessKey(flowTaskQuery.getBusinessKey()); taskQuery.processInstanceBusinessKey(flowTaskQuery.getBusinessKey());
} }
if(StrUtil.isNotBlank(flowTaskQuery.getBusinessType())){ if(StrUtil.isNotBlank(flowTaskQuery.getBusinessCode())){
taskQuery.processVariableValueEquals(VariablesEnum.businessType.toString(), flowTaskQuery.getBusinessType()); taskQuery.processVariableValueEquals(VariablesEnum.businessCode.toString(), flowTaskQuery.getBusinessCode());
} }
if(StrUtil.isNotBlank(flowTaskQuery.getBusinessName())){ if(StrUtil.isNotBlank(flowTaskQuery.getBusinessName())){
taskQuery.processVariableValueLike(VariablesEnum.businessName.toString(), flowTaskQuery.getBusinessName()); taskQuery.processVariableValueLike(VariablesEnum.businessName.toString(), flowTaskQuery.getBusinessName());
...@@ -61,6 +62,8 @@ public class FlowTaskServiceImpl implements FlowTaskService { ...@@ -61,6 +62,8 @@ public class FlowTaskServiceImpl implements FlowTaskService {
BeanUtil.copyProperties(task, flowTaskVo, "variables"); BeanUtil.copyProperties(task, flowTaskVo, "variables");
//放入流程参数 //放入流程参数
flowTaskVo.setVariables(task.getProcessVariables()); flowTaskVo.setVariables(task.getProcessVariables());
//是否委派任务
flowTaskVo.setIsDelegation(DelegationState.PENDING.equals(task.getDelegationState()));
list.add(flowTaskVo); list.add(flowTaskVo);
}); });
long count = taskQuery.count(); long count = taskQuery.count();
...@@ -77,11 +80,11 @@ public class FlowTaskServiceImpl implements FlowTaskService { ...@@ -77,11 +80,11 @@ public class FlowTaskServiceImpl implements FlowTaskService {
if (StrUtil.isNotBlank(flowTaskQuery.getBusinessKey())) { if (StrUtil.isNotBlank(flowTaskQuery.getBusinessKey())) {
historicTaskInstanceQuery.processInstanceBusinessKey(flowTaskQuery.getBusinessKey()); historicTaskInstanceQuery.processInstanceBusinessKey(flowTaskQuery.getBusinessKey());
} }
if (StrUtil.isNotBlank(flowTaskQuery.getBusinessName())) { if (StrUtil.isNotBlank(flowTaskQuery.getBusinessCode())) {
historicTaskInstanceQuery.processVariableValueEquals(VariablesEnum.businessType.toString(), flowTaskQuery.getBusinessName()); historicTaskInstanceQuery.processVariableValueEquals(VariablesEnum.businessCode.toString(), flowTaskQuery.getBusinessCode());
} }
if (StrUtil.isNotBlank(flowTaskQuery.getBusinessType())) { if (StrUtil.isNotBlank(flowTaskQuery.getBusinessName())) {
historicTaskInstanceQuery.processVariableValueLike(VariablesEnum.businessName.toString(), flowTaskQuery.getBusinessType()); historicTaskInstanceQuery.processVariableValueLike(VariablesEnum.businessName.toString(), flowTaskQuery.getBusinessName());
} }
List<HistoricTaskInstance> historicTaskInstanceList = historicTaskInstanceQuery.finished() List<HistoricTaskInstance> historicTaskInstanceList = historicTaskInstanceQuery.finished()
.includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc() .includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment