/** * 培训管理实现类 * 提供培训管理接口的具体实现 * 遵循单一职责原则,专注于培训记录的管理 */ package com.employeetraining.training; import java.time.LocalDate; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; public class TrainingManagerImpl implements TrainingManager { // 使用线程安全的集合存储培训记录 private final Map trainingRecordMap = new ConcurrentHashMap<>(); @Override public void createTrainingRecord(TrainingRecord record) { if (record == null) { throw new IllegalArgumentException("Training record cannot be null"); } if (record.getRecordId() == null || record.getRecordId().trim().isEmpty()) { throw new IllegalArgumentException("Record ID cannot be empty"); } trainingRecordMap.put(record.getRecordId(), record); } @Override public boolean updateTrainingStatus(String recordId, TrainingRecord.TrainingStatus status) { TrainingRecord record = trainingRecordMap.get(recordId); if (record != null) { record.setStatus(status); return true; } return false; } @Override public boolean updateTrainingScore(String recordId, double score) { TrainingRecord record = trainingRecordMap.get(recordId); if (record != null && score >= 0 && score <= 100) { record.setScore(score); return true; } return false; } @Override public boolean completeTraining(String recordId, double score, String feedback) { TrainingRecord record = trainingRecordMap.get(recordId); if (record != null) { record.setStatus(TrainingRecord.TrainingStatus.COMPLETED); record.setScore(score); record.setCompletionDate(LocalDate.now()); record.setFeedback(feedback); return true; } return false; } @Override public Optional findTrainingRecordById(String recordId) { if (recordId == null) { return Optional.empty(); } return Optional.ofNullable(trainingRecordMap.get(recordId)); } @Override public List findTrainingRecordsByEmployeeId(String employeeId) { if (employeeId == null) { return Collections.emptyList(); } return trainingRecordMap.values().stream() .filter(record -> employeeId.equals(record.getEmployeeId())) .toList(); } @Override public List findTrainingRecordsByCourseId(String courseId) { if (courseId == null) { return Collections.emptyList(); } return trainingRecordMap.values().stream() .filter(record -> courseId.equals(record.getCourseId())) .toList(); } @Override public List findTrainingRecordsByStatus(TrainingRecord.TrainingStatus status) { if (status == null) { return Collections.emptyList(); } return trainingRecordMap.values().stream() .filter(record -> status == record.getStatus()) .toList(); } @Override public List findCompletedTrainingsByDateRange(LocalDate startDate, LocalDate endDate) { if (startDate == null || endDate == null) { return Collections.emptyList(); } return trainingRecordMap.values().stream() .filter(record -> record.getStatus() == TrainingRecord.TrainingStatus.COMPLETED && record.getCompletionDate() != null && !record.getCompletionDate().isBefore(startDate) && !record.getCompletionDate().isAfter(endDate)) .toList(); } @Override public List getAllTrainingRecords() { return new ArrayList<>(trainingRecordMap.values()); } }