package com.kidgrow.usercenter.controller;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.kidgrow.common.annotation.LoginUser;
|
import com.kidgrow.common.constant.CommonConstant;
|
import com.kidgrow.common.context.ClientContextHolder;
|
import com.kidgrow.common.model.*;
|
import com.kidgrow.common.utils.ExcelUtil;
|
import com.kidgrow.log.annotation.AuditLog;
|
import com.kidgrow.searchcenter.client.service.IQueryService;
|
import com.kidgrow.searchcenter.model.LogicDelDto;
|
import com.kidgrow.searchcenter.model.SearchDto;
|
import com.kidgrow.usercenter.mapper.SysUserLogsMapper;
|
import com.kidgrow.usercenter.model.SysUserExcel;
|
import com.kidgrow.usercenter.model.SysUserLogs;
|
import com.kidgrow.usercenter.service.ISysUserService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections4.MapUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.cache.annotation.CacheEvict;
|
import org.springframework.cache.annotation.CachePut;
|
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.util.*;
|
|
/**
|
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
|
*
|
* @Description: 用户管理<br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/13 15:50 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
|
@Slf4j
|
@RestController
|
@Api(tags = "用户模块api")
|
public class SysUserController {
|
private static final String ADMIN_CHANGE_MSG = "超级管理员不给予修改";
|
|
|
/**
|
* 全文搜索逻辑删除Dto
|
*/
|
private static final LogicDelDto SEARCH_LOGIC_DEL_DTO = new LogicDelDto("isDel", "否");
|
|
@Autowired
|
private ISysUserService appUserService;
|
|
@Autowired
|
private IQueryService queryService;
|
|
@Autowired
|
private SysUserLogsMapper sysUserLogsMapper;
|
|
@Autowired
|
private HttpServletRequest request;
|
|
/**
|
* 当前登录用户 LoginAppUser
|
*
|
* @return
|
*/
|
@ApiOperation(value = "根据access_token当前登录用户")
|
@GetMapping("/users/current")
|
public ResultBody<LoginAppUser> getLoginAppUser(@LoginUser(isFull = true) SysUser user) {
|
return ResultBody.ok().data(appUserService.getLoginAppUser(user));
|
}
|
|
/**
|
* 查询用户实体对象SysUser
|
*/
|
@GetMapping(value = "/users/name/{username}")
|
@ApiOperation(value = "根据用户名查询用户实体")
|
@Cacheable(value = "user", key = "#username")
|
public SysUser selectByUsername(@PathVariable String username) {
|
|
return appUserService.selectByUsername(username);
|
}
|
|
/**
|
* 查询用户登录对象LoginAppUser
|
*/
|
@GetMapping(value = "/users-anon/login", params = "username")
|
@ApiOperation(value = "根据用户名查询用户")
|
public LoginAppUser findByUsername(String username,HttpServletRequest request) {
|
|
LoginAppUser loginAppUser =appUserService.findByUsername(username);
|
if(loginAppUser!=null){
|
loginLogs(loginAppUser,request);
|
}
|
return loginAppUser;
|
}
|
|
/**
|
* 用户登录日志
|
* @param sysUser
|
* @return
|
*/
|
private int loginLogs(LoginAppUser sysUser,HttpServletRequest request){
|
SysUserLogs sysUserLogs = new SysUserLogs();
|
sysUserLogs.setClientId(ClientContextHolder.getClient());
|
sysUserLogs.setLoginAgentSystem(request.getHeader(CommonConstant.USER_AGENT_SYSTEM));
|
sysUserLogs.setLoginAgentBrowser(request.getHeader(CommonConstant.USER_AGENT_BROWSER));
|
sysUserLogs.setLoginIp(request.getHeader(CommonConstant.USER_AGENT_IP));
|
sysUserLogs.setLoginTime(new Date());
|
sysUserLogs.setUserid(sysUser.getId());
|
sysUserLogs.setUsername(sysUser.getUsername());
|
return sysUserLogsMapper.insert(sysUserLogs);
|
}
|
|
/**
|
* 通过手机号查询用户、角色信息
|
*
|
* @param mobile 手机号
|
*/
|
@GetMapping(value = "/users-anon/mobile", params = "mobile")
|
@ApiOperation(value = "根据手机号查询用户")
|
public SysUser findByMobile(String mobile) {
|
|
return appUserService.findByMobile(mobile);
|
}
|
|
/**
|
* 根据OpenId查询用户信息
|
*
|
* @param openId openId
|
*/
|
@GetMapping(value = "/users-anon/openId", params = "openId")
|
@ApiOperation(value = "根据OpenId查询用户")
|
public SysUser findByOpenId(String openId) {
|
return appUserService.findByOpenId(openId);
|
}
|
|
@GetMapping("/users/{id}")
|
public SysUser findUserById(@PathVariable Long id) {
|
return appUserService.getById(id);
|
}
|
|
/**
|
* 管理后台修改用户
|
*
|
* @param sysUser
|
*/
|
@PutMapping("/users")
|
@CachePut(value = "user", key = "#sysUser.username", unless="#result == null")
|
@AuditLog(operation = "'更新用户:' + #sysUser")
|
public ResultBody updateSysUser(@RequestBody SysUser sysUser) {
|
appUserService.updateById(sysUser);
|
|
return ResultBody.ok();
|
}
|
|
/**
|
* 管理后台给用户分配角色
|
*
|
* @param id
|
* @param roleIds
|
*/
|
@PostMapping("/users/{id}/roles")
|
public ResultBody setRoleToUser(@PathVariable Long id, @RequestBody Set<Long> roleIds) {
|
appUserService.setRoleToUser(id, roleIds);
|
return ResultBody.ok();
|
}
|
|
/**
|
* 获取用户的角色
|
*
|
* @param
|
* @return
|
*/
|
@GetMapping("/users/{id}/roles")
|
public ResultBody<List<SysRole>> findRolesByUserId(@PathVariable Long id) {
|
return ResultBody.ok().data(appUserService.findRolesByUserId(id));
|
}
|
|
/**
|
* 用户查询
|
*
|
* @param params
|
* @return
|
*/
|
@ApiOperation(value = "用户查询列表")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"),
|
@ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer")
|
})
|
@GetMapping("/users")
|
public PageResult<SysUser> findUsers(@RequestParam Map<String, Object> params) {
|
// log.info("租户ID:"+ TenantContextHolder.getTenant());
|
// log.info("IP:"+request.getHeader(CommonConstant.USER_AGENT_IP));
|
return appUserService.findUsers(params);
|
}
|
|
/**
|
* 修改用户状态
|
*
|
* @param params
|
* @return
|
*/
|
@ApiOperation(value = "修改用户状态")
|
@GetMapping("/users/updateEnabled")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Integer"),
|
@ApiImplicitParam(name = "enabled", value = "是否启用", required = true, dataType = "Boolean")
|
})
|
public ResultBody updateEnabled(@RequestParam Map<String, Object> params) {
|
Long id = MapUtils.getLong(params, "id");
|
if (checkAdmin(id)) {
|
return ResultBody.failed(ADMIN_CHANGE_MSG);
|
}
|
return appUserService.updateEnabled(params);
|
}
|
|
/**
|
* 管理后台,给用户重置密码
|
*
|
* @param id
|
*/
|
@PutMapping(value = "/users/{id}/password")
|
@AuditLog(operation = "'重置用户密码:' + #id")
|
public ResultBody resetPassword(@PathVariable Long id) {
|
if (checkAdmin(id)) {
|
return ResultBody.failed(ADMIN_CHANGE_MSG);
|
}
|
appUserService.updatePassword(id, null, null);
|
return ResultBody.ok().msg("重置成功");
|
}
|
|
/**
|
* 用户自己修改密码
|
*/
|
@PutMapping(value = "/users/password")
|
public ResultBody resetPassword(@RequestBody SysUser sysUser) {
|
if (checkAdmin(sysUser.getId())) {
|
return ResultBody.failed().msg(ADMIN_CHANGE_MSG);
|
}
|
appUserService.updatePassword(sysUser.getId(), sysUser.getOldPassword(), sysUser.getNewPassword());
|
return ResultBody.ok().msg("重置成功");
|
}
|
|
/**
|
* 删除用户
|
*
|
* @param id
|
*/
|
@DeleteMapping(value = "/users/{id}")
|
//@AuditLog(operation = "'删除用户:' + #id")
|
public ResultBody delete(@PathVariable Long id) {
|
if (checkAdmin(id)) {
|
return ResultBody.failed(ADMIN_CHANGE_MSG);
|
}
|
appUserService.delUser(id);
|
return ResultBody.ok().msg("删除成功");
|
}
|
|
|
/**
|
* 新增or更新
|
*
|
* @param sysUser
|
* @return
|
*/
|
@CacheEvict(value = "user", key = "#sysUser.username")
|
@PostMapping("/users/saveOrUpdate")
|
@AuditLog(operation = "'新增或更新用户:' + #sysUser.username")
|
public ResultBody saveOrUpdate(@RequestBody SysUser sysUser) {
|
return appUserService.saveOrUpdateUser(sysUser);
|
}
|
|
/**
|
* 导出excel
|
*
|
* @return
|
*/
|
@PostMapping("/users/export")
|
public ResultBody exportUser(@RequestParam Map<String, Object> params, HttpServletResponse response) throws IOException {
|
List<SysUserExcel> result = appUserService.findAllUsers(params);
|
//导出操作
|
ExcelUtil.exportExcel(result, null, "用户", SysUserExcel.class, "user", response);
|
|
return ResultBody.ok().msg("导出数据成功");
|
}
|
|
@PostMapping(value = "/users/import")
|
public ResultBody importExcl(@RequestParam("file") MultipartFile excl) throws Exception {
|
int rowNum = 0;
|
if(!excl.isEmpty()) {
|
List<SysUserExcel> list = ExcelUtil.importExcel(excl, 0, 1, SysUserExcel.class);
|
rowNum = list.size();
|
if (rowNum > 0) {
|
List<SysUser> users = new ArrayList<>(rowNum);
|
list.forEach(u -> {
|
SysUser user = new SysUser();
|
BeanUtil.copyProperties(u, user);
|
user.setPassword(CommonConstant.DEF_USER_PASSWORD);
|
user.setType(UserType.BACKEND.name());
|
users.add(user);
|
});
|
appUserService.saveBatch(users);
|
}
|
}
|
return ResultBody.ok().msg("导入数据成功,一共【"+rowNum+"】行");
|
}
|
|
@ApiOperation(value = "用户全文搜索列表")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"),
|
@ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer"),
|
@ApiImplicitParam(name = "queryStr", value = "搜索关键字", dataType = "String")
|
})
|
|
@GetMapping("/users/search")
|
public PageResult<JSONObject> search(SearchDto searchDto) {
|
searchDto.setIsHighlighter(true);
|
searchDto.setSortCol("createTime");
|
return queryService.strQuery("sys_user", searchDto, SEARCH_LOGIC_DEL_DTO);
|
}
|
|
/**
|
* 根据map查询
|
*/
|
private boolean checkAdmin(long id) {
|
return id == 1L;
|
}
|
@PostMapping("/users/findAll")
|
public ResultBody findAll( @RequestBody Map<String,Object> map) {
|
return appUserService.findAll(map);
|
}
|
|
/**
|
* 根据map查询 总个数
|
* @param map
|
* @return
|
*/
|
@PostMapping("/users/findCountByMap")
|
public ResultBody findCountByMap( @RequestBody Map<String,Object> map) {
|
return appUserService.findCountByMap(map);
|
}
|
/**
|
* 获取当前用的 组织下的所有人员
|
*/
|
@GetMapping("users/getThisUserOrganizationUser")
|
public ResultBody getThisUserOrganizationUser(HttpServletRequest request){
|
return appUserService.getThisUserOrganizationUser(request);
|
}
|
/**
|
* 通过手机修改密码
|
*/
|
@PutMapping(value = "/users/passwordByPhone")
|
public ResultBody passwordByPhone(@RequestBody Map<String,Object> map) {
|
return appUserService.passwordByPhone(map);
|
}
|
/**
|
* 通过手机号注册 新用户
|
*/
|
@PutMapping(value = "/users/registerByPhone")
|
public ResultBody registerByPhone(@RequestBody Map<String,Object> map) {
|
return appUserService.registerByPhone(map);
|
}
|
/**
|
* 更换手机号
|
*/
|
@PutMapping(value = "/users/updatePhone")
|
public ResultBody updatePhone(@RequestBody Map<String,Object> map, @LoginUser SysUser sysUser) {
|
return appUserService.updatePhone(map,sysUser);
|
}
|
}
|