Codex Assistant
1 天以前 afeeed281e60466b576fbe74d339634cc5d07b82
backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
@@ -43,12 +43,25 @@
    private static final Pattern PASSWORD_PATTERN = Pattern.compile("^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d@$!%*?&]{6,}$");
    /**
     * 辅助方法:将Employee转换为EmployeeResponse
     */
    private EmployeeResponse convertToResponse(Employee employee) {
        Optional<User> userOpt = userService.findById(employee.getUserId());
        if (userOpt.isPresent()) {
            User user = userOpt.get();
            return new EmployeeResponse(employee, user);
        } else {
            throw new BusinessException("USER_NOT_FOUND", "员工对应的用户不存在,员工ID: " + employee.getId());
        }
    }
    /**
     * 获取所有员工列表
     */
    public List<EmployeeResponse> findAllEmployees() {
        List<Employee> employees = employeeRepository.findAll();
        return employees.stream()
                .map(EmployeeResponse::new)
                .map(this::convertToResponse)
                .collect(Collectors.toList());
    }
@@ -58,7 +71,7 @@
    public Page<EmployeeResponse> findEmployees(String name, int page, int size) {
        Pageable pageable = PageRequest.of(page, size);
        Page<Employee> employeePage = employeeRepository.findByNameContainingOrderByCreateTimeDesc(name, pageable);
        return employeePage.map(EmployeeResponse::new);
        return employeePage.map(this::convertToResponse);
    }
    /**
@@ -70,7 +83,7 @@
        }
        List<Employee> employees = employeeRepository.findByNameContaining(name.trim());
        return employees.stream()
                .map(EmployeeResponse::new)
                .map(this::convertToResponse)
                .collect(Collectors.toList());
    }
@@ -80,7 +93,14 @@
    public EmployeeResponse findById(Long id) {
        Optional<Employee> employee = employeeRepository.findById(id);
        if (employee.isPresent()) {
            return new EmployeeResponse(employee.get());
            Employee emp = employee.get();
            Optional<User> userOpt = userService.findById(emp.getUserId());
            if (userOpt.isPresent()) {
                User user = userOpt.get();
                return new EmployeeResponse(emp, user);
            } else {
                throw new BusinessException("USER_NOT_FOUND", "员工对应的用户不存在,员工ID: " + id);
            }
        }
        throw new BusinessException("EMPLOYEE_NOT_FOUND", "员工不存在");
    }
@@ -116,21 +136,24 @@
            employee = employeeRepository.findById(input.getId())
                    .orElseThrow(() -> new BusinessException("EMPLOYEE_NOT_FOUND", "员工不存在"));
            
            // 检查手机号是否被其他员工使用
            if (employeeRepository.existsByPhoneAndIdNot(input.getPhone(), input.getId())) {
                throw new BusinessException("PHONE_ALREADY_EXISTS", "手机号已被其他员工使用");
            // 检查用户ID是否被其他员工使用(排除当前员工)
            Optional<Employee> existingEmployee = employeeRepository.findByUserId(user.getId());
            if (existingEmployee.isPresent() && !existingEmployee.get().getId().equals(input.getId())) {
                throw new BusinessException("PHONE_ALREADY_EXISTS", "该手机号已被其他员工使用");
            }
        } else {
            // 新增员工
            if (employeeRepository.existsByPhone(input.getPhone())) {
                throw new BusinessException("PHONE_ALREADY_EXISTS", "手机号已存在");
            // 新增员工 - 检查该用户是否已经是员工
            Optional<Employee> existingEmployee = employeeRepository.findByUserId(user.getId());
            if (existingEmployee.isPresent()) {
                throw new BusinessException("PHONE_ALREADY_EXISTS", "该手机号已被其他员工使用");
            }
            employee = new Employee();
        }
        // 设置基本信息
        employee.setName(input.getName());
        employee.setPhone(input.getPhone());
        // 不再设置phone字段,保持为null
        employee.setPhone(null);
        employee.setRoleId(input.getRoleId());
        employee.setDescription(input.getDescription());
        employee.setUserId(user.getId()); // 设置关联的用户ID
@@ -138,7 +161,7 @@
        Employee savedEmployee = employeeRepository.save(employee);
        logger.info("员工保存成功: {}", savedEmployee.getName());
        
        return new EmployeeResponse(savedEmployee);
        return new EmployeeResponse(savedEmployee, user);
    }
    /**