From d3abd08d49bd74000d57bd3ba97537f4fc14fa2b Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期三, 10 五月 2023 20:29:51 +0800
Subject: [PATCH] DEMO初步完成

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java |  260 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 229 insertions(+), 31 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 690ec1a..86004d0 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
@@ -3,38 +3,56 @@
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
+import com.alibaba.fastjson.JSONObject;
 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.security.utils.SecurityUtils;
 import com.ruoyi.member.domain.dto.AppUserAuthorizeDto;
+import com.ruoyi.member.domain.dto.MerCashMemberPageDto;
 import com.ruoyi.member.domain.dto.MerMemberPageDto;
-import com.ruoyi.member.domain.vo.AppUserAuthorizeVo;
-import com.ruoyi.member.domain.vo.AppUserInfoVo;
-import com.ruoyi.member.domain.vo.MerMemberPageVo;
+import com.ruoyi.member.domain.dto.MerMemberTagEditDto;
+import com.ruoyi.member.domain.pojo.member.MemberNurse;
+import com.ruoyi.member.domain.vo.*;
 import com.ruoyi.member.mapper.member.MemberMapper;
+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.RemoteConfigService;
 import com.ruoyi.system.api.RemoteOrderService;
 import com.ruoyi.system.api.RemoteShopService;
 import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.constant.SecurityConstant;
 import com.ruoyi.system.api.domain.dto.AppEditUserDto;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
+import com.ruoyi.system.api.domain.poji.config.SysTag;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
+import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
 import com.ruoyi.system.api.model.AppMiniLoginDto;
 import com.ruoyi.system.api.model.AppMiniLoginVo;
-import org.apache.commons.lang3.StringUtils;
+import lombok.extern.log4j.Log4j;
+import lombok.extern.log4j.Log4j2;
+import lombok.val;
+import com.ruoyi.common.core.utils.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.util.EntityUtils;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -45,7 +63,15 @@
  * @since 2023-04-25
  */
 @Service
+@Log4j2
 public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
+
+    private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token";
+
+    private static final String WX_APPID = "wxb7f0ea286fc4e535";
+
+    private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac";
+
 
     @Resource
     private RemoteUserService sysUserService;
@@ -64,6 +90,12 @@
 
     @Resource
     private RemoteOrderService orderService;
+
+    @Resource
+    private MemberNurseService memberNurseService;
+
+    @Resource
+    private RemoteConfigService remoteConfigService;
 
     /**
      * @description: TODO
@@ -92,49 +124,59 @@
         String sessionKey = null;
         //获取session
         try {
-            //session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode());
+            session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode());
         } catch (Exception e) {
             e.printStackTrace();
             return null;
         }
-        //if(session!=null&& StringUtils.isNotBlank(session.getOpenid())){
-            //unionid = session.getUnionid();
-            //openid = session.getOpenid();
-            //sessionKey = session.getSessionKey();
+        if(session!=null&& StringUtils.isNotBlank(session.getOpenid())){
+            unionid = session.getUnionid();
+            openid = session.getOpenid();
+            sessionKey = session.getSessionKey();
             //获取用户
-            //Member member = memberMapper.getOneByMiniOpenid(openid);
-                Member member = this.getByUserId(1L);
-                SysUser sysUser;
+            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.setNickName("鸿瑞堂用户");
+                sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
                 String password = "hongruitang";
                 sysUser.setPassword(SecurityUtils.encryptPassword(password));
-                sysUserService.registerUser(sysUser);
+                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.setWxUnionid(unionid);
-                //member.setMiniOpenid(openid);
+                member.setWxUnionid(unionid);
+                member.setMiniOpenid(openid);
+                member.setBindingFlag(0);
                 member.setCreateTime(new Date());
                 this.save(member);
+
             }else{
-                sysUser = sysUserService.getSysUser(member.getUserId()).getData();
+                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());
             }
-            //appMiniLoginVo.setMiniOpenid(openid);
-            //appMiniLoginVo.setWxUnionid(unionid);
+            appMiniLoginVo.setMiniOpenid(openid);
+            appMiniLoginVo.setWxUnionid(unionid);
             appMiniLoginVo.setSysUser(sysUser);
-            //appMiniLoginVo.setSessionKey(sessionKey);
-            //sessionKey
-            //stringRedisTemplate.opsForValue().set(SecurityConstant.SESSION_KEY+openid,sessionKey);
-        /*}else{
+            appMiniLoginVo.setSessionKey(sessionKey);
+            stringRedisTemplate.opsForValue().set(SecurityConstant.SESSION_KEY+openid,sessionKey);
+        }else{
+            log.info("null");
             return null;
-        }*/
+        }
+        log.info("appMiniLoginVo"+appMiniLoginVo.toString());
         return appMiniLoginVo;
     }
 
