java程序处理三张表要进行怎么样的操作

  1. 首先第一步梳理思路,id没有存在说明是新添加的,如果id存在那就是对现有文章的修改。
  2. /*** 发布文章或保存草稿** @param dto* @return*/@Overridepublic ResponseResult submitNews(WmNewsDto dto) {//0.条件判断if(dto == null||dto.getContent() == null){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);}//1.保存或修改文章WmNews wmNews = new WmNews();//属性拷贝,属性名称和类型相同时才能进行拷贝BeanUtils.copyProperties(dto,wmNews);//封面图片这个属性就不一样所以不能用上面的方法进行拷贝// list ---> stringif(dto.getImages()!=null && dto.getImages().size()>0){String imageStr = StringUtils.join(dto.getImages(), ",");wmNews.setImages(imageStr);}//如果当前封面类型为自动 -1if(dto.getType().equals(WemediaConstants.WM_NEWS_TYPE_AUTO)){wmNews.setType(null);//wmNews中的Type属性不能为负值。}saveOrUpdateWmNews(wmNews);//2.判断是否为草稿  如果为草稿结束当前方法if(dto.getStatus().equals(WmNews.Status.NORMAL.getCode())){return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);}//3.不是草稿,保存文章内容图片与素材的关系//获取到文章内容中的图片信息List<String> material = ectractUrlInfo(dto.getContent());saveRelativeInfoForContent(material,wmNews.getId());//4.不是草稿,保存文章封面图片与素材的关系saveRelativeInfoForCover(dto,wmNews,material);return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);}/*** 第一个功能:如果当前封面类型为自动,则设置封面类型的数据* 匹配规则:* 1,如果内容图片大于等于1,小于3  单图  type 1* 2,如果内容图片大于等于3  多图  type 3* 3,如果内容没有图片,无图  type 0** 第二个功能:保存封面图片与素材的关系* @param dto* @param wmNews* @param materials*/private void saveRelativeInfoForCover(WmNewsDto dto, WmNews wmNews, List<String> materials) {List<String> images = dto.getImages();//如果当前封面类型为自动,则设置封面类型的数据if(dto.getType().equals(WemediaConstants.WM_NEWS_TYPE_AUTO)){//多图if(materials.size() >= 3){wmNews.setType(WemediaConstants.WM_NEWS_MANY_IMAGE);images = materials.stream().limit(3).collect(Collectors.toList());}else if(materials.size() >= 1 && materials.size() < 3){//单图wmNews.setType(WemediaConstants.WM_NEWS_SINGLE_IMAGE);images = materials.stream().limit(1).collect(Collectors.toList());}else {//无图wmNews.setType(WemediaConstants.WM_NEWS_NONE_IMAGE);}//修改文章if(images != null && images.size() > 0){wmNews.setImages(StringUtils.join(images,","));}updateById(wmNews);}if(images != null && images.size() > 0){saveRelativeInfo(images,wmNews.getId(),WemediaConstants.WM_COVER_REFERENCE);}}/*** 处理文章内容图片与素材的关系* @param materials* @param newsId*/private void saveRelativeInfoForContent(List<String> materials, Integer newsId) {saveRelativeInfo(materials,newsId,WemediaConstants.WM_CONTENT_REFERENCE);}@Autowiredprivate WmMaterialMapper wmMaterialMapper;/*** 保存文章图片与素材的关系到数据库中,这里就是封面和内容共同调用的方法,* 当该方法第三个参数是0时,就是内容引用,1时就是封面引用。* @param materials* @param newsId* @param type*/private void saveRelativeInfo(List<String> materials, Integer newsId, Short type) {if(materials!=null && !materials.isEmpty()){//通过图片的url查询素材的idList<WmMaterial> dbMaterials = wmMaterialMapper.selectList(Wrappers.<WmMaterial>lambdaQuery().in(WmMaterial::getUrl, materials));//判断素材是否有效if(dbMaterials==null || dbMaterials.size() == 0){//手动抛出异常   第一个功能:能够提示调用者素材失效了,第二个功能,进行数据的回滚throw new CustomException(AppHttpCodeEnum.MATERIASL_REFERENCE_FAIL);}if(materials.size() != dbMaterials.size()){throw new CustomException(AppHttpCodeEnum.MATERIASL_REFERENCE_FAIL);}List<Integer> idList = dbMaterials.stream().map(WmMaterial::getId).collect(Collectors.toList());//批量保存wmNewsMaterialMapper.saveRelations(idList,newsId,type);//需要三个参数上面就是为了第一个参数而设计的。}}/*** 提取文章内容中的图片信息* @param content* @return*/private List<String> ectractUrlInfo(String content) {List<String> materials = new ArrayList<>();//JSON.parseArray(content, Map.class) 将 content 字符串解析为一个 List<Map> 对象。// 其中,Map.class 指定了解析后集合中元素的类型为 Map。List<Map> maps = JSON.parseArray(content,Map.class);for (Map map : maps) {if(map.get("type").equals("image")){//只查找type=image的String imgUrl = (String) map.get("value");materials.add(imgUrl);}}return materials;}@Autowiredprivate WmNewsMaterialMapper wmNewsMaterialMapper;/*** 保存或修改文章* @param wmNews*/private void saveOrUpdateWmNews(WmNews wmNews) {//补全属性,索然将dto中的属性进行了复制,但有的还没有值,所以进行set。wmNews.setUserId(WmThreadLocalUtil.getUser().getId());wmNews.setCreatedTime(new Date());wmNews.setPublishTime(new Date());wmNews.setEnable((short)1);//默认上架//这里如果id为空说明wmNews中没有这个数据,是新增的一个数据。就没有修改//这个操作了直接保存就ok了。if(wmNews.getId() == null){//保存save(wmNews);}else{//修改//删除文章图片与素材的关系//Wrappers.<WmNewsMaterial>lambdaQuery()创建了一个 lambdaQuery 的查询条件构造器,用于构建查询条件//eq(WmNewsMaterial::getNewsId,wmNews.getId())表示在查询条件中添加了一个等于(eq)的限制条件,// 即根据 WmNewsMaterial 对象的 newsId 属性与 wmNews 对象的 id 属性相等来筛选数据wmNewsMaterialMapper.delete(Wrappers.<WmNewsMaterial>lambdaQuery().eq(WmNewsMaterial::getNewsId,wmNews.getId()));updateById(wmNews);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/107469.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Multi Query Attention Group Query Attention

Multi Query Attention(MQA)在2019年就被提出来了&#xff0c;用于推理加速&#xff0c;但在当时并没有受到很多关注&#xff0c;毕竟一张2080就能跑Bert-base了。随着LLM的大火&#xff0c;MQA所带来的收益得以放大。 思路 Multi Query Attention(MQA)跟Multi Head Attention…

2.zigbee开发,zigbee点亮灯,如何正确使用别人提供的模板文件

一。成为点灯大师的其中一步&#xff08;普通点灯&#xff0c;操作系统点灯&#xff0c;网络点灯&#xff0c;wifi点灯&#xff0c;蓝牙点灯&#xff0c;zigbee点灯&#xff0c;LoRa点灯&#xff0c;NB点灯&#xff09;*&#xff08;寄存器点灯&#xff0c;HAL库点灯&#xff0…

2023年数维杯数学建模B题节能列车运行控制优化策略求解全过程文档及程序

2023年数维杯数学建模 B题 节能列车运行控制优化策略 原题再现&#xff1a; 在城市交通电气化进程快速推进的同时&#xff0c;与之相应的能耗增长和负面效应也在迅速增加。城市轨道交通中的快速增长的能耗给城轨交通的可持续性发展带来负担。2018 年&#xff0c;北京、上海、…

西工大 ASLP 实验室在 WeNet 中开源基于 CPPN 的神经网络热词增强语音识别方案

语境偏置&#xff08;Contextual biasing&#xff09;旨在将语境知识集成到语音识别&#xff08;ASR&#xff09;系统中&#xff0c;以提高在相关领域词汇&#xff08;俗称“热词”&#xff09;上的识别准确率。在许多ASR场景中&#xff0c;待识别语音中可能会包含训练数据中数…

windows10系统下Python3.11中安装Numpy库教程

Python3.11中安装Numpy库目录 项目场景&#xff1a;问题描述解决方案&#xff1a;①下载Numpy文件②把NumPy文件放到Python安装的Scripts文件夹里。③安装numpy④安装验证 项目场景&#xff1a; numpy是开源的数值计算扩展&#xff0c;用于数据分析、机器学习、科学计算的重要…

pgzrun 拼图游戏制作过程详解(3)

3. 绘制完整的拼图 建立Gird列表存储小拼图的基本信息 Gird[] for i in range(6):for j in range(4):SquareActor("girl_06")Square.leftSquare_size*jSquare.topSquare_size*iGird.append(Square) 修改draw()绘制函数 建立循环绘制Gird列表中的所有小拼图 def d…

开源大模型ChatGLM2-6B 1. 租一台GPU服务器测试下

0. 环境 租用了1台GPU服务器&#xff0c;系统 ubuntu20&#xff0c;GeForce RTX 3090 24G。过程略。本人测试了ai-galaxy的&#xff0c;今天发现网友也有推荐autodl的。 &#xff08;GPU服务器已经关闭&#xff0c;因此这些信息已经失效&#xff09; SSH地址&#xff1a;* 端…

虚拟机作为master远程控制台式机中的机器人在仿真环境中进行slam地图构建与自主导航

文章目录 前言一、思路流程二、具体步骤1.虚拟机网络配置2.台式机网络配置3.网络测试 三、远程操控SLAM建立地图三、远程操控SLAM导航 前言 虚拟机作为master远程控制台式机中的机器人在仿真环境中进行slam地图构建与自主导航 最近有时间一直在搞Ubuntu虚拟机与台式机的通讯&…

Java复习-多线程编程

多线程编程 解决并发访问的问题。 一. 继承 Thread 类实现多线程 1. 继承实现 继承thread类 class MyThread extends Thread{}覆写run主方法 多线程要执行的功能都应该在 run() 方法中定义。 class MyThread extends Thread { // 线程的主体类private String title;public…

澄海区图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

澄海区图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

2022年全国研究生数学建模竞赛华为杯D题PISA架构芯片资源排布问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 D题 PISA架构芯片资源排布问题 原题再现&#xff1a; 一、背景介绍 芯片是电子行业的基础&#xff0c;在当前日益复杂的国际形势下&#xff0c;芯片成了各个大国必争的高科技技术。本课题关注网络通信领域的交换芯片&#xff0c;传统的交…

华为云云耀云服务器L实例评测|使用Linux系统与Docker部署.net/c#项目

目录 前言 如何在CentOS运行项目 登录CentOS 使用Rider打包 使用Visual Studio打包 项目运行 后台运行 开放端口 如何在Docker中运行项目 项目运行 前言 本章详细介绍&#xff0c;.net Core项目从打包到部署上华为云云耀云服务器L实例的过程与一些细节问题。在这里…