package com.huaxu.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.huaxu.dto.UserDto; import com.huaxu.model.LoginUser; import com.huaxu.entity.User; import com.huaxu.model.AjaxMessage; import com.huaxu.model.Pagination; import com.huaxu.model.ResultStatus; import com.huaxu.service.UserService; import com.huaxu.util.ByteArrayUtils; import com.huaxu.util.RedisUtil; import com.huaxu.util.UserUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.oauth2.common.OAuth2AccessToken; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; import java.security.Principal; import java.util.List; import java.util.Optional; /** * 用户(User)控制层 * * @author makejava * @since 2020-10-21 15:23:47 */ @RestController @RequestMapping("/user") @Api(tags = "用户接口") public class UserController { /** * 服务对象 */ @Autowired private UserService userService; @Autowired private RedisUtil redisUtil; /** * 登录 * * * * */ @RequestMapping(value = "login", method = RequestMethod.POST) @ApiOperation(value = "登录") public AjaxMessage< User> login(String mobile, String tenatId) { User user=new User(); user.setPhone(mobile); user.setTenantId(tenatId); ; User user2 = userService.chooseUser(user); if(user2==null){ return new AjaxMessage<>(ResultStatus.ROLE_HAS_DISABLE); } return new AjaxMessage<>(ResultStatus.OK,user2); } /** * 退出 * * * * */ @RequestMapping(value = "logout", method = RequestMethod.POST) @ApiOperation(value = "退出") public AjaxMessage logout(String access_token) { if (userService.logOut(access_token)) { return new AjaxMessage<>(ResultStatus.OK); } else { return new AjaxMessage<>(ResultStatus.ERROR); } } @GetMapping("/info") @CrossOrigin(allowCredentials = "true") @ApiOperation(value = "用户信息") public AjaxMessage info() { LoginUser loginUser = UserUtil.getCurrentUser(); return new AjaxMessage<>(ResultStatus.OK,loginUser); } @ApiIgnore @GetMapping("/principal") @ApiOperation(value = "各子系统获取用户信息接口") public Principal user(Principal principal,HttpServletRequest request) { LoginUser currentUser = UserUtil.getCurrentUser(); Integer roleId = currentUser.getRoleId(); String roleKey="disableRole:"+roleId; String companyKey="disableCompany:"+currentUser.getCompanyId(); String departmentKey="department:"+currentUser.getDepartmentId(); String userKey="disableUser:" + currentUser.getId(); byte[] bytes = redisUtil.get(roleKey.getBytes()); byte[] bytes2 = redisUtil.get(companyKey.getBytes()); byte[] bytes3 = redisUtil.get(departmentKey.getBytes()); byte[] bytes4 = redisUtil.get(userKey.getBytes()); String authorization = request.getHeader("Authorization"); String token =authorization.substring(authorization.indexOf("Bearer")+6).trim(); String tokenKey = "offlineStatus:" + token; boolean flag=false; int status=0; if(bytes!=null){ status=2; flag=true; } if(bytes2!=null){ status=3; flag=true; } if((currentUser.getDepartmentId()!=null&&bytes3!=null)){ status=4; flag=true; } if(bytes4!=null){ status=5; flag=true; } if(flag){ redisUtil.setExpire(tokenKey.getBytes(), ByteArrayUtils.objectToBytes(status).get(), 1800);//15分钟过期 } if(bytes!=null||bytes2!=null||(currentUser.getDepartmentId()!=null&&bytes3!=null) ||bytes4!=null){ return null; } /* String authorization = request.getHeader("Authorization"); String token =authorization.substring(authorization.indexOf("Bearer")+6).trim(); redisUtil.setExpire("auth:"+token,60000); redisUtil.setExpire("access:"+token,60000);*/ return principal; } /** * 新增一条注册数据 * * @param user 实体类 * @return Response对象 */ @RequestMapping(value = "insertRegister", method = RequestMethod.POST) @ApiOperation(value = "插入注册申请") public AjaxMessage insertRegister(@ApiParam(value = "注册申请信息", required = true) @RequestBody User user) { if(StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getPhone())||StringUtils.isEmpty(user.getUserType())) { return new AjaxMessage<>(ResultStatus.PARAM_ERROR); } int result = userService.insertRegister(user); return new AjaxMessage<>(ResultStatus.OK, result); } @RequestMapping(value = "getUserStatus") @ApiOperation(value = "获取用户当前状态",notes = "返回0代表超时,1有其他用户登录了,其他用户被禁用") public AjaxMessage getUserStatus(@ApiParam(value = "accessToken", required = true)@RequestParam String accessToken) { String key="offlineStatus:"+ accessToken; byte[] bytes = redisUtil.get(key.getBytes()); int result=0; if(bytes!=null){ Optional status = ByteArrayUtils.bytesToObject(bytes); result=status.get(); } return new AjaxMessage<>(ResultStatus.OK, result); } }