Browse Source

opt: 微信登录重构

master
Yen 10 months ago
parent
commit
c9186d8c93
  1. 2
      src/main/java/com/qs/serve/common/model/enums/HttpCode.java
  2. 88
      src/main/java/com/qs/serve/modules/ums/entity/UmsMember.java
  3. 14
      src/main/java/com/qs/serve/modules/ums/mapper/UmsMemberMapper.java
  4. 14
      src/main/java/com/qs/serve/modules/ums/service/UmsMemberService.java
  5. 22
      src/main/java/com/qs/serve/modules/ums/service/impl/UmsMemberServiceImpl.java
  6. 7
      src/main/java/com/qs/serve/modules/wx/api/WxSvcLoginApi.java
  7. 21
      src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java
  8. 11
      src/main/java/com/qs/serve/modules/wx/common/consts/WxUserTypeConst.java
  9. 8
      src/main/java/com/qs/serve/modules/wx/entity/WxUser.java
  10. 2
      src/main/java/com/qs/serve/modules/wx/entity/dto/WxLoginUser.java
  11. 2
      src/main/java/com/qs/serve/modules/wx/service/WxUserService.java
  12. 62
      src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java

2
src/main/java/com/qs/serve/common/model/enums/HttpCode.java

@ -15,7 +15,7 @@ public enum HttpCode {
/** 基本参数 */ /** 基本参数 */
SUCCESS(200,"操作成功"), SUCCESS(200,"操作成功"),
ERROR(500,"操作失败"), ERROR(500,"操作失败"),
DEV_ERR(500,"部分功能开发中..."), DEV_ERR(500,"功能开发中..."),
WX_ERR(500,"微信服务调用异常"), WX_ERR(500,"微信服务调用异常"),
LOGIN_ERR(401,"登录信息已过期或失效"), LOGIN_ERR(401,"登录信息已过期或失效"),

88
src/main/java/com/qs/serve/modules/ums/entity/UmsMember.java

@ -0,0 +1,88 @@
package com.qs.serve.modules.ums.entity;
import java.time.LocalDate;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 实体类
* @author YenHex
* @since 2024-09-12
*/
@Data
@TableName("ums_member")
public class UmsMember implements Serializable {
private static final long serialVersionUID = 1L;
/** id */
@TableId(type = IdType.AUTO)
private Long id;
/** 姓名 */
@Length(max = 255,message = "姓名长度不能超过255字")
private String name;
/** 手机号 */
@Length(max = 255,message = "手机号长度不能超过255字")
private String mobile;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/** 创建人 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 更新时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/** 更新人 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
/** 租户id */
@JsonIgnore
@JsonProperty
private String tenantId;
/** 删除标识 */
@JsonIgnore
@JsonProperty
private Boolean delFlag;
public static UmsMember toNewObject(UmsMember source){
UmsMember member = new UmsMember();
member.setId(source.getId());
member.setName(source.getName());
member.setMobile(source.getMobile());
member.setCreateTime(source.getCreateTime());
member.setCreateBy(source.getCreateBy());
member.setUpdateTime(source.getUpdateTime());
member.setUpdateBy(source.getUpdateBy());
member.setTenantId(source.getTenantId());
member.setDelFlag(source.getDelFlag());
return member;
}
}

14
src/main/java/com/qs/serve/modules/ums/mapper/UmsMemberMapper.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.ums.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.ums.entity.UmsMember;
/**
* Mapper
* @author YenHex
* @date 2024-09-12
*/
public interface UmsMemberMapper extends BaseMapper<UmsMember> {
}

14
src/main/java/com/qs/serve/modules/ums/service/UmsMemberService.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.ums.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.ums.entity.UmsMember;
/**
* 服务接口
* @author YenHex
* @date 2024-09-12
*/
public interface UmsMemberService extends IService<UmsMember> {
}

22
src/main/java/com/qs/serve/modules/ums/service/impl/UmsMemberServiceImpl.java

@ -0,0 +1,22 @@
package com.qs.serve.modules.ums.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.ums.entity.UmsMember;
import com.qs.serve.modules.ums.service.UmsMemberService;
import com.qs.serve.modules.ums.mapper.UmsMemberMapper;
/**
* 用户服务实现类
* @author YenHex
* @since 2024-09-12
*/
@Slf4j
@Service
@AllArgsConstructor
public class UmsMemberServiceImpl extends ServiceImpl<UmsMemberMapper,UmsMember> implements UmsMemberService {
}

7
src/main/java/com/qs/serve/modules/wx/api/WxSvcLoginApi.java

@ -125,11 +125,12 @@ public class WxSvcLoginApi {
//后台管理员信息 //后台管理员信息
Map<String,Object> tokenMap = new HashMap<>(10); Map<String,Object> tokenMap = new HashMap<>(10);
String client = "wx_app"; String client = "wx_app";
String redisKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_APP,client, wxUser.getSysUserId()); String redisKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_APP,client, wxUser.getUserId());
String pctoken = JwtUtils.generateToken(wxUser.getSysUserId(),loginUser.getTypeFlag(),client); String pctoken = JwtUtils.generateToken(wxUser.getUserId(),loginUser.getTypeFlag(),client);
redisService.set(redisKey,pctoken); redisService.set(redisKey,pctoken);
tokenMap.put("token", pctoken); tokenMap.put("token", pctoken);
tokenMap.put("userId", wxUser.getSysUserId()); tokenMap.put("userType", wxUser.getUserType());
tokenMap.put("userId", wxUser.getUserId());
tokenMap.put("IP", loginUser.getLoginIp()); tokenMap.put("IP", loginUser.getLoginIp());
tokenMap.put("loginType",client); tokenMap.put("loginType",client);
tokenMap.put("client",client); tokenMap.put("client",client);

