//package cn.iocoder.yudao.module.system.service.register;
//
//import cn.hutool.core.util.ObjectUtil;
//import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
//import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
//import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
//import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
//import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi;
//import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO;
//import cn.iocoder.yudao.module.system.controller.admin.register.vo.RegisterSendSmsCodeReqVO;
//import cn.iocoder.yudao.module.system.controller.admin.register.vo.RegisterSmsSendReqVO;
//import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
//import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
//import cn.iocoder.yudao.module.system.convert.register.RegisterConvert;
//import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
//import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
//import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
//import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
//import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants;
//import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
//import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
//import cn.iocoder.yudao.module.system.service.member.MemberService;
//import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService;
//import cn.iocoder.yudao.module.system.service.social.SocialUserService;
//import cn.iocoder.yudao.module.system.service.user.AdminUserService;
//import com.xingyuv.captcha.service.CaptchaService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import javax.validation.Validator;
//
//import java.util.Objects;
//
//import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
//import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
//import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
//
///**
// * Register Service 实现类
// *
// * @author 芋道源码
// */
//@Service
//@Slf4j
//public class RegisterServiceImpl implements RegisterService {
//
//    @Resource
//    private AdminUserService userService;
//    @Resource
//    private LoginLogService loginLogService;
//    @Resource
//    private MemberService memberService;
//    @Resource
//    private SmsCodeApi smsCodeApi;
//    @Resource
//    private OAuth2TokenService oauth2TokenService;
//
//    @Override
//    public void sendSmsCode(RegisterSmsSendReqVO reqVO) {
//        // 发送验证码
//        smsCodeApi.sendSmsCode(RegisterConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP()));
//    }
//
//    @Override
//    public AuthLoginRespVO smsRegister(RegisterSendSmsCodeReqVO reqVO) {
//        // 校验验证码
//        smsCodeApi.useSmsCode(RegisterConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_REGISTER.getScene(), getClientIP()));
//        // 创建用户信息
//        UserSaveReqVO userSaveReqVO = new UserSaveReqVO();
//        userSaveReqVO.setUsername(reqVO.getMobile());
//        userSaveReqVO.setNickname(reqVO.getMobile());
//        userSaveReqVO.setMobile(reqVO.getMobile());
//        userSaveReqVO.setPassword(reqVO.getMobile());
//        Long id = userService.codeRegister(userSaveReqVO);
//        // 获得用户信息
//        AdminUserDO user = userService.getUserByMobile(reqVO.getMobile());
//        if (user == null) {
//            throw exception(USER_NOT_EXISTS);
//        }
//
//        // 创建 Token 令牌，记录登录日志
//        return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE);
//    }
//
//    private void createLogoutLog(Long userId, Integer userType, Integer logType) {
//        LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
//        reqDTO.setLogType(logType);
//        reqDTO.setTraceId(TracerUtils.getTraceId());
//        reqDTO.setUserId(userId);
//        reqDTO.setUserType(userType);
//        if (ObjectUtil.equal(getUserType().getValue(), userType)) {
//            reqDTO.setUsername(getUsername(userId));
//        } else {
//            reqDTO.setUsername(memberService.getMemberUserMobile(userId));
//        }
//        reqDTO.setUserAgent(ServletUtils.getUserAgent());
//        reqDTO.setUserIp(ServletUtils.getClientIP());
//        reqDTO.setResult(LoginResultEnum.SUCCESS.getResult());
//        loginLogService.createLoginLog(reqDTO);
//    }
//
//    private String getUsername(Long userId) {
//        if (userId == null) {
//            return null;
//        }
//        AdminUserDO user = userService.getUser(userId);
//        return user != null ? user.getUsername() : null;
//    }
//
//    private UserTypeEnum getUserType() {
//        return UserTypeEnum.ADMIN;
//    }
//
//    private AuthLoginRespVO createTokenAfterLoginSuccess(Long userId, String username, LoginLogTypeEnum logType) {
//        // 插入登陆日志
//        createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS);
//        // 创建访问令牌
//        OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(),
//                OAuth2ClientConstants.CLIENT_ID_DEFAULT, null);
//        // 构建返回结果
//        return AuthConvert.INSTANCE.convert(accessTokenDO);
//    }
//
//    private void createLoginLog(Long userId, String username,
//                                LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) {
//        // 插入登录日志
//        LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
//        reqDTO.setLogType(logTypeEnum.getType());
//        reqDTO.setTraceId(TracerUtils.getTraceId());
//        reqDTO.setUserId(userId);
//        reqDTO.setUserType(getUserType().getValue());
//        reqDTO.setUsername(username);
//        reqDTO.setUserAgent(ServletUtils.getUserAgent());
//        reqDTO.setUserIp(ServletUtils.getClientIP());
//        reqDTO.setResult(loginResult.getResult());
//        loginLogService.createLoginLog(reqDTO);
//        // 更新最后登录时间
//        if (userId != null && Objects.equals(LoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) {
//            userService.updateUserLogin(userId, ServletUtils.getClientIP());
//        }
//    }
//
//}
