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
* * @Description: 用户管理
* @Project:
* @CreateDate: Created in 2020/2/13 15:50
* @Author: liuke */ @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 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 roleIds) { appUserService.setRoleToUser(id, roleIds); return ResultBody.ok(); } /** * 获取用户的角色 * * @param * @return */ @GetMapping("/users/{id}/roles") public ResultBody> 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 findUsers(@RequestParam Map 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 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 params, HttpServletResponse response) throws IOException { List 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 list = ExcelUtil.importExcel(excl, 0, 1, SysUserExcel.class); rowNum = list.size(); if (rowNum > 0) { List 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 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 map) { return appUserService.findAll(map); } /** * 根据map查询 总个数 * @param map * @return */ @PostMapping("/users/findCountByMap") public ResultBody findCountByMap( @RequestBody Map 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 map) { return appUserService.passwordByPhone(map); } /** * 通过手机号注册 新用户 */ @PutMapping(value = "/users/registerByPhone") public ResultBody registerByPhone(@RequestBody Map map) { return appUserService.registerByPhone(map); } /** * 更换手机号 */ @PutMapping(value = "/users/updatePhone") public ResultBody updatePhone(@RequestBody Map map, @LoginUser SysUser sysUser) { return appUserService.updatePhone(map,sysUser); } }