RiderAuthServiceImpl.java
4.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.diligrp.rider.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.diligrp.rider.common.exception.BizException;
import com.diligrp.rider.dto.ApplyDTO;
import com.diligrp.rider.dto.LoginDTO;
import com.diligrp.rider.entity.Rider;
import com.diligrp.rider.mapper.RiderMapper;
import com.diligrp.rider.service.RiderAuthService;
import com.diligrp.rider.config.JwtUtil;
import com.diligrp.rider.vo.RiderVO;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.nio.charset.StandardCharsets;
@Service
@RequiredArgsConstructor
public class RiderAuthServiceImpl implements RiderAuthService {
private final RiderMapper riderMapper;
private final JwtUtil jwtUtil;
private final StringRedisTemplate redisTemplate;
private static final String SMS_KEY_PREFIX = "rider_sms_apply_";
@Override
public void apply(ApplyDTO dto) {
// 校验验证码
String cacheCode = redisTemplate.opsForValue().get(SMS_KEY_PREFIX + dto.getMobile());
if (cacheCode == null || !cacheCode.equals(dto.getCode())) {
throw new BizException("验证码错误或已过期");
}
// 手机号唯一校验
Long exists = riderMapper.selectCount(new LambdaQueryWrapper<Rider>()
.eq(Rider::getMobile, dto.getMobile()));
if (exists > 0) {
throw new BizException("该手机号已申请,请更换");
}
Rider rider = new Rider();
rider.setMobile(dto.getMobile());
rider.setUserNickname(dto.getName());
rider.setUserPass(encryptPass(dto.getPass()));
rider.setIdNo(dto.getIdNo());
rider.setThumb(dto.getThumb());
rider.setCityId(dto.getCityId());
rider.setUserStatus(2); // 待审核
rider.setType(1); // 默认兼职
rider.setIsRest(0);
rider.setUserLogin("phone_" + System.currentTimeMillis());
rider.setCreateTime(System.currentTimeMillis() / 1000);
riderMapper.insert(rider);
// 删除验证码
redisTemplate.delete(SMS_KEY_PREFIX + dto.getMobile());
}
@Override
public RiderVO loginByPass(LoginDTO dto) {
Rider rider = riderMapper.selectOne(new LambdaQueryWrapper<Rider>()
.eq(Rider::getMobile, dto.getUsername()));
if (rider == null) {
throw new BizException("手机号或密码错误");
}
if (!encryptPass(dto.getPass()).equals(rider.getUserPass())) {
throw new BizException("手机号或密码错误");
}
if (rider.getUserStatus() == 2) {
throw new BizException("账号审核中,请耐心等待");
}
if (rider.getUserStatus() == 0) {
throw new BizException("账号审核未通过,请联系客服");
}
if (rider.getStatus() != null && rider.getStatus() == 0) {
throw new BizException("账号已被禁用");
}
return buildVO(rider);
}
@Override
public RiderVO getInfo(Long riderId) {
Rider rider = riderMapper.selectById(riderId);
if (rider == null) throw new BizException("骑手信息不存在");
return buildVO(rider);
}
@Override
public void toggleRest(Long riderId) {
Rider rider = riderMapper.selectById(riderId);
if (rider == null) throw new BizException("骑手信息不存在");
int newRest = rider.getIsRest() == 1 ? 0 : 1;
riderMapper.update(null, new LambdaUpdateWrapper<Rider>()
.eq(Rider::getId, riderId)
.set(Rider::getIsRest, newRest));
}
private RiderVO buildVO(Rider rider) {
RiderVO vo = new RiderVO();
vo.setId(rider.getId());
vo.setMobile(rider.getMobile());
vo.setUserNickname(rider.getUserNickname());
vo.setAvatar(rider.getAvatar());
vo.setType(rider.getType());
vo.setTypeName(rider.getType() == 1 ? "兼职" : "全职");
vo.setUserStatus(rider.getUserStatus());
vo.setStatus(rider.getStatus() == null ? 1 : rider.getStatus());
vo.setStatusName((rider.getStatus() == null || rider.getStatus() == 1) ? "正常" : "禁用");
vo.setBalance(rider.getBalance());
vo.setIsRest(rider.getIsRest());
vo.setCityId(rider.getCityId());
vo.setToken(jwtUtil.generateRiderToken(rider.getId(), rider.getCityId()));
return vo;
}
private String encryptPass(String pass) {
return DigestUtils.md5DigestAsHex(pass.getBytes(StandardCharsets.UTF_8));
}
}