148 lines
6.0 KiB
Java
148 lines
6.0 KiB
Java
package com.yunhai.userbase.controller.api;
|
||
|
||
import com.yunhai.platform.utils.exception.DException;
|
||
import com.yunhai.platform.utils.exception.ErrorCode;
|
||
import com.yunhai.userbase.common.annotation.OperationLog;
|
||
import com.yunhai.userbase.common.validation.ValidationGroups;
|
||
import com.yunhai.userbase.config.Config;
|
||
import com.yunhai.userbase.model.BasePageQuery;
|
||
import com.yunhai.userbase.model.BasePageResult;
|
||
import com.yunhai.userbase.model.sysuser.BatchChangeStatusRequest;
|
||
import com.yunhai.userbase.model.sysuser.BatchDeleteRequest;
|
||
import com.yunhai.userbase.model.sysuser.BatchImportResult;
|
||
import com.yunhai.userbase.model.sysuser.ChangeGroupsRequest;
|
||
import com.yunhai.userbase.model.sysuser.ChangeSortNoRequest;
|
||
import com.yunhai.userbase.model.sysuser.SysUserQuery;
|
||
import com.yunhai.userbase.model.sysuser.SysUserRequest;
|
||
import com.yunhai.userbase.model.sysuser.SysUserVo;
|
||
import com.yunhai.userbase.service.ISysUserService;
|
||
import com.yunhai.userbase.utils.PageUtils;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.validation.annotation.Validated;
|
||
import org.springframework.web.bind.annotation.*;
|
||
import org.springframework.web.multipart.MultipartFile;
|
||
|
||
import javax.servlet.http.HttpServletResponse;
|
||
import java.io.IOException;
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
/**
|
||
* @author chenx
|
||
* @date 2026/7/20 16:14
|
||
* @description 组用户管理
|
||
*/
|
||
@RestController
|
||
@RequestMapping(value = Config.API_PATH + "/sysuser/")
|
||
public class SysUserController {
|
||
|
||
@Autowired
|
||
private ISysUserService sysUserService;
|
||
|
||
@OperationLog("新增用户")
|
||
@PostMapping("Add")
|
||
public Integer add(@RequestBody @Validated(ValidationGroups.Create.class) SysUserRequest request) {
|
||
List<String> data=new ArrayList<>();
|
||
|
||
return sysUserService.add(request);
|
||
}
|
||
|
||
@OperationLog("编辑用户")
|
||
@PostMapping("Edit/{id}")
|
||
public void edit(@PathVariable Integer id, @RequestBody @Validated(ValidationGroups.Update.class) SysUserRequest request) {
|
||
sysUserService.edit(id, request);
|
||
}
|
||
|
||
/**
|
||
* 将用户从指定组中移除;若该用户无其它组关联则级联删除用户。
|
||
*/
|
||
@OperationLog("从组中删除用户")
|
||
@PostMapping("DeleteFromGroup/{userId}/{groupId}")
|
||
public void deleteFromGroup(@PathVariable Integer userId, @PathVariable Integer groupId) {
|
||
sysUserService.deleteFromGroup(userId, groupId);
|
||
}
|
||
|
||
/**
|
||
* 批量从指定组中移除用户;无其它组关联者级联删除用户。
|
||
*/
|
||
@OperationLog("批量从组中删除用户")
|
||
@PostMapping("BatchDelete")
|
||
public void batchDelete(@RequestBody @Validated BatchDeleteRequest request) {
|
||
sysUserService.batchDeleteFromGroup(request.getUserIds(), request.getGroupId());
|
||
}
|
||
|
||
/** 禁用用户(disabled=true) */
|
||
@OperationLog("禁用用户")
|
||
@PostMapping("Disable/{id}")
|
||
public void disable(@PathVariable Integer id) {
|
||
sysUserService.changeStatus(id, true);
|
||
}
|
||
|
||
/** 启用用户(disabled=false) */
|
||
@OperationLog("启用用户")
|
||
@PostMapping("Enable/{id}")
|
||
public void enable(@PathVariable Integer id) {
|
||
sysUserService.changeStatus(id, false);
|
||
}
|
||
|
||
/** 批量设置用户状态 */
|
||
@OperationLog("批量设置用户状态")
|
||
@PostMapping("BatchChangeStatus")
|
||
public void batchChangeStatus(@RequestBody @Validated BatchChangeStatusRequest request) {
|
||
sysUserService.batchChangeStatus(request.getUserIds(), request.getDisabled());
|
||
}
|
||
|
||
@GetMapping("/List")
|
||
public BasePageResult<SysUserVo> list(SysUserQuery query, BasePageQuery pageQuery) {
|
||
// 排序字段在关联表,无法走 Pageable.sort,统一由 Service.Specification 控制
|
||
// (根节点按 id 升序,具体组按组内 sort_no 升序)。此处不传 Sort,避免覆盖 Spec 的 orderBy。
|
||
return PageUtils.toResult(sysUserService.list(query, PageUtils.toPageable(pageQuery, null)));
|
||
}
|
||
|
||
/** 调整用户在某组内的排序号(sort_no):1~999,可空表示清除 */
|
||
@OperationLog("设置用户组内排序号")
|
||
@PostMapping("ChangeSortNo/{userId}")
|
||
public void changeSortNo(@PathVariable Integer userId,
|
||
@RequestBody @Validated ChangeSortNoRequest request) {
|
||
sysUserService.changeSortNo(userId, request.getGroupId(), request.getSortNo());
|
||
}
|
||
|
||
@OperationLog("调整组")
|
||
@PostMapping("ChangeGroups")
|
||
public void changeGroups(@RequestBody @Validated ChangeGroupsRequest request) {
|
||
sysUserService.changeGroups(request.getUserIds(), request.getGroupIds());
|
||
}
|
||
|
||
@GetMapping("Groups/{userId}")
|
||
public List<Integer> getUserGroups(@PathVariable Integer userId) {
|
||
return sysUserService.findGroupIdsByUserId(userId);
|
||
}
|
||
|
||
@OperationLog("批量导入用户")
|
||
@PostMapping("BatchImport")
|
||
public BatchImportResult batchImport(@RequestParam("file") MultipartFile file) {
|
||
return sysUserService.batchImport(file);
|
||
}
|
||
|
||
/**
|
||
* 下载用户批量导入模板(真实 .xlsx):平铺当前组及子孙组,仅填充组名(路径)与组id;其余列留空供填写。
|
||
*/
|
||
@GetMapping("DownloadTemplate")
|
||
public void downloadTemplate(@RequestParam(value = "groupId", required = false) Integer groupId,
|
||
HttpServletResponse response) throws IOException {
|
||
sysUserService.downloadImportTemplate(groupId, response);
|
||
}
|
||
|
||
/**
|
||
* 导出组下所有用户(含子组)为 Excel;与导入模板同构,末尾追加用户id列。
|
||
* 前端直接跳转此地址触发浏览器下载。
|
||
*/
|
||
@GetMapping("Export")
|
||
public void export(@RequestParam(value = "groupId", required = false) Integer groupId,
|
||
@RequestParam(value = "withSub", defaultValue = "1") Integer withSub,
|
||
@RequestParam(value = "name", required = false) String name,
|
||
HttpServletResponse response) throws IOException {
|
||
sysUserService.exportUsers(groupId, withSub, name, response);
|
||
}
|
||
}
|