| | |
| | | package org.springblade.mdm.flow.excution; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.RuntimeService; |
| | | import org.flowable.engine.delegate.DelegateExecution; |
| | | import org.flowable.engine.history.HistoricProcessInstance; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.mdm.flow.constants.FlowContants; |
| | | import org.springblade.mdm.flow.entity.ApproveRecord; |
| | | import org.springblade.mdm.flow.entity.FlowProgramFile; |
| | | import org.springblade.mdm.flow.service.ApproveRecordService; |
| | |
| | | import org.springblade.mdm.flow.service.FlowProgramProperties; |
| | | import org.springblade.mdm.program.entity.NcNode; |
| | | import org.springblade.mdm.program.entity.NcProgramApproved; |
| | | import org.springblade.mdm.program.service.NcNodeAutoCreateService; |
| | | import org.springblade.mdm.program.service.NcNodeService; |
| | | import org.springblade.mdm.program.service.NcProgramApprovedService; |
| | | import org.springblade.mdm.utils.EntityUtil; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 派工审批完成执行的事件,功能:插入审批表数据 |
| | | * 派工审批通过执行的事件,功能:插入审批表数据 |
| | | */ |
| | | @Slf4j |
| | | @Component("dispatchFinishListener") |
| | |
| | | private FlowCommonService flowCommonService; |
| | | @Autowired |
| | | private NcNodeService ncNodeService; |
| | | @Autowired |
| | | private NcNodeAutoCreateService ncNodeAutoCreateService; |
| | | /** |
| | | * 在流程结束时自动调用,(配置在审批结束事件的executelistener中了) |
| | | * @param execution 执行对象 |
| | |
| | | String instId = execution.getProcessInstanceId(); |
| | | log.info("事件名称{},instid={}" , execution.getEventName(),instId); |
| | | |
| | | //将关联表中的数据插入审批表 |
| | | //NcNode packageNode = ncNodeService.getByProcessInstanceId(instId); |
| | | |
| | | FlowProgramProperties props = flowCommonService.getProgramProperties(instId); |
| | | |
| | | createProgramNodes(props); |
| | | |
| | | String programName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo()); |
| | | NcNode packageNode = ncNodeService.getProgramPackageByName(programName); |
| | |
| | | log.info("流程已完成in DispatchFinishListener"); |
| | | } |
| | | |
| | | //void updateFlowProgramFile(String instId){ |
| | | void addApproveTable(NcNode packageNode,String title){ |
| | | //List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list(); |
| | | //if(!programFiles.isEmpty()) { |
| | | //FlowProgramFile pf = programFiles.get(0); |
| | | NcProgramApproved approved = new NcProgramApproved(); |
| | | //approved.setProgramName(pf.getProgramName()); |
| | | approved.setProgramName(packageNode.getName()); |
| | | approved.setNcNodeId(packageNode.getId());//程序包节点id |
| | | approved.setTitle(title); |
| | | approvedService.save(approved); |
| | | /* |
| | | NcNode pkgNode = ncNodeService.getProgramPackageByName(pf.getProgramName()); |
| | | if(pkgNode!=null) { |
| | | approved.setNcNodeId(pkgNode.getId());//程序包节点id |
| | | approvedService.save(approved); |
| | | }else{ |
| | | log.warn("未找到名为{}的程序包",pf.getProgramName()); |
| | | } |
| | | /** |
| | | * 自动创建程序节点 |
| | | * @param progProperties 流程属性 |
| | | */ |
| | | void createProgramNodes(FlowProgramProperties progProperties){ |
| | | //FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId); |
| | | if(!FlowContants.Y.equals(progProperties.getHasCuredProgram())) { |
| | | //试切或者偏离 |
| | | ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties); |
| | | }else{ |
| | | log.warn("没有程序文件"); |
| | | }*/ |
| | | //有固化 |
| | | //TODO 还要区分是否可用判定是否可用。可用界 |
| | | if(!FlowContants.Y.equals(progProperties.getCureProgramUseable())) { |
| | | //固化程序不可用,需要重新建立程序包名和文件节点;可用情况在流程审批中已经升级过节点了 |
| | | NcNode curedProgramPackage = ncNodeService.getById(Func.toLong(progProperties.getCuredNodeId())); |
| | | |
| | | NcNode newCuredNode = new NcNode(); |
| | | BeanUtils.copyProperties(curedProgramPackage, newCuredNode); |
| | | EntityUtil.clearBaseProperties(newCuredNode); |
| | | newCuredNode.setIsLastEdition(1); |
| | | newCuredNode.setIsLocked(0); |
| | | ncNodeService.save(newCuredNode); |
| | | |
| | | //新的流程对应的文件更新到新节点下 |
| | | List<FlowProgramFile> newFlowFileList = flowProgramFileService.lambdaQuery() |
| | | .eq(FlowProgramFile::getProcessInstanceId, progProperties.getProcessInstanceId()).list(); |
| | | for (FlowProgramFile newFlowFile : newFlowFileList) { |
| | | NcNode newProgramNode = new NcNode(); |
| | | newProgramNode.setName(newFlowFile.getName()); |
| | | newProgramNode.setNodeType(NcNode.TYPE_PROGRAM_FILE); |
| | | newProgramNode.setParentId(newCuredNode.getParentId()); |
| | | newProgramNode.setIsLastEdition(1); |
| | | newProgramNode.setIsLocked(0); |
| | | newProgramNode.setParentIds(newCuredNode.getParentIds() + "," + newCuredNode.getId()); |
| | | |
| | | ncNodeService.save(newProgramNode); |
| | | } |
| | | |
| | | //原节点更新为老版本,锁定 |
| | | curedProgramPackage.setIsLastEdition(0); |
| | | curedProgramPackage.setIsLocked(1); |
| | | ncNodeService.updateById(curedProgramPackage); |
| | | } |
| | | } |
| | | } |
| | | |
| | | void addApproveTable(NcNode packageNode,String title){ |
| | | NcProgramApproved approved = new NcProgramApproved(); |
| | | //approved.setProgramName(pf.getProgramName()); |
| | | approved.setProgramName(packageNode.getName()); |
| | | approved.setNcNodeId(packageNode.getId());//程序包节点id |
| | | approved.setTitle(title); |
| | | approvedService.save(approved); |
| | | |
| | | } |
| | | |
| | | |