From 58d9f460b2f8c34430285115e2557d18333c5cab Mon Sep 17 00:00:00 2001 From: Codex Assistant <codex@example.com> Date: 星期三, 08 十月 2025 14:16:55 +0800 Subject: [PATCH] feat: 修复Player实体phone字段数据冗余问题并优化小程序报名逻辑 --- 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