From 375c18a6d2713ff19b22093eec57315992d8333f Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期四, 06 十一月 2025 13:33:52 +0800
Subject: [PATCH] 增加评审下载
---
backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java | 82 +++++++++++++++++++++++++++++++----------
1 files changed, 62 insertions(+), 20 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 16a8e91..5b7be2e 100644
--- a/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
+++ b/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
@@ -4,6 +4,8 @@
import com.rongyichuang.employee.dto.response.EmployeeResponse;
import com.rongyichuang.employee.entity.Employee;
import com.rongyichuang.employee.repository.EmployeeRepository;
+import com.rongyichuang.user.service.UserService;
+import com.rongyichuang.user.entity.User;
import com.rongyichuang.common.exception.BusinessException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,10 +34,26 @@
@Autowired
private EmployeeRepository employeeRepository;
+ @Autowired
+ private UserService userService;
+
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// 瀵嗙爜楠岃瘉姝e垯锛氳嚦灏�6涓瓧绗︼紝蹇呴』鍖呭惈瀛楁瘝鍜屾暟瀛�
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());
+ }
+ }
/**
* 鑾峰彇鎵�鏈夊憳宸ュ垪琛�
@@ -43,7 +61,7 @@
public List<EmployeeResponse> findAllEmployees() {
List<Employee> employees = employeeRepository.findAll();
return employees.stream()
- .map(EmployeeResponse::new)
+ .map(this::convertToResponse)
.collect(Collectors.toList());
}
@@ -53,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);
}
/**
@@ -65,7 +83,7 @@
}
List<Employee> employees = employeeRepository.findByNameContaining(name.trim());
return employees.stream()
- .map(EmployeeResponse::new)
+ .map(this::convertToResponse)
.collect(Collectors.toList());
}
@@ -75,9 +93,24 @@
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", "鍛樺伐涓嶅瓨鍦�");
+ }
+
+ /**
+ * 鏍规嵁鐢ㄦ埛ID鑾峰彇鍛樺伐淇℃伅
+ */
+ public Employee findByUserId(Long userId) {
+ Optional<Employee> employee = employeeRepository.findByUserId(userId);
+ return employee.orElse(null);
}
/**
@@ -87,40 +120,48 @@
// 楠岃瘉杈撳叆
validateEmployeeInput(input);
+ // 澶勭悊User琛ㄩ�昏緫
+ User user;
+ if (input.getPassword() != null && !input.getPassword().trim().isEmpty()) {
+ // 鏈夊瘑鐮佹椂锛屽垱寤烘垨鏇存柊鐢ㄦ埛锛堝寘鍚瘑鐮侊級
+ user = userService.findOrCreateUserByPhone(input.getPhone(), input.getName(), input.getPassword());
+ } else {
+ // 鏃犲瘑鐮佹椂锛屽彧鏇存柊鐢ㄦ埛鍩烘湰淇℃伅锛堜笉鏇存柊瀵嗙爜锛�
+ user = userService.findOrCreateUserByPhone(input.getPhone(), input.getName(), null);
+ }
+
Employee employee;
if (input.getId() != null) {
// 鏇存柊鍛樺伐
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.setUserId(1L); // 涓存椂璁剧疆锛屽疄闄呭簲璇ヤ粠褰撳墠鐧诲綍鐢ㄦ埛鑾峰彇
}
// 璁剧疆鍩烘湰淇℃伅
employee.setName(input.getName());
- employee.setPhone(input.getPhone());
+ // 涓嶅啀璁剧疆phone瀛楁锛屼繚鎸佷负null
+ employee.setPhone(null);
employee.setRoleId(input.getRoleId());
employee.setDescription(input.getDescription());
-
- // 澶勭悊瀵嗙爜
- if (input.getPassword() != null && !input.getPassword().trim().isEmpty()) {
- employee.setPassword(passwordEncoder.encode(input.getPassword()));
- }
+ employee.setUserId(user.getId()); // 璁剧疆鍏宠仈鐨勭敤鎴稩D
Employee savedEmployee = employeeRepository.save(employee);
logger.info("鍛樺伐淇濆瓨鎴愬姛: {}", savedEmployee.getName());
- return new EmployeeResponse(savedEmployee);
+ return new EmployeeResponse(savedEmployee, user);
}
/**
@@ -154,13 +195,14 @@
throw new BusinessException("ROLE_REQUIRED", "瑙掕壊涓嶈兘涓虹┖");
}
- // 鏂板鍛樺伐鏃跺瘑鐮佸繀濉�
+ // 瀵嗙爜楠岃瘉锛氭柊澧炴椂蹇呭~锛岀紪杈戞椂鍙��
if (input.getId() == null) {
+ // 鏂板鍛樺伐鏃跺瘑鐮佸繀濉�
if (input.getPassword() == null || input.getPassword().trim().isEmpty()) {
throw new BusinessException("PASSWORD_REQUIRED", "瀵嗙爜涓嶈兘涓虹┖");
}
}
-
+
// 濡傛灉鎻愪緵浜嗗瘑鐮侊紝楠岃瘉瀵嗙爜鏍煎紡
if (input.getPassword() != null && !input.getPassword().trim().isEmpty()) {
if (!PASSWORD_PATTERN.matcher(input.getPassword()).matches()) {
--
Gitblit v1.8.0