From b90ca3738d572251bb3b957c36f9055d17031388 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 11 Apr 2019 17:43:47 +0800 Subject: [PATCH] =?UTF-8?q?[cUser=E5=90=8C=E6=AD=A5][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E6=A3=80=E6=9F=A5unionId=E6=98=AF=E5=90=A6=E5=B7=B2=E6=9C=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxUserGrantController.java | 36 +++++++-- .../com/iformall/service/WxCUserService.java | 18 +++++ .../service/impl/WxCUserServiceImpl.java | 73 +++++++++++++++++++ 3 files changed, 122 insertions(+), 5 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 96525b021..e61303310 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -76,6 +76,9 @@ public class WxUserGrantController extends BaseController { @Autowired WxAppinfoService wxAppinfoService; + @Autowired + WxAuthorizerInfoService wxAuthorizerInfoService; + @Autowired private FmOpenService openService; @@ -113,16 +116,23 @@ public class WxUserGrantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "code不能为空"); } - // 通过appinfo得到tenant_id - WxAppinfo wxAppinfo = getAppInfo(appId); - if(wxAppinfo == null) { + // 通过authorizerInfo得到tenant_id + WxAuthorizerInfo wxAuthorizerInfo = null; + WxAppinfo wxAppinfo = null; + WxMaService wxMaService = null; + + wxAuthorizerInfo = wxAuthorizerInfoService.getByAppId(appId); + if(wxAuthorizerInfo == null) { return new ResultData(ErrorCode.APP_ID_NOT_FOUND); } - WxMaService wxMaService = null; if(isFmOpen) { wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); } else { + wxAppinfo = getAppInfo(appId); + if(wxAppinfo == null) { + return new ResultData(ErrorCode.APP_ID_NOT_FOUND); + } wxMaService = getWeappServiceByAppInfo(wxAppinfo); if(StringUtils.isBlank(wxAppinfo.getAccessToken())) { @@ -163,7 +173,7 @@ public class WxUserGrantController extends BaseController { String ipaddress = IPUtil.getIpAddr(request); WxCUser user = new WxCUser(); - user.setTenantId(wxAppinfo.getTenantId()); + user.setTenantId(wxAuthorizerInfo.getTenantId()); user.setAppId(appId); user.setOpenId(openId); if(StringUtils.isNotBlank(unionId)) { @@ -172,6 +182,16 @@ public class WxUserGrantController extends BaseController { int score = 0; try { WxCUser user1 = wxCUserService.getByOpenId(user); + boolean bFoundByUnionId = false; + if(user1 == null && StringUtils.isNotBlank(unionId)) { + WxCUser userQ = new WxCUser(); + userQ.setTenantId(wxAuthorizerInfo.getTenantId()); + userQ.setUnionId(unionId); + user1 = wxCUserService.getByObject(userQ); + if(user1 != null) { + bFoundByUnionId = true; + } + } if (user1 != null) { token = user1.createToken(new Date()); @@ -181,9 +201,15 @@ public class WxUserGrantController extends BaseController { user1.setRegisterIp(ipaddress); user1.setSessionKey(session_key); + if(bFoundByUnionId) { + user1.setOpenId(openId); + } if(StringUtils.isNotBlank(unionId)) { user1.setUnionId(unionId); } + if(StringUtils.isNotBlank(wxAuthorizerInfo.getOpenAppid())) { + user1.setOpenAppId(wxAuthorizerInfo.getOpenAppid()); + } if (user1.getSceneAddress() == null || user1.getSceneAddress().equals("undefined")) user1.setSceneAddress(sceneAddress); if (user1.getScene() == null || user1.getScene().equals("undefined")) diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java index 4a2a719e7..572ed9991 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java @@ -2,7 +2,9 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.domain.po.WxCUser; +import me.chanjar.weixin.mp.bean.result.WxMpUser; public interface WxCUserService { @@ -32,6 +34,14 @@ public interface WxCUserService { */ WxCUser getByOpenId(WxCUser record); + /** + * 根据object获得实体 + * + * @param record + * @return + */ + WxCUser getByObject(WxCUser record); + /** * 保存或更新实体 * @@ -39,6 +49,14 @@ public interface WxCUserService { */ int saveOrUpdate(WxCUser record); + /** + * 保存或更新实体 + * + * @param mpUser + * @param authorizerInfo + */ + int saveOrUpdateMpUser(WxMpUser mpUser, WxAuthorizerInfo authorizerInfo); + /** * 根据Id删除实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java index 6e05c67af..2a63e9f27 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java @@ -4,9 +4,12 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.domain.po.WxCUser; +import com.iformall.enums.EnumAppType; import com.iformall.mapper.WxCUserMapper; import com.iformall.service.WxCUserService; +import me.chanjar.weixin.mp.bean.result.WxMpUser; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,6 +40,16 @@ public class WxCUserServiceImpl implements WxCUserService { return wxCUserMapper.findByOpenId(record); } + @Override + public WxCUser getByObject(WxCUser record) { + try { + return wxCUserMapper.selectOne(record); + } catch (Exception e) { + logger.error("NOT found: " + e.getMessage()); + } + return null; + } + @Override public int saveOrUpdate(WxCUser user) { int ret = 0; @@ -67,6 +80,66 @@ public class WxCUserServiceImpl implements WxCUserService { return ret; } + @Override + public int saveOrUpdateMpUser(WxMpUser mpUser, WxAuthorizerInfo authorizerInfo) { + // 1. check user exist + WxCUser userQ = new WxCUser(); + userQ.setTenantId(authorizerInfo.getTenantId()); + boolean bHaveUnionId = false; + if(StringUtils.isNotBlank(mpUser.getUnionId())) { + userQ.setUnionId(mpUser.getUnionId()); + bHaveUnionId = true; + } else { + userQ.setOpenAppId(authorizerInfo.getOpenAppid()); + if(authorizerInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpOpenId(mpUser.getOpenId()); + userQ.setMpAppId(authorizerInfo.getAuthorizerAppid()); + } else if(authorizerInfo.getType().equals(EnumAppType.MP_P.getCode())) { + userQ.setSubsOpenId(mpUser.getOpenId()); + userQ.setSubsAppId(authorizerInfo.getAuthorizerAppid()); + } + } + WxCUser oldUser = getByObject(userQ); + boolean bHave = false; + if(oldUser != null) { + userQ.setId(oldUser.getId()); + bHave = true; + } + if(!bHave && !mpUser.getSubscribe()) { + // 未找到,且是关注消息, 直接返回 + return 0; + } + if(bHaveUnionId) { + userQ.setOpenAppId(authorizerInfo.getOpenAppid()); + if (authorizerInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpOpenId(mpUser.getOpenId()); + userQ.setMpAppId(authorizerInfo.getAuthorizerAppid()); + } else if (authorizerInfo.getType().equals(EnumAppType.MP_P.getCode())) { + userQ.setSubsOpenId(mpUser.getOpenId()); + userQ.setSubsAppId(authorizerInfo.getAuthorizerAppid()); + } + } + if(((oldUser != null && StringUtils.isBlank(oldUser.getNickName())) || (oldUser == null)) + && StringUtils.isNotBlank(mpUser.getNickname())) { + userQ.setNickName(mpUser.getNickname()); + userQ.setGender(mpUser.getSex()); + userQ.setAvatarUrl(mpUser.getHeadImgUrl()); + userQ.setCity(mpUser.getCity()); + userQ.setProvince(mpUser.getProvince()); + userQ.setLanguage(mpUser.getLanguage()); + } + if(authorizerInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpSubscribe(mpUser.getSubscribe()?1:0); + userQ.setMpSubscribeScene(mpUser.getSubscribeScene()); + userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime())); + } else if(authorizerInfo.getType().equals(EnumAppType.MP_P.getCode())) { + userQ.setSubsSubscribe(mpUser.getSubscribe()?1:0); + userQ.setSubsSubscribeScene(mpUser.getSubscribeScene()); + userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime())); + } + return saveOrUpdate(userQ); + } + @Override public void deleteById(Long id) { wxCUserMapper.deleteByPrimaryKey(id);