| | |
| | | package org.springblade.mdm.flow.excution.cure; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.mdm.basesetting.machine.MachineService; |
| | | import org.springblade.mdm.flow.constants.FlowContants; |
| | | import org.springblade.mdm.basesetting.machine.service.MachineService; |
| | | import org.springblade.mdm.flow.entity.ApproveRecord; |
| | | import org.springblade.mdm.flow.entity.FlowProgramFile; |
| | | import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler; |
| | | import org.springblade.mdm.flow.service.ApproveRecordService; |
| | | import org.springblade.mdm.flow.service.FlowProgramFileService; |
| | | 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; |
| | |
| | | @Slf4j |
| | | @Component("deviationCureFinishDataHandler") |
| | | public class DeviationCureFinishDataHandler implements FinishDataHandler { |
| | | @Autowired |
| | | private NcProgramApprovedService approvedService; |
| | | @Autowired |
| | | private ApproveRecordService approveRecordService; |
| | | |
| | | @Autowired |
| | | private FlowProgramFileService flowProgramFileService; |
| | | @Autowired |
| | | private NcNodeService nodeService; |
| | | @Autowired |
| | | private NcNodeAutoCreateService ncNodeAutoCreateService; |
| | | @Autowired |
| | | private MachineService machineService; |
| | | |
| | | /** |
| | | * cureFinishOperateTask调用 |
| | | * cureFinishOperateTask调用,偏离单回传审批完成处理业务 |
| | | * @param props 属性 |
| | | */ |
| | | public void handleData(FlowProgramProperties props) { |
| | | // 执行业务逻辑 |
| | | String instId = props.getProcessInstanceId(); |
| | | NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, props.getProcessInstanceId()).one(); |
| | | |
| | | pkgNode.lock(); |
| | | pkgNode.lock("偏离单回传锁定"); |
| | | pkgNode.setIsLastEdition(0); |
| | | nodeService.updateById(pkgNode); |
| | | |
| | |
| | | |
| | | nodeService.save(newPkgNode); |
| | | |
| | | //处理程序包下层的程序节点111 |
| | | List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode.getId()).list(); |
| | | FlowProgramFile pfile; |
| | | for(NcNode programNode : oriProgramNodes){ |
| | | copyNonProgramNodes(pkgNode,newPkgNode); |
| | | |
| | | programNode.setIsLastEdition(0); |
| | | programNode.setVersionNumber(newPkgNode.getVersionNumber()); |
| | | pfile = flowProgramFileService.getById(programNode.getFlowProgramFileId()); |
| | | addNewProgramNode(newPkgNode,props.getProcessInstanceId()); |
| | | |
| | | log.info("偏离回传Listener完成"); |
| | | } |
| | | |
| | | /** |
| | | * 从待固化节点复制非程序文件节点到固化节点下 |
| | | * @param oriPkgNode 待固化节点 |
| | | * @param cureNode 固化节点 |
| | | */ |
| | | void copyNonProgramNodes(NcNode oriPkgNode,NcNode cureNode){ |
| | | //处理程序包下层的程序节点1 |
| | | List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,oriPkgNode.getId()).list(); |
| | | FlowProgramFile pfile; |
| | | for(NcNode oldProgramNode : oriProgramNodes){ |
| | | pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId()); |
| | | if(!pfile.isProgram()){ |
| | | //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留 |
| | | programNode.setIsLastEdition(1); |
| | | //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,复制到固化树下,两个网络之间只交换程序文件,其他文件只能保留 |
| | | //其他文件,需要复制到新建的固化节点下 |
| | | NcNode newOtherFileNode = new NcNode(); |
| | | BeanUtils.copyProperties(oldProgramNode,newOtherFileNode); |
| | | EntityUtil.clearBaseProperties(newOtherFileNode); |
| | | newOtherFileNode.setParentId(cureNode.getId()); |
| | | newOtherFileNode.setParentIds(cureNode.subNodeParentIds()); |
| | | newOtherFileNode.setIsLastEdition(1); |
| | | nodeService.save(newOtherFileNode); |
| | | } |
| | | |
| | | } |
| | | nodeService.updateBatchById(oriProgramNodes); |
| | | } |
| | | |
| | | /** |
| | | * 加入新的程序文件节点 |
| | | * @param newPkgNode 新的节点(固化的) |
| | | * @param processInstanceId 流程实例id |
| | | */ |
| | | void addNewProgramNode(NcNode newPkgNode,String processInstanceId){ |
| | | //新的文件作为最新版本 |
| | | List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list(); |
| | | List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,processInstanceId).list(); |
| | | for(FlowProgramFile flowProgramFile : files){ |
| | | NcNode newProgNode = new NcNode(); |
| | | BeanUtils.copyProperties(newPkgNode, newProgNode); |
| | |
| | | newProgNode.setName(flowProgramFile.getName()); |
| | | newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE); |
| | | newProgNode.setParentId(newPkgNode.getId()); |
| | | newProgNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId()); |
| | | newProgNode.setParentIds(newPkgNode.subNodeParentIds()); |
| | | newProgNode.setIsLastEdition(1); |
| | | newProgNode.setVersionNumber(newPkgNode.getVersionNumber()); |
| | | newProgNode.setFlowProgramFileId(flowProgramFile.getId()); |
| | | newProgNode.setIsCured(0); |
| | | nodeService.save(newProgNode); |
| | | |
| | | //修改文件内容更新注释,并更新文件数据的地址 |
| | | //setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts); |
| | | |
| | | //flowProgramFileService.updateById(flowProgramFile); |
| | | } |
| | | |
| | | addApproveTable(pkgNode,props); |
| | | updateApproveRecordNodeId(instId, pkgNode.getId()); |
| | | log.info("偏离回传Listener完成"); |
| | | } |
| | | |
| | | /** |
| | | * 保存审批完成的记录 |
| | | * @param packageNode |
| | | * @param props |
| | | */ |
| | | void addApproveTable(NcNode packageNode,FlowProgramProperties props){ |
| | | NcProgramApproved approved = new NcProgramApproved(); |
| | | |
| | | approved.setProgramName(packageNode.getName()); |
| | | approved.setNcNodeId(packageNode.getId());//程序包节点id |
| | | approved.setTitle(props.getTitle()); |
| | | approved.setProgrammerId(props.getProgrammerId()); |
| | | approvedService.save(approved); |
| | | |
| | | } |
| | | |
| | | |
| | | void updateApproveRecordNodeId(String processInstanceId,Long nodeId){ |
| | | //更新审批记录的ncNodeId |
| | | approveRecordService.lambdaUpdate() |
| | | .eq(ApproveRecord::getProcessInstanceId, processInstanceId) |
| | | .set(ApproveRecord::getNcNodeId,nodeId).update(); |
| | | } |
| | | } |