package com.zhongzheng.controller.wx; import cn.hutool.core.lang.Validator; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.zhongzheng.common.constant.Constants; import com.zhongzheng.common.core.domain.AjaxResult; import com.zhongzheng.common.core.domain.entity.SysMenu; import com.zhongzheng.common.core.domain.entity.SysUser; import com.zhongzheng.common.core.domain.model.LoginBody; import com.zhongzheng.common.core.domain.model.LoginUser; import com.zhongzheng.common.core.redis.RedisCache; import com.zhongzheng.common.utils.ServletUtils; import com.zhongzheng.framework.web.service.*; import com.zhongzheng.modules.system.service.ISysMenuService; import com.zhongzheng.modules.user.entity.ClientLoginUser; import com.zhongzheng.modules.user.service.IUserService; import com.zhongzheng.modules.user.vo.UserVo; import com.zhongzheng.modules.wx.bo.WxLoginBody; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; @Api(tags ="微信登录用户操作管理") @ApiSupport(order = 2) @RestController public class WxLoginController { @Autowired private WxLoginService wxLoginService; @Autowired private WxTokenService wxTokenService; @Autowired private IUserService iUserService; @Autowired private RedisCache redisCache; /** * 登录方法 * * @param loginBody 登录信息 * @return 结果 */ @ApiOperation("测试登录") @PostMapping("/testLogin") public AjaxResult testLogin(@RequestBody WxLoginBody loginBody) { String token = wxLoginService.getWxGzhAccessToken(); System.out.println(token); Map map = new HashMap<>(); return AjaxResult.success(null); } /** * 登录方法 * * @param loginBody 登录信息 * @return 结果 */ @ApiOperation("小程序微信登录") @PostMapping("/app/common/bindLogin") public AjaxResult bindLogin(@RequestBody WxLoginBody loginBody) { Map map = wxLoginService.login(loginBody); return AjaxResult.success(map); } @ApiOperation("获取用户小程序openid") @PostMapping("/wx/getOpenid") public AjaxResult getOpenid(@RequestBody WxLoginBody loginBody) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); String openId = wxLoginService.getWxOpenId(loginBody,loginUser.getUser().getUserId()); return AjaxResult.success(openId); } @ApiOperation("小程序校验PC登录二维码") @PostMapping("/scan_login_check") public AjaxResult scanLoginCheck(@RequestBody WxLoginBody loginBody) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); String scanCode = loginBody.getScanCode(); String key = "SCAN_LOGIN_"+scanCode; String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录 Long status = redisCache.getCacheObject(keyStatus); if(Validator.isNotEmpty(status)&&status.equals(1L)){ redisCache.setCacheObject(key, loginUser.getUser().getUserId(),60, TimeUnit.SECONDS);//60秒锁定 redisCache.setCacheObject(keyStatus, 2L,60, TimeUnit.SECONDS);//60秒锁定 return AjaxResult.success(); }else{ return AjaxResult.error("校验码不存在或已过期"); } } @ApiOperation("PC获取登录二维码地址") @GetMapping("/pc_login_url") public AjaxResult pcLoginUrl() { Map map = wxLoginService.pcLoginUrl(); return AjaxResult.success(map); } @ApiOperation("小程序已扫码") @GetMapping("/scan_code") public AjaxResult scanCode(WxLoginBody loginBody) { String scanCode = loginBody.getScanCode(); String key = "SCAN_LOGIN_"+scanCode; String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录 Long status = redisCache.getCacheObject(keyStatus); if(Validator.isEmpty(status)){ return AjaxResult.error("标识码不存在"); }else{ redisCache.setCacheObject(keyStatus, 1L,180, TimeUnit.SECONDS);//延长180秒锁定 return AjaxResult.success(); } } @ApiOperation("PC检查小程序是否扫码登录") @GetMapping("/check_pc_login") public AjaxResult checkPcLogin(WxLoginBody loginBody) { String scanCode = loginBody.getScanCode(); Map map = wxLoginService.checkPcLogin(scanCode); return AjaxResult.success(map); } /** * 公众号登录方法 * * @param loginBody 登公众号录信息 * @return 结果 */ @ApiOperation("公众号登录") @PostMapping("/gzh_login") public AjaxResult gzh_login(@RequestBody WxLoginBody loginBody) { Map map = wxLoginService.gzh_login(loginBody); return AjaxResult.success(map); } @ApiOperation("刷新令牌") @GetMapping("/refreshToken/{userAccount}") public AjaxResult refreshToken(@PathVariable("userAccount") String userAccount) { String token = wxLoginService.refreshToken(userAccount); Map map = new HashMap<>(); map.put(Constants.TOKEN, token); return AjaxResult.success(map); } }