package com.stylefeng.guns.modular.api;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.stylefeng.guns.core.base.controller.BaseController;
|
import com.stylefeng.guns.core.base.tips.ErrorTip;
|
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
|
import com.stylefeng.guns.core.shiro.ShiroUser;
|
import com.stylefeng.guns.core.util.Convert;
|
import com.stylefeng.guns.core.util.JwtTokenUtil;
|
import com.stylefeng.guns.core.util.MD5Util;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.dao.TCompanyMapper;
|
import com.stylefeng.guns.modular.system.dao.UserMapper;
|
import com.stylefeng.guns.modular.system.model.TCompany;
|
import com.stylefeng.guns.modular.system.model.User;
|
import com.stylefeng.guns.modular.system.model.UserInfo;
|
import com.stylefeng.guns.modular.system.utils.EmailUtil;
|
import com.stylefeng.guns.modular.system.utils.RedisUtil;
|
import com.stylefeng.guns.modular.system.utils.tips.SuccessTip;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
|
/**
|
* 接口控制器提供
|
*
|
* @author stylefeng
|
* @Date 2018/7/20 23:39
|
*/
|
@RestController
|
@Api(tags = "登录")
|
@RequestMapping("/gunsApi")
|
public class ApiController extends BaseController {
|
|
@Autowired
|
private UserMapper userMapper;
|
|
@Resource
|
private TCompanyMapper companyMapper;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
/**
|
* api登录接口,通过账号密码获取token
|
*/
|
|
@PostMapping("/companyLogin")
|
@ApiOperation(value = "卡车公司登录", notes = "卡车公司登录")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "username", value = "用户账号", required = true, dataType = "String"),
|
@ApiImplicitParam(name = "password", value = "用户密码", required = true, dataType = "String")
|
})
|
public Object companyLogin(@RequestParam("username") String username,
|
@RequestParam("password") String password) {
|
|
|
//获取数据库中的账号密码,准备比对
|
List<TCompany> user = companyMapper.selectList(new EntityWrapper<TCompany>().eq("account",username));
|
if (user.size()==0) {
|
return new ErrorTip(500, "Account password error!");
|
}
|
if(user.get(0).getExpirationTime().getTime()<new Date().getTime()){
|
return new ErrorTip(500, "Account Expire!");
|
}
|
UserInfo userInfo = new UserInfo();
|
BeanUtils.copyProperties(user, userInfo);
|
// String credentials = user.getPassword();
|
// String salt = user.getSalt();
|
// ByteSource credentialsSalt = new Md5Hash(salt);
|
// SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
|
// new ShiroUser(), credentials, credentialsSalt, "");
|
|
//校验用户账号密码
|
// HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
|
// md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
|
// md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
|
// boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch(
|
// usernamePasswordToken, simpleAuthenticationInfo);
|
String encrypt = MD5Util.encrypt(password);
|
if(user.get(0).getStatus()==3){
|
return new ErrorTip(500, "Your account has been frozen, please contact the platform!");
|
}
|
if (!encrypt.equals(user.get(0).getPassword())) {
|
return new ErrorTip(500, "Account password error!");
|
} else {
|
TCompany company = user.get(0);
|
HashMap<String, Object> result = new HashMap<>();
|
result.put("token", JwtTokenUtil.generateToken(String.valueOf(company.getId())));
|
result.put("company", company);
|
return result;
|
}
|
}
|
|
|
|
|
private ShiroUser shiroUser(User user) {
|
ShiroUser shiroUser = new ShiroUser();
|
|
shiroUser.setId(user.getId());
|
shiroUser.setAccount(user.getAccount());
|
shiroUser.setDeptId(user.getDeptid());
|
shiroUser.setDeptName(ConstantFactory.me().getDeptName(user.getDeptid()));
|
shiroUser.setName(user.getName());
|
|
Integer[] roleArray = Convert.toIntArray(user.getRoleid());
|
List<Integer> roleList = new ArrayList<Integer>();
|
List<String> roleNameList = new ArrayList<String>();
|
for (int roleId : roleArray) {
|
roleList.add(roleId);
|
roleNameList.add(ConstantFactory.me().getSingleRoleName(roleId));
|
}
|
shiroUser.setRoleList(roleList);
|
shiroUser.setRoleNames(roleNameList);
|
|
return shiroUser;
|
}
|
|
/**
|
* 测试接口是否走鉴权
|
*/
|
@RequestMapping(value = "/test", method = RequestMethod.POST)
|
public Object test() {
|
return SUCCESS_TIP;
|
}
|
|
|
@PostMapping("/forget")
|
@ApiOperation(value = "忘记密码", notes = "忘记密码")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "username", value = "用户账号", required = true, dataType = "String"),
|
@ApiImplicitParam(name = "password", value = "用户密码", required = true, dataType = "String"),
|
@ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String"),
|
})
|
public Object forget(@RequestParam("username") String username,
|
@RequestParam("password") String password,
|
@RequestParam("code") String code) {
|
List<TCompany> user = companyMapper.selectList(new EntityWrapper<TCompany>().eq("account",username));
|
String value = redisUtil.getValue(username);
|
if(!code.equals(value)){
|
return new ErrorTip(5001, "Verification code error!");
|
}
|
if (user.size()==0){
|
return new ErrorTip(500, "Account does not exist!");
|
}
|
user.get(0).setPassword(MD5Util.encrypt(password));
|
companyMapper.updateById(user.get(0));
|
return new SuccessTip();
|
}
|
|
|
@PostMapping("/sendCode")
|
@ApiOperation(value = "发送验证码", notes = "发送验证码")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "email", value = "用户邮箱", required = true, dataType = "String"),
|
})
|
public Object sendCode(@RequestParam("email") String email) {
|
String randomNumber = getRandomString(6);
|
redisUtil.setStrValue(email,randomNumber,300);
|
try {
|
EmailUtil.sendMailGMail(email, randomNumber);
|
return new com.stylefeng.guns.core.base.tips.SuccessTip();
|
}catch (Exception e){
|
e.printStackTrace();
|
return new ErrorTip(500,"ERROR");
|
}
|
}
|
|
|
private String getRandomString(int length) {
|
String base = "0123456789";
|
Random random = new Random();
|
StringBuffer sb = new StringBuffer();
|
|
for(int i = 0; i < length; ++i) {
|
int number = random.nextInt(base.length());
|
sb.append(base.charAt(number));
|
}
|
|
return sb.toString();
|
}
|
|
}
|