package com.ruoyi.web.controller.api;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.AuditUserDto;
import com.ruoyi.system.dto.TAppUserDTO;
import com.ruoyi.system.dto.UpAndDownDTO;
import com.ruoyi.system.dto.UserIdDto;
import com.ruoyi.system.model.TAppUser;
import com.ruoyi.system.model.TMajor;
import com.ruoyi.system.model.TUserMajor;
import com.ruoyi.system.query.TAppUserQuery;
import com.ruoyi.system.service.TAppUserService;
import com.ruoyi.system.service.TMajorService;
import com.ruoyi.system.service.TUserMajorService;
import com.ruoyi.system.vo.TAppUserPageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 人员管理 前端控制器
*
*
* @author xiaochen
* @since 2025-09-28
*/
@RestController
@RequestMapping("")
@Api(tags = "人员管理")
public class TAppUserController {
private final TokenService tokenService;
private final TAppUserService appUserService;
private final TUserMajorService userMajorService;
private final TMajorService majorService;
@Autowired
public TAppUserController(TokenService tokenService, TAppUserService appUserService, TUserMajorService userMajorService, TMajorService majorService) {
this.tokenService = tokenService;
this.appUserService = appUserService;
this.userMajorService = userMajorService;
this.majorService = majorService;
}
/**
* 获取人员列表
*/
// @PreAuthorize("@ss.hasPermi('system:user:list')")
@ApiOperation(value = "获取人员管理分页列表", response = TAppUser.class)
@PostMapping(value = "/api/t-app-user/pageList")
public R> pageList(@RequestBody String param) {
TAppUserQuery query = JSON.parseObject(param, TAppUserQuery.class);
return R.ok(appUserService.pageList(query));
}
/**
* 添加人员
*/
// @PreAuthorize("@ss.hasPermi('system:user:addUser')")
@ApiOperation(value = "添加人员",notes = "请求参数:TAppUserDTO对象",response = TAppUserDTO.class)
@PostMapping(value = "/api/t-app-user/addUser")
public R> addUser(@RequestBody String param) {
TAppUserDTO dto = JSON.parseObject(param, TAppUserDTO.class);
if(!StringUtils.hasLength(dto.getAccount())){
return R.fail("请输入账号");
}
if (appUserService.isExit(dto)) {
return R.fail("该账号已存在");
}
List userMajors = dto.getUserMajors();
if(CollectionUtils.isEmpty(userMajors)){
return R.fail("请选择专业");
}
String pwd = SecurityUtils.encryptPassword(dto.getPassword());
dto.setPassword(pwd);
dto.setState(1);
appUserService.save(dto);
for (TUserMajor userMajor : userMajors) {
userMajor.setAppUserId(dto.getId());
}
userMajorService.saveBatch(userMajors);
return R.ok();
}
/**
* 编辑人员
*/
// @PreAuthorize("@ss.hasPermi('system:user:updateUser')")
@ApiOperation(value = "编辑人员", response = TAppUser.class)
@PostMapping(value = "/api/t-app-user/updateUser")
public R> updateUser(@RequestBody String param) {
TAppUserDTO dto = JSON.parseObject(param, TAppUserDTO.class);
if (appUserService.isExit(dto)) {
return R.fail("该账号已存在");
}
List userMajors = dto.getUserMajors();
if(dto.getPassword()!=null && !dto.getPassword().isEmpty()){
String pwd = SecurityUtils.encryptPassword(dto.getPassword());
dto.setPassword(pwd);
}
dto.setState(1);
appUserService.updateById(dto);
userMajorService.remove(Wrappers.lambdaQuery(TUserMajor.class).eq(TUserMajor::getAppUserId,dto.getId()));
for (TUserMajor userMajor : userMajors) {
userMajor.setAppUserId(dto.getId());
}
userMajorService.saveBatch(userMajors);
return R.ok();
}
/**
* 删除人员
*/
// @PreAuthorize("@ss.hasPermi('system:user:delUser')")
@ApiOperation(value = "删除人员")
@PostMapping(value = "/api/t-app-user/delUser")
public R> delUser(@RequestBody String param) {
UserIdDto dto = JSON.parseObject(param, UserIdDto.class);
TAppUser appUser = appUserService.getById(dto.getId());
appUser.setDisabled(true);
appUserService.updateById(appUser);
return R.ok();
}
/**
* 禁用/启用
*/
// @PreAuthorize("@ss.hasPermi('system:user:updateStatus')")
@ApiOperation(value = "禁用/启用")
@PostMapping(value = "/api/t-app-user/updateStatus")
public R> updateStatus(@RequestBody String param) {
UpAndDownDTO dto = JSON.parseObject(param, UpAndDownDTO.class);
TAppUser appUser = appUserService.getById(dto.getId());
appUser.setStatus(dto.getStatus());
appUserService.updateById(appUser);
return R.ok();
}
/**
* 禁用/启用
*/
// @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
@ApiOperation(value = "重置密码")
@PostMapping(value = "/api/t-app-user/resetPwd")
public R> resetPwd(@RequestBody String param) {
UserIdDto dto = JSON.parseObject(param, UserIdDto.class);
TAppUser appUser = appUserService.getById(dto.getId());
String pwd = SecurityUtils.encryptPassword("123456");
appUser.setPassword(pwd);
appUserService.updateById(appUser);
return R.ok();
}
/**
* 获取人员审核管理分页列表
*/
// @PreAuthorize("@ss.hasPermi('system:user:pageAuditList')")
@ApiOperation(value = "获取人员审核管理分页列表", response = TAppUserQuery.class)
@PostMapping(value = "/api/t-app-user/pageAuditList")
public R> pageAuditList(@RequestBody String param) {
TAppUserQuery query = JSON.parseObject(param, TAppUserQuery.class);
return R.ok(appUserService.pageAuditList(query));
}
/**
* 获取人员审核管理详情
*/
// @PreAuthorize("@ss.hasPermi('system:user:auditDetail')")
@ApiOperation(value = "获取人员审核管理详情", response = TAppUserPageVo.class)
@PostMapping(value = "/api/t-app-user/auditDetail")
public R auditDetail(@RequestBody String param) {
UserIdDto dto = JSON.parseObject(param, UserIdDto.class);
return R.ok(appUserService.pageAuditDetail(dto.getId()));
}
/**
* 编辑人员
*/
// @PreAuthorize("@ss.hasPermi('system:user:auditUser')")
@ApiOperation(value = "人员审核", response = AuditUserDto.class)
@PostMapping(value = "/api/t-app-user/auditUser")
public R> auditUser(@RequestBody String param) {
AuditUserDto dto = JSON.parseObject(param, AuditUserDto.class);
TAppUser tAppUser = appUserService.getById(dto.getId());
tAppUser.setStatus(dto.getStatus());
tAppUser.setTeamId(dto.getTeamId());
appUserService.updateById(tAppUser);
return R.ok();
}
/**
* 详情
*/
// @PreAuthorize("@ss.hasPermi('system:user:auditUser')")
@ApiOperation(value = "人员详情", response = AuditUserDto.class)
@PostMapping(value = "/api/t-app-user/detailUser")
public R detailUser(@RequestBody String param) {
UserIdDto dto = JSON.parseObject(param, UserIdDto.class);
TAppUser tAppUser = appUserService.getById(dto.getId());
List list = userMajorService.list(new LambdaQueryWrapper().eq(TUserMajor::getAppUserId, dto.getId()));
if(!list.isEmpty()){
List mjIds = list.stream().map(TUserMajor::getMajorId).collect(Collectors.toList());
List mjList = majorService.list(new LambdaQueryWrapper().in(TMajor::getId, mjIds));
for (TUserMajor tUserMajor : list) {
TMajor tMajor = mjList.stream().filter(mj -> mj.getId().equals(tUserMajor.getMajorId())).findFirst().orElse(null);
if(tMajor!=null){
tUserMajor.setIndicator(tMajor.getMajorName());
}
}
}
tAppUser.setUserMajors(list);
return R.ok(tAppUser);
}
}