231 lines
12 KiB
Plaintext
231 lines
12 KiB
Plaintext
package com.healthcare.ohctech.controller;
|
|
|
|
import com.healthcare.ohctech.dto.TreatmentInternalExternalDto;
|
|
import com.healthcare.ohctech.entity.*;
|
|
import com.healthcare.ohctech.repository.EmployeeAppointmentRepo;
|
|
import com.healthcare.ohctech.service.impl.AuthServiceImpl;
|
|
import com.healthcare.ohctech.service.impl.TreatmentServiceImpl;
|
|
import com.healthcare.ohctech.util.PaginationUtil;
|
|
import jakarta.validation.Valid;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.data.domain.Pageable;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
@RestController
|
|
@RequestMapping("/treatments")
|
|
public class TreatmentController {
|
|
|
|
@Autowired
|
|
private TreatmentServiceImpl treatmentServiceImpl;
|
|
|
|
@Autowired
|
|
private EmployeeAppointmentRepo employeeAppointmentRepo;
|
|
|
|
@Autowired
|
|
private AuthServiceImpl authServiceImpl;
|
|
|
|
@GetMapping("/{appointmentId}")
|
|
public ResponseEntity<?> getTreatmentsByAppointmentId(@PathVariable Long appointmentId) {
|
|
List<Treatment> treatments = treatmentServiceImpl.getTreatmentByAppointmentId(appointmentId);
|
|
List<TreatmentExternal> treatmentExternals = treatmentServiceImpl.getTreatmentExternalsByAppointmentId(appointmentId);
|
|
|
|
Map<String, Object> response = new LinkedHashMap<>();
|
|
|
|
List<Map<String, Object>> internalTreatments = new ArrayList<>();
|
|
for (Treatment treatment : treatments) {
|
|
Map<String, Object> treatmentData = new LinkedHashMap<>();
|
|
treatmentData.put("id", treatment.getId());
|
|
treatmentData.put("appointmentId", treatment.getEmployeeAppointment() != null ? treatment.getEmployeeAppointment().getId() : null);
|
|
treatmentData.put("item", mapItem(treatment.getItem()));
|
|
treatmentData.put("frequency", mapMedicineFrequency(treatment.getMedicineFrequency()));
|
|
treatmentData.put("timing", mapMedicineTiming(treatment.getMedicineTiming()));
|
|
treatmentData.put("dosageCategory", mapRouteOfAdministration(treatment.getRouteOfAdministration()));
|
|
treatmentData.put("forDays", treatment.getForDays());
|
|
treatmentData.put("dosage", treatment.getDosage());
|
|
treatmentData.put("itemQty", treatment.getItemQty());
|
|
treatmentData.put("itemBatchNo", treatment.getItemBatchNo());
|
|
treatmentData.put("issuedQty", treatment.getIssuedQty());
|
|
treatmentData.put("issueBy", treatment.getIssueBy());
|
|
treatmentData.put("isDisplay", treatment.getIsDisplay());
|
|
treatmentData.put("groupItemId", treatment.getGroupItemId());
|
|
treatmentData.put("followupId", treatment.getFollowupId());
|
|
treatmentData.put("modifiedBy", treatment.getModifiedBy());
|
|
treatmentData.put("lastModified", treatment.getLastModified());
|
|
internalTreatments.add(treatmentData);
|
|
}
|
|
|
|
List<Map<String, Object>> externalTreatments = new ArrayList<>();
|
|
for (TreatmentExternal treatmentExternal : treatmentExternals) {
|
|
Map<String, Object> treatmentExternalData = new LinkedHashMap<>();
|
|
treatmentExternalData.put("id", treatmentExternal.getId());
|
|
treatmentExternalData.put("appointmentId", treatmentExternal.getEmployeeAppointment() != null ? treatmentExternal.getEmployeeAppointment().getId() : null);
|
|
treatmentExternalData.put("item", treatmentExternal.getItemName());
|
|
treatmentExternalData.put("frequency", treatmentExternal.getFrequency());
|
|
treatmentExternalData.put("forDays", treatmentExternal.getForDays());
|
|
treatmentExternalData.put("itemQty", treatmentExternal.getItemQty());
|
|
treatmentExternalData.put("dosage", treatmentExternal.getDosage());
|
|
treatmentExternalData.put("timing", mapMedicineTiming(treatmentExternal.getMedicineTiming()));
|
|
treatmentExternalData.put("dosageCategory", mapRouteOfAdministration(treatmentExternal.getRouteOfAdministration()));
|
|
treatmentExternalData.put("followupId", treatmentExternal.getFollowupId());
|
|
treatmentExternalData.put("modifiedBy", treatmentExternal.getModifiedBy());
|
|
treatmentExternalData.put("lastModified", treatmentExternal.getLastModified());
|
|
externalTreatments.add(treatmentExternalData);
|
|
}
|
|
|
|
response.put("treatments", internalTreatments);
|
|
response.put("treatmentExternals", externalTreatments);
|
|
|
|
return new ResponseEntity<>(response, HttpStatus.OK);
|
|
}
|
|
|
|
private Map<String, Object> mapItem(Item item) {
|
|
Map<String, Object> itemMap = new LinkedHashMap<>();
|
|
if (item != null) {
|
|
itemMap.put("id", item.getId());
|
|
itemMap.put("label", item.getItemName());
|
|
} else {
|
|
itemMap.put("id", null);
|
|
itemMap.put("label", " ");
|
|
}
|
|
return itemMap;
|
|
}
|
|
|
|
private Map<String, Object> mapMedicineFrequency(MedicineFrequency frequency) {
|
|
Map<String, Object> frequencyMap = new LinkedHashMap<>();
|
|
if (frequency != null) {
|
|
frequencyMap.put("id", frequency.getId());
|
|
frequencyMap.put("label", frequency.getMedicineFrequency());
|
|
} else {
|
|
frequencyMap.put("id", null);
|
|
frequencyMap.put("label", " ");
|
|
}
|
|
return frequencyMap;
|
|
}
|
|
|
|
private Map<String, Object> mapMedicineTiming(MedicineTiming timing) {
|
|
Map<String, Object> timingMap = new LinkedHashMap<>();
|
|
if (timing != null) {
|
|
timingMap.put("id", timing.getId());
|
|
timingMap.put("label", timing.getMedicineTiming());
|
|
} else {
|
|
timingMap.put("id", null);
|
|
timingMap.put("label", " ");
|
|
}
|
|
return timingMap;
|
|
}
|
|
|
|
private Map<String, Object> mapRouteOfAdministration(RouteOfAdministration route) {
|
|
Map<String, Object> routeMap = new LinkedHashMap<>();
|
|
if (route != null) {
|
|
routeMap.put("id", route.getId());
|
|
routeMap.put("label", route.getDosageCategory());
|
|
} else {
|
|
routeMap.put("id", null);
|
|
routeMap.put("label", " ");
|
|
}
|
|
return routeMap;
|
|
}
|
|
|
|
|
|
@GetMapping
|
|
public ResponseEntity<?> getAllTreatments(@RequestParam(required = false) Integer page,
|
|
@RequestParam(required = false) Integer size,
|
|
@RequestParam(required = false) String sortBy,
|
|
@RequestParam(required = false) String sortOrder) {
|
|
Pageable pageable = PaginationUtil.getPageableWithDefaults(page, size, sortBy, sortOrder);
|
|
Page<Treatment> treatmentPage = treatmentServiceImpl.getAllTreatments(pageable);
|
|
Page<TreatmentExternal> treatmentExternalPage = treatmentServiceImpl.getAllTreatmentExternals(pageable);
|
|
|
|
Map<Long, Map<String, List<Map<String, Object>>>> combinedTreatmentsMap = new LinkedHashMap<>();
|
|
|
|
for (Treatment treatment : treatmentPage.getContent()) {
|
|
Long appointmentId = treatment.getEmployeeAppointment() != null ? treatment.getEmployeeAppointment().getId() : null;
|
|
|
|
if (appointmentId != null) {
|
|
combinedTreatmentsMap
|
|
.computeIfAbsent(appointmentId, k -> new LinkedHashMap<>())
|
|
.computeIfAbsent("Internal", k -> new ArrayList<>())
|
|
.add(createInternalTreatmentMap(treatment));
|
|
}
|
|
}
|
|
|
|
for (TreatmentExternal treatmentExternal : treatmentExternalPage.getContent()) {
|
|
Long appointmentId = treatmentExternal.getEmployeeAppointment() != null ? treatmentExternal.getEmployeeAppointment().getId() : null;
|
|
|
|
if (appointmentId != null) {
|
|
combinedTreatmentsMap
|
|
.computeIfAbsent(appointmentId, k -> new LinkedHashMap<>())
|
|
.computeIfAbsent("External", k -> new ArrayList<>())
|
|
.add(createExternalTreatmentMap(treatmentExternal));
|
|
}
|
|
}
|
|
|
|
Map<String, Object> response = new LinkedHashMap<>();
|
|
response.put("combinedTreatments", combinedTreatmentsMap);
|
|
|
|
return new ResponseEntity<>(response, HttpStatus.OK);
|
|
}
|
|
|
|
private Map<String, Object> createInternalTreatmentMap(Treatment treatment) {
|
|
Map<String, Object> treatmentData = new LinkedHashMap<>();
|
|
treatmentData.put("id", treatment.getId());
|
|
treatmentData.put("appointmentId", treatment.getEmployeeAppointment() != null ? treatment.getEmployeeAppointment().getId() : null);
|
|
treatmentData.put("item", mapItem(treatment.getItem()));
|
|
treatmentData.put("frequency", mapMedicineFrequency(treatment.getMedicineFrequency()));
|
|
treatmentData.put("timing", mapMedicineTiming(treatment.getMedicineTiming()));
|
|
treatmentData.put("dosageCategory", mapRouteOfAdministration(treatment.getRouteOfAdministration()));
|
|
treatmentData.put("forDays", treatment.getForDays());
|
|
treatmentData.put("dosage", treatment.getDosage());
|
|
treatmentData.put("itemQty", treatment.getItemQty());
|
|
treatmentData.put("itemBatchNo", treatment.getItemBatchNo());
|
|
treatmentData.put("issuedQty", treatment.getIssuedQty());
|
|
treatmentData.put("issueBy", treatment.getIssueBy());
|
|
treatmentData.put("isDisplay", treatment.getIsDisplay());
|
|
treatmentData.put("groupItemId", treatment.getGroupItemId());
|
|
treatmentData.put("followupId", treatment.getFollowupId());
|
|
treatmentData.put("modifiedBy", treatment.getModifiedBy());
|
|
treatmentData.put("lastModified", treatment.getLastModified());
|
|
return treatmentData;
|
|
}
|
|
|
|
private Map<String, Object> createExternalTreatmentMap(TreatmentExternal treatmentExternal) {
|
|
Map<String, Object> treatmentExternalData = new LinkedHashMap<>();
|
|
treatmentExternalData.put("id", treatmentExternal.getId());
|
|
treatmentExternalData.put("appointmentId", treatmentExternal.getEmployeeAppointment() != null ? treatmentExternal.getEmployeeAppointment().getId() : null);
|
|
treatmentExternalData.put("itemName", treatmentExternal.getItemName());
|
|
treatmentExternalData.put("frequency", treatmentExternal.getFrequency());
|
|
treatmentExternalData.put("forDays", treatmentExternal.getForDays());
|
|
treatmentExternalData.put("itemQty", treatmentExternal.getItemQty());
|
|
treatmentExternalData.put("dosage", treatmentExternal.getDosage());
|
|
treatmentExternalData.put("timing", mapMedicineTiming(treatmentExternal.getMedicineTiming()));
|
|
treatmentExternalData.put("dosageCategory", mapRouteOfAdministration(treatmentExternal.getRouteOfAdministration()));
|
|
treatmentExternalData.put("followupId", treatmentExternal.getFollowupId());
|
|
treatmentExternalData.put("modifiedBy", treatmentExternal.getModifiedBy());
|
|
treatmentExternalData.put("lastModified", treatmentExternal.getLastModified());
|
|
return treatmentExternalData;
|
|
}
|
|
|
|
@PostMapping
|
|
public ResponseEntity<?> addTreatment(@Valid @RequestBody TreatmentInternalExternalDto treatmentInternalExternalDto) {
|
|
Long userId = authServiceImpl.getCurrentUserId();
|
|
treatmentServiceImpl.addTreatmentOrExternal(treatmentInternalExternalDto, userId);
|
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
|
}
|
|
|
|
@PutMapping("/{appointmentId}")
|
|
public ResponseEntity<?> updateTreatment(@Valid @RequestBody TreatmentInternalExternalDto treatmentInternalExternalDto) {
|
|
Long userId = authServiceImpl.getCurrentUserId();
|
|
treatmentServiceImpl.updateTreatmentOrExternal(treatmentInternalExternalDto, userId);
|
|
return new ResponseEntity<>(HttpStatus.OK);
|
|
}
|
|
|
|
}
|