From 24c9d860ced4d058b866a9fb548a8ef1d1412c20 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期一, 06 五月 2024 18:04:10 +0800
Subject: [PATCH] 新增标签菜单添加、查询、删除、修改,学生绑定、展示、修改

---
 src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java         |   64 ++++++++++
 src/main/java/com/mindskip/xzs/service/TagService.java                  |   29 ++++
 src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserCreateVM.java   |   11 +
 src/main/java/com/mindskip/xzs/domain/vo/TagVO.java                     |   22 +++
 src/main/java/com/mindskip/xzs/controller/admin/TagController.java      |   60 ++++++++++
 src/main/resources/mapper/TagMapper.xml                                 |   35 +++++
 src/main/java/com/mindskip/xzs/controller/admin/UserController.java     |   27 +++-
 src/main/java/com/mindskip/xzs/domain/UserTag.java                      |   23 +++
 src/main/java/com/mindskip/xzs/repository/TagMapper.java                |   32 +++++
 src/main/java/com/mindskip/xzs/domain/Tag.java                          |   28 ++++
 src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java |   22 +++
 11 files changed, 344 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/TagController.java b/src/main/java/com/mindskip/xzs/controller/admin/TagController.java
new file mode 100644
index 0000000..fd9a02d
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/controller/admin/TagController.java
@@ -0,0 +1,60 @@
+package com.mindskip.xzs.controller.admin;
+
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.base.RestResponse;
+import com.mindskip.xzs.domain.Tag;
+import com.mindskip.xzs.domain.vo.TagVO;
+import com.mindskip.xzs.service.TagService;
+import lombok.Data;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author gonghl
+ * @since 2024/5/6 涓婂崍 11:45
+ */
+
+@RestController
+@RequestMapping(value = "/api/admin/tag")
+@Data
+public class TagController {
+
+    private final TagService tagService;
+
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public RestResponse<List<Tag>> pageList() {
+        List<Tag> list = tagService.list();
+        return RestResponse.ok(list);
+    }
+
+    @RequestMapping(value = "/page/list", method = RequestMethod.POST)
+    public RestResponse<PageInfo<Tag>> pageList(@RequestBody TagVO tag) {
+        PageInfo<Tag> page = tagService.tagPage(tag);
+        return RestResponse.ok(page);
+    }
+
+    @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
+    public RestResponse<Tag> select(@PathVariable Integer id) {
+        Tag tag = tagService.getById(id);
+        return RestResponse.ok(tag);
+    }
+
+    @RequestMapping(value = "/selectCount/{id}", method = RequestMethod.POST)
+    public RestResponse<List<String>> selectCount(@PathVariable Integer id) {
+        return RestResponse.ok(tagService.selectCount(id));
+    }
+
+    @RequestMapping(value = "/edit", method = RequestMethod.POST)
+    public RestResponse<Tag> update(@RequestBody Tag tag) {
+        tagService.saveOrUpdate(tag);
+        return RestResponse.ok(tag);
+    }
+
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    public RestResponse<Integer> delete(@PathVariable Integer id) {
+        tagService.removeById(id);
+        return RestResponse.ok(id);
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/UserController.java b/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
index cb8aad7..a76d70a 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
@@ -2,18 +2,12 @@
 
 import com.mindskip.xzs.base.BaseApiController;
 import com.mindskip.xzs.base.RestResponse;
-import com.mindskip.xzs.domain.Department;
-import com.mindskip.xzs.domain.UserDepartment;
+import com.mindskip.xzs.domain.*;
 import com.mindskip.xzs.domain.other.KeyValue;
-import com.mindskip.xzs.domain.User;
-import com.mindskip.xzs.domain.UserEventLog;
 import com.mindskip.xzs.domain.enums.UserStatusEnum;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.repository.UserDepartmentMapper;
-import com.mindskip.xzs.service.AuthenticationService;
-import com.mindskip.xzs.service.DepartmentService;
-import com.mindskip.xzs.service.UserEventLogService;
-import com.mindskip.xzs.service.UserService;
+import com.mindskip.xzs.service.*;
 import com.mindskip.xzs.utility.DateTimeUtil;
 import com.mindskip.xzs.utility.convert.UserClassConvert;
 import com.mindskip.xzs.utility.excel.ExcelUtils;
@@ -21,12 +15,14 @@
 import com.mindskip.xzs.utility.PageInfoHelper;
 import com.github.pagehelper.PageInfo;
 
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
@@ -42,14 +38,16 @@
     private final AuthenticationService authenticationService;
     private final DepartmentService departmentService;
     private final UserDepartmentMapper userDepartmentMapper;
+    private final TagService tagService;
 
     @Autowired
-    public UserController(UserService userService, UserEventLogService userEventLogService, AuthenticationService authenticationService, DepartmentService departmentService, UserDepartmentMapper userDepartmentMapper) {
+    public UserController(UserService userService, UserEventLogService userEventLogService, AuthenticationService authenticationService, DepartmentService departmentService, UserDepartmentMapper userDepartmentMapper, TagService tagService) {
         this.userService = userService;
         this.userEventLogService = userEventLogService;
         this.authenticationService = authenticationService;
         this.departmentService = departmentService;
         this.userDepartmentMapper = userDepartmentMapper;
+        this.tagService = tagService;
     }
 
 
@@ -69,6 +67,7 @@
                 }
             }
             e.setDeptNames(deptIds);
+            e.setTagNames(tagService.selectTagNamesByUserId(e.getId()));
             return e;
         }).collect(Collectors.toList()));
         return RestResponse.ok(page);
