package org.springblade.mdm.flow.excution.cure; import lombok.extern.slf4j.Slf4j; 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.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("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调用,偏离单回传审批完成处理业务 * @param props 属性 */ public void handleData(FlowProgramProperties props) { // 执行业务逻辑 String instId = props.getProcessInstanceId(); NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, props.getProcessInstanceId()).one(); pkgNode.lock(); pkgNode.setIsLastEdition(0); nodeService.updateById(pkgNode); NcNode newPkgNode = new NcNode(); BeanUtils.copyProperties(pkgNode, newPkgNode); EntityUtil.clearBaseProperties(newPkgNode); newPkgNode.setIsLastEdition(1); newPkgNode.upgradeVersionNumber(); nodeService.save(newPkgNode); //处理程序包下层的程序节点111 List oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode.getId()).list(); FlowProgramFile pfile; for(NcNode oldProgramNode : oriProgramNodes){ pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId()); if(!pfile.isProgram()){ //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,复制到固化树下,两个网络之间只交换程序文件,其他文件只能保留 //其他文件,需要复制到新建的固化节点下 NcNode newOtherFileNode = new NcNode(); BeanUtils.copyProperties(oldProgramNode,newOtherFileNode); EntityUtil.clearBaseProperties(newOtherFileNode); newOtherFileNode.setParentId(newPkgNode.getId()); newOtherFileNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId()); newOtherFileNode.setIsLastEdition(1); nodeService.save(newOtherFileNode); } } //nodeService.updateBatchById(oriProgramNodes); //新的文件作为最新版本 List files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list(); for(FlowProgramFile flowProgramFile : files){ NcNode newProgNode = new NcNode(); BeanUtils.copyProperties(newPkgNode, newProgNode); EntityUtil.clearBaseProperties(newProgNode); newProgNode.setName(flowProgramFile.getName()); newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE); newProgNode.setParentId(newPkgNode.getId()); newProgNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId()); newProgNode.setIsLastEdition(1); newProgNode.setVersionNumber(newPkgNode.getVersionNumber()); newProgNode.setFlowProgramFileId(flowProgramFile.getId()); newProgNode.setIsCured(0); nodeService.save(newProgNode); } updateApproveRecordNodeId(instId, pkgNode.getId()); log.info("偏离回传Listener完成"); } void updateApproveRecordNodeId(String processInstanceId,Long nodeId){ //更新审批记录的ncNodeId approveRecordService.lambdaUpdate() .eq(ApproveRecord::getProcessInstanceId, processInstanceId) .set(ApproveRecord::getNcNodeId,nodeId).update(); } }