package com.qianwen.smartman.modules.system.controller; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.qianwen.core.cache.utils.CacheUtil; import com.qianwen.core.excel.util.ExcelUtil; import com.qianwen.core.log.annotation.ApiLog; import com.qianwen.core.mp.support.Condition; import com.qianwen.core.mp.support.Query; import com.qianwen.core.scanner.modular.annotation.DeleteResource; import com.qianwen.core.scanner.modular.annotation.GetResource; import com.qianwen.core.scanner.modular.annotation.PostResource; import com.qianwen.core.scanner.modular.stereotype.ApiResource; import com.qianwen.core.secure.BladeUser; import com.qianwen.core.secure.annotation.PreAuth; import com.qianwen.core.secure.utils.AuthUtil; import com.qianwen.core.tenant.annotation.NonDS; import com.qianwen.core.tool.api.R; import com.qianwen.core.tool.utils.DateUtil; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.common.cache.UserCache; import com.qianwen.smartman.common.constant.ExtCacheConstant; import com.qianwen.smartman.modules.system.convert.UserConvert; import com.qianwen.smartman.modules.system.dto.PasswordModifyValidInfo; import com.qianwen.smartman.modules.system.entity.User; import com.qianwen.smartman.modules.system.excel.UserExcel; import com.qianwen.smartman.modules.system.excel.UserImporter; import com.qianwen.smartman.modules.system.handler.password.PasswordModifyValidLink; import com.qianwen.smartman.modules.system.handler.password.account.AccountPasswordModifyLink; import com.qianwen.smartman.modules.system.handler.password.init.InitPasswordModifyLink; import com.qianwen.smartman.modules.system.service.IUserService; import com.qianwen.smartman.modules.system.vo.QuCreAccBackMessageVO; import com.qianwen.smartman.modules.system.vo.QuickCreationAccountVO; import com.qianwen.smartman.modules.system.vo.RoleIdVO; import com.qianwen.smartman.modules.system.vo.UserAccountVO; import com.qianwen.smartman.modules.system.vo.UserSimpleVO; import com.qianwen.smartman.modules.system.vo.UserVO; import com.qianwen.smartman.modules.system.wrapper.UserWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import springfox.documentation.annotations.ApiIgnore; @Api(value = "用户", tags = {"用户"}) @RestController @ApiResource({"blade-user"}) @NonDS /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/system/controller/UserController.class */ public class UserController { private final IUserService userService; private final InitPasswordModifyLink initPasswordModifyLink; private final AccountPasswordModifyLink accountPasswordModifyLink; public UserController(final IUserService userService, final InitPasswordModifyLink initPasswordModifyLink, final AccountPasswordModifyLink accountPasswordModifyLink) { this.userService = userService; this.initPasswordModifyLink = initPasswordModifyLink; this.accountPasswordModifyLink = accountPasswordModifyLink; } @ApiOperationSupport(order = 1) @ApiLog("查看用户详情") @ApiOperation(value = "查看详情", notes = "传入id") @GetResource({"/detail"}) public R detail(User user) { return R.data(this.userService.detail(user)); } @ApiOperationSupport(order = 2) @ApiLog("查看用户详情") @ApiOperation(value = "查看详情", notes = "传入id") @GetResource({"/info"}) public R info(BladeUser user) { return R.data(this.userService.info(user)); } @ApiOperationSupport(order = 3) @ApiImplicitParams({@ApiImplicitParam(name = "account", value = "账号名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "realName", value = "姓名", paramType = "query", dataType = "string")}) @ApiLog("查看用户列表") @GetResource({"/list"}) @ApiOperation(value = "列表", notes = "传入account和realName") public R> list(@RequestParam @ApiIgnore Map user, Query query, BladeUser bladeUser) { QueryWrapper queryWrapper = Condition.getQueryWrapper(user, User.class); IPage pages = this.userService.page(Condition.getPage(query), !bladeUser.getTenantId().equals("000000") ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper); /* IPage pages = this.userService.page(Condition.getPage(query), !bladeUser.getTenantId().equals("000000") ? (Wrapper) queryWrapper.lambda().eq((v0) -> { return v0.getTenantId(); }, bladeUser.getTenantId()) : queryWrapper);*/ return R.data(UserWrapper.build().pageVO(pages)); } @ApiOperationSupport(order = 3) @ApiImplicitParams({@ApiImplicitParam(name = "account", value = "账号名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "realName", value = "姓名", paramType = "query", dataType = "string")}) @ApiLog("查看用户列表") @GetResource({"/page"}) @ApiOperation(value = "列表", notes = "传入account和realName") public R> page(@ApiIgnore User user, Query query, Long deptId, BladeUser bladeUser) { IPage pages = this.userService.selectUserPage(Condition.getPage(query), user, deptId, bladeUser.getTenantId().equals("000000") ? "" : bladeUser.getTenantId()); return R.data(UserWrapper.build().pageVO(pages)); } @ApiOperationSupport(order = 4) @PostResource({"/submit"}) @ApiLog("新增或修改用户") @ApiOperation(value = "新增或修改", notes = "传入User") @PreAuth public R submit(@Valid @RequestBody User user) { CacheUtil.clear("blade:user", ExtCacheConstant.TENANT_MODE); return R.status(this.userService.submit(user)); } @ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL) @PostResource({"/update"}) @ApiLog("修改用户") @ApiOperation(value = "修改", notes = "传入User") @PreAuth public R update(@Valid @RequestBody User user) { CacheUtil.clear("blade:user", ExtCacheConstant.TENANT_MODE); return R.status(this.userService.updateUser(user)); } @ApiOperationSupport(order = 6) @PostResource({"/remove"}) @ApiLog("删除用户") @ApiOperation(value = "删除", notes = "传入id集合") @PreAuth public R remove(@RequestParam String ids) { CacheUtil.clear("blade:user", ExtCacheConstant.TENANT_MODE); return R.status(this.userService.removeUser(ids)); } @ApiOperationSupport(order = 7) @PostResource({"/grant"}) @ApiLog("设置用户菜单权限") @ApiOperation(value = "权限设置", notes = "传入roleId集合以及menuId集合") public R grant(@RequestParam @ApiParam(value = "userId集合", required = true) String userIds, @RequestParam @ApiParam(value = "roleId集合", required = true) String roleIds) { boolean temp = this.userService.grant(userIds, roleIds); return R.status(temp); } @ApiOperationSupport(order = 8) @PostResource({"/reset-password"}) @ApiLog("重置密码") @ApiOperation(value = "初始化密码", notes = "传入userId集合") @PreAuth public R resetPassword(@RequestParam @ApiParam(value = "userId集合", required = true) String userIds) { CacheUtil.clear("blade:user", ExtCacheConstant.TENANT_MODE); boolean temp = this.userService.resetPassword(userIds); return R.status(temp); } @ApiOperationSupport(order = 9) @PostResource({"/update-password"}) @ApiLog("修改密码") @ApiOperation(value = "修改密码", notes = "传入密码") public R updatePassword(BladeUser user, @RequestParam @ApiParam(value = "旧密码", required = true) String oldPassword, @RequestParam @ApiParam(value = "新密码", required = true) String newPassword, @RequestParam @ApiParam(value = "新密码", required = true) String newPassword1) { CacheUtil.clear("blade:user", ExtCacheConstant.TENANT_MODE); boolean temp = this.userService.updatePassword(user.getUserId(), oldPassword, newPassword, newPassword1); return R.status(temp); } @ApiOperationSupport(order = 10) @PostResource({"/update-info"}) @ApiLog("修改基本信息") @ApiOperation(value = "修改基本信息", notes = "传入User") public R updateInfo(@Valid @RequestBody User user) { CacheUtil.clear("blade:user", ExtCacheConstant.TENANT_MODE); return R.status(this.userService.updateUserInfo(user)); } @ApiOperationSupport(order = 11) @ApiLog("用户列表") @GetResource({"/user-list"}) @ApiOperation(value = "用户列表", notes = "传入user") public R> userList(User user, BladeUser bladeUser) { QueryWrapper queryWrapper = Condition.getQueryWrapper(user); List list = this.userService.list(!AuthUtil.isAdministrator() ? queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()) : queryWrapper); /* Wrapper queryWrapper = Condition.getQueryWrapper(user); List list = this.userService.list(!AuthUtil.isAdministrator() ? (Wrapper) queryWrapper.lambda().eq((v0) -> { return v0.getTenantId(); }, bladeUser.getTenantId()) : queryWrapper);*/ return R.data(list); } @ApiOperationSupport(order = 12) @PostResource({"import-user"}) @ApiLog("导入用户") @ApiOperation(value = "导入用户", notes = "传入excel") public R importUser(MultipartFile file, Integer isCovered) { UserImporter userImporter = new UserImporter(this.userService, Boolean.valueOf(isCovered.intValue() == 1)); ExcelUtil.save(file, userImporter, UserExcel.class); return R.success("操作成功"); } @ApiOperationSupport(order = 13) @ApiLog("导出用户") @GetResource({"export-user"}) @ApiOperation(value = "导出用户", notes = "传入user") public void exportUser(@RequestParam @ApiIgnore Map user, BladeUser bladeUser, HttpServletResponse response) { //Wrapper queryWrapper = Condition.getQueryWrapper(user, User.class); QueryWrapper queryWrapper = Condition.getQueryWrapper(user, User.class); if (!AuthUtil.isAdministrator()) { queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId()); /* queryWrapper.lambda().eq((v0) -> { return v0.getTenantId(); }, bladeUser.getTenantId());*/ } queryWrapper.lambda().eq(User::getIsDeleted, 0); /* queryWrapper.lambda().eq((v0) -> { return v0.getIsDeleted(); }, 0);*/ List list = this.userService.exportUser(queryWrapper); ExcelUtil.export(response, "用户数据" + DateUtil.time(), "用户数据表", list, UserExcel.class); } @ApiOperationSupport(order = 14) @ApiLog("导出模板") @GetResource({"export-template"}) @ApiOperation("导出模板") public void exportUserTemplate(HttpServletResponse response) { List list = new ArrayList<>(); ExcelUtil.export(response, "用户数据模板", "用户数据表", list, UserExcel.class); } @ApiOperationSupport(order = 15) @PostResource({"/register-guest"}) @ApiOperation(value = "第三方注册用户", notes = "传入user") public R registerGuest(User user, Long oauthId) { return R.status(this.userService.registerGuest(user, oauthId)); } @ApiOperationSupport(order = 16) @PostResource({"/update-platform"}) @ApiLog("配置用户平台信息") @ApiOperation(value = "配置用户平台信息", notes = "传入user") public R updatePlatform(Long userId, Integer userType, String userExt) { return R.status(this.userService.updatePlatform(userId, userType, userExt)); } @ApiOperationSupport(order = 17) @ApiLog("查看平台详情") @ApiOperation(value = "查看平台详情", notes = "传入id") @GetResource({"/platform-detail"}) public R platformDetail(User user) { return R.data(this.userService.platformDetail(user)); } @ApiOperationSupport(order = 18) @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "人员姓名", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "account", value = "账号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "deptName", value = "部门名称", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "postName", value = "职位名称", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "current", value = "当前页数", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "size", value = "每页数量", paramType = "query", dataType = "int")}) @ApiLog("用户列表查询") @ApiOperation(value = "用户列表查询", notes = "用户列表查询") @GetResource({"/search/user"}) public R> userSearch(@ApiIgnore UserVO user, @ApiIgnore Query query) { return R.data(this.userService.selectUserSearch(user, query)); } @ApiOperationSupport(order = 19) @PostResource({"/changeStatus"}) @ApiLog("用户启停用") @ApiOperation(value = "启停用", notes = "传入id和是否启用") @PreAuth public R enable(@RequestParam @ApiParam(value = "主键", required = true) Long id, @RequestParam @ApiParam(value = "主键", required = true) boolean enable) { return R.status(this.userService.enable(id, enable)); } @ApiOperationSupport(order = 20) @ApiLog("查询角色下关联的用户") @ApiOperation(value = "查询角色下关联的用户", notes = "查询角色下关联的用户") @GetResource({"/{roleId}/list"}) public R> userListForRole(@PathVariable @ApiParam("角色Id") String roleId) { return R.data(UserConvert.INSTANCE.convert(this.userService.selectRoleUserList(roleId))); } @PreAuth @PostResource({"/{roleId}/save"}) @ApiOperation(value = "角色绑定账号", notes = "角色下绑定账号(多个账号)") public R roleBindUsers(@ApiParam("账号id集合") @RequestBody RoleIdVO roleIdVO, @PathVariable @ApiParam("角色Id") String roleId) { return R.status(this.userService.roleBindUsers(roleId, roleIdVO.getIds()).booleanValue()); } @PreAuth @ApiOperation(value = "角色移除账号", notes = "角色下移除账号(多个账号)") @DeleteResource({"/{roleId}/remove"}) public R roleRemoveUsers(@ApiParam("账号id集合") @RequestBody RoleIdVO roleIdVO, @PathVariable @ApiParam("角色Id") String roleId) { return R.status(this.userService.roleRemoveUsers(roleId, roleIdVO.getIds()).booleanValue()); } @PostResource({"/check-account-security"}) @ApiLog("用户密码安全检查") public PasswordModifyValidInfo checkAccountSecurity(BladeUser user) { User curUser = UserCache.getUser(user.getUserId()); PasswordModifyValidLink passwordCheckLink = this.initPasswordModifyLink; passwordCheckLink.appendNext(this.accountPasswordModifyLink); return passwordCheckLink.doModifyValid(curUser, null); } @PreAuth @PostResource({"/unlock"}) @ApiLog("解锁用户") public R unlock(@RequestParam @ApiParam(value = "用户Id", required = true) Long userId) { return R.status(this.userService.unlock(userId)); } @GetResource({"/unbind-account"}) @ApiOperation("查询未绑定的账号") public R> getUnbindAccountList(Long userId, String tel) { return R.data(this.userService.getUnbindAccountList(userId, tel)); } @GetResource({"/check-user-is-bind-employee"}) @ApiOperation("判断用户是否绑定员工") public R checkUserIsBindEmployee(@RequestParam @ApiParam(value = "userId集合", required = true) String userIds) { return R.data(this.userService.checkUserIsBindEmployee(userIds)); } @PostResource({"/batch-quick-create-account"}) @ApiOperation("批量创建用户账号") public R batchCreateAccountQuick(@RequestBody QuickCreationAccountVO quickCreationAccountVO) { QuCreAccBackMessageVO quCreAccBackMessageVO = this.userService.batchCreateAccount(quickCreationAccountVO); return R.data(quCreAccBackMessageVO); } }