package
com.xiaoz.Serve;
import
cn.hutool.core.bean.BeanUtil;
import
cn.hutool.core.lang.UUID;
import
com.xiaoz.Dao.DaoUser;
import
com.xiaoz.Dto.Const;
import
com.xiaoz.Dto.DtoUser;
import
com.xiaoz.Dto.HttpResponseCode;
import
com.xiaoz.Dto.MyResponse;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.data.redis.core.RedisTemplate;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import
org.springframework.stereotype.Service;
import
java.util.List;
import
java.util.Map;
@Service
public
class
ServerUser {
@Autowired
private
DaoUser daoUser;
@Autowired
private
BCryptPasswordEncoder bCryptPasswordEncoder;
@Autowired
private
RedisTemplate<String,Object> redisTemplate;
public
MyResponse enroll(DtoUser dtoUser) {
String encodedPassword = bCryptPasswordEncoder.encode(dtoUser.getPasswd());
dtoUser.setPasswd(encodedPassword);
dtoUser.setCode(Const.USER_NORMAL);
daoUser.addUser(dtoUser);
return
new
MyResponse(HttpResponseCode.ACCEPTED,
"注册成功"
);
}
public
MyResponse login(DtoUser user){
List<DtoUser> query = daoUser.query(user);
if
(query.size() !=
1
){
return
new
MyResponse(HttpResponseCode.BAD_REQUEST,
"无效的用户消息"
);
}
if
(Const.USER_LOCK.equals(query.getFirst().getCode()) || bCryptPasswordEncoder.matches(user.getPasswd(),query.getFirst().getPasswd())){
return
new
MyResponse(HttpResponseCode.BAD_REQUEST,
"用户被锁定中"
);
}
String token = UUID.randomUUID().toString();
redisTemplate.opsForHash().putAll(Const.USER_REDIS_KEY+token, BeanUtil.beanToMap(query.getFirst()));
return
new
MyResponse(HttpResponseCode.OK,token);
}
public
MyResponse revisePasswd(DtoUser user){
Map<Object, Object> entries = redisTemplate.opsForHash().entries(Const.USER_REDIS_KEY + user.getToken());
if
(entries.isEmpty()){
return
new
MyResponse(HttpResponseCode.FORBIDDEN,
"无效的令牌"
);
}
DtoUser dtoUser =
new
DtoUser();
BeanUtil.fillBeanWithMap(entries, dtoUser,
true
);
daoUser.reviseUser(user);
redisTemplate.delete(Const.USER_REDIS_KEY+user.getToken());
return
new
MyResponse(HttpResponseCode.OK,
"修改完毕,请重新登录"
);
}
public
MyResponse queruser(DtoUser user){
return
new
MyResponse(HttpResponseCode.OK,daoUser.query(user));
}
public
MyResponse isBanned(DtoUser user){
List<DtoUser> query = daoUser.query(user);
if
(query.size() >
1
){
return
new
MyResponse(HttpResponseCode.BAD_REQUEST,
"请提供详细的用户"
);
}
else
if
(query.isEmpty()) {
return
new
MyResponse(HttpResponseCode.BAD_REQUEST,
"无该用户"
);
}
if
(user.getCode() ==
null
){
return
new
MyResponse(HttpResponseCode.BAD_REQUEST,
"请选择是否封禁"
);
}
daoUser.isBanned(user);
return
new
MyResponse(HttpResponseCode.OK,
"封禁完毕"
);
}
}