From 3280d1bd977e8fb5c9c60e615612fabb7b99c3e3 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Wed, 27 Jul 2022 09:46:58 +0800 Subject: [PATCH] 20220727 保存代码 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 167 insertions(+), 5 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index ee17af4..d649eb4 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -6,6 +6,7 @@ import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; +import cc.mrbird.febs.common.properties.XcxProperties; import cc.mrbird.febs.common.utils.*; import cc.mrbird.febs.mall.conversion.MallMemberConversion; import cc.mrbird.febs.mall.conversion.MallShopApplyConversion; @@ -31,10 +32,12 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.math.BigDecimal; import java.util.*; @@ -58,6 +61,7 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallShopApplyMapper mallShopApplyMapper; private final MallRegisterAppealMapper mallRegisterAppealMapper; + private final MallTeamLeaderMapper mallTeamLeaderMapper; @Value("${spring.profiles.active}") @@ -213,7 +217,8 @@ @Override public FebsResponse logout() { Long id = LoginUserUtil.getLoginUser().getId(); - redisUtils.del(AppContants.APP_LOGIN_PREFIX + id); + redisUtils.del(AppContants.XCX_LOGIN_PREFIX + id); + redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id); return new FebsResponse().success().message("退出登录"); } @@ -238,15 +243,23 @@ mallMemberVo.setHasPayment(1); } - DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); - if (dic != null) { - mallMemberVo.setLevelName(dic.getDescription()); - } +// DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); +// if (dic != null) { +// mallMemberVo.setLevelName(dic.getDescription()); +// } MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId()); mallMemberVo.setBalance(wallet.getBalance()); mallMemberVo.setScore(wallet.getScore()); mallMemberVo.setPrizeScore(wallet.getPrizeScore()); mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id)); + + //用户是否是团长 + List<MallTeamLeader> mallTeamLeaders = mallTeamLeaderMapper.selectListByMemberIdAndState(mallMember.getId(), MallTeamLeader.STATE_YES); + if(CollUtil.isNotEmpty(mallTeamLeaders)){ + mallMemberVo.setIsTeamLeader(1); + }else{ + mallMemberVo.setIsTeamLeader(2); + } return new FebsResponse().success().data(mallMemberVo); } @@ -542,4 +555,153 @@ } return MallShopApplyConversion.INSTANCE.entitiesToVOs(list); } + + + private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); + + @Override + public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException { + FebsResponse febsResponse = new FebsResponse(); + String code = apiXcxLoginDto.getCode(); + log.info("code:" + code); + if (StrUtil.isNotBlank(code)) { + String requrl = getXcxLoginUrl(code); + String reslutData = HttpCurlUtil.sendGetHttp(requrl, null); + net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(reslutData); + log.info("微信登录获取到登录信息={}", json); + + if (json.containsKey("errcode")) { + log.info("微信登录获取到异常信息errcode"); + return febsResponse.fail().message("自动登录失败"); + } + + String openId = json.getString("openid"); + String sessionKey = json.getString("session_key"); + log.info("openId={},sessionKey={}", openId, sessionKey); + // 查询用户是否存在 + MallMember mallMember = null; + synchronized (this) { + mallMember = this.baseMapper.selectMemberByOpenId(openId); + if (ObjectUtil.isEmpty(mallMember)) { + // 新增用户 + mallMember = new MallMember(); + mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); + mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); + mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name()); + mallMember.setOpenId(openId); + mallMember.setSessionKey(sessionKey); + this.baseMapper.insert(mallMember); + + mallMember = this.baseMapper.selectMemberByOpenId(openId); + String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); + mallMember.setInviteId(inviteId); + this.baseMapper.updateById(mallMember); + MallMemberWallet wallet = new MallMemberWallet(); + wallet.setBalance(BigDecimal.ZERO); + wallet.setMemberId(mallMember.getId()); + mallMemberWalletMapper.insert(wallet); + } else { + mallMember.setSessionKey(sessionKey); + this.baseMapper.updateById(mallMember); + } + } + // 存放redis + String redisKey = AppContants.XCX_LOGIN_PREFIX + mallMember.getId(); + String existToken = redisUtils.getString(redisKey); + if (StrUtil.isNotBlank(existToken)) { + Object o = redisUtils.get(existToken); + if (ObjectUtil.isNotEmpty(o)) { + redisUtils.del(existToken); + } + } + String token = IdUtil.simpleUUID(); + redisUtils.set(token, JSONObject.toJSONString(mallMember), 360000); + redisUtils.set(redisKey, token, 360000); + Map<String, Object> authInfo = new HashMap<>(); + authInfo.put("token", token); + authInfo.put("appid", xcxProperties.getXcxAppid()); + authInfo.put("member", mallMember); + authInfo.put("rasToken", generateAsaToken(token)); + febsResponse.success().data(authInfo); + } else { + return febsResponse.fail().message("自动登录失败"); + } + return febsResponse; + } + + @Override + public FebsResponse xcxSaveInfo(ApiXcxSaveInfoDto apiXcxSaveInfoDto) { + log.info("name={},phone={},avatar={},sex={}", + apiXcxSaveInfoDto.getNickName(),apiXcxSaveInfoDto.getPhone(),apiXcxSaveInfoDto.getAvatarUrl(),apiXcxSaveInfoDto.getGender()); + Long memberId = LoginUserUtil.getLoginUser().getId(); + MallMember mallMember = this.baseMapper.selectById(memberId); + String nickName = apiXcxSaveInfoDto.getNickName(); + if(StrUtil.isNotEmpty(nickName)){ + mallMember.setName(nickName); + } + String phone = apiXcxSaveInfoDto.getPhone(); + if(StrUtil.isNotEmpty(phone)){ + mallMember.setPhone(phone); + } + String avatarUrl = apiXcxSaveInfoDto.getAvatarUrl(); + if(StrUtil.isNotEmpty(avatarUrl)){ + mallMember.setAvatar(avatarUrl); + } + mallMember.setSex(apiXcxSaveInfoDto.getGender() == 1 ? "女" : "男"); + this.baseMapper.updateById(mallMember); + return new FebsResponse().success(); + } + + @Override + public FebsResponse xcxPhoneLogin(ApiXcxPhoneLoginDto apiXcxPhoneLoginDto) { + String phone = apiXcxPhoneLoginDto.getPhone(); + boolean flag = commonService.verifyCode(phone, apiXcxPhoneLoginDto.getCode()); + if (flag) { + // 查询用户是否存在 + MallMember mallMember = null; + synchronized (this) { + mallMember = this.baseMapper.selectInfoByAccount(apiXcxPhoneLoginDto.getPhone()); + if (ObjectUtil.isEmpty(mallMember)) { + // 新增用户 + mallMember = new MallMember(); + mallMember.setPhone(phone); + mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); + mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); + mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name()); + this.baseMapper.insert(mallMember); + + String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); + mallMember.setInviteId(inviteId); + this.baseMapper.updateById(mallMember); + MallMemberWallet wallet = new MallMemberWallet(); + wallet.setBalance(BigDecimal.ZERO); + wallet.setMemberId(mallMember.getId()); + mallMemberWalletMapper.insert(wallet); + } + } + // 存放redis + String redisKey = AppContants.XCX_LOGIN_PHONE_PREFIX + mallMember.getId(); + String existToken = redisUtils.getString(redisKey); + if (StrUtil.isNotBlank(existToken)) { + Object o = redisUtils.get(existToken); + if (ObjectUtil.isNotEmpty(o)) { + redisUtils.del(existToken); + } + } + String token = IdUtil.simpleUUID(); + redisUtils.set(token, JSONObject.toJSONString(mallMember), 360000); + redisUtils.set(redisKey, token, 360000); + Map<String, Object> authInfo = new HashMap<>(); + authInfo.put("token", token); + authInfo.put("member", mallMember); + authInfo.put("rasToken", generateAsaToken(token)); + return new FebsResponse().success().message("登陆成功"); + } + return new FebsResponse().fail().message("验证码错误"); + } + + private String getXcxLoginUrl(String code) { + String wechatLoginUrl =xcxProperties.getWecharLoginUrl(); + return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code); + } } -- Gitblit v1.9.1