1.自媒体文章发布模块
1.1 自媒体文章列表查询
- 实现思路 :
1. 如果有文章标题,按照文章标题模糊查询
1. 如果有频道信息,按照频道ID查询
1. 此功能需要在admin服务中添加一个查询所有频道ID的方法,以便前端去调该接口
3. 如果有文章状态,按照状态信息进行查询
3. 如果开始时间,结束时间不为空按照时间区间查询
3. 按照登录用户ID去查询
3. 按照创建时间降序
3. 分页查询,返回结果设置host 地址 为图片访问前缀
3. 整体来看就是前端会传很多参数,这些参数可以传,可以不传所以sql查询加条件就好了
-
1.2 自媒体文章-发布、修改、保存草稿
所用亮点技术: stream流 mybatis的
标签进行批量插入 - 实现思路:
1. 校验参数 封装WmNews对象 1. 传过来的images是一个字符集合,需要将该集合的每个元素去掉前缀,并用逗号隔开,最后返回一个字符串
2. 保存或者修改 根据id来判断 若没有id则保存,若有id证明已经保存过文章,就去修改
1. id不为空首先删除素材与文章的关系(素材文章关系表)再修改文章
3. 保存 文章和素材 的关联关系
4. 抽取文章内容中所引用的图片路径集合
1. 先将内容转换为List<Map>集合,前端参数格式为一个json数组
例: [{"type":"text","value":文本值},{"type":"image","value":图片的url路径(OSS)}],是key,value<br />的格式,所以更适合用map存储.
2. 遍历map集合如果类型为image替换前缀,存入集合,用流的方式操作集合,更为方便
List<String> collect = contentMap.stream()
.filter(map -> WemediaConstants.WM_NEWS_TYPE_IMAGE.equals(map.get("type")))
.map(o -> (String) o.get("value"))//忘记强转了
.map(url -> url.replaceAll(webSite, ""))
.collect(Collectors.toList());
5. 保存内容和素材的关联关系
1. 得到素材id集合 PS:参数 取出的图片内容,登录的用户ID
1. 根据第四步取出的图片内容和当前登录的用户ID去素材表中查询素材
1. 使用mybatis的<foreach>标签进行批量查询,提高性能
2. 判断素材id数量是否小于素材路径数量,如果小于说明有素材缺失,直接抛出异常
2. 保存素材和文章关联关系 PS:参数 素材id的集合,文章id,类型(素材为内容还是封面)
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)
1. 使用mybatis的<foreach>标签进行批量插入,提高性能
6. 保存封面和素材的关联关系 saveRelativeInfoForCover_(_contentImages,wmNews,dto_)_;
1. 方法参数
1. contentImages 如果为-1自动生成封面需要从内容中获取图片路径
1. wmNews 如果自动生成需要改变wmNews的type属性(之前设置为null了) 还要修改封面images的信息
1. dto 通过dto的images的属性判断生成图片类型 (无图,单图,多图,自动)
2. 拿到前端传递过来的封面集合
2. 判断前台封面的类型是否为自动(-1)
2. 如果是自动类型
1. 判断内容传过来的集合有几张图片
1. 无图 则为封面设置无图状态
1. 图片数量大于0小于2 则为封面设置单图状态,并将内容中的图片设置到封面
1. 图片数量大于2 则为封面设置多图状态,并将内容中的两张图片设置到封面
1. 最后将修改后的数据update到wm_news表中
5. 如果不是自动类型
1. 那么获取的是前端传过来的封面集合 是有前缀的 需要替换一下