package com.jilongda.manage.authority.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import com.jilongda.common.model.TDept;
import com.jilongda.common.redis.RedisAutoTemplate;
import com.jilongda.common.utils.CodeGenerateUtils;
import com.jilongda.manage.authority.dto.ResetPasswordDTO;
import com.jilongda.manage.authority.dto.SecUserDTO;
import com.jilongda.manage.authority.dto.SecUserRoleDTO;
import com.jilongda.manage.authority.dto.SecUsersDTO;
import com.jilongda.manage.authority.model.SecResources;
import com.jilongda.manage.authority.model.SecRole;
import com.jilongda.manage.authority.model.SecUser;
import com.jilongda.manage.authority.model.SecUserRole;
import com.jilongda.manage.authority.query.SecUserLowerQuery;
import com.jilongda.manage.authority.service.SecResourcesService;
import com.jilongda.manage.authority.service.SecRoleService;
import com.jilongda.manage.authority.service.SecUserRoleService;
import com.jilongda.manage.authority.service.SecUserService;
import com.jilongda.manage.authority.vo.SecResourceVO;
import com.jilongda.manage.authority.vo.SecUsersVO;
import com.jilongda.manage.model.TOptometrist;
import com.jilongda.manage.query.TOptometristQuery;
import com.jilongda.manage.utils.LoginInfoUtil;
import com.jilongda.manage.utils.UserUtil;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.Constant;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.common.exception.ServiceException;
import com.jilongda.common.log.OperationLog;
import com.jilongda.common.utils.ImportExcelUtil;
import com.jilongda.common.utils.WebUtils;
import com.jilongda.manage.vo.UserAddListVO;
import com.jilongda.manage.vo.UserLevelVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
*
* 前端控制器
*
*
* @author xiaochen
* @since 2022-06-08
*/
@Api(tags = "用户管理")
@RestController
@Slf4j
@RequestMapping("/sec-user")
public class SecUserController {
private final SecUserService secUserService;
private final SecRoleService secRoleService;
private final SecResourcesService secResourcesService;
private final PasswordEncoder passwordEncoder;
private final UserUtil userUtil;
private final SecUserRoleService secUserRoleService;
private final LoginInfoUtil loginInfoUtil;
private final RedisAutoTemplate redisAutoTemplate;
@Autowired
public SecUserController(SecUserService secUserService, SecRoleService secRoleService, SecResourcesService secResourcesService, PasswordEncoder passwordEncoder, UserUtil userUtil, SecUserRoleService secUserRoleService, LoginInfoUtil loginInfoUtil, RedisAutoTemplate redisAutoTemplate) {
this.secUserService = secUserService;
this.secRoleService = secRoleService;
this.secResourcesService = secResourcesService;
this.passwordEncoder = passwordEncoder;
this.userUtil = userUtil;
this.secUserRoleService = secUserRoleService;
this.loginInfoUtil = loginInfoUtil;
this.redisAutoTemplate = redisAutoTemplate;
}
/*@ApiOperation(value = "获取用户的资源(菜单及功能)-有层级", notes = "获取用户的资源(菜单及功能)-有层级")
@GetMapping("resources/{uid}")
public ApiResult> userResources(@PathVariable String uid) {
// List sysResourceVos = secUserService.selectUserResourcesTag(uid);
List sysResourceVos = secUserService.getResourceTag(uid);
return ApiResult.success(sysResourceVos);
}*/
@ApiOperation(value = "获取用户的资源(菜单及功能)-有层级", notes = "获取用户的资源(菜单及功能)-有层级")
@GetMapping("/resources")
public ApiResult> userResources() {
// List sysResourceVos = secUserService.selectUserResourcesTag(uid);
SecUser secUser = userUtil.getSecUser();
Assert.isTrue(Objects.nonNull(secUser), "当前用户异常,请联系管理员");
List sysResourceVos = secUserService.getResourceTag(secUser.getId());
return ApiResult.success(sysResourceVos);
}
@ApiOperation(value = "获取用户字典", notes = "获取用户字典")
@GetMapping("/dist")
public ApiResult> dist() {
List users = secUserService.list(Wrappers.lambdaQuery(SecUser.class).ne(SecUser::getAccount, Constant.ADMIN));
return ApiResult.success(users);
}
@ApiOperation(value = "获取用户的资源(菜单及功能)--- 无层级", notes = "获取用户的资源(菜单及功能)--无层级")
@GetMapping("/resources/nolevel/{uid}")
public ApiResult> nolevel(@PathVariable Long uid) {
List sysResources = secResourcesService.getSecResourcesMapper().selectResourceByUid(uid);
return ApiResult.success(sysResources);
}
@ApiOperation(value = "获取用户信息", notes = "获取用户信息")
@GetMapping("/userinfo/{uid}")
public ApiResult