123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package com.ylx.web.controller.massage;
- import cn.hutool.json.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.ylx.common.annotation.Log;
- import com.ylx.common.constant.Constants;
- import com.ylx.common.core.controller.BaseController;
- import com.ylx.common.core.domain.R;
- import com.ylx.common.core.domain.model.WxLoginUser;
- import com.ylx.common.enums.BusinessType;
- import com.ylx.common.utils.MessageUtils;
- import com.ylx.common.utils.StringUtils;
- import com.ylx.framework.manager.AsyncManager;
- import com.ylx.framework.manager.factory.AsyncFactory;
- import com.ylx.framework.web.service.WxTokenService;
- import com.ylx.massage.domain.CouponReceive;
- import com.ylx.massage.domain.TWxUser;
- import com.ylx.massage.service.CouponReceiveService;
- import com.ylx.massage.service.TWxUserService;
- import com.ylx.massage.utils.WeChatUtil;
- import io.swagger.annotations.Api;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.*;
- import javax.annotation.Resource;
- import java.util.Map;
- /**
- * @author b16mt
- */
- @Slf4j
- @Controller
- @Api(tags = {"微信公众号sq"})
- @RequestMapping("/sq")
- public class WeSqController extends BaseController {
- private final static String ACCESS_TOKEN = "access_token";
- private final static String REFRESH_TOKEN = "refresh_token";
- private final static String OPEN_ID = "openid";
- @Resource
- private WeChatUtil weChatUtil;
- @Resource
- private TWxUserService wxUserService;
- @Resource(name = "commonAsyncExecutor")
- private ThreadPoolTaskExecutor threadPoolTaskExecutor;
- @Autowired
- private CouponReceiveService couponReceiveService;
- @Resource
- private WxTokenService wxTokenService;
- /**
- * 获取token和userInfo
- *
- * @param code 微信授权码
- * @return 访问令牌
- */
- @GetMapping("/getAccessToken")
- @Log(title = "公众号网页登录", businessType = BusinessType.OTHER)
- public R<WxLoginUser> getAccessToken(@RequestParam String code) {
- // 发送get请求获取 AccessToken
- Map<?, ?> result = weChatUtil.getAccessToken(code);
- String accessToken = result.get(ACCESS_TOKEN).toString();
- String refreshToken = result.get(REFRESH_TOKEN).toString();
- String openid = result.get(OPEN_ID).toString();
- // 如果用户是第一次进行微信公众号授权
- // 进行这一步时用户应点击了同意授权按钮
- String userInfoJsom = weChatUtil.getUserInfo(accessToken, openid);
- // 解析JSON数据
- JSONObject jsonObject = new JSONObject(userInfoJsom);
- log.info("公众号网页登录,{}",jsonObject);
- // 将用户信息保存到数据库中
- LambdaQueryWrapper<TWxUser> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
- objectLambdaQueryWrapper.eq(TWxUser::getcOpenid, openid);
- TWxUser user = wxUserService.getOne(objectLambdaQueryWrapper);
- if (user == null || StringUtils.isEmpty(user.getcNickName())) {
- if(user == null){
- user = new TWxUser();
- user.setcOpenid(openid);
- TWxUser finalUser = user;
- //异步 添加新人优惠卷
- // threadPoolTaskExecutor.submit(() -> couponReceiveService.submit(new CouponReceive().setOpenid(finalUser.getcOpenid()).setCouponId("1")));
- }
- user.setcOpenid(openid);
- user.setcNickName(jsonObject.get("nickname").toString());
- user.setcIcon(jsonObject.get("headimgurl").toString());
- user.setcSessionKey(refreshToken);
- // user.setcPhone(phoneNumber);
- wxUserService.saveOrUpdate(user);
- user.setId(user.getId());
- }
- WxLoginUser wxUser = new WxLoginUser();
- BeanUtils.copyProperties(user, wxUser);
- // 生成并返回令牌
- String token = wxTokenService.createToken(wxUser);
- if (token == null || token.isEmpty()) {
- return R.fail("生成令牌失败");
- }
- wxUser.setToken(token);
- // 返回用户信息
- // 记录登录信息
- AsyncManager.me().execute(AsyncFactory.recordLogininfor(wxUser.getCOpenid(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
- return R.ok(wxUser);
- }
- }
|