From 89ff1d1668c471c293dedd312a4eb98a6ebfd06d Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 18 Aug 2022 16:51:47 +0800
Subject: [PATCH] 20220810
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 263 +++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 235 insertions(+), 28 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 100b886..2203ca0 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
@@ -2,11 +2,14 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
+import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
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;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
@@ -29,15 +32,14 @@
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.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* @author wzy
@@ -59,6 +61,8 @@
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
private final MallShopApplyMapper mallShopApplyMapper;
private final MallRegisterAppealMapper mallRegisterAppealMapper;
+ private final MallTeamLeaderMapper mallTeamLeaderMapper;
+ private final SpringContextHolder springContextHolder;
@Value("${spring.profiles.active}")
@@ -81,10 +85,12 @@
}
String account = registerDto.getAccount();
- String code = registerDto.getCode();
- boolean flags = commonService.verifyCode(account, code);
- if(!flags) {
- throw new FebsException("验证码错误");
+ if (!"admin".equals(registerDto.getRegistType())) {
+ String code = registerDto.getCode();
+ boolean flags = commonService.verifyCode(account, code);
+ if (!flags) {
+ throw new FebsException("验证码错误");
+ }
}
mallMember = new MallMember();
@@ -110,7 +116,7 @@
mallMember.setName(registerDto.getName());
mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
- mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name());
+ mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
mallMember.setSex("男");
mallMember.setBindPhone(registerDto.getAccount());
@@ -212,7 +218,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("退出登录");
}
@@ -237,15 +244,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);
}
@@ -314,23 +329,12 @@
MallMember mallMember = this.baseMapper.selectById(memberId);
List<TeamListVo> list = this.baseMapper.selectTeamListByInviteId(mallMember.getInviteId());
-// BigDecimal ownAmount = this.baseMapper.selectOwnOrderAmountByInviteId(mallMember.getInviteId());
-// TeamListVo own = new TeamListVo();
-// own.setCreatedTime(mallMember.getCreatedTime());
-// own.setAmount(ownAmount);
-// own.setName(mallMember.getName());
-// own.setPhone(mallMember.getPhone());
-// own.setInviteId(mallMember.getInviteId());
-// own.setIsCurrent(1);
-// own.setCnt(this.baseMapper.selectOwnCntByInviteId(mallMember.getInviteId()));
-// own.setOrderCnt(this.baseMapper.selectOwnOrderCntByInviteId(mallMember.getInviteId()));
-// own.setId(mallMember.getId());
MyTeamVo myTeamVo = new MyTeamVo();
myTeamVo.setTeam(list);
myTeamVo.setMyAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 1));
myTeamVo.setMyTeamAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 2));
- myTeamVo.setMyTeamCnt(list.size());
+ myTeamVo.setMyTeamCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size());
return new FebsResponse().success().data(myTeamVo);
}
@@ -434,7 +438,7 @@
MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
BigDecimal profit = mallMoneyFlowMapper.selectProfitByDateAndMemberId(memberId);
- BigDecimal canMoney = wallet.getBalance();
+ BigDecimal canMoney = wallet.getCommission();
if (profit != null) {
if(canMoney.compareTo(BigDecimal.ZERO) > 0) {
canMoney = canMoney.subtract(profit);
@@ -494,7 +498,7 @@
MallShopApply hasApply = mallShopApplyMapper.selectNewestApplyByMemberId(member.getId());
if (hasApply != null) {
if (!hasApply.getStatus().equals(MallShopApply.APPLY_DISAGREE)) {
- throw new FebsException("审核中或审核已通过");
+ throw new FebsException("请勿重复提交申请");
}
}
@@ -527,4 +531,207 @@
mallRegisterAppealMapper.insert(isExist);
}
+
+ @Override
+ public CashOutSettingVo cashOutSetting() {
+ CashOutSettingVo cashOutSettingVo = new CashOutSettingVo();
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode());
+ if (dic != null) {
+ cashOutSettingVo = JSONObject.parseObject(dic.getValue(), CashOutSettingVo.class);
+ }
+ return cashOutSettingVo;
+ }
+
+ @Override
+ public List<ShopListVo> findShopListVo(ShopListDto shopListDto) {
+ Page<MallShopApply> page = new Page<>(shopListDto.getPageNow(), shopListDto.getPageSize());
+
+ MallShopApply shopApply = new MallShopApply();
+ shopApply.setStatus(MallShopApply.APPLY_AGREE);
+ IPage<MallShopApply> pageResult = mallShopApplyMapper.selectShopApplyInPage(shopApply, page);
+
+ List<MallShopApply> list = pageResult.getRecords();
+ if (CollUtil.isEmpty(list)) {
+ list = new ArrayList<>();
+ }
+ 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().data(authInfo);
+ }
+ return new FebsResponse().fail().message("验证码错误");
+ }
+
+ @Override
+ public FebsResponse xcxOpen(ApiXcxOpenDto apiXcxOpenDto) {
+ DataDictionaryCustom rangeSwitch = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SWITCH.getType(), DataDictionaryEnum.RANGE_SWITCH.getCode());
+ if(StrUtil.isNotBlank(rangeSwitch.getValue()) && "1".equals(rangeSwitch.getValue())){
+ if(ObjectUtil.isNull(apiXcxOpenDto.getLongitude()) || ObjectUtil.isNull(apiXcxOpenDto.getLatitude())){
+ return new FebsResponse().fail().message("请授权位置信息");
+ }
+ Double longitude = apiXcxOpenDto.getLongitude();
+ Double latitude = apiXcxOpenDto.getLatitude();
+
+ DataDictionaryCustom rangeSize = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SIZE.getType(), DataDictionaryEnum.RANGE_SIZE.getCode());
+ if(ObjectUtil.isEmpty(rangeSize)){
+ return new FebsResponse().success().data(2);
+ }
+ if(StrUtil.isBlank(rangeSize.getValue())){
+ return new FebsResponse().success().data(2);
+ }
+ //方位大小,换成单位:米
+ Integer value = Integer.parseInt(rangeSize.getValue()) * 1000;
+ //根据经纬度获取周围团长的距离
+ MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByLonAndLat(longitude, latitude);
+ Double distance = mallTeamLeader.getDistance();
+ if(value <= distance){
+ return new FebsResponse().success().data(2);
+ }
+ }
+ return new FebsResponse().success().data(1);
+ }
+
+ private String getXcxLoginUrl(String code) {
+ String wechatLoginUrl =xcxProperties.getWecharLoginUrl();
+ return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code);
+ }
}
--
Gitblit v1.9.1