|  |  |  | 
|---|
|  |  |  | import javax.annotation.Resource; | 
|---|
|  |  |  | import javax.servlet.http.HttpServletRequest; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 
|---|
|  |  |  | import com.ruoyi.account.api.feignClient.AppUserClient; | 
|---|
|  |  |  | import com.ruoyi.account.api.model.TAppUser; | 
|---|
|  |  |  | import com.ruoyi.common.core.constant.Constants; | 
|---|
|  |  |  | import com.ruoyi.common.core.constant.MsgConstants; | 
|---|
|  |  |  | import com.ruoyi.common.core.utils.HttpUtils; | 
|---|
|  |  |  | import com.ruoyi.common.core.utils.MsgUtil; | 
|---|
|  |  |  | import com.ruoyi.common.core.web.domain.AjaxResult; | 
|---|
|  |  |  | import com.ruoyi.common.redis.service.RedisService; | 
|---|
|  |  |  | import com.ruoyi.chargingPile.api.feignClient.PartnerClient; | 
|---|
|  |  |  | import com.ruoyi.chargingPile.api.model.Partner; | 
|---|
|  |  |  | import com.ruoyi.system.api.domain.SysRole; | 
|---|
|  |  |  | import com.ruoyi.system.api.domain.SysUser; | 
|---|
|  |  |  | import com.ruoyi.system.api.feignClient.SysUserClient; | 
|---|
|  |  |  | import io.swagger.annotations.ApiOperation; | 
|---|
|  |  |  | import io.seata.spring.annotation.GlobalTransactional; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.util.CollectionUtils; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.ruoyi.system.api.model.LoginUser; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.concurrent.TimeUnit; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * token 控制 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @author ruoyi | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | @RestController | 
|---|
|  |  |  | public class TokenController | 
|---|
|  |  |  | { | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private TokenService tokenService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SysLoginService sysLoginService; | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | private SysUserClient userClient; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostMapping("login") | 
|---|
|  |  |  | public R<?> login(@RequestBody LoginBody form, HttpServletRequest request) { | 
|---|
|  |  |  | // 用户登录 | 
|---|
|  |  |  | LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(), request); | 
|---|
|  |  |  | HashMap<String, Object> map = new HashMap<>(); | 
|---|
|  |  |  | map.put("token",tokenService.createToken(userInfo)); | 
|---|
|  |  |  | List<SysRole> roles = userInfo.getSysUser().getRoles(); | 
|---|
|  |  |  | //        if(CollectionUtils.isEmpty(roles)){ | 
|---|
|  |  |  | //            return R.fail("请关联角色!"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        map.put("roleName",roles.get(0).getRoleName()); | 
|---|
|  |  |  | map.put("info",userInfo); | 
|---|
|  |  |  | // 修改用户最后登录时间 | 
|---|
|  |  |  | SysUser sysUser = new SysUser(); | 
|---|
|  |  |  | sysUser.setUserId(userInfo.getSysUser().getUserId()); | 
|---|
|  |  |  | sysUser.setLoginDate(new Date()); | 
|---|
|  |  |  | System.out.println("修改用户登录时间"+sysUser); | 
|---|
|  |  |  | userClient.updateSysUser(sysUser); | 
|---|
|  |  |  | return R.ok(map); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @DeleteMapping("logout") | 
|---|
|  |  |  | 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, request); | 
|---|
|  |  |  | public class TokenController { | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private TokenService tokenService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SysLoginService sysLoginService; | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | private SysUserClient userClient; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | private PartnerClient partnerClient; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostMapping("login") | 
|---|
|  |  |  | @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 | 
|---|
|  |  |  | public R<?> login(@RequestBody LoginBody form, HttpServletRequest request) { | 
|---|
|  |  |  | // 用户登录 | 
|---|
|  |  |  | LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(), request); | 
|---|
|  |  |  | HashMap<String, Object> map = new HashMap<>(); | 
|---|
|  |  |  | map.put("token", tokenService.createToken(userInfo)); | 
|---|
|  |  |  | List<SysRole> roles = userInfo.getSysUser().getRoles(); | 
|---|
|  |  |  | if(CollectionUtils.isEmpty(roles)){ | 
|---|
|  |  |  | return R.fail("请关联角色!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostMapping("refresh") | 
|---|
|  |  |  | 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, HttpServletRequest request) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 用户注册 | 
|---|
|  |  |  | sysLoginService.register(registerBody.getUsername(), registerBody.getPassword(), request); | 
|---|
|  |  |  | return R.ok(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | map.put("roleName",roles.get(0).getRoleName()); | 
|---|
|  |  |  | map.put("info", userInfo); | 
|---|
|  |  |  | if(userInfo.getSysUser().getRoleType() == 2){ | 
|---|
|  |  |  | Partner partner = partnerClient.getPartnerById(userInfo.getSysUser().getObjectId()).getData(); | 
|---|
|  |  |  | map.put("partnerName", partner.getName()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 修改用户最后登录时间 | 
|---|
|  |  |  | SysUser sysUser = new SysUser(); | 
|---|
|  |  |  | sysUser.setUserId(userInfo.getSysUser().getUserId()); | 
|---|
|  |  |  | sysUser.setLoginDate(new Date()); | 
|---|
|  |  |  | System.out.println("修改用户登录时间" + sysUser); | 
|---|
|  |  |  | userClient.updateSysUser(sysUser); | 
|---|
|  |  |  | return R.ok(map); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @DeleteMapping("logout") | 
|---|
|  |  |  | 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, request); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostMapping("refresh") | 
|---|
|  |  |  | 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, HttpServletRequest request) { | 
|---|
|  |  |  | // 用户注册 | 
|---|
|  |  |  | sysLoginService.register(registerBody.getUsername(), registerBody.getPassword(), request); | 
|---|
|  |  |  | return R.ok(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|