admin -coll-List<AdChannel> adChannelList = channelService.list();
待审核包括 1-已提交待审核,3-待人工审核
queryWrapper.lambda().in(WmNews::getStatus,new Integer[]{1,3});
queryWrapper.lambda().ge(WmNews::getPublishTime,wmNewsPageReqDto.getBeginPubDate(}
queryWrapper.lambda().le(WmNews::getPublishTime,wmNewsPageReqDto.getEndPubDate());
保存文章,除了保存wm_news表以外,还需要保存wm_new_material文章素材关系表,用来记录文章中使用的素材信息 wm_news_material 文章素材关系表 wm_material 素材表
-
如果有id修改文章,先删除所有素材关联关系(一般一对多关系都是如此处理)
-
如果没有id,保存文章
WmNewsDto
package com.heima.wemedia.service;
public interface WmNewsMaterialService extends IService<WmNewsMaterial> {
/* 根据自媒体文章id 删除关系 */
void deleteByNewsId(Integer newId);
/* 批量保存文章素材中间表 */
void saveInfoBatch(List<Integer> materialIds, Integer wmNewsId, int type);
}
修改自媒体网关
- id: admin
uri: lb://leadnews-admin
predicates:
- Path=/admin/**
filters:
- StripPrefix= 1
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController {}
/**
* 批量保存文章素材中间表
* @param materialIds
* @param wmNewsId
* @param type
*/
@Override
public void saveInfoBatch(List<Integer> materialIds, Integer wmNewsId, int type) {
if(CollectionUtils.isEmpty(materialIds)){
return ;
}
List<WmNewsMaterial> wmNewsMaterialList = new ArrayList<>();
for (Integer materialId : materialIds) {
WmNewsMaterial wmNewsMaterial = new WmNewsMaterial();
wmNewsMaterial.setMaterialId(materialId);
wmNewsMaterial.setNewsId(wmNewsId);
wmNewsMaterial.setType(type);
wmNewsMaterialList.add(wmNewsMaterial);
}
if(CollectionUtils.isEmpty(wmNewsMaterialList)){
return ;
}
boolean b = saveBatch(wmNewsMaterialList);
if(!b){
throw new LeadException(AppHttpCodeEnum.SERVER_ERROR);
}
}
}
Service- void saveNews(WmNewsDto wmNewsDto);
/**
* 保存、修改、发布自媒体文章
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void saveNews(WmNewsDto wmNewsDto) {
// 判断参数,如果标题、内容为空返回错误
if(wmNewsDto == null ||
StringUtils.isBlank(wmNewsDto.getTitle()) ||
StringUtils.isBlank(wmNewsDto.getContent())){
throw new LeadException(AppHttpCodeEnum.PARAM_INVALID,"参数错误!");
}
// 获取用户信息
Integer userId = UserThreadLocalUtils.getUserId();
if(userId == null || userId ==0){
throw new LeadException(AppHttpCodeEnum.NEED_LOGIN);
}
// 对象转换
WmNews wmNews = BeanHelper.copyProperties(wmNewsDto, WmNews.class);
if(wmNews.getId() == null){
// 新增操作
wmNews.setCreatedTime(new Date());
wmNews.setWmUserId(userId);
}
if(!wmNewsDto.getDraft()){
// 如果是提交需要记录提交时间
wmNews.setSubmitedTime(new Date());
}
if(!CollectionUtils.isEmpty(wmNewsDto.getImages())){
// 处理封面图片地址,多个地址使用,进行分割
String images = wmNewsDto.getImages().stream().collect(Collectors.joining(","));
wmNews.setImages(images);
}
// 保存文章表,新增或修改
this.saveOrUpdate(wmNews);
// 文章表和素材表是多对多关系,如果是修改文章表,需要先把中间表信息删除
if(wmNewsDto.getId() != null){
wmNewsMaterialService.deleteByNewsId(wmNews.getId());
}
// 文章内容 类型转换,把json数据转map对象
List<Map<String, Object>> contents = JsonUtils.nativeRead(wmNewsDto.getContent(), new TypeReference<List<Map<String, Object>>>() {
});
// 从文章内容中,获取素材id集合
List<Integer> contentMaterialIds = getMaterialIdsByContent(contents);
log.info("#####contentMaterialIds 1 is {}",contentMaterialIds);
// 保存文章内容和素材表关联,0 - 内容引用
// 保存素材和文章的关系
if(!CollectionUtils.isEmpty(contentMaterialIds)){
wmNewsMaterialService.saveInfoBatch(contentMaterialIds,wmNews.getId(),0);
}
if(!CollectionUtils.isEmpty(wmNewsDto.getImages())){
// 根据封面中图片url,找到素材的id
List<Integer> imageMaterialIds = getMaterialIdsByUrls(wmNewsDto.getImages(),userId);
log.info("#####imageMaterialIds 2 is {}",imageMaterialIds);
// 保存文章封面 和 素材的关联 ,1- 封面内容
wmNewsMaterialService.saveInfoBatch(imageMaterialIds,wmNews.getId(),1);
}
}
/**
* 获取封面图片的素材id集合
* @param images
* @return
*/
private List<Integer> getMaterialIdsByUrls(List<String> images,Integer userId) {
QueryWrapper<WmMaterial> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(WmMaterial::getUserId,userId).in(WmMaterial::getUrl,images);
List<WmMaterial> wmMaterialList = wmMaterialService.list(queryWrapper);
if(CollectionUtils.isEmpty(wmMaterialList)){
throw new LeadException(AppHttpCodeEnum.DATA_NOT_EXIST);
}
List<Integer> ids = wmMaterialList.stream().map(WmMaterial::getId).collect(Collectors.toList());
return ids;
}
/**
* 获取文章内容中的素材id集合
* @param contentList
* @return
*/
private List<Integer> getMaterialIdsByContent(List<Map<String, Object>> contentList) {
List<Integer> materialIds = new ArrayList<>();
for (Map<String, Object> map : contentList) {
String type = (String)map.get("type");
if(type.equals("image")){
Integer materialId = (Integer) map.get("id");
materialIds.add(materialId);
}
}
return materialIds;
}
WmNewsController类 保存、修改、发布自媒体文章 -
@PostMapping("/submit")
public ResponseResult saveNews(@RequestBody WmNewsDto wmNewsDto){
wmNewsService.saveNews(wmNewsDto);
return ResponseResult.ok();
}