yangys
2025-09-23 3baca21e0e6563f8379359ef2ba78c224eb4bc80
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java
@@ -5,7 +5,6 @@
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;
@@ -20,34 +19,25 @@
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调用,偏离单回传审批完成处理业务
    * 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);
@@ -59,8 +49,21 @@
      nodeService.save(newPkgNode);
      //处理程序包下层的程序节点111
      List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode.getId()).list();
      copyNonProgramNodes(pkgNode,newPkgNode);
      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());
@@ -70,17 +73,23 @@
            NcNode newOtherFileNode = new NcNode();
            BeanUtils.copyProperties(oldProgramNode,newOtherFileNode);
            EntityUtil.clearBaseProperties(newOtherFileNode);
            newOtherFileNode.setParentId(newPkgNode.getId());
            newOtherFileNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId());
            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);
@@ -89,7 +98,7 @@
         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());
@@ -97,15 +106,5 @@
         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();
   }
}