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