wlzboy
3 天以前 40a8157440e3b906da8f52e07d939d78c3f4c313
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -31,6 +31,7 @@
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.domain.vo.BranchUserQueryVO;
/**
 * 用户信息
@@ -252,4 +253,145 @@
    {
        return success(deptService.selectDeptTreeList(dept));
    }
    /**
     * 获取当前用户管理的分公司下的所有用户(小程序端专用)
     * 根据当前用户的oaOrderClass字段匹配分公司,返回这些分公司及其所有子部门的用户
     */
    @GetMapping("/branch/users")
    public AjaxResult listBranchUsers()
    {
        // 获取当前用户
        SysUser currentUser = userService.selectUserById(getUserId());
        if (currentUser == null) {
            return error("用户不存在");
        }
        // 获取当前用户管理的分公司ID列表
        String oaOrderClass = currentUser.getOaOrderClass();
        List<Long> branchDeptIds = new java.util.ArrayList<>();
        if (StringUtils.isNotEmpty(oaOrderClass)) {
            // 根据oaOrderClass查询匹配的分公司
            String[] orderCodes = oaOrderClass.split(",");
            SysDept queryDept = new SysDept();
            queryDept.setParentId(100L); // 只查询分公司
            List<SysDept> allBranches = deptService.selectDeptList(queryDept);
            for (SysDept branch : allBranches) {
                for (String code : orderCodes) {
                    // 匹配serviceOrderClass或dispatchOrderClass
                    if ((StringUtils.isNotEmpty(branch.getServiceOrderClass()) && branch.getServiceOrderClass().equals(code.trim()))
                        || (StringUtils.isNotEmpty(branch.getDispatchOrderClass()) && branch.getDispatchOrderClass().equals(code.trim()))) {
                        branchDeptIds.add(branch.getDeptId());
                        break;
                    }
                }
            }
        }
        // 如果没有找到匹配的分公司,使用当前用户所在部门
        if (branchDeptIds.isEmpty()) {
            Long userDeptId = currentUser.getDeptId();
            if (userDeptId != null) {
                // 查找用户所在部门的父级分公司
                SysDept userDept = deptService.selectDeptById(userDeptId);
                if (userDept != null) {
                    // 向上查找直到找到parent_id=100的分公司
                    while (userDept != null && userDept.getParentId() != 100L) {
                        userDept = deptService.selectDeptById(userDept.getParentId());
                    }
                    if (userDept != null && userDept.getParentId() == 100L) {
                        branchDeptIds.add(userDept.getDeptId());
                    }
                }
            }
        }
        // 如果还是没有找到,返回空列表
        if (branchDeptIds.isEmpty()) {
            return success(new java.util.ArrayList<>());
        }
        // 查询这些分公司及其所有子部门的用户
        List<SysUser> users = userService.selectUsersByBranchDeptIds(branchDeptIds);
        return success(users);
    }
    /**
     * 根据分公司ID列表获取用户(POST方式)
     */
    @PostMapping("/branch/users")
    public AjaxResult listUsersByBranchDepts(@RequestBody BranchUserQueryVO queryVO)
    {
        List<Long> branchDeptIds = queryVO.getBranchDeptIds();
        if (branchDeptIds == null || branchDeptIds.isEmpty()) {
            return success(new java.util.ArrayList<>());
        }
        // 查询这些分公司及其所有子部门的用户
        List<SysUser> users = userService.selectUsersByBranchDeptIds(branchDeptIds);
        return success(users);
    }
    /**
     * 根据oaUserId查询用户信息
     */
    @GetMapping("/oa-user/{oaUserId}")
    public AjaxResult getUserByOaUserId(@PathVariable Integer oaUserId)
    {
        SysUser user = userService.selectUserByOaUserId(oaUserId);
        if (user != null) {
            return success(user);
        } else {
            return error("未找到对应的用户信息");
        }
    }
    /**
     * 更新用户可管理分公司(通过oaOrderClass字段保存编码列表)
     * 接收选中的分公司deptId列表,查询对应编码后合并写入oaOrderClass
     */
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理-分公司配置", businessType = BusinessType.UPDATE)
    @PutMapping("/branch/{userId}")
    public AjaxResult updateUserBranch(@PathVariable Long userId, @RequestBody java.util.List<Long> deptIds)
    {
        userService.checkUserDataScope(userId);
        SysUser user = userService.selectUserById(userId);
        if (user == null) {
            return error("用户不存在");
        }
        // 根据deptIds查询分公司信息,收集编码
        java.util.Set<String> codeSet = new java.util.LinkedHashSet<>();
        if (deptIds != null && !deptIds.isEmpty()) {
            SysDept queryDept = new SysDept();
            queryDept.setParentId(100L);
            List<SysDept> allBranches = deptService.selectDeptList(queryDept);
            java.util.Map<Long, SysDept> deptMap = new java.util.HashMap<>();
            for (SysDept d : allBranches) {
                deptMap.put(d.getDeptId(), d);
            }
            for (Long deptId : deptIds) {
                SysDept dept = deptMap.get(deptId);
                if (dept != null) {
                    if (StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
                        codeSet.add(dept.getServiceOrderClass().trim());
                    }
                    if (StringUtils.isNotEmpty(dept.getDispatchOrderClass())) {
                        codeSet.add(dept.getDispatchOrderClass().trim());
                    }
                }
            }
        }
        String newOaOrderClass = String.join(",", codeSet);
        SysUser updateUser = new SysUser();
        updateUser.setUserId(userId);
        updateUser.setOaOrderClass(newOaOrderClass);
        updateUser.setUpdateBy(getUsername());
        return toAjax(userService.updateUserProfile(updateUser));
    }
}