fegin频道列表展示-根据id删除-批量保存

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();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值