@@ -155,7 +197,7 @@
         String mobile = null;
         try {
             //解密微信加密用户信息和手机号
-            WxMaPhoneNumberInfo wxPhoneInfo;
+            /*WxMaPhoneNumberInfo wxPhoneInfo;
             if(StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneEncryptedData())&&StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneIv())){
                 wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionkey, appUserAuthorizeDto.getPhoneEncryptedData(), appUserAuthorizeDto.getPhoneIv());
             }else{
@@ -164,7 +206,31 @@
             if(StringUtils.isBlank(wxPhoneInfo.getPhoneNumber())){
                 throw new ServiceException(AppErrorConstant.AUTHORIZE_FAILED);
             }
-            mobile = wxPhoneInfo.getPhoneNumber();
+            mobile = wxPhoneInfo.getPhoneNumber();*/
+            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();
         }
@@ -174,13 +240,35 @@
         sysUser.setPhonenumber(mobile);
         sysUserService.updateUserMobile(sysUser);
         member.setMobile(mobile);
-        member.setRealName(sysUser.getNickName());
+        member.setNickName(sysUser.getNickName());
         this.saveOrUpdate(member);
         appUserAuthorizeVo.setMobile(mobile);
         appUserAuthorizeVo.setNickName(sysUser.getNickName());
         appUserAuthorizeVo.setOpenid(member.getMiniOpenid());
         appUserAuthorizeVo.setUnionid(member.getWxUnionid());
         return appUserAuthorizeVo;
