package com.doumee.service.business.impl; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.jwt.JwtTokenUtil; import com.doumee.config.wx.WxMiniConfig; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.IdentityInfoMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.ShopInfoMapper; import com.doumee.dao.business.SmsrecordMapper; import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.ShopInfo; import com.doumee.dao.business.model.MemberRevenue; import com.doumee.dao.business.model.Smsrecord; import com.doumee.dao.dto.MemberListQueryDTO; import com.doumee.dao.dto.UpdMobileRequest; import com.doumee.dao.dto.WxPhoneRequest; import com.doumee.dao.vo.AccountResponse; import com.doumee.dao.vo.MemberDetailVO; import com.doumee.dao.vo.MemberListVO; import com.doumee.dao.vo.UserCenterVO; import com.doumee.service.business.MemberService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import io.swagger.annotations.ApiModelProperty; import me.chanjar.weixin.common.error.WxErrorException; import nonapi.io.github.classgraph.json.Id; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 会员信息表Service实现 * @author 江蹄蹄 * @date 2025/07/09 12:00 */ @Service public class MemberServiceImpl implements MemberService { @Autowired private MemberMapper memberMapper; @Autowired private IdentityInfoMapper identityInfoMapper; @Autowired private SmsrecordMapper smsrecordMapper; @Autowired private JwtTokenUtil jwtTokenUtil; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private RedisTemplate redisTemplate; @Autowired private ShopInfoMapper shopInfoMapper; @Override public Integer create(Member member) { memberMapper.insert(member); return member.getId(); } @Override public void deleteById(Integer id) { memberMapper.deleteById(id); } @Override public void delete(Member member) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(member); memberMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } memberMapper.deleteBatchIds(ids); } @Override public void updateById(Member member) { memberMapper.updateById(member); } @Override public void updateByIdInBatch(List members) { if (CollectionUtils.isEmpty(members)) { return; } for (Member member: members) { this.updateById(member); } } @Override public Member findById(Integer id) { Member member = memberMapper.selectById(id); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(StringUtils.isNotBlank(member.getCoverImage())){ String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode(); member.setFullCoverImage(path + member.getCoverImage()); } return member; } @Override public Member findOne(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectOne(wrapper); } @Override public List findList(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); pageWrap.getModel().setDeleted(Constants.ZERO); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(Member::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getDeleted() != null) { queryWrapper.lambda().eq(Member::getDeleted, pageWrap.getModel().getDeleted()); } if (pageWrap.getModel().getCreateUser() != null) { queryWrapper.lambda().eq(Member::getCreateUser, pageWrap.getModel().getCreateUser()); } if (pageWrap.getModel().getCreateTime() != null) { queryWrapper.lambda().ge(Member::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); queryWrapper.lambda().le(Member::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); } if (pageWrap.getModel().getUpdateUser() != null) { queryWrapper.lambda().eq(Member::getUpdateUser, pageWrap.getModel().getUpdateUser()); } if (pageWrap.getModel().getUpdateTime() != null) { queryWrapper.lambda().ge(Member::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); queryWrapper.lambda().le(Member::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(Member::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getCoverImage() != null) { queryWrapper.lambda().eq(Member::getCoverImage, pageWrap.getModel().getCoverImage()); } if (pageWrap.getModel().getOpenid() != null) { queryWrapper.lambda().like(Member::getOpenid, pageWrap.getModel().getOpenid()); } if (pageWrap.getModel().getNickName() != null) { queryWrapper.lambda().like(Member::getNickName, pageWrap.getModel().getNickName()); } if (pageWrap.getModel().getTelephone() != null) { queryWrapper.lambda().like(Member::getTelephone, pageWrap.getModel().getTelephone()); } if (pageWrap.getModel().getName() != null) { queryWrapper.lambda().like(Member::getName, pageWrap.getModel().getName()); } if (pageWrap.getModel().getAmount() != null) { queryWrapper.lambda().eq(Member::getAmount, pageWrap.getModel().getAmount()); } if (pageWrap.getModel().getTotalAmount() != null) { queryWrapper.lambda().eq(Member::getTotalAmount, pageWrap.getModel().getTotalAmount()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(Member::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getLoginTime() != null) { queryWrapper.lambda().ge(Member::getLoginTime, Utils.Date.getStart(pageWrap.getModel().getLoginTime())); queryWrapper.lambda().le(Member::getLoginTime, Utils.Date.getEnd(pageWrap.getModel().getLoginTime())); } if (pageWrap.getModel().getLoginTimes() != null) { queryWrapper.lambda().eq(Member::getLoginTimes, pageWrap.getModel().getLoginTimes()); } if (pageWrap.getModel().getPublishNum() != null) { queryWrapper.lambda().eq(Member::getPublishNum, pageWrap.getModel().getPublishNum()); } if (pageWrap.getModel().getScore() != null) { queryWrapper.lambda().eq(Member::getScore, pageWrap.getModel().getScore()); } if (pageWrap.getModel().getLat() != null) { queryWrapper.lambda().eq(Member::getLat, pageWrap.getModel().getLat()); } if (pageWrap.getModel().getLgt() != null) { queryWrapper.lambda().eq(Member::getLgt, pageWrap.getModel().getLgt()); } if (pageWrap.getModel().getProvince() != null) { queryWrapper.lambda().eq(Member::getProvince, pageWrap.getModel().getProvince()); } if (pageWrap.getModel().getCity() != null) { queryWrapper.lambda().eq(Member::getCity, pageWrap.getModel().getCity()); } if (pageWrap.getModel().getArea() != null) { queryWrapper.lambda().eq(Member::getArea, pageWrap.getModel().getArea()); } queryWrapper.lambda().ge(pageWrap.getModel().getStartTime()!=null, Member::getCreateTime,pageWrap.getModel().getStartTime()); queryWrapper.lambda().le(pageWrap.getModel().getEndTime()!=null,Member::getCreateTime,pageWrap.getModel().getEndTime()); for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(memberMapper.selectPage(page, queryWrapper)); } @Override public long count(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectCount(wrapper); } /***************小程序接口*************/ /** * 微信小程序登录 * @param code * @return */ @Override public AccountResponse wxLogin(String code) { if(StringUtils.isBlank(code)){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } try { //获取微信敏感数据 WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); String openId = session.getOpenid(); String unionId = session.getUnionid(); if (StringUtils.isBlank(openId)) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "获取openid失败!请联系管理员"); } Member member = memberMapper.selectOne(new QueryWrapper().lambda().eq(Member::getOpenid, openId) .ne(Member::getUserType,Constants.ONE) .eq(Member::getDeleted, Constants.ZERO) .ne(Member::getStatus, Constants.TWO).last("limit 1")); AccountResponse accountResponse = new AccountResponse(); accountResponse.setOpenid(openId); if(Objects.isNull(member)){ return accountResponse; } if(!Constants.equalsInteger(member.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,账号已禁用,请联系管理员!"); } String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate); accountResponse.setToken(token); accountResponse.setMember(member); // 门店用户身份时,返回申请的门店状态 fillShopInfo(accountResponse, member); return accountResponse; } catch (WxErrorException e) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "微信登录异常!请联系管理员"); } } @Override public AccountResponse wxAuthPhone(WxPhoneRequest wxPhoneRequest) { if(Objects.isNull(wxPhoneRequest) || StringUtils.isBlank(wxPhoneRequest.getCode()) || StringUtils.isBlank(wxPhoneRequest.getOpenid())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } try { WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNumber(wxPhoneRequest.getCode()); String mobile = userPhoneInfo.getPhoneNumber(); if(Objects.isNull(mobile)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未获取到手机号"); } Member member = memberMapper.selectOne(new QueryWrapper().lambda() .eq(Member::getTelephone,mobile) .ne(Member::getUserType,Constants.ONE) .ne(Member::getStatus, Constants.TWO).last("limit 1")); if(Objects.nonNull(member)){ if(!Constants.equalsInteger(member.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,账号已禁用,请联系管理员!"); } memberMapper.update(new UpdateWrapper().lambda().set(Member::getTelephone,mobile) .set(Member::getOpenid,wxPhoneRequest.getOpenid()).set(Member::getUpdateTime,new Date()).eq(Member::getId,member.getId())); }else{ member = new Member(); member.setCreateTime(new Date()); member.setUpdateTime(member.getCreateTime()); member.setDeleted(Constants.ZERO); member.setOpenid(wxPhoneRequest.getOpenid()); member.setTelephone(mobile); member.setNickName(mobile); // member.setCoverImage("1.png"); member.setAmount(Constants.ZERO.longValue()); member.setTotalAmount(Constants.ZERO.longValue()); member.setStatus(Constants.ZERO); member.setLoginTime(new Date()); member.setLoginTimes(Constants.ONE.longValue()); member.setReceiveNum(Constants.ZERO.longValue()); member.setPublishNum(Constants.ZERO.longValue()); member.setAutoReceiveStatus(Constants.ONE); member.setUseIdentity(Constants.ZERO); memberMapper.insert(member); } String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate); AccountResponse accountResponse = new AccountResponse(); accountResponse.setToken(token); accountResponse.setMember(member); // 门店用户身份时,返回申请的门店状态 fillShopInfo(accountResponse, member); return accountResponse; } catch (Exception e) { e.printStackTrace(); throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未解析到手机号"); } } /** * 门店用户身份时,填充门店审核状态 */ private void fillShopInfo(AccountResponse response, Member member) { if (Constants.TWO.equals(member.getUserType())) { ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper().lambda() .eq(ShopInfo::getRegionMemberId, member.getId()) .eq(ShopInfo::getDeleted, Constants.ZERO) .last("limit 1")); if (shopInfo != null) { response.setShopId(shopInfo.getId()); response.setShopAuditStatus(shopInfo.getAuditStatus()); } } } @Override public void editMemberInfo(Member member){ if(Objects.isNull(member) || ( StringUtils.isBlank(member.getCoverImage()) && StringUtils.isBlank(member.getName()) && StringUtils.isBlank(member.getNickName()) && Objects.isNull(member.getAutoReceiveStatus()) )){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } memberMapper.update(new UpdateWrapper().lambda() .set(StringUtils.isNotBlank(member.getNickName()),Member::getNickName,member.getNickName()) .set(StringUtils.isNotBlank(member.getName()),Member::getName,member.getName()) .set(StringUtils.isNotBlank(member.getCoverImage()),Member::getCoverImage,member.getCoverImage()) .set(Objects.nonNull(member.getAutoReceiveStatus()),Member::getAutoReceiveStatus,member.getAutoReceiveStatus()) .set(Member::getUpdateTime,new Date()) .eq(Member::getId,member.getId())); } // @Override // public void editUseIdentity(Member member){ // if(Objects.isNull(member) // || Objects.isNull(member.getUseIdentity())){ // throw new BusinessException(ResponseStatus.BAD_REQUEST); // } // if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){ // member.setUseIdentity(Constants.ZERO); // memberMapper.update(new UpdateWrapper().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId())); // }else{ // if(identityInfoMapper.selectCount(new QueryWrapper().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO) // .eq(IdentityInfo::getMemberId,member.getId()) // .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){ // memberMapper.update(new UpdateWrapper().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId())); // }else{ // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前无可用接单身份!"); // } // } // } @Override public Member getMemberInfo(Integer memberId){ Member member = this.findById(memberId); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(StringUtils.isNotBlank(member.getCoverImage())){ String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode(); member.setFullCoverImage(path + member.getCoverImage()); } // UserCenterVO userCenterVO = new UserCenterVO(); // userCenterVO.setReleaseTaskTotal(Constants.ZERO); // userCenterVO.setWaitReceiveTotal(Constants.ZERO); // userCenterVO.setDoingTotal(Constants.ZERO); // userCenterVO.setWaitCommentTotal(Constants.ZERO); // userCenterVO.setTaskingTotal(Constants.ZERO); // userCenterVO.setDoneTotal(Constants.ZERO); // userCenterVO.setReceiveTotal(Constants.ZERO); // List releaseOrders = ordersMapper.selectList(new QueryWrapper().lambda().eq(Orders::getDeleted,Constants.ZERO) // .eq(Orders::getReleaseMemberId,member.getId())); // if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){ // userCenterVO.setReleaseTaskTotal(releaseOrders.size()); // userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size()); // userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size()); // userCenterVO.setWaitReceiveTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.wait.getKey())).collect(Collectors.toList()).size()); // } // List acceptOrders = ordersMapper.selectList(new QueryWrapper().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member.getId())); // if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){ // userCenterVO.setReceiveTotal(acceptOrders.size()); // userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size()); // userCenterVO.setDoneTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())).collect(Collectors.toList()).size()); // } // member.setUserCenterVO(userCenterVO); return member; } @Override public UserCenterVO getPlatformAboutUs(){ UserCenterVO userCenterVO = new UserCenterVO(); userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode())); userCenterVO.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode())); userCenterVO.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode())); userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode())); return userCenterVO; } @Override public void logOut(String token,Integer memberId){ memberMapper.update(new UpdateWrapper().lambda().setSql(" openid = null ").eq(Member::getId,memberId)); jwtTokenUtil.logoutForH5(token); } @Override public void logOff(String token,Integer memberId){ Member member = memberMapper.selectById(memberId); if(Objects.nonNull(member)){ memberMapper.update(new UpdateWrapper().lambda() // .set(Member::getOpenId,null) .set(Member::getStatus,Constants.TWO) .eq(Member::getId,member.getId()) ); } redisTemplate.delete(token); } /***************管理端会员列表接口*************/ @Override public PageData findMemberListPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MemberListQueryDTO query = pageWrap.getModel(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(Member::getDeleted, Constants.ZERO); queryWrapper.lambda().eq(Member::getUserType, Constants.ZERO); if (query != null) { if (StringUtils.isNotBlank(query.getKeyword())) { queryWrapper.lambda().and(w -> w .like(Member::getName, query.getKeyword()) .or().like(Member::getTelephone, query.getKeyword())); } if (query.getStatus() != null) { queryWrapper.lambda().eq(Member::getStatus, query.getStatus()); } if (query.getStartTime() != null) { queryWrapper.lambda().ge(Member::getCreateTime, query.getStartTime()); } if (query.getEndTime() != null) { queryWrapper.lambda().le(Member::getCreateTime, Utils.Date.getEnd(query.getEndTime())); } } for (PageWrap.SortData sortData : pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } IPage memberPage = memberMapper.selectPage(page, queryWrapper); IPage voPage = memberPage.convert(this::toListVO); return PageData.from(voPage); } @Override public MemberDetailVO findMemberDetail(Integer id) { Member member = memberMapper.selectById(id); if (Objects.isNull(member) || Constants.equalsInteger(member.getDeleted(), Constants.ONE)) { throw new BusinessException(ResponseStatus.DATA_EMPTY); } MemberDetailVO detail = new MemberDetailVO(); detail.setId(member.getId()); detail.setNickName(member.getNickName()); detail.setName(member.getName()); detail.setTelephone(member.getTelephone()); detail.setAmount(member.getAmount()); detail.setTotalAmount(member.getTotalAmount()); detail.setStatus(member.getStatus()); detail.setUseIdentity(member.getUseIdentity()); detail.setOpenid(member.getOpenid()); detail.setUserType(member.getUserType()); detail.setBusinessStatus(member.getBusinessStatus()); detail.setScore(member.getScore()); detail.setReceiveNum(member.getReceiveNum()); detail.setPublishNum(member.getPublishNum()); detail.setCreateTime(member.getCreateTime()); detail.setLoginTime(member.getLoginTime()); detail.setLoginTimes(member.getLoginTimes()); detail.setProvince(member.getProvince()); detail.setCity(member.getCity()); detail.setArea(member.getArea()); detail.setAutoReceiveStatus(member.getAutoReceiveStatus()); if (StringUtils.isNotBlank(member.getCoverImage())) { String path = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.MEMBER_FILES).getCode(); detail.setFullCoverImage(path + member.getCoverImage()); } return detail; } private MemberListVO toListVO(Member member) { MemberListVO vo = new MemberListVO(); vo.setId(member.getId()); vo.setNickName(member.getNickName()); vo.setName(member.getName()); vo.setTelephone(member.getTelephone()); vo.setCreateTime(member.getCreateTime()); vo.setStatus(member.getStatus()); return vo; } @Override public void verifyUserPhone(UpdMobileRequest request){ if(Objects.isNull(request) || Objects.isNull(request.getMemberId()) || StringUtils.isBlank(request.getPhone()) || StringUtils.isBlank(request.getCode()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Member member = memberMapper.selectById(request.getMemberId()); if(StringUtils.isNotBlank(member.getTelephone())&&!member.getTelephone().equals(request.getPhone())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"手机号错误"); } this.verifyPhoneCode(request.getCode(),request.getPhone()); } public void verifyPhoneCode(String code,String phone){ //验证码 Smsrecord smsrecord = smsrecordMapper.selectOne(new QueryWrapper().lambda() .eq(Smsrecord::getDeleted,Constants.ZERO) .eq(Smsrecord::getCode,code) .eq(Smsrecord::getPhone,phone) .last(" limit 1") ); if(Objects.isNull(smsrecord)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码错误!"); } if(!Constants.equalsInteger(smsrecord.getStatus(),Constants.ZERO)){ if(Constants.equalsInteger(smsrecord.getStatus(),Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码已使用"); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码已过期"); } } smsrecordMapper.update(new UpdateWrapper().lambda() .set(Smsrecord::getStatus,Constants.ONE) .eq(Smsrecord::getId,smsrecord.getId()) ); } @Override public void updateUserPhone(UpdMobileRequest request){ if(Objects.isNull(request) || Objects.isNull(request.getMemberId()) || StringUtils.isBlank(request.getPhone()) || StringUtils.isBlank(request.getCode()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } //判断新手机号是否已被使用 if(memberMapper.selectCount(new QueryWrapper().lambda().eq(Member::getTelephone,request.getPhone()))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,新手机号已被绑定,无法进行换绑!"); } Member member = memberMapper.selectById(request.getMemberId()); if(StringUtils.isNotBlank(member.getTelephone())&&member.getTelephone().equals(request.getPhone())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无法更换相同手机号"); } this.verifyPhoneCode(request.getCode(),request.getPhone()); memberMapper.update(new UpdateWrapper().lambda() .set(Member::getTelephone,request.getPhone()) .eq(Member::getId,request.getMemberId()) ); } }