From 8482e7bc9b7af5000df4634a48ef5482db68c143 Mon Sep 17 00:00:00 2001
From: WangHao <43278047@qq.com>
Date: Sun, 6 Sep 2020 02:23:46 +0800
Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E4=B9=A6=E7=AD=BE=E6=A0=87?=
 =?UTF-8?q?=E7=AD=BE,1.=E6=B7=BB=E5=8A=A0=E4=B9=A6=E7=AD=BE=E5=88=B0?=
 =?UTF-8?q?=E6=80=BB=E6=A0=87=E7=AD=BE=E5=BA=93=E9=81=BF=E5=85=8D=E9=87=8D?=
 =?UTF-8?q?=E5=A4=8D=E6=95=B0=E6=8D=AE,2.=E4=B8=AA=E4=BA=BA=E7=94=A8?=
 =?UTF-8?q?=E6=88=B7=E4=B9=A6=E7=AD=BE=E7=BB=9F=E8=AE=A1,=E5=BC=95?=
 =?UTF-8?q?=E7=94=A8=E7=BB=9F=E8=AE=A1,3.=E6=96=87=E7=AB=A0=E6=A0=87?=
 =?UTF-8?q?=E7=AD=BE=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ruoyi-ui/src/views/bookmark/content/index.vue | 119 ++++++++++++++-
 .../ruoyi/bookmark/domain/SqBookmarkTag.java  |  10 ++
 .../com/ruoyi/bookmark/domain/SqMenu.java     |   9 +-
 .../java/com/ruoyi/bookmark/domain/SqTag.java |  15 +-
 .../com/ruoyi/bookmark/domain/SqUserTag.java  |  44 ++++--
 .../bookmark/mapper/SqBookmarkTagMapper.java  |   4 +-
 .../ruoyi/bookmark/mapper/SqTagMapper.java    |   5 +-
 .../bookmark/mapper/SqUserTagMapper.java      |  24 +++-
 .../service/ISqBookmarkTagService.java        |  25 ++--
 .../bookmark/service/ISqUserTagService.java   |  21 +++
 .../service/impl/SqBookmarkServiceImpl.java   | 136 ++++++++++++++++++
 .../impl/SqBookmarkTagServiceImpl.java        |  31 ++--
 .../service/impl/SqUserTagServiceImpl.java    |  29 ++++
 .../mapper/bookmark/SqBookmarkTagMapper.xml   |   1 +
 .../resources/mapper/bookmark/SqTagMapper.xml |   6 +-
 .../mapper/bookmark/SqUserTagMapper.xml       |  11 ++
 16 files changed, 448 insertions(+), 42 deletions(-)

diff --git a/ruoyi-ui/src/views/bookmark/content/index.vue b/ruoyi-ui/src/views/bookmark/content/index.vue
index 9dc5c4c8c..c0bc239b0 100644
--- a/ruoyi-ui/src/views/bookmark/content/index.vue
+++ b/ruoyi-ui/src/views/bookmark/content/index.vue
@@ -121,9 +121,34 @@
                       :autosize="{minRows: 3, maxRows:4}" :style="{width: '100%'}"></el-input>
           </el-form-item>
 
-          <el-form-item label="书签标签" prop="label">
-            <el-input v-model="form.label" placeholder="请输入标签" />
-          </el-form-item>
+
+         <el-form-item label="书签标签:" prop="label">
+          <el-tag
+            class="bookmarktag"
+            v-for="tag in form.sqTags"
+            :key="tag.tagId"
+            closable
+            type="success"
+            :disable-transitions="false"
+             @close="taghandleClose(tag.tagId)"
+            v-if="tag.name!='TAGDELETE'"
+          >
+            {{tag.name}}
+          </el-tag>
+           <el-input
+             class="input-new-tag"
+             v-if="inputVisible"
+             v-model="inputValue"
+             ref="saveTagInput"
+             size="small"
+             @keyup.enter.native="handleInputConfirm"
+             @blur="handleInputConfirm"
+           >
+           </el-input>
+           <el-button v-else class="button-new-tag" size="small" @click="showInput">+ New Tag</el-button>
+
+ </el-form-item>
+
           <el-form-item label="所属目录" prop="menuId">
             <el-input v-model="form.menuId" placeholder="请选择上级目录" />
           </el-form-item>
