1.自媒体文章发布模块

1.1 自媒体文章列表查询

  • 实现思路 :
    1. 1. 如果有文章标题,按照文章标题模糊查询
    2. 1. 如果有频道信息,按照频道ID查询
    3. 1. 此功能需要在admin服务中添加一个查询所有频道ID的方法,以便前端去调该接口
    4. 3. 如果有文章状态,按照状态信息进行查询
    5. 3. 如果开始时间,结束时间不为空按照时间区间查询
    6. 3. 按照登录用户ID去查询
    7. 3. 按照创建时间降序
    8. 3. 分页查询,返回结果设置host 地址 为图片访问前缀
    9. 3. 整体来看就是前端会传很多参数,这些参数可以传,可以不传所以sql查询加条件就好了
  • 相关表: wm_news ad_channel(频道ID)

    1.2 自媒体文章-发布、修改、保存草稿

  • 所用亮点技术: stream流 mybatis的标签进行批量插入

  • 实现思路:
    1. 1. 校验参数 封装WmNews对象
    2. 1. 传过来的images是一个字符集合,需要将该集合的每个元素去掉前缀,并用逗号隔开,最后返回一个字符串

image.png

  1. 2. 保存或者修改 根据id来判断 若没有id则保存,若有id证明已经保存过文章,就去修改
  2. 1. id不为空首先删除素材与文章的关系(素材文章关系表)再修改文章

image.png

  1. 3. 保存 文章和素材 的关联关系

image.png

  1. 4. 抽取文章内容中所引用的图片路径集合
  2. 1. 先将内容转换为List<Map>集合,前端参数格式为一个json数组
  3. 例: [{"type":"text","value":文本值},{"type":"image","value":图片的url路径(OSS)}],是key,value<br />的格式,所以更适合用map存储.
  4. 2. 遍历map集合如果类型为image替换前缀,存入集合,用流的方式操作集合,更为方便
  1. List<String> collect = contentMap.stream()
  2. .filter(map -> WemediaConstants.WM_NEWS_TYPE_IMAGE.equals(map.get("type")))
  3. .map(o -> (String) o.get("value"))//忘记强转了
  4. .map(url -> url.replaceAll(webSite, ""))
  5. .collect(Collectors.toList());
  1. 5. 保存内容和素材的关联关系
  2. 1. 得到素材id集合 PS:参数 取出的图片内容,登录的用户ID
  3. 1. 根据第四步取出的图片内容和当前登录的用户ID去素材表中查询素材
  4. 1. 使用mybatis的<foreach>标签进行批量查询,提高性能
  5. 2. 判断素材id数量是否小于素材路径数量,如果小于说明有素材缺失,直接抛出异常
  6. 2. 保存素材和文章关联关系 PS:参数 素材id的集合,文章id,类型(素材为内容还是封面)
  7. insert into values (1,2,3,4), (1,2,3,4),(1,2,3,4),(1,2,3,4),(1,2,3,4),(1,2,3,4)
  8. 1. 使用mybatis的<foreach>标签进行批量插入,提高性能
  9. 6. 保存封面和素材的关联关系 saveRelativeInfoForCover_(_contentImages,wmNews,dto_)_;
  10. 1. 方法参数
  11. 1. contentImages 如果为-1自动生成封面需要从内容中获取图片路径
  12. 1. wmNews 如果自动生成需要改变wmNewstype属性(之前设置为null了) 还要修改封面images的信息
  13. 1. dto 通过dtoimages的属性判断生成图片类型 (无图,单图,多图,自动)
  14. 2. 拿到前端传递过来的封面集合
  15. 2. 判断前台封面的类型是否为自动(-1)
  16. 2. 如果是自动类型
  17. 1. 判断内容传过来的集合有几张图片
  18. 1. 无图 则为封面设置无图状态
  19. 1. 图片数量大于0小于2 则为封面设置单图状态,并将内容中的图片设置到封面
  20. 1. 图片数量大于2 则为封面设置多图状态,并将内容中的两张图片设置到封面
  21. 1. 最后将修改后的数据updatewm_news表中
  22. 5. 如果不是自动类型
  23. 1. 那么获取的是前端传过来的封面集合 是有前缀的 需要替换一下
  • 相关表: wm_news(文章表) wm_meterial(素材表) wm_news_meterial(文章素材关系表)

    1.3 自媒体文章-根据id查询

  • 实现思路: 点击修改的时候,就是根据文章id查询,跳转至编辑页面进行展示

    1.4 自媒体文章-删除

  • 实现思路:

    • 当文章状态为9(已发布)且已上架则不能删除文章,下架状态可以删除,如果是其他状态可以删除
    • 删除文章之前需要先把素材与文章的关系删除掉

      1.5 自媒体文章-上架、下架

  • 实现思路:

    • 当前已经发布(状态为9)的文章可以上架(enable = 1),也可以下架(enable = 0)
    • 在上架和下架操作的同时,需要同步app端的文章配置信息,暂时不做,后期讲到审核文章的时候再优化