package com.fdkankan.fusion.controller; import cn.dev33.satoken.stp.SaLoginConfig; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.LineCaptcha; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.ResultData; import com.fdkankan.fusion.common.util.RedisKeyUtil; import com.fdkankan.fusion.entity.TmDepartment; import com.fdkankan.fusion.entity.TmUser; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.httpClient.FdService; import com.fdkankan.fusion.httpClient.client.FdKKClient; import com.fdkankan.fusion.httpClient.request.FdkkLoginRequest; import com.fdkankan.fusion.httpClient.response.FdkkLoginVo; import com.fdkankan.fusion.httpClient.response.FdkkResponse; import com.fdkankan.fusion.service.ITmDepartmentService; import com.fdkankan.fusion.service.ITmUserService; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.util.RedisUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; @RestController @RequestMapping public class LoginController extends BaseController{ @Resource FdKKClient fdKKClient; @Autowired RedisUtil redisUtil; @Autowired ITmUserService tmUserService; @Autowired FdService fdService; @Autowired ITmDepartmentService tmDepartmentService; @PostMapping("/fdLogin") public ResultData fdLogin(@RequestBody FdkkLoginRequest request){ if(StringUtils.isBlank(request.getPhoneNum()) || StringUtils.isBlank(request.getPassword()) || StringUtils.isBlank(request.getCode()) || StringUtils.isBlank(request.getDeptId())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if(!redisUtil.hasKey(String.format(RedisKeyUtil.loginAuthCode,request.getCode()))){ throw new BusinessException(ResultCode.LOGIN_AUTH_NOT_EXIST); } TmUser tmUser = tmUserService.getByUserName(request.getPhoneNum()); if(tmUser == null){ throw new BusinessException(ResultCode.PASSWORD_ERROR); } if(tmUser.getStatus() == 0){ throw new BusinessException(ResultCode.USER_NOT_LOGIN_PERM); } List deptList = tmDepartmentService.getSonByDeptId(request.getDeptId()); if(deptList == null || deptList.size() <=0){ throw new BusinessException(ResultCode.DEPT_NOT_EXITS); } List deptIds = deptList.stream().map(TmDepartment::getId).collect(Collectors.toList()); if(!deptIds.contains(tmUser.getDeptId())){ throw new BusinessException(ResultCode.PASSWORD_ERROR); } //对前端传的密码解密 FdkkResponse fdkkLoginVo = fdKKClient.fdkkLogin(request); if(fdkkLoginVo.getCode() == 0){ FdkkLoginVo data = fdkkLoginVo.getData(); StpUtil.login(tmUser.getId(), SaLoginConfig .setExtra("userId",tmUser.getId()) //.setExtra("fdToken",data.getToken()) .setExtra("userName",data.getUser().getUserName()) .setExtra("deptId",tmUser.getDeptId()) .setExtra("nickName",data.getUser().getNickName())); data.setFdToken(data.getToken()); data.setToken(StpUtil.getTokenValue()); tmUserService.setRoleAndPermToRedis(tmUser); data.setTmUser(tmUser); redisUtil.set(String.format(RedisKeyUtil.fusionLoginToken,data.getToken()),JSONObject.toJSONString(data),RedisKeyUtil.tokenTime); redisUtil.set(String.format(RedisKeyUtil.fusionLoginUser,tmUser.getId()),JSONObject.toJSONString(data),RedisKeyUtil.tokenTime); return ResultData.ok(data); } return ResultData.error(fdkkLoginVo.getCode(),fdkkLoginVo.getMsg()); } @PostMapping("/fdLogout") public ResultData fdLogout(){ String fusionLoginToken = String.format(RedisKeyUtil.fusionLoginToken,StpUtil.getTokenValue()); String fusionLoginUser = String.format(RedisKeyUtil.fusionLoginUser,StpUtil.getLoginId()); String fdToken = String.format(RedisKey.TOKEN_V3,fdService.getFdToken()); redisUtil.del(fusionLoginToken); redisUtil.del(fusionLoginUser); redisUtil.del(fdToken); StpUtil.logout(); return ResultData.ok(); } }