From afeeed281e60466b576fbe74d339634cc5d07b82 Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期三, 08 十月 2025 08:56:42 +0800
Subject: [PATCH] 修复评审功能和用户认证问题

---
 backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java |   47 +++++++++++++++++++++++++++++++++++------------
 1 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java b/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
index 417cbce..5b7be2e 100644
--- a/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
+++ b/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杞崲涓篍mployeeResponse
+     */
+    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", "鍛樺伐瀵瑰簲鐨勭敤鎴蜂笉瀛樺湪锛屽憳宸D: " + 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", "鍛樺伐瀵瑰簲鐨勭敤鎴蜂笉瀛樺湪锛屽憳宸D: " + 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", "鎵嬫満鍙峰凡琚叾浠栧憳宸ヤ娇鐢�");
+            // 妫�鏌ョ敤鎴稩D鏄惁琚叾浠栧憳宸ヤ娇鐢紙鎺掗櫎褰撳墠鍛樺伐锛�
+            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()); // 璁剧疆鍏宠仈鐨勭敤鎴稩D
@@ -138,7 +161,7 @@
         Employee savedEmployee = employeeRepository.save(employee);
         logger.info("鍛樺伐淇濆瓨鎴愬姛: {}", savedEmployee.getName());
         
-        return new EmployeeResponse(savedEmployee);
+        return new EmployeeResponse(savedEmployee, user);
     }
 
     /**

--
Gitblit v1.8.0