前端不传被删记录的id怎么删除记录,或子表如何删除记录
1.删除主表相关子表所有记录
2.再保存一次前端传来的记录
3.如果子表是通过先生成空记录,再put修改模式,可以在执行1和2两步后再拿模板集合和当前现有子表集合套两个for循环对比判断,count记录模板记录和子表记录每次循环重合次数,当发送现有子表中没有模板的情况,也就是count==0,就在一层循环再创建一个模板对象,达到效果:原有空记录不会因为进来时全删除的操作而抹去,因为空记录是页面动态效果的一部分
/*** 更新** @param documentEntities* @return*/@PutMapping("/reference/{projectStageId}/{typeListCode}")@Transactional@Operation(summary = "更新")public ActionResult referenceUpdate(@PathVariable String projectStageId,@RequestBody @Valid List<DocumentListVO> documentEntities ) throws DataException {UserInfo userInfo = userProvider.get();//删除原有所有记录LambdaQueryWrapper<ListDocumentFileEntity> wrapper = new LambdaQueryWrapper<>();wrapper.eq(ListDocumentFileEntity::getProjectStageId,projectStageId);List<ListDocumentFileEntity> list = listDocumentFileService.list(wrapper);listDocumentFileService.removeBatchByIds(list);//新增此次传来的记录for (DocumentListVO drawingListVO : documentEntities) {for (DocumentVO documentVO : drawingListVO.getChildren()) {ListDocumentFileEntity documentFile = new ListDocumentFileEntity(RandomUtil.uuId(),drawingListVO.getProjectStageId(),drawingListVO.getTypeListCode(),drawingListVO.getFSort(),drawingListVO.getFileType(),null,documentVO.getDocumentNumber(), documentVO.getIssuanceDate(),"0",userInfo.getUserName(), DateTime.now(),null,null,null,documentVO.getFileId(),documentVO.getSequence(),documentVO.getFileName());if (listDocumentFileService.getInfo(documentVO.getId())==null){listDocumentFileService.save(documentFile);}else {documentFile.setId(documentVO.getId());listDocumentFileService.updateById(documentFile);}}}//获取空记录的模板与现在的子表记录对比,如果缺了空记录就补充空记录List<ListTemplate1Entity> listByTypeCode = listTemplate1Service.getListByTypeCode(typeListCode);List<ListDocumentFileEntity> list2 = listDocumentFileService.list(wrapper);for (ListTemplate1Entity listTemplate1Entity : listByTypeCode) {int integer = 0;for (ListDocumentFileEntity documentFile : list2) {if (documentFile.getFileType().equals(listTemplate1Entity.getFileType())){integer++;}}if (integer==0){ListDocumentFileEntity listDocumentFileEntity = new ListDocumentFileEntity();listDocumentFileEntity.setId(RandomUtil.uuId());listDocumentFileEntity.setProjectStageId(projectStageId);listDocumentFileEntity.setFileType(listTemplate1Entity.getFileType());listDocumentFileEntity.setTypeListCode(listTemplate1Entity.getListTypeCode());listDocumentFileEntity.setFSort(listTemplate1Entity.getFSort());listDocumentFileEntity.setRemark(listTemplate1Entity.getRemark());listDocumentFileEntity.setRequired(listTemplate1Entity.getRequired());listDocumentFileService.save(listDocumentFileEntity);}}return ActionResult.success("更新成功");}
方法二:
后来想了下直接在第一次的时候判断有没有生成模板的记录,如果没生成就生一个,这样就避免了第二次遍历
/*** 编辑** @param documentEntities* @return*/@PutMapping("/reference/{projectStageId}")@Transactional@Operation(summary = "更新")public ActionResult referenceUpdate(@PathVariable String projectStageId,@RequestBody @Valid List<DocumentListVO> documentEntities ) throws DataException {UserInfo userInfo = userProvider.get();//删除原有所有记录LambdaQueryWrapper<ListDocumentFileEntity> wrapper = new LambdaQueryWrapper<>();wrapper.eq(ListDocumentFileEntity::getProjectStageId,projectStageId);List<ListDocumentFileEntity> list = listDocumentFileService.list(wrapper);listDocumentFileService.removeBatchByIds(list);//新增此次传来的记录for (DocumentListVO drawingListVO : documentEntities) {int integer = 0;for (DocumentVO documentVO : drawingListVO.getChildren()) {ListDocumentFileEntity documentFile = new ListDocumentFileEntity(RandomUtil.uuId(),drawingListVO.getProjectStageId(),drawingListVO.getTypeListCode(),drawingListVO.getFSort(),drawingListVO.getFileType(),null,documentVO.getDocumentNumber(), documentVO.getIssuanceDate(),"0",userInfo.getUserName(), DateTime.now(),null,null,null,documentVO.getFileId(),documentVO.getSequence(),documentVO.getFileName());if (listDocumentFileService.getInfo(documentVO.getId())==null){listDocumentFileService.save(documentFile);integer++;}}//没有就生一个if (integer==0){ListDocumentFileEntity listDocumentFileEntity = new ListDocumentFileEntity();listDocumentFileEntity.setId(RandomUtil.uuId());listDocumentFileEntity.setProjectStageId(projectStageId);listDocumentFileEntity.setFileType(drawingListVO.getFileType());listDocumentFileEntity.setTypeListCode(drawingListVO.getTypeListCode());listDocumentFileEntity.setFSort(drawingListVO.getFSort());listDocumentFileEntity.setRemark(null);listDocumentFileEntity.setRequired(null);listDocumentFileService.save(listDocumentFileEntity);}}return ActionResult.success("更新成功");}
摸鱼的同志可以看看,代码很粗糙,应该只是思维符合很多人但实际情况几乎不符
相关文章:
前端不传被删记录的id怎么删除记录,或子表如何删除记录
1.删除主表相关子表所有记录 2.再保存一次前端传来的记录 3.如果子表是通过先生成空记录,再put修改模式,可以在执行1和2两步后再拿模板集合和当前现有子表集合套两个for循环对比判断,count记录模板记录和子表记录每次循环重合次数ÿ…...
axios的基本特性用法
1. axios的基本特性 axios 是一个基于Promise用于浏览器和node.js的HTTP客户端。 它具有以下特征: 支持浏览器和node.js支持promiseAPI自动转换JSON数据能拦截请求和响应请求转换请求数据和响应数据(请求是可以加密,在返回时也可进行解密&…...
打印水仙花数---c语言刷题
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 题述 求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153&#…...
springboot基础(82):分布式定时任务解决方案shedlock
文章目录 前言简介shedlock dbSchedulerLock注解说明 shedlock redis遇到的问题1.配置shedlock不生效2.报错net/javacrumbs/shedlock/core/LockProvider shedlock升级高版本同名定时任务 前言 多节点或者多服务器拥有相同的定时任务,这种情况下,不同节…...
【Golang】Gorm乐观锁optimisticlock的使用
在数据库操作中,为了保证数据的一致性和完整性,常常需要采取一些措施来防止并发操作导致的数据冲突。悲观锁和乐观锁是两种常见的并发控制机制。 悲观锁(Pessimistic Lock) 悲观锁的基本假设是,数据在并发访问时很可能…...
Apache Doris 发展历程、技术特性及云原生时代的未来规划
本文节选自《基础软件之路:企业级实践及开源之路》一书,该书集结了中国几乎所有主流基础软件企业的实践案例,由 28 位知名专家共同编写,系统剖析了基础软件发展趋势、四大基础软件(数据库、操作系统、编程语言与中间件…...
2024-02-26(Spark,kafka)
1.Spark SQL是Spark的一个模块,用于处理海量结构化数据 限定:结构化数据处理 RDD的数据开发中,结构化,非结构化,半结构化数据都能处理。 2.为什么要学习SparkSQL SparkSQL是非常成熟的海量结构化数据处理框架。 学…...
RubyMine 2023:让Ruby编程变得更简单 mac/win版
JetBrains RubyMine 2023是一款专为Ruby开发者打造的强大集成开发环境(IDE)。这款工具集成了许多先进的功能,旨在提高Ruby编程的效率和生产力。 RubyMine 2023软件获取 RubyMine 2023的智能代码编辑器提供了丰富的代码补全和提示功能&#…...
低功耗设计——门控时钟
1. 前言 芯片功耗组成中,有高达40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观,因为这些时钟树在系统中具有最高的切换频率,而且有很多时钟buffer,而且为了最小化时钟延时,它们通常具有很高的驱动强度。此外&…...
《凤凰架构》-本地事务章节 读书笔记
1、写锁又名排它锁,写锁禁止其他事务施加读锁和写锁,而不禁止其他事务读取数据(如果遇到了个不加任何锁的另一个事务2,写锁是无法阻止事务2读取数据的),这就是读未提交隔离级别中的脏读问题产生的根因。 2…...
ruby对比python,30分钟教程
会python还需要搞会ruby吗? web方面:ruby有rails,python有flask,django,rails远超django Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘…...
C语言——oj刷题——判断闰年
当我们谈到判断闰年时,我们通常会遵循以下规则:闰年是指能被4整除但不能被100整除的年份,或者能被400整除的年份。在C语言中,我们可以通过编写一个简单的程序来实现这一功能。下面是一个示例代码,用于判断一个给定年份…...
Git笔记——3
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、合并模式和分支策略 二、bug分支 三、强制删除分支 四、创建远程仓库 五、克隆远程仓库_HTTPS和_SSH 克隆远程仓库_HTTPS 克隆远程仓库_SSH 六、向远程仓库…...
C++面试 -操作系统-安全能力:死锁的危害、出现原因、解决方法
目录 死锁的危害 死锁出现的原因 死锁的解决方法 死锁是计算机科学中一个非常重要的概念,特别是在多线程、并发编程以及数据库管理系统等领域中。下面是关于死锁的危害、出现原因和解决方法的基础概述: 死锁的危害 资源浪费:死锁导致系统…...
台湾香港澳门媒体宣发稿报道有哪些平台资源,跨境出海推广新闻营销公司告诉你
【本篇由言同数字科技有限公司原创】随着全球化的快速发展和互联网的普及,品牌越来越重视海外市场的开拓。作为亚洲地区的重要经济中心,香港、台湾和澳门不仅具有独特的地理位置和文化背景,还拥有丰富的媒体资源。在本文中,我们将…...
Python分支和循环结构及其应用(文末送书)
一、分支结构 应用场景 我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题。 if语句的使用 在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的…...
机器学习——线性代数中矩阵和向量的基本介绍
矩阵和向量的基本概念 矩阵的基本概念(这里不多说,应该都知道) 而向量就是一个特殊的矩阵,即向量只有一列,是个n*1的矩阵 注:一般矩阵用大写字母表示,向量用小写字母表示 矩阵的加减运算 两个…...
基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…...
蜘蛛蜂优化算法SWO求解不闭合MD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)
1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。VRPTW&#x…...
Java架构师之路六、高并发与性能优化:高并发编程、性能调优、线程池、NIO、Netty、高性能数据库等。
目录 高并发编程: 性能调优: 线程池: NIO: Netty: 高性能数据库: 上篇:Java架构师之路五、微服务:微服务架构、服务注册与发现、服务治理、服务监控、容器化等。-CSDN博客 下篇…...
如何用FakeLocation实现应用级精准虚拟定位:3步搞定位置伪装
如何用FakeLocation实现应用级精准虚拟定位:3步搞定位置伪装 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否曾想过,让某个应用认为你在巴黎埃菲尔铁…...
老项目复活记:解决那些年我们遇到的Gradle SSL连接重置问题(附多种环境配置)
老项目复活指南:全方位攻克Gradle SSL连接重置难题 接手一个尘封多年的Android或Flutter项目时,最令人头疼的莫过于构建过程中突然跳出的SSL连接错误。那些红色报错信息仿佛在嘲笑我们与时代脱节的开发环境。本文将带您深入剖析这一经典问题的根源&#…...
PRBS(伪随机码)如何驱动现代通信与测试?
1. 为什么PRBS是现代通信的"黄金测试信号"? 第一次接触PRBS时,我和大多数工程师一样疑惑:为什么不用真正的随机信号做测试?直到在25G光模块测试现场看到PRBS31的测试报告才恍然大悟。想象你正在检查高速公路的承重能力—…...
AI 英语教学智能体开发
AI 英语教学智能体开发已进入“认知模拟”与“超低延迟交互”的深水区。技术栈的构建不再仅仅是调用 API,而是涉及从底层推理到上层教学法编排的整套国产化生态。以下是国内开发 AI 英语教学智能体的核心技术维度:1. 基座模型与国产化适配国内开发者目前…...
别再硬啃BladeX源码了!从它的starter包结构,我总结了一套企业级微服务技术选型清单
企业级微服务技术选型实战指南:从BladeX starter看架构设计精髓 当技术团队面临微服务架构选型时,往往陷入两难:既要保证技术栈的前瞻性和扩展性,又要确保组件的稳定性和团队上手成本。BladeX框架通过精心设计的starter包结构&…...
别光写计算器!从NOI这道基础题里,我总结出C++函数封装与错误处理的3个实用技巧
从NOI简单计算器题解看C工程化思维的3个关键跃迁 很多学过C基础语法的同学都写过计算器程序——输入两个数字和一个运算符,输出运算结果。这道出现在NOI(全国青少年信息学奥林匹克竞赛)OpenJudge平台1.4章节的"简单计算器"题目&…...
PlantUML在线编辑器终极指南:零代码基础也能轻松绘制专业UML图
PlantUML在线编辑器终极指南:零代码基础也能轻松绘制专业UML图 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为复杂的UML绘图软件而烦恼吗?PlantUML在线编辑…...
CefFlashBrowser:拯救Flash数字遗产的终极方案,让经典游戏重获新生
CefFlashBrowser:拯救Flash数字遗产的终极方案,让经典游戏重获新生 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还记得那些年我们在4399、7k7k等网站上畅玩的Fl…...
Ubuntu 22.04 升级 GCC 13.1.0 踩坑记:从编译到解决 GLIBCXX_3.4.31 报错的完整流程
Ubuntu 22.04 升级 GCC 13.1.0 实战:从编译到解决 GLIBCXX_3.4.31 报错的完整指南 当你在终端里看到gcc -v显示13.1.0版本时,那种成就感是真实的。但下一秒,当你编译的C程序运行时突然崩溃,报错提示缺少GLIBCXX_3.4.31时ÿ…...
别再死记硬背了!用Python脚本模拟XCP协议CTO/DTO报文交互(附代码)
用Python脚本玩转XCP协议:CTO/DTO报文交互实战指南 在汽车电子和嵌入式开发领域,XCP协议就像神经系统中的电信号,负责主控单元(ECU)与测试设备之间的精准通信。但面对厚达数百页的协议文档,许多工程师都会陷入"一看就懂&…...
