|  |  | 
 |  |  | import com.dy.pmsGlobal.pojoPr.PrWorkingInstruction; | 
 |  |  | import com.dy.pmsGlobal.util.UserUtil; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.commons.collections4.CollectionUtils; | 
 |  |  | import org.apache.dubbo.common.utils.PojoUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | 
 |  |  |     } | 
 |  |  |     @Transactional | 
 |  |  |     public int save(PrProductionProcess process){ | 
 |  |  |         //流程名称不能重复 | 
 |  |  |         if (processDao.exists(process.name, process.id)) { | 
 |  |  |             throw new RuntimeException("流程名称不能重复"); | 
 |  |  |         } | 
 |  |  |         prepareProcess(process); | 
 |  |  |         int count = processDao.insertSelective(process); | 
 |  |  |         saveNodesAndInstructions(process); | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Transactional | 
 |  |  |     public int update(PrProductionProcess process){ | 
 |  |  |         //流程名称不能重复 | 
 |  |  |         if (processDao.exists(process.name, process.id)) { | 
 |  |  |             throw new RuntimeException("流程名称不能重复"); | 
 |  |  |         } | 
 |  |  |         prepareProcess(process); | 
 |  |  |         int count = processDao.updateByPrimaryKeySelective(process); | 
 |  |  |         // 优化:只有当节点有变更时才删除并重新插入 | 
 |  |  | 
 |  |  |  | 
 |  |  |     // 将节点和工作指示的保存逻辑封装到一个方法中 | 
 |  |  |     private void saveNodesAndInstructions(PrProductionProcess process){ | 
 |  |  |         process.nodes.forEach(node -> { | 
 |  |  |             node.processId = process.id; | 
 |  |  |         }); | 
 |  |  |         try{ | 
 |  |  |             nodeDao.insertMany(process.nodes); | 
 |  |  |         }catch (DuplicateKeyException e){ | 
 |  |  | 
 |  |  |             } | 
 |  |  |             return null; | 
 |  |  |         }).filter(work -> work != null).toList(); | 
 |  |  |         workDao.insertMany(workList); | 
 |  |  |         if(CollectionUtils.isNotEmpty(workList)){ | 
 |  |  |             workDao.insertMany(workList); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |         return rsVo ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public List<Map<String,String>> queryAll(){ | 
 |  |  |         return processDao.queryAll(); | 
 |  |  |     public List<Map<String,String>> queryAll(Long proId){ | 
 |  |  |         return processDao.queryAll(proId); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void addUrl(PrWorkingInstruction ins){ |