微信小程序登录接口
parent
67d665d02a
commit
1556d05f5e
@ -0,0 +1,48 @@
|
|||||||
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
import com.ruoyi.system.domain.req.GetOpenidReq;
|
||||||
|
import com.ruoyi.system.domain.req.LoginForMpReq;
|
||||||
|
import com.ruoyi.system.domain.resp.GetOpenidResp;
|
||||||
|
import com.ruoyi.system.service.IWechatService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信登录相关接口
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/wechat/login")
|
||||||
|
public class WechatLoginController {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(WechatLoginController.class);
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWechatService iWechatService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/get/openid")
|
||||||
|
public AjaxResult getWechatLoginInfo(@RequestBody GetOpenidReq getOpenidReq, HttpServletRequest request) {
|
||||||
|
logger.info("mp获取openid, req = [{}]", getOpenidReq);
|
||||||
|
|
||||||
|
GetOpenidResp resp = iWechatService.getOpenid(getOpenidReq, request);
|
||||||
|
return AjaxResult.success(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/for/mp")
|
||||||
|
public AjaxResult loginForMp(@RequestBody @Validated LoginForMpReq req) {
|
||||||
|
String token = iWechatService.loginForMp(req);
|
||||||
|
return AjaxResult.success(token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
package com.ruoyi.common.core.domain.entity;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class AccessTokenVo implements Serializable {
|
||||||
|
private static final long serialVersionUID = -4331247900203620881L;
|
||||||
|
|
||||||
|
@JSONField(name = "access_token")
|
||||||
|
private String accessToken;
|
||||||
|
|
||||||
|
@JSONField(name = "expires_in")
|
||||||
|
private Integer expiresIn;
|
||||||
|
|
||||||
|
@JSONField(name = "errcode")
|
||||||
|
private Integer errCode;
|
||||||
|
|
||||||
|
@JSONField(name = "errmsg")
|
||||||
|
private String errMsg;
|
||||||
|
|
||||||
|
@JSONField(name = "userid")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
public String getAccessToken() {
|
||||||
|
return accessToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccessToken(String accessToken) {
|
||||||
|
this.accessToken = accessToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getExpiresIn() {
|
||||||
|
return expiresIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpiresIn(Integer expiresIn) {
|
||||||
|
this.expiresIn = expiresIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getErrCode() {
|
||||||
|
return errCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrCode(Integer errCode) {
|
||||||
|
this.errCode = errCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErrMsg() {
|
||||||
|
return errMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrMsg(String errMsg) {
|
||||||
|
this.errMsg = errMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(String userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "AccessTokenVo{" +
|
||||||
|
"accessToken='" + accessToken + '\'' +
|
||||||
|
", expiresIn=" + expiresIn +
|
||||||
|
", errCode=" + errCode +
|
||||||
|
", errMsg='" + errMsg + '\'' +
|
||||||
|
", userId='" + userId + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.ruoyi.common.utils.wechat;
|
||||||
|
|
||||||
|
public class WechatKeys {
|
||||||
|
public static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
|
||||||
|
|
||||||
|
public static String MP_ACCESS_TOKEN_REDIS_KEY = "redis:mp:access:token:key";
|
||||||
|
|
||||||
|
public static String MP_CODE_TO_OPENID_URL = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.ruoyi.common.utils.wechat;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.ruoyi.common.core.domain.entity.AccessTokenVo;
|
||||||
|
import com.ruoyi.common.core.redis.RedisCache;
|
||||||
|
import com.ruoyi.common.utils.http.HttpUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class WechatUtils {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(WechatUtils.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信小程序AppID
|
||||||
|
*/
|
||||||
|
@Value("${wx.mpAppId}")
|
||||||
|
private String appId;
|
||||||
|
/**
|
||||||
|
* 微信小程序AppSecret
|
||||||
|
*/
|
||||||
|
@Value("${wx.mpSecret}")
|
||||||
|
private String appSecret;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisCache redisCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取access_token
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getMpAccessToken() {
|
||||||
|
String accessToken = redisCache.getCacheObject(WechatKeys.MP_ACCESS_TOKEN_REDIS_KEY);
|
||||||
|
if (StringUtils.isBlank(accessToken)) {
|
||||||
|
String accessTokenUrl = String.format(WechatKeys.ACCESS_TOKEN_URL, appId, appSecret);
|
||||||
|
String result = HttpUtils.sendGet(accessTokenUrl);
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||||
|
AccessTokenVo accessTokenVo = JSONObject.toJavaObject(jsonObject, AccessTokenVo.class);
|
||||||
|
if (Objects.nonNull(accessTokenVo) && StringUtils.isNotBlank(accessTokenVo.getAccessToken())) {
|
||||||
|
accessToken = accessTokenVo.getAccessToken();
|
||||||
|
redisCache.setCacheObject(WechatKeys.MP_ACCESS_TOKEN_REDIS_KEY, accessTokenVo.getAccessToken(), accessTokenVo.getExpiresIn(), TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accessToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,125 @@
|
|||||||
|
package com.ruoyi.system.domain;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class TWechatUser {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private Date lastLoginTime;
|
||||||
|
|
||||||
|
private String lastLoginIp;
|
||||||
|
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
private String mobile;
|
||||||
|
|
||||||
|
private String avatar;
|
||||||
|
|
||||||
|
private String openid;
|
||||||
|
|
||||||
|
private String unionid;
|
||||||
|
|
||||||
|
private Byte status;
|
||||||
|
|
||||||
|
private Date addTime;
|
||||||
|
|
||||||
|
private Date updateTime;
|
||||||
|
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getLastLoginTime() {
|
||||||
|
return lastLoginTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastLoginTime(Date lastLoginTime) {
|
||||||
|
this.lastLoginTime = lastLoginTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastLoginIp() {
|
||||||
|
return lastLoginIp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastLoginIp(String lastLoginIp) {
|
||||||
|
this.lastLoginIp = lastLoginIp == null ? null : lastLoginIp.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNickname(String nickname) {
|
||||||
|
this.nickname = nickname == null ? null : nickname.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMobile() {
|
||||||
|
return mobile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMobile(String mobile) {
|
||||||
|
this.mobile = mobile == null ? null : mobile.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAvatar() {
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvatar(String avatar) {
|
||||||
|
this.avatar = avatar == null ? null : avatar.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOpenid() {
|
||||||
|
return openid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpenid(String openid) {
|
||||||
|
this.openid = openid == null ? null : openid.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUnionid() {
|
||||||
|
return unionid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUnionid(String unionid) {
|
||||||
|
this.unionid = unionid == null ? null : unionid.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Byte getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(Byte status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getAddTime() {
|
||||||
|
return addTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddTime(Date addTime) {
|
||||||
|
this.addTime = addTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getUpdateTime() {
|
||||||
|
return updateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdateTime(Date updateTime) {
|
||||||
|
this.updateTime = updateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(Long userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package com.ruoyi.system.domain.req;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 用户信息
|
||||||
|
* @Author: chy
|
||||||
|
* @Date: 2022/5/24
|
||||||
|
**/
|
||||||
|
public class GetOpenidReq implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -1185015143654744140L;
|
||||||
|
|
||||||
|
private String nickName;
|
||||||
|
private String avatarUrl;
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
public String getNickName() {
|
||||||
|
return nickName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNickName(String nickName) {
|
||||||
|
this.nickName = nickName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAvatarUrl() {
|
||||||
|
return avatarUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvatarUrl(String avatarUrl) {
|
||||||
|
this.avatarUrl = avatarUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
package com.ruoyi.system.domain.req;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class LoginForMpReq implements Serializable {
|
||||||
|
private static final long serialVersionUID = -5482485655738769622L;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
private String openId;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
private String sex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出生年月日 yyyy-MM-dd
|
||||||
|
*/
|
||||||
|
private String birth;
|
||||||
|
|
||||||
|
private Integer height;
|
||||||
|
|
||||||
|
private Integer weight;
|
||||||
|
|
||||||
|
private String marriage;
|
||||||
|
|
||||||
|
private String disease;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhone() {
|
||||||
|
return phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhone(String phone) {
|
||||||
|
this.phone = phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSex() {
|
||||||
|
return sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSex(String sex) {
|
||||||
|
this.sex = sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBirth() {
|
||||||
|
return birth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBirth(String birth) {
|
||||||
|
this.birth = birth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeight(Integer height) {
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getWeight() {
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWeight(Integer weight) {
|
||||||
|
this.weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMarriage() {
|
||||||
|
return marriage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarriage(String marriage) {
|
||||||
|
this.marriage = marriage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisease() {
|
||||||
|
return disease;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDisease(String disease) {
|
||||||
|
this.disease = disease;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOpenId() {
|
||||||
|
return openId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpenId(String openId) {
|
||||||
|
this.openId = openId;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.ruoyi.system.domain.resp;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class GetOpenidResp implements Serializable {
|
||||||
|
private static final long serialVersionUID = -8328911573370172974L;
|
||||||
|
|
||||||
|
private String openid;
|
||||||
|
|
||||||
|
private Boolean bindFlag = false;
|
||||||
|
|
||||||
|
private String token;
|
||||||
|
|
||||||
|
public String getOpenid() {
|
||||||
|
return openid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpenid(String openid) {
|
||||||
|
this.openid = openid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getBindFlag() {
|
||||||
|
return bindFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBindFlag(Boolean bindFlag) {
|
||||||
|
this.bindFlag = bindFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getToken() {
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setToken(String token) {
|
||||||
|
this.token = token;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.ruoyi.system.mapper;
|
||||||
|
|
||||||
|
import com.ruoyi.system.domain.TWechatUser;
|
||||||
|
import tk.mybatis.mapper.common.Mapper;
|
||||||
|
|
||||||
|
public interface TWechatUserMapper extends Mapper<TWechatUser> {
|
||||||
|
int insert(TWechatUser record);
|
||||||
|
|
||||||
|
int insertSelective(TWechatUser record);
|
||||||
|
|
||||||
|
TWechatUser selectUserByPrimaryKey(Long id);
|
||||||
|
|
||||||
|
TWechatUser selectWechatUserByOpenid(String openid);
|
||||||
|
|
||||||
|
int updateByPrimaryKeySelective(TWechatUser record);
|
||||||
|
|
||||||
|
int updateByPrimaryKey(TWechatUser record);
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.ruoyi.system.service;
|
||||||
|
|
||||||
|
import com.ruoyi.system.domain.req.GetOpenidReq;
|
||||||
|
import com.ruoyi.system.domain.req.LoginForMpReq;
|
||||||
|
import com.ruoyi.system.domain.resp.GetOpenidResp;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
public interface IWechatService {
|
||||||
|
|
||||||
|
GetOpenidResp getOpenid(GetOpenidReq req, HttpServletRequest request);
|
||||||
|
|
||||||
|
String loginForMp(LoginForMpReq req);
|
||||||
|
}
|
@ -0,0 +1,159 @@
|
|||||||
|
package com.ruoyi.system.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||||
|
import com.ruoyi.common.core.domain.model.LoginUser;
|
||||||
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
import com.ruoyi.common.utils.http.HttpUtils;
|
||||||
|
import com.ruoyi.common.utils.ip.IpUtils;
|
||||||
|
import com.ruoyi.common.utils.wechat.WechatKeys;
|
||||||
|
import com.ruoyi.system.domain.TPatient;
|
||||||
|
import com.ruoyi.system.domain.TWechatUser;
|
||||||
|
import com.ruoyi.system.domain.req.GetOpenidReq;
|
||||||
|
import com.ruoyi.system.domain.req.LoginForMpReq;
|
||||||
|
import com.ruoyi.system.domain.resp.GetOpenidResp;
|
||||||
|
import com.ruoyi.system.mapper.TPatientMapper;
|
||||||
|
import com.ruoyi.system.mapper.TWechatUserMapper;
|
||||||
|
import com.ruoyi.system.service.IWechatService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import tk.mybatis.mapper.entity.Example;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class WechatServiceImpl implements IWechatService {
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(WechatServiceImpl.class);
|
||||||
|
/**
|
||||||
|
* 微信小程序AppID
|
||||||
|
*/
|
||||||
|
@Value("${wx.mpAppId}")
|
||||||
|
private String appId;
|
||||||
|
/**
|
||||||
|
* 微信小程序AppSecret
|
||||||
|
*/
|
||||||
|
@Value("${wx.mpSecret}")
|
||||||
|
private String appSecret;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TWechatUserMapper tWechatUserMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TPatientMapper tPatientMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserTokenService userTokenService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetOpenidResp getOpenid(GetOpenidReq req, HttpServletRequest request) {
|
||||||
|
//查询openid
|
||||||
|
String openid = queryOpenid(req);
|
||||||
|
TWechatUser wechatUser = updateWechatUser(openid, req, request);
|
||||||
|
GetOpenidResp resp = new GetOpenidResp();
|
||||||
|
if (Objects.isNull(wechatUser.getUserId())) {
|
||||||
|
resp.setBindFlag(false);
|
||||||
|
} else {
|
||||||
|
// 已绑定信息 直接登录
|
||||||
|
resp.setBindFlag(true);
|
||||||
|
TPatient tPatient = tPatientMapper.selectTPatientById(wechatUser.getUserId());
|
||||||
|
String token = buildTokenByPatient(tPatient);
|
||||||
|
resp.setToken(token);
|
||||||
|
}
|
||||||
|
resp.setOpenid(openid);
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String loginForMp(LoginForMpReq req) {
|
||||||
|
// 查询手机号是否存在患者信息
|
||||||
|
TPatient tPatient = new TPatient();
|
||||||
|
BeanUtils.copyProperties(req, tPatient);
|
||||||
|
Example examplePatient = new Example(TWechatUser.class);
|
||||||
|
Example.Criteria criteriaPatient = examplePatient.createCriteria();
|
||||||
|
criteriaPatient.andEqualTo("phone", tPatient.getPhone());
|
||||||
|
List<TPatient> tPatients = tPatientMapper.selectByExample(examplePatient);
|
||||||
|
TWechatUser wechatUser = new TWechatUser();
|
||||||
|
if (!CollectionUtils.isEmpty(tPatients)) {
|
||||||
|
// 存在 需要把患者信息更新 并绑定openid
|
||||||
|
TPatient currentPatient = tPatients.get(0);
|
||||||
|
BeanUtils.copyProperties(req, currentPatient);
|
||||||
|
tPatientMapper.updateByPrimaryKeySelective(currentPatient);
|
||||||
|
wechatUser.setUserId(currentPatient.getId());
|
||||||
|
tPatient.setId(currentPatient.getId());
|
||||||
|
} else {
|
||||||
|
// 不存在 患者信息入库
|
||||||
|
tPatient.setDelFlag("0");
|
||||||
|
tPatient.setCreateTime(new Date());
|
||||||
|
tPatient.setUpdateTime(new Date());
|
||||||
|
tPatientMapper.insertTPatient(tPatient);
|
||||||
|
wechatUser.setUserId(tPatient.getId());
|
||||||
|
}
|
||||||
|
// 绑定openid
|
||||||
|
wechatUser.setOpenid(req.getOpenId());
|
||||||
|
Example example = new Example(TWechatUser.class);
|
||||||
|
Example.Criteria criteria = example.createCriteria();
|
||||||
|
criteria.andEqualTo("openid", wechatUser.getOpenid());
|
||||||
|
tWechatUserMapper.updateByExampleSelective(wechatUser, example);
|
||||||
|
// 登录获取token
|
||||||
|
String token = buildTokenByPatient(tPatient);
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String queryOpenid(GetOpenidReq req){
|
||||||
|
String url = String.format(WechatKeys.MP_CODE_TO_OPENID_URL, appId, appSecret, req.getCode());
|
||||||
|
String json = HttpUtils.sendGet(url);
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(json);
|
||||||
|
String session_key = (String) jsonObject.get("session_key");
|
||||||
|
String openid = (String) jsonObject.get("openid");
|
||||||
|
logger.info("login openid:{},session_key:{}", openid, session_key);
|
||||||
|
if (StringUtils.isEmpty(openid)) {
|
||||||
|
throw new ServiceException("未获取到openid");
|
||||||
|
}
|
||||||
|
return openid;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TWechatUser updateWechatUser(String openid, GetOpenidReq req, HttpServletRequest request){
|
||||||
|
//查询当前微信用户是否存在
|
||||||
|
TWechatUser wechatUser = tWechatUserMapper.selectWechatUserByOpenid(openid);
|
||||||
|
if (wechatUser == null){
|
||||||
|
wechatUser = new TWechatUser();
|
||||||
|
wechatUser.setOpenid(openid);
|
||||||
|
wechatUser.setAvatar(req.getAvatarUrl());
|
||||||
|
wechatUser.setNickname(req.getNickName());
|
||||||
|
wechatUser.setLastLoginTime(new Date());
|
||||||
|
wechatUser.setLastLoginIp(IpUtils.getIpAddr(request));
|
||||||
|
wechatUser.setStatus((byte) 0);
|
||||||
|
tWechatUserMapper.insert(wechatUser);
|
||||||
|
|
||||||
|
}
|
||||||
|
wechatUser.setLastLoginTime(new Date());
|
||||||
|
wechatUser.setLastLoginIp(IpUtils.getIpAddr(request));
|
||||||
|
tWechatUserMapper.updateByPrimaryKeySelective(wechatUser);
|
||||||
|
return wechatUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildTokenByPatient(TPatient tPatient) {
|
||||||
|
if (Objects.isNull(tPatient)) {
|
||||||
|
return StringUtils.EMPTY;
|
||||||
|
}
|
||||||
|
LoginUser loginUser = new LoginUser();
|
||||||
|
loginUser.setUserId(tPatient.getId());
|
||||||
|
SysUser user = new SysUser();
|
||||||
|
user.setUserId(tPatient.getId());
|
||||||
|
user.setDelFlag(tPatient.getDelFlag());
|
||||||
|
user.setSex(tPatient.getSex());
|
||||||
|
user.setPhonenumber(tPatient.getPhone());
|
||||||
|
loginUser.setUser(user);
|
||||||
|
String token = userTokenService.createToken(loginUser);
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,180 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="com.ruoyi.system.mapper.TWechatUserMapper" >
|
||||||
|
<resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TWechatUser" >
|
||||||
|
<id column="id" property="id" jdbcType="BIGINT" />
|
||||||
|
<result column="last_login_time" property="lastLoginTime" jdbcType="TIMESTAMP" />
|
||||||
|
<result column="last_login_ip" property="lastLoginIp" jdbcType="VARCHAR" />
|
||||||
|
<result column="nickname" property="nickname" jdbcType="VARCHAR" />
|
||||||
|
<result column="mobile" property="mobile" jdbcType="VARCHAR" />
|
||||||
|
<result column="avatar" property="avatar" jdbcType="VARCHAR" />
|
||||||
|
<result column="openid" property="openid" jdbcType="VARCHAR" />
|
||||||
|
<result column="unionid" property="unionid" jdbcType="VARCHAR" />
|
||||||
|
<result column="status" property="status" jdbcType="TINYINT" />
|
||||||
|
<result column="add_time" property="addTime" jdbcType="TIMESTAMP" />
|
||||||
|
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
|
||||||
|
<result column="user_id" property="userId" jdbcType="BIGINT" />
|
||||||
|
</resultMap>
|
||||||
|
<sql id="Base_Column_List" >
|
||||||
|
id, last_login_time, last_login_ip, nickname, mobile, avatar, openid, unionid, status,
|
||||||
|
add_time, update_time, user_id
|
||||||
|
</sql>
|
||||||
|
<select id="selectUserByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
from t_wechat_user
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</select>
|
||||||
|
<insert id="insert" parameterType="com.ruoyi.system.domain.TWechatUser" >
|
||||||
|
insert into t_wechat_user (id, last_login_time, last_login_ip,
|
||||||
|
nickname, mobile, avatar,
|
||||||
|
openid, unionid, status,
|
||||||
|
add_time, update_time, user_id
|
||||||
|
)
|
||||||
|
values (#{id,jdbcType=BIGINT}, #{lastLoginTime,jdbcType=TIMESTAMP}, #{lastLoginIp,jdbcType=VARCHAR},
|
||||||
|
#{nickname,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{avatar,jdbcType=VARCHAR},
|
||||||
|
#{openid,jdbcType=VARCHAR}, #{unionid,jdbcType=VARCHAR}, #{status,jdbcType=TINYINT},
|
||||||
|
#{addTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, #{userId,jdbcType=BIGINT}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
<insert id="insertSelective" parameterType="com.ruoyi.system.domain.TWechatUser" >
|
||||||
|
insert into t_wechat_user
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides="," >
|
||||||
|
<if test="id != null" >
|
||||||
|
id,
|
||||||
|
</if>
|
||||||
|
<if test="lastLoginTime != null" >
|
||||||
|
last_login_time,
|
||||||
|
</if>
|
||||||
|
<if test="lastLoginIp != null" >
|
||||||
|
last_login_ip,
|
||||||
|
</if>
|
||||||
|
<if test="nickname != null" >
|
||||||
|
nickname,
|
||||||
|
</if>
|
||||||
|
<if test="mobile != null" >
|
||||||
|
mobile,
|
||||||
|
</if>
|
||||||
|
<if test="avatar != null" >
|
||||||
|
avatar,
|
||||||
|
</if>
|
||||||
|
<if test="openid != null" >
|
||||||
|
openid,
|
||||||
|
</if>
|
||||||
|
<if test="unionid != null" >
|
||||||
|
unionid,
|
||||||
|
</if>
|
||||||
|
<if test="status != null" >
|
||||||
|
status,
|
||||||
|
</if>
|
||||||
|
<if test="addTime != null" >
|
||||||
|
add_time,
|
||||||
|
</if>
|
||||||
|
<if test="updateTime != null" >
|
||||||
|
update_time,
|
||||||
|
</if>
|
||||||
|
<if test="userId != null" >
|
||||||
|
user_id,
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
<trim prefix="values (" suffix=")" suffixOverrides="," >
|
||||||
|
<if test="id != null" >
|
||||||
|
#{id,jdbcType=BIGINT},
|
||||||
|
</if>
|
||||||
|
<if test="lastLoginTime != null" >
|
||||||
|
#{lastLoginTime,jdbcType=TIMESTAMP},
|
||||||
|
</if>
|
||||||
|
<if test="lastLoginIp != null" >
|
||||||
|
#{lastLoginIp,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="nickname != null" >
|
||||||
|
#{nickname,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="mobile != null" >
|
||||||
|
#{mobile,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="avatar != null" >
|
||||||
|
#{avatar,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="openid != null" >
|
||||||
|
#{openid,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="unionid != null" >
|
||||||
|
#{unionid,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="status != null" >
|
||||||
|
#{status,jdbcType=TINYINT},
|
||||||
|
</if>
|
||||||
|
<if test="addTime != null" >
|
||||||
|
#{addTime,jdbcType=TIMESTAMP},
|
||||||
|
</if>
|
||||||
|
<if test="updateTime != null" >
|
||||||
|
#{updateTime,jdbcType=TIMESTAMP},
|
||||||
|
</if>
|
||||||
|
<if test="userId != null" >
|
||||||
|
#{userId,jdbcType=BIGINT},
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
<update id="updateByPrimaryKeySelective" parameterType="com.ruoyi.system.domain.TWechatUser" >
|
||||||
|
update t_wechat_user
|
||||||
|
<set >
|
||||||
|
<if test="lastLoginTime != null" >
|
||||||
|
last_login_time = #{lastLoginTime,jdbcType=TIMESTAMP},
|
||||||
|
</if>
|
||||||
|
<if test="lastLoginIp != null" >
|
||||||
|
last_login_ip = #{lastLoginIp,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="nickname != null" >
|
||||||
|
nickname = #{nickname,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="mobile != null" >
|
||||||
|
mobile = #{mobile,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="avatar != null" >
|
||||||
|
avatar = #{avatar,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="openid != null" >
|
||||||
|
openid = #{openid,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="unionid != null" >
|
||||||
|
unionid = #{unionid,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="status != null" >
|
||||||
|
status = #{status,jdbcType=TINYINT},
|
||||||
|
</if>
|
||||||
|
<if test="addTime != null" >
|
||||||
|
add_time = #{addTime,jdbcType=TIMESTAMP},
|
||||||
|
</if>
|
||||||
|
<if test="updateTime != null" >
|
||||||
|
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
||||||
|
</if>
|
||||||
|
<if test="userId != null" >
|
||||||
|
user_id = #{userId,jdbcType=BIGINT},
|
||||||
|
</if>
|
||||||
|
</set>
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
<update id="updateByPrimaryKey" parameterType="com.ruoyi.system.domain.TWechatUser" >
|
||||||
|
update t_wechat_user
|
||||||
|
set last_login_time = #{lastLoginTime,jdbcType=TIMESTAMP},
|
||||||
|
last_login_ip = #{lastLoginIp,jdbcType=VARCHAR},
|
||||||
|
nickname = #{nickname,jdbcType=VARCHAR},
|
||||||
|
mobile = #{mobile,jdbcType=VARCHAR},
|
||||||
|
avatar = #{avatar,jdbcType=VARCHAR},
|
||||||
|
openid = #{openid,jdbcType=VARCHAR},
|
||||||
|
unionid = #{unionid,jdbcType=VARCHAR},
|
||||||
|
status = #{status,jdbcType=TINYINT},
|
||||||
|
add_time = #{addTime,jdbcType=TIMESTAMP},
|
||||||
|
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
||||||
|
user_id = #{userId,jdbcType=BIGINT}
|
||||||
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<select id="selectWechatUserByOpenid" resultMap="BaseResultMap" parameterType="java.lang.String" >
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
from t_wechat_user
|
||||||
|
where openid = #{openid,jdbcType=VARCHAR}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue