123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package com.zhongzheng.controller.wx;
- import cn.hutool.core.lang.Validator;
- import com.alibaba.fastjson.JSON;
- 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 com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
- import com.zhongzheng.modules.wx.service.IWxPayService;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- 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 IWxPayService iWxPayService;
- @Autowired
- private WxTokenService wxTokenService;
- @Autowired
- private IUserService iUserService;
- @Autowired
- private RedisCache redisCache;
- private static final Logger log = LoggerFactory.getLogger(WxLoginController.class);
- /**
- * 登录方法
- *
- * @param loginBody 登录信息
- * @return 结果
- */
- @ApiOperation("测试登录")
- @PostMapping("/testLogin")
- public AjaxResult testLogin(@RequestBody WxLoginBody loginBody)
- {
- Map<String,String> map = new HashMap<>();
- return AjaxResult.success(null);
- }
- /**
- * 公众号登录方法
- *
- * @param loginBody 登公众号录信息
- * @return 结果
- */
- @ApiOperation("公众号登录")
- @PostMapping("/app/common/gzh_login")
- public AjaxResult gzh_login(@RequestBody WxLoginBody loginBody)
- {
- Map<String,String> map = wxLoginService.gzh_login(loginBody);
- return AjaxResult.success(map);
- }
- /**
- * 登录方法
- *
- * @param loginBody 登录信息
- * @return 结果
- */
- @ApiOperation("小程序微信登录")
- @PostMapping("/app/common/bindLogin")
- public AjaxResult bindLogin(@RequestBody WxLoginBody loginBody)
- {
- Map<String,Object> map = wxLoginService.login(loginBody);
- return AjaxResult.success(map);
- }
- @ApiOperation("获取用户小程序openid")
- @PostMapping("/wx/getOpenid")
- public AjaxResult<Void> 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)
- {
- log.info("loginBody:"+ JSON.toJSONString(loginBody));
- ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
- log.info("loginUser:"+ JSON.toJSONString(loginUser));
- String scanCode = loginBody.getScanCode();
- String key = "SCAN_LOGIN_"+scanCode;
- log.info("key:"+ key);
- String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录
- log.info("keyStatus:"+ keyStatus);
- 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<String,Object> 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<String,Object> map = wxLoginService.checkPcLogin(scanCode);
- return AjaxResult.success(map);
- }
- @ApiOperation("刷新登录令牌")
- @GetMapping("/refreshToken/{userAccount}")
- public AjaxResult refreshToken(@PathVariable("userAccount") String userAccount)
- {
- String token = wxLoginService.refreshToken(userAccount);
- Map<String,Object> map = new HashMap<>();
- map.put(Constants.TOKEN, token);
- return AjaxResult.success(map);
- }
- @ApiOperation("公众号分享微信参数")
- @GetMapping("/app/common/shareGzh")
- public AjaxResult shareGzh(String url)
- {
- Map<String,String> map = iWxPayService.shareGzh(url);
- return AjaxResult.success(map);
- }
- }
|