|
|
@@ -0,0 +1,151 @@
|
|
|
+package com.zhaozhaonews.user.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.zhaozhaonews.model.common.dto.ResponseResult;
|
|
|
+import com.zhaozhaonews.model.common.enums.AppHttpCodeEnum;
|
|
|
+import com.zhaozhaonews.model.user.dto.LoginDto;
|
|
|
+import com.zhaozhaonews.model.user.dto.RegisterDto;
|
|
|
+import com.zhaozhaonews.model.user.entity.ApUser;
|
|
|
+import com.zhaozhaonews.user.mapper.ApUserMapper;
|
|
|
+import com.zhaozhaonews.user.service.ApUserService;
|
|
|
+import com.zhaozhaonews.user.util.VerificationCodeStore;
|
|
|
+import com.zhaozhaonews.util.common.AppJwtUtil;
|
|
|
+import com.zhaozhaonews.util.common.MD5Utils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class ApUserServiceImpl extends ServiceImpl<ApUserMapper, ApUser> implements ApUserService {
|
|
|
+ @Autowired
|
|
|
+ private ApUserMapper apUserMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private VerificationCodeStore codeStore;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseResult login(LoginDto loginDto) {
|
|
|
+ if (StringUtils.isBlank(loginDto.getPhone()) || StringUtils.isBlank(loginDto.getPassword())) {
|
|
|
+ Map<String ,Object > map =new HashMap<>();
|
|
|
+ map.put("token", AppJwtUtil.getToken(0l));
|
|
|
+ return ResponseResult.okResult(map);
|
|
|
+ }
|
|
|
+ ApUser apUser = apUserMapper.selectUserByPhone(loginDto.getPhone());
|
|
|
+ if (apUser == null) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST,"用户不存在");
|
|
|
+ }
|
|
|
+ String salt = apUser.getSalt();
|
|
|
+ String password = MD5Utils.encodeWithSalt(loginDto.getPassword(), salt);
|
|
|
+ if (!apUser.getPassword().equals(password)) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
|
|
|
+ }
|
|
|
+ Map<String ,Object > map =new HashMap<>();
|
|
|
+ map.put("token", AppJwtUtil.getToken(apUser.getId()));
|
|
|
+ apUser.setSalt("");
|
|
|
+ apUser.setPassword("");
|
|
|
+ map.put("user",apUser);
|
|
|
+ return ResponseResult.okResult(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseResult register(RegisterDto dto) {
|
|
|
+ if (StringUtils.isBlank(dto.getPhone()) || StringUtils.isBlank(dto.getCode()) || StringUtils.isBlank(dto.getPassword())) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
|
|
|
+ }
|
|
|
+ if (!codeStore.verify(dto.getPhone(), dto.getCode())) {
|
|
|
+ return ResponseResult.errorResult(500, "验证码错误或已过期");
|
|
|
+ }
|
|
|
+ ApUser existing = apUserMapper.selectUserByPhone(dto.getPhone());
|
|
|
+ if (existing != null) {
|
|
|
+ return ResponseResult.errorResult(500, "该手机号已注册");
|
|
|
+ }
|
|
|
+ String salt = MD5Utils.generateSalt();
|
|
|
+ ApUser user = new ApUser();
|
|
|
+ user.setPhone(dto.getPhone());
|
|
|
+ user.setSalt(salt);
|
|
|
+ user.setPassword(MD5Utils.encodeWithSalt(dto.getPassword(), salt));
|
|
|
+ user.setName(dto.getPhone());
|
|
|
+ user.setStatus(true);
|
|
|
+ user.setCreatedTime(LocalDateTime.now());
|
|
|
+ apUserMapper.insert(user);
|
|
|
+ codeStore.remove(dto.getPhone());
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("token", AppJwtUtil.getToken(user.getId()));
|
|
|
+ return ResponseResult.okResult(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseResult sendCode(String phone) {
|
|
|
+ if (StringUtils.isBlank(phone)) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
|
|
|
+ }
|
|
|
+ String code = String.valueOf((int) ((Math.random() * 900000) + 100000));
|
|
|
+ codeStore.save(phone, code);
|
|
|
+ log.info("验证码已发送: phone={}, code={}", phone, code);
|
|
|
+ return ResponseResult.okResult(code);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseResult codeLogin(RegisterDto dto) {
|
|
|
+ if (StringUtils.isBlank(dto.getPhone()) || StringUtils.isBlank(dto.getCode())) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
|
|
|
+ }
|
|
|
+ if (!codeStore.verify(dto.getPhone(), dto.getCode())) {
|
|
|
+ return ResponseResult.errorResult(500, "验证码错误或已过期");
|
|
|
+ }
|
|
|
+ ApUser apUser = apUserMapper.selectUserByPhone(dto.getPhone());
|
|
|
+ if (apUser == null) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST, "用户不存在");
|
|
|
+ }
|
|
|
+ codeStore.remove(dto.getPhone());
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("token", AppJwtUtil.getToken(apUser.getId()));
|
|
|
+ apUser.setSalt("");
|
|
|
+ apUser.setPassword("");
|
|
|
+ map.put("user", apUser);
|
|
|
+ return ResponseResult.okResult(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseResult resetPassword(RegisterDto dto) {
|
|
|
+ if (StringUtils.isBlank(dto.getPhone()) || StringUtils.isBlank(dto.getCode()) || StringUtils.isBlank(dto.getPassword())) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
|
|
|
+ }
|
|
|
+ if (!codeStore.verify(dto.getPhone(), dto.getCode())) {
|
|
|
+ return ResponseResult.errorResult(500, "验证码错误或已过期");
|
|
|
+ }
|
|
|
+ ApUser apUser = apUserMapper.selectUserByPhone(dto.getPhone());
|
|
|
+ if (apUser == null) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST, "用户不存在");
|
|
|
+ }
|
|
|
+ String salt = MD5Utils.generateSalt();
|
|
|
+ apUser.setSalt(salt);
|
|
|
+ apUser.setPassword(MD5Utils.encodeWithSalt(dto.getPassword(), salt));
|
|
|
+ apUserMapper.updateById(apUser);
|
|
|
+ codeStore.remove(dto.getPhone());
|
|
|
+ return ResponseResult.okResult(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseResult updateUserInfo(ApUser user) {
|
|
|
+ if (user.getId() == null) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
|
|
|
+ }
|
|
|
+ ApUser existing = apUserMapper.selectById(user.getId());
|
|
|
+ if (existing == null) {
|
|
|
+ return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(user.getName())) existing.setName(user.getName());
|
|
|
+ if (StringUtils.isNotBlank(user.getImage())) existing.setImage(user.getImage());
|
|
|
+ if (user.getSex() != null) existing.setSex(user.getSex());
|
|
|
+ apUserMapper.updateById(existing);
|
|
|
+ return ResponseResult.okResult(null);
|
|
|
+ }
|
|
|
+}
|