添加分类显示回收站 稍后看

This commit is contained in:
WangHao
2021-04-26 22:27:52 +08:00
parent 4131d8bdca
commit 900076723f
24 changed files with 941 additions and 252 deletions

View File

@ -96,9 +96,23 @@ public class SqBookmark
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**tag名称串**/
@Column(name = "tag_name_all")
private String tagNameAll;
/**是否稍后读 0不是 1是**/
@Column(name = "see_you_later")
private Integer seeYouLater;
@Transient
private Long parentId;
/** 书签的类型 星标 稍后看 最新书签 **/
@Transient
private String type;
/** 排序的方式 **/
@Transient
private String sort;
private List<Map<String,Object>> sqTags;

View File

@ -110,4 +110,14 @@ public interface SqBookmarkMapper extends MyMapper<SqBookmark>
* 获取重复的标签
*/
List<SqBookmark> bookmarkRepetition(Long userId);
/**
* @Description: 查询 最新 稍后读 星标
*
* @param
* @return
* @author: wanghao
*
*/
List<SqBookmark> listByUserAndPolymerization(SqBookmark sqBookmark);
}

View File

@ -1,6 +1,8 @@
package com.ruoyi.bookmark.mapper;
import java.util.List;
import com.ruoyi.bookmark.domain.SqBookmark;
import com.ruoyi.bookmark.domain.SqMenu;
import com.ruoyi.common.mybatisMapper.MyMapper;
import org.apache.ibatis.annotations.Param;
@ -128,4 +130,5 @@ public interface SqMenuMapper extends MyMapper<SqMenu>
public int countByMenuUplinkSeriesAndMenu(@Param("menuUplinkSeries")String menuUplinkSeries, @Param("menuId")Long menuId);
}

View File

@ -148,4 +148,26 @@ public interface ISqBookmarkService
* 重新计算目录下的书签数量和 目录的结构
*/
public void bookmarkMenuCount(Long userId,Long menuId);
/**
* @Description: 导出书签文件html功能
*
* @param userId
* @return StringBuilder
* @Date
* @author: wanghao
*
*/
StringBuilder exportToHtml(Long userId);
/**
* @Description: 查询书签管理列表 聚合>> 星标 稍后看 最新书签
*
* @param
* @return
* @Date
* @author: wanghao
*
*/
List<SqBookmark> listByUserAndPolymerization(SqBookmark sqBookmark);
}

View File

