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 drivers = driverMapper.selectList(new EntityWrapper().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 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 roleList = new ArrayList(); List roleNameList = new ArrayList(); 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 user = driverMapper.selectList(new EntityWrapper().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(); } }