package com.javatechie.event;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
@Getter
@Setter
public class PatientDischargeEvent extends ApplicationEvent {
private String patientId;
private String patientName;
public PatientDischargeEvent(Object source,String patientId,String patientName) {
super(source);
this.patientId=patientId;
this.patientName=patientName;
}
}
package com.javatechie.handler;
import com.javatechie.event.PatientDischargeEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class BillingServiceHandler {
@Async
@EventListener
public void processBill(PatientDischargeEvent patientDischargeEvent) {
// Finalize billing details
System.out.println("Billing Service: Finalizing bill for patient "
+patientDischargeEvent.getPatientId()+" : "+Thread.currentThread().getName());
}
}
package com.javatechie.handler;
import com.javatechie.event.PatientDischargeEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class HousekeepingServiceHandler {
@Async
@EventListener
public void cleanAndAssign(PatientDischargeEvent event) {
// Prepare the room for the next patient
System.out.println("Housekeeping Service: Preparing room for next patient after discharge of "
+event.getPatientName()+" : "+Thread.currentThread().getName());
}
}
package com.javatechie.handler;
import com.javatechie.event.PatientDischargeEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class MedicalRecordsServiceHandler {
@Async
@EventListener
public void updatePatientHistory(PatientDischargeEvent event) {
// Update medical records
System.out.println("Medical Records Service: Updating records for patient "
+event.getPatientId()+" : "+Thread.currentThread().getName());
}
}
package com.javatechie.handler;
import com.javatechie.event.PatientDischargeEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class NotificationServiceHandler {
@Async
@EventListener
public void notifyPatients(PatientDischargeEvent event) {
// Send discharge notification
System.out.println("Notification Service: Sending discharge notification for patient "
+event.getPatientName() +" : "+Thread.currentThread().getName());
}
}
package com.javatechie.service;
import com.javatechie.event.PatientDischargeEvent;
import com.javatechie.handler.BillingServiceHandler;
import com.javatechie.handler.HousekeepingServiceHandler;
import com.javatechie.handler.MedicalRecordsServiceHandler;
import com.javatechie.handler.NotificationServiceHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class PatientDischargeService {
@Autowired
private ApplicationEventPublisher eventPublisher;
public String dischargePatient(String patientId, String patientName) {
log.info("patient discharge process initiated {} ", patientName);
// billingService.processBill();
// medicalRecordsService.updatePatientHistory();
// housekeepingService.cleanAndAssign();
// notificationService.notifyPatients();
//publish an event
eventPublisher.publishEvent(new PatientDischargeEvent(this, patientId, patientName));
log.info("patient discharge process completed {} ", patientName);
return "Patient " + patientName + " with ID " + patientId + " discharged successfully!";
}
}
Комментарии
Отправить комментарий