JavaWeb_LeadNews_Day3作业-素材管理, 文章管理

JavaWeb_LeadNews_Day3作业-素材管理, 文章管理

  • 素材管理
    • 图片删除
    • 收藏与取消
  • 文章管理
    • 查看文章详情
    • 文章删除
    • 文章上下架
  • 来源

素材管理

图片删除

  • 实现思路
    1. 检验参数, 参数为空, 返回无效参数
    2. 查询图片是否存在, 不存在, 返回数据不存在
    3. 查询图片是否被引用, 被引用, 返回文件使用中, 删除失败
    4. 查询图片是否被收藏, 被收藏, 返回文件收藏中, 删除失败
    5. 删除图片, 删除minio中的图片
    6. 删除图片, 删除数据库中的图片数据
  • 具体实现
    @Override
    public ResponseResult delPicture(Integer id) {// 1. 参数检验if(id == null){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);}// 2. 查询图片WmMaterial material = getOne(Wrappers.<WmMaterial>lambdaQuery().eq(WmMaterial::getId, id));if(material == null){return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);}// 3. 查询图片是否被引用LambdaQueryWrapper<WmNewsMaterial> queryWrapper1 = new LambdaQueryWrapper<>();queryWrapper1.eq(WmNewsMaterial::getMaterialId, id);Integer count = wmNewsMaterialMapper.selectCount(queryWrapper1);if(count > 0){return ResponseResult.errorResult(501, "文件使用中, 删除失败");}// 4. 查询图片是否被收藏WmMaterial wmMaterial = getById(id);Short isCollection = wmMaterial.getIsCollection();if(isCollection == 1){return ResponseResult.errorResult(501, "文件收藏中, 删除失败");}// 5. 删除图片// 5.1 删除minio中的图片String materialUrl = material.getUrl();fileStorageService.delete(materialUrl);// 5.2 删除数据库中的图片removeById(id);return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }
    
  • 总结
    • 调用minio依赖, 使用delete方法时报错: 方法中根据minio当前ip地址删除图片路径开头的ip地址, 但是数据库中部分图片的ip地址与当前不同, 导致图片路径开头的ip地址没有删除, 结果报错.

收藏与取消

  • 实现思路
    1. 检验参数, 参数为空, 返回无效参数
    2. 通过id获取WmMaterial对象
    3. WmMaterial对象的isCollection属性设置为对于的值
    4. 通过WmMaterial对象更新数据
  • 具体实现
    public ResponseResult collectFunc(Integer id, Short isCollection)
    {// 1. 参数检验if(id == null){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);}// 2. 更新isCollection属性WmMaterial wmMaterial = getById(id);wmMaterial.setIsCollection((short) isCollection);updateById(wmMaterial);return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }
    
  • 总结
    • 收藏和取消函数的方法高度重合, 抽为1个方法

文章管理

查看文章详情

  • 实现思路
    1. 检验参数, 参数为空, 返回无效参数
    2. 根据id获取文章对象, 对象为空, 返回文章不存在
    3. 返回文章对象
  • 具体实现
    public ResponseResult getNewsDetail(Integer id) {// 1. 检验参数if(id == null){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);}// 2. 获取文章对象WmNews news = getById(id);if(news == null){return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST, "文章不存在");}return ResponseResult.okResult(news);
    }
    
  • 总结
    • 查看文章详情用于编辑文章, 回显数据

文章删除

  • 实现思路
    1. 检验参数, 参数为空, 返回文章id不可缺少
    2. 查询文章, 文章为空, 返回文章不存在
    3. 查询文章状态, 已发布, 不能删除
    4. 查询文章状态, 草稿, 没有关系数据, 删除文章数据, 返回
    5. 删除文章, 删除文章素材关系表中的关系数据
    6. 删除文章, 删除文章表中的数据
  • 具体实现
    public ResponseResult delNews(Integer id) {// 1. 检验参数if(id == null){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "文章id不可缺少");}// 2. 查询文章WmNews news = getById(id);if(news == null){return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST, "文章不存在");}// 3. 查询文章状态// 3.1 已发布, 不能删除if(news.getStatus() == WmNews.Status.PUBLISHED.getCode()){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "文章已发布, 不能删除");}// 3.2 草稿, 没有关系数据if(news.getStatus() == WmNews.Status.NORMAL.getCode()){removeById(id);return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);}// 4. 删除文章// 4.1 删除文章素材关系表中的关系数据LambdaQueryWrapper<WmNewsMaterial> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(WmNewsMaterial::getNewsId, id);wmNewsMaterialMapper.delete(queryWrapper);// 4.2 删除文章表中的数据removeById(id);return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }
    
  • 总结
    • 查询文章状态步, 若为草稿, 应提取结束, 则需添加删除文章表数据, 但这样删除文章表数据就写了两次, 可将删除文章数据提前, 但如此, 步骤的逻辑顺序又不大合适, 删除文章数据在删除文章关系数据之前, 删除文章数据在查询文章状态之中.

文章上下架

  • 实现思路
    1. 检验参数, 参数为空, 返回文章id不可缺少
    2. 检验参数, 上下架参数不合法, 默认为上架
    3. 查询文章, 文章对象为空, 返回文章不存在
    4. 查询文章状态, 状态不是已发布, 返回当前文章不是发布状态, 不能上下架
    5. 更新文章的上下架属性
  • 具体实现
    // dto
    public class WmNewsDto {private Integer id;/*** 是否上架* 0: 下架, 1: 上架*/private Short enable;
    }// Service
    public ResponseResult downOrUp(WmNewsDto dto) {// 1. 检验参数// 1.0 检查文章dto是否为空if(dto == null){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "文章id不可缺少");}// 1.1 检查文章上架参数是否合法if(dto.getEnable() != 0 && dto.getEnable() != 1){// 默认上架dto.setEnable((short) 1);}// 2. 查询文章WmNews news = getById(dto.getId());if(news == null){return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST, "文章不存在");}// 3. 查询文章状态if(news.getStatus() != WmNews.Status.PUBLISHED.getCode()){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "当前文章不是发布状态, 不能上下架");}// 4. 上下架news.setEnable(dto.getEnable());updateById(news);return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }
    
  • 总结
    • 判断id是否为空, 应判断dto是否为空, 因为类中属性有初始值, dto不空, 则id会有初始值
    • 下架后, 出现删除按钮, 但是下架后仍是已发布状态, 不能删除, 下架应该修改状态, 但没有给出状态码

来源

黑马程序员. 黑马头条

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

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

相关文章

[C++] C++入门第二篇 -- 引用 -- 内联函数inline -- auto+for

目录 1、引用 -- & 1.1 引用的概念 1.2 引用特性 1.3 常引用 -- 权限问题 1.4 引用的使用场景 1.4.1 做参数 1.4.2 做返回值 注意 1.5 传值、传引用的效率比较 1.6 引用和指针的区别 2、内联函数 2.1 概念 转存失败重新上传取消​编辑转存失败重新上传取消​编…

flink cdc环境搭建

1.下载flink https://archive.apache.org/dist/flink/flink-1.12.2/ 2.修改flink-conf.yaml #根据自己电脑核数修改&#xff0c;这里我设置为4&#xff0c;因为系统分配了4核 jobmanager.rpc.address: localhost #主机名根据自己设定 taskmanager.numberOfTaskSlots: 4 3.下载…

前端JS识别二维码内容

原文&#xff1a;https://www.cnblogs.com/houxianzhou/p/15030351.html <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>图片二维码识别</title><script src"https://cdn.bootcss.com/jquery/3.4.1/jque…

MATLAB实现网络相关的仿真(附上完整仿真源码)

MATLAB是一种功能强大的编程语言&#xff0c;可以用于网络相关的仿真。在本文中&#xff0c;我们将介绍如何使用MATLAB实现网络仿真&#xff0c;并附上简单的代码和完整仿真源码。 网络仿真是指通过计算机模拟网络环境&#xff0c;以评估网络性能、验证网络协议和测试网络应用…

Springboot中 AOP实现日志信息的记录到数据库

1、导入相关的依赖 <!--spring切面aop依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 注意&#xff1a;在application.properties文件里加这样一…

【前端设计】使用Verdi查看波形时鼠标遮住了parameter值怎么整

盆友&#xff0c;你们在使用Verdi的时候&#xff0c;有没有遇到过鼠标遮挡着了parameter数值的场景&#xff1f;就跟下面这个示意图一样&#xff1a; 最可恨的是这个参数值他会跟着你的鼠标走&#xff0c;你想把鼠标移开看看看这个例化值到底是多大吧&#xff0c;这个数他跟着你…

Python实现人脸识别功能

Python实现人脸识别功能 闲来没事&#xff0c;记录一下前几天学习的人脸识别小项目。 要想实现人脸识别&#xff0c;我们首先要搞明白&#xff0c;人脸识别主要分为哪些步骤&#xff1f;为了提高人脸识别的准确性&#xff0c;我们首先要把图像或视频中的人脸检测出来&#xf…

基于DNN深度学习网络的OFDM+QPSK信号检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................. Transmitt…

XGBoost实例——皮马印第安人糖尿病预测和特征筛选

利用皮马印第安人糖尿病数据集来预测皮马印第安人的糖尿病&#xff0c;以下是数据集的信息&#xff1a; Pregnancies&#xff1a;怀孕次数Glucose&#xff1a;葡萄糖BloodPressure&#xff1a;血压 (mm Hg)SkinThickness&#xff1a;皮层厚度 (mm)Insulin&#xff1a;胰岛素 2…

区块链学习笔记

区块链技术与应用 数组 列表 二叉树 哈希函数 BTC中的密码学原理 cryptographic hash function collsion resistance(碰撞抵抗) 碰撞指的是找到两个不同的输入值&#xff0c;使得它们的哈希值相同。也就是说&#xff0c;如果存在任意两个输入x和y&#xff0c;满足x ≠ y…

【N32L40X】学习笔记03-gpio输出库

gpio输出 该函数库的目的就是在统一的地方配置&#xff0c;将配置的不同项放置在一个结构体内部使用一个枚举来定义一个的别名 led.c #include <stdio.h> #include "led/bsp_led.h"static led_t leds[LED_NUM]{{GPIOB,GPIO_PIN_2,RCC_APB2_PERIPH_GPIOB},{GP…

Android获取屏幕的宽高、密度等

转载他人的链接 Android 获取屏幕尺寸与密度获取屏幕密度&#xff08;方法1&#xff09; int screenWidth getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽&#xff08;像素&#xff0c;如&#xff1a;480px&#xff09; int screenHeight getWin…

ElasticSearch的面试题

ElasticSearch的面试题 ElasticSearch是开源的高扩展的分布式全文搜索引擎。 ElasticSearch基本操作 ES里的Index可以看做一个库&#xff0c;而Types想当于表&#xff0c;Documents则相当于表的行&#xff0c;这里的Types的概念已经被逐渐弱化&#xff0c;ElasticSearch6.X中&…

【ES】---ES的聚合(aggregations)

目录 一、前言1、聚合分类2、聚合的实现方式二、RestAPI--bucket聚合案例11、按照类型分bucket2、按照(String)时间分bucket三、RestAPI-- metric聚合案例11、metric指标统计四、RestAPI-- pipeline聚合案例1一、前言 聚合是对文档数据的统计、分析、计算。 注意:参与聚合的字…

SpringBoot-Mybatis整合+Restful风格 + (CRUD简单案例)

SpringBoot-Mybatis整合 基本步骤数据库设计数据库表设计pom.xml文件坐标SpringBoot配置配置SpringBoot 启动器类配置数据源(数据库)日志 驼峰映射 访问路径和端口 等引入前端页面搭建后端包结构业务逻辑(Restful风格)前端请求的四种方式(GET POST PUT DELETE)GET DELETEPO…

Java语言创建包含以上数据类型的MySQL表,并提供批量新增数据、批量修改数据、删除数据以及字段的DDL语句的详细代码示例

以下是使用Java语言创建包含以上数据类型的MySQL表&#xff0c;并提供批量新增数据、批量修改数据、删除数据以及字段的DDL语句的详细代码示例&#xff1a; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.State…

YOLOX-PAI 论文学习

1. 解决了什么问题&#xff1f; 对 YOLOX 做加速&#xff0c;在单张 Tesla V100 上取得了 42.8 42.8 42.8mAP&#xff0c;推理速度为 1 毫秒。 2. 提出了什么方法&#xff1f; 2.1 主干网络 YOLOv6 和 PP-YOLOE 都将主干网络从 CSPNet 切换到了 RepVGG。RepVGG 在推理时&a…

MyBatis学习笔记之高级映射及延迟加载

文章目录 环境搭建&#xff0c;数据配置多对一的映射的思路逻辑级联属性映射association分布查询 一对多的映射的思路逻辑collection分布 环境搭建&#xff0c;数据配置 t_class表 t_stu表 多对一的映射的思路逻辑 多对一&#xff1a;多个学生对应一个班级 多的一方是st…

Anaconda常用命令

Anaconda常用命令 文章目录 Anaconda常用命令1. 前言2. 管理conda自身2.1 查看conda版本2.2 查看conda的环境配置2.3 设置镜像2.4 更新conda2.6 更新Anaconda整体2.7 查询某个命令的帮助 3. 管理环境3.1 创建虚拟环境3.2 创建虚拟环境的同时安装必要的包3.3 查看有哪些虚拟环境…

redis缓存穿透

缓存穿透是指在缓存中查询大量不存在的数据&#xff0c;导致无效请求直接落到后端数据库&#xff0c;从而造成数据库负载过高&#xff0c;甚至引起数据库超负荷的情况。缓存穿透通常发生在恶意攻击或非法请求的情况下&#xff0c;攻击者故意查询不存在的数据&#xff0c;导致大…