diff --git a/backend/src/main/java/com/designhub/service/UserService.java b/backend/src/main/java/com/designhub/service/UserService.java index 1befdfa..c23221a 100644 --- a/backend/src/main/java/com/designhub/service/UserService.java +++ b/backend/src/main/java/com/designhub/service/UserService.java @@ -610,23 +610,45 @@ public class UserService { log.info("自动匹配到系统部门: deptId={}, deptName={}, type={}", matchedDeptId, dept.getDeptName(), dept.getDeptType()); } else { - // 无法自动匹配,需要用户手动选择 - String deptNamesStr = dingDepartments.stream() - .map(d -> String.valueOf(d.get("name"))) - .collect(Collectors.joining(", ")); - log.warn("无法自动匹配系统部门,钉钉部门: {}", deptNamesStr); - user.setDeptId(null); - user.setDeptName(null); - user.setRoleIds(null); - user.setStatus(0); // 暂时禁用,待选择部门后启用 + // 无法自动匹配,使用第一个可用部门作为默认值 + List availableDepts = departmentMapper.selectList( + new LambdaQueryWrapper() + .eq(Department::getStatus, 1) + .eq(Department::getDeleted, 0) + .orderByAsc(Department::getSortOrder) + .orderByAsc(Department::getId) + ); + + if (!availableDepts.isEmpty()) { + // 使用第一个可用部门作为默认值 + Department defaultDept = availableDepts.get(0); + user.setDeptId(defaultDept.getId()); + user.setDeptName(defaultDept.getDeptName()); + user.setRoleIds("receiving".equals(defaultDept.getDeptType()) ? "5" : "6"); + log.warn("无法自动匹配系统部门,使用默认部门: deptId={}, deptName={}, 钉钉部门: {}", + defaultDept.getId(), defaultDept.getDeptName(), + dingDepartments.stream() + .map(d -> String.valueOf(d.get("name"))) + .collect(Collectors.joining(", "))); + } else { + // 如果系统没有任何部门,才需要用户手动选择 + String deptNamesStr = dingDepartments.stream() + .map(d -> String.valueOf(d.get("name"))) + .collect(Collectors.joining(", ")); + log.warn("无法自动匹配系统部门,且系统无可用部门,钉钉部门: {}", deptNamesStr); + user.setDeptId(null); + user.setDeptName(null); + user.setRoleIds(null); + user.setStatus(0); // 暂时禁用,待选择部门后启用 + } } userMapper.insert(user); log.info("钉钉用户创建成功: userId={}, username={}, needSelectDept={}", user.getId(), user.getUsername(), matchedDeptId == null); - // 如果需要选择部门,抛出特殊异常 - if (matchedDeptId == null) { + // 如果需要选择部门(系统无任何可用部门的情况),抛出特殊异常 + if (user.getDeptId() == null) { String deptInfo = dingDepartments.isEmpty() ? "无钉钉部门信息" : dingDepartments.stream() .map(d -> String.valueOf(d.get("name"))) diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index 10d8bff..49106a2 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -198,12 +198,12 @@ @click="handleDingTalkLogin" :loading="dingTalkLoginLoading" > - -