package com.stylefeng.guns.modular.api;
|
|
import cn.hutool.core.bean.BeanUtil;
|
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.TDriverMapper;
|
import com.stylefeng.guns.modular.system.dao.UserMapper;
|
import com.stylefeng.guns.modular.system.model.*;
|
import com.stylefeng.guns.modular.system.service.ITCompanyService;
|
import com.stylefeng.guns.modular.system.service.TCarriersService;
|
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.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Random;
|
|
/**
|
* 接口控制器提供
|
*
|
* @author stylefeng
|
* @Date 2018/7/20 23:39
|
*/
|
@RestController
|
@Api(tags = "登录")
|
@RequestMapping("/gunsApi")
|
public class ApiController extends BaseController {
|
|
@Resource
|
private TDriverMapper driverMapper;
|
|
@Resource
|
private ITCompanyService companyService;
|
|
@Resource
|
private TCarriersService tCarriersService;
|
|
@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<TDriver> drivers = driverMapper.selectList(new EntityWrapper<TDriver>().eq("account",username));
|
if (drivers.size()==0) {
|
return new ErrorTip(500, "The account you entered is not registered!");
|
}
|
String encrypt = MD5Util.encrypt(password);
|
if (!encrypt.equals(drivers.get(0).getPassword())) {
|
return new ErrorTip(500, "The password you entered is incorrect!");
|
} else {
|
TDriver driver = drivers.get(0);
|
TDriverLogin tDriverLogin = new TDriverLogin();
|
Integer isCarriers = driver.getIsCarriers();
|
if(isCarriers==1){
|
Integer companyId = driver.getCompanyId();
|
TCompany company = companyService.selectById(companyId);
|
tDriverLogin.setHeadImg(company.getHeadImg());
|
}else {
|
Integer carriersId = driver.getCarriersId();
|
TCarriers tCarriers = tCarriersService.selectById(carriersId);
|
tDriverLogin.setHeadImg(tCarriers.getCompanyLogo());
|
}
|
BeanUtil.copyProperties(driver,tDriverLogin);
|
tDriverLogin.setToken(JwtTokenUtil.generateToken(String.valueOf(driver.getId())));
|
HashMap<String, Object> result = new HashMap<>();
|
result.put("driver", driver);
|
return new SuccessTip(tDriverLogin);
|
}
|
}
|
|
|
|
|
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<TDriver> user = driverMapper.selectList(new EntityWrapper<TDriver>().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, "The account you entered is not registered!");
|
}
|
user.get(0).setPassword(MD5Util.encrypt(password));
|
driverMapper.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();
|
}
|
}
|