From aed4e4c7d76de4d0fbfe8c0b26fcdeecbd5c5b24 Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期五, 26 五月 2023 18:04:47 +0800 Subject: [PATCH] 管理台用户管理 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 332 +++++++++++++++++++++++++++++++++--------------------- 1 files changed, 203 insertions(+), 129 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..4b092e9 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 @@ -1,24 +1,32 @@ package com.ruoyi.member.service.impl.member; +import java.util.Date; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; 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; +import com.ruoyi.member.domain.pojo.member.MemberTotal; 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.service.member.MemberTotalService; +import com.ruoyi.member.util.CodeFactoryUtil; 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; @@ -44,6 +52,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -77,9 +86,6 @@ private MemberMapper memberMapper; @Resource - private StringRedisTemplate stringRedisTemplate; - - @Resource private RemoteShopService shopService; @Resource @@ -90,6 +96,12 @@ @Resource private RemoteConfigService remoteConfigService; + + @Resource + private RedisService redisService; + + @Resource + private MemberTotalService memberTotalService; /** * @description: TODO @@ -129,126 +141,113 @@ 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; } /** - * 获取授权信息 - * @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 (!"0".equals(errcode)) { + 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){ + //创建新用户 + 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(); + member = new Member(); + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setNickName("鸿瑞堂用户"); + member.setRealName("鸿瑞堂用户"); + member.setCustomerSource("小程序"); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setMemberId(memberId); + member.setBindingFlag(0); + member.setCreateTime(new Date()); + member.setMobile(mobile); + initMemberTotal(memberId); + }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 { @@ -394,6 +393,7 @@ Member member = this.getByUserId(appMemberBindingDto.getUserId()); member.setBindingFlag(appMemberBindingDto.getBindingFlag()); member.setRelationShopId(appMemberBindingDto.getShopId()); + member.setRelationShopName(appMemberBindingDto.getShopName()); this.saveOrUpdate(member); } @@ -481,8 +481,9 @@ } SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData(); if(sysUser==null){ + String memberId = IdUtils.simpleUUID(); sysUser = new SysUser(); - sysUser.setUserName(phonenumber); + sysUser.setUserName(memberId); sysUser.setUserType("03"); sysUser.setNickName(merMemberAddDto.getNickName()); sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); @@ -490,27 +491,32 @@ sysUser.setPassword(SecurityUtils.encryptPassword(password)); log.debug("sysUser"+sysUser.toString()); sysUser = sysUserService.registerUser(sysUser).getData(); + Member member = new Member(); + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); + member.setMemberId(memberId); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setNickName(merMemberAddDto.getNickName()); + member.setRealName(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.setRelationShopId(merMemberAddDto.getShopId()); + member.setWxUnionid(null); + member.setMiniOpenid(null); + member.setBindingFlag(1); + member.setRelationShopId(merMemberAddDto.getShopId()); + member.setCustomerSource("商户添加"); + member.setCreateTime(new Date()); + log.info("member-----------------"+member.toString()); + this.saveOrUpdate(member); + initMemberTotal(memberId); } - 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); + + } /** @@ -585,4 +591,72 @@ } } } + + + /** + * 订单创建新用户 + * @param member + */ + @Override + public void createNewMember(Member member){ + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); + member.setDelFlag(0); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setBindingFlag(0); + member.setCreateTime(new Date()); + member.setCustomerSource("商户订单添加"); + this.saveOrUpdate(member); + initMemberTotal(member.getMemberId()); + } + + /** + * 生成会员统计 + * @param memberId + * @return + */ + private void initMemberTotal(String memberId){ + MemberTotal memberTotal = new MemberTotal(); + memberTotal.setMemberId(memberId); + memberTotal.setDelFlag(0); + memberTotal.setTotalIntegral(0); + memberTotal.setUsedIntegral(0); + memberTotal.setUseableIntegral(0); + memberTotal.setTotalPayMoney(new BigDecimal("0.00")); + memberTotal.setTotalPayCount(0); + memberTotal.setLastPayMoney(new BigDecimal("0.00")); + memberTotal.setTotalServiceCount(0); + memberTotal.setUsedServiceCount(0); + memberTotal.setUseableServiceCount(0); + memberTotal.setTotalActivityCount(0); + memberTotal.setTotalCycleOrder(0); + memberTotal.setToltaExperienceOrder(0); + memberTotal.setTotalServiceOrder(0); + memberTotal.setTotalGoodsOrder(0); + memberTotalService.saveOrUpdate(memberTotal); + } + + /** + * 生成会员编号 + * @return + */ + private String createMemberNo(){ + int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>().eq(Member::getDelFlag, 0)); + String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1)); + return memberNo; + } + + + /** + * 平台分页获取会员列表 + * @param page + * @param merMemberPageDto + * @return + */ + @Override + public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){ + List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto); + + return memberPageVoList; + } } -- Gitblit v1.7.1