package com.cloud.user.controller; //import com.cloud.common.utils.AppUserUtil; import com.cloud.model.common.Page; import com.cloud.model.common.Result; import com.cloud.model.log.LogAnnotation; import com.cloud.model.log.constants.AbstractLogModule; import com.cloud.model.sys.AppUser; import com.cloud.model.sys.LoginAppUser; import com.cloud.model.sys.SysRole; import com.cloud.model.sys.constants.CredentialType; //import com.cloud.user.feign.SmsClient; import com.cloud.user.model.OrgNameAppUser; import com.cloud.user.service.AppUserService; import com.cloud.user.service.TokenService; 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.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; //import org.springframework.security.oauth2.common.util.OAuth2Utils; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; import java.util.Set; @Slf4j @RestController @RequestMapping("data/api-u") @Api(value = "UserController", description = "用户控制层") public class UserController { @Autowired private AppUserService appUserService; @Autowired private TokenService tokenService; /** * 当前登录用户 LoginAppUser */ @GetMapping("/users/current") @ApiOperation(value = "获取当前登录用户", notes = "", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public LoginAppUser getLoginAppUser() { return tokenService.currentUser(); } /** * 根据用户名查找登录对象信息 */ @GetMapping(value = "/users-anon/internal", params = "username") @ApiOperation(value = "查找用户", notes = "根据用户名字查找用户信息集合", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String", paramType = "query") }) public LoginAppUser findByUsername(String username) { return appUserService.findByUsername(username); } /** * 用户查询 */ @GetMapping("/users") @PreAuthorize("hasAuthority('sys:user:query')") @ApiOperation(value = "用户查询", notes = "有orgId分库查询,没有orgId全局查询", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "start", value = "起始页", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "length", value = "条数", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "orgId", value = "分库:orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "id", value = "组织id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "isAll", value = "是否查询全部", required = true, dataType = "String", paramType = "query") }) public Page findUsers(@RequestParam Map params){ return appUserService.findUsers(params); } /** * 根据id查询用户 */ @GetMapping("/users/findUserById") @PreAuthorize("hasAuthority('sys:user:query')") @ApiOperation(value = "根据id查询用户", notes = "参数id,orgId", httpMethod = "GET", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "params", value = "{id:用户id ," + " orgId:组织机构Id" + "}", required = true, dataType = "string", paramType = "query"), }) public AppUser findUserById(@RequestParam Map params) { return appUserService.findById(params); } /** * 添加用户,根据用户名注册 */ @PostMapping("/users-anon/register") @ApiOperation(value = "添加用户", notes = "添加用户,根据用户名注册", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "orgId", value = "分库orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "officeId", value = "部门id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "username", value = "分库orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "password", value = "用户名", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "nickname", value = "昵称", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "sex", value = "性别", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "type", value = "类型", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "no", value = "编号", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "eMail", value = "电子邮件", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "telPhone", value = "电话", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "headImgUrl", value = "头像", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "qrCode", value = "二维码路径", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "idCard", value = "身份证号", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "userType", value = "用户类型", required = false, dataType = "String", paramType = "query") }) public AppUser register(@RequestBody AppUser appUser) { appUserService.addAppUser(appUser); return appUser; } /** * 逻辑删除系统用户 * @param params * @return */ @ApiOperation(value = "逻辑删除系统用户", notes = "逻辑删除系统用户", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "String", paramType = "query"), }) @GetMapping("/users-anon/delete") public Map deleteAppUser(@RequestParam Map params){ return appUserService.deleteAppUser(params); } /** * 修改自己的个人信息 */ @ApiOperation(value = "修改用户", notes = "修改用户保存模块", httpMethod = "PUT", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @LogAnnotation(module = AbstractLogModule.UPDATE_ME) @PutMapping("/users/me") public AppUser updateMe(@RequestBody AppUser appUser) { AppUser user = tokenService.currentUser(); appUser.setId(user.getId()); appUser.setEnabled(user.isEnabled()); appUserService.updateAppUser(appUser); return appUser; } /** * 修改密码 */ @PutMapping(value = "/users/password", params = { "oldPassword", "newPassword" }) @LogAnnotation(module = AbstractLogModule.UPDATE_PASSWORD) @ApiOperation(value = "修改密码", notes = "用户修改自己密码模块", httpMethod = "PUT", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "oldPassword", value = "旧密码", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "newPassword", value = "新密码", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "orgId", value = "组织ID", required = true, dataType = "String", paramType = "query") }) public Result updatePassword(@RequestParam Map params) { String oldPassword = params.get("oldPassword").toString(); String newPassword = params.get("newPassword").toString(); if (StringUtils.isBlank(oldPassword)) { throw new IllegalArgumentException("旧密码不能为空"); } if (StringUtils.isBlank(newPassword)) { throw new IllegalArgumentException("新密码不能为空"); } //AppUser user = AppUserUtil.getLoginAppUser(); appUserService.updatePassword(params); return Result.ok(); } /** * 管理后台,给用户重置密码 */ @PostMapping(value = "/users/resetPassword") //@PreAuthorize("hasAuthority('back:user:password')") @ApiOperation(value = "重置密码", notes = "管理后台,给用户重置密码", httpMethod = "PUT", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long", paramType = "query"), @ApiImplicitParam(name = "orgId", value = "组织orgId", required = true, dataType = "Long", paramType = "query"), @ApiImplicitParam(name = "newPassword", value = "新密码", required = true, dataType = "String", paramType = "query") }) @LogAnnotation(module = AbstractLogModule.RESET_PASSWORD) public Result resetPassword(@RequestParam Map params) { appUserService.updatePassword(params); return Result.ok(); } /** * 用户重置密码123456 */ @GetMapping(value = "/users/setPassWord") @ApiOperation(value = "用户重置密码", notes = "系统管理用户重置密码", httpMethod = "GET", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long", paramType = "query"), @ApiImplicitParam(name = "orgId", value = "组织orgId", required = true, dataType = "Long", paramType = "query") }) @LogAnnotation(module = AbstractLogModule.RESET_PASSWORD) public Result setPassWord(@RequestParam Map params) { AppUser appUser = new AppUser(); appUser.setId(Long.parseLong(params.get("id").toString())); appUser.setOrgId(Long.parseLong(params.get("orgId").toString())); appUserService.setPassWord(appUser); return Result.ok(); } /** * 管理后台修改用户 */ @ApiOperation(value = "管理后台修改用户", notes = "管理后台修改用户", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "orgId", value = "分库orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "officeId", value = "部门id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "username", value = "分库orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "password", value = "用户名", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "nickname", value = "昵称", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "sex", value = "性别", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "type", value = "类型", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "no", value = "编号", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "eMail", value = "电子邮件", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "telPhone", value = "电话", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "headImgUrl", value = "头像", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "qrCode", value = "二维码路径", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "idCard", value = "身份证号", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "userType", value = "用户类型", required = false, dataType = "String", paramType = "query") }) @LogAnnotation(module = AbstractLogModule.UPDATE_USER) //@PreAuthorize("hasAuthority('back:user:update')") @PostMapping("/users-anon/update") public Result updateAppUser(@RequestBody AppUser appUser) { appUserService.updateAppUser(appUser); return Result.ok(); } /** * 管理后台给用户分配角色 * id,orgId,set roleIds */ @PostMapping("/users/setRoleToUser") @LogAnnotation(module = AbstractLogModule.SET_ROLE) @ApiOperation(value = "管理后台给用户分配角色", notes = "管理后台给用户分配角色", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "orgId", value = "orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "roleIds", value = "角色ids,字符串','分割", required = true, dataType = "query", paramType = "query") }) //@PreAuthorize("hasAuthority('back:user:role:set')") public Map setRoleToUser(@RequestBody Map params) { Map map = new HashMap<>(); int status = appUserService.setRoleToUser(params); if(status > 0){ map.put("code",0); map.put("message","更新成功!"); }else { map.put("code",1); map.put("message","更新失败!"); } return map; } /** * 获取用户的角色列表 * orgId,userId */ @GetMapping("/users/findRolesByUserId") //@PreAuthorize("hasAnyAuthority('back:user:role:set','user:role:byuid')") @ApiOperation(value = "获取用户的角色列表", notes = "获取用户的角色列表", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "orgId", value = "orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "query") }) public Set findRolesByUserId(@RequestParam Map params) { //TODO lllppp 先临时查出orgId,以后由前台传入 AppUser user = appUserService.findById(params); if(user != null){ return appUserService.findRolesByUserId(user.getId(),user.getOrgId()); } return null; } /** * 获取用户的角色回显列表 * id,orgId */ @GetMapping("/users/findRolesIdsByUserId") @ApiOperation(value = "获取用户的角色回显的角色Id", notes = "获取用户的角色回显的角色Id", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "orgId", value = "orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "query") }) public Map findRolesIdsByUserId(@RequestParam Map params){ return appUserService.findRolesIdsByUserId(params); } // @Autowired // private SmsClient smsClient; @PostMapping(value = "/users/binding-phone") public void bindingPhone(String phone, String key, String code) { if (StringUtils.isBlank(phone)) { throw new IllegalArgumentException("手机号不能为空"); } if (StringUtils.isBlank(key)) { throw new IllegalArgumentException("key不能为空"); } if (StringUtils.isBlank(code)) { throw new IllegalArgumentException("code不能为空"); } LoginAppUser loginAppUser =tokenService.currentUser(); log.info("绑定手机号,key:{},code:{},username:{}", key, code, loginAppUser.getUsername()); String value = "";//smsClient.matcheCodeAndGetPhone(key, code, false, 30); if (value == null) { throw new IllegalArgumentException("验证码错误"); } if (phone.equals(value)) { appUserService.bindingPhone(loginAppUser.getId(), phone,loginAppUser.getOrgId()); } else { throw new IllegalArgumentException("手机号不一致"); } } /** * 用户组织机构变更 * @param params * @return */ @ApiOperation(value = "用户组织机构变更", notes = "用户组织机构变更", httpMethod = "GET", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @ApiImplicitParams({ @ApiImplicitParam(name = "orgId", value = "分库orgId", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "userIds", value = "人员ids", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "officeId", value = "部门id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "updateOfficeId", value = "修改后的部门id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "updateOrgId", value = "修改后的组织机构id", required = true, dataType = "String", paramType = "query"), }) @RequestMapping("/users/updateOfficeId") public Result updateOfficeId(@RequestParam Map params){ try{ return Result.ok("操作成功", appUserService.updateOfficeId(params)); }catch (Exception e){ e.printStackTrace(); return Result.error(e); } } }