@@ -183,14 +208,19 @@
                 zcount: undefined,
                 idelete: undefined,
                 start: undefined,
+                sqTags:[]
               },
+              dynamicTags: ['标签一', '标签二', '标签三'],
+              inputVisible: false, //标签
+              inputValue: '', //标签
               bookmarkList:[],
               urltext:'?from=yunshuqian.com',//网址域名起推广作用
               // 表单参数
               form: {},
               // 表单校验
               rules: {
-              }
+              },
+              tagcount:0,
             }
         },
      filters: {
@@ -228,6 +258,57 @@
 
     },
     methods: {
+
+
+
+    /**书签编辑设置的 标签开始**/
+      taghandleClose(tag) {
+//1. 首先我们要得到这个对象
+      var tina = this.form.sqTags.filter((p) => {
+        return p.tagId == tag;
+      });
+//2. 其次得到这个对象在数组中对应的索引
+      var index = this.form.sqTags.indexOf(tina[0]);
+//3. 如果存在则将其删除,index > -1 代表存在
+//       index > -1 && this.form.sqTags.splice(index, 1);
+      if (index > -1){
+        if (this.form.sqTags[index].tagId<0){
+        this.form.sqTags.splice(index, 1);
+        }
+        this.form.sqTags[index].name="TAGDELETE";
+      }
+      console.log(this.form.sqTags);
+      },
+      showInput() {
+        this.inputVisible = true;
+        this.$nextTick(_ => {
+          this.$refs.saveTagInput.$refs.input.focus();
+        });
+      },
+
+      handleInputConfirm() {
+        let inputValue = this.inputValue;
+        if (inputValue) {
+          this.tagcount=this.tagcount-1;
+          //添加
+         var updatetag ={name: inputValue, bookmarkId: this.form.bookmarkId,tagId:this.tagcount};
+
+          this.form.sqTags.push(updatetag);
+        }
+        this.inputVisible = false;
+        this.inputValue = '';
+        console.log(this.form.sqTags);
+      },
+
+
+    /**书签编辑设置的 标签结束**/
+
+
+
+
+
+
+
       /** 修改按钮操作 */
       handleUpdate(bookmarkId) {
         this.reset();
@@ -360,6 +441,33 @@
 
 
 <style>
+
+
+/**编辑标签 开始**/
+  .el-tag + .el-tag {
+    margin-left: 10px;
+  }
+  .button-new-tag {
+    margin-left: 10px;
+    height: 32px;
+    line-height: 30px;
+    padding-top: 0;
+    padding-bottom: 0;
+  }
+  .input-new-tag {
+    width: 90px;
+    margin-left: 10px;
+    vertical-align: bottom;
+  }
+
+/**编辑标签 结束**/
+
+
+
+
+
+
+
   .filler-tag span{
     font-size: 12px;
     margin-left: 5px;
@@ -428,6 +536,9 @@
     align-content: center;
 
   }
+  .bookmarktag{
+    margin-right: 5px;
+  }
 
 
 </style>
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqBookmarkTag.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqBookmarkTag.java
index 5e671b353..8504a4ac5 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqBookmarkTag.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqBookmarkTag.java
@@ -5,25 +5,35 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
 
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
 /**
  * 书签标签管理对象 sq_bookmark_tag
  *
  * @author ruoyi
  * @date 2020-09-04
  */
+@Table(name="sq_bookmark_tag")
 public class SqBookmarkTag
 {
     private static final long serialVersionUID = 1L;
 
     /** ID */
+    @Id
+    @GeneratedValue(generator = "JDBC")//返回自增长主键
     private Long id;
 
     /** 书签ID */
     @Excel(name = "书签ID")
+    @Column(name = "bookmark_id")
     private Long bookmarkId;
 
     /** 标签ID */
     @Excel(name = "标签ID")
+    @Column(name = "tag_id")
     private Long tagId;
 
     public void setId(Long id)
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqMenu.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqMenu.java
index 503d827a7..3f1f5d39a 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqMenu.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqMenu.java
@@ -6,8 +6,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.TreeEntity;
 
-import javax.persistence.Column;
-import javax.persistence.Transient;
+import javax.persistence.*;
 import java.util.Date;
 
 /**
@@ -16,11 +15,13 @@ import java.util.Date;
  * @author wanghao
  * @date 2020-08-06
  */
+@Table(name="sq_menu")
 public class SqMenu
 {
     private static final long serialVersionUID = 1L;
-
-    /** 书签菜单ID */
+    /** ID */
+    @Id
+    @GeneratedValue(generator = "JDBC")//返回自增长主键
     @Column(name = "menu_id")
     private Long menuId;
 
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqTag.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqTag.java
index 10df01c13..43ded1b7c 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqTag.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqTag.java
@@ -6,6 +6,10 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
 
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
 import java.util.Date;
 
 /**
@@ -14,39 +18,48 @@ import java.util.Date;
  * @author ruoyi
  * @date 2020-09-05
  */
+@Table(name="sq_tag")
 public class SqTag
 {
     private static final long serialVersionUID = 1L;
-
     /** 书签标签id */
+    @Id
+    @GeneratedValue(generator = "JDBC")//此处加上注解
     private Long id;
 
     /** 标签名字 */
     @Excel(name = "标签名字")
+    @Column(name = "name")
     private String name;
 
     /** 引用数量 */
     @Excel(name = "引用数量")
+    @Column(name = "icount")
     private Integer icount;
 
     /** 谁增加的该标签 */
     @Excel(name = "谁增加的该标签")
+    @Column(name = "user_Id")
     private Long userId;
 
     /** S系统标签,P书签标签,B便签书签 */
     @Excel(name = "S系统标签,P书签标签,B便签书签")
+    @Column(name = "tag_type")
     private String tagType;
 
     /** 链接 */
     @Excel(name = "链接")
+    @Column(name = "url")
     private String url;
 
     /** 状态 */
     @Excel(name = "状态")
+    @Column(name = "status")
     private Integer status;
 
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Column(name = "create_time")
     private Date createTime;
 
     public void setId(Long id)
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqUserTag.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqUserTag.java
index 7aa68090c..20efc6585 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqUserTag.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/domain/SqUserTag.java
@@ -5,77 +5,89 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
 
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
 /**
  * 标签管理对象 sq_user_tag
- * 
+ *
  * @author wang
  * @date 2020-09-04
  */
+@Table(name="sq_user_tag")
 public class SqUserTag extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
     /** ID */
+    @Id
+    @GeneratedValue(generator = "JDBC")//此处加上注解
     private Long id;
 
     /** 用户ID */
     @Excel(name = "用户ID")
+    @Column(name = "user_id")
     private Long userId;
 
     /** 书签ID */
     @Excel(name = "书签ID")
+    @Column(name = "tag_id")
     private Long tagId;
 
     /** 书签引用的数量 */
     @Excel(name = "书签引用的数量")
+    @Column(name = "icount")
     private Integer icount;
 
     /** 书签排序 */
     @Excel(name = "书签排序")
+    @Column(name = "iorder")
     private Integer iorder;
 
-    public void setId(Long id) 
+    public void setId(Long id)
     {
         this.id = id;
     }
 
-    public Long getId() 
+    public Long getId()
     {
         return id;
     }
-    public void setUserId(Long userId) 
+    public void setUserId(Long userId)
     {
         this.userId = userId;
     }
 
-    public Long getUserId() 
+    public Long getUserId()
     {
         return userId;
     }
-    public void setTagId(Long tagId) 
+    public void setTagId(Long tagId)
     {
         this.tagId = tagId;
     }
 
-    public Long getTagId() 
+    public Long getTagId()
     {
         return tagId;
     }
-    public void setIcount(Integer icount) 
+    public void setIcount(Integer icount)
     {
         this.icount = icount;
     }
 
-    public Integer getIcount() 
+    public Integer getIcount()
     {
         return icount;
     }
-    public void setIorder(Integer iorder) 
+    public void setIorder(Integer iorder)
     {
         this.iorder = iorder;
     }
 
-    public Integer getIorder() 
+    public Integer getIorder()
     {
         return iorder;
     }
@@ -90,4 +102,14 @@ public class SqUserTag extends BaseEntity
             .append("iorder", getIorder())
             .toString();
     }
+    public SqUserTag(){
+
+    }
+    public SqUserTag(Long userId, Long tagId){
+        this.userId=userId;
+        this.tagId = tagId;
+        this.icount=1;
+        this.iorder=1;
+    }
+
 }
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqBookmarkTagMapper.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqBookmarkTagMapper.java
index 4b821417e..000fb94d8 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqBookmarkTagMapper.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqBookmarkTagMapper.java
@@ -3,8 +3,10 @@ package com.ruoyi.bookmark.mapper;
 import java.util.List;
 import java.util.Map;
 
+import com.ruoyi.bookmark.domain.SqBookmark;
 import com.ruoyi.bookmark.domain.SqBookmarkTag;
 import com.ruoyi.bookmark.domain.SqTag;
+import com.ruoyi.common.mybatisMapper.MyMapper;
 
 /**
  * 书签标签管理Mapper接口
@@ -12,7 +14,7 @@ import com.ruoyi.bookmark.domain.SqTag;
  * @author ruoyi
  * @date 2020-09-04
  */
-public interface SqBookmarkTagMapper
+public interface SqBookmarkTagMapper extends MyMapper<SqBookmarkTag>
 {
 
     /**
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqTagMapper.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqTagMapper.java
index 4a5d648b2..05605b96c 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqTagMapper.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqTagMapper.java
@@ -1,7 +1,10 @@
 package com.ruoyi.bookmark.mapper;
 
 import java.util.List;
+
+import com.ruoyi.bookmark.domain.SqBookmarkTag;
 import com.ruoyi.bookmark.domain.SqTag;
+import com.ruoyi.common.mybatisMapper.MyMapper;
 
 /**
  * 书签_标签Mapper接口
@@ -9,7 +12,7 @@ import com.ruoyi.bookmark.domain.SqTag;
  * @author ruoyi
  * @date 2020-09-04
  */
-public interface SqTagMapper
+public interface SqTagMapper extends MyMapper<SqTag>
 {
 
 
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqUserTagMapper.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqUserTagMapper.java
index e8c4ff05d..9055937f4 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqUserTagMapper.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/mapper/SqUserTagMapper.java
@@ -3,7 +3,10 @@ package com.ruoyi.bookmark.mapper;
 import java.util.List;
 import java.util.Map;
 
+import com.ruoyi.bookmark.domain.SqTag;
 import com.ruoyi.bookmark.domain.SqUserTag;
+import com.ruoyi.common.mybatisMapper.MyMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 标签管理Mapper接口
@@ -11,9 +14,28 @@ import com.ruoyi.bookmark.domain.SqUserTag;
  * @author wang
  * @date 2020-09-04
  */
-public interface SqUserTagMapper
+public interface SqUserTagMapper  extends MyMapper<SqUserTag>
 {
 
+    /**
+     * 批量减少用戶 标签引用的 数量 -1
+     *
+     * @param tags 标签串
+     * @param userId 用户ID
+     * @return 结果
+     */
+    public int updateCountReduce(@Param("tags")Long[] tags, @Param("userId")Long userId);
+
+    /**
+     * 批量添加 用戶 标签引用的 数量 +1
+     *
+     * @param tags 标签串
+     * @param userId 用户ID
+     * @return 结果
+     */
+    public int updateCountAdd(@Param("tags")Long[] tags, @Param("userId")Long userId);
+
+
 
     /**
      *通过用户userID查用户的所有标签
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqBookmarkTagService.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqBookmarkTagService.java
index 673094f5b..a7c42231f 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqBookmarkTagService.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqBookmarkTagService.java
@@ -1,19 +1,28 @@
 package com.ruoyi.bookmark.service;
 
 import java.util.List;
+import java.util.Map;
+
 import com.ruoyi.bookmark.domain.SqBookmarkTag;
 
 /**
  * 书签标签管理Service接口
- * 
+ *
  * @author ruoyi
  * @date 2020-09-04
  */
-public interface ISqBookmarkTagService 
+public interface ISqBookmarkTagService
 {
+    /**
+     * 查询该篇文章的 所有书签
+     *
+     * @param
+     * @return 书签_标签
+     */
+    public List<Map<String,Object>> selectSqTaListById(Long bookmarkId);
     /**
      * 查询书签标签管理
-     * 
+     *
      * @param id 书签标签管理ID
      * @return 书签标签管理
      */
@@ -21,7 +30,7 @@ public interface ISqBookmarkTagService
 
     /**
      * 查询书签标签管理列表
-     * 
+     *
      * @param sqBookmarkTag 书签标签管理
      * @return 书签标签管理集合
      */
@@ -29,7 +38,7 @@ public interface ISqBookmarkTagService
 
     /**
      * 新增书签标签管理
-     * 
+     *
      * @param sqBookmarkTag 书签标签管理
      * @return 结果
      */
@@ -37,7 +46,7 @@ public interface ISqBookmarkTagService
 
     /**
      * 修改书签标签管理
-     * 
+     *
      * @param sqBookmarkTag 书签标签管理
      * @return 结果
      */
@@ -45,7 +54,7 @@ public interface ISqBookmarkTagService
 
     /**
      * 批量删除书签标签管理
-     * 
+     *
      * @param ids 需要删除的书签标签管理ID
      * @return 结果
      */
@@ -53,7 +62,7 @@ public interface ISqBookmarkTagService
 
     /**
      * 删除书签标签管理信息
-     * 
+     *
      * @param id 书签标签管理ID
      * @return 结果
      */
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqUserTagService.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqUserTagService.java
index c7dc45242..d8e40ef6e 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqUserTagService.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/ISqUserTagService.java
@@ -15,6 +15,27 @@ public interface ISqUserTagService
 {
 
 
+    /**
+     * 批量减少用戶 标签引用的 数量 -1
+     *
+     * @param tags 标签串
+     * @param userId 用户ID
+     * @return 结果
+     */
+    public int updateCountReduce(Long[] tags,Long userId);
+
+    /**
+     * 批量添加 用戶 标签引用的 数量 +1
+     *
+     * @param tags 标签串
+     * @param userId 用户ID
+     * @return 结果
+     */
+    public int updateCountAdd(Long[] tags,Long userId);
+
+
+
+
     /**
      *通过用户userID查用户的所有标签
      *
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkServiceImpl.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkServiceImpl.java
index 168fe1707..036c98f4b 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkServiceImpl.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkServiceImpl.java
@@ -1,14 +1,32 @@
 package com.ruoyi.bookmark.service.impl;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+
+import cn.hutool.core.date.DateUtil;
+import com.ruoyi.bookmark.domain.SqBookmarkTag;
+import com.ruoyi.bookmark.domain.SqTag;
+import com.ruoyi.bookmark.domain.SqUserTag;
+import com.ruoyi.bookmark.mapper.SqBookmarkTagMapper;
+import com.ruoyi.bookmark.mapper.SqTagMapper;
+import com.ruoyi.bookmark.mapper.SqUserTagMapper;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.DateUtils;
 import com.sun.org.apache.bcel.internal.generic.NEW;
 import org.apache.ibatis.annotations.Param;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.bookmark.mapper.SqBookmarkMapper;
 import com.ruoyi.bookmark.domain.SqBookmark;
 import com.ruoyi.bookmark.service.ISqBookmarkService;
+import sun.dc.pr.PRError;
+
+import javax.print.DocFlavor;
 
 /**
  * 书签管理Service业务层处理
@@ -19,9 +37,19 @@ import com.ruoyi.bookmark.service.ISqBookmarkService;
 @Service
 public class SqBookmarkServiceImpl implements ISqBookmarkService
 {
+    public static Logger logger =  LoggerFactory.getLogger(SqBookmarkServiceImpl.class);
     @Autowired
     private SqBookmarkMapper sqBookmarkMapper;
 
+    @Autowired
+    private SqBookmarkTagMapper sqBookmarkTagMapper;
+
+    @Autowired
+    private SqTagMapper sqTagMapper;
+
+    @Autowired
+    private SqUserTagMapper sqUserTagMapper;
+
     @Override
     public List<SqBookmark> selectByID(Long userID) {
 
@@ -86,6 +114,114 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
     @Override
     public int updateSqBookmark(SqBookmark sqBookmark)
     {
+        //删除书签 现在的标签
+        SqBookmarkTag sqBookmarkTag=new SqBookmarkTag();
+        sqBookmarkTag.setBookmarkId(sqBookmark.getBookmarkId());
+        sqBookmarkTagMapper.delete(sqBookmarkTag);
+        //删除的书签ID
+        String deletetag="";
+        //新增的书签ID
+        String addtag="";
+        //传入的标签
+        List<Map<String,Object>> listmap=sqBookmark.getSqTags();
+        //给文章添加标签
+        Long[] tags= new Long[listmap.size()];
+
+        //文章添加书签
+        SqBookmarkTag bookamrktag=new SqBookmarkTag();
+        int i=0;
+        for (Map<String,Object> map:listmap) {
+            for (Map.Entry<String, Object> entry : map.entrySet()){
+
+                if(Integer.parseInt(String.valueOf(map.get("tagId")))<0){
+                   //创建新的标签 返回id给map    并且添加用户的个人书签记录
+                    //1.新增标签
+                        //1.1查询书签是否存在
+                        SqTag sqTag=new SqTag();
+                        SqUserTag sqUserTag =new SqUserTag();
+                        sqTag.setName(String.valueOf(map.get("name")));
+                        List<SqTag> taglist=sqTagMapper.selectSqTagList(sqTag);
+                        //存在返回ID
+                        if (taglist!=null&&!taglist.isEmpty()){
+                            map.put("tagId",taglist.get(0).getId());
+                            logger.debug("传入的新标签 tagid="+taglist.get(0).getId());
+                            //添加到用戶个人书签里面去
+                            //1.用户是否已经有这个书签记录了
+                            sqUserTag.setUserId(sqBookmark.getUserid());
+                            sqUserTag.setTagId(taglist.get(0).getId());
+
+                          List<SqUserTag> sqUserTags = sqUserTagMapper.selectSqUserTagList(sqUserTag);
+
+                          if (sqUserTags!=null&&!sqUserTags.isEmpty()){
+                              addtag +=sqUserTags.get(0).getTagId().toString()+",";
+                          }else {
+                              sqUserTag.setIcount(1);
+                              sqUserTag.setIorder(1);
+                              sqUserTagMapper.insertSqUserTag(sqUserTag);
+                          }
+
+                        }else {
+                            //不存在 >>创建 返回ID
+                            sqTag.setUserId(sqBookmark.getUserid());
+                            sqTag.setTagType("P");
+                            sqTag.setIcount(1);
+                            sqTag.setStatus(0);
+                            try {
+                                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
+                                Date dateStart = df.parse(df.format(new Date()));
+                                sqTag.setCreateTime(dateStart);
+                            } catch (ParseException e) {
+                                e.printStackTrace();
+                            }
+
+                            int tagid=sqTagMapper.insertUseGeneratedKeys(sqTag);
+                            logger.debug("传入的新标签 tagid="+sqTag.getId());
+                            map.put("tagId",sqTag.getId());
+                            //添加到用戶个人书签里面去
+                            sqUserTag.setUserId(sqBookmark.getUserid());
+                            sqUserTag.setTagId(Long.valueOf(sqTag.getId()));
+                            sqUserTag.setIcount(1);
+                            sqUserTag.setIorder(1);
+                            sqUserTagMapper.insertSqUserTag(sqUserTag);
+                        }
+
+                }
+                if (!String.valueOf(map.get("name")).equals("TAGDELETE")){
+                    //给文章添加书签
+                    bookamrktag.setBookmarkId(sqBookmark.getBookmarkId());
+                    bookamrktag.setTagId(Long.valueOf(map.get("tagId").toString()));
+                    sqBookmarkTagMapper.insertSqBookmarkTag(bookamrktag);
+                }else{
+                    deletetag += map.get("tagId").toString()+",";
+                }
+                break;
+            }
+        }
+
+        //个人标签引用数量 批量-1
+       String[] tagreduce=deletetag.split(",");
+
+        if (tagreduce!=null&&tagreduce.length>0){
+        Long[] num = new Long[tagreduce.length];
+        for (int idx = 0; idx < tagreduce.length; idx++) {
+            if(!tagreduce[idx].equals("")&&tagreduce[idx]!=null){
+            num[idx] = Long.parseLong(tagreduce[idx]);
+            }
+        }
+        sqUserTagMapper.updateCountReduce(num,sqBookmark.getUserid());
+        }
+
+        //个人标签引用数量 批量+1
+        String[] tagadd=addtag.split(",");
+        if (tagadd!=null&&tagadd.length>0) {
+            Long[] add = new Long[tagadd.length];
+            for (int idx = 0; idx < tagadd.length; idx++) {
+                if(!tagadd[idx].equals("")&&tagadd[idx]!=null) {
+                    add[idx] = Long.parseLong(tagadd[idx]);
+                }
+            }
+            sqUserTagMapper.updateCountAdd(add, sqBookmark.getUserid());
+        }
         return sqBookmarkMapper.updateSqBookmark(sqBookmark);
     }
 
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkTagServiceImpl.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkTagServiceImpl.java
index d593ec256..88a2d2524 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkTagServiceImpl.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqBookmarkTagServiceImpl.java
@@ -1,6 +1,8 @@
 package com.ruoyi.bookmark.service.impl;
 
 import java.util.List;
+import java.util.Map;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.bookmark.mapper.SqBookmarkTagMapper;
@@ -9,19 +11,32 @@ import com.ruoyi.bookmark.service.ISqBookmarkTagService;
 
 /**
  * 书签标签管理Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2020-09-04
  */
 @Service
-public class SqBookmarkTagServiceImpl implements ISqBookmarkTagService 
+public class SqBookmarkTagServiceImpl implements ISqBookmarkTagService
 {
+
+
+
     @Autowired
     private SqBookmarkTagMapper sqBookmarkTagMapper;
 
+    /**
+     * 查询该篇文章的 所有书签
+     *
+     * @param
+     * @return 书签_标签
+     */
+    @Override
+    public List<Map<String,Object>> selectSqTaListById(Long bookmarkId){
+        return sqBookmarkTagMapper.selectSqTaListById(bookmarkId);
+    }
     /**
      * 查询书签标签管理
-     * 
+     *
      * @param id 书签标签管理ID
      * @return 书签标签管理
      */
@@ -33,7 +48,7 @@ public class SqBookmarkTagServiceImpl implements ISqBookmarkTagService
 
     /**
      * 查询书签标签管理列表
-     * 
+     *
      * @param sqBookmarkTag 书签标签管理
      * @return 书签标签管理
      */
@@ -45,7 +60,7 @@ public class SqBookmarkTagServiceImpl implements ISqBookmarkTagService
 
     /**
      * 新增书签标签管理
-     * 
+     *
      * @param sqBookmarkTag 书签标签管理
      * @return 结果
      */
@@ -57,7 +72,7 @@ public class SqBookmarkTagServiceImpl implements ISqBookmarkTagService
 
     /**
      * 修改书签标签管理
-     * 
+     *
      * @param sqBookmarkTag 书签标签管理
      * @return 结果
      */
@@ -69,7 +84,7 @@ public class SqBookmarkTagServiceImpl implements ISqBookmarkTagService
 
     /**
      * 批量删除书签标签管理
-     * 
+     *
      * @param ids 需要删除的书签标签管理ID
      * @return 结果
      */
@@ -81,7 +96,7 @@ public class SqBookmarkTagServiceImpl implements ISqBookmarkTagService
 
     /**
      * 删除书签标签管理信息
-     * 
+     *
      * @param id 书签标签管理ID
      * @return 结果
      */
diff --git a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqUserTagServiceImpl.java b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqUserTagServiceImpl.java
index 7a1ea190b..5783cbcb2 100644
--- a/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqUserTagServiceImpl.java
+++ b/ruoyi-yunbookmark/src/main/java/com/ruoyi/bookmark/service/impl/SqUserTagServiceImpl.java
@@ -22,6 +22,35 @@ public class SqUserTagServiceImpl implements ISqUserTagService
     private SqUserTagMapper sqUserTagMapper;
 
 
+    /**
+     * 批量减少用戶 标签引用的 数量 -1
+     *
+     * @param tags 标签串
+     * @param userId 用户ID
+     * @return 结果
+     */
+    @Override
+    public int updateCountReduce(Long[] tags,Long userId){
+        return sqUserTagMapper.updateCountReduce(tags,userId);
+    }
+
+    /**
+     * 批量添加 用戶 标签引用的 数量 +1
+     *
+     * @param tags 标签串
+     * @param userId 用户ID
+     * @return 结果
+     */
+    @Override
+    public int updateCountAdd(Long[] tags,Long userId){
+        return sqUserTagMapper.updateCountAdd(tags,userId);
+    }
+
+
+
+
+
+
     /**
      *通过用户userID查用户的所有标签
      *
diff --git a/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqBookmarkTagMapper.xml b/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqBookmarkTagMapper.xml
index 010347691..17457ca94 100644
--- a/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqBookmarkTagMapper.xml
+++ b/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqBookmarkTagMapper.xml
@@ -61,4 +61,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
+
 </mapper>
diff --git a/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqTagMapper.xml b/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqTagMapper.xml
index 9183e4f54..5f74974af 100644
--- a/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqTagMapper.xml
+++ b/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqTagMapper.xml
@@ -22,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectSqTagList" parameterType="SqTag" resultMap="SqTagResult">
         <include refid="selectSqTagVo"/>
         <where>
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="name != null  and name != ''"> and name =  #{name}</if>
             <if test="icount != null "> and icount = #{icount}</if>
             <if test="userId != null "> and user_Id = #{userId}</if>
             <if test="tagType != null  and tagType != ''"> and tag_type = #{tagType}</if>
@@ -45,7 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="tagType != null">tag_type,</if>
             <if test="url != null">url,</if>
             <if test="status != null">status,</if>
-            <if test="createTime != null">create_time,</if>
+            create_time
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="name != null">#{name},</if>
@@ -54,7 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="tagType != null">#{tagType},</if>
             <if test="url != null">#{url},</if>
             <if test="status != null">#{status},</if>
-            <if test="createTime != null">#{createTime},</if>
+            now()
          </trim>
     </insert>
 
diff --git a/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqUserTagMapper.xml b/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqUserTagMapper.xml
index 456b507bd..4aebcd647 100644
--- a/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqUserTagMapper.xml
+++ b/ruoyi-yunbookmark/src/main/resources/mapper/bookmark/SqUserTagMapper.xml
@@ -81,7 +81,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     ORDER BY u.iorder
     </select>
 
+    <update id="updateCountReduce" >
+        <foreach item="tagId" collection="tags" separator=";" >
+            update sq_user_tag set icount=icount-1 WHERE user_id=#{userId} and tag_id = #{tagId}
+        </foreach>
+    </update>
 
 
+    <update id="updateCountAdd" >
+        <foreach item="tagId" collection="tags" separator=";" >
+            update sq_user_tag set icount=icount+1 WHERE user_id=#{userId} and tag_id = #{tagId}
+        </foreach>
+    </update>
+
 
 </mapper>