+    }
+
+    public static String getAccessTokenByWX() throws Exception {
+        String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential";
+        Map<String, String> headers  = new HashMap<>(8);
+        HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null);
+        return EntityUtils.toString(response.getEntity());
+    }
+
+    public static String getMobileByWX(String accessToken,  String code) throws Exception {
+        String method = "POST";
+        Map<String, String> headers = new HashMap<>(16);
+        headers.put("Content-Type", "application/json");
+        headers.put("Accept", "application/json");
+        Map<String, String> querys = new HashMap<>(16);
+        Map<String, String> bodys = new HashMap<>(16);
+        querys.put("access_token", accessToken );
+        bodys.put("code", code);
+        String body = JSONObject.toJSONString(bodys);
+        String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
+        HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body);
+        return EntityUtils.toString(response.getEntity());
     }
 
     /**
@@ -194,6 +282,7 @@
         SysUser sysUser = sysUserService.getSysUser(userId).getData();
         Member member = this.getByUserId(userId);
         appUserInfoVo.setUserId(userId);
+        appUserInfoVo.setRelationShopId(member.getRelationShopId());
         appUserInfoVo.setMemberNo(member.getMemberNo());
         appUserInfoVo.setNickName(sysUser.getNickName());
         appUserInfoVo.setPhonenumber(sysUser.getPhonenumber());
@@ -222,7 +311,7 @@
         Member member = this.getByUserId(appEditUserDto.getUserId());
         switch (editType){
             case 1:
-                member.setRealName(editValue);
+                member.setNickName(editValue);
                 member.setUpdateTime(new Date());
                 member.setUpdateUserId(appEditUserDto.getUserId());
                 this.saveOrUpdate(member);
@@ -257,4 +346,113 @@
         List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page,merMemberPageDto);
         return merMemberPageVoList;
     }
+
+
+    /**
+     * @description: TODO
+     * @author jqs34
+     * @date 2023/5/4 22:50
+     * @version 1.0
+     */
+    @Override
+    public MerMemberInfoVo getMerMemberInfo(Long userId){
+        MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo();
+        Member member = this.getByUserId(userId);
+        merMemberInfoVo.setUserId(userId);
+        merMemberInfoVo.setNickName(member.getNickName());
+        merMemberInfoVo.setPhonenumber(member.getMobile());
+        merMemberInfoVo.setAvatar(member.getAvatar());
+        merMemberInfoVo.setBirthday(member.getBirthday());
+        //未完成
+
+        return merMemberInfoVo;
+    }
+
+    /**
+     * 分页获取收银用户列表
+     * @param page
+     * @param merCashMemberPageDto
+     * @return
+     */
+    @Override
+    public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){
+
+        List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto);
+        return merCashMemberPageVos;
+    }
+
+    /**
+     *
+     * @param appMemberBindingDto
+     */
+    @Override
+    public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){
+        Member member = this.getByUserId(appMemberBindingDto.getUserId());
+        member.setBindingFlag(appMemberBindingDto.getBindingFlag());
+        member.setRelationShopId(appMemberBindingDto.getShopId());
+        this.saveOrUpdate(member);
+    }
+
+    /**
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public MerMemberBasicFileVo getMerMemberBasicFile(Long userId){
+        MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo();
+        Member member = this.getByUserId(userId);
+        BeanUtils.copyProperties(member, merMemberBasicFileVo);
+        merMemberBasicFileVo.setNickName(member.getNickName());
+        merMemberBasicFileVo.setPhonenumber(member.getMobile());
+        merMemberBasicFileVo.setCreateTime(member.getCreateTime());
+        List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
+        List<String> valueList = memberNurseList.stream().map(k->k.getNurse()).collect(Collectors.toList());
+        merMemberBasicFileVo.setMemberNurse(valueList);
+        return merMemberBasicFileVo;
+    }
+
+    /**
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<MerMemberTagVo> getMerMemberTags(Long userId){
+        Member member = this.getByUserId(userId);
+        String userTags = member.getUserTags();
+        String[] userTagsArr = null;
+        if(StringUtils.isNotBlank(userTags)){
+            userTagsArr = userTags.split(",");
+        }
+        List<SysTag> sysTagsList = remoteConfigService.listSysTag(1).getData();
+        List<MerMemberTagVo> merMemberTagVoList = new ArrayList<>();
+        MerMemberTagVo merMemberTagVo;
+        String tagName;
+        if(sysTagsList!=null&&!sysTagsList.isEmpty()){
+            for(SysTag sysTag : sysTagsList){
+                merMemberTagVo = new MerMemberTagVo();
+                tagName = sysTag.getTagName();
+                merMemberTagVo.setTagName(tagName);
+                if(userTagsArr!=null &&  ArrayUtils.contains(userTagsArr, tagName)){
+                    merMemberTagVo.setSelectFlag(1);
+                }else{
+                    merMemberTagVo.setSelectFlag(0);
+                }
+                merMemberTagVoList.add(merMemberTagVo);
+            }
+        }
+        return merMemberTagVoList;
+    }
+
+    /**
+     *
+     * @param merMemberTagEditDto
+     */
+    @Override
+    public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto){
+        Member member = this.getByUserId(merMemberTagEditDto.getMemberUserId());
+        member.setUserTags(merMemberTagEditDto.getUserTags());
+        this.saveOrUpdate(member);
+    }
 }

--
Gitblit v1.7.1