|
|
@@ -25,15 +25,18 @@ import com.hz.pm.api.user.security.model.UserFullInfoDTO; |
|
|
|
import com.ningdatech.basic.exception.BizException; |
|
|
|
import com.ningdatech.basic.util.CollUtils; |
|
|
|
import com.wflow.bean.entity.WflowModelHistorys; |
|
|
|
import com.wflow.workflow.notify.event.NodeCompleteEvent; |
|
|
|
import com.wflow.workflow.notify.event.NodeCreateEvent; |
|
|
|
import com.wflow.workflow.service.ProcessModelHistorysService; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent; |
|
|
|
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType; |
|
|
|
import org.flowable.common.engine.api.delegate.event.FlowableEvent; |
|
|
|
import org.flowable.common.engine.api.delegate.event.FlowableEventListener; |
|
|
|
import org.flowable.engine.TaskService; |
|
|
|
import org.flowable.task.api.Task; |
|
|
|
import org.flowable.task.api.history.HistoricTaskInstance; |
|
|
|
import org.flowable.task.service.impl.persistence.entity.TaskEntity; |
|
|
|
import org.springframework.context.ApplicationEvent; |
|
|
|
import org.springframework.context.event.EventListener; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
import java.time.Instant; |
|
|
@@ -51,7 +54,7 @@ import java.util.Set; |
|
|
|
@Slf4j |
|
|
|
@Component |
|
|
|
@RequiredArgsConstructor |
|
|
|
public class TaskCreatedListener implements FlowableEventListener { |
|
|
|
public class TaskCreatedListener { |
|
|
|
|
|
|
|
private final IProjectService projectService; |
|
|
|
private final IProjectInstService projectInstService; |
|
|
@@ -62,22 +65,31 @@ public class TaskCreatedListener implements FlowableEventListener { |
|
|
|
private final IPurchaseInstService purchaseInstService; |
|
|
|
private final IXinchuangInstService xinchuangInstService; |
|
|
|
private final IXinchuangService xinchuangService; |
|
|
|
private final TaskService taskService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onEvent(FlowableEvent event) { |
|
|
|
@EventListener(classes = NodeCreateEvent.class) |
|
|
|
public void onEvent(NodeCreateEvent event) { |
|
|
|
Instant instant = Instant.now().plusSeconds(5); |
|
|
|
ThreadPoolUtil.SCHEDULER.schedule(() -> handleEvent(event), instant); |
|
|
|
} |
|
|
|
|
|
|
|
private void handleEvent(FlowableEvent event) { |
|
|
|
if (event.getType().equals(FlowableEngineEventType.TASK_CREATED)) { |
|
|
|
FlowableEngineEntityEvent entityEvent = (FlowableEngineEntityEvent) event; |
|
|
|
@EventListener(classes = NodeCompleteEvent.class) |
|
|
|
public void onEvent(NodeCompleteEvent event) { |
|
|
|
Instant instant = Instant.now().plusSeconds(5); |
|
|
|
ThreadPoolUtil.SCHEDULER.schedule(() -> handleEvent(event), instant); |
|
|
|
} |
|
|
|
|
|
|
|
private void handleEvent(ApplicationEvent event) { |
|
|
|
if (event instanceof NodeCreateEvent) { |
|
|
|
NodeCreateEvent entityEvent = (NodeCreateEvent) event; |
|
|
|
String procDefId = entityEvent.getProcessDefinitionId(); |
|
|
|
String procInstId = entityEvent.getProcessInstanceId(); |
|
|
|
String procInstId = entityEvent.getInstCode(); |
|
|
|
WflowModelHistorys models = processModelHistorysService.getByProcessDefId(procDefId); |
|
|
|
ProjectProcessType procType = ProjectProcessType.getNoNull(models.getProcessType()); |
|
|
|
TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity(); |
|
|
|
UserFullInfoDTO assignee = userInfoHelper.getUserFullInfo(taskEntity.getAssignee()); |
|
|
|
Task task = taskService.createTaskQuery() |
|
|
|
.taskId(entityEvent.getTaskId()) |
|
|
|
.singleResult(); |
|
|
|
UserFullInfoDTO assignee = userInfoHelper.getUserFullInfo(task.getAssignee()); |
|
|
|
if (assignee == null || StrUtil.isBlank(assignee.getMhUserId())) { |
|
|
|
return; |
|
|
|
} |
|
|
@@ -95,9 +107,9 @@ public class TaskCreatedListener implements FlowableEventListener { |
|
|
|
// 发送信产平台待办 |
|
|
|
MHTodoTypeEnum todoType = getMhTodoTypeEnum(procType); |
|
|
|
MhTodoExtraParamDTO paramObj = MhTodoExtraParamDTO.builder() |
|
|
|
.taskId(taskEntity.getId()) |
|
|
|
.instanceId(taskEntity.getProcessInstanceId()) |
|
|
|
.nodeId(taskEntity.getTaskDefinitionId()) |
|
|
|
.taskId(task.getId()) |
|
|
|
.instanceId(task.getProcessInstanceId()) |
|
|
|
.nodeId(task.getTaskDefinitionId()) |
|
|
|
.userId(assignee.getUserId()) |
|
|
|
.userName(assignee.getRealName()) |
|
|
|
.path("/toDoCenter/handleDuringExamine") |
|
|
@@ -109,30 +121,32 @@ public class TaskCreatedListener implements FlowableEventListener { |
|
|
|
|| procType.equals(ProjectProcessType.SELF_TEST)) { |
|
|
|
PurchaseInst purchaseInst = purchaseInstService.getByProjectIdAndInstCode(paramObj.getProjectId(), procInstId); |
|
|
|
paramObj.setBidId(purchaseInst.getBidId()); |
|
|
|
paramObj.setProjectId(purchaseInst.getProjectId()); |
|
|
|
} |
|
|
|
String projectName; |
|
|
|
String projectName = ""; |
|
|
|
// 上边查不到ID的时候说明是手动新增的信创项目 |
|
|
|
if (paramObj.getBidId() == null) { |
|
|
|
XinchuangInst xinchuangInst = xinchuangInstService.getByInstCode(procInstId); |
|
|
|
if (xinchuangInst == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
Xinchuang xinchuang = xinchuangService.getById(xinchuangInst.getXinchuangId()); |
|
|
|
paramObj.setXinchuangId(xinchuangInst.getId()); |
|
|
|
projectName = xinchuang.getProjectName(); |
|
|
|
} else { |
|
|
|
ProjectInst projectInst = projectInstService.getByInstCode(procInstId); |
|
|
|
if (projectInst == null) { |
|
|
|
return; |
|
|
|
if (xinchuangInst != null) { |
|
|
|
Xinchuang xinchuang = xinchuangService.getById(xinchuangInst.getXinchuangId()); |
|
|
|
paramObj.setXinchuangId(xinchuang.getId()); |
|
|
|
projectName = xinchuang.getProjectName(); |
|
|
|
} else { |
|
|
|
ProjectInst projectInst = projectInstService.getByInstCode(procInstId); |
|
|
|
if (projectInst == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
paramObj.setProjectId(projectInst.getProjectId()); |
|
|
|
} |
|
|
|
Project project = projectService.getById(projectInst.getProjectId()); |
|
|
|
} |
|
|
|
if (paramObj.getProjectId() != null) { |
|
|
|
Project project = projectService.getNewProject(paramObj.getProjectId()); |
|
|
|
projectName = project.getProjectName(); |
|
|
|
paramObj.setProjectId(project.getId()); |
|
|
|
paramObj.setProjectCode(project.getProjectCode()); |
|
|
|
} |
|
|
|
String content = String.format("【%s】的【%s】需要您审核,请及时处理。", |
|
|
|
projectName, procType.getDesc()); |
|
|
|
mhTodoClient.addTodo(paramObj, assignee, todoType, taskEntity.getId(), content); |
|
|
|
String content = String.format("【%s】的【%s】需要您审核,请及时处理。", projectName, procType.getDesc()); |
|
|
|
mhTodoClient.addTodo(paramObj, assignee, todoType, task.getId(), content); |
|
|
|
// 发送浙政钉工作通知 |
|
|
|
if (assignee.getAccountId() != null) { |
|
|
|
MhZwddWorkNoticeDTO notice = MhZwddWorkNoticeDTO.builder() |
|
|
@@ -146,7 +160,7 @@ public class TaskCreatedListener implements FlowableEventListener { |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} else if (event.getType().equals(FlowableEngineEventType.TASK_COMPLETED)) { |
|
|
|
} else if (event instanceof NodeCompleteEvent) { |
|
|
|
FlowableEngineEntityEvent entityEvent = (FlowableEngineEntityEvent) event; |
|
|
|
String procDefId = entityEvent.getProcessDefinitionId(); |
|
|
|
WflowModelHistorys models = processModelHistorysService.getByProcessDefId(procDefId); |
|
|
@@ -221,18 +235,4 @@ public class TaskCreatedListener implements FlowableEventListener { |
|
|
|
return todoType; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean isFailOnException() { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean isFireOnTransactionLifecycleEvent() { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getOnTransaction() { |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |