package com.ruoyi.auth.controller; import cn.hutool.core.util.RandomUtil; import com.google.common.collect.Lists; import com.ruoyi.auth.form.ChangePasswordBody; import com.ruoyi.auth.form.LoginBody; import com.ruoyi.auth.form.RegisterBody; import com.ruoyi.auth.service.SysLoginService; import com.ruoyi.auth.utils.JuTongDaSMSUtil; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.JwtUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.common.security.auth.AuthUtil; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.domain.dto.SmsSendDTO; import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * token 控制 * * @author ruoyi */ @RestController @Api(tags = "管理后台和小程序登录") @Slf4j public class TokenController { @Autowired private TokenService tokenService; @Autowired private SysLoginService sysLoginService; @Autowired private SysUserClient userClient; @Autowired private RedisService redisService; @Resource private SysUserClient sysUserClient; @Resource private MemberClient memberClient; @ApiOperation("小程序登录") @PostMapping("miniLogin") public R miniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto) { // 小程序用户登录 AppMiniLoginVO appMiniLoginVo = sysLoginService.miniLogin(appMiniLoginDto); // 获取登录token return R.ok(tokenService.createMiniToken(appMiniLoginVo)); } @ApiOperation("拍卖师小程序登录") @PostMapping("actionMiniLogin") public R actionMiniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto) { // 小程序用户登录 AppMiniLoginVO appMiniLoginVo = sysLoginService.actionMiniLogin(appMiniLoginDto); // 获取登录token return R.ok(tokenService.createMiniToken1(appMiniLoginVo)); } @PostMapping("login") @ApiOperation(value = "管理后台-用户登录") public R login(@RequestBody LoginBody form) { // 用户登录 LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); SysUser sysUser1 = userInfo.getSysUser(); HashMap map = new HashMap<>(); map.put("token",tokenService.createToken(userInfo)); List roles = sysUser1.getRoles(); if (Objects.equals("00", sysUser1.getUserType())) { if (CollectionUtils.isEmpty(roles)) { return R.fail("请关联角色!"); } map.put("roleName", roles.get(0).getRoleName()); } map.put("info",userInfo); map.put("userType", sysUser1.getUserType()); // 修改用户最后登录时间 SysUser sysUser = new SysUser(); sysUser.setUserId(sysUser1.getUserId()); sysUser.setLoginDate(new Date()); System.out.println("修改用户登录时间"+sysUser); userClient.updateSysUser(sysUser); // 获取登录token return R.ok(map); } @DeleteMapping("logout") @ApiOperation(value = "管理后台-用户登出") public R logout(HttpServletRequest request) { String token = SecurityUtils.getToken(request); if (StringUtils.isNotEmpty(token)) { String username = JwtUtils.getUserName(token); // 删除用户缓存记录 AuthUtil.logoutByToken(token); // 记录用户退出日志 sysLoginService.logout(username); } return R.ok(); } @InnerAuth @GetMapping("/inner/logout") @ApiOperation(value = "设置用户token失效") public R logout(@RequestParam("") String token) { if (StringUtils.isNotEmpty(token)) { String username = JwtUtils.getUserName(token); // 删除用户缓存记录 AuthUtil.logoutByToken(token); // 记录用户退出日志 sysLoginService.logout(username); } return R.ok(); } @PostMapping("refresh") @ApiOperation(value = "管理后台-刷新令牌有效期") public R refresh(HttpServletRequest request) { LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { // 刷新令牌有效期 tokenService.refreshToken(loginUser); return R.ok(); } return R.ok(); } @PostMapping("register") public R register(@RequestBody RegisterBody registerBody) { // 用户注册 sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); return R.ok(); } @GetMapping("send-verification-code") @ApiOperation(value = "管理后台-发送验证码") public R changePassword(@RequestParam("username") String username) { Boolean result = redisService.hasKey( CacheConstants.CHANGE_PASSWORD_CAPTCHA_CODE_KEY + username); if (result) { throw new ServiceException("请勿重复发送验证码"); } //校验手机号码 SysUser sysUser = userClient.queryUserByUserName(username).getData(); if (StringUtils.isNull(sysUser)) { return R.fail("账号不存在"); } String code = RandomUtil.randomNumbers(6); try { JuTongDaSMSUtil.smsSend(sysUser.getUserName(), code, "", ""); } catch (Exception e) { log.error("【修改密码】发送短信失败", e); return R.fail("发送失败"); } //将验证码放入redis redisService.setCacheObject( CacheConstants.CHANGE_PASSWORD_CAPTCHA_CODE_KEY + sysUser.getUserName(), code, 5L, TimeUnit.MINUTES); return R.ok(); } @PutMapping("change-password") @ApiOperation(value = "管理后台-用户修改密码") public R changePassword(@RequestBody ChangePasswordBody changePasswordBody) { // 用户修改密码 sysLoginService.changePassword(changePasswordBody.getUsername(), changePasswordBody.getPassword(), changePasswordBody.getVerificationCode()); return R.ok(); } @GetMapping("access-token") @ApiOperation(value = "获取accessToken") public AjaxResult getAccessToken() { // List memberListByIds = memberClient.getMemberListByIds( // Lists.newArrayList(1821462999835160577L, 1821743236321980417L, // 1821757052577460226L, 1821833986934124545L, 1822807281414254593L, // 1823168855446466562L, 1823174222863740930L, 1823174926122692610L, // 1823187615653900289L, 1823233301862756353L), SecurityConstants.INNER) // .getData(); List memberListByIds = memberClient.getMemberListByIds( Lists.newArrayList(1797556140608446465L, 1797810418820390913L, 1798197038803324929L, 1800411185637076994L), SecurityConstants.INNER) .getData(); List> memberList = CollUtils.emptyList(); if (CollUtils.isNotEmpty(memberListByIds)) { AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO(); memberList = memberListByIds.stream().map(item -> { SysUser sysUser = sysUserClient.getSysUser(item.getUserId()).getData(); appMiniLoginVo.setZfbuserid(item.getZfbOpenid()); appMiniLoginVo.setSysUser(sysUser); appMiniLoginVo.setMemberid(item.getId()); appMiniLoginVo.setSysUser(sysUser); return tokenService.createMiniToken(appMiniLoginVo); }).collect(Collectors.toList()); } return AjaxResult.success(memberList); } @InnerAuth @PostMapping("/sms/send") public R sendSms(@RequestBody SmsSendDTO smsSendDTO) { JuTongDaSMSUtil.smsSendBatch(smsSendDTO.getMobileList(), smsSendDTO.getContent(), "", ""); return R.ok(); } }