0.黑馬頭條-學習目標
- 完成自媒體文章列表查詢功能
- 完成自媒體文章的發布功能
- 完成自媒體文章的查詢
- 完成自媒體文章的刪除功能
- 完成自媒體文章的上下架功能功能
1.自媒體文章列表查詢
1.1.需求分析
1.2.表結構和實體類
leadnews_wemedia數據庫:自媒體文章表:wm_news
在heima-leadnews-model中創建WmNews實體類
/**
* <p>
* 自媒體圖文內容信息表
* </p>
*
* @author itheima
*/
@Data
@TableName("wm_news")
public class WmNews implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主鍵
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 自媒體用戶ID
*/
@TableField("user_id")
private Integer userId;
/**
* 標題
*/
@TableField("title")
private String title;
/**
* 圖文內容
*/
@TableField("content")
private String content;
/**
* 文章布局
0 無圖文章
1 單圖文章
3 多圖文章
*/
@TableField("type")
private Short type;
/**
* 圖文頻道ID
*/
@TableField("channel_id")
private Integer channelId;
@TableField("labels")
private String labels;
/**
* 創建時間
*/
@TableField("created_time")
private Date createdTime;
/**
* 提交時間
*/
@TableField("submited_time")
private Date submitedTime;
/**
* 當前狀態
0 草稿
1 提交(待審核)
2 審核失敗
3 人工審核
4 人工審核通過
8 審核通過(待發布)
9 已發布
*/
@TableField("status")
private Short status;
/**
* 定時發布時間,不定時則為空
*/
@TableField("publish_time")
private Date publishTime;
/**
* 拒絕理由
*/
@TableField("reason")
private String reason;
/**
* 發布庫文章ID
*/
@TableField("article_id")
private Integer articleId;
/**
* //圖片用逗號分隔
*/
@TableField("images")
private String images;
@TableField("enable")
private Short enable;
//狀態枚舉類
@Alias("WmNewsStatus")
public enum Status{
NORMAL((short)0),SUBMIT((short)1),FAIL((short)2),ADMIN_AUTH((short)3),ADMIN_SUCCESS((short)4),SUCCESS((short)8),PUBLISHED((short)9);
short code;
Status(short code){
this.code = code;
}
public short getCode(){
return this.code;
}
}
}
1.3.接口定義
1.在heima-leadnews-apis中創建接口:com.heima.api.wemedia.WmNewsControllerApi
public interface WmNewsControllerApi {
/**
* 分頁帶條件查詢自媒體文章列表
* @param dto
* @return
*/
public ResponseResult findAll(WmNewsPageReqDto dto);
}
2.在heima-leadnews-model中創建:com.heima.model.wemedia.dtos.WmNewsPageReqDto
@Data
public class WmNewsPageReqDto extends PageRequestDto {
/**
* 狀態
*/
private Short status;
/**
* 關鍵字
*/
private String keyword;
/**
* 頻道
*/
private Integer channelId;
/**
* 開始時間
*/
private Date beginPubDate;
/**
* 結束時間
*/
private Date endPubDate;
}
1.4.功能實現
1.在heima-leadnews-wemedia中創建mapper接口:com.heima.wemedia.mapper.WmNewsMapper
@Mapper
public interface WmNewsMapper extends BaseMapper<WmNews> {
}
2.在heima-leadnews-wemedia中創建service接口:com.heima.wemedia.service.WmNewsService
public interface WmNewsService extends IService<WmNews> {
/**
* 分頁帶條件查詢自媒體文章列表
* @param dto
* @return
*/
public ResponseResult findAll(WmNewsPageReqDto dto);
}
3.在heima-leadnews-wemedia中創建service接口實現類:com.heima.wemedia.service.impl.WmNewsServiceImpl
@Service
public class WmNewsServiceImpl extends ServiceImpl<WmNewsMapper, WmNews> implements WmNewsService {
@Value("${fdfs.url}")
private String fileServerUrl;
@Override
public ResponseResult findAll(WmNewsPageReqDto dto) {
//1.參數檢查
if (dto == null) {
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
}
//分頁參數檢查
dto.checkParam();
//2.分頁條件查詢
IPage pageParam = new Page(dto.getPage(), dto.getSize());
LambdaQueryWrapper<WmNews> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//狀態精確查詢
if (dto.getStatus() != null) {
lambdaQueryWrapper.eq(WmNews::getStatus, dto.getStatus());
}
//頻道精確查詢
if (dto.getChannelId() != null) {
lambdaQueryWrapper.eq(WmNews::getChannelId, dto.getChannelId());
}
//關鍵字模糊查詢
if (StringUtils.isNotBlank(dto.getKeyword())) {
lambdaQueryWrapper.like(WmNews::getTitle, dto.getKeyword());
}
//時間范圍查詢
if (dto.getBeginPubDate() != null && dto.getEndPubDate() != null) {
lambdaQueryWrapper.between(WmNews::getPublishTime, dto.getBeginPubDate(), dto.getEndPubDate());
}
//根據自媒人精確查詢
WmUser user = WmThreadLocalUtils.getUser();
if (user == null) {
return ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
}
lambdaQueryWrapper.eq(WmNews::getUserId, user.getId());
//按照發布時間倒序查詢
lambdaQueryWrapper.orderByDesc(WmNews::getPublishTime);
IPage pageResult = page(pageParam, lambdaQueryWrapper);
//3.結果封裝返回
PageResponseResult responseResult = new PageResponseResult(dto.getPage(), dto.getSize(), (int) pageResult.getTotal());
responseResult.setData(pageResult.getRecords());
responseResult.setHost(fileServerUrl);
return responseResult;
}
}
4.在heima-leadnews-wemedia中創建controller:com.heima.wemedia.controller.v1.WmNewsController
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController implements WmNewsControllerApi {
@Autowired
private WmNewsService wmNewsService;
@PostMapping("/list")
@Override
public ResponseResult findAll(@RequestBody WmNewsPageReqDto dto) {
return wmNewsService.findAll(dto);
}
}
1.5.測試
導入資料中的前端項目project-heima-leadnews-wemedia-vue-master,並啟動
啟動后端項目
- heima-leadnews-wemedia-gateway
- heima-leadnews-wemedia
- heima-leadnews-admin-gateway
- heima-leadnews-admin
- nacos
- seata
之后瀏覽器輸入地址:localhost:8080,訪問測試。
2.頻道列表加載
2.1.需求分析
文章展示列表頁面打開的時候,默認自動加載頻道列表數據進行展示,就是查詢所有頻道數據
2.2.接口定義
1.在heima-leadnews-apis中的AdChannelControllerApi新增方法
/**
* 查詢所有頻道
* @return
*/
public ResponseResult findAll();
2.在heima-leadnews-admin中的AdChannelController中實現方法
@GetMapping("/channels")
@Override
public ResponseResult findAll() {
List<AdChannel> list = adChannelService.list();
return ResponseResult.okResult(list);
}
3.在heima-leadnews-wemedia-gateway的application.yml中增加配置
spring:
application:
name: leadnews-wemedia-gateway
cloud:
nacos:
......
gateway:
globalcors:
......
routes:
.....
- id: admin
uri: lb://leadnews-admin
predicates:
- Path=/admin/**
filters:
- StripPrefix= 1
4.重新啟動項目,重新測試
3.自媒體文章-發布修改保存草稿
3.1.需求分析
leadnews_wemedia數據庫
自媒體文章表:wm_news
素材表:wm_material
文章素材關系表:wm_news_material
3.2.接口定義
思路分析
- 該功能為保存、修改(是否有id)、保存草稿的共有方法
- 如果有id修改文章,先刪除所有素材關聯關系
- 如果沒有id,保存文章
- 關聯內容中的圖片與素材的關系
- 關聯封面中的圖片與素材的關系
- 封面圖片如果選擇是自動需要從內容中截圖圖片做為封面圖片
- 截取規則為:內容圖片的個數小於等於2 則為單圖截圖一張圖,內容圖片大於等於3,則為多圖,截圖三張圖,內容中沒有圖片,則為無圖
前端傳遞給后端的參數
{
"title":"黑馬頭條項目背景",
"type":"1",//這個 0 是無圖 1 是單圖 3 是多圖 -1 是自動
"labels":"黑馬頭條",
"publishTime":"2020-03-14T11:35:49.000Z",
"channelId":1,
"images":[
"http://192.168.200.130/group1/M00/00/00/wKjIgl5swbGATaSAAAEPfZfx6Iw790.png"
],
"status":1,
"content":"[
{
"type":"text",
"value":"隨着智能手機的普及,人們更加習慣於通過手機來看新聞。由於生活節奏的加快,很多人只能利用碎片時間來獲取信息,因此,對於移動資訊客戶端的需求也越來越高。黑馬頭條項目正是在這樣背景下開發出來。黑馬頭條項目采用當下火熱的微服務+大數據技術架構實現。本項目主要着手於獲取最新最熱新聞資訊,通過大數據分析用戶喜好精確推送咨詢新聞"
},
{
"type":"image",
"value":"http://192.168.200.130/group1/M00/00/00/wKjIgl5swbGATaSAAAEPfZfx6Iw790.png"
}
]"
}
接口定義
1.在heima-leadnews-apis中的WmNewsControllerApi中新增接口方法
public interface WmNewsControllerApi {
....
/**
* 保存、修改文章,保存草稿
* @return
*/
public ResponseResult submitNews(WmNewsDto dto);
}
2.在heima-leadnews-model中創建WmNewsDto
@Data
public class WmNewsDto {
private Integer id;
/**
* 標題
*/
private String title;
/**
* 頻道id
*/
private Integer channelId;
/**
* 標簽
*/
private String labels;
/**
* 發布時間
*/
private Date publishTime;
/**
* 文章內容
*/
private String content;
/**
* 文章封面類型 0 無圖 1 單圖 3 多圖 -1 自動
*/
private Short type;
/**
* 是否上架 0 下架 1 上架
*/
private Short enable;
/**
* 提交時間
*/
private Date submitedTime;
/**
* 狀態 提交為1 草稿為0
*/
private Short status;
/**
* 拒絕理由
*/
private String reason;
/**
* 封面圖片列表 多張圖以逗號隔開
*/
private List<String> images;
}
3.3.業務層實現1
1.在heima-leadnews-wemedia中的WmNewsController實現方法
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController implements WmNewsControllerApi {
@Autowired
private WmNewsService wmNewsService;
.......
@Override
public ResponseResult submitNews(@RequestBody WmNewsDto dto) {
return null;
}
}
2.在heima-leadnews-wemedia中的WmNewsService新增接口方法
public interface WmNewsService extends IService<WmNews> {
........
/**
* 自媒體文章發布
* @param dto
* @param isSubmit 是否為提交 1 提交 0 草稿
* @return
*/
public ResponseResult saveNews(WmNewsDto dto,Short isSubmit);
}
3.在heima-leadnews-wemedia中的WmNewsServiceImpl實現方法
/**
* 自媒體文章發布
* @param dto
* @param isSubmit 是否為提交 1 提交 0 草稿
* @return
*/
@Override
public ResponseResult saveNews(WmNewsDto dto, Short isSubmit) {
//1.檢查參數
if (dto == null || StringUtils.isBlank(dto.getContent())) {
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
}
//2.保存或修改文章
WmNews wmNews = new WmNews();
BeanUtils.copyProperties(dto, wmNews);
if (WemediaContans.WM_NEWS_AUTO_TYPE.equals(dto.getType())) {
wmNews.setType(null);
}
if (dto.getImages() != null && dto.getImages().size() > 0) {
//[dfjksdjfdfj.jpg,sdlkjfskld.jpg]
wmNews.setImages(dto.getImages().toString().replace("[", "")
.replace("]", "").replace(fileServerUrl, "")
.replace(" ", ""));
}
//保存或修改文章
saveWmNews(wmNews, isSubmit);
return null;
}
@Autowired
private WmNewsMaterialMapper wmNewsMaterialMapper;
/**
* 保存或修改文章
*
* @param wmNews
* @param isSubmit
*/
private void saveWmNews(WmNews wmNews, Short isSubmit) {
wmNews.setStatus(isSubmit);
wmNews.setUserId(WmThreadLocalUtils.getUser().getId());
wmNews.setCreatedTime(new Date());
wmNews.setSubmitedTime(new Date());
wmNews.setEnable((short) 1);
if (wmNews.getId() == null) {
save(wmNews);
} else {
//如果是修改,則先刪除素材與文章的關系
LambdaQueryWrapper<WmNewsMaterial> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(WmNewsMaterial::getNewsId, wmNews.getId());
wmNewsMaterialMapper.delete(queryWrapper);
updateById(wmNews);
}
}
4.在heima-leadnews-common中的WemediaContans中增加常量
public class WemediaContans {
public static final Short COLLECT_MATERIAL = 1;//收藏
public static final Short CANCEL_COLLECT_MATERIAL = 0;//收藏
public static final Short WM_NEWS_SINGLE_TYPE = 1;
public static final Short WM_NEWS_NONE_TYPE = 0;
public static final Short WM_NEWS_MANY_TYPE = 3;
public static final Short WM_NEWS_AUTO_TYPE = -1;
public static final String WM_NEWS_TYPE_IMAGE = "image";
public static final Short WM_NEWS_CONTENT_REFERENCE =0;
public static final Short WM_NEWS_COVER_REFERENCE =1;
public static final Short WM_NEWS_ENABLE_UP =1;
}
3.4.業務層實現2
/**
* 自媒體文章發布
* @param dto
* @param isSubmit 是否為提交 1 提交 0 草稿
* @return
*/
@Override
public ResponseResult saveNews(WmNewsDto dto, Short isSubmit) {
.....
//3.關聯文章與素材的關系
String content = dto.getContent();
List<Map> list = JSON.parseArray(content, Map.class);
List<String> materials = ectractUrlInfo(list);
.......
return null;
}
/**
* 提取圖片信息
*
* @param list
* @return
*/
private List<String> ectractUrlInfo(List<Map> list) {
List<String> materials = new ArrayList<>();
for (Map map : list) {
if (map.get("type").equals(WemediaContans.WM_NEWS_TYPE_IMAGE)) {
String imgUrl = (String) map.get("value");
imgUrl = imgUrl.replace(fileServerUrl, "");
materials.add(imgUrl);
}
}
return materials;
}
3.5.業務層實現3
/**
* 自媒體文章發布
* @param dto
* @param isSubmit 是否為提交 1 提交 0 草稿
* @return
*/
@Override
public ResponseResult saveNews(WmNewsDto dto, Short isSubmit) {
......
//3.1 關聯內容中的圖片與素材的關系
if (isSubmit == WmNews.Status.SUBMIT.getCode() && materials.size() != 0) {
ResponseResult responseResult = saveRelativeInfoForContent(materials, wmNews.getId());
if (responseResult != null) {
return responseResult;
}
}
......
return null;
}
/**
* 保存素材與文章內容的關系
*
* @param materials
* @param newsId
* @return
*/
private ResponseResult saveRelativeInfoForContent(List<String> materials, Integer newsId) {
return saveRelativeInfo(materials, newsId, WemediaContans.WM_NEWS_CONTENT_REFERENCE);
}
@Autowired
private WmMaterialMapper wmMaterialMapper;
/**
* 保存關系
*
* @param materials
* @param newsId
* @param type
* @return
*/
private ResponseResult saveRelativeInfo(List<String> materials, Integer newsId, Short type) {
//1.獲取數據庫中的素材信息
LambdaQueryWrapper<WmMaterial> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(WmMaterial::getUrl, materials);
lambdaQueryWrapper.eq(WmMaterial::getUserId, WmThreadLocalUtils.getUser().getId());
List<WmMaterial> dbMaterials = wmMaterialMapper.selectList(lambdaQueryWrapper);
//2.通過圖片的路徑獲取素材的id
List<String> materialsIds = new ArrayList<>();
if (dbMaterials != null && dbMaterials.size() > 0) {
//<kdjfksdjkfljdsf.jps,2>
Map<String, Integer> uriIdMap = dbMaterials.stream().collect(Collectors.toMap(WmMaterial::getUrl, WmMaterial::getId));
for (String val : materials) {
String materialId = String.valueOf(uriIdMap.get(val));
//沒找到
if ("null".equals(materialId)) {
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "應用圖片失效");
}
//找到了
materialsIds.add(materialId);
}
}
//3.批量保存數據
wmNewsMaterialMapper.saveRelations(materialsIds, newsId, type);
return null;
}
在WmNewsMaterialMapper中自定義方法
@Mapper
public interface WmNewsMaterialMapper extends BaseMapper<WmNewsMaterial> {
void saveRelations(@Param("materials") List<String> materialsIds, @Param("newsId")Integer newsId, @Param("type")Short type);
}
創建WmNewsMaterialMapper.xml映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.heima.wemedia.mapper.WmNewsMaterialMapper">
<insert id="saveRelations">
insert into wm_news_material (material_id, news_id, type, ord)
values
<foreach item="mid" index="ord" collection="materials" separator="," >
(#{mid}, #{newsId}, #{type}, #{ord})
</foreach>
</insert>
</mapper>
3.6.業務實現4
/**
* 自媒體文章發布
* @param dto
* @param isSubmit 是否為提交 1 提交 0 草稿
* @return
*/
@Override
public ResponseResult saveNews(WmNewsDto dto, Short isSubmit) {
.......
//3.2 關聯封面中的圖片與素材的關系,設置wm_news的type,自動
if (isSubmit == WmNews.Status.SUBMIT.getCode()) {
ResponseResult responseResult = saveRelativeInfoForCover(dto, materials, wmNews);
if (responseResult != null) {
return responseResult;
}
}
return null;
}
/**
* 設置封面圖片與素材的關系
*
* @param dto
* @param materials
* @param wmNews
* @return
*/
private ResponseResult saveRelativeInfoForCover(WmNewsDto dto, List<String> materials, WmNews wmNews) {
List<String> images = dto.getImages();
//自動匹配封面
if (dto.getType().equals(WemediaContans.WM_NEWS_AUTO_TYPE)) {
//內容中的圖片數量小於等於2 設置為單圖
if (materials.size() > 0 && materials.size() <= 2) {
wmNews.setType(WemediaContans.WM_NEWS_SINGLE_TYPE);
images = materials.stream().limit(1).collect(Collectors.toList());
} else if (materials.size() > 2) {
//如果內容中的圖片大於2 則設置為多圖
wmNews.setType(WemediaContans.WM_NEWS_MANY_TYPE);
images = materials.stream().limit(3).collect(Collectors.toList());
} else {
//內容中沒有圖片,則是無圖
wmNews.setType(WemediaContans.WM_NEWS_NONE_TYPE);
}
//修改文章信息
if (images != null && images.size() > 0) {
wmNews.setImages(images.toString().replace("[", "")
.replace("]", "").replace(fileServerUrl, "")
.replace(" ", ""));
}
updateById(wmNews);
}
//保存封面圖片與素材的關系
if (images != null && images.size() > 0) {
ResponseResult responseResult = saveRelativeInfoForImage(images, wmNews.getId());
if (responseResult != null) {
return responseResult;
}
}
return null;
}
/**
* @param images
* @param newsId
* @return
*/
private ResponseResult saveRelativeInfoForImage(List<String> images, Integer newsId) {
List<String> materials = new ArrayList<>();
for (String image : images) {
materials.add(image.replace(fileServerUrl,""));
}
return saveRelativeInfo(materials,newsId,WemediaContans.WM_NEWS_COVER_REFERENCE);
}
3.7.控制器編寫及測試
1.在heima-leadnews-wemedia中的WmNewsController中完善方法
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController implements WmNewsControllerApi {
@Autowired
private WmNewsService wmNewsService;
......
@PostMapping("/submit")
@Override
public ResponseResult submitNews(@RequestBody WmNewsDto dto) {
if(dto.getStatus() == WmNews.Status.SUBMIT.getCode()){
return wmNewsService.saveNews(dto,WmNews.Status.SUBMIT.getCode());
}else{
return wmNewsService.saveNews(dto,WmNews.Status.NORMAL.getCode());
}
}
}
2.啟動測試
需要啟動的組件
- heima-leadnews-wemedia-gateway
- heima-leadnews-wemedia
- heima-leadnews-admin-gateway
- heima-leadnews-admin
- nacos
- seata
- 前端項目
瀏覽器輸入地址:localhost:8080,訪問前端項目進行測試
4.自媒體文章-詳情查詢
4.1.需求分析
點擊修改的時候,就是根據文章id查詢,跳轉至編輯頁面進行展示
4.2.功能實現
1.在heima-leadnews-apis中的WmNewsControllerApi新增接口
public interface WmNewsControllerApi {
.......
/**
* 根據id獲取文章信息
* @param id
* @return
*/
public ResponseResult findWmNewsById(Integer id);
}
2.在heima-leadnews-wemedia的WmNewsService新增接口
public interface WmNewsService extends IService<WmNews> {
......
/**
* 根據id獲取文章信息
* @param id
* @return
*/
public ResponseResult findWmNewsById(Integer id);
}
3.在heima-leadnews-wemedia的WmNewsServiceImpl中實現方法
/**
* 根據id獲取文章信息
* @param id
* @return
*/
@Override
public ResponseResult findWmNewsById(Integer id) {
//1.參數檢查
if(id == null){
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章Id不可缺少");
}
//2.查詢數據
WmNews wmNews = getById(id);
if(wmNews == null){
return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
}
//3.結果返回
ResponseResult responseResult = ResponseResult.okResult(wmNews);
responseResult.setHost(fileServerUrl);
return responseResult;
}
4.在heima-leadnews-wemedia的WmNewsController中實現接口方法
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController implements WmNewsControllerApi {
@Autowired
private WmNewsService wmNewsService;
......
@GetMapping("/one/{id}")
@Override
public ResponseResult findWmNewsById(@PathVariable("id") Integer id) {
return wmNewsService.findWmNewsById(id);
}
}
5.啟動測試
5.自媒體文章-刪除
5.1.需求分析
注意
- 當文章狀態為9(已發布)且已上架則不能刪除文章,下架狀態可以刪除,如果是其他狀態可以刪除
- 刪除文章之前需要先把素材與文章的關系刪除掉
5.2.功能實現
1.在heima-leadnews-apis中的WmNewsControllerApi新增接口
public interface WmNewsControllerApi {
.......
/**
* 刪除文章
* @param id
* @return
*/
public ResponseResult delNews(Integer id);
}
2.在heima-leadnews-wemedia的WmNewsService新增接口
public interface WmNewsService extends IService<WmNews> {
......
/**
* 刪除文章
* @param id
* @return
*/
public ResponseResult delNews(Integer id);
}
3.在heima-leadnews-wemedia的WmNewsServiceImpl中實現方法
/**
* 刪除文章
* @param id
* @return
*/
@Override
public ResponseResult delNews(Integer id) {
//1.檢查參數
if(id == null){
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章Id不可缺少");
}
//2.獲取數據
WmNews wmNews = getById(id);
if(wmNews == null){
return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
}
//3.判斷當前文章的狀態 status==9 enable == 1
if(wmNews.getStatus().equals(WmNews.Status.PUBLISHED.getCode()) && wmNews.getEnable().equals(WemediaContans.WM_NEWS_ENABLE_UP)){
return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章已發布,不能刪除");
}
//4.去除素材與文章的關系
wmNewsMaterialMapper.delete(Wrappers.<WmNewsMaterial>lambdaQuery().eq(WmNewsMaterial::getNewsId,wmNews.getId()));
//5.刪除文章
removeById(wmNews.getId());
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
4.在heima-leadnews-wemedia的WmNewsController中實現接口方法
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController implements WmNewsControllerApi {
@Autowired
private WmNewsService wmNewsService;
........
@GetMapping("/del_news/{id}")
@Override
public ResponseResult delNews(@PathVariable("id") Integer id) {
return wmNewsService.delNews(id);
}
}
5.啟動測試
6.自媒體文章-上架和下架
6.1.需求分析
下架
上架
注意
- 當前已經發布(狀態為9)的文章可以上架(enable = 1),也可以下架(enable = 0)
- 在上架和下架操作的同時,需要同步app端的文章配置信息,暫時不做,后期講到審核文章的時候再優化
6.2.功能實現
1.在heima-leadnews-apis中的WmNewsControllerApi新增接口
public interface WmNewsControllerApi {
........
/**
* 文章上下架
* @param dto
* @return
*/
public ResponseResult downOrUp(WmNewsDto dto);
}
2.在heima-leadnews-wemedia的WmNewsService新增接口
public interface WmNewsService extends IService<WmNews> {
.....
/**
* 文章上下架
* @param dto
* @return
*/
public ResponseResult downOrUp(WmNewsDto dto);
}
3.在heima-leadnews-wemedia的WmNewsServiceImpl中實現方法
/**
* 文章上下架
* @param dto
* @return
*/
@Override
public ResponseResult downOrUp(WmNewsDto dto) {
//1.檢查參數
if(dto == null || dto.getId() == null){
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
}
//2.查詢文章
WmNews wmNews = getById(dto.getId());
if(wmNews == null){
return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
}
//3.判斷文章是否發布
if(!wmNews.getStatus().equals(WmNews.Status.PUBLISHED.getCode())){
return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"當前文章不是發布狀態,不能上下架");
}
//4.修改文章狀態,同步到app端(后期做)TODO
if(dto.getEnable() != null && dto.getEnable() > -1 && dto.getEnable() < 2){
update(Wrappers.<WmNews>lambdaUpdate().eq(WmNews::getId,dto.getId()).set(WmNews::getEnable,dto.getEnable()));
}
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
4.在heima-leadnews-wemedia的WmNewsController中實現接口方法
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController implements WmNewsControllerApi {
@Autowired
private WmNewsService wmNewsService;
.........
@PostMapping("/down_or_up")
@Override
public ResponseResult downOrUp(@RequestBody WmNewsDto dto) {
return wmNewsService.downOrUp(dto);
}
}
5.啟動測試