diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/AdminController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/AdminController.java new file mode 100644 index 0000000..a3cfa6e --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/AdminController.java @@ -0,0 +1,69 @@ +package com.yinlihupo.enlish.service.controller; + +import com.yinlihupo.enlish.service.domain.dataobject.RoleDO; +import com.yinlihupo.enlish.service.domain.dataobject.UserDO; +import com.yinlihupo.enlish.service.model.vo.user.CreateUserReqVO; +import com.yinlihupo.enlish.service.model.vo.user.FindUserListRepVO; +import com.yinlihupo.enlish.service.model.vo.user.FindUserListRspVO; +import com.yinlihupo.enlish.service.service.RoleService; +import com.yinlihupo.enlish.service.service.UserService; +import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog; +import com.yinlihupo.framework.common.response.PageResponse; +import com.yinlihupo.framework.common.response.Response; +import jakarta.annotation.Resource; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +@RequestMapping("/admin/") +@RestController +public class AdminController { + + @Resource + private UserService userService; + @Resource + private PasswordEncoder passwordEncoder; + @Resource + private RoleService roleService; + + @PostMapping("user/list") + @ApiOperationLog(description = "查询用户列表") + public PageResponse listUser(@RequestBody FindUserListRepVO findUserListRepVO) { + Integer userTotal = userService.findUserTotal(); + if (userTotal == null || userTotal == 0) { + throw new RuntimeException("暂无用户"); + } + + Integer page = findUserListRepVO.getPage(); + Integer pageSize = findUserListRepVO.getPageSize(); + String name = findUserListRepVO.getName(); + List usersList = userService.findUsersList(page, pageSize, name.isEmpty() ? null : name); + Map userId2RoleMap = roleService.findUserId2RoleMap(usersList.stream().map(UserDO::getId).toList()); + return PageResponse.success(usersList.stream().map(userDO -> FindUserListRspVO.builder() + .id(userDO.getId()) + .name(userDO.getName()) + .phone(userDO.getPhone()) + .roleName(userId2RoleMap.get(userDO.getId()).getRoleName()) + .build()).toList(), page, userTotal, pageSize); + } + + @PostMapping("user/create") + public Response createUser(@RequestBody CreateUserReqVO createUserReqVO) { + String name = createUserReqVO.getName(); + String phone = createUserReqVO.getPhone(); + String password = createUserReqVO.getPassword(); + + userService.createUser(UserDO.builder() + .name(name) + .phone(phone) + .password(passwordEncoder.encode(password)) + .build()); + + return Response.success(); + } +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserDO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserDO.java index 0c8ae31..6e47d42 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserDO.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserDO.java @@ -22,8 +22,4 @@ public class UserDO { private String email; - private Integer status; - - private Integer isDeleted; - } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserRoleRelDO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserRoleRelDO.java index 6a43c9c..305d8b0 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserRoleRelDO.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/UserRoleRelDO.java @@ -1,7 +1,16 @@ package com.yinlihupo.enlish.service.domain.dataobject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + import java.util.Date; +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder public class UserRoleRelDO { private Long id; @@ -11,45 +20,4 @@ public class UserRoleRelDO { private Date createTime; - private Boolean isDeleted; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public Long getRoleId() { - return roleId; - } - - public void setRoleId(Long roleId) { - this.roleId = roleId; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public Boolean getIsDeleted() { - return isDeleted; - } - - public void setIsDeleted(Boolean isDeleted) { - this.isDeleted = isDeleted; - } } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/RoleDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/RoleDOMapper.java index 7cf5ae5..bbc47c3 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/RoleDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/RoleDOMapper.java @@ -1,10 +1,13 @@ package com.yinlihupo.enlish.service.domain.mapper; import com.yinlihupo.enlish.service.domain.dataobject.RoleDO; +import org.apache.ibatis.annotations.Param; import java.util.List; public interface RoleDOMapper { List selectAll(); + + List selectByIds(@Param("ids") List ids); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserDOMapper.java index 2815fe9..43e2b84 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserDOMapper.java @@ -1,6 +1,9 @@ package com.yinlihupo.enlish.service.domain.mapper; import com.yinlihupo.enlish.service.domain.dataobject.UserDO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface UserDOMapper { @@ -9,4 +12,10 @@ public interface UserDOMapper { void insert(UserDO userDO); UserDO selectById(Long id); + + List selectUserDOList(@Param("name") String name, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize); + + int selectUserTotal(); + + void createUser(UserDO userDO); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserRoleRelDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserRoleRelDOMapper.java index 60c4d6a..a97d8da 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserRoleRelDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UserRoleRelDOMapper.java @@ -1,10 +1,13 @@ package com.yinlihupo.enlish.service.domain.mapper; import com.yinlihupo.enlish.service.domain.dataobject.UserRoleRelDO; +import org.apache.ibatis.annotations.Param; import java.util.List; public interface UserRoleRelDOMapper { List selectAll(); + + List selectByUserIds(@Param("userIds") List userIds); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/CreateUserReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/CreateUserReqVO.java new file mode 100644 index 0000000..76d468f --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/CreateUserReqVO.java @@ -0,0 +1,17 @@ +package com.yinlihupo.enlish.service.model.vo.user; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class CreateUserReqVO { + + private String name; + private String phone; + private String password; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/FindUserListRepVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/FindUserListRepVO.java new file mode 100644 index 0000000..420bc49 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/FindUserListRepVO.java @@ -0,0 +1,17 @@ +package com.yinlihupo.enlish.service.model.vo.user; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class FindUserListRepVO { + + private Integer page; + private Integer pageSize; + private String name; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/FindUserListRspVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/FindUserListRspVO.java new file mode 100644 index 0000000..24858a9 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/user/FindUserListRspVO.java @@ -0,0 +1,17 @@ +package com.yinlihupo.enlish.service.model.vo.user; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class FindUserListRspVO { + private Long id; + private String name; + private String phone; + private String roleName; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/RoleService.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/RoleService.java new file mode 100644 index 0000000..6a829d8 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/RoleService.java @@ -0,0 +1,13 @@ +package com.yinlihupo.enlish.service.service; + +import com.yinlihupo.enlish.service.domain.dataobject.RoleDO; + +import java.util.List; +import java.util.Map; + +public interface RoleService { + + void pushRolePermission2Redis(); + + Map findUserId2RoleMap(List userIds); +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/UserService.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/UserService.java index 973aa0a..7bf8ecd 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/UserService.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/UserService.java @@ -2,9 +2,15 @@ package com.yinlihupo.enlish.service.service; import com.yinlihupo.enlish.service.domain.dataobject.UserDO; +import java.util.List; + public interface UserService { - void pushRolePermission2Redis(); - UserDO findUser(); + + List findUsersList(int page, int limit, String name); + + Integer findUserTotal(); + + void createUser(UserDO userDO); } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/role/RoleServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/role/RoleServiceImpl.java new file mode 100644 index 0000000..414eb58 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/role/RoleServiceImpl.java @@ -0,0 +1,63 @@ +package com.yinlihupo.enlish.service.service.role; + +import com.yinlihupo.enlish.service.constant.RoleConstants; +import com.yinlihupo.enlish.service.domain.dataobject.RoleDO; +import com.yinlihupo.enlish.service.domain.dataobject.UserRoleRelDO; +import com.yinlihupo.enlish.service.domain.mapper.RoleDOMapper; +import com.yinlihupo.enlish.service.domain.mapper.UserDOMapper; +import com.yinlihupo.enlish.service.domain.mapper.UserRoleRelDOMapper; +import com.yinlihupo.enlish.service.service.RoleService; +import com.yinlihupo.framework.common.util.JsonUtils; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class RoleServiceImpl implements RoleService { + + @Resource + private StringRedisTemplate stringRedisTemplate; + @Resource + private RoleDOMapper roleDOMapper; + @Resource + private UserRoleRelDOMapper userRoleRelDOMapper; + + + @Override + public void pushRolePermission2Redis() { + List roleDOS = roleDOMapper.selectAll(); + List roleKeys = roleDOS.stream().map(RoleDO::getRoleKey).toList(); + log.info("将角色同步到 redis 中, {}", roleKeys); + stringRedisTemplate.opsForValue().set(RoleConstants.ROLE, JsonUtils.toJsonString(roleKeys), 60 * 60 * 24); + + Map roleId2RoleDO = roleDOS.stream().collect(Collectors.toMap(RoleDO::getId, roleDO -> roleDO)); + + List userRoleRelDOS = userRoleRelDOMapper.selectAll(); + Map> userId2UserRoleRelDOs = userRoleRelDOS.stream().collect(Collectors.groupingBy(UserRoleRelDO::getUserId)); + + userId2UserRoleRelDOs.forEach((userId, userRoleRelDOs) -> { + List roleIds = userRoleRelDOs.stream().map(UserRoleRelDO::getRoleId).toList(); + List roleDOs = roleIds.stream().map(roleId2RoleDO::get).toList(); + List user2RoleKeys = roleDOs.stream().map(RoleDO::getRoleKey).toList(); + log.info("将用户 {} 的角色同步到 redis 中, {}", userId, roleKeys); + stringRedisTemplate.opsForValue().set(RoleConstants.buildUserRoleKey(userId), JsonUtils.toJsonString(user2RoleKeys), 60 * 60 * 24); + }); + } + + @Override + public Map findUserId2RoleMap(List userIds) { + List userRoleRelDOS = userRoleRelDOMapper.selectByUserIds(userIds); + Map userId2UserRoleRelDOs = userRoleRelDOS.stream().collect(Collectors.toMap(UserRoleRelDO::getUserId, userRoleRelDO -> userRoleRelDO)); + + List roleDOS = roleDOMapper.selectByIds(userRoleRelDOS.stream().map(UserRoleRelDO::getRoleId).toList()); + Map roleId2RoleDO = roleDOS.stream().collect(Collectors.toMap(RoleDO::getId, roleDO -> roleDO)); + + return userIds.stream().collect(Collectors.toMap(userId -> userId, userId -> roleId2RoleDO.get(userId2UserRoleRelDOs.get(userId).getRoleId()))); + } +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/user/UserServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/user/UserServiceImpl.java index 3bbc3f8..87d2036 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/user/UserServiceImpl.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/user/UserServiceImpl.java @@ -1,57 +1,24 @@ package com.yinlihupo.enlish.service.service.user; import cn.dev33.satoken.stp.StpUtil; -import com.yinlihupo.enlish.service.constant.RoleConstants; -import com.yinlihupo.enlish.service.domain.dataobject.RoleDO; import com.yinlihupo.enlish.service.domain.dataobject.UserDO; -import com.yinlihupo.enlish.service.domain.dataobject.UserRoleRelDO; -import com.yinlihupo.enlish.service.domain.mapper.RoleDOMapper; import com.yinlihupo.enlish.service.domain.mapper.UserDOMapper; -import com.yinlihupo.enlish.service.domain.mapper.UserRoleRelDOMapper; import com.yinlihupo.enlish.service.service.UserService; -import com.yinlihupo.framework.common.util.JsonUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; @Service @Slf4j public class UserServiceImpl implements UserService { - @Resource - private StringRedisTemplate stringRedisTemplate; - @Resource - private RoleDOMapper roleDOMapper; - @Resource - private UserRoleRelDOMapper userRoleRelDOMapper; + @Resource private UserDOMapper userDOMapper; - @Override - public void pushRolePermission2Redis() { - List roleDOS = roleDOMapper.selectAll(); - List roleKeys = roleDOS.stream().map(RoleDO::getRoleKey).toList(); - log.info("将角色同步到 redis 中, {}", roleKeys); - stringRedisTemplate.opsForValue().set(RoleConstants.ROLE, JsonUtils.toJsonString(roleKeys), 60 * 60 * 24); - Map roleId2RoleDO = roleDOS.stream().collect(Collectors.toMap(RoleDO::getId, roleDO -> roleDO)); - - List userRoleRelDOS = userRoleRelDOMapper.selectAll(); - Map> userId2UserRoleRelDOs = userRoleRelDOS.stream().collect(Collectors.groupingBy(UserRoleRelDO::getUserId)); - - userId2UserRoleRelDOs.forEach((userId, userRoleRelDOs) -> { - List roleIds = userRoleRelDOs.stream().map(UserRoleRelDO::getRoleId).toList(); - List roleDOs = roleIds.stream().map(roleId2RoleDO::get).toList(); - List user2RoleKeys = roleDOs.stream().map(RoleDO::getRoleKey).toList(); - log.info("将用户 {} 的角色同步到 redis 中, {}", userId, roleKeys); - stringRedisTemplate.opsForValue().set(RoleConstants.buildUserRoleKey(userId), JsonUtils.toJsonString(user2RoleKeys), 60 * 60 * 24); - }); - } @Override public UserDO findUser() { @@ -60,4 +27,20 @@ public class UserServiceImpl implements UserService { return userDOMapper.selectById(loginId); } + @Override + public List findUsersList(int page, int limit, String name) { + + return userDOMapper.selectUserDOList(name, (page - 1) * limit, limit); + } + + @Override + public Integer findUserTotal() { + return userDOMapper.selectUserTotal(); + } + + @Override + public void createUser(UserDO userDO) { + userDOMapper.insert(userDO); + } + } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/task/UserRoleTask.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/task/UserRoleTask.java index c2ae91b..124739d 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/task/UserRoleTask.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/task/UserRoleTask.java @@ -1,7 +1,7 @@ package com.yinlihupo.enlish.service.task; -import com.yinlihupo.enlish.service.service.UserService; +import com.yinlihupo.enlish.service.service.RoleService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; @@ -13,11 +13,11 @@ import org.springframework.stereotype.Component; public class UserRoleTask { @Resource - private UserService userService; + private RoleService roleService; @Scheduled(cron = "0 0 1 * * ?") public void PushRolePermissions2Redis() { log.info("定时任务,将系统权限推送到 redis 中"); - userService.pushRolePermission2Redis(); + roleService.pushRolePermission2Redis(); } } diff --git a/enlish-service/src/main/resources/mapper/RoleDOMapper.xml b/enlish-service/src/main/resources/mapper/RoleDOMapper.xml index 8269466..e5afa0c 100644 --- a/enlish-service/src/main/resources/mapper/RoleDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/RoleDOMapper.xml @@ -14,4 +14,11 @@ select * from role + + \ No newline at end of file diff --git a/enlish-service/src/main/resources/mapper/UserDOMapper.xml b/enlish-service/src/main/resources/mapper/UserDOMapper.xml index cda2424..33653f0 100644 --- a/enlish-service/src/main/resources/mapper/UserDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/UserDOMapper.xml @@ -8,8 +8,6 @@ - - @@ -17,18 +15,36 @@ values (#{password}, #{phone}, #{name}) + + insert into user (phone, name, password) + values (#{phone}, #{name}, #{password}) + + + + + + \ No newline at end of file diff --git a/enlish-service/src/main/resources/mapper/UserRoleRelDOMapper.xml b/enlish-service/src/main/resources/mapper/UserRoleRelDOMapper.xml index 3079ea8..dfc6269 100644 --- a/enlish-service/src/main/resources/mapper/UserRoleRelDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/UserRoleRelDOMapper.xml @@ -6,7 +6,7 @@ - + + + \ No newline at end of file diff --git a/enlish-vue/src/api/admin.js b/enlish-vue/src/api/admin.js new file mode 100644 index 0000000..f78299e --- /dev/null +++ b/enlish-vue/src/api/admin.js @@ -0,0 +1,10 @@ +import axios from "@/axios"; + +export function getUserList(data) { + return axios.post('/admin/user/list', data) +} + +export function createUser(data) { + return axios.post('/admin/user/create', data) +} + diff --git a/enlish-vue/src/pages/admid/admid.vue b/enlish-vue/src/pages/admid/admid.vue index 96b23c9..b5e14bd 100644 --- a/enlish-vue/src/pages/admid/admid.vue +++ b/enlish-vue/src/pages/admid/admid.vue @@ -6,7 +6,48 @@ - 管理学生 + +
+ + 查询 + 重置 + 新增用户 +
+ + + + + +
+ +
+
+ + + + + + + + + + + + + + +
@@ -15,5 +56,92 @@