21
src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java

@ -17,6 +17,9 @@ import com.qs.serve.modules.sys.entity.dto.SysUserVo;
import com.qs.serve.modules.sys.mapper.SysMenuMapper; import com.qs.serve.modules.sys.mapper.SysMenuMapper;
import com.qs.serve.modules.sys.service.SysRoleService; import com.qs.serve.modules.sys.service.SysRoleService;
import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.ums.entity.UmsMember;
import com.qs.serve.modules.ums.mapper.UmsMemberMapper;
import com.qs.serve.modules.wx.common.consts.WxUserTypeConst;
import com.qs.serve.modules.wx.entity.WxUser; import com.qs.serve.modules.wx.entity.WxUser;
import com.qs.serve.modules.wx.entity.dto.WxPhoneBindParam; import com.qs.serve.modules.wx.entity.dto.WxPhoneBindParam;
import com.qs.serve.modules.wx.service.WxUserService; import com.qs.serve.modules.wx.service.WxUserService;
@ -46,6 +49,7 @@ public class WxSvcUserApi {
private SysUserDetailsServiceImpl userDetailsService; private SysUserDetailsServiceImpl userDetailsService;
private SysRoleService sysRoleService; private SysRoleService sysRoleService;
private final SysMenuMapper sysMenuMapper; private final SysMenuMapper sysMenuMapper;
private final UmsMemberMapper umsMemberMapper;
/** /**
* 用户信息 * 用户信息
@ -54,8 +58,9 @@ public class WxSvcUserApi {
public R<?> info(){ public R<?> info(){
WxUser wxUser = wxUserService.getCurrentWxUser(true); WxUser wxUser = wxUserService.getCurrentWxUser(true);
SysUserVo sysUserVo = null; SysUserVo sysUserVo = null;
if(StringUtils.hasText(wxUser.getSysUserId())){ if(wxUser.getUserType().equals(WxUserTypeConst.SYS_USER)
SysUser sysUser = sysUserService.getById(wxUser.getSysUserId()); &&StringUtils.hasText(wxUser.getUserId())){
SysUser sysUser = sysUserService.getById(wxUser.getUserId());
if(sysUser!=null){ if(sysUser!=null){
// 解决H5页面权限不刷新 // 解决H5页面权限不刷新
List<SysRole> defaultRole = sysRoleService.getDefaultRole(); List<SysRole> defaultRole = sysRoleService.getDefaultRole();
@ -69,12 +74,15 @@ public class WxSvcUserApi {
sysUser.setAuthorList(userDetails.getAuthorList()); sysUser.setAuthorList(userDetails.getAuthorList());
sysUserVo = sysUser.toSysUserVo(false); sysUserVo = sysUser.toSysUserVo(false);
} }
}else if (wxUser.getUserType().equals(WxUserTypeConst.SYS_USER)
&&StringUtils.hasText(wxUser.getUserId())){
UmsMember member = umsMemberMapper.selectById(wxUser.getUserId());
wxUser.setMemberInfo(member);
} }
if(wxUser.getAppType()!=null&&wxUser.getAppType().equals(3)){ if(wxUser.getAppType()!=null&&wxUser.getAppType().equals(3)){
//企业微信转化为公众号用户 //企业微信转化为公众号用户
WxUser wxUser1 = wxUserService.getOne(new LambdaQueryWrapper<WxUser>() WxUser wxUser1 = wxUserService.getOne(new LambdaQueryWrapper<WxUser>()
.eq(WxUser::getSysUserId,wxUser.getSysUserId()) .eq(WxUser::getUserId,wxUser.getUserId())
.eq(WxUser::getAppType,2),false); .eq(WxUser::getAppType,2),false);
if(wxUser1==null){ if(wxUser1==null){
Assert.throwEx("请前往公众号绑定信息"); Assert.throwEx("请前往公众号绑定信息");
@ -133,8 +141,9 @@ public class WxSvcUserApi {
WxUser wxUser = wxUserService.getCurrentWxUser(); WxUser wxUser = wxUserService.getCurrentWxUser();
wxUser.setPhone(param.getPhone()); wxUser.setPhone(param.getPhone());
wxUser.setEmpName(sysUser.getName()); wxUser.setEmpName(sysUser.getName());
wxUser.setSysUserId(sysUser.getId()); wxUser.setUserType(WxUserTypeConst.SYS_USER);
wxUser.setSysUserCode(sysUser.getCode()); wxUser.setUserId(sysUser.getId());
wxUser.setUserCode(sysUser.getCode());
wxUserService.updateById(wxUser); wxUserService.updateById(wxUser);
//便于多设备登陆 //便于多设备登陆
redisService.remove(key); redisService.remove(key);

11
src/main/java/com/qs/serve/modules/wx/common/consts/WxUserTypeConst.java

@ -0,0 +1,11 @@
package com.qs.serve.modules.wx.common.consts;
/**
* 微信字段
* @author YenHex
* @since 2022/3/7
*/
public interface WxUserTypeConst {
String SYS_USER = "user";
String UMS_MEMBER = "member";
}

8
src/main/java/com/qs/serve/modules/wx/entity/WxUser.java

@ -30,8 +30,9 @@ public class WxUser implements Serializable {
@NotNull(message = "公众号配置ID、小程序AppID不能为空") @NotNull(message = "公众号配置ID、小程序AppID不能为空")
private String appId; private String appId;
private String sysUserId; private String userType;
private String sysUserCode; private String userId;
private String userCode;
/** 应用类型【1->小程序;2->公众号】 */ /** 应用类型【1->小程序;2->公众号】 */
private Integer appType; private Integer appType;
@ -149,5 +150,8 @@ public class WxUser implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private Object sysUserInfo; private Object sysUserInfo;
@TableField(exist = false)
private Object memberInfo;
} }

