package org.springblade.mdm.flow.excution.cure;
|
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.flowable.engine.delegate.DelegateExecution;
|
import org.springblade.core.tool.utils.DateUtil;
|
import org.springblade.core.tool.utils.SpringUtil;
|
import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler;
|
import org.springblade.mdm.flow.excution.events.CureFinishedEvent;
|
import org.springblade.mdm.flow.service.FlowCommonService;
|
import org.springblade.mdm.flow.service.FlowProgramProperties;
|
import org.springblade.mdm.program.entity.NcNode;
|
import org.springblade.mdm.program.service.NcNodeHisService;
|
import org.springblade.mdm.program.service.NcNodeService;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.io.IOException;
|
import java.util.Date;
|
|
@Slf4j
|
@Component("cureFinishOperateTask")
|
@AllArgsConstructor
|
public class CureFinishOperateTask {
|
private final NcNodeService nodeService;
|
private final NcNodeHisService nodeHisService;
|
private final FlowCommonService flowCommonService;
|
private final NormalCureFinishDataHandler normalCureFinishDataHandler;
|
private final DeviationCureFinishDataHandler deviationCureFinishDataHandler;
|
|
/**
|
* 固化审批通过处理任务,
|
*
|
* @param execution 流程execution
|
*/
|
@Transactional
|
public void execute(DelegateExecution execution) throws IOException {
|
log.info("执行固化程序任务服务,流程实例id={}", execution.getProcessInstanceId());
|
Date time = DateUtil.now();
|
//固化程序检查有效期,
|
NcNode node = dealWithNode(execution.getProcessInstanceId());
|
|
nodeHisService.mergeNodeToHisGeTime(time);
|
|
publishEvent(node.getProgramNo());
|
|
}
|
|
void publishEvent(String programNo) {
|
//TaskDispatch dispatch = taskDispatchService.getByProgramNo(programNo);
|
CureFinishedEvent event = new CureFinishedEvent("curefinish",programNo);
|
SpringUtil.publishEvent(event);
|
}
|
|
/**
|
* 处理node状态。
|
*
|
* @param processInstanceId 流程实例id
|
*/
|
NcNode dealWithNode(String processInstanceId) throws IOException {
|
//程序包节点和下属程序节点(包括历史节点非最新版本的)从试切挪到固化下面
|
//程序包节点 设置未已固化
|
NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, processInstanceId).one();
|
FlowProgramProperties flowProps = flowCommonService.getProgramProperties(processInstanceId);
|
getDataHandler(pkgNode).handleData(flowProps);
|
|
return pkgNode;
|
}
|
|
/**
|
* 获取数据处理其
|
* @param pkgNode
|
* @return
|
*/
|
FinishDataHandler getDataHandler(NcNode pkgNode) {
|
if (pkgNode.isDeviationProgram()) {
|
return deviationCureFinishDataHandler;
|
}else{
|
return normalCureFinishDataHandler;
|
|
}
|
}
|
}
|