package com.iailab.module.system.api.user; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.framework.datapermission.core.annotation.DataPermission; import com.iailab.module.system.api.user.dto.AdminUserRespDTO; import com.iailab.module.system.controller.admin.user.vo.user.UserSaveReqVO; import com.iailab.module.system.dal.dataobject.dept.DeptDO; import com.iailab.module.system.dal.dataobject.user.AdminUserDO; import com.iailab.module.system.service.dept.DeptService; import com.iailab.module.system.service.permission.PermissionService; import com.iailab.module.system.service.user.AdminUserService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.*; import static com.iailab.framework.common.pojo.CommonResult.success; import static com.iailab.framework.common.util.collection.CollectionUtils.convertSet; @RestController // 提供 RESTful API 接口,给 Feign 调用 @Validated public class AdminUserApiImpl implements AdminUserApi { @Resource private AdminUserService userService; @Resource private DeptService deptService; @Resource private PermissionService permissionService; @Override @DataPermission(enable = false) // 关闭数据权限,避免只查看自己时,查询不到部门。 public CommonResult getUser(Long id) { AdminUserDO user = userService.getUser(id); return success(BeanUtils.toBean(user, AdminUserRespDTO.class)); } @Override public CommonResult> getUserListBySubordinate(Long id) { // 1.1 获取用户负责的部门 AdminUserDO user = userService.getUser(id); if (user == null) { return success(Collections.emptyList()); } ArrayList deptIds = new ArrayList<>(); DeptDO dept = deptService.getDept(user.getDeptId()); if (dept == null) { return success(Collections.emptyList()); } if (ObjUtil.notEqual(dept.getLeaderUserId(), id)) { // 校验为负责人 return success(Collections.emptyList()); } deptIds.add(dept.getId()); // 1.2 获取所有子部门 List childDeptList = deptService.getChildDeptList(dept.getId()); if (CollUtil.isNotEmpty(childDeptList)) { deptIds.addAll(convertSet(childDeptList, DeptDO::getId)); } // 2. 获取部门对应的用户信息 List users = userService.getUserListByDeptIds(deptIds); users.removeIf(item -> ObjUtil.equal(item.getId(), id)); // 排除自己 return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); } @Override public CommonResult> getUserList(Collection ids) { List users = userService.getUserList(ids); return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); } @Override public CommonResult> getUserListByDeptIds(Collection deptIds) { List users = userService.getUserListByDeptIds(deptIds); return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); } @Override public CommonResult> getUserListByPostIds(Collection postIds) { List users = userService.getUserListByPostIds(postIds); return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); } @Override public CommonResult validateUserList(Collection ids) { userService.validateUserList(ids); return success(true); } @Override public void saveOrUpdateUserInfo(AdminUserRespDTO userRespDTO) { AdminUserDO entity = ConvertUtils.sourceToTarget(userRespDTO, AdminUserDO.class); AdminUserDO dto = userService.getUserByUsername(entity.getUsername()); UserSaveReqVO bean = BeanUtils.toBean(dto, UserSaveReqVO.class); if (dto != null) { bean.setId(dto.getId()); userService.updateUser(bean); } else { userService.createUser(bean); } permissionService.assignUserRole(entity.getId(), userRespDTO.getRoleIdList()); } }