@ -8,6 +8,9 @@ import java.util.*;
import java.util.stream.Collectors;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.ruoyi.bookmark.domain.SqBookmarkTag;
@ -29,7 +32,9 @@ import org.springframework.stereotype.Service;
import com.ruoyi.bookmark.mapper.SqBookmarkMapper;
import com.ruoyi.bookmark.domain.SqBookmark;
import com.ruoyi.bookmark.service.ISqBookmarkService;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.genid.GenId;
/**
@ -87,7 +92,9 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
@Override
public SqBookmark selectSqBookmarkById(Long bookmarkId)
{
return sqBookmarkMapper.selectSqBookmarkById(bookmarkId);
SqBookmark sqBookmark = sqBookmarkMapper.selectSqBookmarkById(bookmarkId);
sqBookmark.setSqTags(sqBookmarkTagMapper.selectSqTaListById(sqBookmark.getBookmarkId()));
return sqBookmark;
}
/**
@ -109,8 +116,11 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
* @return 结果
*/
@Override
@Transactional
public int insertSqBookmark(SqBookmark sqBookmark)
{
JSONArray objects = new JSONArray();
JSONObject json = null;
//获取官网urls
try {
sqBookmark.setUrls(ImportHtml.Urlutils(new URL(sqBookmark.getUrl())));
@ -122,16 +132,13 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
}
//转换传入的父级ID
sqBookmark.setMenuId(sqBookmark.getParentId());
int i= sqBookmarkMapper.insertSqBookmark(sqBookmark);
//给对应目录 +1 并且设置为目录
sqMenuMapper.updateCountAdd(new Long[]{sqBookmark.getMenuId()},1);
//传入的标签
List<Map<String, Object>> listmap = sqBookmark.getSqTags();
if (listmap==null||listmap.isEmpty()||listmap.size()==0){
return i;
if (listmap==null||listmap.isEmpty()||listmap.size()==0||listmap.size()>5){
return sqBookmarkMapper.insertSqBookmark(sqBookmark);
}
//给文章添加标签
@ -140,30 +147,24 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
SqBookmarkTag bookamrktag = new SqBookmarkTag();
for (Map<String, Object> map : listmap) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
//新增书签
if (Integer.parseInt(String.valueOf(map.get("tagId"))) < 0) {
Map<String, Object> tagmap = iSqTagService.addtag(String.valueOf(map.get("name")), sqBookmark.getUserid());
for (Map.Entry<String, Object> tag : tagmap.entrySet()) {
bookmarkTag.put(Long.valueOf(tagmap.get("tagId").toString()),sqBookmark.getBookmarkId());
}
}else {
//原本就有的 标签
bookmarkTag.put(Long.valueOf(map.get("tagId").toString()),sqBookmark.getBookmarkId());
json.put("name",map.get("name").toString());
json.put("tagId",map.get("tagId").toString());
objects.add(json);
}
}
}
//删除之前的标签
SqBookmarkTag sqBookmarkTag=new SqBookmarkTag();
sqBookmarkTag.setBookmarkId(sqBookmark.getBookmarkId());
sqBookmarkTagMapper.delete(sqBookmarkTag);
//给文章添加书签
for (Map.Entry<Long,Long> tag:bookmarkTag.entrySet()){
bookamrktag.setBookmarkId(tag.getValue());
bookamrktag.setTagId(tag.getKey());
sqBookmarkTagMapper.insertSqBookmarkTag(bookamrktag);
}
return i;
//TAG书签串
sqBookmark.setTagNameAll(objects.toString());
return sqBookmarkMapper.insertSqBookmark(sqBookmark);
}
/**
@ -173,19 +174,12 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
* @return 结果
*/
@Override
@Transactional
public int updateSqBookmark(SqBookmark sqBookmark) {
// //删除的书签ID
// String deletetag = "";
// //新增的书签ID
// String addtag = "";
//未修改前的信息
SqBookmark sqbm=sqBookmarkMapper.selectSqBookmarkById(sqBookmark.getBookmarkId());
//传入的标签
int i =sqBookmarkMapper.updateSqBookmark(sqBookmark);
List<Map<String, Object>> listmap = sqBookmark.getSqTags();
if (listmap==null||listmap.isEmpty()||listmap.size()==0){
return i;
}
//是否移动目录
if (!sqbm.getMenuId().toString().equals(sqBookmark.getMenuId().toString())){
@ -194,28 +188,35 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
//新目录 +1
sqMenuMapper.updateCountAdd(new Long[]{sqBookmark.getMenuId()},1);
}
List<Map<String, Object>> listmap = sqBookmark.getSqTags();
if (listmap==null||listmap.isEmpty()||listmap.size()==0||listmap.size()>5){
return sqBookmarkMapper.updateSqBookmark(sqBookmark); //修改书签信息
}
JSONArray objects = new JSONArray();
JSONObject json = null;
//给文章添加标签
HashMap<Long,Long> bookmarkTag=new HashMap<Long,Long>();
//文章添加书签
SqBookmarkTag bookamrktag = new SqBookmarkTag();
for (Map<String, Object> map : listmap) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
json = new JSONObject();
//新增书签
if (Integer.parseInt(String.valueOf(map.get("tagId"))) < 0) {
Map<String, Object> tagmap = iSqTagService.addtag(String.valueOf(map.get("name")), sqBookmark.getUserid());
for (Map.Entry<String, Object> tag : tagmap.entrySet()) {
Map<String, Object> tagmap = iSqTagService.addtag(map.get("name").toString(), sqBookmark.getUserid());
bookmarkTag.put(Long.valueOf(tagmap.get("tagId").toString()),sqBookmark.getBookmarkId());
}
json.put("name",map.get("name").toString());
json.put("tagId",map.get("tagId").toString());
objects.add(json);
}else {
//原本就有的 标签
//修改前的书签 不包含已移除的
if(!map.get("name").equals("TAGDELETE")){
json.put("name",map.get("name").toString());
json.put("tagId",map.get("tagId").toString());
objects.add(json);
bookmarkTag.put(Long.valueOf(map.get("tagId").toString()),sqBookmark.getBookmarkId());
}
}
}
}
//删除之前的标签
SqBookmarkTag sqBookmarkTag=new SqBookmarkTag();
@ -228,9 +229,10 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
bookamrktag.setTagId(tag.getKey());
sqBookmarkTagMapper.insertSqBookmarkTag(bookamrktag);
}
//标签名称串
sqBookmark.setTagNameAll(objects.toString());
return sqBookmarkMapper.updateSqBookmark(sqBookmark); //修改书签信息
return i;
}
/**
@ -418,5 +420,105 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
}
}
/**
* @Description: 导出书签文件html功能
*
* @param userId
* @return StringBuilder
* @Date
* @author: wanghao
*
*/
@Override
public StringBuilder exportToHtml(Long userId) {
SqMenu sqMenu=new SqMenu();
sqMenu.setUserId(userId);
SqBookmark sqBookmark = new SqBookmark();
sqBookmark.setUserid(userId);
//目录
List<SqMenu> menuList = sqMenuMapper.selectSqMenuList(sqMenu);
Map<Long, List<SqMenu>> mapMenu = menuList.stream().collect(Collectors.groupingBy(SqMenu::getParentId));
//书签
List<SqBookmark> bookMarkList = sqBookmarkMapper.selectSqBookmarkList(sqBookmark);
Map<Long, List<SqBookmark>> mapBookMark = bookMarkList.stream().collect(Collectors.groupingBy(SqBookmark::getMenuId));
List<SqMenu> sqMenuList = mapMenu.get(0L);
StringBuilder str = new StringBuilder();
str.append("<!DOCTYPE NETSCAPE-Bookmark-file-1>\n" +
"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">\n" +
"<TITLE>Bookmarks</TITLE>\n" +
"<H1>Bookmarks</H1>");
str.append("<DL>\n");
str.append(traverseFile_recursion(sqMenuList,str,mapBookMark,mapMenu));
str.append("</DL>\n");
return str;
}
/**
* @Description:递归书签导出功能
*
* @param * @param sqMenuList
* @param str
* @param mapBookMark
* @param mapMenu
* @return java.lang.StringBuilder
* @Date
* @author: wanghao
*
*/
public StringBuilder traverseFile_recursion (List<SqMenu> sqMenuList,StringBuilder str,Map<Long, List<SqBookmark>> mapBookMark,Map<Long, List<SqMenu>> mapMenu) {
if (sqMenuList != null && !sqMenuList.isEmpty()) {
for (SqMenu f : sqMenuList) {
str.append("<DT><H3 ADD_DATE=\"1584277207\" LAST_MODIFIED=\"0\">").append(f.getMenuName()).append("</H3>\n");
str.append("<DL>\n");
List<SqBookmark> bookmarksList = mapBookMark.get(f.getMenuId());
if (bookmarksList != null && !bookmarksList.isEmpty()) {
for (SqBookmark b : bookmarksList) {
str.append("<DT><A HREF=\""+b.getUrl()+"\" TARGET=\"_blank\">"+b.getTitle()+"</A>\n");
}
}
traverseFile_recursion(mapMenu.get(f.getMenuId()),str,mapBookMark,mapMenu);
str.append("</DL>\n");
}
}
return str;
}
/**
* @Description: 查询书签管理列表 聚合>> 星标 稍后看 最新书签
*
* @param
* @return
* @Date
* @author: wanghao
*
*/
@Override
public List<SqBookmark> listByUserAndPolymerization(SqBookmark sqBookmark) {
SqBookmark searchBookmark = new SqBookmark();
searchBookmark.setUserid(sqBookmark.getUserid());
if(sqBookmark.getType().equals(Const.RECYCLE)){
searchBookmark.setIdelete(Const.BKNOTDELETE);//删除的
}else{
searchBookmark.setIdelete(Const.BKDELETE);//未删除的
}
if (sqBookmark.getType().equals(Const.NEWEST)){//最新的
//无处理
}else if(sqBookmark.getType().equals(Const.ASTERISK)){
searchBookmark.setBookmarkStar(1);
}else if(sqBookmark.getType().equals(Const.SEEYOULATER)){//稍后看
searchBookmark.setSeeYouLater(1);
}
return sqBookmarkMapper.listByUserAndPolymerization(searchBookmark);
}
}

