From d4f6d9632d5405a0153b124c5047b82efbd26649 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期三, 24 五月 2023 11:21:20 +0800
Subject: [PATCH] 用户重构

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java |  195 ++++++++++++++++++++++--------------------------
 1 files changed, 91 insertions(+), 104 deletions(-)

diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
index 6225e26..f78db0a 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -7,10 +7,10 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.bean.BeanUtils;
 import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.member.domain.dto.*;
 import com.ruoyi.member.domain.pojo.member.MemberNurse;
@@ -19,6 +19,8 @@
 import com.ruoyi.member.service.member.MemberNurseService;
 import com.ruoyi.member.service.member.MemberService;
 import com.ruoyi.member.util.HttpUtils;
+import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto;
+import com.ruoyi.system.api.domain.vo.AppMiniRegisterVo;
 import com.ruoyi.system.api.service.RemoteConfigService;
 import com.ruoyi.system.api.service.RemoteOrderService;
 import com.ruoyi.system.api.service.RemoteShopService;
@@ -91,6 +93,9 @@
     @Resource
     private RemoteConfigService remoteConfigService;
 
+    @Resource
+    private RedisService redisService;
+
     /**
      * @description: TODO
      * @author jqs34
@@ -129,48 +134,15 @@
             sessionKey = session.getSessionKey();
             //获取用户
             Member member = memberMapper.getOneByMiniOpenid(openid);
-            SysUser sysUser;
-            if(member==null){
-                //创建新用户
-                String memberId = IdUtils.simpleUUID();
-                sysUser = new SysUser();
-                sysUser.setUserName(memberId);
-                sysUser.setUserType("03");
-                sysUser.setNickName("鸿瑞堂用户");
-                sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
-                String password = "hongruitang";
-                sysUser.setPassword(SecurityUtils.encryptPassword(password));
-                sysUser = sysUserService.registerUser(sysUser).getData();
-                log.info("sysUser1-----------------"+sysUser.toString());
-                member = new Member();
-                member.setUserId(sysUser.getUserId());
-                member.setDelFlag(0);
-                member.setNickName("鸿瑞堂用户");
-                member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
-                member.setMemberId(memberId);
-                member.setRelationShopId(1L);
-                member.setWxUnionid(unionid);
-                member.setMiniOpenid(openid);
-                member.setBindingFlag(0);
-                member.setCreateTime(new Date());
-                log.info("member-----------------"+member.toString());
-                this.saveOrUpdate(member);
-
-            }else{
-                log.info("member2"+member.toString());
-                R<SysUser> sysUser1 = sysUserService.getSysUser(member.getUserId());
-                log.info("sysUser1"+ sysUser1.getCode() + " : " + sysUser1.getMsg());
-                sysUser = sysUser1.getData();
-                log.info("sysUser"+sysUser.toString());
+            SysUser sysUser = null;
+            if(member!=null){
+                sysUser = sysUserService.getSysUser(member.getUserId()).getData();
             }
             appMiniLoginVo.setMiniOpenid(openid);
             appMiniLoginVo.setWxUnionid(unionid);
             appMiniLoginVo.setSysUser(sysUser);
             appMiniLoginVo.setSessionKey(sessionKey);
-            stringRedisTemplate.opsForValue().set(SecurityConstant.SESSION_KEY+openid,sessionKey);
-        }else{
-            log.info("null");
-            return null;
+            redisService.setCacheObject(SecurityConstant.SESSION_KEY+openid,sessionKey,1L,TimeUnit.DAYS);
         }
         log.info("appMiniLoginVo"+appMiniLoginVo.toString());
         return appMiniLoginVo;
@@ -178,77 +150,92 @@
 
     /**
      * 获取授权信息
-     * @param appUserAuthorizeDto
+     * @param appUserRegisterDto
      * @return
      */
     @Override
