| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.collection.ListUtil; |
| | | import cn.hutool.core.lang.Assert; |
| | | import cn.hutool.core.util.*; |
| | | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| | | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; |
| | |
| | | import cn.iocoder.yudao.module.member.mq.producer.user.MemberUserProducer; |
| | | import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; |
| | | import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; |
| | | import cn.iocoder.yudao.module.system.api.social.SocialClientApi; |
| | | import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO; |
| | | import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; |
| | | import com.google.common.annotations.VisibleForTesting; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | /** |
| | | * 会员 User Service 实现类 |
| | | * |
| | | * @author 芋道源码 |
| | | * @author 超级管理员 |
| | | */ |
| | | @Service |
| | | @Valid |
| | |
| | | |
| | | @Resource |
| | | private SmsCodeApi smsCodeApi; |
| | | |
| | | @Resource |
| | | private SocialClientApi socialClientApi; |
| | | |
| | | @Resource |
| | | private PasswordEncoder passwordEncoder; |
| | |
| | | |
| | | @Override |
| | | public void updateUser(Long userId, AppMemberUserUpdateReqVO reqVO) { |
| | | // 1.1 检测用户是否存在 |
| | | validateUserExists(userId); |
| | | // 1.2 校验手机是否已经被绑定 |
| | | validateEmailUnique(userId, reqVO.getEmail()); |
| | | |
| | | // 2. 更新用户 |
| | | MemberUserDO updateObj = BeanUtils.toBean(reqVO, MemberUserDO.class).setId(userId); |
| | | memberUserMapper.updateById(updateObj); |
| | | } |
| | |
| | | |
| | | // 3. 更新用户手机 |
| | | memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(reqVO.getMobile()).build()); |
| | | } |
| | | |
| | | @Override |
| | | public void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO) { |
| | | // 1.1 获得对应的手机号信息 |
| | | SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo( |
| | | UserTypeEnum.MEMBER.getValue(), reqVO.getCode()); |
| | | Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空"); |
| | | // 1.2 校验新手机是否已经被绑定 |
| | | validateMobileUnique(userId, phoneNumberInfo.getPhoneNumber()); |
| | | |
| | | // 2. 更新用户手机 |
| | | memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(phoneNumberInfo.getPhoneNumber()).build()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | validateUserExists(updateReqVO.getId()); |
| | | // 校验手机唯一 |
| | | validateMobileUnique(updateReqVO.getId(), updateReqVO.getMobile()); |
| | | // 校验邮箱唯一 |
| | | validateEmailUnique(updateReqVO.getId(), updateReqVO.getEmail()); |
| | | |
| | | // 更新 |
| | | MemberUserDO updateObj = MemberUserConvert.INSTANCE.convert(updateReqVO); |
| | |
| | | } |
| | | } |
| | | |
| | | @VisibleForTesting |
| | | void validateEmailUnique(Long id, String email) { |
| | | if (StrUtil.isBlank(email)) { |
| | | return; |
| | | } |
| | | MemberUserDO user = memberUserMapper.selectByEmail(email); |
| | | if (user == null) { |
| | | return; |
| | | } |
| | | // 如果 id 为空,说明不用比较是否为相同 id 的用户 |
| | | if (id == null) { |
| | | throw exception(USER_EMAIL_USED, email); |
| | | } |
| | | if (!user.getId().equals(id)) { |
| | | throw exception(USER_EMAIL_USED, email); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<MemberUserDO> getUserPage(MemberUserPageReqVO pageReqVO) { |
| | | return memberUserMapper.selectPage(pageReqVO); |