View File

@ -127,7 +127,7 @@ public class SqTagServiceImpl implements ISqTagService
}else {
//不存在 >>创建 返回ID
sqTagMapper.insertSqTag(sqTag);
logger.debug("传入的新标签 tagid="+sqTag.getId());
// logger.debug("传入的新标签 tagid="+sqTag.getId());
map.put("tagId",sqTag.getId());
}
return map;

View File

@ -16,22 +16,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="menuId" column="menu_id" />
<result property="zcount" column="zcount" />
<result property="bookmarkStar" column="bookmark_star" />
<result property="tagNameAll" column="tag_name_all" />
<result property="idelete" column="idelete" />
<result property="start" column="start" />
<result property="createTime" column="create_time" />
<result property="seeYouLater" column="see_you_later" />
<!-- <collection property="sqTags"-->
<!-- javaType="java.util.ArrayList"-->
<!-- ofType="java.util.Map"-->
<!-- select="com.ruoyi.bookmark.mapper.SqBookmarkTagMapper.selectSqTaListById"-->
<!-- column="bookmark_id">-->
<!-- </collection>-->
</resultMap>
<sql id="selectSqBookmarkVo">
select bookmark_id, userid, title, url, urls, description, image, Label, menu_id, zcount, IDelete, Start, create_time,bookmark_star from sq_bookmark
select bookmark_id, userid, title, url, urls, description, image, Label, menu_id, zcount, IDelete, Start, create_time,bookmark_star,tag_name_all from sq_bookmark
</sql>
<select id="selectSqBookmarkList" parameterType="SqBookmark" resultMap="SqBookmarkResult">
@ -70,6 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="zcount != null">zcount,</if>
<if test="idelete != null">idelete,</if>
<if test="start != null">start,</if>
<if test="tagNameAll != null">tag_name_all,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
@ -84,6 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="zcount != null">#{zcount},</if>
<if test="idelete != null">#{idelete},</if>
<if test="start != null">#{start},</if>
<if test="tagNameAll != null">#{tagNameAll},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
@ -102,6 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="zcount != null">zcount = #{zcount},</if>
<if test="idelete != null">idelete = #{idelete},</if>
<if test="start != null">start = #{start},</if>
<if test="tagNameAll != null">tag_name_all = #{tagNameAll},</if>
<if test="bookmarkStar != null">bookmark_star = #{bookmarkStar},</if>
<if test="createTime != null">create_time = #{createTime},</if>
</trim>
@ -173,4 +176,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</otherwise>
</choose>
</select>
<select id="listByUserAndPolymerization" parameterType="SqBookmark" resultMap="SqBookmarkResult">
<include refid="selectSqBookmarkVo"/>
<where>
<if test="userid != null "> and userid = #{userid}</if>
<if test="idelete != null "> and idelete = #{idelete}</if>
<if test="bookmarkStar != null "> and bookmark_star = #{bookmarkStar}</if>
<if test="seeYouLater != null "> and see_you_later = #{seeYouLater}</if>
order by
<choose>
<when test="sort == 0">
create_time desc
</when>
<when test="sort == 1">
create_time asc
</when>
<when test="sort == 2">
CONVERT(title USING GBK) asc
</when>
<when test="sort == 3">
CONVERT(title USING GBK) desc
</when>
<otherwise>
create_time desc
</otherwise>
</choose>
</where>
</select>
</mapper>