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() .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; } }