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 | 315 ++++++++++++++++++++++++++++++++++++----------------
1 files changed, 219 insertions(+), 96 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 91d33bc..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
@@ -2,49 +2,45 @@
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.core.conditions.query.LambdaQueryWrapper;
+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.AppUserAuthorizeDto;
-import com.ruoyi.member.domain.dto.MerCashMemberPageDto;
-import com.ruoyi.member.domain.dto.MerMemberPageDto;
-import com.ruoyi.member.domain.dto.MerMemberTagEditDto;
+import com.ruoyi.member.domain.dto.*;
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.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;
+import com.ruoyi.system.api.service.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.dto.AppMemberGoodsTypeDto;
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 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;
@@ -97,6 +93,9 @@
@Resource
private RemoteConfigService remoteConfigService;
+ @Resource
+ private RedisService redisService;
+
/**
* @description: TODO
* @author jqs34
@@ -135,43 +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("微信用户");
- 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.setMemberId(memberId);
- member.setWxUnionid(unionid);
- member.setMiniOpenid(openid);
- member.setBindingFlag(0);
- member.setCreateTime(new Date());
- this.save(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;
@@ -179,32 +150,21 @@
/**
* 获取授权信息
- * @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;
//获取code接口在redis里存放的sessionkey用于解密
- String sessionkey = stringRedisTemplate.opsForValue().get(SecurityConstant.SESSION_KEY+ member.getMiniOpenid());
+ String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid());
if(StringUtils.isBlank(sessionkey)){
throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
}
- String mobile = null;
try {
- //解密微信加密用户信息和手机号
- /*WxMaPhoneNumberInfo wxPhoneInfo;
- if(StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneEncryptedData())&&StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneIv())){
- wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionkey, appUserAuthorizeDto.getPhoneEncryptedData(), appUserAuthorizeDto.getPhoneIv());
- }else{
- throw new ServiceException(AppErrorConstant.AUTHORIZE_MISS);
- }
- if(StringUtils.isBlank(wxPhoneInfo.getPhoneNumber())){
- throw new ServiceException(AppErrorConstant.AUTHORIZE_FAILED);
- }
- mobile = wxPhoneInfo.getPhoneNumber();*/
- String accessToken = stringRedisTemplate.opsForValue().get("wx_access_token");
+ //获取微信token用于解密手机
+ String accessToken = redisService.getCacheObject(SecurityConstant.WX_TOKEN);
if (StringUtils.isBlank(accessToken)) {
String responseAccessToken = getAccessTokenByWX();
JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
@@ -215,10 +175,11 @@
throw new ServiceException(errmsg);
} else {
expiresIn = expiresIn - 100;
- stringRedisTemplate.opsForValue().set("wx_access_token", accessToken, expiresIn.intValue(), TimeUnit.SECONDS);
+ redisService.setCacheObject(SecurityConstant.WX_TOKEN, accessToken, Long.valueOf(expiresIn), TimeUnit.SECONDS);
}
}
- String responseUserPhoneNumber = getMobileByWX(accessToken, appUserAuthorizeDto.getMobileCode());
+ //解密手机
+ String responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode());
JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
String errcode = jsonUserPhoneNumber.getString("errcode");
String errmsg = jsonUserPhoneNumber.getString("errmsg");
@@ -231,19 +192,50 @@
} catch (Exception e) {
e.printStackTrace();
}
- //更新用户手机信息
- SysUser sysUser = new SysUser();
- sysUser.setUserId(appUserAuthorizeDto.getUserId());
- sysUser.setPhonenumber(mobile);
- sysUserService.updateUserMobile(sysUser);
- member.setMobile(mobile);
- member.setRealName(sysUser.getNickName());
+ 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);
- appUserAuthorizeVo.setMobile(mobile);
- appUserAuthorizeVo.setNickName(sysUser.getNickName());
- appUserAuthorizeVo.setOpenid(member.getMiniOpenid());
- appUserAuthorizeVo.setUnionid(member.getWxUnionid());
- return appUserAuthorizeVo;
+ 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 {
@@ -276,20 +268,21 @@
@Override
public AppUserInfoVo getAppUserInfo(Long userId){
AppUserInfoVo appUserInfoVo = new AppUserInfoVo();
- 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());
- if(member.getRelationShopId()!=null){
+ appUserInfoVo.setNickName(member.getNickName());
+ appUserInfoVo.setRealName(member.getRealName());
+ appUserInfoVo.setPhonenumber(member.getMobile());
+ if(member.getRelationShopId()!=null&&member.getBindingFlag()==1){
+ appUserInfoVo.setRelationShopId(member.getRelationShopId());
Shop shop = shopService.getShop(member.getRelationShopId()).getData();
appUserInfoVo.setShopName(shop.getShopName());
+ appUserInfoVo.setShopAddress(shop.getShopAreaName()+shop.getShopAddress());
}
appUserInfoVo.setBirthday(member.getBirthday());
appUserInfoVo.setGender(member.getGender());
- appUserInfoVo.setAvatar(sysUser.getAvatar());
+ appUserInfoVo.setAvatar(member.getAvatar());
AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId).getData();
appUserInfoVo.setNoPayCount(appOrderTotalVo.getNoPayCount());
appUserInfoVo.setNoUseCount(appOrderTotalVo.getNoUseCount());
@@ -308,7 +301,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);
@@ -346,7 +339,7 @@
/**
- * @description: TODO
+ * @description: 商户获取会员信息
* @author jqs34
* @date 2023/5/4 22:50
* @version 1.0
@@ -354,12 +347,13 @@
@Override
public MerMemberInfoVo getMerMemberInfo(Long userId){
MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo();
- SysUser sysUser = sysUserService.getSysUser(userId).getData();
Member member = this.getByUserId(userId);
merMemberInfoVo.setUserId(userId);
- merMemberInfoVo.setNickName(sysUser.getNickName());
- merMemberInfoVo.setPhonenumber(sysUser.getPhonenumber());
- merMemberInfoVo.setAvatar(sysUser.getAvatar());
+ merMemberInfoVo.setNickName(member.getNickName());
+ merMemberInfoVo.setPhonenumber(member.getMobile());
+ merMemberInfoVo.setAvatar(member.getAvatar());
+ merMemberInfoVo.setBirthday(member.getBirthday());
+ merMemberInfoVo.setUserTags(member.getUserTags());
//未完成
return merMemberInfoVo;
@@ -379,7 +373,7 @@
}
/**
- *
+ * 更新会员绑定商户
* @param appMemberBindingDto
*/
@Override
@@ -391,7 +385,7 @@
}
/**
- *
+ * 获取会员基础档案
* @param userId
* @return
*/
@@ -400,6 +394,9 @@
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);
@@ -407,7 +404,7 @@
}
/**
- *
+ * 获取会员标签
* @param userId
* @return
*/
@@ -440,13 +437,139 @@
}
/**
- *
+ * 编辑会员标签
* @param merMemberTagEditDto
*/
@Override
public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto){
Member member = this.getByUserId(merMemberTagEditDto.getMemberUserId());
- member.setUserTags(merMemberTagEditDto.getUserTags());
+ List<String> userTags = merMemberTagEditDto.getUserTags();
+ StringJoiner sj = new StringJoiner(",");
+ if(userTags!=null&&!userTags.isEmpty()){
+ for(String str : userTags){
+ sj.add(str);
+ }
+ }
+ member.setUserTags(sj.toString());
this.saveOrUpdate(member);
}
+
+
+ /**
+ * 添加会员
+ * @param merMemberAddDto
+ */
+ @Override
+ public void addMerMember(MerMemberAddDto merMemberAddDto){
+ String phonenumber = merMemberAddDto.getPhonenumber();
+ Member oldMember = this.getByMobile(phonenumber);
+ if(oldMember!=null){
+ throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
+ }
+ SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData();
+ if(sysUser==null){
+ sysUser = new SysUser();
+ sysUser.setUserName(phonenumber);
+ sysUser.setUserType("03");
+ sysUser.setNickName(merMemberAddDto.getNickName());
+ sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+ String password = "hongruitang";
+ sysUser.setPassword(SecurityUtils.encryptPassword(password));
+ log.debug("sysUser"+sysUser.toString());
+ sysUser = sysUserService.registerUser(sysUser).getData();
+ }
+ log.info("sysUser1-----------------"+sysUser.toString());
+ String memberId = IdUtils.simpleUUID();
+ Member member = new Member();
+ member.setUserId(sysUser.getUserId());
+ member.setDelFlag(0);
+ member.setNickName(merMemberAddDto.getNickName());
+ member.setGender(merMemberAddDto.getGender());
+ member.setMobile(phonenumber);
+ member.setReferrer(merMemberAddDto.getReferrer());
+ member.setBirthday(merMemberAddDto.getBirthday());
+ member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+ member.setMemberId(memberId);
+ member.setRelationShopId(1L);
+ member.setWxUnionid(null);
+ member.setMiniOpenid(null);
+ member.setBindingFlag(1);
+ member.setRelationShopId(merMemberAddDto.getShopId());
+ member.setCreateTime(new Date());
+ log.info("member-----------------"+member.toString());
+ this.saveOrUpdate(member);
+ }
+
+ /**
+ * 编辑会员
+ * @param merMemberEditDto
+ */
+ @Override
+ public void editMerMember(MerMemberEditDto merMemberEditDto){
+
+ Member member = this.getByUserId(merMemberEditDto.getEditUserId());
+ if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){
+ Member memberOld = getByMobile(merMemberEditDto.getPhonenumber());
+ if(memberOld!=null){
+ throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE);
+ }
+ }
+ member.setRealName(merMemberEditDto.getNickName());
+ member.setMobile(merMemberEditDto.getPhonenumber());
+ member.setGender(merMemberEditDto.getGender());
+ member.setReferrer(merMemberEditDto.getReferrer());
+ member.setCustomerSource(merMemberEditDto.getCustomerSource());
+ member.setLevel(merMemberEditDto.getLevel());
+ member.setBirthday(merMemberEditDto.getBirthday());
+ member.setUpdateUserId(merMemberEditDto.getUserId());
+ member.setUpdateTime(new Date());
+ log.info("member-----------------"+member.toString());
+ this.saveOrUpdate(member);
+ SysUser sysUser = new SysUser();
+ sysUser.setUserId(merMemberEditDto.getEditUserId());
+ sysUser.setPhonenumber(merMemberEditDto.getPhonenumber());
+ sysUserService.updateUserMobile(sysUser);
+ }
+
+ /**
+ *
+ * @param mobile
+ * @return
+ */
+ @Override
+ public Member getByMobile(String mobile){
+ LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery();
+ queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile);
+ Member member = this.getOne(queryWrapper);
+ return member;
+ }
+
+ /**
+ * 更新用户商品类型
+ * @param appMemberGoodsTypeDto
+ */
+ @Override
+ public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto){
+ Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId());
+ HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet();
+ if(member!=null){
+ String goodsType = member.getGoodsType();
+ Boolean change = false;
+ for(String str : goodsTypeSet){
+ if(goodsType != null){
+ if(!goodsType.contains(str)){
+ goodsType = goodsType + "," + str;
+ change = true;
+ }
+ }else{
+ goodsType = str;
+ change = true;
+ }
+ }
+ if(change){
+ member.setGoodsType(goodsType);
+ this.saveOrUpdate(member);
+ }
+ }
+ }
}
--
Gitblit v1.7.1