提交 b7b6645c 编写于 作者: zhouweidong's avatar zhouweidong

工作流加签

上级 7b63e682
......@@ -239,7 +239,7 @@ public class ProcessInstanceListener extends AbstractFlowableEventListener {
}
}
try {
if(event.getExecution().getParent()!=null){
if(event.getExecution()!=null && event.getExecution().getParent()!=null){
ObjectMapper mapper = new ObjectMapper();
Object allRolesCnt = event.getExecution().getParent().getVariableLocal("all_roles_cnt");
......
......@@ -39,9 +39,11 @@ import org.flowable.engine.repository.DeploymentBuilder;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.task.Comment;
import org.flowable.identitylink.api.IdentityLink;
import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.service.impl.persistence.entity.HistoricTaskInstanceEntity;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.ui.common.security.SecurityUtils;
import org.flowable.ui.modeler.domain.AbstractModel;
import org.flowable.ui.modeler.domain.AppModelDefinition;
......@@ -1316,6 +1318,88 @@ public class WFCoreService
return strUsers;
}
/**
* 后加签 (转办-工作转移)
* @param system
* @param appname
* @param entity
* @param businessKey
* @param taskId
* @param taskWay
*/
public boolean beforeSign(String system, String appname,
String entity, String businessKey, String taskId, WFTaskWay taskWay) {
String userId=AuthenticationUser.getAuthenticationUser().getUserid();
if(StringUtils.isEmpty(userId))
if (StringUtils.isEmpty(userId))
throw new BadRequestAlertException("未传入当前用户", entity, businessKey);
Object signUsers = taskWay.get("users");
if (ObjectUtils.isEmpty(signUsers)) {
throw new BadRequestAlertException("未传入加签用户", entity, businessKey);
}
//当前任务
Task curTask = taskService.createTaskQuery().taskId(taskId).singleResult();
if(curTask == null){
throw new BadRequestAlertException(String.format("未能获取到[%s]运行任务", curTask.getId()),"","");
}
if(DelegationState.PENDING != curTask.getDelegationState()){
//生成加签任务
for (String signUser : ((String) signUsers).split(",")) {
Task signTask = createTask(curTask);
signTask.setParentTaskId(curTask.getId());
taskService.saveTask(signTask);
taskService.addUserIdentityLink(signTask.getId(), signUser, "candidate");
}
//挂起主任务
taskService.delegateTask(taskId, userId);
log.info("用户[{}]发起加签操作,挂起[{}]主任务", userId, taskId);
}
else{
throw new BadRequestAlertException(String.format("任务正在加签中,无法进行二次加签", curTask.getId()),"","");
}
return true;
}
/**
* 后加签 (转办)
* @param system
* @param appname
* @param entity
* @param businessKey
* @param taskId
* @param taskWay
*/
public boolean afterSign(String system,String appname,
String entity,String businessKey,String taskId,WFTaskWay taskWay){
String userId=AuthenticationUser.getAuthenticationUser().getUserid();
if(StringUtils.isEmpty(userId))
if (StringUtils.isEmpty(userId))
throw new BadRequestAlertException("未传入当前用户", entity, businessKey);
Object signUser = taskWay.get("users");
if (ObjectUtils.isEmpty(signUser)) {
throw new BadRequestAlertException("未传入转办用户", entity, businessKey);
}
Task curTask = taskService.createTaskQuery().taskId(taskId).singleResult();
if(curTask == null){
throw new BadRequestAlertException(String.format("未能获取到[%s]运行任务", taskId),"","");
}
log.info("用户[{}]发起转办操作,将任务[{}]转办至[{}]用户", userId, taskId,signUser);
//转办任务
taskService.deleteUserIdentityLink(curTask.getId(),userId,"candidate");
taskService.addUserIdentityLink(curTask.getId(), (String) signUser,"candidate");
//提交当前任务
Task signTask = createTask(curTask);
taskService.saveTask(signTask);
// taskService.addUserIdentityLink(signTask.getId(), String.valueOf(signUser), "candidate");
taskService.complete(signTask.getId());
return true;
}
/**
* 返回组成员,用于多实例会签( wfroleid = groupid +deptid )
* @param groupIds
......@@ -1642,4 +1726,29 @@ public class WFCoreService
}
return roles;
}
/**
* 创建任务
* @param sourceTask
* @return
*/
protected TaskEntity createTask(Task sourceTask) {
TaskEntity task = null;
if (sourceTask != null) {
//1.生成子任务
task = (TaskEntity) taskService.newTask();
task.setCategory(sourceTask.getCategory());
task.setDescription(sourceTask.getDescription());
task.setTenantId(sourceTask.getTenantId());
task.setAssignee(sourceTask.getAssignee());
task.setName(sourceTask.getName());
task.setProcessDefinitionId(sourceTask.getProcessDefinitionId());
task.setProcessInstanceId(sourceTask.getProcessInstanceId());
task.setTaskDefinitionKey(sourceTask.getTaskDefinitionKey());
task.setTaskDefinitionId(sourceTask.getTaskDefinitionId());
task.setPriority(sourceTask.getPriority());
task.setCreateTime(new Date());
}
return task;
}
}
......@@ -232,6 +232,24 @@ public class WFCoreResource
return ResponseEntity.status(HttpStatus.OK).body(wfCoreService.wfdeploybpmns(bpmnfiles));
}
@ApiOperation(value = "前加签任务", tags = {"工作流前加签任务" } ,notes = "前加签任务")
@RequestMapping(method = RequestMethod.POST, value = "/{system}-app-{appname}/{entity}/{businessKey}/tasks/{taskId}/beforesign")
public ResponseEntity<Boolean> beforeSign(@PathVariable("system") String system,@PathVariable("appname") String appname,
@PathVariable("entity") String entity,
@PathVariable("businessKey") String businessKey,@PathVariable("taskId") String taskId,
@RequestBody WFTaskWay taskWay) {
return ResponseEntity.status(HttpStatus.OK).body(wfCoreService.beforeSign(system,appname,entity,businessKey,taskId,taskWay));
}
@ApiOperation(value = "后加签任务", tags = {"工作流后加签任务" }, notes = "前加签任务")
@RequestMapping(method = RequestMethod.POST, value = "/{system}-app-{appname}/{entity}/{businessKey}/tasks/{taskId}/aftersign")
public ResponseEntity<Boolean> afterSign(@PathVariable("system") String system,@PathVariable("appname") String appname,
@PathVariable("entity") String entity,
@PathVariable("businessKey") String businessKey,@PathVariable("taskId") String taskId,
@RequestBody WFTaskWay taskWay) {
return ResponseEntity.status(HttpStatus.OK).body(wfCoreService.afterSign(system,appname,entity,businessKey,taskId,taskWay));
}
/**
* 将流程表单设置到响应头中
*/
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册