2
src/main/java/com/qs/serve/modules/wx/entity/dto/WxLoginUser.java

@ -11,6 +11,8 @@ import javax.validation.constraints.NotNull;
@Data @Data
public class WxLoginUser { public class WxLoginUser {
private String userType;
@NotNull @NotNull
private String code; private String code;

2
src/main/java/com/qs/serve/modules/wx/service/WxUserService.java

@ -45,7 +45,7 @@ public interface WxUserService extends IService<WxUser> {
@Deprecated @Deprecated
WxUser getByOpenId(String openId); WxUser getByOpenId(String openId);
WxUser getByOpenId(String appId,String openId); WxUser getByOpenId(String appId,String openId,String userType);
} }

62
src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java

@ -12,9 +12,12 @@ import com.qs.serve.common.model.enums.HttpCode;
import com.qs.serve.common.util.*; import com.qs.serve.common.util.*;
import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.mapper.SysUserMapper; import com.qs.serve.modules.sys.mapper.SysUserMapper;
import com.qs.serve.modules.ums.entity.UmsMember;
import com.qs.serve.modules.ums.mapper.UmsMemberMapper;
import com.qs.serve.modules.wx.common.conf.WxCpConfig; import com.qs.serve.modules.wx.common.conf.WxCpConfig;
import com.qs.serve.modules.wx.common.conf.WxMpConfig; import com.qs.serve.modules.wx.common.conf.WxMpConfig;
import com.qs.serve.modules.wx.common.consts.WxStatusConst; import com.qs.serve.modules.wx.common.consts.WxStatusConst;
import com.qs.serve.modules.wx.common.consts.WxUserTypeConst;
import com.qs.serve.modules.wx.entity.WxApp; import com.qs.serve.modules.wx.entity.WxApp;
import com.qs.serve.modules.wx.entity.WxUser; import com.qs.serve.modules.wx.entity.WxUser;
import com.qs.serve.modules.wx.entity.dto.WxLoginUser; import com.qs.serve.modules.wx.entity.dto.WxLoginUser;
@ -71,6 +74,8 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
@Autowired @Autowired
private SysUserMapper sysUserMapper; private SysUserMapper sysUserMapper;
@Autowired
private UmsMemberMapper umsMemberMapper;
private List<String> getOpenIds(WxMpUserService wxMpUserService,String nextOpenId){ private List<String> getOpenIds(WxMpUserService wxMpUserService,String nextOpenId){
WxMpUserList wxMpUserList = null; WxMpUserList wxMpUserList = null;
@ -147,14 +152,16 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
@Override @Override
public List<WxUser> getBySysUserId(String userId) { public List<WxUser> getBySysUserId(String userId) {
LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>();
lqw.eq(WxUser::getSysUserId,userId); lqw.eq(WxUser::getUserId,userId);
lqw.eq(WxUser::getUserType, WxUserTypeConst.SYS_USER);
return this.list(lqw); return this.list(lqw);
} }
@Override @Override
public WxUser getByCurrSysUserId(String userId) { public WxUser getByCurrSysUserId(String userId) {
LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>();
lqw.eq(WxUser::getSysUserId,userId); lqw.eq(WxUser::getUserId,userId);
lqw.eq(WxUser::getUserType, WxUserTypeConst.SYS_USER);
lqw.eq(WxUser::getAppId,AuthContextUtils.getAppId(false)); lqw.eq(WxUser::getAppId,AuthContextUtils.getAppId(false));
return this.getOne(lqw,false); return this.getOne(lqw,false);
} }
@ -162,7 +169,8 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
@Override @Override
public List<WxUser> getBySysUserIds(List<String> userIds) { public List<WxUser> getBySysUserIds(List<String> userIds) {
LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>();
lqw.in(WxUser::getSysUserId,userIds); lqw.eq(WxUser::getUserType, WxUserTypeConst.SYS_USER);
lqw.in(WxUser::getUserId,userIds);
return this.list(lqw); return this.list(lqw);
} }
@ -170,6 +178,7 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
public WxUser login(WxLoginUser wxLoginUser, HttpServletRequest request){ public WxUser login(WxLoginUser wxLoginUser, HttpServletRequest request){
String code = wxLoginUser.getCode(); String code = wxLoginUser.getCode();
String appId = AuthContextUtils.getAppId(); String appId = AuthContextUtils.getAppId();
String userType = wxLoginUser.getUserType();
String agentIdStr = request.getHeader("agentId"); String agentIdStr = request.getHeader("agentId");
WxApp wxApp = wxAppService.getById(appId); WxApp wxApp = wxAppService.getById(appId);
WxUser wxUser = null; WxUser wxUser = null;
@ -201,11 +210,13 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
if(wxCpUserDetail==null||wxCpUser==null){ if(wxCpUserDetail==null||wxCpUser==null){
Assert.throwEx("企业微信登录失败"); Assert.throwEx("企业微信登录失败");
} }
//嘉士利默认userId是员工号
String userId = wxCpUserDetail.getUserId(); String userId = wxCpUserDetail.getUserId();
wxUser = this.getByOpenId(appId,userId); wxUser = this.getByOpenId(appId,userId,userType);
if(wxUser == null){ if(wxUser == null){
wxUser = new WxUser(); wxUser = new WxUser();
wxUser.setAppId(wxApp.getId()); wxUser.setAppId(wxApp.getId());
wxUser.setUserType(userType);
wxUser.setAppType(wxApp.getAppType()); wxUser.setAppType(wxApp.getAppType());
wxUser.setNickName(wxCpUser.getName()); wxUser.setNickName(wxCpUser.getName());
wxUser.setEmpName(wxCpUser.getName()); wxUser.setEmpName(wxCpUser.getName());
@ -213,24 +224,28 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
wxUser.setOpenId(userId); wxUser.setOpenId(userId);
wxUser.setHeadimgUrl(wxCpUserDetail.getAvatar()); wxUser.setHeadimgUrl(wxCpUserDetail.getAvatar());
} }
//通过手机号绑定员工号 if(userType.equals(WxUserTypeConst.SYS_USER)){
//if(StringUtils.hasText(wxCpUser.getMobile())){ //通过手机号绑定员工号
//List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>() List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getCode,userId));
// .eq(SysUser::getMobile,wxCpUser.getMobile())); if(sysUsers.size()>0){
List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getCode,userId)); if(sysUsers.size()>1){
if(sysUsers.size()>0){ log.error("企业微信登录,员工号出现重复:{}",userId);
if(sysUsers.size()>1){ }
//log.error("企业微信登录,一个号码被多人使用:{}",wxCpUser.getMobile()); SysUser sysUser = sysUsers.get(0);
log.error("企业微信登录,员工号出现重复:{}",userId); wxUser.setUserId(sysUser.getId());
wxUser.setUserCode(sysUser.getCode());
wxUser.setEmpName(sysUser.getName());
wxUser.setPhone(sysUser.getMobile());
}else {
Assert.throwEx("CMS未收录该员工号["+userId+"]");
}
}else if (userType.equals(WxUserTypeConst.UMS_MEMBER)){
if(wxUser.getId()==null){
//生成member
UmsMember member = new UmsMember();
umsMemberMapper.insert(member);
wxUser.setUserId(member.getId().toString());
} }
SysUser sysUser = sysUsers.get(0);
wxUser.setSysUserId(sysUser.getId());
wxUser.setSysUserCode(sysUser.getCode());
wxUser.setEmpName(sysUser.getName());
wxUser.setPhone(sysUser.getMobile());
}else {
//Assert.throwEx("CMS未收录该手机号["+wxCpUser.getMobile()+"]");
Assert.throwEx("CMS未收录该员工号["+userId+"]");
} }
if(wxUser.getId()==null){ if(wxUser.getId()==null){
save(wxUser); save(wxUser);
@ -247,7 +262,7 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
log.debug("auth2AccessToken:{}",auth2AccessToken.getAccessToken()); log.debug("auth2AccessToken:{}",auth2AccessToken.getAccessToken());
WxOAuth2UserInfo auth2UserInfo = auth2Service.getUserInfo(auth2AccessToken, GySysConst.LANG_ZH_CN); WxOAuth2UserInfo auth2UserInfo = auth2Service.getUserInfo(auth2AccessToken, GySysConst.LANG_ZH_CN);
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(auth2UserInfo.getOpenid(), GySysConst.LANG_ZH_CN); WxMpUser wxMpUser = wxMpService.getUserService().userInfo(auth2UserInfo.getOpenid(), GySysConst.LANG_ZH_CN);
wxUser = this.getByOpenId(appId,auth2UserInfo.getOpenid()); wxUser = this.getByOpenId(appId,auth2UserInfo.getOpenid(),userType);
if(wxUser == null){ if(wxUser == null){
wxUser = new WxUser(); wxUser = new WxUser();
wxUser.setAppId(wxApp.getId()); wxUser.setAppId(wxApp.getId());
@ -291,10 +306,11 @@ public class WxUserServiceImpl extends ServiceImpl<WxUserMapper, WxUser> impleme
} }
@Override @Override
public WxUser getByOpenId(String appId, String openId) { public WxUser getByOpenId(String appId, String openId,String userType) {
LambdaQueryWrapper<WxUser> wxUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WxUser> wxUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
wxUserLambdaQueryWrapper.eq(WxUser::getOpenId,openId); wxUserLambdaQueryWrapper.eq(WxUser::getOpenId,openId);
wxUserLambdaQueryWrapper.eq(WxUser::getAppId,appId); wxUserLambdaQueryWrapper.eq(WxUser::getAppId,appId);
wxUserLambdaQueryWrapper.eq(WxUser::getUserType,userType);
return getOne(wxUserLambdaQueryWrapper,false); return getOne(wxUserLambdaQueryWrapper,false);
} }
} }

Loading…
Cancel
Save