online-exam/src/main/java/com/zhangmeng/online/exam/controller/UserController.java

229 lines
8.1 KiB
Java
Raw Normal View History

2025-03-05 09:20:22 +00:00
package com.zhangmeng.online.exam.controller;
2025-03-25 10:03:16 +00:00
import com.zhangmeng.jwt.dto.LoginUser;
2025-03-05 09:20:22 +00:00
import com.zhangmeng.online.exam.dao.PermissionDao;
import com.zhangmeng.online.exam.dao.RoleDao;
import com.zhangmeng.online.exam.dao.UserDao;
2025-03-06 09:45:50 +00:00
import com.zhangmeng.online.exam.dto.Menu;
2025-03-05 09:20:22 +00:00
import com.zhangmeng.online.exam.dto.Result;
import com.zhangmeng.online.exam.entity.*;
import com.zhangmeng.online.exam.entity.User;
2025-03-14 09:09:00 +00:00
import com.zhangmeng.online.exam.utils.PageUtils;
2025-04-17 08:57:23 +00:00
import com.zhangmeng.online.exam.utils.UserUtils;
2025-03-05 09:20:22 +00:00
import org.springframework.beans.factory.annotation.Autowired;
2025-03-14 09:09:00 +00:00
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
2025-03-25 10:03:16 +00:00
import org.springframework.security.core.context.SecurityContextHolder;
2025-03-15 09:10:13 +00:00
import org.springframework.web.bind.annotation.*;
2025-03-05 09:20:22 +00:00
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import java.util.*;
/**
* @author zm
* @date 2025/3/5 15:45
* @version: 1.0
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserDao userDao;
@Autowired
private RoleDao roleDao;
@Autowired
private PermissionDao permissionDao;
@Autowired
private EntityManager entityManager;
2025-03-15 09:10:13 +00:00
@RequestMapping("/save")
public Result save(@RequestParam @RequestBody Map<String, Object> params) {
2025-04-09 10:19:39 +00:00
String id = params.get("id").toString();
2025-03-15 09:10:13 +00:00
String username = params.get("username").toString();
String password = params.get("password").toString();
String email = params.get("email").toString();
String phone = params.get("phone").toString();
2025-04-09 10:19:39 +00:00
String status = params.get("status").toString();
String role_ids = params.get("role_ids").toString();
String[] role_id_arr = role_ids.split(",");
Set<Role> roles = new HashSet<>();
for (String role_id : role_id_arr) {
Role role = roleDao.findById(Long.parseLong(role_id)).get();
roles.add(role);
}
2025-03-15 09:10:13 +00:00
User user = new User();
2025-04-09 10:19:39 +00:00
if (id!= null && !id.isEmpty()){
user = userDao.findById(Long.parseLong(id)).get();
}
2025-03-15 09:10:13 +00:00
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user.setPhone(phone);
2025-04-09 10:19:39 +00:00
user.setRoles(roles);
switch (status) {
case "1" -> user.setStatus(User.Status.VALID);
case "0" -> user.setStatus(User.Status.DISABLED);
case "2" -> user.setStatus(User.Status.LOCKED);
}
2025-03-15 09:10:13 +00:00
userDao.save(user);
return Result.success(user.getId());
}
2025-03-06 09:45:50 +00:00
@GetMapping("/list")
2025-03-14 08:54:45 +00:00
public Result userList(Integer pageNum,Integer pageSize) {
2025-03-14 09:09:00 +00:00
Pageable pageable = PageRequest.of(PageUtils.getPageNum(pageNum), pageSize, Sort.Direction.DESC, "addTime");
Page<User> all = userDao.findAll(pageable);
List<User> list = all.getContent();
2025-03-06 09:45:50 +00:00
List<Map<String, Object>> resultList = new ArrayList<>();
for (User user : list) {
Map<String, Object> map = new HashMap<>();
map.put("id", user.getId());
map.put("username", user.getUsername());
map.put("email", user.getEmail());
map.put("phone", user.getPhone());
resultList.add(map);
}
2025-03-14 09:09:00 +00:00
return Result.success(pageNum, pageSize, all.getTotalElements(), resultList);
2025-03-06 09:45:50 +00:00
}
2025-03-15 09:10:13 +00:00
@RequestMapping("/delete")
public Result delete(@RequestParam Long id) {
userDao.deleteById(id);
return Result.success(null);
}
@GetMapping("/getUser")
public Result getUser( Long id) {
User user = userDao.findById(id).get();
Map<String, Object> map = new HashMap<>();
map.put("id", user.getId());
map.put("username", user.getUsername());
map.put("email", user.getEmail());
map.put("phone", user.getPhone());
map.put("password", user.getPassword());
2025-04-09 10:19:39 +00:00
map.put("status", user.getStatus());
Set<Role> roles = user.getRoles();
StringBuilder roleIds = new StringBuilder();
for (Role role : roles) {
roleIds.append(role.getId()).append(",");
}
2025-03-15 09:10:13 +00:00
2025-04-09 10:19:39 +00:00
map.put("role_ids", roleIds);
2025-03-15 09:10:13 +00:00
return Result.success(map);
}
2025-03-18 08:02:59 +00:00
@RequestMapping("/edit")
public Result edit(@RequestParam @RequestBody Map<String, Object> params) {
2025-03-15 09:10:13 +00:00
Long id = Long.parseLong(params.get("id").toString());
String username = params.get("username").toString();
String password = params.get("password").toString();
String email = params.get("email").toString();
String phone = params.get("phone").toString();
User user = new User();
user.setId(id);
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user.setPhone(phone);
userDao.save(user);
return Result.success(null);
}
2025-03-18 08:02:59 +00:00
@RequestMapping("/update")
public Result update(@RequestBody @RequestParam Map<String, Object> params) {
String id = params.get("id").toString();
String fieldName = params.get("fieldName").toString();
String oldValue = params.get("oldValue").toString();
String newValue = params.get("newValue").toString();
User user = userDao.findById(Long.parseLong(id)).get();
switch (fieldName) {
case "username" -> user.setUsername(newValue);
case "password" -> user.setPassword(newValue);
case "email" -> user.setEmail(newValue);
case "phone" -> user.setPhone(newValue);
}
userDao.save(user);
return Result.success(null);
}
2025-03-18 09:33:54 +00:00
//试卷
2025-03-05 09:20:22 +00:00
@GetMapping("/menu")
public Result menuList() {
2025-03-06 09:45:50 +00:00
List<Menu> list = new ArrayList<>();
2025-04-17 08:57:23 +00:00
Long currentUserId = UserUtils.getCurrentUserId();
2025-03-05 09:20:22 +00:00
2025-04-17 08:57:23 +00:00
TypedQuery<User> query = entityManager.createQuery("select obj from User obj where obj.id =:id", User.class);
query.setParameter("id", currentUserId);
2025-03-05 09:20:22 +00:00
User root = query.getResultList().get(0);
2025-03-05 09:40:17 +00:00
Set<Role> roles = root.getRoles();
for (Role role : roles) {
Set<Permission> permissions = role.getPermissions();
for (Permission permission : permissions) {
if (permission.getParent() == null) {//一级菜单
2025-03-06 09:45:50 +00:00
Menu menu = getMenu(permission);
list.add(menu);
}
}
if (!list.isEmpty()) {
for (Permission permission : permissions) {
for (Menu map : list) {
if (permission.getParent() != null && map.getId().equals(permission.getParent().getId())) {
List<Menu> children = map.getChildren();
Menu childMap = getMenu(permission);
2025-03-05 09:40:17 +00:00
children.add(childMap);
}
2025-03-06 09:45:50 +00:00
2025-03-05 09:40:17 +00:00
}
}
}
}
2025-03-05 09:20:22 +00:00
return Result.success(list);
}
2025-03-06 09:45:50 +00:00
private static Menu getMenu(Permission permission) {
Menu childMap = new Menu();
childMap.setId(permission.getId());
childMap.setName(permission.getName());
childMap.setIcon(permission.getIcon());
childMap.setUrl(permission.getUrl());
childMap.setDescription(permission.getDescription());
childMap.setSort(permission.getSort());
childMap.setChildren(new ArrayList<>());
return childMap;
}
2025-03-25 10:03:16 +00:00
@GetMapping("/getUserInfo")
public Result getUserInfo() {
LoginUser principal =(LoginUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
User user = userDao.findById(principal.getId()).get();
Map<String, Object> map = new HashMap<>();
Set<Role> roles = user.getRoles();
map.put("id", user.getId());
map.put("username", user.getUsername());
map.put("email", user.getEmail());
map.put("phone", user.getPhone());
map.put("password", user.getPassword());
map.put("type",roles.stream().findFirst().get().getType());
return Result.success(map);
}
2025-03-05 09:20:22 +00:00
}