mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-23 20:45:10 +08:00
commit
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
package com.jsowell.service;
|
||||
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.jsowell.common.constant.CacheConstants;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.page.PageResponse;
|
||||
import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.enums.uniapp.BalanceChangesEnum;
|
||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.util.JWTUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.common.util.id.IdUtils;
|
||||
import com.jsowell.pile.domain.MemberBasicInfo;
|
||||
import com.jsowell.pile.domain.MemberWalletInfo;
|
||||
import com.jsowell.pile.dto.MemberRegisterAndLoginDTO;
|
||||
import com.jsowell.pile.dto.MemberRegisterDTO;
|
||||
import com.jsowell.pile.dto.UniAppQueryMemberBalanceDTO;
|
||||
import com.jsowell.pile.dto.WechatLoginDTO;
|
||||
import com.jsowell.pile.service.IMemberBasicInfoService;
|
||||
import com.jsowell.pile.service.IPileMerchantInfoService;
|
||||
import com.jsowell.pile.transaction.dto.MemberTransactionDTO;
|
||||
import com.jsowell.pile.transaction.service.TransactionService;
|
||||
import com.jsowell.pile.vo.uniapp.MemberVO;
|
||||
import com.jsowell.pile.vo.uniapp.MemberWalletLogVO;
|
||||
import com.jsowell.wxpay.service.WxAppletRemoteService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Service
|
||||
public class MemberService {
|
||||
private final Logger log = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
@Autowired
|
||||
private RedisCache redisCache;
|
||||
|
||||
@Autowired
|
||||
private TransactionService transactionService;
|
||||
|
||||
@Autowired
|
||||
private IMemberBasicInfoService memberBasicInfoService;
|
||||
|
||||
@Autowired
|
||||
private IPileMerchantInfoService pileMerchantInfoService;
|
||||
|
||||
@Autowired
|
||||
private WxAppletRemoteService wxAppletRemoteService;
|
||||
|
||||
/**
|
||||
* 校验短信验证码
|
||||
* @param dto
|
||||
*/
|
||||
public void checkVerificationCode(MemberRegisterAndLoginDTO dto) {
|
||||
// 取出缓存中的验证码进行对比,如果缓存中没有,则超时
|
||||
String captchaCode = redisCache.getCacheObject(CacheConstants.SMS_VERIFICATION_CODE_KEY + dto.getMobileNumber());
|
||||
if (StringUtils.isEmpty(captchaCode)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_VERIFICATION_CODE_TIMEOUT_ERROR);
|
||||
}
|
||||
// 如果缓存中有,但与实际不一致,则为验证码错误
|
||||
if (!StringUtils.equals(captchaCode, dto.getVerificationCode())) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_VERIFICATION_CODE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信验证码登录注册
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
public String memberRegisterAndLogin(MemberRegisterAndLoginDTO dto) {
|
||||
// 校验短信验证码 两种情况不能通过校验,1-验证码错误;2-超时 验证码10分钟有效
|
||||
checkVerificationCode(dto);
|
||||
String merchantId = "";
|
||||
return memberRegisterAndLogin(dto.getMobileNumber(), merchantId, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 公共登陆注册方法
|
||||
* @param phoneNumber 手机号
|
||||
* @param merchantId 商户id
|
||||
* @return
|
||||
*/
|
||||
private String memberRegisterAndLogin(String phoneNumber, String merchantId, String openId) {
|
||||
if (StringUtils.isBlank(phoneNumber)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_GET_MOBILE_NUMBER_BY_CODE_ERROR);
|
||||
}
|
||||
// if (Objects.isNull(merchantId)) {
|
||||
// throw new BusinessException(ReturnCodeEnum.CODE_GET_MERCHANT_ID_BY_APP_ID_ERROR);
|
||||
// }
|
||||
// 查询手机号码是否注册过
|
||||
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumberAndMerchantId(phoneNumber, merchantId);
|
||||
if (Objects.isNull(memberBasicInfo)) {
|
||||
// 不存在则新增数据
|
||||
String memberId = IdUtils.getMemberId();
|
||||
memberBasicInfo = new MemberBasicInfo();
|
||||
memberBasicInfo.setStatus(Constants.ONE);
|
||||
memberBasicInfo.setMemberId(memberId);
|
||||
memberBasicInfo.setNickName("会员" + memberId);
|
||||
memberBasicInfo.setMobileNumber(phoneNumber);
|
||||
memberBasicInfo.setMerchantId(Long.valueOf(merchantId));
|
||||
memberBasicInfo.setOpenId(openId);
|
||||
|
||||
// 首次新建会员,同时新建会员钱包
|
||||
MemberWalletInfo memberWalletInfo = MemberWalletInfo.builder().memberId(memberId).build();
|
||||
MemberTransactionDTO memberTransactionDTO = MemberTransactionDTO.builder()
|
||||
.memberBasicInfo(memberBasicInfo)
|
||||
.memberWalletInfo(memberWalletInfo)
|
||||
.build();
|
||||
transactionService.createMember(memberTransactionDTO);
|
||||
} else {
|
||||
if (StringUtils.isBlank(memberBasicInfo.getOpenId()) && StringUtils.isNotBlank(openId)) {
|
||||
memberBasicInfo.setOpenId(openId);
|
||||
memberBasicInfoService.updateMemberBasicInfo(memberBasicInfo);
|
||||
}
|
||||
}
|
||||
// 服务器生成token返给前端
|
||||
String memberToken = JWTUtils.createMemberToken(memberBasicInfo.getMemberId(), memberBasicInfo.getNickName());
|
||||
// log.info("memToken:{}", memberToken);
|
||||
return memberToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信一键登录
|
||||
* @param dto
|
||||
*/
|
||||
public String wechatLogin(WechatLoginDTO dto) {
|
||||
// 通过微信传的code获取手机号码
|
||||
String mobileNumber = wxAppletRemoteService.getMobileNumberByCode(dto.getCode());
|
||||
if (StringUtils.isBlank(mobileNumber)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_GET_MOBILE_NUMBER_BY_CODE_ERROR);
|
||||
}
|
||||
// 通过appid获取运营商id
|
||||
String merchantId = pileMerchantInfoService.getMerchantIdByAppId(dto.getAppId());
|
||||
// if (Objects.isNull(merchantId)) {
|
||||
// throw new BusinessException(ReturnCodeEnum.CODE_GET_MERCHANT_ID_BY_APP_ID_ERROR);
|
||||
// }
|
||||
// 通过code获取openId
|
||||
String openId = "";
|
||||
try {
|
||||
openId = getOpenIdByCode(dto.getOpenIdCode());
|
||||
} catch (Exception e) {
|
||||
log.error("getOpenIdByCode发生异常", e);
|
||||
}
|
||||
// 查询手机号码是否注册过
|
||||
return memberRegisterAndLogin(mobileNumber, merchantId, openId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取openId
|
||||
* @param code
|
||||
* @return
|
||||
*/
|
||||
public String getOpenIdByCode(String code) {
|
||||
return wxAppletRemoteService.getOpenIdByCode(code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理用户信息
|
||||
*
|
||||
* @param dto 用户个人信息
|
||||
*/
|
||||
public void handleUserInfo(MemberRegisterDTO dto) {
|
||||
// 通过用户手机号查询数据库,如果数据库中存在,则更新
|
||||
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(dto.getMobileNumber());
|
||||
if (Objects.nonNull(memberBasicInfo)) {
|
||||
MemberBasicInfo memberInfo = MemberBasicInfo.builder()
|
||||
.avatarUrl(dto.getAvatarUrl())
|
||||
.mobileNumber(dto.getMobileNumber())
|
||||
.nickName(dto.getNickName())
|
||||
.build();
|
||||
memberBasicInfoService.updateMemberBasicInfo(memberInfo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过memberToken获取用户账户信息
|
||||
*
|
||||
* @param memberId
|
||||
* @return
|
||||
*/
|
||||
public MemberVO getMemberInfoByMemberId(String memberId) {
|
||||
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(memberId);
|
||||
if (Objects.nonNull(memberVO)) {
|
||||
memberVO.setTotalAccountAmount(memberVO.getPrincipalBalance().add(memberVO.getGiftBalance()));
|
||||
}
|
||||
return memberVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户账户余额变动信息
|
||||
*
|
||||
* @param dto
|
||||
*/
|
||||
public PageResponse getMemberBalanceChanges(UniAppQueryMemberBalanceDTO dto) {
|
||||
|
||||
// 获取分页信息以及memberId
|
||||
int pageNum = dto.getPageNum() == 0 ? 1 : dto.getPageNum();
|
||||
int pageSize = dto.getPageSize() == 0 ? 10 : dto.getPageSize();
|
||||
String memberId = dto.getMemberId();
|
||||
String type = dto.getType();
|
||||
|
||||
if (!StringUtils.equals("1", type) && !StringUtils.equals("2", type)) {
|
||||
type = "";
|
||||
}
|
||||
// 分页
|
||||
PageHelper.startPage(pageNum, pageSize);
|
||||
List<MemberWalletLogVO> list = memberBasicInfoService.getMemberBalanceChanges(memberId, type);
|
||||
PageInfo<MemberWalletLogVO> pageInfo = new PageInfo<>(list);
|
||||
|
||||
for (MemberWalletLogVO walletLogVO : pageInfo.getList()) {
|
||||
String subType = walletLogVO.getSubType();
|
||||
String subTypeValue = BalanceChangesEnum.getValueByCode(subType);
|
||||
if (StringUtils.isNotBlank(subTypeValue)) {
|
||||
walletLogVO.setSubType(subTypeValue);
|
||||
}
|
||||
// walletLogVO.setTotalAccountAmount(walletLogVO.getPrincipalBalance().add(walletLogVO.getGiftBalance()));
|
||||
}
|
||||
PageResponse pageResponse = PageResponse.builder()
|
||||
.pageSize(pageSize)
|
||||
.pageNum(pageNum)
|
||||
.list(pageInfo.getList())
|
||||
.pages(pageInfo.getPages())
|
||||
.total(pageInfo.getTotal())
|
||||
.build();
|
||||
return pageResponse;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user