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