package com.szwl.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.szwl.annotation.Audit;
import com.szwl.constant.AuditEnum;
import com.szwl.constant.ResponseCodesEnum;
import com.szwl.exception.BizException;
import com.szwl.manager.TokenManager;
import com.szwl.model.bo.R;
import com.szwl.model.bo.ResponseModel;
import com.szwl.model.bo.UserDetailBO;
import com.szwl.model.entity.TAdmin;
import com.szwl.model.entity.TMessageCode;
import com.szwl.service.TAdminService;
import com.szwl.service.TMessageCodeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
*
* 短信验证码 前端控制器
*
*
* @author wuhs
* @since 2022-04-14
*/
@Api(value = "/tAdmin", tags = {"账户"})
@RestController
@RequestMapping("/tAdmin")
public class TAdminController {
@Autowired
TokenManager tokenManager;
@Autowired
TAdminService tAdminService;
@Autowired
TMessageCodeService tMessageCodeService;
@ApiOperation(value = "注册")
@PostMapping("/save")
public ResponseModel> save(@RequestBody TAdmin admin) {
if(StringUtils.isEmpty(admin.getUsername())||StringUtils.isEmpty(admin.getName())||StringUtils.isEmpty(admin.getPassword())){
return R.fail(ResponseCodesEnum.A0100,"数据有空!");
}
if(admin.getIfForeign().equals("0")){
//国内用户注册
if(StringUtils.isEmpty(admin.getPhone())){
return R.fail(ResponseCodesEnum.A0100,"手机号为空!");
}
}else {
//国外用户注册
if(StringUtils.isEmpty(admin.getEmail())){
return R.fail(ResponseCodesEnum.A0100,"邮箱为空!");
}
}
if (StringUtils.isEmpty(admin.getCode())){
return R.fail(ResponseCodesEnum.A0100,"验证码为空!");
}
//校验是否有重复的
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAdmin::getUsername,admin.getUsername());
List list = tAdminService.list(query);
if(list.size()>0){
return R.fail(ResponseCodesEnum.A0201,"用户登录名已存在");
}
LambdaQueryWrapper query1 = Wrappers.lambdaQuery();
if(admin.getIfForeign().equals("0")){
query1.eq(TAdmin::getPhone,admin.getPhone());
}else {
query1.eq(TAdmin::getEmail,admin.getEmail());
}
List list1 = tAdminService.list(query1);
if(list1.size()>0){
return R.fail(ResponseCodesEnum.A0203,"用户手机/邮箱已存在");
}
//校验验证码是否正确
LambdaQueryWrapper query2 = Wrappers.lambdaQuery();
if(admin.getIfForeign().equals("0")){
query2.eq(TMessageCode::getPhone,admin.getPhone());
}else {
query2.eq(TMessageCode::getPhone,admin.getEmail());
}
query2.eq(TMessageCode::getType,"0");//0,代表注册验证码
query2.eq(TMessageCode::getStatus,"0");
List messageCodeList = tMessageCodeService.list(query2);
if(messageCodeList.size()>0){
TMessageCode tMessageCode = messageCodeList.get(messageCodeList.size() - 1);
if(!tMessageCode.getCode().equals(admin.getCode())){
return R.fail(ResponseCodesEnum.A0002,"验证码错误");
}
tMessageCode.setStatus("1");
admin.setCreateDate(new Date());
admin.setModifyDate(new Date());
admin.setIsAdmined(false);
admin.setIsEnabled(true);
admin.setLoginFailureCount(0);
admin.setIsLocked(false);
admin.setPassword(DigestUtils.md5Hex(admin.getPassword()));
boolean b = tAdminService.save(admin);
tMessageCode.setModifyDate(new Date());
tMessageCodeService.saveOrUpdate(tMessageCode);
return R.ok(b);
}else {
return R.fail(ResponseCodesEnum.A0002,"没有找到验证码");
}
}
@ApiOperation(value = "登录")
@PostMapping("/login")
@Audit(type = AuditEnum.LOGIN,content = "#username + '请求登录'")
public ResponseModel login(String username, String password) {
if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
return R.fail(ResponseCodesEnum.A0001,"参数有空");
}
//验证用户名登录
LambdaQueryWrapper query = Wrappers.lambdaQuery();
// query.eq(TAdmin::getUsername,username);
query.eq(TAdmin::getPassword,password);
query.and(
wrapper -> {
wrapper.eq(TAdmin::getUsername,username)
.or().eq(TAdmin::getPhone,username);
}
);
TAdmin tAdmin = Optional.ofNullable(tAdminService.getOnly(query))
.orElseThrow(() -> new BizException(ResponseCodesEnum.L0002));
UserDetailBO userDetailBO = BeanUtil.copyProperties(tAdmin,UserDetailBO.class);
String token = IdUtil.simpleUUID();
userDetailBO.setCurrentToken(token);
// 保存到redis
tokenManager.saveAuthentication(token,userDetailBO);
return R.ok(userDetailBO);
}
@ApiOperation(value = "修改密码")
@PostMapping("/updatePassword")
public ResponseModel> updatePassword(String username,String password) {
if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
return R.fail(ResponseCodesEnum.A0001,"参数有空");
}
//查找用户名
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAdmin::getUsername,username);
List list = tAdminService.list(query);
if(list.size()>0){
TAdmin admin = list.get(0);
admin.setPassword(password);
boolean b = tAdminService.saveOrUpdate(admin);
return R.ok(b);
}
return R.fail(ResponseCodesEnum.A0001,"修改失败");
}
}