@@ -96,6 +95,7 @@
             deptIds = deptIds + userDepartment.getDepartmentId().toString() + ",";
         }
         userVm.setDeptIds(deptIds.equals("") ? "" : deptIds.substring(0,deptIds.length()-1));
+        userVm.setTagIds(tagService.selectTagIdsByUserId(user.getId()));
         return RestResponse.ok(userVm);
     }
 
@@ -147,6 +147,15 @@
             userDepartment.setDepartmentId(Integer.parseInt(s));
             userDepartmentMapper.insert(userDepartment);
         }
+        if (ObjectUtils.isNotEmpty(model.getTagIds())) {
+            tagService.removeUserTagByUserId(user.getId());
+            tagService.saveBatchUserTag(model.getTagIds().stream().map(
+                    tagId -> new UserTag() {{
+                        setUserId(user.getId());
+                        setTagId(tagId);
+                    }}
+            ).collect(Collectors.toList()));
+        }
         user.setDeptIds(model.getDeptIds());
         return RestResponse.ok(user);
     }
diff --git a/src/main/java/com/mindskip/xzs/domain/Tag.java b/src/main/java/com/mindskip/xzs/domain/Tag.java
new file mode 100644
index 0000000..0a42c20
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/Tag.java
@@ -0,0 +1,28 @@
+package com.mindskip.xzs.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gonghl
+ * @TableName t_tag
+ */
+@TableName(value = "t_tag")
+@Data
+public class Tag implements Serializable {
+
+    @TableId(value="id",type = IdType.AUTO)
+    private Integer id;
+
+    private String name;
+
+    @TableLogic
+    private Boolean deleted;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/UserTag.java b/src/main/java/com/mindskip/xzs/domain/UserTag.java
new file mode 100644
index 0000000..f989bfc
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/UserTag.java
@@ -0,0 +1,23 @@
+package com.mindskip.xzs.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gonghl
+ * @TableName t_tag
+ */
+@TableName(value = "t_user_tag")
+@Data
+public class UserTag implements Serializable {
+
+    private Integer id;
+
+    private Integer userId;
+
+    private Integer tagId;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/TagVO.java b/src/main/java/com/mindskip/xzs/domain/vo/TagVO.java
new file mode 100644
index 0000000..d4e5fc2
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/TagVO.java
@@ -0,0 +1,22 @@
+package com.mindskip.xzs.domain.vo;
+
+import com.mindskip.xzs.base.BasePage;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gonghl
+ * @TableName t_tag
+ */
+@Data
+public class TagVO extends BasePage implements Serializable {
+
+    private Integer id;
+
+    private String name;
+
+    private Boolean deleted;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/repository/TagMapper.java b/src/main/java/com/mindskip/xzs/repository/TagMapper.java
new file mode 100644
index 0000000..a31095b
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/repository/TagMapper.java
@@ -0,0 +1,32 @@
+package com.mindskip.xzs.repository;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mindskip.xzs.domain.Tag;
+import com.mindskip.xzs.domain.UserTag;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author gonghl
+ * @description 閽堝琛ㄣ�恡_tag(鐢ㄦ埛鏍囩)銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2024-05-06 11:19:57
+ * @Entity com.mindskip.xzs.tag.Tag
+ */
+@Mapper
+public interface TagMapper extends BaseMapper<Tag> {
+
+    void saveBatchUserTag(List<UserTag> list);
+
+    void removeUserTagByUserId(Integer id);
+
+    List<Integer> selectTagIdsByUserId(Integer id);
+
+    List<String> selectTagNamesByUserId(Integer id);
+
+    List<String> selectCountById(Integer id);
+}
+
+
+
+
diff --git a/src/main/java/com/mindskip/xzs/service/TagService.java b/src/main/java/com/mindskip/xzs/service/TagService.java
new file mode 100644
index 0000000..42a1e87
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/TagService.java
@@ -0,0 +1,29 @@
+package com.mindskip.xzs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.domain.Tag;
+import com.mindskip.xzs.domain.UserTag;
+import com.mindskip.xzs.domain.vo.TagVO;
+
+import java.util.List;
+
+/**
+ * @author gonghl
+ * @description 閽堝琛ㄣ�恡_tag(鐢ㄦ埛鏍囩)銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2024-05-06 11:19:57
+ */
+public interface TagService extends IService<Tag> {
+
+    PageInfo<Tag> tagPage(TagVO tag);
+
+    void saveBatchUserTag(List<UserTag> list);
+
+    void removeUserTagByUserId(Integer id);
+
+    List<Integer> selectTagIdsByUserId(Integer id);
+
+    List<String> selectTagNamesByUserId(Integer id);
+
+    List<String> selectCount(Integer id);
+}
diff --git a/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
new file mode 100644
index 0000000..c1f8c8b
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
@@ -0,0 +1,64 @@
+package com.mindskip.xzs.service.impl;
+
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.domain.Tag;
+import com.mindskip.xzs.domain.UserTag;
+import com.mindskip.xzs.domain.vo.TagVO;
+import com.mindskip.xzs.repository.TagMapper;
+import com.mindskip.xzs.service.TagService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author gonghl
+ * @description 閽堝琛ㄣ�恡_tag(鐢ㄦ埛鏍囩)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-05-06 11:19:57
+ */
+@Service
+public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements TagService {
+
+    @Override
+    public PageInfo<Tag> tagPage(TagVO tag) {
+        return PageHelper.startPage(tag.getPageIndex(), tag.getPageSize(), "id desc").doSelectPageInfo(() ->
+                new LambdaQueryChainWrapper<>(baseMapper)
+                        .like(StringUtils.hasText(tag.getName()), Tag::getName, tag.getName())
+                        .eq(Tag::getDeleted, false)
+                        .list()
+        );
+    }
+
+    @Override
+    public void saveBatchUserTag(List<UserTag> list) {
+        baseMapper.saveBatchUserTag(list);
+    }
+
+    @Override
+    public void removeUserTagByUserId(Integer id) {
+        baseMapper.removeUserTagByUserId(id);
+    }
+
+    @Override
+    public List<Integer> selectTagIdsByUserId(Integer id) {
+        return baseMapper.selectTagIdsByUserId(id);
+    }
+
+    @Override
+    public List<String> selectTagNamesByUserId(Integer id) {
+        return baseMapper.selectTagNamesByUserId(id);
+    }
+
+    @Override
+    public List<String> selectCount(Integer id) {
+        return baseMapper.selectCountById(id);
+    }
+}
+
+
+
+
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserCreateVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserCreateVM.java
index e934150..836f569 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserCreateVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserCreateVM.java
@@ -3,6 +3,7 @@
 
 
 import javax.validation.constraints.NotBlank;
+import java.util.List;
 
 
 public class UserCreateVM {
@@ -32,6 +33,8 @@
     private Integer userLevel;
 
     private String deptIds;
+
+    private List<Integer> tagIds;
 
     public Integer getId() {
         return id;
@@ -128,4 +131,12 @@
     public void setDeptIds(String deptIds) {
         this.deptIds = deptIds;
     }
+
+    public List<Integer> getTagIds() {
+        return tagIds;
+    }
+
+    public void setTagIds(List<Integer> tagIds) {
+        this.tagIds = tagIds;
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java
index f0a5ff7..6e8095d 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java
@@ -4,6 +4,8 @@
 import com.mindskip.xzs.utility.DateTimeUtil;
 import com.mindskip.xzs.viewmodel.BaseVM;
 
+import java.util.List;
+
 
 public class UserResponseVM extends BaseVM {
 
@@ -40,6 +42,10 @@
     private String deptIds;
 
     private String deptNames;
+
+    private List<Integer> tagIds;
+
+    private List<String> tagNames;
 
     public static UserResponseVM from(User user) {
         UserResponseVM vm = modelMapper.map(user, UserResponseVM.class);
@@ -185,4 +191,20 @@
     public void setDeptNames(String deptNames) {
         this.deptNames = deptNames;
     }
+
+    public List<Integer> getTagIds() {
+        return tagIds;
+    }
+
+    public void setTagIds(List<Integer> tagIds) {
+        this.tagIds = tagIds;
+    }
+
+    public List<String> getTagNames() {
+        return tagNames;
+    }
+
+    public void setTagNames(List<String> tagNames) {
+        this.tagNames = tagNames;
+    }
 }
diff --git a/src/main/resources/mapper/TagMapper.xml b/src/main/resources/mapper/TagMapper.xml
new file mode 100644
index 0000000..4487b0a
--- /dev/null
+++ b/src/main/resources/mapper/TagMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mindskip.xzs.repository.TagMapper">
+
+    <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.Tag">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="deleted" column="deleted" jdbcType="BIT"/>
+    </resultMap>
+
+    <insert id="saveBatchUserTag">
+        insert into t_user_tag (user_id, tag_id) values
+        <foreach collection="list" item="item" separator=",">
+            (#{item.userId},#{item.tagId})
+        </foreach>
+    </insert>
+
+    <delete id="removeUserTagByUserId">
+        delete from t_user_tag where user_id = #{id}
+    </delete>
+
+    <select id="selectTagIdsByUserId" resultType="java.lang.Integer">
+        select tag_id from t_user_tag where user_id = #{id}
+    </select>
+
+    <select id="selectTagNamesByUserId" resultType="java.lang.String">
+        select name from t_tag where deleted = 0 and id in (select tag_id from t_user_tag where user_id = #{id})
+    </select>
+    <select id="selectCountById" resultType="java.lang.String">
+        select user_name from t_user where id in (select user_id from t_user_tag where tag_id = #{id}) and deleted = 0
+    </select>
+
+</mapper>

--
Gitblit v1.8.0