package cn.iocoder.yudao.module.ums.service.member;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import cn.iocoder.yudao.module.system.service.auth.WxcpPasswordSetupGrant;
|
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
import cn.iocoder.yudao.module.ums.dal.dataobject.member.UmsMemberDO;
|
import cn.iocoder.yudao.module.ums.dal.mysql.member.UmsMemberMapper;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.module.ums.enums.ErrorCodeConstants.*;
|
|
@Service
|
public class WxcpInitialPasswordService {
|
@Resource private UmsMemberMapper memberMapper;
|
@Resource private AdminUserService userService;
|
@Resource private WxcpPasswordSetupGrant grant;
|
|
@Transactional(rollbackFor = Exception.class)
|
public String setPassword(Long userId, String token, String password) {
|
if (!grant.valid(token, userId)) throw exception(MEMBER_PASSWORD_SETUP_EXPIRED);
|
UmsMemberDO member = memberMapper.selectByUserId(userId);
|
if (member == null || !Boolean.TRUE.equals(member.getPasswordSetupRequired())) {
|
throw exception(MEMBER_PASSWORD_SETUP_NOT_REQUIRED);
|
}
|
int changed = memberMapper.update(null, new LambdaUpdateWrapper<UmsMemberDO>()
|
.eq(UmsMemberDO::getId, member.getId())
|
.eq(UmsMemberDO::getUserId, userId)
|
.eq(UmsMemberDO::getPasswordSetupRequired, true)
|
.set(UmsMemberDO::getPasswordSetupRequired, false));
|
if (changed != 1) throw exception(MEMBER_PASSWORD_SETUP_NOT_REQUIRED);
|
userService.updateUserPassword(userId, password);
|
String username = userService.getUser(userId).getUsername();
|
grant.revoke(token);
|
return username;
|
}
|
}
|