-    public AppUserAuthorizeVo getAppUserAuthorize(AppUserAuthorizeDto appUserAuthorizeDto){
-        Member member = this.getById(appUserAuthorizeDto.getUserId());
-        AppUserAuthorizeVo appUserAuthorizeVo = new AppUserAuthorizeVo();
+    public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto){
+        AppMiniRegisterVo appUserRegisterVo = new AppMiniRegisterVo();
         String mobile = null;
-        if(StringUtils.isBlank(member.getMobile())){
-            //获取code接口在redis里存放的sessionkey用于解密
-            String sessionkey = stringRedisTemplate.opsForValue().get(SecurityConstant.SESSION_KEY+ member.getMiniOpenid());
-            if(StringUtils.isBlank(sessionkey)){
-                throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
-            }
-            try {
-                String accessToken = stringRedisTemplate.opsForValue().get("wx_access_token");
-                if (StringUtils.isBlank(accessToken)) {
-                    String responseAccessToken = getAccessTokenByWX();
-                    JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
-                    accessToken = jsonAccessToken.getString("access_token");
-                    String errmsg = jsonAccessToken.getString("errmsg");
-                    Long expiresIn = jsonAccessToken.getLong("expires_in");
-                    if (StringUtils.isBlank(accessToken)) {
-                        throw new ServiceException(errmsg);
-                    } else {
-                        expiresIn = expiresIn - 100;
-                        stringRedisTemplate.opsForValue().set("wx_access_token", accessToken, expiresIn.intValue(), TimeUnit.SECONDS);
-                    }
-                }
-                String responseUserPhoneNumber = getMobileByWX(accessToken, appUserAuthorizeDto.getMobileCode());
-                JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
-                String errcode = jsonUserPhoneNumber.getString("errcode");
-                String errmsg = jsonUserPhoneNumber.getString("errmsg");
-                if (!errcode.equals("0")) {
-                    throw new ServiceException(errmsg);
-                }
-                String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
-                JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo);
-                mobile = jsonUserPhoneInfo.getString("purePhoneNumber");
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-            Member oldMember = this.getByMobile(mobile);
-            if(oldMember!=null){
-                member.setNickName(oldMember.getNickName());
-                member.setGender(oldMember.getGender());
-                member.setReferrer(oldMember.getReferrer());
-                member.setBirthday(oldMember.getBirthday());
-                member.setBindingFlag(1);
-                member.setRelationShopId(oldMember.getRelationShopId());
-                oldMember.setDelFlag(1);
-                oldMember.setMiniOpenid(oldMember.getMiniOpenid()+"已删除");
-                this.saveOrUpdate(oldMember);
-            }else{
-                //更新用户手机信息
-                SysUser sysUser = new SysUser();
-                sysUser.setUserId(appUserAuthorizeDto.getUserId());
-                sysUser.setPhonenumber(mobile);
-                sysUserService.updateUserMobile(sysUser);
-                member.setNickName(sysUser.getNickName());
-            }
-            member.setMobile(mobile);
-            this.saveOrUpdate(member);
-        }else{
-            mobile = member.getMobile();
+        //获取code接口在redis里存放的sessionkey用于解密
+        String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid());
+        if(StringUtils.isBlank(sessionkey)){
+            throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
         }
-        appUserAuthorizeVo.setMobile(mobile);
-        appUserAuthorizeVo.setNickName(member.getNickName());
-        appUserAuthorizeVo.setOpenid(member.getMiniOpenid());
-        appUserAuthorizeVo.setUnionid(member.getWxUnionid());
-        return appUserAuthorizeVo;
+        try {
+            //获取微信token用于解密手机
+            String accessToken = redisService.getCacheObject(SecurityConstant.WX_TOKEN);
+            if (StringUtils.isBlank(accessToken)) {
+                String responseAccessToken = getAccessTokenByWX();
+                JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
+                accessToken = jsonAccessToken.getString("access_token");
+                String errmsg = jsonAccessToken.getString("errmsg");
+                Long expiresIn = jsonAccessToken.getLong("expires_in");
+                if (StringUtils.isBlank(accessToken)) {
+                    throw new ServiceException(errmsg);
+                } else {
+                    expiresIn = expiresIn - 100;
+                    redisService.setCacheObject(SecurityConstant.WX_TOKEN, accessToken, Long.valueOf(expiresIn), TimeUnit.SECONDS);
+                }
+            }
+            //解密手机
+            String responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode());
+            JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
+            String errcode = jsonUserPhoneNumber.getString("errcode");
+            String errmsg = jsonUserPhoneNumber.getString("errmsg");
+            if (!errcode.equals("0")) {
+                throw new ServiceException(errmsg);
+            }
+            String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
+            JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo);
+            mobile = jsonUserPhoneInfo.getString("purePhoneNumber");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if(StringUtils.isBlank(mobile)){
+            return null;
+        }
+        //判断openid是否被其他手机号占用
+        Member checkMember = memberMapper.getOneByMiniOpenid(appUserRegisterDto.getMiniOpenid());
+        if(checkMember!=null&&!checkMember.getMobile().equals(mobile)){
+            throw new ServiceException("微信号换绑手机需联系客服");
+        }
+        Member member = memberMapper.selectMemberByMobile(mobile);
+        SysUser sysUser;
+        //获取用户为空则新建
+        if(member == null){
+            //创建新用户
+            sysUser = new SysUser();
+            sysUser.setUserName(mobile+"-3");
+            sysUser.setUserType("03");
+            sysUser.setNickName("鸿瑞堂用户");
+            sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+            String password = "hongruitang";
+            sysUser.setPassword(SecurityUtils.encryptPassword(password));
+            sysUser = sysUserService.registerUser(sysUser).getData();
+            member = new Member();
+            String memberId = IdUtils.simpleUUID();
+            member.setUserId(sysUser.getUserId());
+            member.setDelFlag(0);
+            member.setNickName("鸿瑞堂用户");
+            member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+            member.setMemberId(memberId);
+            member.setRelationShopId(1L);
+            member.setBindingFlag(0);
+            member.setCreateTime(new Date());
+        }else{
+            sysUser = sysUserService.getSysUser(member.getUserId()).getData();
+        }
+        member.setWxUnionid(appUserRegisterDto.getWxUnionid());
+        member.setMiniOpenid(appUserRegisterDto.getMiniOpenid());
+        log.info("member-----------------"+member.toString());
+        this.saveOrUpdate(member);
+        appUserRegisterVo.setMobile(mobile);
+        appUserRegisterVo.setNickName(member.getNickName());
+        appUserRegisterVo.setOpenid(member.getMiniOpenid());
+        appUserRegisterVo.setUnionid(member.getWxUnionid());
+        appUserRegisterVo.setSysUser(sysUser);
+        return appUserRegisterVo;
     }
 
     public static String getAccessTokenByWX() throws Exception {

--
Gitblit v1.7.1