diff --git a/pom.xml b/pom.xml index b0e8639c..a15dfc50 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.iemr.mmu mmu-api - 3.4.0 + 3.6.0 war MMU-API @@ -64,6 +64,10 @@ slf4j-simple ${slf4j.version} + + org.springframework.boot + spring-boot-starter-security + co.elastic.logging logback-ecs-encoder diff --git a/src/main/java/com/iemr/mmu/controller/anc/ANCController.java b/src/main/java/com/iemr/mmu/controller/anc/ANCController.java index 178f080b..5a026da4 100644 --- a/src/main/java/com/iemr/mmu/controller/anc/ANCController.java +++ b/src/main/java/com/iemr/mmu/controller/anc/ANCController.java @@ -21,11 +21,15 @@ */ package com.iemr.mmu.controller.anc; +import java.util.ArrayList; +import java.util.HashMap; + import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.query.Param; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; @@ -34,6 +38,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -42,6 +47,13 @@ import io.swagger.v3.oas.annotations.Operation; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import com.google.gson.Gson; +import com.google.gson.JsonArray; + /** * @Objective Saving ANC data for Nurse and Doctor. */ @@ -59,6 +71,7 @@ public class ANCController { */ @Operation(summary = "Save ANC nurse data") @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE')") public String saveBenANCNurseData(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); try { @@ -91,6 +104,7 @@ public String saveBenANCNurseData(@RequestBody String requestObj) { */ @Operation(summary = "Save ANC doctor data") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize(" hasRole('DOCTOR')") public String saveBenANCDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -99,7 +113,23 @@ public String saveBenANCDoctorData(@RequestBody String requestObj, if (jsnOBJ != null) { Long r = ancService.saveANCDoctorData(jsnOBJ, authorization); if (r != null && r > 0) { - response.setResponse("Data saved successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data saved successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(5000, "Unable to save data"); } @@ -116,6 +146,7 @@ public String saveBenANCDoctorData(@RequestBody String requestObj, @Operation(summary = "Get beneficiary visit details from nurse ANC") @PostMapping(value = { "/getBenVisitDetailsFrmNurseANC" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") @Transactional(rollbackFor = Exception.class) public String getBenVisitDetailsFrmNurseANC( @Param(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { @@ -147,6 +178,7 @@ public String getBenVisitDetailsFrmNurseANC( @Operation(summary = "Get beneficiary ANC care details from nurse ANC") @PostMapping(value = { "/getBenANCDetailsFrmNurseANC" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenANCDetailsFrmNurseANC( @Param(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -178,7 +210,7 @@ public String getBenANCDetailsFrmNurseANC( */ @Operation(summary = "Get beneficiary ANC history details from nurse to doctor ") @PostMapping(value = { "/getBenANCHistoryDetails" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenANCHistoryDetails( @Param(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -209,6 +241,7 @@ public String getBenANCHistoryDetails( */ @Operation(summary = "Get beneficiary ANC vital details from nurse ANC") @PostMapping(value = { "/getBenANCVitalDetailsFrmNurseANC" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenANCVitalDetailsFrmNurseANC( @Param(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -240,7 +273,7 @@ public String getBenANCVitalDetailsFrmNurseANC( */ @Operation(summary = "Get beneficiary ANC examination details from nurse to doctor ") @PostMapping(value = { "/getBenExaminationDetailsANC" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenExaminationDetailsANC( @Param(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -272,6 +305,7 @@ public String getBenExaminationDetailsANC( @Operation(summary = "Get beneficiary doctor entered details") @PostMapping(value = { "/getBenCaseRecordFromDoctorANC" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCaseRecordFromDoctorANC( @Param(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -298,6 +332,7 @@ public String getBenCaseRecordFromDoctorANC( @Operation(summary = "Check high risk pregnancy status for ANC beneficiary") @PostMapping(value = { "/getHRPStatus" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getHRPStatus( @Param(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -326,6 +361,7 @@ public String getHRPStatus( @Operation(summary = "Update ANC care data in doctor screen") @PostMapping(value = { "/update/ANCScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateANCCareNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -356,6 +392,7 @@ public String updateANCCareNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update ANC history data in doctor screen") @PostMapping(value = { "/update/historyScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateANCHistoryNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -385,6 +422,7 @@ public String updateANCHistoryNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update ANC vital data in doctor screen") @PostMapping(value = { "/update/vitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateANCVitalNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -415,6 +453,7 @@ public String updateANCVitalNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update ANC examination data in doctor screen") @PostMapping(value = { "/update/examinationScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateANCExaminationNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -445,6 +484,7 @@ public String updateANCExaminationNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update ANC doctor data") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateANCDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { @@ -454,7 +494,23 @@ public String updateANCDoctorData(@RequestBody String requestObj, try { Long result = ancService.updateANCDoctorData(jsnOBJ, authorization); if (null != result && result > 0) { - response.setResponse("Data updated successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data updated successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(500, "Unable to modify data"); } diff --git a/src/main/java/com/iemr/mmu/controller/cancerscreening/CancerScreeningController.java b/src/main/java/com/iemr/mmu/controller/cancerscreening/CancerScreeningController.java index 99428f89..f06acd5d 100644 --- a/src/main/java/com/iemr/mmu/controller/cancerscreening/CancerScreeningController.java +++ b/src/main/java/com/iemr/mmu/controller/cancerscreening/CancerScreeningController.java @@ -25,6 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; @@ -67,6 +68,7 @@ public void setCancerScreeningServiceImpl(CSServiceImpl cSServiceImpl) { */ @Operation(summary = "Save cancer screening nurse data") @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE')") public String saveBenCancerScreeningNurseData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -106,6 +108,7 @@ else if (nurseDataSaveSuccessFlag == 2) */ @Operation(summary = "Save cancer screening doctor data") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize("hasRole('DOCTOR')") public String saveBenCancerScreeningDoctorData(@RequestBody String requestObj, @RequestHeader String authorization) { OutputResponse response = new OutputResponse(); @@ -132,6 +135,7 @@ public String saveBenCancerScreeningDoctorData(@RequestBody String requestObj, @Operation(summary = "Get beneficiary visit details from nurse screen") @PostMapping(value = { "/getBenDataFrmNurseToDocVisitDetailsScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenDataFrmNurseScrnToDocScrnVisitDetails( @ApiParam(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -161,6 +165,7 @@ public String getBenDataFrmNurseScrnToDocScrnVisitDetails( */ @Operation(summary = "Get beneficiary cancer history details from nurse screen") @PostMapping(value = { "/getBenDataFrmNurseToDocHistoryScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenDataFrmNurseScrnToDocScrnHistory( @ApiParam(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -189,6 +194,7 @@ public String getBenDataFrmNurseScrnToDocScrnHistory( */ @Operation(summary = "Get beneficiary vital details from nurse screen") @PostMapping(value = { "/getBenDataFrmNurseToDocVitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenDataFrmNurseScrnToDocScrnVital( @ApiParam(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -218,6 +224,7 @@ public String getBenDataFrmNurseScrnToDocScrnVital( */ @Operation(summary = "Get beneficiary examination details from nurse screen") @PostMapping(value = { "/getBenDataFrmNurseToDocExaminationScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenDataFrmNurseScrnToDocScrnExamination( @ApiParam(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -247,6 +254,7 @@ public String getBenDataFrmNurseScrnToDocScrnExamination( */ @Operation(summary = "Get beneficiary cancer family history") @PostMapping(value = { "/getBenCancerFamilyHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCancerFamilyHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -278,6 +286,7 @@ public String getBenCancerFamilyHistory( */ @Operation(summary = "Get beneficiary cancer personal history") @PostMapping(value = { "/getBenCancerPersonalHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCancerPersonalHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -309,6 +318,7 @@ public String getBenCancerPersonalHistory( */ @Operation(summary = "Get beneficiary cancer personal diet history") @PostMapping(value = { "/getBenCancerPersonalDietHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCancerPersonalDietHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -340,6 +350,7 @@ public String getBenCancerPersonalDietHistory( */ @Operation(summary = "Get beneficiary cancer obstetric history") @PostMapping(value = { "/getBenCancerObstetricHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCancerObstetricHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -370,6 +381,7 @@ public String getBenCancerObstetricHistory( */ @Operation(summary = "Get beneficiary doctor entered details") @PostMapping(value = { "/getBenCaseRecordFromDoctorCS" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") @Transactional(rollbackFor = Exception.class) public String getBenCaseRecordFromDoctorCS( @ApiParam(value = "{\"benRegID\":\"Long\", \"visitCode\":\"Long\"}") @RequestBody String comingRequest) { @@ -396,6 +408,7 @@ public String getBenCaseRecordFromDoctorCS( @Operation(summary = "Update cancer screening history nurse data in doctor screen") @PostMapping(value = { "/update/historyScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateCSHistoryNurse( @ApiParam(value = "{\"historyDetails\": {\"familyHistory\":{\"diseases\": [{\"beneficiaryRegID\":\"Long\", \"benVisitID\":\"Long\", " + "\"providerServiceMapID\":\"Integer\", \"cancerDiseaseType\":\"String\", \"otherDiseaseType\":\"String\", \"familyMemberList\":\"List\", " @@ -440,6 +453,7 @@ public String updateCSHistoryNurse( */ @Operation(summary = "Update beneficiary vital detail") @PostMapping(value = { "/update/vitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String upodateBenVitalDetail( @ApiParam(value = "{\"ID\": \"Long\", \"beneficiaryRegID\":\"Long\",\"benVisitID\":\"Long\"," + "\"weight_Kg\":\"Double\", \"height_cm\":\"Double\", \"waistCircumference_cm\":\"Double\", \"bloodGlucose_Fasting\":\"Short\"," @@ -476,6 +490,7 @@ public String upodateBenVitalDetail( */ @Operation(summary = "Update beneficiary examination detail") @PostMapping(value = { "/update/examinationScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String upodateBenExaminationDetail(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -505,6 +520,7 @@ public String upodateBenExaminationDetail(@RequestBody String requestObj) { */ @Operation(summary = "Update cancer diagnosis details by oncologist") @PostMapping(value = { "/update/examinationScreen/diagnosis" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('ONCOLOGIST')") public String updateCancerDiagnosisDetailsByOncologist( @ApiParam(value = "{\"beneficiaryRegID\":\"Long\", \"benVisitID\":\"Long\", \"visitCode\":\"Long\", " + "\"provisionalDiagnosisOncologist\":\"String\", \"modifiedBy\":\"string\"}") @RequestBody String requestObj) { @@ -536,6 +552,7 @@ public String updateCancerDiagnosisDetailsByOncologist( */ @Operation(summary = "Update cancer screening doctor data") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateCancerScreeningDoctorData(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); diff --git a/src/main/java/com/iemr/mmu/controller/common/main/CommonController.java b/src/main/java/com/iemr/mmu/controller/common/main/CommonController.java index 137e4455..c0df03d6 100644 --- a/src/main/java/com/iemr/mmu/controller/common/main/CommonController.java +++ b/src/main/java/com/iemr/mmu/controller/common/main/CommonController.java @@ -32,7 +32,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; - +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -40,6 +40,7 @@ import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.iemr.mmu.utils.JwtUtil; import com.iemr.mmu.data.benFlowStatus.BeneficiaryFlowStatus; import com.iemr.mmu.service.common.transaction.CommonDoctorServiceImpl; @@ -50,6 +51,7 @@ import com.iemr.mmu.utils.exception.IEMRException; import com.iemr.mmu.utils.mapper.InputMapper; import com.iemr.mmu.utils.response.OutputResponse; +import com.iemr.mmu.utils.CookieUtil; import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.Operation; @@ -68,6 +70,9 @@ public class CommonController { @Autowired private ServletContext servletContext; + @Autowired + private JwtUtil jwtUtil; + @Autowired private AESEncryptionDecryption aESEncryptionDecryption; @@ -90,6 +95,7 @@ public void setCommonNurseServiceImpl(CommonNurseServiceImpl commonNurseServiceI @Operation(summary = "Provides doctor worklist") @GetMapping(value = { "/getDocWorklistNew/{providerServiceMapID}/{serviceID}/{vanID}" }) + @PreAuthorize("hasRole('DOCTOR')") public String getDocWorkListNew(@PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("serviceID") Integer serviceID, @PathVariable("vanID") Integer vanID) { OutputResponse response = new OutputResponse(); @@ -113,6 +119,7 @@ public String getDocWorkListNew(@PathVariable("providerServiceMapID") Integer pr @Operation(summary = "Provides doctor worklist future scheduled for TM") @GetMapping(value = { "/getDocWorkListNewFutureScheduledForTM/{providerServiceMapID}/{serviceID}" }) + @PreAuthorize("hasRole('DOCTOR')") public String getDocWorkListNewFutureScheduledForTM( @PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("serviceID") Integer serviceID) { @@ -138,6 +145,7 @@ public String getDocWorkListNewFutureScheduledForTM( @Operation(summary = "Get nurse worklist new") @GetMapping(value = { "/getNurseWorklistNew/{providerServiceMapID}/{serviceID}/{vanID}" }) + @PreAuthorize("hasRole('NURSE')") public String getNurseWorkListNew(@PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("vanID") Integer vanID) { OutputResponse response = new OutputResponse(); @@ -161,6 +169,7 @@ public String getNurseWorkListNew(@PathVariable("providerServiceMapID") Integer */ @Operation(summary = "Get nurse worklist TM referred") @GetMapping(value = { "/getNurseWorklistTMreferred/{providerServiceMapID}/{serviceID}/{vanID}" }) + @PreAuthorize("hasRole('NURSE')") public String getNurseWorklistTMreferred(@PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("vanID") Integer vanID) { OutputResponse response = new OutputResponse(); @@ -179,6 +188,7 @@ public String getNurseWorklistTMreferred(@PathVariable("providerServiceMapID") I @Operation(summary = "Get doctor entered previous significant Ffindings") @PostMapping(value = { "/getDoctorPreviousSignificantFindings" }) + @PreAuthorize("hasRole('DOCTOR')") public String getDoctorPreviousSignificantFindings( @ApiParam(value = "{\"beneficiaryRegID\": \"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -203,6 +213,7 @@ public String getDoctorPreviousSignificantFindings( @Operation(summary = "Get lab technician worklist new") @GetMapping(value = { "/getLabWorklistNew/{providerServiceMapID}/{serviceID}/{vanID}" }) + @PreAuthorize("hasRole('LAB_TECHNICIAN') || hasRole('LABTECHNICIAN')") public String getLabWorkListNew(@PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("vanID") Integer vanID) { OutputResponse response = new OutputResponse(); @@ -221,6 +232,7 @@ public String getLabWorkListNew(@PathVariable("providerServiceMapID") Integer pr @Operation(summary = "Get radiologist worklist new") @GetMapping(value = { "/getRadiologist-worklist-New/{providerServiceMapID}/{serviceID}/{vanID}" }) + @PreAuthorize("hasRole('RADIOLOGIST')") public String getRadiologistWorklistNew(@PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("vanID") Integer vanID) { OutputResponse response = new OutputResponse(); @@ -239,6 +251,7 @@ public String getRadiologistWorklistNew(@PathVariable("providerServiceMapID") In @Operation(summary = "Get oncologist worklist new") @GetMapping(value = { "/getOncologist-worklist-New/{providerServiceMapID}/{serviceID}/{vanID}" }) + @PreAuthorize("hasRole('ONCOLOGIST')") public String getOncologistWorklistNew(@PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("vanID") Integer vanID) { OutputResponse response = new OutputResponse(); @@ -257,6 +270,7 @@ public String getOncologistWorklistNew(@PathVariable("providerServiceMapID") Int @Operation(summary = "Get pharma worklist new") @GetMapping(value = { "/getPharma-worklist-New/{providerServiceMapID}/{serviceID}/{vanID}" }) + @PreAuthorize("hasRole('PHARMACIST')") public String getPharmaWorklistNew(@PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("vanID") Integer vanID) { OutputResponse response = new OutputResponse(); @@ -275,6 +289,7 @@ public String getPharmaWorklistNew(@PathVariable("providerServiceMapID") Integer @Operation(summary = "Get case-sheet print data for beneficiary.") @PostMapping(value = { "/get/Case-sheet/printData" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getCasesheetPrintData(@RequestBody String comingReq, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -294,6 +309,7 @@ public String getCasesheetPrintData(@RequestBody String comingReq, @Operation(summary = "Get beneficiary past history") @PostMapping(value = { "/getBenPastHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenPastHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -318,6 +334,7 @@ public String getBenPastHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @Re @Operation(summary = "Get beneficiary tobacco history") @PostMapping(value = { "/getBenTobaccoHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenTobaccoHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -342,6 +359,7 @@ public String getBenTobaccoHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @Operation(summary = "Get beneficiary alcohol history") @PostMapping(value = { "/getBenAlcoholHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenAlcoholHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -366,6 +384,7 @@ public String getBenAlcoholHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @Operation(summary = "Get beneficiary allergy history") @PostMapping(value = { "/getBenAllergyHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenANCAllergyHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -391,6 +410,7 @@ public String getBenANCAllergyHistory( @Operation(summary = "Get beneficiary medication history") @PostMapping(value = { "/getBenMedicationHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenMedicationHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -416,6 +436,7 @@ public String getBenMedicationHistory( @Operation(summary = "Get beneficiary family history") @PostMapping(value = { "/getBenFamilyHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenFamilyHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -440,6 +461,7 @@ public String getBenFamilyHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @ @Operation(summary = "Get beneficiary menstrual history") @PostMapping(value = { "/getBenMenstrualHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenMenstrualHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -465,7 +487,8 @@ public String getBenMenstrualHistory( @Operation(summary = "Get beneficiary past obstetric history") @PostMapping(value = { "/getBenPastObstetricHistory" }) - public String getBenPastObstetricHistory( + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") + public String getBenPastObstetricHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -490,6 +513,7 @@ public String getBenPastObstetricHistory( @Operation(summary = "Get beneficiary comorbidity condition details") @PostMapping(value = { "/getBenComorbidityConditionHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenANCComorbidityConditionHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -515,6 +539,7 @@ public String getBenANCComorbidityConditionHistory( @Operation(summary = "Get beneficiary optional vaccine details") @PostMapping(value = { "/getBenOptionalVaccineHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenOptionalVaccineHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -540,6 +565,7 @@ public String getBenOptionalVaccineHistory( @Operation(summary = "Get beneficiary child vaccine(Immunization) details") @PostMapping(value = { "/getBenChildVaccineHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenImmunizationHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -565,6 +591,7 @@ public String getBenImmunizationHistory( @Operation(summary = "Get beneficiary perinatal history details") @PostMapping(value = { "/getBenPerinatalHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenPerinatalHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -590,6 +617,7 @@ public String getBenPerinatalHistory( @Operation(summary = "Get beneficiary child feeding history details") @PostMapping(value = { "/getBenFeedingHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenFeedingHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -614,6 +642,7 @@ public String getBenFeedingHistory(@ApiParam(value = "{\"benRegID\":\"Long\"}") @Operation(summary = "Get beneficiary child development history details") @PostMapping(value = { "/getBenDevelopmentHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenDevelopmentHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -642,6 +671,7 @@ public String getBenDevelopmentHistory( */ @Operation(summary = "Get casesheet history of beneficiary") @PostMapping(value = { "/getBeneficiaryCaseSheetHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBeneficiaryCaseSheetHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -659,12 +689,21 @@ public String getBeneficiaryCaseSheetHistory( } @Operation(summary = "TC specialist") - @GetMapping(value = { "/getTCSpecialistWorklist/{providerServiceMapID}/{serviceID}/{userID}" }) + @GetMapping(value = { "/getTCSpecialistWorklist/{providerServiceMapID}/{serviceID}" }) + @PreAuthorize("hasRole('TC_SPECIALIST') || hasRole('TCSPECIALIST')") public String getTCSpecialistWorkListNew(@PathVariable("providerServiceMapID") Integer providerServiceMapID, - @PathVariable("userID") Integer userID, @PathVariable("serviceID") Integer serviceID) { + @PathVariable("serviceID") Integer serviceID,HttpServletRequest request) { OutputResponse response = new OutputResponse(); try { - if (providerServiceMapID != null && userID != null) { + + String jwtToken = CookieUtil.getJwtTokenFromCookie(request); + String userId = jwtUtil.getUserIdFromToken(jwtToken); + int userID = Integer.parseInt(userId); + if(jwtToken == null || userId == null) { + response.setError(403, "Unauthorized access: Missing or invalid token"); + } + + if (providerServiceMapID != null && userId != null) { String s = commonDoctorServiceImpl.getTCSpecialistWorkListNewForTM(providerServiceMapID, userID, serviceID); if (s != null) @@ -684,13 +723,21 @@ public String getTCSpecialistWorkListNew(@PathVariable("providerServiceMapID") I @Operation(summary = "TC specialist future scheduled") @GetMapping(value = { - "/getTCSpecialistWorklistFutureScheduled/{providerServiceMapID}/{serviceID}/{userID}" }) + "/getTCSpecialistWorklistFutureScheduled/{providerServiceMapID}/{serviceID}" }) + @PreAuthorize("hasRole('TC_SPECIALIST') || hasRole('TCSPECIALIST')") public String getTCSpecialistWorklistFutureScheduled( - @PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("userID") Integer userID, - @PathVariable("serviceID") Integer serviceID) { + @PathVariable("providerServiceMapID") Integer providerServiceMapID, + @PathVariable("serviceID") Integer serviceID, HttpServletRequest request) { OutputResponse response = new OutputResponse(); try { - if (providerServiceMapID != null && userID != null) { + String jwtToken = CookieUtil.getJwtTokenFromCookie(request); + String userId = jwtUtil.getUserIdFromToken(jwtToken); + int userID = Integer.parseInt(userId); + + if(jwtToken == null || userId == null) { + response.setError(403, "Unauthorized access: Missing or invalid token"); + } + if (providerServiceMapID != null && userId != null) { String s = commonDoctorServiceImpl.getTCSpecialistWorkListNewFutureScheduledForTM(providerServiceMapID, userID, serviceID); if (s != null) @@ -710,6 +757,7 @@ public String getTCSpecialistWorklistFutureScheduled( @Operation(summary = "Download file from file system") @PostMapping(value = { "/downloadFile" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public ResponseEntity downloadFile(@RequestBody String requestOBJ, HttpServletRequest request) throws Exception { JSONObject obj = new JSONObject(requestOBJ); @@ -740,6 +788,7 @@ public ResponseEntity downloadFile(@RequestBody String requ @Operation(summary = "Get beneficiary physical history") @PostMapping(value = { "/getBenPhysicalHistory" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenPhysicalHistory( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -765,6 +814,7 @@ public String getBenPhysicalHistory( @Operation(summary = "Get beneficiary symptomatic questionnaire answer details") @PostMapping(value = { "/getBenSymptomaticQuestionnaireDetails" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenSymptomaticQuestionnaireDetails( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -790,6 +840,7 @@ public String getBenSymptomaticQuestionnaireDetails( @Operation(summary = "Get beneficiary previous diabetes history") @PostMapping(value = { "/getBenPreviousDiabetesHistoryDetails" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenPreviousDiabetesHistoryDetails( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -820,6 +871,7 @@ public String getBenPreviousDiabetesHistoryDetails( */ @Operation(summary = "Get beneficiary TM case record") @PostMapping(value = { "/get/Case-sheet/TMReferredprintData" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getTMReferredPrintData(@RequestBody String comingRequest, @RequestHeader(value = "Authorization") String authorization, @RequestHeader(value = "ServerAuthorization") String serverAuthorization) { @@ -857,6 +909,7 @@ public String getTMReferredPrintData(@RequestBody String comingRequest, @Operation(summary = "Get beneficiary previous referral history") @PostMapping(value = { "/getBenPreviousReferralHistoryDetails" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenPreviousReferralHistoryDetails( @ApiParam(value = "{\"benRegID\":\"Long\"}") @RequestBody String comingRequest) { @@ -883,6 +936,7 @@ public String getBenPreviousReferralHistoryDetails( @Operation(summary = "Get beneficiary TM case record") @PostMapping(value = { "/get/Case-sheet/centralServerTMCaseSheet" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getTMCaseSheetFromCentralServer(@RequestBody String comingRequest, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -920,6 +974,7 @@ public String getTMCaseSheetFromCentralServer(@RequestBody String comingRequest, */ @Operation(summary = "Calculate beneficiary BMI status") @PostMapping(value = { "/calculateBMIStatus" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String calculateBMIStatus( @ApiParam(value = "{\"bmi\":\"double\",\"yearMonth\":\"String\",\"gender\":\"String\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -937,6 +992,7 @@ public String calculateBMIStatus( @Operation(summary = "Update beneficiary status flag") @PostMapping(value = { "/update/benDetailsAndSubmitToNurse" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String saveBeneficiaryVisitDetail( @ApiParam(value = "{\"beneficiaryRegID\": \"Long\"}") @RequestBody String comingRequest) { @@ -971,6 +1027,7 @@ public String saveBeneficiaryVisitDetail( @Operation(summary = "Extend redis session for 30 minutes") @PostMapping(value = { "/extend/redisSession" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('PHARMACIST') || hasRole('LAB_TECHNICIAN') || hasRole('RADIOLOGIST') || hasRole('ONCOLOGIST') || hasRole('TC_SPECIALIST') || hasRole('TCSPECIALIST') || hasRole('REGISTRAR')") public String extendRedisSession() { OutputResponse response = new OutputResponse(); try { @@ -983,6 +1040,7 @@ public String extendRedisSession() { @Operation(summary = "Soft delete prescribed medicine") @PostMapping(value = { "/doctor/delete/prescribedMedicine" }) + @PreAuthorize("hasRole('DOCTOR')") public String deletePrescribedMedicine(@RequestBody String requestOBJ) { OutputResponse response = new OutputResponse(); try { diff --git a/src/main/java/com/iemr/mmu/controller/common/main/InsertCommonController.java b/src/main/java/com/iemr/mmu/controller/common/main/InsertCommonController.java index cd3a7576..faa6b0dc 100644 --- a/src/main/java/com/iemr/mmu/controller/common/main/InsertCommonController.java +++ b/src/main/java/com/iemr/mmu/controller/common/main/InsertCommonController.java @@ -27,6 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -42,6 +43,7 @@ @RestController @RequestMapping(value = "/commonInsert", headers = "Authorization") +@PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public class InsertCommonController { private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); @Autowired diff --git a/src/main/java/com/iemr/mmu/controller/common/master/CommonMasterController.java b/src/main/java/com/iemr/mmu/controller/common/master/CommonMasterController.java index 89e816d1..d37dcdaf 100644 --- a/src/main/java/com/iemr/mmu/controller/common/master/CommonMasterController.java +++ b/src/main/java/com/iemr/mmu/controller/common/master/CommonMasterController.java @@ -24,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -55,6 +56,7 @@ public void setCommonMasterServiceImpl(CommonMasterServiceImpl commonMasterServi */ @Operation(summary = "Master data for visit reasons & categories") @GetMapping(value = "/get/visitReasonAndCategories", consumes = "application/json", produces = "application/json") + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getVisitReasonAndCategories() { logger.info("getVisitReasonAndCategories ..."); OutputResponse response = new OutputResponse(); @@ -68,8 +70,10 @@ public String getVisitReasonAndCategories() { * @param visitCategoryID * @return nurse master data for the provided visitCategoryID */ + @Operation(summary = "Master data API for nurse") @GetMapping(value = "/nurse/masterData/{visitCategoryID}/{providerServiceMapID}/{gender}", consumes = "application/json", produces = "application/json") + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String nurseMasterData(@PathVariable("visitCategoryID") Integer visitCategoryID, @PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("gender") String gender) { logger.info("Nurse master Data for categoryID:" + visitCategoryID + " and providerServiceMapID:" @@ -87,8 +91,10 @@ public String nurseMasterData(@PathVariable("visitCategoryID") Integer visitCate * @param visitCategoryID * @return doctor master data for the provided visitCategoryID */ + @Operation(summary = "Master data API for doctor") @GetMapping(value = "/doctor/masterData/{visitCategoryID}/{providerServiceMapID}/{gender}/{facilityID}/{vanID}", produces = "application/json") + @PreAuthorize("hasRole('DOCTOR')") public String doctorMasterData(@PathVariable("visitCategoryID") Integer visitCategoryID, @PathVariable("providerServiceMapID") Integer providerServiceMapID, @PathVariable("gender") String gender, @PathVariable("facilityID") Integer facilityID, @PathVariable("vanID") Integer vanID) { @@ -103,6 +109,7 @@ public String doctorMasterData(@PathVariable("visitCategoryID") Integer visitCat @Operation(summary = "Get ECG abnormalities") @GetMapping(value = "/ecgAbnormalities", consumes = "application/json", produces = "application/json") + @PreAuthorize("hasRole('LAB_TECHNICIAN') || hasRole('LABTECHNICIAN')") public String getECGAbnormalities() { OutputResponse response = new OutputResponse(); diff --git a/src/main/java/com/iemr/mmu/controller/covid19/CovidController.java b/src/main/java/com/iemr/mmu/controller/covid19/CovidController.java index 959c9cc7..468b0e1e 100644 --- a/src/main/java/com/iemr/mmu/controller/covid19/CovidController.java +++ b/src/main/java/com/iemr/mmu/controller/covid19/CovidController.java @@ -21,13 +21,16 @@ */ package com.iemr.mmu.controller.covid19; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; @@ -36,6 +39,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -65,6 +70,7 @@ public class CovidController { @Operation(summary = "Save covid nurse data") @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE')") public String saveBenCovid19NurseData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse outputResponse = new OutputResponse(); @@ -100,6 +106,7 @@ public String saveBenCovid19NurseData(@RequestBody String requestObj, */ @Operation(summary = "Save covid doctor data") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize("hasRole('DOCTOR')") public String saveBenCovidDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -109,7 +116,23 @@ public String saveBenCovidDoctorData(@RequestBody String requestObj, if (jsnOBJ != null) { Long ncdCareRes = covid19Service.saveDoctorData(jsnOBJ, authorization); if (null != ncdCareRes && ncdCareRes > 0) { - response.setResponse("Data saved successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data saved successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setResponse("Unable to save data"); } @@ -126,6 +149,7 @@ public String saveBenCovidDoctorData(@RequestBody String requestObj, @Operation(summary = "Get beneficiary visit details from nurse covid 19") @PostMapping(value = { "/getBenVisitDetailsFrmNurseCovid" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") @Transactional(rollbackFor = Exception.class) public String getBenVisitDetailsFrmNurseCovid19( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { @@ -158,7 +182,7 @@ public String getBenVisitDetailsFrmNurseCovid19( */ @Operation(summary = "Get beneficiary covid 19 history details from nurse to doctor ") @PostMapping(value = { "/getBenCovid19HistoryDetails" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCovid19HistoryDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -189,6 +213,7 @@ public String getBenCovid19HistoryDetails( */ @Operation(summary = "Get beneficiary covid 19 vital details from nurse NCD care") @PostMapping(value = { "/getBenVitalDetailsFrmNurseCovid" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenVitalDetailsFrmNurseNCDCare( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -217,6 +242,7 @@ public String getBenVitalDetailsFrmNurseNCDCare( @Operation(summary = "Get beneficiary doctor entered details") @PostMapping(value = { "/getBenCaseRecordFromDoctorCovid" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCaseRecordFromDoctorCovid19( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -243,6 +269,7 @@ public String getBenCaseRecordFromDoctorCovid19( @Operation(summary = "Update history data in doctor screen") @PostMapping(value = { "/update/historyScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateHistoryNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -275,6 +302,7 @@ public String updateHistoryNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update covid vital data in doctor screen") @PostMapping(value = { "/update/vitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateVitalNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -304,6 +332,7 @@ public String updateVitalNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update covid 19 doctor data") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateCovid19DoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { @@ -313,7 +342,23 @@ public String updateCovid19DoctorData(@RequestBody String requestObj, try { Long result = covid19ServiceImpl.updateCovid19DoctorData(jsnOBJ, authorization); if (null != result && result > 0) { - response.setResponse("Data updated successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data updated successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(500, "Unable to modify data"); } diff --git a/src/main/java/com/iemr/mmu/controller/dataSyncActivity/StartSyncActivity.java b/src/main/java/com/iemr/mmu/controller/dataSyncActivity/StartSyncActivity.java index 1e43ed66..83c5dcfe 100644 --- a/src/main/java/com/iemr/mmu/controller/dataSyncActivity/StartSyncActivity.java +++ b/src/main/java/com/iemr/mmu/controller/dataSyncActivity/StartSyncActivity.java @@ -25,6 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -47,6 +48,7 @@ */ @RestController @RequestMapping(value = "/dataSyncActivity", headers = "Authorization", consumes = "application/json", produces = "application/json") +@PreAuthorize("hasRole('DATASYNC') || hasRole('DATA_SYNC') ") public class StartSyncActivity { private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); diff --git a/src/main/java/com/iemr/mmu/controller/dataSyncLayerCentral/MMUDataSyncVanToServer.java b/src/main/java/com/iemr/mmu/controller/dataSyncLayerCentral/MMUDataSyncVanToServer.java index 524094e5..2a9f3450 100644 --- a/src/main/java/com/iemr/mmu/controller/dataSyncLayerCentral/MMUDataSyncVanToServer.java +++ b/src/main/java/com/iemr/mmu/controller/dataSyncLayerCentral/MMUDataSyncVanToServer.java @@ -24,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -47,6 +48,7 @@ */ @RestController @RequestMapping(value = "/dataSync", headers = "Authorization") +@PreAuthorize("hasRole('DATASYNC') || hasRole('DATA_SYNC') ") public class MMUDataSyncVanToServer { private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); diff --git a/src/main/java/com/iemr/mmu/controller/fileSync/FileSyncController.java b/src/main/java/com/iemr/mmu/controller/fileSync/FileSyncController.java index b5b1a34a..d902af0d 100644 --- a/src/main/java/com/iemr/mmu/controller/fileSync/FileSyncController.java +++ b/src/main/java/com/iemr/mmu/controller/fileSync/FileSyncController.java @@ -24,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestHeader; @@ -38,6 +39,7 @@ @RequestMapping("/fileSyncController") @RestController +@PreAuthorize("hasRole('DATASYNC') || hasRole('DATA_SYNC') ") public class FileSyncController { private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); diff --git a/src/main/java/com/iemr/mmu/controller/generalOPD/GeneralOPDController.java b/src/main/java/com/iemr/mmu/controller/generalOPD/GeneralOPDController.java index b7fa65a0..d7acf37e 100644 --- a/src/main/java/com/iemr/mmu/controller/generalOPD/GeneralOPDController.java +++ b/src/main/java/com/iemr/mmu/controller/generalOPD/GeneralOPDController.java @@ -21,10 +21,16 @@ */ package com.iemr.mmu.controller.generalOPD; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; @@ -33,6 +39,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -64,6 +72,7 @@ public void setGeneralOPDServiceImpl(GeneralOPDServiceImpl generalOPDServiceImpl */ @Operation(summary = "Save general OPD nurse data") @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE') ") public String saveBenGenOPDNurseData(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); try { @@ -96,6 +105,7 @@ public String saveBenGenOPDNurseData(@RequestBody String requestObj) { */ @Operation(summary = "Save general OPD doctor data") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize("hasRole('DOCTOR') ") public String saveBenGenOPDDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -104,7 +114,23 @@ public String saveBenGenOPDDoctorData(@RequestBody String requestObj, if (jsonRequest != null) { Long genOPDRes = generalOPDServiceImpl.saveDoctorData(jsonRequest, authorization); if (null != genOPDRes && genOPDRes > 0) { - response.setResponse("Data saved successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsonRequest.has("savedDrugIDs") && !jsonRequest.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsonRequest.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data saved successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setResponse("Unable to save data"); } @@ -122,6 +148,7 @@ public String saveBenGenOPDDoctorData(@RequestBody String requestObj, @Operation(summary = "Get beneficiary visit details from nurse general OPD") @PostMapping(value = { "/getBenVisitDetailsFrmNurseGOPD" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenVisitDetailsFrmNurseGOPD( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -153,7 +180,7 @@ public String getBenVisitDetailsFrmNurseGOPD( */ @Operation(summary = "Get beneficiary general OPD history details from nurse to doctor ") @PostMapping(value = { "/getBenHistoryDetails" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenHistoryDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -184,6 +211,7 @@ public String getBenHistoryDetails( */ @Operation(summary = "Get beneficiary vital details from nurse general OPD") @PostMapping(value = { "/getBenVitalDetailsFrmNurse" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenVitalDetailsFrmNurse( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -215,7 +243,7 @@ public String getBenVitalDetailsFrmNurse( */ @Operation(summary = "Get beneficiary general OPD examination details from nurse to doctor ") @PostMapping(value = { "/getBenExaminationDetails" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenExaminationDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -247,6 +275,7 @@ public String getBenExaminationDetails( @Operation(summary = "Get beneficiary doctor entered details") @PostMapping(value = { "/getBenCaseRecordFromDoctorGeneralOPD" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenCaseRecordFromDoctorGeneralOPD( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -273,6 +302,7 @@ public String getBenCaseRecordFromDoctorGeneralOPD( @Operation(summary = "Update general OPD visit screen nurse data in doctor screen") @PostMapping(value = { "/update/visitDetailsScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updateVisitNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -303,6 +333,7 @@ public String updateVisitNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update history data in doctor Screen") @PostMapping(value = { "/update/historyScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updateHistoryNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -333,6 +364,7 @@ public String updateHistoryNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update general OPD vital data in doctor screen") @PostMapping(value = { "/update/vitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updateVitalNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -363,6 +395,7 @@ public String updateVitalNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update general OPD examination data in doctor screen") @PostMapping(value = { "/update/examinationScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updateGeneralOPDExaminationNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -392,6 +425,7 @@ public String updateGeneralOPDExaminationNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update general OPD doctor data") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('DOCTOR') ") public String updateGeneralOPDDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { @@ -401,7 +435,23 @@ public String updateGeneralOPDDoctorData(@RequestBody String requestObj, try { Long result = generalOPDServiceImpl.updateGeneralOPDDoctorData(jsonRequest, authorization); if (null != result && result > 0) { - response.setResponse("Data updated successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsonRequest.has("savedDrugIDs") && !jsonRequest.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsonRequest.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data updated successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(500, "Unable to modify data"); } diff --git a/src/main/java/com/iemr/mmu/controller/labtechnician/LabTechnicianController.java b/src/main/java/com/iemr/mmu/controller/labtechnician/LabTechnicianController.java index f30dce3b..152f5029 100644 --- a/src/main/java/com/iemr/mmu/controller/labtechnician/LabTechnicianController.java +++ b/src/main/java/com/iemr/mmu/controller/labtechnician/LabTechnicianController.java @@ -24,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -44,6 +45,7 @@ @RestController @RequestMapping(value = "/labTechnician", headers = "Authorization", consumes = "application/json", produces = "application/json") +@PreAuthorize("hasRole('LABTECHNICIAN') || hasRole('LAB_TECHNICIAN') ") public class LabTechnicianController { private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); diff --git a/src/main/java/com/iemr/mmu/controller/location/LocationController.java b/src/main/java/com/iemr/mmu/controller/location/LocationController.java index 71e90724..e7bab71a 100644 --- a/src/main/java/com/iemr/mmu/controller/location/LocationController.java +++ b/src/main/java/com/iemr/mmu/controller/location/LocationController.java @@ -25,14 +25,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import com.iemr.mmu.utils.JwtUtil; +import org.springframework.security.access.prepost.PreAuthorize; +import com.iemr.mmu.utils.JwtUtil; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; +import com.iemr.mmu.utils.CookieUtil; import com.iemr.mmu.controller.common.master.CommonMasterController; import com.iemr.mmu.service.location.LocationServiceImpl; @@ -42,12 +46,15 @@ @RestController @RequestMapping(value = "/location", headers = "Authorization") +@PreAuthorize("hasRole('NURSE') || hasRole('PHARMACIST') || hasRole('LABTECHNICIAN') || hasRole('REGISTRAR') || hasRole('DATASYNC') || hasRole('DATA_SYNC') || hasRole('DOCTOR') || hasRole('LAB_TECHNICIAN') || hasRole('TC_SPECIALIST') || hasRole('ONCOLOGIST') || hasRole('RADIOLOGIST')") public class LocationController { private OutputResponse response; private Logger logger = LoggerFactory.getLogger(CommonMasterController.class); - private LocationServiceImpl locationServiceImpl; + @Autowired + private JwtUtil jwtUtil; + @Autowired public void setLocationServiceImpl(LocationServiceImpl locationServiceImpl) { this.locationServiceImpl = locationServiceImpl; @@ -137,22 +144,26 @@ public String getVillageMaster(@PathVariable("blockID") Integer blockID) { @Operation(summary = "Get location details based on SP id and PSM id") @PostMapping(value = "/getLocDetailsBasedOnSpIDAndPsmID", consumes = "application/json", produces = "application/json") - public String getLocDetailsBasedOnSpIDAndPsmIDNew(@RequestBody String comingRequest) { + public String getLocDetailsBasedOnSpIDAndPsmIDNew(@RequestBody String comingRequest, HttpServletRequest request) { OutputResponse response = new OutputResponse(); try { JSONObject obj = new JSONObject(comingRequest); + String jwtToken = CookieUtil.getJwtTokenFromCookie(request); + String userId = jwtUtil.getUserIdFromToken(jwtToken); + if(userId != null) { + int userID = Integer.parseInt(userId); if (obj != null && obj.has("spID") && obj.has("spPSMID") && obj.get("spID") != null && obj.get("spPSMID") != null) { - Integer userId = null; - if (obj.has("userId") && null != obj.get("userId")) { - userId = Integer.valueOf(obj.get("userId").toString()); - } - String s = locationServiceImpl.getLocDetailsNew(obj.getInt("spID"), obj.getInt("spPSMID"), userId); + + String s = locationServiceImpl.getLocDetailsNew(obj.getInt("spID"), obj.getInt("spPSMID"), userID); response.setResponse(s); } else { response.setError(5000, "Invalid request"); } + } else { + response.setError(403, "Unauthorized access"); + } } catch (Exception e) { logger.error(e.getMessage()); response.setError(5000, "Error while getting location data"); diff --git a/src/main/java/com/iemr/mmu/controller/login/IemrMmuLoginController.java b/src/main/java/com/iemr/mmu/controller/login/IemrMmuLoginController.java index 08942297..f2e0f576 100644 --- a/src/main/java/com/iemr/mmu/controller/login/IemrMmuLoginController.java +++ b/src/main/java/com/iemr/mmu/controller/login/IemrMmuLoginController.java @@ -25,6 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -33,9 +34,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import com.iemr.mmu.utils.CookieUtil; + +import jakarta.servlet.http.HttpServletRequest; import com.iemr.mmu.controller.registrar.main.RegistrarController; import com.iemr.mmu.service.login.IemrMmuLoginServiceImpl; +import com.iemr.mmu.utils.JwtUtil; import com.iemr.mmu.utils.mapper.InputMapper; import com.iemr.mmu.utils.response.OutputResponse; @@ -43,6 +48,7 @@ @RequestMapping(value = "/user", headers = "Authorization") @RestController +@PreAuthorize("hasRole('NURSE') || hasRole('PHARMACIST') || hasRole('LABTECHNICIAN') || hasRole('REGISTRAR') || hasRole('DATASYNC') || hasRole('DATA_SYNC') || hasRole('DOCTOR') || hasRole('LAB_TECHNICIAN') || hasRole('TC_SPECIALIST') || hasRole('ONCOLOGIST') || hasRole('RADIOLOGIST')") public class IemrMmuLoginController { private Logger logger = LoggerFactory.getLogger(RegistrarController.class); @@ -50,6 +56,9 @@ public class IemrMmuLoginController { private IemrMmuLoginServiceImpl iemrMmuLoginServiceImpl; + @Autowired + private JwtUtil jwtUtil; + @Autowired public void setIemrMmuLoginServiceImpl(IemrMmuLoginServiceImpl iemrMmuLoginServiceImpl) { this.iemrMmuLoginServiceImpl = iemrMmuLoginServiceImpl; @@ -57,14 +66,23 @@ public void setIemrMmuLoginServiceImpl(IemrMmuLoginServiceImpl iemrMmuLoginServi @Operation(summary = "Get user service point van details") @GetMapping(value = "/getUserServicePointVanDetails", consumes = "application/json", produces = "application/json") - public String getUserServicePointVanDetails(@RequestBody String comingRequest) { + public String getUserServicePointVanDetails(@RequestBody String comingRequest, HttpServletRequest request) { OutputResponse response = new OutputResponse(); try { + String jwtToken = CookieUtil.getJwtTokenFromCookie(request); + String userId = jwtUtil.getUserIdFromToken(jwtToken); JSONObject obj = new JSONObject(comingRequest); logger.info("getUserServicePointVanDetails request " + comingRequest); - String responseData = iemrMmuLoginServiceImpl.getUserServicePointVanDetails(obj.getInt("userID")); + if(userId != null ) { + String responseData = iemrMmuLoginServiceImpl.getUserServicePointVanDetails(Integer.parseInt(userId)); response.setResponse(responseData); + } + else { + response.setError(403, "Unauthorized access: Missing or invalid token"); + return response.toString(); + } + } catch (Exception e) { response.setError(5000, "Error while getting service points and van data"); logger.error("get User SP and van details failed with " + e.getMessage(), e); @@ -95,19 +113,27 @@ public String getServicepointVillages(@RequestBody String comingRequest) { @Operation(summary = "Get user van details") @PostMapping(value = "/getUserVanSpDetails", consumes = "application/json", produces = "application/json") - public String getUserVanSpDetails(@RequestBody String comingRequest) { + public String getUserVanSpDetails(@RequestBody String comingRequest, HttpServletRequest request) { OutputResponse response = new OutputResponse(); + try { JSONObject obj = new JSONObject(comingRequest); + String jwtToken = CookieUtil.getJwtTokenFromCookie(request); + String userId = jwtUtil.getUserIdFromToken(jwtToken); + int userID = Integer.parseInt(userId); logger.info("getServicepointVillages request " + comingRequest); - if (obj.has("userID") && obj.has("providerServiceMapID")) { - String responseData = iemrMmuLoginServiceImpl.getUserVanSpDetails(obj.getInt("userID"), + if (userId != null && obj.has("providerServiceMapID")) { + String responseData = iemrMmuLoginServiceImpl.getUserVanSpDetails(userID, obj.getInt("providerServiceMapID")); response.setResponse(responseData); + } else if (userId == null || jwtToken == null) { + response.setError(403, "Unauthorized access: Missing or invalid token"); } else { response.setError(5000, "Invalid request"); } + + } catch (Exception e) { response.setError(5000, "Error while getting van and service points data"); logger.error("getUserVanSpDetails failed with " + e.getMessage(), e); @@ -129,7 +155,7 @@ public String getVanMaster(@PathVariable("psmID") Integer psmID) { } catch (Exception e) { logger.info("Error occurred while fetching van master is : " + e); response.setError(5000, "Error occurred while fetching van master is : " + e); - ; + } return response.toString(); } diff --git a/src/main/java/com/iemr/mmu/controller/ncdCare/NCDCareController.java b/src/main/java/com/iemr/mmu/controller/ncdCare/NCDCareController.java index 03c4cecc..3d061d33 100644 --- a/src/main/java/com/iemr/mmu/controller/ncdCare/NCDCareController.java +++ b/src/main/java/com/iemr/mmu/controller/ncdCare/NCDCareController.java @@ -21,13 +21,16 @@ */ package com.iemr.mmu.controller.ncdCare; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; @@ -36,6 +39,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -66,6 +71,7 @@ public void setNcdCareServiceImpl(NCDCareServiceImpl ncdCareServiceImpl) { */ @Operation(summary = "Save NCD care data collected by nurse") @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE') ") public String saveBenNCDCareNurseData(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); try { @@ -99,6 +105,7 @@ public String saveBenNCDCareNurseData(@RequestBody String requestObj) { */ @Operation(summary = "Save NCD care beneficiary case record and referral") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize("hasRole('DOCTOR') ") public String saveBenNCDCareDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -108,7 +115,23 @@ public String saveBenNCDCareDoctorData(@RequestBody String requestObj, if (jsnOBJ != null) { Long ncdCareRes = ncdCareServiceImpl.saveDoctorData(jsnOBJ, authorization); if (null != ncdCareRes && ncdCareRes > 0) { - response.setResponse("Data saved successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data saved successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setResponse("Unable to save data"); } @@ -125,6 +148,7 @@ public String saveBenNCDCareDoctorData(@RequestBody String requestObj, @Operation(summary = "Get NCD care beneficiary visit details") @PostMapping(value = { "/getBenVisitDetailsFrmNurseNCDCare" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") @Transactional(rollbackFor = Exception.class) public String getBenVisitDetailsFrmNurseNCDCare( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { @@ -157,7 +181,7 @@ public String getBenVisitDetailsFrmNurseNCDCare( */ @Operation(summary = "Get NCD care beneficiary history") @PostMapping(value = { "/getBenNCDCareHistoryDetails" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenNCDCareHistoryDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -188,6 +212,7 @@ public String getBenNCDCareHistoryDetails( */ @Operation(summary = "Get NCD care beneficiary vitals") @PostMapping(value = { "/getBenVitalDetailsFrmNurseNCDCare" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenVitalDetailsFrmNurseNCDCare( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -220,6 +245,7 @@ public String getBenVitalDetailsFrmNurseNCDCare( @Operation(summary = "Get NCD care beneficiary case record and referral") @PostMapping(value = { "/getBenCaseRecordFromDoctorNCDCare" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenCaseRecordFromDoctorNCDCare( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -246,6 +272,7 @@ public String getBenCaseRecordFromDoctorNCDCare( @Operation(summary = "Update NCD care beneficiary history") @PostMapping(value = { "/update/historyScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateHistoryNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -278,6 +305,7 @@ public String updateHistoryNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update NCD care beneficiary vitals") @PostMapping(value = { "/update/vitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateVitalNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -307,6 +335,7 @@ public String updateVitalNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update NCD care beneficiary case record and referral") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateNCDCareDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { @@ -316,7 +345,23 @@ public String updateNCDCareDoctorData(@RequestBody String requestObj, try { Long result = ncdCareServiceImpl.updateNCDCareDoctorData(jsnOBJ, authorization); if (null != result && result > 0) { - response.setResponse("Data updated successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data updated successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(500, "Unable to modify data"); } diff --git a/src/main/java/com/iemr/mmu/controller/ncdscreening/NCDController.java b/src/main/java/com/iemr/mmu/controller/ncdscreening/NCDController.java index 39d3531b..4de29992 100644 --- a/src/main/java/com/iemr/mmu/controller/ncdscreening/NCDController.java +++ b/src/main/java/com/iemr/mmu/controller/ncdscreening/NCDController.java @@ -21,10 +21,16 @@ */ package com.iemr.mmu.controller.ncdscreening; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; @@ -35,6 +41,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -73,8 +81,8 @@ public void setNcdScreeningServiceImpl(NCDScreeningServiceImpl ncdScreeningServi * @return success or failure response */ @Operation(summary = "Save beneficiary NCD screening details") - @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE')") public String saveBeneficiaryNCDScreeningDetails(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { @@ -109,6 +117,7 @@ public String saveBeneficiaryNCDScreeningDetails(@RequestBody String requestObj, */ @Operation(summary = "Save NCD screening doctor data") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize("hasRole('DOCTOR')") public String saveBenNCDScreeningDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -119,7 +128,23 @@ public String saveBenNCDScreeningDoctorData(@RequestBody String requestObj, if (jsnOBJ != null) { Long ncdCareRes = ncdScreeningServiceImpl.saveDoctorData(jsnOBJ, authorization); if (null != ncdCareRes && ncdCareRes > 0) { - response.setResponse("Data saved successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data saved successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setResponse("Unable to save data"); } @@ -135,8 +160,8 @@ public String saveBenNCDScreeningDoctorData(@RequestBody String requestObj, } @Operation(summary = "Get NCD screening visit details") - @PostMapping(value = { "/get/nurseData" }) + @PreAuthorize("hasRole('NURSE')") public String getNCDScreenigDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { @@ -162,6 +187,7 @@ public String getNCDScreenigDetails( @Operation(summary = "Get NCD screening visit count for beneficiary registration id") @GetMapping(value = { "/getNcdScreeningVisitCount/{beneficiaryRegID}" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getNcdScreeningVisitCount(@PathVariable("beneficiaryRegID") Long beneficiaryRegID) { OutputResponse response = new OutputResponse(); try { @@ -185,6 +211,7 @@ public String getNcdScreeningVisitCount(@PathVariable("beneficiaryRegID") Long b @Operation(summary = "Get beneficiary visit details from nurse NCD screening") @PostMapping(value = { "/getBenVisitDetailsFrmNurseNCDScreening" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenVisitDetailsFrmNurseGOPD( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -211,7 +238,7 @@ public String getBenVisitDetailsFrmNurseGOPD( @Operation(summary = "Get beneficiary general OPD history details from nurse to doctor ") @PostMapping(value = { "/getBenHistoryDetails" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenHistoryDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -237,6 +264,7 @@ public String getBenHistoryDetails( @Operation(summary = "Get beneficiary vital details from nurse general OPD") @PostMapping(value = { "/getBenVitalDetailsFrmNurse" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenVitalDetailsFrmNurse( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -263,6 +291,7 @@ public String getBenVitalDetailsFrmNurse( @Operation(summary = "Get beneficiary vital details from nurse general OPD") @PostMapping(value = { "/getBenIdrsDetailsFrmNurse" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String getBenIdrsDetailsFrmNurse( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -294,6 +323,7 @@ public String getBenIdrsDetailsFrmNurse( */ @Operation(summary = "Get beneficiary doctor entered details") @PostMapping(value = { "/getBenCaseRecordFromDoctorNCDScreening" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") @Transactional(rollbackFor = Exception.class) public String getBenCaseRecordFromDoctorNCDCare( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { @@ -321,6 +351,7 @@ public String getBenCaseRecordFromDoctorNCDCare( @Operation(summary = "Update beneficiary NCD screening details") @PostMapping(value = { "/update/nurseData" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateBeneficiaryNCDScreeningDetails(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -348,6 +379,7 @@ public String updateBeneficiaryNCDScreeningDetails(@RequestBody String requestOb @Operation(summary = "Update history data in doctor screen") @PostMapping(value = { "/update/historyScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateHistoryNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -372,6 +404,7 @@ public String updateHistoryNurse(@RequestBody String requestObj) { @Operation(summary = "Update NCD screening vital data in doctor screen") @PostMapping(value = { "/update/vitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateVitalNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -395,6 +428,7 @@ public String updateVitalNurse(@RequestBody String requestObj) { @Operation(summary = "Update history data in doctor screen") @PostMapping(value = { "/update/idrsScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public String updateIDRSScreen(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -418,6 +452,7 @@ public String updateIDRSScreen(@RequestBody String requestObj) { @Operation(summary = "Update doctor data") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('DOCTOR')") public String updateDoctorData(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -426,10 +461,27 @@ public String updateDoctorData(@RequestBody String requestObj) { try { JsonObject jsnOBJ = parseJsonRequest(requestObj); int i = ncdSCreeningDoctorService.updateDoctorData(jsnOBJ); - if (i > 0) - response.setResponse("Data updated successfully"); - else + if (i > 0) { + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data updated successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); + } else { response.setError(5000, "Error in data update"); + } } catch (Exception e) { response.setError(5000, "Unable to modify data"); logger.error("Error while updating doctor data :" + e); diff --git a/src/main/java/com/iemr/mmu/controller/nurse/vitals/AnthropometryVitalsController.java b/src/main/java/com/iemr/mmu/controller/nurse/vitals/AnthropometryVitalsController.java index f5677647..ef3a5a5a 100644 --- a/src/main/java/com/iemr/mmu/controller/nurse/vitals/AnthropometryVitalsController.java +++ b/src/main/java/com/iemr/mmu/controller/nurse/vitals/AnthropometryVitalsController.java @@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.query.Param; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -18,6 +19,7 @@ @RestController @RequestMapping(value = "/anthropometryVitals", headers = "Authorization", consumes = "application/json", produces = "application/json") +@PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR')") public class AnthropometryVitalsController { private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); diff --git a/src/main/java/com/iemr/mmu/controller/pnc/PostnatalCareController.java b/src/main/java/com/iemr/mmu/controller/pnc/PostnatalCareController.java index 0e15e43a..5fe1e81a 100644 --- a/src/main/java/com/iemr/mmu/controller/pnc/PostnatalCareController.java +++ b/src/main/java/com/iemr/mmu/controller/pnc/PostnatalCareController.java @@ -21,10 +21,16 @@ */ package com.iemr.mmu.controller.pnc; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; @@ -33,6 +39,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -63,6 +71,7 @@ public void setPncServiceImpl(PNCServiceImpl pncServiceImpl) { */ @Operation(summary = "Save PNC nurse data") @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE')") public String saveBenPNCNurseData(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); try { @@ -96,6 +105,7 @@ public String saveBenPNCNurseData(@RequestBody String requestObj) { */ @Operation(summary = "Save PNC doctor data") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize("hasRole('DOCTOR') ") public String saveBenPNCDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { OutputResponse response = new OutputResponse(); @@ -104,7 +114,23 @@ public String saveBenPNCDoctorData(@RequestBody String requestObj, if (jsnOBJ != null) { Long r = pncServiceImpl.savePNCDoctorData(jsnOBJ, authorization); if (r != null && r > 0) { - response.setResponse("Data saved successfully"); + // Extract drug IDs from JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data saved successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(5000, "Unable to save data"); } @@ -121,6 +147,7 @@ public String saveBenPNCDoctorData(@RequestBody String requestObj, @Operation(summary = "Get PNC beneficiary visit details from nurse") @PostMapping(value = { "/getBenVisitDetailsFrmNursePNC" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") @Transactional(rollbackFor = Exception.class) public String getBenVisitDetailsFrmNursePNC( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { @@ -154,6 +181,7 @@ public String getBenVisitDetailsFrmNursePNC( @Operation(summary = "Get PNC beneficiary care details from nurse") @PostMapping(value = { "/getBenPNCDetailsFrmNursePNC" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenPNCDetailsFrmNursePNC( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -185,7 +213,7 @@ public String getBenPNCDetailsFrmNursePNC( */ @Operation(summary = "Get PNC beneficiary history details from nurse to doctor ") @PostMapping(value = { "/getBenHistoryDetails" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenHistoryDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -216,6 +244,7 @@ public String getBenHistoryDetails( */ @Operation(summary = "Get PNC beneficiary vital details from nurse") @PostMapping(value = { "/getBenVitalDetailsFrmNurse" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenVitalDetailsFrmNurse( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -247,7 +276,7 @@ public String getBenVitalDetailsFrmNurse( */ @Operation(summary = "Get PNC beneficiary examination details from nurse to doctor ") @PostMapping(value = { "/getBenExaminationDetailsPNC" }) - + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenExaminationDetailsPNC( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -279,6 +308,7 @@ public String getBenExaminationDetailsPNC( @Operation(summary = "Get PNC beneficiary case record") @PostMapping(value = { "/getBenCaseRecordFromDoctorPNC" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenCaseRecordFromDoctorPNC( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -305,6 +335,7 @@ public String getBenCaseRecordFromDoctorPNC( @Operation(summary = "Update PNC care data in doctor screen") @PostMapping(value = { "/update/PNCScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updatePNCCareNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -335,6 +366,7 @@ public String updatePNCCareNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update PNC beneficiary history in doctor screen") @PostMapping(value = { "/update/historyScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updateHistoryNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -365,6 +397,7 @@ public String updateHistoryNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update PNC beneficiary vitals in doctor screen") @PostMapping(value = { "/update/vitalScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updateVitalNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -395,6 +428,7 @@ public String updateVitalNurse(@RequestBody String requestObj) { */ @Operation(summary = "Update PNC beneficiary examination data in doctor screen") @PostMapping(value = { "/update/examinationScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String updateGeneralOPDExaminationNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); @@ -418,6 +452,7 @@ public String updateGeneralOPDExaminationNurse(@RequestBody String requestObj) { @Operation(summary = "Update PNC doctor data") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('DOCTOR') ") public String updatePNCDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { @@ -427,7 +462,22 @@ public String updatePNCDoctorData(@RequestBody String requestObj, try { Long result = pncServiceImpl.updatePNCDoctorData(jsnOBJ, authorization); if (null != result && result > 0) { - response.setResponse("Data updated successfully"); + List prescribedDrugIDs = new ArrayList<>(); + if (jsnOBJ.has("savedDrugIDs") && !jsnOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = jsnOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response with message and IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data updated successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(500, "Unable to modify data"); } diff --git a/src/main/java/com/iemr/mmu/controller/quickconsult/QuickConsultController.java b/src/main/java/com/iemr/mmu/controller/quickconsult/QuickConsultController.java index 5b672df5..00a4eaa6 100644 --- a/src/main/java/com/iemr/mmu/controller/quickconsult/QuickConsultController.java +++ b/src/main/java/com/iemr/mmu/controller/quickconsult/QuickConsultController.java @@ -25,6 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; @@ -33,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -44,6 +46,10 @@ import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.Operation; +import java.util.*; +import com.google.gson.Gson; +import com.google.gson.JsonArray; + /** * @Objective Saving general OPD quick consult data for Nurse and Doctor both. */ @@ -70,6 +76,7 @@ public void setQuickConsultationServiceImpl(QuickConsultationServiceImpl quickCo */ @Operation(summary = "Save quick consult nurse data") @PostMapping(value = { "/save/nurseData" }) + @PreAuthorize("hasRole('NURSE') ") public String saveBenQuickConsultDataNurse(@RequestBody String requestObj) { OutputResponse response = new OutputResponse(); try { @@ -102,6 +109,7 @@ public String saveBenQuickConsultDataNurse(@RequestBody String requestObj) { */ @Operation(summary = "Save quick consultation detail for doctor") @PostMapping(value = { "/save/doctorData" }) + @PreAuthorize("hasRole('DOCTOR') ") public String saveQuickConsultationDetail( @ApiParam(value = "{\"quickConsultation\":{\"beneficiaryRegID\":\"Long\",\"providerServiceMapID\": \"Integer\", \"benVisitID\":\"Long\", \"benChiefComplaint\":[{\"chiefComplaintID\":\"Integer\", " + "\"chiefComplaint\":\"String\", \"duration\":\"Integer\", \"unitOfDuration\":\"String\"}], \"description\":\"String\"" @@ -124,7 +132,25 @@ public String saveQuickConsultationDetail( Integer i = quickConsultationServiceImpl.quickConsultDoctorDataInsert(quickConsultDoctorOBJ, authorization); if (i != null && i > 0) { - response.setResponse("Data saved successfully"); + // Check if drug IDs were saved and added to the JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (quickConsultDoctorOBJ.has("savedDrugIDs") + && !quickConsultDoctorOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = quickConsultDoctorOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response data with message and drug IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data saved successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + // Convert to JSON string and set response + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(5000, "Unable to save data"); } @@ -139,6 +165,7 @@ public String saveQuickConsultationDetail( @Operation(summary = "Get quick consult beneficiary visit details") @PostMapping(value = { "/getBenDataFrmNurseToDocVisitDetailsScreen" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenDataFrmNurseScrnToDocScrnVisitDetails( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -169,6 +196,7 @@ public String getBenDataFrmNurseScrnToDocScrnVisitDetails( */ @Operation(summary = "Get quick consult beneficiary vital details") @PostMapping(value = { "/getBenVitalDetailsFrmNurse" }) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenVitalDetailsFrmNurse( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -201,6 +229,7 @@ public String getBenVitalDetailsFrmNurse( @Operation(summary = "Get quick consult beneficiary case record") @PostMapping(value = { "/getBenCaseRecordFromDoctorQuickConsult" }) @Transactional(rollbackFor = Exception.class) + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public String getBenCaseRecordFromDoctorQuickConsult( @ApiParam(value = "{\"benRegID\":\"Long\",\"visitCode\":\"Long\"}") @RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); @@ -227,6 +256,7 @@ public String getBenCaseRecordFromDoctorQuickConsult( @Operation(summary = "Update quick consult doctor data") @PostMapping(value = { "/update/doctorData" }) + @PreAuthorize("hasRole('DOCTOR') ") public String updateGeneralOPDQCDoctorData(@RequestBody String requestObj, @RequestHeader(value = "Authorization") String authorization) { @@ -241,7 +271,25 @@ public String updateGeneralOPDQCDoctorData(@RequestBody String requestObj, Long result = quickConsultationServiceImpl.updateGeneralOPDQCDoctorData(quickConsultDoctorOBJ, authorization); if (null != result && result > 0) { - response.setResponse("Data updated successfully"); + // Check if drug IDs were saved and added to the JsonObject + List prescribedDrugIDs = new ArrayList<>(); + if (quickConsultDoctorOBJ.has("savedDrugIDs") + && !quickConsultDoctorOBJ.get("savedDrugIDs").isJsonNull()) { + JsonArray drugIDsArray = quickConsultDoctorOBJ.getAsJsonArray("savedDrugIDs"); + for (int j = 0; j < drugIDsArray.size(); j++) { + prescribedDrugIDs.add(drugIDsArray.get(j).getAsLong()); + } + } + + // Create response data with message and drug IDs + Map responseData = new HashMap<>(); + responseData.put("message", "Data updated successfully"); + responseData.put("prescribedDrugIDs", prescribedDrugIDs); + + // Convert to JSON string and set response + Gson gson = new Gson(); + String responseJson = gson.toJson(responseData); + response.setResponse(responseJson); } else { response.setError(500, "Unable to modify data"); } diff --git a/src/main/java/com/iemr/mmu/controller/registrar/main/RegistrarController.java b/src/main/java/com/iemr/mmu/controller/registrar/main/RegistrarController.java index 89261c5b..ac6cf9c5 100644 --- a/src/main/java/com/iemr/mmu/controller/registrar/main/RegistrarController.java +++ b/src/main/java/com/iemr/mmu/controller/registrar/main/RegistrarController.java @@ -29,6 +29,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -82,6 +83,7 @@ public void setNurseServiceImpl(NurseServiceImpl nurseServiceImpl) { this.nurseServiceImpl = nurseServiceImpl; } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('REGISTRAR')") @Operation(summary = "Get registrar worklist data") @PostMapping(value = { "/registrarWorkListData" }) public String getRegistrarWorkList(@ApiParam(value = "{\"spID\": \"Integer\"}") @RequestBody String comingRequest) @@ -100,6 +102,7 @@ public String getRegistrarWorkList(@ApiParam(value = "{\"spID\": \"Integer\"}") return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('REGISTRAR')") @Operation(summary = "Search for the beneficiary by beneficiary id") @PostMapping(value = { "/quickSearch" }) public String quickSearchBeneficiary( @@ -118,6 +121,7 @@ public String quickSearchBeneficiary( return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('REGISTRAR')") @Operation(summary = "Search for the beneficiary based on provided data") @PostMapping(value = { "/advanceSearch" }) public String advanceSearch( @@ -138,6 +142,7 @@ public String advanceSearch( return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('REGISTRAR')") @Operation(summary = "Get beneficiary details of given beneficiary registration id") @PostMapping(value = { "/get/benDetailsByRegID" }) public String getBenDetailsByRegID( @@ -167,6 +172,7 @@ public String getBenDetailsByRegID( return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('LABTECHNICIAN') || hasRole('LAB_TECHNICIAN') || hasRole('PHARMACIST') || hasRole('REGISTRAR')") @Operation(summary = "Get beneficiary details") @PostMapping(value = { "/get/beneficiaryDetails" }) public String getBeneficiaryDetails( @@ -201,6 +207,7 @@ public String getBeneficiaryDetails( return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('LABTECHNICIAN') || hasRole('LAB_TECHNICIAN') || hasRole('PHARMACIST')") @Operation(summary = "Get beneficiary image") @PostMapping(value = { "/get/beneficiaryImage" }) public String getBeneficiaryImage( @@ -226,6 +233,7 @@ public String getBeneficiaryImage( return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('REGISTRAR')") @Operation(summary = "Search beneficiary for beneficiary id or beneficiary phone no") @PostMapping(value = { "/quickSearchNew" }) public String quickSearchNew(@RequestBody String requestObj, @@ -249,6 +257,7 @@ public String quickSearchNew(@RequestBody String requestObj, } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('REGISTRAR')") @Operation(summary = "Search beneficiary advance search new") @PostMapping(value = { "/advanceSearchNew" }) public String advanceSearchNew(@RequestBody String requestObj, @@ -272,6 +281,7 @@ public String advanceSearchNew(@RequestBody String requestObj, } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('LABTECHNICIAN') || hasRole('LAB_TECHNICIAN') || hasRole('PHARMACIST')") @Operation(summary = "Get beneficiary details for left side panel of given beneficiary registration id") @PostMapping(value = { "/get/benDetailsByRegIDForLeftPanelNew" }) public String getBenDetailsForLeftSidePanelByRegID( @@ -301,7 +311,8 @@ public String getBenDetailsForLeftSidePanelByRegID( } return response.toString(); } - + + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('LABTECHNICIAN') || hasRole('LAB_TECHNICIAN') || hasRole('PHARMACIST')") @Operation(summary = "Get beneficiary image") @PostMapping(value = { "/getBenImage" }) public String getBenImage(@RequestBody String requestObj, @@ -319,6 +330,7 @@ public String getBenImage(@RequestBody String requestObj, } + @PreAuthorize("hasRole('NURSE') || hasRole('REGISTRAR')") @Operation(summary = "Register a new beneficiary") @PostMapping(value = { "/registrarBeneficaryRegistration" }) public String createBeneficiary( @@ -381,6 +393,7 @@ public String createBeneficiary( return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('REGISTRAR')") @Operation(summary = "Register a new beneficiary API") @PostMapping(value = { "/registrarBeneficaryRegistrationNew" }) public String registrarBeneficaryRegistrationNew(@RequestBody String comingReq, @@ -399,6 +412,7 @@ public String registrarBeneficaryRegistrationNew(@RequestBody String comingReq, } + @PreAuthorize("hasRole('NURSE') || hasRole('REGISTRAR') || hasRole('DOCTOR')") @Operation(summary = "Update registered beneficiary data") @PostMapping(value = { "/update/BeneficiaryDetails" }) public String updateBeneficiary( @@ -457,6 +471,7 @@ public String updateBeneficiary( return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('REGISTRAR')") @Operation(summary = "Registrar will submit a beneficiary to nurse for revisit") @PostMapping(value = { "/create/BenReVisitToNurse" }) public String createReVisitForBenToNurse(@RequestBody String requestOBJ) { @@ -478,6 +493,7 @@ public String createReVisitForBenToNurse(@RequestBody String requestOBJ) { return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('REGISTRAR')") @Operation(summary = "Beneficiary edit, save or submit") @PostMapping(value = { "/update/BeneficiaryUpdate" }) public String beneficiaryUpdate(@RequestBody String requestOBJ, @@ -502,6 +518,7 @@ public String beneficiaryUpdate(@RequestBody String requestOBJ, return response.toString(); } + @PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') || hasRole('REGISTRAR')") @Operation(summary = "Get master data for registrar") @PostMapping(value = { "/registrarMasterData" }) public String masterDataForRegistration( diff --git a/src/main/java/com/iemr/mmu/controller/reports/ReportGateway.java b/src/main/java/com/iemr/mmu/controller/reports/ReportGateway.java index 87d5c0de..8792b8c3 100644 --- a/src/main/java/com/iemr/mmu/controller/reports/ReportGateway.java +++ b/src/main/java/com/iemr/mmu/controller/reports/ReportGateway.java @@ -24,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -41,6 +42,7 @@ @RestController @RequestMapping(value = "/report", headers = "Authorization") +@PreAuthorize("hasRole('NURSE') || hasRole('PHARMACIST') || hasRole('LABTECHNICIAN') || hasRole('DOCTOR') || hasRole('LAB_TECHNICIAN') || hasRole('TC_SPECIALIST') || hasRole('ONCOLOGIST') || hasRole('RADIOLOGIST')") public class ReportGateway { private Logger logger = LoggerFactory.getLogger(RegistrarController.class); diff --git a/src/main/java/com/iemr/mmu/controller/snomedct/SnomedController.java b/src/main/java/com/iemr/mmu/controller/snomedct/SnomedController.java index 8b79db37..38077310 100644 --- a/src/main/java/com/iemr/mmu/controller/snomedct/SnomedController.java +++ b/src/main/java/com/iemr/mmu/controller/snomedct/SnomedController.java @@ -24,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -41,6 +42,7 @@ @RequestMapping(value = "/snomed") @RestController +@PreAuthorize("hasRole('NURSE') || hasRole('DOCTOR') ") public class SnomedController { private Logger logger = LoggerFactory.getLogger(SnomedController.class); diff --git a/src/main/java/com/iemr/mmu/controller/teleconsultation/TeleConsultationController.java b/src/main/java/com/iemr/mmu/controller/teleconsultation/TeleConsultationController.java index d85158b5..842f1dca 100644 --- a/src/main/java/com/iemr/mmu/controller/teleconsultation/TeleConsultationController.java +++ b/src/main/java/com/iemr/mmu/controller/teleconsultation/TeleConsultationController.java @@ -24,13 +24,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import com.iemr.mmu.utils.JwtUtil; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - +import com.iemr.mmu.utils.JwtUtil; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -43,11 +45,15 @@ @RestController @RequestMapping(value = "/tc", headers = "Authorization", consumes = "application/json", produces = "application/json") +@PreAuthorize("hasRole('TCSPECIALIST') || hasRole('TC_SPECIALIST') ") public class TeleConsultationController { private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); @Autowired private TeleConsultationServiceImpl teleConsultationServiceImpl; + + @Autowired + private JwtUtil jwtUtil; @Operation(summary = "Update beneficiary arrival status based on request") @PostMapping(value = { "/update/benArrivalStatus" }) @@ -137,14 +143,19 @@ public String createTCRequestForBeneficiary(@RequestBody String requestOBJ, @Req @Operation(summary = "Get TC request list for a specialist") @PostMapping(value = { "/getTCRequestList" }) - public String getTCSpecialistWorkListNew(@RequestBody String requestOBJ) { + public String getTCSpecialistWorkListNew(@RequestBody String requestOBJ, HttpServletRequest request) { OutputResponse response = new OutputResponse(); try { + String jwtToken = CookieUtil.getJwtTokenFromCookie(request); + String userId = jwtUtil.getUserIdFromToken(jwtToken); if (requestOBJ != null) { JsonObject jsnOBJ = parseJsonRequest(requestOBJ); - + if(userId == null) { + response.setError(403, "Unauthorized access: Missing or invalid token"); + return response.toString(); + } String s = teleConsultationServiceImpl.getTCRequestListBySpecialistIdAndDate( - jsnOBJ.get("psmID").getAsInt(), jsnOBJ.get("userID").getAsInt(), + jsnOBJ.get("psmID").getAsInt(), Integer.parseInt(userId), jsnOBJ.get("date").getAsString()); if (s != null) response.setResponse(s); diff --git a/src/main/java/com/iemr/mmu/data/benFlowStatus/BeneficiaryFlowStatus.java b/src/main/java/com/iemr/mmu/data/benFlowStatus/BeneficiaryFlowStatus.java index 0cce7849..4493ce9f 100644 --- a/src/main/java/com/iemr/mmu/data/benFlowStatus/BeneficiaryFlowStatus.java +++ b/src/main/java/com/iemr/mmu/data/benFlowStatus/BeneficiaryFlowStatus.java @@ -274,7 +274,11 @@ public class BeneficiaryFlowStatus { @Expose @Column(name = "isCaseSheetdownloaded") private Boolean isCaseSheetdownloaded; - + + @Expose + @Column(name = "doctor_signature_flag") + private Boolean doctorSignatureFlag = false; + @Transient private I_bendemographics i_bendemographics; @Transient @@ -368,8 +372,11 @@ public static BeneficiaryFlowStatus getBeneficiaryFlowStatusForLeftPanel(ArrayLi (String) objArr[3], (String) objArr[4], (Integer) objArr[5], (Short) objArr[6], (String) objArr[7], (String) objArr[8], (String) objArr[9], (Long) objArr[10], (String) objArr[11], (String) objArr[12], (String) objArr[13], (Long) objArr[14], - (Timestamp) objArr[15], (Timestamp) objArr[16], (Long) objArr[17], (Timestamp) objArr[18], + (Timestamp) objArr[15], (Timestamp) objArr[16], (Long) objArr[17], (Timestamp) objArr[18], (String) objArr[19], (String) objArr[20]); + if (objArr.length > 21) { + obj.setDoctorSignatureFlag((Boolean) objArr[21]); + } } } return obj; @@ -972,4 +979,14 @@ public void setAuth(String auth) { Auth = auth; } + // Add getter + public Boolean getDoctorSignatureFlag() { + return doctorSignatureFlag; + } + + // Add setter + public void setDoctorSignatureFlag(Boolean doctorSignatureFlag) { + this.doctorSignatureFlag = doctorSignatureFlag; + } + } diff --git a/src/main/java/com/iemr/mmu/data/doctor/CancerGynecologicalExamination.java b/src/main/java/com/iemr/mmu/data/doctor/CancerGynecologicalExamination.java index 4e96ba30..dc916f29 100644 --- a/src/main/java/com/iemr/mmu/data/doctor/CancerGynecologicalExamination.java +++ b/src/main/java/com/iemr/mmu/data/doctor/CancerGynecologicalExamination.java @@ -39,7 +39,6 @@ import com.google.gson.annotations.Expose; import lombok.Data; -import lombok.Data; @Entity @Data diff --git a/src/main/java/com/iemr/mmu/data/ncdcare/NCDCareDiagnosis.java b/src/main/java/com/iemr/mmu/data/ncdcare/NCDCareDiagnosis.java index 6a413d97..a4acb7c6 100644 --- a/src/main/java/com/iemr/mmu/data/ncdcare/NCDCareDiagnosis.java +++ b/src/main/java/com/iemr/mmu/data/ncdcare/NCDCareDiagnosis.java @@ -39,7 +39,7 @@ @Table(name = "t_ncddiagnosis") public class NCDCareDiagnosis { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY ) + @GeneratedValue(strategy = GenerationType.IDENTITY) @Expose @Column(name = "ID") private Long ID; @@ -142,20 +142,18 @@ public class NCDCareDiagnosis { @Transient @Expose private String externalInvestigation; - + @Expose @Transient private ArrayList provisionalDiagnosisList; - + @Expose @Transient private String diagnosisProvided; - + @Expose @Transient private String diagnosisProvided_SCTCode; - - public String getDiagnosisProvided() { return diagnosisProvided; @@ -383,7 +381,7 @@ public void setVanID(Integer vanID) { public NCDCareDiagnosis(Long beneficiaryRegID, Long benVisitID, Integer providerServiceMapID, Long prescriptionID, String ncdCareCondition, String ncdComplication, String ncdCareType, Long visitCode, - String externalInvestigation, String ncdCareConditionOther) { + String externalInvestigation, String ncdCareConditionOther, String createdBy, Timestamp createdDate) { super(); this.beneficiaryRegID = beneficiaryRegID; this.benVisitID = benVisitID; @@ -395,6 +393,8 @@ public NCDCareDiagnosis(Long beneficiaryRegID, Long benVisitID, Integer provider this.visitCode = visitCode; this.externalInvestigation = externalInvestigation; this.ncdScreeningConditionOther = ncdCareConditionOther; + this.createdBy = createdBy; + this.createdDate = createdDate; } public static NCDCareDiagnosis getNCDCareDiagnosisDetails(ArrayList resList) { @@ -402,7 +402,8 @@ public static NCDCareDiagnosis getNCDCareDiagnosisDetails(ArrayList re if (null != resList && resList.size() > 0) { Object[] obj = resList.get(0); cOBJ = new NCDCareDiagnosis((Long) obj[0], (Long) obj[1], (Integer) obj[2], (Long) obj[3], (String) obj[4], - (String) obj[5], (String) obj[6], (Long) obj[7], null, (String) obj[8]); + (String) obj[5], (String) obj[6], (Long) obj[7], null, (String) obj[8], (String) obj[9], + (Timestamp) obj[10]); } return cOBJ; diff --git a/src/main/java/com/iemr/mmu/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java b/src/main/java/com/iemr/mmu/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java index d4adc10e..b3d90026 100644 --- a/src/main/java/com/iemr/mmu/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java +++ b/src/main/java/com/iemr/mmu/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java @@ -56,7 +56,7 @@ public ArrayList getNurseWorklistNew( + " t.VisitCategory = :visitCategory, t.nurseFlag = :nurseFlag, t.doctorFlag = :docFlag, " + " t.labIteration = :labIteration, t.lab_technician_flag = 0, t.radiologist_flag = :radiologistFlag, " + " t.oncologist_flag = :oncologistFlag, t.benVisitDate = now(), " - + " t.visitCode = :benVisitCode, t.processed = 'U', t.vanID =:vanID " + + " t.visitCode = :benVisitCode, t.processed = 'U', t.vanID =:vanID, t.vanSerialNo=:benFlowID " + " WHERE t.benFlowID = :benFlowID AND t.beneficiaryRegID = :benRegID " + " AND nurseFlag = 1 ") public int updateBenFlowStatusAfterNurseActivity(@Param("benFlowID") Long benFlowID, @Param("benRegID") Long benRegID, @Param("benVisitID") Long benVisitID, @@ -74,9 +74,12 @@ public int updateBenFlowStatusTMReferred(@Param("benFlowID") Long benFlowID, @Pa @Param("specialistFlag") Short specialistFlag, @Param("pharmacistflag") Short pharmacistflag); @Query("SELECT t.benFlowID, t.beneficiaryRegID, t.visitDate, t.benName, t.age, t.ben_age_val, t.genderID, t.genderName, " - + " t.villageName, t.districtName, t.beneficiaryID, t.servicePointName, t.VisitReason, t.VisitCategory, t.benVisitID, " - + " t.registrationDate, t.benVisitDate, t.visitCode, t.consultationDate, t.fatherName, t.preferredPhoneNum FROM BeneficiaryFlowStatus t " - + " Where t.beneficiaryRegID = :benRegID AND t.benFlowID = :benFlowID ") + + " t.villageName, t.districtName, t.beneficiaryID, t.servicePointName, t.VisitReason, t.VisitCategory, " + + " t.benVisitID, t.registrationDate, t.benVisitDate, t.visitCode, t.consultationDate, " + + " t.fatherName, t.preferredPhoneNum, t.doctorSignatureFlag " // <-- added here + + " FROM BeneficiaryFlowStatus t " + + " WHERE t.beneficiaryRegID = :benRegID AND t.benFlowID = :benFlowID ") + public ArrayList getBenDetailsForLeftSidePanel(@Param("benRegID") Long benRegID, @Param("benFlowID") Long benFlowID); @@ -147,37 +150,51 @@ public ArrayList getLabWorklistNew( @Param("providerServiceMapId") Integer providerServiceMapId, @Param("fromDate") Timestamp fromDate, @Param("vanID") Integer vanID); + @Transactional @Modifying - @Query("UPDATE BeneficiaryFlowStatus t set t.doctorFlag = :docFlag , t.pharmacist_flag = :pharmaFlag, " - + " t.oncologist_flag = :oncologistFlag, t.consultationDate = now(), t.processed = 'U', " - + " t.specialist_flag = :tcSpecialistFlag, t.tCSpecialistUserID = :tcSpecialistUserID, t.tCRequestDate = :tcDate " - + " WHERE t.benFlowID = :benFlowID AND " + " t.beneficiaryRegID = :benRegID AND t.beneficiaryID = :benID ") + @Query("UPDATE BeneficiaryFlowStatus t set t.doctorFlag = :docFlag, " + + "t.pharmacist_flag = :pharmaFlag, t.doctorSignatureFlag = :signatureFlag, " + + "t.oncologist_flag = :oncologistFlag, t.consultationDate = now(), t.processed = 'U', " + + "t.specialist_flag = :tcSpecialistFlag, t.tCSpecialistUserID = :tcSpecialistUserID, " + + "t.tCRequestDate = :tcDate WHERE t.benFlowID = :benFlowID AND " + + "t.beneficiaryRegID = :benRegID AND t.beneficiaryID = :benID") public int updateBenFlowStatusAfterDoctorActivity(@Param("benFlowID") Long benFlowID, - @Param("benRegID") Long benRegID, @Param("benID") Long benID, @Param("docFlag") Short docFlag, - @Param("pharmaFlag") Short pharmaFlag, @Param("oncologistFlag") Short oncologistFlag, - @Param("tcSpecialistFlag") Short tcSpecialistFlag, @Param("tcSpecialistUserID") int tcSpecialistUserID, - @Param("tcDate") Timestamp tcDate); - @Transactional - @Modifying - @Query("UPDATE BeneficiaryFlowStatus t set t.doctorFlag = :docFlag , t.pharmacist_flag = :pharmaFlag, " - + " t.oncologist_flag = :oncologistFlag, t.consultationDate = now(), t.processed = 'U', " - + " t.tCSpecialistUserID = :tcSpecialistUserID, t.tCRequestDate = :tcDate " - + " WHERE t.benFlowID = :benFlowID AND " + " t.beneficiaryRegID = :benRegID AND t.beneficiaryID = :benID ") - public int updateBenFlowStatusAfterDoctorActivityWDF(@Param("benFlowID") Long benFlowID, - @Param("benRegID") Long benRegID, @Param("benID") Long benID, @Param("docFlag") Short docFlag, - @Param("pharmaFlag") Short pharmaFlag, @Param("oncologistFlag") Short oncologistFlag, - @Param("tcSpecialistUserID") int tcSpecialistUserID, - @Param("tcDate") Timestamp tcDate); + @Param("benRegID") Long benRegID, @Param("benID") Long benID, + @Param("docFlag") Short docFlag, @Param("pharmaFlag") Short pharmaFlag, + @Param("oncologistFlag") Short oncologistFlag, + @Param("tcSpecialistFlag") Short tcSpecialistFlag, + @Param("tcSpecialistUserID") int tcSpecialistUserID, + @Param("tcDate") Timestamp tcDate, + @Param("signatureFlag") Boolean signatureFlag); @Transactional @Modifying - @Query("UPDATE BeneficiaryFlowStatus t set t.pharmacist_flag = :pharmaFlag, " - + " t.oncologist_flag = :oncologistFlag, t.processed = 'U', t.specialist_flag = :tcSpecialistFlag " - + " WHERE t.benFlowID = :benFlowID AND t.beneficiaryRegID = :benRegID AND t.beneficiaryID = :benID ") - public int updateBenFlowStatusAfterDoctorActivityTCSpecialist(@Param("benFlowID") Long benFlowID, - @Param("benRegID") Long benRegID, @Param("benID") Long benID, @Param("pharmaFlag") Short pharmaFlag, - @Param("oncologistFlag") Short oncologistFlag, @Param("tcSpecialistFlag") Short tcSpecialistFlag); + @Query("UPDATE BeneficiaryFlowStatus t set t.doctorFlag = :docFlag, " + + "t.pharmacist_flag = :pharmaFlag, t.doctorSignatureFlag = :signatureFlag, " + + "t.oncologist_flag = :oncologistFlag, t.consultationDate = now(), t.processed = 'U', " + + "t.tCSpecialistUserID = :tcSpecialistUserID, t.tCRequestDate = :tcDate " + + "WHERE t.benFlowID = :benFlowID AND t.beneficiaryRegID = :benRegID AND t.beneficiaryID = :benID") + public int updateBenFlowStatusAfterDoctorActivityWDF(@Param("benFlowID") Long benFlowID, + @Param("benRegID") Long benRegID, @Param("benID") Long benID, + @Param("docFlag") Short docFlag, @Param("pharmaFlag") Short pharmaFlag, + @Param("oncologistFlag") Short oncologistFlag, + @Param("tcSpecialistUserID") int tcSpecialistUserID, + @Param("tcDate") Timestamp tcDate, + @Param("signatureFlag") Boolean signatureFlag); + +@Transactional +@Modifying +@Query("UPDATE BeneficiaryFlowStatus t set t.pharmacist_flag = :pharmaFlag, " + + "t.doctorSignatureFlag = :signatureFlag, " + + "t.oncologist_flag = :oncologistFlag, t.processed = 'U', t.specialist_flag = :tcSpecialistFlag " + + "WHERE t.benFlowID = :benFlowID AND t.beneficiaryRegID = :benRegID AND t.beneficiaryID = :benID") +public int updateBenFlowStatusAfterDoctorActivityTCSpecialist(@Param("benFlowID") Long benFlowID, + @Param("benRegID") Long benRegID, @Param("benID") Long benID, + @Param("pharmaFlag") Short pharmaFlag, + @Param("oncologistFlag") Short oncologistFlag, + @Param("tcSpecialistFlag") Short tcSpecialistFlag, + @Param("signatureFlag") Boolean signatureFlag); @Transactional @Modifying diff --git a/src/main/java/com/iemr/mmu/repo/labModule/LabResultEntryRepo.java b/src/main/java/com/iemr/mmu/repo/labModule/LabResultEntryRepo.java index 33656333..cdf2ad4b 100644 --- a/src/main/java/com/iemr/mmu/repo/labModule/LabResultEntryRepo.java +++ b/src/main/java/com/iemr/mmu/repo/labModule/LabResultEntryRepo.java @@ -24,6 +24,7 @@ import java.math.BigInteger; import java.util.ArrayList; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -31,6 +32,8 @@ import com.iemr.mmu.data.labModule.LabResultEntry; +import jakarta.transaction.Transactional; + @Repository public interface LabResultEntryRepo extends CrudRepository { @Query("SELECT procedureID FROM LabResultEntry WHERE beneficiaryRegID = :benRegID AND " @@ -46,4 +49,9 @@ ArrayList findProcedureListByBeneficiaryRegIDAndBenVisitID(@Param("benR ArrayList getLast_3_visitForLabTestDone(@Param("benRegID") Long benRegID, @Param("visitCode") Long visitCode); + @Transactional + @Modifying + @Query(" UPDATE LabResultEntry set vanSerialNo = :ID WHERE ID = :ID") + int updateVanSerialNo(@Param("ID") BigInteger ID); + } diff --git a/src/main/java/com/iemr/mmu/repo/login/UserLoginRepo.java b/src/main/java/com/iemr/mmu/repo/login/UserLoginRepo.java index b4cc7fa0..6f6390ee 100644 --- a/src/main/java/com/iemr/mmu/repo/login/UserLoginRepo.java +++ b/src/main/java/com/iemr/mmu/repo/login/UserLoginRepo.java @@ -1,5 +1,7 @@ package com.iemr.mmu.repo.login; +import java.util.List; + import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -13,4 +15,7 @@ public interface UserLoginRepo extends CrudRepository { @Query(" SELECT u FROM Users u WHERE u.userID = :userID AND u.deleted = false ") public Users getUserByUserID(@Param("userID") Long userID); + @Query(nativeQuery = true,value = "select rolename from m_role where roleid in (select roleid from m_userservicerolemapping where userid=:userID)") + List getRoleNamebyUserId(@Param("userID") Long userID); + } diff --git a/src/main/java/com/iemr/mmu/repo/nurse/BenVisitDetailRepo.java b/src/main/java/com/iemr/mmu/repo/nurse/BenVisitDetailRepo.java index 8c659c8b..c4a03286 100644 --- a/src/main/java/com/iemr/mmu/repo/nurse/BenVisitDetailRepo.java +++ b/src/main/java/com/iemr/mmu/repo/nurse/BenVisitDetailRepo.java @@ -96,4 +96,9 @@ public int updateFileID(@Param("fileIDs") String fileIDs, @Param("regID") Long r @Query("SELECT MAX(bvd.createdDate) from BeneficiaryVisitDetail bvd WHERE bvd.beneficiaryRegID = :benRegID AND bvd.visitReason = :visitreason AND bvd.visitCategory = :visitcategory ") public String getMaxCreatedDate(@Param("benRegID") Long benRegID, @Param("visitreason") String visitreason,@Param("visitcategory") String visitcategory); + @Transactional + @Modifying + @Query(" UPDATE BeneficiaryVisitDetail set vanSerialNo = :benVisitID WHERE benVisitID = :benVisitID") + int updateVanSerialNo(@Param("benVisitID") Long benVisitID); + } diff --git a/src/main/java/com/iemr/mmu/repo/nurse/ncdcare/NCDCareDiagnosisRepo.java b/src/main/java/com/iemr/mmu/repo/nurse/ncdcare/NCDCareDiagnosisRepo.java index 6b78c721..e8c2c52a 100644 --- a/src/main/java/com/iemr/mmu/repo/nurse/ncdcare/NCDCareDiagnosisRepo.java +++ b/src/main/java/com/iemr/mmu/repo/nurse/ncdcare/NCDCareDiagnosisRepo.java @@ -37,7 +37,7 @@ public interface NCDCareDiagnosisRepo extends CrudRepository { @Query(" SELECT beneficiaryRegID, benVisitID, providerServiceMapID, prescriptionID, " - + " ncdScreeningCondition, ncdComplication, ncdCareType, visitCode, ncdScreeningConditionOther " + + " ncdScreeningCondition, ncdComplication, ncdCareType, visitCode, ncdScreeningConditionOther, createdBy, createdDate " + " from NCDCareDiagnosis ba " + " WHERE ba.beneficiaryRegID = :benRegID" + " AND ba.visitCode = :visitCode AND ba.deleted = false " + " ORDER BY createdDate desc") public ArrayList getNCDCareDiagnosisDetails(@Param("benRegID") Long benRegID, diff --git a/src/main/java/com/iemr/mmu/repo/quickConsultation/BenChiefComplaintRepo.java b/src/main/java/com/iemr/mmu/repo/quickConsultation/BenChiefComplaintRepo.java index 9adc296b..15a27c8e 100644 --- a/src/main/java/com/iemr/mmu/repo/quickConsultation/BenChiefComplaintRepo.java +++ b/src/main/java/com/iemr/mmu/repo/quickConsultation/BenChiefComplaintRepo.java @@ -48,4 +48,8 @@ public ArrayList getBenChiefComplaints(@Param("benRegID") Long benRegI @Query(" Delete from BenChiefComplaint WHERE beneficiaryRegID = :benRegID AND visitCode = :visitCode") public int deleteExistingBenChiefComplaints(@Param("benRegID") Long benRegID, @Param("visitCode") Long visitCode); + @Transactional + @Modifying + @Query(" UPDATE BenChiefComplaint set vanSerialNo = :benChiefComplaintID WHERE benChiefComplaintID = :benChiefComplaintID") + int updateVanSerialNo(@Param("benChiefComplaintID") Long benChiefComplaintID); } diff --git a/src/main/java/com/iemr/mmu/repo/quickConsultation/LabTestOrderDetailRepo.java b/src/main/java/com/iemr/mmu/repo/quickConsultation/LabTestOrderDetailRepo.java index 773021c4..4a7eb9c9 100644 --- a/src/main/java/com/iemr/mmu/repo/quickConsultation/LabTestOrderDetailRepo.java +++ b/src/main/java/com/iemr/mmu/repo/quickConsultation/LabTestOrderDetailRepo.java @@ -47,4 +47,8 @@ public ArrayList getLabTestOrderDetails(@Param("benRegID") Long benReg @Query(" Delete from LabTestOrderDetail WHERE beneficiaryRegID = :benRegID AND benVisitID = :benVisitID ") public int deleteExistingLabTestOrderDetail(@Param("benRegID") Long benRegID, @Param("benVisitID") Long benVisitID); + @Transactional + @Modifying + @Query(" UPDATE LabTestOrderDetail set vanSerialNo = :labTestOrderID WHERE labTestOrderID = :labTestOrderID") + int updateVanSerialNo(@Param("labTestOrderID") Long labTestOrderID); } diff --git a/src/main/java/com/iemr/mmu/repo/quickConsultation/PrescriptionDetailRepo.java b/src/main/java/com/iemr/mmu/repo/quickConsultation/PrescriptionDetailRepo.java index 6bc2350e..5010ea91 100644 --- a/src/main/java/com/iemr/mmu/repo/quickConsultation/PrescriptionDetailRepo.java +++ b/src/main/java/com/iemr/mmu/repo/quickConsultation/PrescriptionDetailRepo.java @@ -83,4 +83,10 @@ public int updatePrescription(@Param("diagnosisProvided") String diagnosisProvid @Param("diagnosisProvided_SCTCode") String diagnosisProvided_SCTCode, @Param("diagnosisProvided_SCTTerm") String diagnosisProvided_SCTTerm); + @Transactional + @Modifying + @Query(" UPDATE PrescriptionDetail set vanSerialNo = :prescriptionID WHERE prescriptionID = :prescriptionID") + int updateVanSerialNo(@Param("prescriptionID") Long prescriptionID); + + } diff --git a/src/main/java/com/iemr/mmu/service/anc/ANCNurseServiceImpl.java b/src/main/java/com/iemr/mmu/service/anc/ANCNurseServiceImpl.java index 69db925c..1abc07bd 100644 --- a/src/main/java/com/iemr/mmu/service/anc/ANCNurseServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/anc/ANCNurseServiceImpl.java @@ -18,7 +18,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see https://www.gnu.org/licenses/. -*/ + */ package com.iemr.mmu.service.anc; import java.sql.Date; @@ -49,347 +49,366 @@ @Service public class ANCNurseServiceImpl implements ANCNurseService { - private ANCCareRepo ancCareRepo; - private ANCWomenVaccineRepo ancWomenVaccineRepo; - private BenAdherenceRepo benAdherenceRepo; - - private SysObstetricExaminationRepo sysObstetricExaminationRepo; - - private LabTestOrderDetailRepo labTestOrderDetailRepo; - - @Autowired - public void setLabTestOrderDetailRepo(LabTestOrderDetailRepo labTestOrderDetailRepo) { - this.labTestOrderDetailRepo = labTestOrderDetailRepo; - } - - @Autowired - public void setBenAdherenceRepo(BenAdherenceRepo benAdherenceRepo) { - this.benAdherenceRepo = benAdherenceRepo; - } - - @Autowired - public void setAncCareRepo(ANCCareRepo ancCareRepo) { - this.ancCareRepo = ancCareRepo; - } - - @Autowired - public void setAncWomenVaccineRepo(ANCWomenVaccineRepo ancWomenVaccineRepo) { - this.ancWomenVaccineRepo = ancWomenVaccineRepo; - } - - @Autowired - public void setSysObstetricExaminationRepo(SysObstetricExaminationRepo sysObstetricExaminationRepo) { - this.sysObstetricExaminationRepo = sysObstetricExaminationRepo; - } - - @Override - public Long saveBeneficiaryANCDetails(ANCCareDetails ancCareDetails) { - ANCCareDetails ancCareDetail = ancCareRepo.save(ancCareDetails); - Long ancCareID = null; - if (null != ancCareDetail && ancCareDetail.getID() > 0) { - ancCareID = ancCareDetail.getID(); + private ANCCareRepo ancCareRepo; + private ANCWomenVaccineRepo ancWomenVaccineRepo; + private BenAdherenceRepo benAdherenceRepo; + + private SysObstetricExaminationRepo sysObstetricExaminationRepo; + + private LabTestOrderDetailRepo labTestOrderDetailRepo; + + @Autowired + public void setLabTestOrderDetailRepo(LabTestOrderDetailRepo labTestOrderDetailRepo) { + this.labTestOrderDetailRepo = labTestOrderDetailRepo; + } + + @Autowired + public void setBenAdherenceRepo(BenAdherenceRepo benAdherenceRepo) { + this.benAdherenceRepo = benAdherenceRepo; + } + + @Autowired + public void setAncCareRepo(ANCCareRepo ancCareRepo) { + this.ancCareRepo = ancCareRepo; + } + + @Autowired + public void setAncWomenVaccineRepo(ANCWomenVaccineRepo ancWomenVaccineRepo) { + this.ancWomenVaccineRepo = ancWomenVaccineRepo; + } + + @Autowired + public void setSysObstetricExaminationRepo(SysObstetricExaminationRepo sysObstetricExaminationRepo) { + this.sysObstetricExaminationRepo = sysObstetricExaminationRepo; + } + + @Override + public Long saveBeneficiaryANCDetails(ANCCareDetails ancCareDetails) { + ANCCareDetails ancCareDetail = ancCareRepo.save(ancCareDetails); + Long ancCareID = null; + if (null != ancCareDetail && ancCareDetail.getID() > 0) { + ancCareID = ancCareDetail.getID(); + } + return ancCareID; + } + + @Override + public Long saveANCWomenVaccineDetails(List ancWomenVaccineDetails) { + Iterable listOfANCWomenVaccineDetail = ancWomenVaccineRepo + .saveAll(ancWomenVaccineDetails); + + Long ancWomenVaccineID = null; + if (!((List) listOfANCWomenVaccineDetail).isEmpty()) { + for (ANCWomenVaccineDetail ancWomenVaccine : listOfANCWomenVaccineDetail) { + ancWomenVaccineID = ancWomenVaccine.getID(); + } + } + return ancWomenVaccineID; + } + + public Integer saveBenInvestigationFromDoc(WrapperBenInvestigationANC wrapperBenInvestigationANC) { + int r = 0; + ArrayList LabTestOrderDetailList = new ArrayList<>(); + ArrayList investigationList = wrapperBenInvestigationANC.getLaboratoryList(); + if (investigationList != null && investigationList.size() > 0) { + + for (LabTestOrderDetail testData : investigationList) { + + testData.setBeneficiaryRegID(wrapperBenInvestigationANC.getBeneficiaryRegID()); + testData.setBenVisitID(wrapperBenInvestigationANC.getBenVisitID()); + testData.setProviderServiceMapID(wrapperBenInvestigationANC.getProviderServiceMapID()); + testData.setCreatedBy(wrapperBenInvestigationANC.getCreatedBy()); + testData.setPrescriptionID(wrapperBenInvestigationANC.getPrescriptionID()); + + LabTestOrderDetailList.add(testData); + } + ArrayList LabTestOrderDetailListRS = (ArrayList) labTestOrderDetailRepo + .saveAll(LabTestOrderDetailList); + + if (!LabTestOrderDetailListRS.isEmpty()) { + ArrayList labTestOrderDetailListRS + = (ArrayList) labTestOrderDetailRepo.saveAll(LabTestOrderDetailList); + + if (LabTestOrderDetailList.size() == labTestOrderDetailListRS.size()) { + for (LabTestOrderDetail detail : labTestOrderDetailListRS) { + if (detail.getLabTestOrderID() != null) { + labTestOrderDetailRepo.updateVanSerialNo(detail.getLabTestOrderID()); + } + } + r = 1; + } + + } else { + r = 1; + } } - return ancCareID; - } - - @Override - public Long saveANCWomenVaccineDetails(List ancWomenVaccineDetails) { - Iterable listOfANCWomenVaccineDetail = ancWomenVaccineRepo - .saveAll(ancWomenVaccineDetails); - - Long ancWomenVaccineID = null; - if (!((List) listOfANCWomenVaccineDetail).isEmpty()) { - for (ANCWomenVaccineDetail ancWomenVaccine : listOfANCWomenVaccineDetail) { - ancWomenVaccineID = ancWomenVaccine.getID(); - } - } - return ancWomenVaccineID; - } - - public Integer saveBenInvestigationFromDoc(WrapperBenInvestigationANC wrapperBenInvestigationANC) { - int r = 0; - ArrayList LabTestOrderDetailList = new ArrayList<>(); - ArrayList investigationList = wrapperBenInvestigationANC.getLaboratoryList(); - if (investigationList != null && investigationList.size() > 0) { - - for (LabTestOrderDetail testData : investigationList) { - - testData.setBeneficiaryRegID(wrapperBenInvestigationANC.getBeneficiaryRegID()); - testData.setBenVisitID(wrapperBenInvestigationANC.getBenVisitID()); - testData.setProviderServiceMapID(wrapperBenInvestigationANC.getProviderServiceMapID()); - testData.setCreatedBy(wrapperBenInvestigationANC.getCreatedBy()); - testData.setPrescriptionID(wrapperBenInvestigationANC.getPrescriptionID()); - - LabTestOrderDetailList.add(testData); - } - ArrayList LabTestOrderDetailListRS = (ArrayList) labTestOrderDetailRepo - .saveAll(LabTestOrderDetailList); - - if (!LabTestOrderDetailListRS.isEmpty()) { - r = 1; - } - } else { - r = 1; - } - return r; - } - - @Override - public Long saveBenAncCareDetails(ANCCareDetails ancCareDetailsOBJ) throws ParseException { - Long ancCareSuccessFlag = null; - if (ancCareDetailsOBJ.getLmpDate() != null && !ancCareDetailsOBJ.getLmpDate().isEmpty() - && ancCareDetailsOBJ.getLmpDate().length() >= 10) { - String lmpDate = ancCareDetailsOBJ.getLmpDate().split("T")[0]; - ancCareDetailsOBJ - .setLastMenstrualPeriod_LMP(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(lmpDate).getTime())); - } - if (ancCareDetailsOBJ.getExpDelDt() != null && !ancCareDetailsOBJ.getExpDelDt().isEmpty() - && ancCareDetailsOBJ.getExpDelDt().length() >= 10) { - String edDate = ancCareDetailsOBJ.getExpDelDt().split("T")[0]; - ancCareDetailsOBJ - .setExpectedDateofDelivery(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(edDate).getTime())); - } - ANCCareDetails ancCareDetailsRS = ancCareRepo.save(ancCareDetailsOBJ); - if (ancCareDetailsRS != null) { - ancCareSuccessFlag = ancCareDetailsRS.getID(); - } - return ancCareSuccessFlag; - } - - @Override - public Long saveAncImmunizationDetails(WrapperAncImmunization wrapperAncImmunizationOBJ) throws ParseException { - Long successFlag = null; - List ancWomenVaccineDetailList = getANCWomenVaccineDetail(wrapperAncImmunizationOBJ); - List ancWomenVaccineDetailRSList = (List) ancWomenVaccineRepo - .saveAll(ancWomenVaccineDetailList); - if (!ancWomenVaccineDetailRSList.isEmpty()) { - successFlag = ancWomenVaccineDetailRSList.get(0).getID(); - } - return successFlag; - } - - private List getANCWomenVaccineDetail(WrapperAncImmunization wrapperAncImmunizationOBJ) - throws ParseException { - List ancWomenVaccineDetailList = new ArrayList(); - ANCWomenVaccineDetail ancWomenVaccineDetail; - if (wrapperAncImmunizationOBJ != null) { - - // TT-1 details - ancWomenVaccineDetail = new ANCWomenVaccineDetail(); - ancWomenVaccineDetail.setBeneficiaryRegID(wrapperAncImmunizationOBJ.getBeneficiaryRegID()); - ancWomenVaccineDetail.setBenVisitID(wrapperAncImmunizationOBJ.getBenVisitID()); - ancWomenVaccineDetail.setVisitCode(wrapperAncImmunizationOBJ.getVisitCode()); - ancWomenVaccineDetail.setProviderServiceMapID(wrapperAncImmunizationOBJ.getProviderServiceMapID()); - ancWomenVaccineDetail.setVanID(wrapperAncImmunizationOBJ.getVanID()); - ancWomenVaccineDetail.setParkingPlaceID(wrapperAncImmunizationOBJ.getParkingPlaceID()); - ancWomenVaccineDetail.setCreatedBy(wrapperAncImmunizationOBJ.getCreatedBy()); - ancWomenVaccineDetail.setID(wrapperAncImmunizationOBJ.gettT1ID()); - ancWomenVaccineDetail.setVaccineName("TT-1"); - ancWomenVaccineDetail.setStatus(wrapperAncImmunizationOBJ.gettT_1Status()); - if (wrapperAncImmunizationOBJ.getDateReceivedForTT_1() != null - && wrapperAncImmunizationOBJ.getDateReceivedForTT_1().length() >= 10) { - String TT_1 = wrapperAncImmunizationOBJ.getDateReceivedForTT_1().split("T")[0]; - ancWomenVaccineDetail - .setReceivedDate(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(TT_1).getTime())); - } - ancWomenVaccineDetail.setReceivedFacilityName(wrapperAncImmunizationOBJ.getFacilityNameOfTT_1()); - ancWomenVaccineDetail.setModifiedBy(wrapperAncImmunizationOBJ.getModifiedBy()); - ancWomenVaccineDetailList.add(ancWomenVaccineDetail); - - // TT-2 details - ancWomenVaccineDetail = new ANCWomenVaccineDetail(); - ancWomenVaccineDetail.setBeneficiaryRegID(wrapperAncImmunizationOBJ.getBeneficiaryRegID()); - ancWomenVaccineDetail.setBenVisitID(wrapperAncImmunizationOBJ.getBenVisitID()); - ancWomenVaccineDetail.setProviderServiceMapID(wrapperAncImmunizationOBJ.getProviderServiceMapID()); - ancWomenVaccineDetail.setVanID(wrapperAncImmunizationOBJ.getVanID()); - ancWomenVaccineDetail.setParkingPlaceID(wrapperAncImmunizationOBJ.getParkingPlaceID()); - ancWomenVaccineDetail.setVisitCode(wrapperAncImmunizationOBJ.getVisitCode()); - ancWomenVaccineDetail.setCreatedBy(wrapperAncImmunizationOBJ.getCreatedBy()); - ancWomenVaccineDetail.setID(wrapperAncImmunizationOBJ.gettT2ID()); - ancWomenVaccineDetail.setVaccineName("TT-2"); - ancWomenVaccineDetail.setStatus(wrapperAncImmunizationOBJ.gettT_2Status()); - if (wrapperAncImmunizationOBJ.getDateReceivedForTT_2() != null - && wrapperAncImmunizationOBJ.getDateReceivedForTT_2().length() >= 10) { - String TT_2 = wrapperAncImmunizationOBJ.getDateReceivedForTT_2().split("T")[0]; - ancWomenVaccineDetail - .setReceivedDate(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(TT_2).getTime())); - } - ancWomenVaccineDetail.setReceivedFacilityName(wrapperAncImmunizationOBJ.getFacilityNameOfTT_2()); - ancWomenVaccineDetail.setModifiedBy(wrapperAncImmunizationOBJ.getModifiedBy()); - ancWomenVaccineDetailList.add(ancWomenVaccineDetail); - - // TT-3 (Booster) details - ancWomenVaccineDetail = new ANCWomenVaccineDetail(); - ancWomenVaccineDetail.setBeneficiaryRegID(wrapperAncImmunizationOBJ.getBeneficiaryRegID()); - ancWomenVaccineDetail.setBenVisitID(wrapperAncImmunizationOBJ.getBenVisitID()); - ancWomenVaccineDetail.setProviderServiceMapID(wrapperAncImmunizationOBJ.getProviderServiceMapID()); - ancWomenVaccineDetail.setVanID(wrapperAncImmunizationOBJ.getVanID()); - ancWomenVaccineDetail.setParkingPlaceID(wrapperAncImmunizationOBJ.getParkingPlaceID()); - ancWomenVaccineDetail.setVisitCode(wrapperAncImmunizationOBJ.getVisitCode()); - ancWomenVaccineDetail.setCreatedBy(wrapperAncImmunizationOBJ.getCreatedBy()); - ancWomenVaccineDetail.setID(wrapperAncImmunizationOBJ.gettT3ID()); - ancWomenVaccineDetail.setVaccineName("TT-Booster"); - ancWomenVaccineDetail.setStatus(wrapperAncImmunizationOBJ.gettT_3Status()); - if (wrapperAncImmunizationOBJ.getDateReceivedForTT_3() != null - && wrapperAncImmunizationOBJ.getDateReceivedForTT_3().length() >= 10) { - String TT_3 = wrapperAncImmunizationOBJ.getDateReceivedForTT_3().split("T")[0]; - ancWomenVaccineDetail - .setReceivedDate(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(TT_3).getTime())); - } - ancWomenVaccineDetail.setReceivedFacilityName(wrapperAncImmunizationOBJ.getFacilityNameOfTT_3()); - ancWomenVaccineDetail.setModifiedBy(wrapperAncImmunizationOBJ.getModifiedBy()); - ancWomenVaccineDetailList.add(ancWomenVaccineDetail); - - } - return ancWomenVaccineDetailList; - } - - @Override - public Long saveSysObstetricExamination(SysObstetricExamination obstetricExamination) { - // TODO Auto-generated method stub - Long r = null; - SysObstetricExamination obstetricExaminationRS = sysObstetricExaminationRepo.save(obstetricExamination); - if (obstetricExaminationRS != null) - r = obstetricExaminationRS.getID(); - return r; - } - - public SysObstetricExamination getSysObstetricExamination(Long benRegID, Long visitCode) { - SysObstetricExamination sysObstetricExaminationData = sysObstetricExaminationRepo - .getSysObstetricExaminationData(benRegID, visitCode); - - return sysObstetricExaminationData; - } - - @Override - public String getANCCareDetails(Long beneficiaryRegID, Long visitCode) { - ArrayList resList = ancCareRepo.getANCCareDetails(beneficiaryRegID, visitCode); - ANCCareDetails ancCareDetails = ANCCareDetails.getANCCareDetails(resList); - return new Gson().toJson(ancCareDetails); - } - - @Override - public String getANCWomenVaccineDetails(Long beneficiaryRegID, Long visitCode) { - ArrayList resList = ancWomenVaccineRepo.getANCWomenVaccineDetails(beneficiaryRegID, visitCode); - WrapperAncImmunization ancWomenVaccineDetails = ANCWomenVaccineDetail.getANCWomenVaccineDetails(resList); - return new Gson().toJson(ancWomenVaccineDetails); - } - - @Override - public int updateBenAdherenceDetails(BenAdherence benAdherence) { - int r = 0; - String processed = benAdherenceRepo.getBenAdherenceDetailsStatus(benAdherence.getBeneficiaryRegID(), - benAdherence.getBenVisitID(), benAdherence.getID()); - if (null != processed && !"N".equals(processed)) { - processed = "U"; - } else { - processed = "N"; - } - r = benAdherenceRepo.updateBenAdherence(benAdherence.getToDrugs(), benAdherence.getDrugReason(), - benAdherence.getToReferral(), benAdherence.getReferralReason(), benAdherence.getProgress(), - benAdherence.getModifiedBy(), processed, benAdherence.getBeneficiaryRegID(), - benAdherence.getBenVisitID(), benAdherence.getID()); - /* + return r; + } + + + @Override + public Long saveBenAncCareDetails + (ANCCareDetails ancCareDetailsOBJ) throws ParseException { + Long ancCareSuccessFlag = null; + if (ancCareDetailsOBJ.getLmpDate() != null && !ancCareDetailsOBJ.getLmpDate().isEmpty() + && ancCareDetailsOBJ.getLmpDate().length() >= 10) { + String lmpDate = ancCareDetailsOBJ.getLmpDate().split("T")[0]; + ancCareDetailsOBJ + .setLastMenstrualPeriod_LMP(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(lmpDate).getTime())); + } + if (ancCareDetailsOBJ.getExpDelDt() != null && !ancCareDetailsOBJ.getExpDelDt().isEmpty() + && ancCareDetailsOBJ.getExpDelDt().length() >= 10) { + String edDate = ancCareDetailsOBJ.getExpDelDt().split("T")[0]; + ancCareDetailsOBJ + .setExpectedDateofDelivery(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(edDate).getTime())); + } + ANCCareDetails ancCareDetailsRS = ancCareRepo.save(ancCareDetailsOBJ); + if (ancCareDetailsRS != null) { + ancCareDetailsRS.setVanSerialNo((ancCareDetailsRS.getID())); + ancCareSuccessFlag = ancCareDetailsRS.getID(); + } + return ancCareSuccessFlag; + } + + @Override + public Long saveAncImmunizationDetails + (WrapperAncImmunization wrapperAncImmunizationOBJ) throws ParseException { + Long successFlag = null; + List ancWomenVaccineDetailList = getANCWomenVaccineDetail(wrapperAncImmunizationOBJ); + List ancWomenVaccineDetailRSList = (List) ancWomenVaccineRepo + .saveAll(ancWomenVaccineDetailList); + if (!ancWomenVaccineDetailRSList.isEmpty()) { + ancWomenVaccineDetailRSList.get(0).setVanSerialNo(ancWomenVaccineDetailRSList.get(0).getID()); + successFlag = ancWomenVaccineDetailRSList.get(0).getID(); + } + return successFlag; + } + + + + private List getANCWomenVaccineDetail(WrapperAncImmunization wrapperAncImmunizationOBJ) + throws ParseException { + List ancWomenVaccineDetailList = new ArrayList(); + ANCWomenVaccineDetail ancWomenVaccineDetail; + if (wrapperAncImmunizationOBJ != null) { + + // TT-1 details + ancWomenVaccineDetail = new ANCWomenVaccineDetail(); + ancWomenVaccineDetail.setBeneficiaryRegID(wrapperAncImmunizationOBJ.getBeneficiaryRegID()); + ancWomenVaccineDetail.setBenVisitID(wrapperAncImmunizationOBJ.getBenVisitID()); + ancWomenVaccineDetail.setVisitCode(wrapperAncImmunizationOBJ.getVisitCode()); + ancWomenVaccineDetail.setProviderServiceMapID(wrapperAncImmunizationOBJ.getProviderServiceMapID()); + ancWomenVaccineDetail.setVanID(wrapperAncImmunizationOBJ.getVanID()); + ancWomenVaccineDetail.setParkingPlaceID(wrapperAncImmunizationOBJ.getParkingPlaceID()); + ancWomenVaccineDetail.setCreatedBy(wrapperAncImmunizationOBJ.getCreatedBy()); + ancWomenVaccineDetail.setID(wrapperAncImmunizationOBJ.gettT1ID()); + ancWomenVaccineDetail.setVaccineName("TT-1"); + ancWomenVaccineDetail.setStatus(wrapperAncImmunizationOBJ.gettT_1Status()); + if (wrapperAncImmunizationOBJ.getDateReceivedForTT_1() != null + && wrapperAncImmunizationOBJ.getDateReceivedForTT_1().length() >= 10) { + String TT_1 = wrapperAncImmunizationOBJ.getDateReceivedForTT_1().split("T")[0]; + ancWomenVaccineDetail + .setReceivedDate(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(TT_1).getTime())); + } + ancWomenVaccineDetail.setReceivedFacilityName(wrapperAncImmunizationOBJ.getFacilityNameOfTT_1()); + ancWomenVaccineDetail.setModifiedBy(wrapperAncImmunizationOBJ.getModifiedBy()); + ancWomenVaccineDetailList.add(ancWomenVaccineDetail); + + // TT-2 details + ancWomenVaccineDetail = new ANCWomenVaccineDetail(); + ancWomenVaccineDetail.setBeneficiaryRegID(wrapperAncImmunizationOBJ.getBeneficiaryRegID()); + ancWomenVaccineDetail.setBenVisitID(wrapperAncImmunizationOBJ.getBenVisitID()); + ancWomenVaccineDetail.setProviderServiceMapID(wrapperAncImmunizationOBJ.getProviderServiceMapID()); + ancWomenVaccineDetail.setVanID(wrapperAncImmunizationOBJ.getVanID()); + ancWomenVaccineDetail.setParkingPlaceID(wrapperAncImmunizationOBJ.getParkingPlaceID()); + ancWomenVaccineDetail.setVisitCode(wrapperAncImmunizationOBJ.getVisitCode()); + ancWomenVaccineDetail.setCreatedBy(wrapperAncImmunizationOBJ.getCreatedBy()); + ancWomenVaccineDetail.setID(wrapperAncImmunizationOBJ.gettT2ID()); + ancWomenVaccineDetail.setVaccineName("TT-2"); + ancWomenVaccineDetail.setStatus(wrapperAncImmunizationOBJ.gettT_2Status()); + if (wrapperAncImmunizationOBJ.getDateReceivedForTT_2() != null + && wrapperAncImmunizationOBJ.getDateReceivedForTT_2().length() >= 10) { + String TT_2 = wrapperAncImmunizationOBJ.getDateReceivedForTT_2().split("T")[0]; + ancWomenVaccineDetail + .setReceivedDate(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(TT_2).getTime())); + } + ancWomenVaccineDetail.setReceivedFacilityName(wrapperAncImmunizationOBJ.getFacilityNameOfTT_2()); + ancWomenVaccineDetail.setModifiedBy(wrapperAncImmunizationOBJ.getModifiedBy()); + ancWomenVaccineDetailList.add(ancWomenVaccineDetail); + + // TT-3 (Booster) details + ancWomenVaccineDetail = new ANCWomenVaccineDetail(); + ancWomenVaccineDetail.setBeneficiaryRegID(wrapperAncImmunizationOBJ.getBeneficiaryRegID()); + ancWomenVaccineDetail.setBenVisitID(wrapperAncImmunizationOBJ.getBenVisitID()); + ancWomenVaccineDetail.setProviderServiceMapID(wrapperAncImmunizationOBJ.getProviderServiceMapID()); + ancWomenVaccineDetail.setVanID(wrapperAncImmunizationOBJ.getVanID()); + ancWomenVaccineDetail.setParkingPlaceID(wrapperAncImmunizationOBJ.getParkingPlaceID()); + ancWomenVaccineDetail.setVisitCode(wrapperAncImmunizationOBJ.getVisitCode()); + ancWomenVaccineDetail.setCreatedBy(wrapperAncImmunizationOBJ.getCreatedBy()); + ancWomenVaccineDetail.setID(wrapperAncImmunizationOBJ.gettT3ID()); + ancWomenVaccineDetail.setVaccineName("TT-Booster"); + ancWomenVaccineDetail.setStatus(wrapperAncImmunizationOBJ.gettT_3Status()); + if (wrapperAncImmunizationOBJ.getDateReceivedForTT_3() != null + && wrapperAncImmunizationOBJ.getDateReceivedForTT_3().length() >= 10) { + String TT_3 = wrapperAncImmunizationOBJ.getDateReceivedForTT_3().split("T")[0]; + ancWomenVaccineDetail + .setReceivedDate(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(TT_3).getTime())); + } + ancWomenVaccineDetail.setReceivedFacilityName(wrapperAncImmunizationOBJ.getFacilityNameOfTT_3()); + ancWomenVaccineDetail.setModifiedBy(wrapperAncImmunizationOBJ.getModifiedBy()); + ancWomenVaccineDetailList.add(ancWomenVaccineDetail); + + } + return ancWomenVaccineDetailList; + } + + @Override + public Long saveSysObstetricExamination(SysObstetricExamination obstetricExamination) { + // TODO Auto-generated method stub + Long r = null; + SysObstetricExamination obstetricExaminationRS = sysObstetricExaminationRepo.save(obstetricExamination); + if (obstetricExaminationRS != null) { + r = obstetricExaminationRS.getID(); + } + return r; + } + + public SysObstetricExamination getSysObstetricExamination(Long benRegID, Long visitCode) { + SysObstetricExamination sysObstetricExaminationData = sysObstetricExaminationRepo + .getSysObstetricExaminationData(benRegID, visitCode); + + return sysObstetricExaminationData; + } + + @Override + public String getANCCareDetails(Long beneficiaryRegID, Long visitCode) { + ArrayList resList = ancCareRepo.getANCCareDetails(beneficiaryRegID, visitCode); + ANCCareDetails ancCareDetails = ANCCareDetails.getANCCareDetails(resList); + return new Gson().toJson(ancCareDetails); + } + + @Override + public String getANCWomenVaccineDetails(Long beneficiaryRegID, Long visitCode) { + ArrayList resList = ancWomenVaccineRepo.getANCWomenVaccineDetails(beneficiaryRegID, visitCode); + WrapperAncImmunization ancWomenVaccineDetails = ANCWomenVaccineDetail.getANCWomenVaccineDetails(resList); + return new Gson().toJson(ancWomenVaccineDetails); + } + + @Override + public int updateBenAdherenceDetails(BenAdherence benAdherence) { + int r = 0; + String processed = benAdherenceRepo.getBenAdherenceDetailsStatus(benAdherence.getBeneficiaryRegID(), + benAdherence.getBenVisitID(), benAdherence.getID()); + if (null != processed && !"N".equals(processed)) { + processed = "U"; + } else { + processed = "N"; + } + r = benAdherenceRepo.updateBenAdherence(benAdherence.getToDrugs(), benAdherence.getDrugReason(), + benAdherence.getToReferral(), benAdherence.getReferralReason(), benAdherence.getProgress(), + benAdherence.getModifiedBy(), processed, benAdherence.getBeneficiaryRegID(), + benAdherence.getBenVisitID(), benAdherence.getID()); + /* * BenAdherence adherence= benAdherenceRepo.save(benAdherence); if(null * !=adherence){ r=1; } - */ - return r; - } - - @Override - public int updateBenAncCareDetails(ANCCareDetails ancCareDetailsOBJ) throws ParseException { - int r = 0; - - String processed = ancCareRepo.getBenANCCareDetailsStatus(ancCareDetailsOBJ.getBeneficiaryRegID(), - ancCareDetailsOBJ.getVisitCode()); - if (null != processed && !"N".equals(processed)) { - processed = "U"; - } else { - processed = "N"; - } - - if (ancCareDetailsOBJ.getLmpDate() != null && !ancCareDetailsOBJ.getLmpDate().isEmpty() - && ancCareDetailsOBJ.getLmpDate().length() >= 10) { - String lmpDate = ancCareDetailsOBJ.getLmpDate().split("T")[0]; - ancCareDetailsOBJ - .setLastMenstrualPeriod_LMP(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(lmpDate).getTime())); - } - if (ancCareDetailsOBJ.getExpDelDt() != null && !ancCareDetailsOBJ.getExpDelDt().isEmpty() - && ancCareDetailsOBJ.getExpDelDt().length() >= 10) { - String edDate = ancCareDetailsOBJ.getExpDelDt().split("T")[0]; - ancCareDetailsOBJ - .setExpectedDateofDelivery(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(edDate).getTime())); - } - - r = ancCareRepo.updateANCCareDetails(ancCareDetailsOBJ.getComolaintType(), ancCareDetailsOBJ.getDuration(), - ancCareDetailsOBJ.getDescription(), ancCareDetailsOBJ.getLastMenstrualPeriod_LMP(), - ancCareDetailsOBJ.getGestationalAgeOrPeriodofAmenorrhea_POA(), ancCareDetailsOBJ.getTrimesterNumber(), - ancCareDetailsOBJ.getExpectedDateofDelivery(), ancCareDetailsOBJ.getPrimiGravida(), - ancCareDetailsOBJ.getGravida_G(), ancCareDetailsOBJ.getTermDeliveries_T(), - ancCareDetailsOBJ.getPretermDeliveries_P(), ancCareDetailsOBJ.getAbortions_A(), - ancCareDetailsOBJ.getLivebirths_L(), ancCareDetailsOBJ.getBloodGroup(), - ancCareDetailsOBJ.getModifiedBy(), processed, ancCareDetailsOBJ.getBeneficiaryRegID(), - ancCareDetailsOBJ.getVisitCode(), ancCareDetailsOBJ.getStillBirth()); - return r; - } - - @Override - public int updateBenAncImmunizationDetails(WrapperAncImmunization wrapperAncImmunization) throws ParseException { - int r = 0; - - List ancWomenVaccineDetailList = getANCWomenVaccineDetail(wrapperAncImmunization); - - if (null != ancWomenVaccineDetailList) { - - String processed = "N"; - ANCWomenVaccineDetail ancWomenVaccine = ancWomenVaccineDetailList.get(0); - ArrayList ancWomenVaccineStatuses = ancWomenVaccineRepo - .getBenANCWomenVaccineStatus(ancWomenVaccine.getBeneficiaryRegID(), ancWomenVaccine.getVisitCode()); - Map womenVaccineStatuses = new HashMap(); - - for (Object[] obj : ancWomenVaccineStatuses) { - womenVaccineStatuses.put((String) obj[0], (String) obj[1]); - } - - for (ANCWomenVaccineDetail ancWomenVaccineDetail : ancWomenVaccineDetailList) { - processed = womenVaccineStatuses.get(ancWomenVaccineDetail.getVaccineName()); - if (null != processed && !processed.equals("N")) { - processed = "U"; - } else { - processed = "N"; - } - - r = ancWomenVaccineRepo.updateANCImmunizationDetails(ancWomenVaccineDetail.getStatus(), - ancWomenVaccineDetail.getReceivedDate(), ancWomenVaccineDetail.getReceivedFacilityName(), - ancWomenVaccineDetail.getModifiedBy(), processed, ancWomenVaccineDetail.getBeneficiaryRegID(), - ancWomenVaccineDetail.getVisitCode(), ancWomenVaccineDetail.getVaccineName()); - - } - } - return r; - } - - @Override - public int updateSysObstetricExamination(SysObstetricExamination obstetricExamination) { - int r = 0; - if (null != obstetricExamination) { - String processed = sysObstetricExaminationRepo.getBenObstetricExaminationStatus( - obstetricExamination.getBeneficiaryRegID(), obstetricExamination.getVisitCode()); - if (null != processed && !"N".equals(processed)) { - processed = "U"; - } else { - processed = "N"; - } - r = sysObstetricExaminationRepo.updateSysObstetricExamination(obstetricExamination.getFundalHeight(), - obstetricExamination.getfHAndPOA_Status(), obstetricExamination.getfHAndPOA_Interpretation(), - obstetricExamination.getFetalMovements(), obstetricExamination.getFetalHeartSounds(), - obstetricExamination.getFetalHeartRate_BeatsPerMinute(), - obstetricExamination.getFetalPositionOrLie(), obstetricExamination.getFetalPresentation(), - obstetricExamination.getAbdominalScars(), obstetricExamination.getModifiedBy(), - obstetricExamination.getSfh(), processed, obstetricExamination.getBeneficiaryRegID(), - obstetricExamination.getVisitCode()); - } - return r; - } + */ + return r; + } + + @Override + public int updateBenAncCareDetails(ANCCareDetails ancCareDetailsOBJ) throws ParseException { + int r = 0; + + String processed = ancCareRepo.getBenANCCareDetailsStatus(ancCareDetailsOBJ.getBeneficiaryRegID(), + ancCareDetailsOBJ.getVisitCode()); + if (null != processed && !"N".equals(processed)) { + processed = "U"; + } else { + processed = "N"; + } + + if (ancCareDetailsOBJ.getLmpDate() != null && !ancCareDetailsOBJ.getLmpDate().isEmpty() + && ancCareDetailsOBJ.getLmpDate().length() >= 10) { + String lmpDate = ancCareDetailsOBJ.getLmpDate().split("T")[0]; + ancCareDetailsOBJ + .setLastMenstrualPeriod_LMP(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(lmpDate).getTime())); + } + if (ancCareDetailsOBJ.getExpDelDt() != null && !ancCareDetailsOBJ.getExpDelDt().isEmpty() + && ancCareDetailsOBJ.getExpDelDt().length() >= 10) { + String edDate = ancCareDetailsOBJ.getExpDelDt().split("T")[0]; + ancCareDetailsOBJ + .setExpectedDateofDelivery(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(edDate).getTime())); + } + + r = ancCareRepo.updateANCCareDetails(ancCareDetailsOBJ.getComolaintType(), ancCareDetailsOBJ.getDuration(), + ancCareDetailsOBJ.getDescription(), ancCareDetailsOBJ.getLastMenstrualPeriod_LMP(), + ancCareDetailsOBJ.getGestationalAgeOrPeriodofAmenorrhea_POA(), ancCareDetailsOBJ.getTrimesterNumber(), + ancCareDetailsOBJ.getExpectedDateofDelivery(), ancCareDetailsOBJ.getPrimiGravida(), + ancCareDetailsOBJ.getGravida_G(), ancCareDetailsOBJ.getTermDeliveries_T(), + ancCareDetailsOBJ.getPretermDeliveries_P(), ancCareDetailsOBJ.getAbortions_A(), + ancCareDetailsOBJ.getLivebirths_L(), ancCareDetailsOBJ.getBloodGroup(), + ancCareDetailsOBJ.getModifiedBy(), processed, ancCareDetailsOBJ.getBeneficiaryRegID(), + ancCareDetailsOBJ.getVisitCode(), ancCareDetailsOBJ.getStillBirth()); + return r; + } + + @Override + public int updateBenAncImmunizationDetails(WrapperAncImmunization wrapperAncImmunization) throws ParseException { + int r = 0; + + List ancWomenVaccineDetailList = getANCWomenVaccineDetail(wrapperAncImmunization); + + if (null != ancWomenVaccineDetailList) { + + String processed = "N"; + ANCWomenVaccineDetail ancWomenVaccine = ancWomenVaccineDetailList.get(0); + ArrayList ancWomenVaccineStatuses = ancWomenVaccineRepo + .getBenANCWomenVaccineStatus(ancWomenVaccine.getBeneficiaryRegID(), ancWomenVaccine.getVisitCode()); + Map womenVaccineStatuses = new HashMap(); + + for (Object[] obj : ancWomenVaccineStatuses) { + womenVaccineStatuses.put((String) obj[0], (String) obj[1]); + } + + for (ANCWomenVaccineDetail ancWomenVaccineDetail : ancWomenVaccineDetailList) { + processed = womenVaccineStatuses.get(ancWomenVaccineDetail.getVaccineName()); + if (null != processed && !processed.equals("N")) { + processed = "U"; + } else { + processed = "N"; + } + + r = ancWomenVaccineRepo.updateANCImmunizationDetails(ancWomenVaccineDetail.getStatus(), + ancWomenVaccineDetail.getReceivedDate(), ancWomenVaccineDetail.getReceivedFacilityName(), + ancWomenVaccineDetail.getModifiedBy(), processed, ancWomenVaccineDetail.getBeneficiaryRegID(), + ancWomenVaccineDetail.getVisitCode(), ancWomenVaccineDetail.getVaccineName()); + + } + } + return r; + } + + @Override + public int updateSysObstetricExamination(SysObstetricExamination obstetricExamination) { + int r = 0; + if (null != obstetricExamination) { + String processed = sysObstetricExaminationRepo.getBenObstetricExaminationStatus( + obstetricExamination.getBeneficiaryRegID(), obstetricExamination.getVisitCode()); + if (null != processed && !"N".equals(processed)) { + processed = "U"; + } else { + processed = "N"; + } + r = sysObstetricExaminationRepo.updateSysObstetricExamination(obstetricExamination.getFundalHeight(), + obstetricExamination.getfHAndPOA_Status(), obstetricExamination.getfHAndPOA_Interpretation(), + obstetricExamination.getFetalMovements(), obstetricExamination.getFetalHeartSounds(), + obstetricExamination.getFetalHeartRate_BeatsPerMinute(), + obstetricExamination.getFetalPositionOrLie(), obstetricExamination.getFetalPresentation(), + obstetricExamination.getAbdominalScars(), obstetricExamination.getModifiedBy(), + obstetricExamination.getSfh(), processed, obstetricExamination.getBeneficiaryRegID(), + obstetricExamination.getVisitCode()); + } + return r; + } } diff --git a/src/main/java/com/iemr/mmu/service/anc/ANCServiceImpl.java b/src/main/java/com/iemr/mmu/service/anc/ANCServiceImpl.java index d9538b62..a04b2932 100644 --- a/src/main/java/com/iemr/mmu/service/anc/ANCServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/anc/ANCServiceImpl.java @@ -266,6 +266,10 @@ private int updateBenFlowNurseAfterNurseActivityANC(JsonObject investigationData @Transactional(rollbackFor = Exception.class) public Long saveANCDoctorData(JsonObject requestOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Long saveSuccessFlag = null; Long prescriptionID = null; Long investigationSuccessFlag = null; @@ -382,7 +386,17 @@ public Long saveANCDoctorData(JsonObject requestOBJ, String Authorization) throw tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } + if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -415,7 +429,7 @@ public Long saveANCDoctorData(JsonObject requestOBJ, String Authorization) throw // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { saveSuccessFlag = diagnosisSuccessFlag; @@ -1471,6 +1485,10 @@ public Long updateANCDoctorData(JsonObject requestOBJ, String Authorization) thr Integer prescriptionSuccessFlag = null; Long referSaveSuccessFlag = null; Integer tcRequestStatusFlag = null; + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } if (requestOBJ != null) { TeleconsultationRequestOBJ tcRequestOBJ = null; @@ -1597,7 +1615,16 @@ public Long updateANCDoctorData(JsonObject requestOBJ, String Authorization) thr tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -1622,7 +1649,7 @@ public Long updateANCDoctorData(JsonObject requestOBJ, String Authorization) thr // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(commonUtilityClass, - isTestPrescribed, isMedicinePrescribed, tcRequestOBJ); + isTestPrescribed, isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { updateSuccessFlag = investigationSuccessFlag; diff --git a/src/main/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImpl.java b/src/main/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImpl.java index 716b4530..0fb6544f 100644 --- a/src/main/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImpl.java @@ -72,6 +72,7 @@ public int createBenFlowRecord(String requestOBJ, Long beneficiaryRegID, Long be if (beneficiaryRegID != null && beneficiaryID != null && beneficiaryRegID > 0 && beneficiaryID > 0) { objRS = beneficiaryFlowStatusRepo.save(obj); + obj.setVanSerialNo((objRS.getBenFlowID())); if (objRS != null) returnOBJ = 1; else @@ -91,6 +92,7 @@ public int createBenFlowRecord(String requestOBJ, Long beneficiaryRegID, Long be returnOBJ = 3; } else { objRS = beneficiaryFlowStatusRepo.save(obj); +obj.setVanSerialNo((objRS.getBenFlowID())); if (objRS != null) returnOBJ = 1; else @@ -259,21 +261,26 @@ private BeneficiaryFlowStatus getBenFlowRecordObj(String requestOBJ, Long benefi return obj; } - public int updateBenFlowAfterDocData(Long benFlowID, Long benRegID, Long benID, Long benVisitID, short docFlag, - short pharmaFlag, short oncologistFlag, short tcSpecialistFlag, int tcUserID, Timestamp tcDate) { + public int updateBenFlowAfterDocData(Long benFlowID, Long benRegID, Long benID, Long benVisitID, + short docFlag, short pharmaFlag, short oncologistFlag, short tcSpecialistFlag, + int tcUserID, Timestamp tcDate, Boolean signatureFlag) throws Exception { int i = 0; try { - i = beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity(benFlowID, benRegID, benID, docFlag, - pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + Short pharmaF = beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID); + Short pharmaF1 = (pharmaF != null && pharmaF == 1) ? pharmaF : pharmaFlag; + + i = beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity(benFlowID, benRegID, benID, + docFlag, pharmaF1, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, signatureFlag); } catch (Exception e) { - logger.error("Error in ben flow creation = " + e); + logger.error("Error in ben flow update = " + e); + throw new Exception(e); } return i; } public int updateBenFlowAfterDocDataUpdate(Long benFlowID, Long benRegID, Long benID, Long benVisitID, - short docFlag, short pharmaFlag, short oncologistFlag, short tcSpecialistFlag, int tcUserID, - Timestamp tcDate) throws Exception { + short docFlag, short pharmaFlag, short oncologistFlag, short tcSpecialistFlag, + int tcUserID, Timestamp tcDate, Boolean signatureFlag) throws Exception { int i = 0; try { Short pharmaF = beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID); @@ -284,8 +291,8 @@ public int updateBenFlowAfterDocDataUpdate(Long benFlowID, Long benRegID, Long b else pharmaF1 = pharmaFlag; - i = beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity(benFlowID, benRegID, benID, docFlag, - pharmaF1, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + i = beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity(benFlowID, benRegID, benID, + docFlag, pharmaF1, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, signatureFlag); } catch (Exception e) { logger.error("Error in ben flow creation = " + e); throw new Exception(e); @@ -295,7 +302,7 @@ public int updateBenFlowAfterDocDataUpdate(Long benFlowID, Long benRegID, Long b public int updateBenFlowAfterDocDataUpdateWDF(Long benFlowID, Long benRegID, Long benID, Long benVisitID, short docFlag, short pharmaFlag, short oncologistFlag, int tcUserID, - Timestamp tcDate) throws Exception { + Timestamp tcDate, Boolean signatureFlag) throws Exception { int i = 0; try { Short pharmaF = beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID); @@ -306,8 +313,8 @@ public int updateBenFlowAfterDocDataUpdateWDF(Long benFlowID, Long benRegID, Lon else pharmaF1 = pharmaFlag; - i = beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivityWDF(benFlowID, benRegID, benID, docFlag, - pharmaF1, oncologistFlag, tcUserID, tcDate); + i = beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivityWDF(benFlowID, benRegID, benID, + docFlag, pharmaF1, oncologistFlag, tcUserID, tcDate, signatureFlag); } catch (Exception e) { logger.error("Error in ben flow creation = " + e); throw new Exception(e); @@ -316,8 +323,8 @@ public int updateBenFlowAfterDocDataUpdateWDF(Long benFlowID, Long benRegID, Lon } public int updateBenFlowAfterDocDataUpdateTCSpecialist(Long benFlowID, Long benRegID, Long benID, Long benVisitID, - short docFlag, short pharmaFlag, short oncologistFlag, short tcSpecialistFlag, int tcUserID, - Timestamp tcDate) throws Exception { + short docFlag, short pharmaFlag, short oncologistFlag, short tcSpecialistFlag, + int tcUserID, Timestamp tcDate, Boolean signatureFlag) throws Exception { int i = 0; try { Short pharmaF = beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID); @@ -329,7 +336,7 @@ public int updateBenFlowAfterDocDataUpdateTCSpecialist(Long benFlowID, Long benR pharmaF1 = pharmaFlag; i = beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivityTCSpecialist(benFlowID, benRegID, benID, - pharmaF1, oncologistFlag, tcSpecialistFlag); + pharmaF1, oncologistFlag, tcSpecialistFlag, signatureFlag); } catch (Exception e) { logger.error("Error in ben flow creation = " + e); throw new Exception(e); diff --git a/src/main/java/com/iemr/mmu/service/cancerScreening/CSDoctorServiceImpl.java b/src/main/java/com/iemr/mmu/service/cancerScreening/CSDoctorServiceImpl.java index 80322522..ae56e0cf 100644 --- a/src/main/java/com/iemr/mmu/service/cancerScreening/CSDoctorServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/cancerScreening/CSDoctorServiceImpl.java @@ -49,7 +49,10 @@ public Long saveCancerDiagnosisData(CancerDiagnosis cancerDiagnosis) { CancerDiagnosis response = cancerDiagnosisRepo.save(cancerDiagnosis); if (response != null) - return response.getID(); + { + response.setVanSerialNo(response.getID()); + return response.getID(); + } else return null; } diff --git a/src/main/java/com/iemr/mmu/service/cancerScreening/CSServiceImpl.java b/src/main/java/com/iemr/mmu/service/cancerScreening/CSServiceImpl.java index 23fdf9d8..85f36174 100644 --- a/src/main/java/com/iemr/mmu/service/cancerScreening/CSServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/cancerScreening/CSServiceImpl.java @@ -726,6 +726,10 @@ public String getBenDataFrmNurseToDocExaminationScreen(Long benRegID, Long visit // -------Create/save (Doctor)--------------------------- @Transactional(rollbackFor = Exception.class) public Long saveCancerScreeningDoctorData(JsonObject requestOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Long docDataSuccessFlag = null; Integer tcRequestStatusFlag = null; @@ -809,11 +813,11 @@ public Long saveCancerScreeningDoctorData(JsonObject requestOBJ, String Authoriz tcUserID = tcRequestOBJ.getUserID(); tcDate = tcRequestOBJ.getAllocationDate(); - } - + } + int l = commonBenStatusFlowServiceImpl.updateBenFlowAfterDocData(tmpBenFlowID, tmpbeneficiaryRegID, tmpBeneficiaryID, tmpBenVisitID, docFlag, pharmaFalg, oncologistFlag, tcSpecialistFlag, - tcUserID, tcDate); + tcUserID, tcDate, doctorSignatureFlag); docDataSuccessFlag = diagnosisSuccessFlag; } diff --git a/src/main/java/com/iemr/mmu/service/common/transaction/CommonDoctorServiceImpl.java b/src/main/java/com/iemr/mmu/service/common/transaction/CommonDoctorServiceImpl.java index e986e374..cab7a2d3 100644 --- a/src/main/java/com/iemr/mmu/service/common/transaction/CommonDoctorServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/common/transaction/CommonDoctorServiceImpl.java @@ -214,6 +214,11 @@ public Integer saveDocFindings(WrapperAncFindings wrapperAncFindings) { ArrayList benChiefComplaintListRS = (ArrayList) benChiefComplaintRepo .saveAll(tmpBenCHiefComplaintsTMP); if (tmpBenCHiefComplaintsTMP.size() == benChiefComplaintListRS.size()) { + for (BenChiefComplaint complaint : benChiefComplaintListRS) { + if (complaint.getBenChiefComplaintID() != null) { + benChiefComplaintRepo.updateVanSerialNo(complaint.getBenChiefComplaintID()); + } + } chiefComFlag = 1; } } else { @@ -721,26 +726,25 @@ public Long updateBenReferDetails(JsonObject referObj) throws IEMRException { if (sm.getServiceName().equalsIgnoreCase(tmReferCheckValue)) { TMReferred = 1; - } - else - { + } else { TMReferred = 0; } - + if (referDetails.getRevisitDate() != null) referDetailsTemp.setRevisitDate(referDetails.getRevisitDate()); - + if (referDetails.getReferralReason() != null) referDetailsTemp.setReferralReason(referDetails.getReferralReason()); referDetailsList.add(referDetailsTemp); } } - } /* - * else { if (referDetails.getReferredToInstituteName() != null || - * referDetails.getRevisitDate() != null || referDetails.getReferralReason() != - * null) referDetailsList.add(referDetails); TMReferred = 0; } - */ + } else { + if (referDetails.getReferredToInstituteName() != null || referDetails.getRevisitDate() != null + || referDetails.getReferralReason() != null) + referDetailsList.add(referDetails); + TMReferred = 0; + } ArrayList res = (ArrayList) benReferDetailsRepo.saveAll(referDetailsList); if (referDetailsList.size() == res.size()) { @@ -759,8 +763,10 @@ public Long updateBenReferDetails(JsonObject referObj) throws IEMRException { */ /// ------Start of beneficiary flow table after doctor data save------------- - public int updateBenFlowtableAfterDocDataSave(CommonUtilityClass commonUtilityClass, Boolean isTestPrescribed, - Boolean isMedicinePrescribed, TeleconsultationRequestOBJ tcRequestOBJ) { + public int updateBenFlowtableAfterDocDataSave(CommonUtilityClass commonUtilityClass, + Boolean isTestPrescribed, Boolean isMedicinePrescribed, + TeleconsultationRequestOBJ tcRequestOBJ, Boolean doctorSignatureFlag) throws Exception { + short pharmaFalg; short docFlag; short tcSpecialistFlag = (short) 0; @@ -802,7 +808,8 @@ public int updateBenFlowtableAfterDocDataSave(CommonUtilityClass commonUtilityCl } int i = commonBenStatusFlowServiceImpl.updateBenFlowAfterDocData(tmpBenFlowID, tmpbeneficiaryRegID, - tmpBeneficiaryID, tmpBenVisitID, docFlag, pharmaFalg, (short) 0, tcSpecialistFlag, tcUserID, tcDate); + tmpBeneficiaryID, tmpBenVisitID, docFlag, pharmaFalg, (short) 0, tcSpecialistFlag, + tcUserID, tcDate, doctorSignatureFlag); return i; } @@ -817,8 +824,10 @@ public int updateBenFlowtableAfterDocDataSave(CommonUtilityClass commonUtilityCl * @param isMedicinePrescribed * @return */ - public int updateBenFlowtableAfterDocDataUpdate(CommonUtilityClass commonUtilityClass, Boolean isTestPrescribed, - Boolean isMedicinePrescribed, TeleconsultationRequestOBJ tcRequestOBJ) throws Exception { + public int updateBenFlowtableAfterDocDataUpdate(CommonUtilityClass commonUtilityClass, + Boolean isTestPrescribed, Boolean isMedicinePrescribed, + TeleconsultationRequestOBJ tcRequestOBJ, Boolean doctorSignatureFlag) throws Exception { + int i = 0; short pharmaFalg; short docFlag = (short) 0; @@ -844,7 +853,7 @@ public int updateBenFlowtableAfterDocDataUpdate(CommonUtilityClass commonUtility i = commonBenStatusFlowServiceImpl.updateBenFlowAfterDocDataUpdateTCSpecialist(tmpBenFlowID, tmpbeneficiaryRegID, tmpBeneficiaryID, tmpBenVisitID, docFlag, pharmaFalg, (short) 0, - tcSpecialistFlag, tcUserID, tcDate); + tcSpecialistFlag, tcUserID, tcDate, doctorSignatureFlag); } else { if (isTestPrescribed) @@ -872,13 +881,13 @@ public int updateBenFlowtableAfterDocDataUpdate(CommonUtilityClass commonUtility tcSpecialistFlag = (short) 100; i = commonBenStatusFlowServiceImpl.updateBenFlowAfterDocDataUpdate(tmpBenFlowID, tmpbeneficiaryRegID, tmpBeneficiaryID, tmpBenVisitID, docFlag, pharmaFalg, (short) 0, tcSpecialistFlag, tcUserID, - tcDate); + tcDate, doctorSignatureFlag); } else i = commonBenStatusFlowServiceImpl.updateBenFlowAfterDocDataUpdateWDF(tmpBenFlowID, tmpbeneficiaryRegID, tmpBeneficiaryID, tmpBenVisitID, docFlag, pharmaFalg, (short) 0, tcUserID, - tcDate); + tcDate, doctorSignatureFlag); } diff --git a/src/main/java/com/iemr/mmu/service/common/transaction/CommonNurseServiceImpl.java b/src/main/java/com/iemr/mmu/service/common/transaction/CommonNurseServiceImpl.java index 0fedb10d..72e3c8f2 100644 --- a/src/main/java/com/iemr/mmu/service/common/transaction/CommonNurseServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/common/transaction/CommonNurseServiceImpl.java @@ -259,6 +259,7 @@ public Long saveBeneficiaryVisitDetails(BeneficiaryVisitDetail beneficiaryVisitD beneficiaryVisitDetail.setReportFilePath(sb.toString()); response = benVisitDetailRepo.save(beneficiaryVisitDetail); + benVisitDetailRepo.updateVanSerialNo(response.getBenVisitID()); if (response != null) { // Long visitCode = updateVisitCode(response, 10); @@ -435,7 +436,14 @@ public int saveBenChiefComplaints(List benChiefComplaintList) List benChiefComplaintResultList = (List) benChiefComplaintRepo .saveAll(benChiefComplaintListNew); if (benChiefComplaintListNew.size() == benChiefComplaintResultList.size()) + { + for (BenChiefComplaint complaint : benChiefComplaintResultList) { + if (complaint.getBenChiefComplaintID() != null) { + benChiefComplaintRepo.updateVanSerialNo(complaint.getBenChiefComplaintID()); + } + } r = 1; + } } else { r = 1; } @@ -2076,7 +2084,13 @@ public int updateBenChiefComplaints(List benChiefComplaintLis List benChiefComplaintResultList = (List) benChiefComplaintRepo .saveAll(benChiefComplaintList); + if (!benChiefComplaintResultList.isEmpty()) { + for (BenChiefComplaint complaint : benChiefComplaintResultList) { + if (complaint.getBenChiefComplaintID() != null) { + benChiefComplaintRepo.updateVanSerialNo(complaint.getBenChiefComplaintID()); + } + } r = benChiefComplaintResultList.size(); } } @@ -2685,6 +2699,8 @@ public Long saveBenPrescription(PrescriptionDetail prescription) { } PrescriptionDetail prescriptionRS = prescriptionDetailRepo.save(prescription); + prescriptionDetailRepo.updateVanSerialNo(prescriptionRS.getPrescriptionID()); + if (prescriptionRS != null && prescriptionRS.getPrescriptionID() > 0) { r = prescriptionRS.getPrescriptionID(); } @@ -2766,7 +2782,9 @@ public Long saveBeneficiaryLabTestOrderDetails(JsonObject caseSheet, Long prescr return returnOBJ; } - public Integer saveBenPrescribedDrugsList(List prescribedDrugDetailList) { + public Map saveBenPrescribedDrugsList(List prescribedDrugDetailList) { + Map result = new HashMap<>(); + List prescribedDrugIDs = new ArrayList<>(); Integer r = 0; if (prescribedDrugDetailList.size() > 0) { @@ -2782,11 +2800,20 @@ public Integer saveBenPrescribedDrugsList(List prescribedD .saveAll(prescribedDrugDetailList); if (prescribedDrugDetailList.size() == prescribedDrugDetailListRS.size()) { r = prescribedDrugDetailListRS.size(); + // Extract the IDs from saved entities + for (PrescribedDrugDetail savedDrug : prescribedDrugDetailListRS) { + if (savedDrug.getId() != null) { + prescribedDrugIDs.add(savedDrug.getId()); + } + } } } else { r = 1; } - return r; + + result.put("count", r); + result.put("prescribedDrugIDs", prescribedDrugIDs); + return result; } private int calculateQtyPrescribed(String form, String dose, String frequency, String duration, @@ -2815,7 +2842,8 @@ else if (durationUnit.equalsIgnoreCase("Month(s)")) private double getQtyForOneDay(String form, String dose, String frequency) { double qtyInOneDay = 0; if (form != null && dose != null && frequency != null) { - if (frequency.equalsIgnoreCase("Once Daily(OD)")) { + if (frequency.equalsIgnoreCase("Once Daily(OD)") || frequency.equalsIgnoreCase("Once Daily(OD) Before Food")|| + frequency.equalsIgnoreCase("Once Daily(OD) After Food")|| frequency.equalsIgnoreCase("Once Daily(OD) At Bedtime")) { if (form.equalsIgnoreCase("Tablet")) { if (dose.equalsIgnoreCase("Half Tab")) { qtyInOneDay = .5; @@ -2839,7 +2867,8 @@ private double getQtyForOneDay(String form, String dose, String frequency) { } } } else { - if (frequency.equalsIgnoreCase("Twice Daily(BD)")) { + if (frequency.equalsIgnoreCase("Twice Daily(BD)") || frequency.equalsIgnoreCase("Twice Daily(BD) Before Food")|| + frequency.equalsIgnoreCase("Twice Daily(BD) After Food")) { if (form.equalsIgnoreCase("Tablet")) { if (dose.equalsIgnoreCase("Half Tab")) { qtyInOneDay = 1; @@ -2863,7 +2892,8 @@ private double getQtyForOneDay(String form, String dose, String frequency) { } } } else { - if (frequency.equalsIgnoreCase("Thrice Daily (TID)")) { + if (frequency.equalsIgnoreCase("Thrice Daily (TID)") || frequency.equalsIgnoreCase("Thrice Daily (TID) After Food")|| + frequency.equalsIgnoreCase("Thrice Daily (TID) Before Food")) { if (form.equalsIgnoreCase("Tablet")) { if (dose.equalsIgnoreCase("Half Tab")) { qtyInOneDay = 1.5; @@ -2887,7 +2917,8 @@ private double getQtyForOneDay(String form, String dose, String frequency) { } } } else { - if (frequency.equalsIgnoreCase("Four Times in a Day (QID)")) { + if (frequency.equalsIgnoreCase("Four Times in a Day (QID)") || frequency.equalsIgnoreCase("Four Times in a Day AF")|| + frequency.equalsIgnoreCase("Four Times in a Day BF")) { if (form.equalsIgnoreCase("Tablet")) { if (dose.equalsIgnoreCase("Half Tab")) { qtyInOneDay = 2; @@ -2911,7 +2942,8 @@ private double getQtyForOneDay(String form, String dose, String frequency) { } } } else { - if (frequency.equalsIgnoreCase("Single Dose") || frequency.equalsIgnoreCase("Stat Dose")) { + if (frequency.equalsIgnoreCase("Single Dose") || frequency.equalsIgnoreCase("Stat Dose")|| + frequency.equalsIgnoreCase("Single Dose Before Food") || frequency.equalsIgnoreCase("Single Dose After Food")) { if (form.equalsIgnoreCase("Tablet")) { if (dose.equalsIgnoreCase("Half Tab")) { qtyInOneDay = .5; @@ -2935,7 +2967,8 @@ private double getQtyForOneDay(String form, String dose, String frequency) { } } } else { - if (frequency.equalsIgnoreCase("Once in a Week")) { + if (frequency.equalsIgnoreCase("Once in a Week") || frequency.equalsIgnoreCase("Once in a Week After Food") + || frequency.equalsIgnoreCase("Once in a Week Before Food")) { if (form.equalsIgnoreCase("Tablet")) { if (dose.equalsIgnoreCase("Half Tab")) { qtyInOneDay = .07142; diff --git a/src/main/java/com/iemr/mmu/service/covid19/Covid19ServiceImpl.java b/src/main/java/com/iemr/mmu/service/covid19/Covid19ServiceImpl.java index 0f393503..9c2865b2 100644 --- a/src/main/java/com/iemr/mmu/service/covid19/Covid19ServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/covid19/Covid19ServiceImpl.java @@ -839,6 +839,11 @@ public Long updateCovid19DoctorData(JsonObject requestOBJ, String Authorization) Integer prescriptionSuccessFlag = null; Long referSaveSuccessFlag = null; + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } + if (requestOBJ != null) { TeleconsultationRequestOBJ tcRequestOBJ = null; // TcSpecialistSlotBookingRequestOBJ tcSpecialistSlotBookingRequestOBJ = null; @@ -938,7 +943,16 @@ public Long updateCovid19DoctorData(JsonObject requestOBJ, String Authorization) tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -962,7 +976,7 @@ public Long updateCovid19DoctorData(JsonObject requestOBJ, String Authorization) // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(commonUtilityClass, - isTestPrescribed, isMedicinePrescribed, tcRequestOBJ); + isTestPrescribed, isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) updateSuccessFlag = investigationSuccessFlag; @@ -1149,6 +1163,10 @@ private String getCovidDiagnosisData(Long benRegID, Long visitCode) { /// --------------- start of saving doctor data ------------------------ @Transactional(rollbackFor = Exception.class) public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Long saveSuccessFlag = null; Long prescriptionID = null; Long investigationSuccessFlag = null; @@ -1233,7 +1251,16 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -1258,7 +1285,7 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { saveSuccessFlag = referSaveSuccessFlag; diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java index f7a55d4a..dc36c7c1 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DataSyncRepository.java @@ -98,8 +98,8 @@ public List> getDataForGivenSchemaAndTable(String schema, St return resultSetList; } - public int updateProcessedFlagInVan(String schemaName, String tableName, StringBuilder vanSerialNos, - String autoIncreamentColumn, String user) throws Exception { + public int updateProcessedFlagInVan(String schemaName, String tableName, List vanSerialNos, + String autoIncreamentColumn, String user, String status, String reason) throws Exception { jdbcTemplate = getJdbcTemplate(); String query = ""; @@ -107,16 +107,16 @@ public int updateProcessedFlagInVan(String schemaName, String tableName, StringB if (tableName != null && tableName.toLowerCase().equals("i_ben_flow_outreach")) { query = "UPDATE " + schemaName + "." + tableName - + " SET created_date = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " - + "WHERE " + autoIncreamentColumn + " IN (" + vanSerialNos + ")"; + + " SET processed = ?, SyncedDate = ?, Syncedby = ? , SyncFailureReason = ? " + + "WHERE " + autoIncreamentColumn + " IN (" + String.join(",", vanSerialNos) + ")"; } else { query = "UPDATE " + schemaName + "." + tableName - + " SET CreatedDate = ? , processed = 'P', SyncedDate = ?, Syncedby = ? " - + "WHERE " + autoIncreamentColumn + " IN (" + vanSerialNos + ")"; + + " SET processed = ?, SyncedDate = ?, Syncedby = ? , SyncFailureReason = ? " + + "WHERE " + autoIncreamentColumn + " IN (" + String.join(",", vanSerialNos) + ")"; } Timestamp syncedDate = new Timestamp(System.currentTimeMillis()); - int updatedRows = jdbcTemplate.update(query, syncedDate, syncedDate, user); + int updatedRows = jdbcTemplate.update(query, status, syncedDate, user, reason); return updatedRows; } diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerImpl.java index 6e7b1c91..4f011703 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerImpl.java @@ -21,14 +21,15 @@ */ package com.iemr.mmu.service.dataSyncActivity; +import java.math.BigInteger; import java.text.DecimalFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.HashMap; import org.json.JSONObject; import org.slf4j.Logger; @@ -40,11 +41,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import com.google.gson.Gson; import com.iemr.mmu.data.syncActivity_syncLayer.MasterDownloadDataDigester; @@ -56,8 +53,6 @@ import com.iemr.mmu.utils.RestTemplateUtil; import com.iemr.mmu.utils.mapper.InputMapper; -import jakarta.servlet.http.HttpServletRequest; - @Service @PropertySource("classpath:application.properties") public class DownloadDataFromServerImpl implements DownloadDataFromServer { @@ -332,22 +327,38 @@ public int callCentralAPIToGenerateBenIDAndimportToLocal(String requestOBJ, Stri String ServerAuthorization, String token) throws Exception { int i = 0, i1 = 0; try{ + JSONObject originalRequest = new JSONObject(requestOBJ); + BigInteger vanID = null; + if (originalRequest.has("vanID")) { + vanID = originalRequest.getBigInteger("vanID"); + } + logger.info("Extracted vanID from original request: " + vanID); + // Rest template RestTemplate restTemplate = new RestTemplate(); HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, ServerAuthorization,"datasync"); + logger.info("request obj check="+requestOBJ); // Call rest-template to call central API to generate UNIQUE ID at central ResponseEntity response = restTemplate.exchange(benGenUrlCentral, HttpMethod.POST, request, String.class); logger.info("Authorization before calling local api="+Authorization); logger.info("Import url="+benImportUrlLocal); + logger.info("Response from benGenUrlCentral: " + response.getBody()); if (response != null && response.hasBody()) { JSONObject obj = new JSONObject(response.getBody()); if (obj != null && obj.has("data") && obj.has("statusCode") && obj.getInt("statusCode") == 200) { // Consume the response from API and call local identity api to save data + JSONObject localImportPayload = new JSONObject(); + localImportPayload.put("vanID", vanID); + localImportPayload.put("benIDList", obj.get("data")); + logger.info("Authorization: " + Authorization); logger.info("ServerAuthorization: " + ServerAuthorization); - HttpEntity request1 = RestTemplateUtil.createRequestEntity(obj.get("data").toString(), Authorization, token); + logger.info("Payload to local import: " + localImportPayload.toString()); + + + HttpEntity request1 = RestTemplateUtil.createRequestEntity( localImportPayload.toString(), Authorization, token); i = 1; logger.info("Request to benImporturllocal: " + request1); ResponseEntity response1 = restTemplate.exchange(benImportUrlLocal, HttpMethod.POST, request1, diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerTransactionalImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerTransactionalImpl.java index 5cd8d26d..ee3c39a5 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerTransactionalImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/DownloadDataFromServerTransactionalImpl.java @@ -109,7 +109,7 @@ public int downloadTransactionalData(int vanID, String ServerAuthorization, Stri } indentRepo.saveAll(indentList); - int updateFlag = updateProcessedFlagToCentral("db_iemr_sync", "t_indent", ids, ServerAuthorization, token); + int updateFlag = updateProcessedFlagToCentral("db_iemr", "t_indent", ids, ServerAuthorization, token); } break; @@ -136,7 +136,7 @@ public int downloadTransactionalData(int vanID, String ServerAuthorization, Stri indentOrder.setProcessed("P"); } indentOrderRepo.saveAll(indentOrderList); - int updateFlag = updateProcessedFlagToCentral("db_iemr_sync", "t_indentorder", ids, ServerAuthorization, token); + int updateFlag = updateProcessedFlagToCentral("db_iemr", "t_indentorder", ids, ServerAuthorization, token); } break; } @@ -164,7 +164,7 @@ public int downloadTransactionalData(int vanID, String ServerAuthorization, Stri } indentIssueRepo.saveAll(indentIssueList); - int updateFlag = updateProcessedFlagToCentral("db_iemr_sync", "t_indentissue", ids, ServerAuthorization, token); + int updateFlag = updateProcessedFlagToCentral("db_iemr", "t_indentissue", ids, ServerAuthorization, token); } break; } @@ -191,7 +191,7 @@ public int downloadTransactionalData(int vanID, String ServerAuthorization, Stri } stockTransferRepo.saveAll(stockTransferList); - int updateFlag = updateProcessedFlagToCentral("db_iemr_sync", "t_stocktransfer", ids, + int updateFlag = updateProcessedFlagToCentral("db_iemr", "t_stocktransfer", ids, ServerAuthorization, token); } break; @@ -219,7 +219,7 @@ public int downloadTransactionalData(int vanID, String ServerAuthorization, Stri } itemStockEntryRepo.saveAll(itemStockEntryList); - int updateFlag = updateProcessedFlagToCentral("db_iemr_sync", "t_itemstockentry", ids, + int updateFlag = updateProcessedFlagToCentral("db_iemr", "t_itemstockentry", ids, ServerAuthorization, token); } break; diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/SyncResult.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/SyncResult.java new file mode 100644 index 00000000..b51a536d --- /dev/null +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/SyncResult.java @@ -0,0 +1,46 @@ +/* +* AMRIT – Accessible Medical Records via Integrated Technology +* Integrated EHR (Electronic Health Records) Solution +* +* Copyright (C) "Piramal Swasthya Management and Research Institute" +* +* This file is part of AMRIT. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see https://www.gnu.org/licenses/. +*/ +package com.iemr.mmu.service.dataSyncActivity; + +import lombok.Data; + +@Data +public class SyncResult { + private String schemaName; + private String tableName; + private String vanSerialNo; + private String syncedBy; + private boolean success; + private String reason; // Failure reason if any + + // Constructor + public SyncResult(String schemaName, String tableName, String vanSerialNo, String syncedBy, boolean success, String reason) { + this.schemaName = schemaName; + this.tableName = tableName; + this.vanSerialNo = vanSerialNo; + this.syncedBy = syncedBy; + this.success = success; + this.reason = reason; + } + + // Getters & setters omitted for brevity +} diff --git a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java index 51d8a32b..d9567861 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncActivity/UploadDataToServerImpl.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; +import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,9 +38,11 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; +import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -68,329 +72,562 @@ @Service @PropertySource("classpath:application.properties") public class UploadDataToServerImpl implements UploadDataToServer { - private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); - // rest URLs from server to consume local van data and to sync to DB server - @Value("${dataSyncUploadUrl}") - private String dataSyncUploadUrl; - - @Value("${BATCH_SIZE}") - private int BATCH_SIZE; - - @Autowired - private DataSyncRepository dataSyncRepository; - @Autowired - private DataSyncGroupsRepo dataSyncGroupsRepo; - @Autowired - private MasterVanRepo masterVanRepo; - - @Autowired - private SyncUtilityClassRepo syncutilityClassRepo; - @Autowired - private CookieUtil cookieUtil; - - // batch size for data upload - // private static final int BATCH_SIZE = 30; - - /** - * - * @param groupName - * @param Authorization - * @return - */ - // @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = { - // Exception.class }) - public String getDataToSyncToServer(int vanID, String user, String Authorization, String token) throws Exception { - - String syncData = null; - syncData = syncIntercepter(vanID, user, Authorization, token); - - return syncData; - } - - /** - * - * @param Authorization - * @return - */ - public String syncIntercepter(int vanID, String user, String Authorization, String token) throws Exception { - - // sync activity trigger - - String serverAcknowledgement = startDataSync(vanID, user, Authorization, token); - - return serverAcknowledgement; - } - - /** - * - * @param syncTableDetailsIDs - * @param Authorization - * @return - */ - - private String startDataSync(int vanID, String user, String Authorization, String token) throws Exception { - String serverAcknowledgement = null; - List> responseStatus = new ArrayList<>(); - boolean isProgress = false; - boolean hasSyncFailed = false; - ObjectMapper objectMapper = new ObjectMapper(); - // fetch group masters - List dataSyncGroupList = dataSyncGroupsRepo.findByDeleted(false); - logger.debug("Fetched DataSyncGroups: {}", - objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataSyncGroupList)); - for (DataSyncGroups dataSyncGroups : dataSyncGroupList) { - int groupId = dataSyncGroups.getSyncTableGroupID(); - List syncUtilityClassList = getVanAndServerColumns(groupId); - logger.debug("Fetched SyncUtilityClass for groupId {}: {}", groupId, - objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncUtilityClassList)); - List> syncData; - List> syncDataBatch; - Map groupIdStatus = new HashMap<>(); - for (SyncUtilityClass obj : syncUtilityClassList) { - // if (!isProgress) { - // get data from DB to sync to server - syncData = getDataToSync(obj.getSchemaName(), obj.getTableName(), obj.getVanColumnName()); - logger.debug("Fetched syncData for schema {} and table {}: {}", obj.getSchemaName(), obj.getTableName(), - objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncData)); - // System.out.println(new Gson().toJson(syncData)); - if (syncData != null && syncData.size() > 0) { - int dataSize = syncData.size(); - int startIndex = 0; - int fullBatchCount = dataSize / BATCH_SIZE; - int remainder = dataSize % BATCH_SIZE; - - logger.info("Starting batch sync for schema: {}, table: {} with {} full batches and {} remainder", - obj.getSchemaName(), obj.getTableName(), fullBatchCount, remainder); - - - for (int i = 0; i < fullBatchCount; i++) { - syncDataBatch = getBatchOfAskedSizeDataToSync(syncData, startIndex, - BATCH_SIZE); - serverAcknowledgement = syncDataToServer(vanID, obj.getSchemaName(), obj.getTableName(), - obj.getVanAutoIncColumnName(), obj.getServerColumnName(), syncDataBatch, user, - Authorization, token); - logger.debug("Server acknowledgement for batch {}: {}", i, serverAcknowledgement); - - if (serverAcknowledgement == null || !serverAcknowledgement.contains("success")) { - logger.error("Sync failed for batch {} in schema: {}, table: {}", i, obj.getSchemaName(), - obj.getTableName()); - hasSyncFailed = true; - setResponseStatus(groupIdStatus, groupId, "failed", responseStatus); - break; - } - - startIndex += BATCH_SIZE; - } - - if (!hasSyncFailed && remainder > 0) { - syncDataBatch = getBatchOfAskedSizeDataToSync(syncData, startIndex, - remainder); - serverAcknowledgement = syncDataToServer(vanID, obj.getSchemaName(), obj.getTableName(), - obj.getVanAutoIncColumnName(), obj.getServerColumnName(), syncDataBatch, user, - Authorization, token); - - if (serverAcknowledgement == null || !serverAcknowledgement.contains("success")) { - logger.error("Sync failed for remaining data in schema: {}, table: {}", obj.getSchemaName(), - obj.getTableName()); - hasSyncFailed = true; - setResponseStatus(groupIdStatus, groupId, "failed", responseStatus); - break; - } - } - - if (!hasSyncFailed) { - logger.info("Data sync completed for schema: {}, table: {}", obj.getSchemaName(), - obj.getTableName()); - setResponseStatus(groupIdStatus, groupId, "completed", responseStatus); - } - } else { - logger.info("No data to sync for schema {} and table {}", obj.getSchemaName(), obj.getTableName()); - setResponseStatus(groupIdStatus, groupId, "completed", responseStatus); - } - - if (hasSyncFailed) { - // Mark all subsequent groups as "pending" - for (DataSyncGroups remainingGroup : dataSyncGroupList - .subList(dataSyncGroupList.indexOf(dataSyncGroups) + 1, dataSyncGroupList.size())) { - Map pendingGroupIdStatus = new HashMap<>(); - pendingGroupIdStatus.put("groupId", String.valueOf(remainingGroup.getSyncTableGroupID())); - pendingGroupIdStatus.put("status", "pending"); - responseStatus.add(pendingGroupIdStatus); - } - break; - } - } - } - - if (hasSyncFailed) { - Map response = new HashMap<>(); - response.put("response", "Data sync failed"); - response.put("groupsProgress", responseStatus); - objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(response); - return objectMapper.writerWithDefaultPrettyPrinter() - .writeValueAsString(Collections.singletonMap("data", response)); - } else { - if ("No data to sync".equals(serverAcknowledgement)) { - return serverAcknowledgement; - } else { - return "Data successfully synced"; - } - } - } - - private void setResponseStatus(Map groupIdStatus, int groupId, String serverAcknowledgement, - List> responseStatus) { - groupIdStatus.put("groupId", String.valueOf(groupId)); - groupIdStatus.put("status", serverAcknowledgement); - responseStatus.add(groupIdStatus); - } - - /** - * - * @param syncTableDetailsIDs - * @return - */ - - private List getVanAndServerColumns(Integer groupID) throws Exception { - List syncUtilityClassList = getVanAndServerColumnList(groupID); - logger.debug("Fetched SyncUtilityClass list for groupID {}: {}", groupID, syncUtilityClassList); - - return syncUtilityClassList; - } - - public List getVanAndServerColumnList(Integer groupID) throws Exception { - List syncUtilityClassList = syncutilityClassRepo - .findBySyncTableGroupIDAndDeletedOrderBySyncTableDetailID(groupID, false); - logger.debug("Fetched SyncUtilityClass list from repository for groupID {}: {}", groupID, syncUtilityClassList); - return syncUtilityClassList; - } - - /** - * - * @param schemaName - * @param tableName - * @param columnNames - * @return - */ - - private List> getDataToSync(String schemaName, String tableName, String columnNames) - throws Exception { - logger.info("Fetching data to sync for schema: {}, table: {}, columns: {}", schemaName, tableName, columnNames); - List> resultSetList = dataSyncRepository.getDataForGivenSchemaAndTable(schemaName, - tableName, columnNames); - if (resultSetList != null) { - logger.debug("Fetched {} records for schema '{}', table '{}'", resultSetList.size(), schemaName, tableName); - // Optionally log a sample of the resultSetList for verification (be careful - // with large datasets) - if (!resultSetList.isEmpty()) { - logger.debug("Sample record: {}", resultSetList.get(0)); - } - } else { - logger.debug("No records found for schema '{}', table '{}'", schemaName, tableName); - } - return resultSetList; - } - - /** - * - * @param syncData - * @param startIndex - * @param size - * @return - */ - - private List> getBatchOfAskedSizeDataToSync(List> syncData, int startIndex, - int size) throws Exception { - List> syncDataOfBatchSize = syncData.subList(startIndex, (startIndex + size)); - return syncDataOfBatchSize; - } - - /** - * - * @param schemaName - * @param tableName - * @param vanAutoIncColumnName - * @param serverColumns - * @param dataToBesync - * @param Authorization - * @return - */ - - public String syncDataToServer(int vanID, String schemaName, String tableName, String vanAutoIncColumnName, - String serverColumns, List> dataToBesync, String user, String Authorization, - String token) - throws Exception { - - RestTemplate restTemplate = new RestTemplate(); - - Integer facilityID = masterVanRepo.getFacilityID(vanID); - - // serialize null - GsonBuilder gsonBuilder = new GsonBuilder(); - gsonBuilder.serializeNulls(); - Gson gson = gsonBuilder.create(); - - Map dataMap = new HashMap<>(); - dataMap.put("schemaName", schemaName); - dataMap.put("tableName", tableName); - dataMap.put("vanAutoIncColumnName", vanAutoIncColumnName); - dataMap.put("serverColumns", serverColumns); - dataMap.put("syncData", dataToBesync); - dataMap.put("syncedBy", user); - if (facilityID != null) - dataMap.put("facilityID", facilityID); - - String requestOBJ = gson.toJson(dataMap); - HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization, "datasync"); - ResponseEntity response = restTemplate.exchange(dataSyncUploadUrl, HttpMethod.POST, request, - String.class); - - int i = 0; - if (response != null && response.hasBody()) { - JSONObject obj = new JSONObject(response.getBody()); - if (obj != null && obj.has("statusCode") && obj.getInt("statusCode") == 200) { - StringBuilder vanSerialNos = getVanSerialNoListForSyncedData(vanAutoIncColumnName, dataToBesync); - - i = dataSyncRepository.updateProcessedFlagInVan(schemaName, tableName, vanSerialNos, - vanAutoIncColumnName, user); - } - } - if (i > 0) - return "Data successfully synced"; - else - return null; - } - - /** - * - * @param vanAutoIncColumnName - * @param dataToBesync - * @return - */ - - public StringBuilder getVanSerialNoListForSyncedData(String vanAutoIncColumnName, - List> dataToBesync) throws Exception { - // comma separated van serial no - StringBuilder vanSerialNos = new StringBuilder(); - - int pointer1 = 0; - for (Map map : dataToBesync) { - if (pointer1 == dataToBesync.size() - 1) - vanSerialNos.append(map.get(vanAutoIncColumnName.trim())); - else - vanSerialNos.append(map.get(vanAutoIncColumnName.trim()) + ","); - - pointer1++; - } - return vanSerialNos; - } - - public String getDataSyncGroupDetails() { - List dataSyncGroupList = dataSyncGroupsRepo.findByDeleted(false); - if (dataSyncGroupList != null) - return new Gson().toJson(dataSyncGroupList); - else - return null; - } - -} + private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + // rest URLs from server to consume local van data and to sync to DB server + @Value("${dataSyncUploadUrl}") + private String dataSyncUploadUrl; + + @Value("${BATCH_SIZE}") + private int BATCH_SIZE; + + @Autowired + private DataSyncRepository dataSyncRepository; + @Autowired + private DataSyncGroupsRepo dataSyncGroupsRepo; + @Autowired + private MasterVanRepo masterVanRepo; + + @Autowired + private SyncUtilityClassRepo syncutilityClassRepo; + @Autowired + private CookieUtil cookieUtil; + boolean criticalTableFailure = false; // Add this flag + + /** + * + * @param groupName + * @param Authorization + * @return + */ + public String getDataToSyncToServer(int vanID, String user, String Authorization, String token) throws Exception { + String syncData = null; + syncData = syncIntercepter(vanID, user, Authorization, token); + return syncData; + } + + /** + * + * @param Authorization + * @return + */ + public String syncIntercepter(int vanID, String user, String Authorization, String token) throws Exception { + // sync activity trigger + String serverAcknowledgement = startDataSync(vanID, user, Authorization, token); + return serverAcknowledgement; + } + + /** + * Enhanced startDataSync method with table-level and group-level tracking + * + * @param syncTableDetailsIDs + * @param Authorization + * @return + */ + + private String startDataSync(int vanID, String user, String Authorization, String token) throws Exception { + String serverAcknowledgement = null; + List> responseStatus = new ArrayList<>(); + ObjectMapper objectMapper = new ObjectMapper(); + + // fetch group masters + List dataSyncGroupList = dataSyncGroupsRepo.findByDeleted(false); + logger.debug("Fetched DataSyncGroups: {}", + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataSyncGroupList)); + + for (DataSyncGroups dataSyncGroups : dataSyncGroupList) { + int groupId = dataSyncGroups.getSyncTableGroupID(); + String groupName = dataSyncGroups.getSyncTableGroupName(); + + List syncUtilityClassList = getVanAndServerColumns(groupId); + logger.debug("Fetched SyncUtilityClass for groupId {}: {}", groupId, + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncUtilityClassList)); + + // Track table-level results for this group + List> tableDetailsList = new ArrayList<>(); + boolean groupHasFailures = false; + boolean groupHasCriticalFailure = false; // Track critical failures at group level + + for (SyncUtilityClass obj : syncUtilityClassList) { + String tableKey = obj.getSchemaName() + "." + obj.getTableName(); + boolean tableHasError = false; + + // get data from DB to sync to server + List> syncData = getDataToSync(obj.getSchemaName(), obj.getTableName(), + obj.getVanColumnName()); + logger.info("Fetched syncData for schema {} and table {}: {}", obj.getSchemaName(), obj.getTableName(), + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(syncData)); + + if (syncData != null && syncData.size() > 0) { + int dataSize = syncData.size(); + int startIndex = 0; + int fullBatchCount = dataSize / BATCH_SIZE; + int remainder = dataSize % BATCH_SIZE; + + // Track table-level success/failure counts + int totalRecords = dataSize; + int successfulRecords = 0; + int failedRecords = 0; + List tableFailureReasons = new ArrayList<>(); + + logger.info("Starting batch sync for schema: {}, table: {} with {} full batches and {} remainder", + obj.getSchemaName(), obj.getTableName(), fullBatchCount, remainder); + + // Process full batches + for (int i = 0; i < fullBatchCount && !tableHasError; i++) { + List> syncDataBatch = getBatchOfAskedSizeDataToSync(syncData, startIndex, + BATCH_SIZE); + + Map syncResult = syncDataToServer(vanID, obj.getSchemaName(), + obj.getTableName(), + obj.getVanAutoIncColumnName(), obj.getServerColumnName(), syncDataBatch, user, + Authorization, token); + + if (syncResult == null) { + logger.error("Sync failed for batch {} in schema: {}, table: {}", i, obj.getSchemaName(), + obj.getTableName()); + tableHasError = true; + failedRecords += syncDataBatch.size(); + groupHasFailures = true; + tableFailureReasons.add("Batch " + i + " sync returned null response"); + break; + } + + String status = (String) syncResult.get("status"); + int batchSuccessCount = (Integer) syncResult.get("successCount"); + int batchFailCount = (Integer) syncResult.get("failCount"); + @SuppressWarnings("unchecked") + List batchFailureReasons = (List) syncResult.get("failureReasons"); + + successfulRecords += batchSuccessCount; + failedRecords += batchFailCount; + + if (batchFailureReasons != null && !batchFailureReasons.isEmpty()) { + tableFailureReasons.addAll(batchFailureReasons); + groupHasFailures = true; + } + + if (status.equals("Sync failed")) { + tableHasError = true; + break; + } + + startIndex += BATCH_SIZE; + } + + // Process remainder batch if no error in full batches + if (!tableHasError && remainder > 0) { + List> syncDataBatch = getBatchOfAskedSizeDataToSync(syncData, startIndex, + remainder); + + Map syncResult = syncDataToServer(vanID, obj.getSchemaName(), + obj.getTableName(), + obj.getVanAutoIncColumnName(), obj.getServerColumnName(), syncDataBatch, user, + Authorization, token); + + if (syncResult == null) { + logger.error("Sync failed for remaining data in schema: {}, table: {}", obj.getSchemaName(), + obj.getTableName()); + failedRecords += syncDataBatch.size(); + groupHasFailures = true; + tableFailureReasons.add("Remainder batch sync returned null response"); + } else { + String status = (String) syncResult.get("status"); + int batchSuccessCount = (Integer) syncResult.get("successCount"); + int batchFailCount = (Integer) syncResult.get("failCount"); + @SuppressWarnings("unchecked") + List batchFailureReasons = (List) syncResult.get("failureReasons"); + + successfulRecords += batchSuccessCount; + failedRecords += batchFailCount; + + if (batchFailureReasons != null && !batchFailureReasons.isEmpty()) { + tableFailureReasons.addAll(batchFailureReasons); + groupHasFailures = true; + } + + if (status.equals("Sync failed")) { + groupHasFailures = true; + } + } + } + + // Determine table status + String tableStatus; + if (successfulRecords == totalRecords && failedRecords == 0) { + tableStatus = "success"; + } else if (failedRecords == totalRecords && successfulRecords == 0) { + tableStatus = "failed"; + // groupHasCriticalFailure = true; // Mark as critical failure + groupHasFailures = true; + } else if (successfulRecords > 0 && failedRecords > 0) { + tableStatus = "partial"; + groupHasFailures = true; + } else { + tableStatus = "failed"; + // groupHasCriticalFailure = true; + groupHasFailures = true; + } + + // Create detailed table info with failure reasons + Map tableDetails = new HashMap<>(); + tableDetails.put("tableName", obj.getTableName()); + tableDetails.put("schemaName", obj.getSchemaName()); + tableDetails.put("status", tableStatus); + tableDetails.put("totalRecords", totalRecords); + tableDetails.put("successfulRecords", successfulRecords); + tableDetails.put("failedRecords", failedRecords); + + // Add failure reasons only if there are any failures + if (!tableFailureReasons.isEmpty()) { + tableDetails.put("failureReasons", tableFailureReasons); + } + + tableDetailsList.add(tableDetails); + + logger.info("Table sync summary - {}: {} (Success: {}, Failed: {}, Total: {}, Failure Reasons: {})", + tableKey, tableStatus, successfulRecords, failedRecords, totalRecords, + tableFailureReasons.isEmpty() ? "None" : tableFailureReasons); + + } else { + logger.info("No data to sync for schema {} and table {}", obj.getSchemaName(), obj.getTableName()); + + Map tableDetails = new HashMap<>(); + tableDetails.put("tableName", obj.getTableName()); + tableDetails.put("schemaName", obj.getSchemaName()); + tableDetails.put("status", "no_data"); + tableDetails.put("totalRecords", 0); + tableDetails.put("successfulRecords", 0); + tableDetails.put("failedRecords", 0); + tableDetailsList.add(tableDetails); + } + + // Continue processing all tables in the group - NO BREAK HERE + } + + // Determine overall group status based on table results + // String groupStatus; + // long successTables = tableDetailsList.stream() + // .filter(table -> "success".equals(table.get("status")) || + // "no_data".equals(table.get("status"))) + // .count(); + // long partialTables = tableDetailsList.stream() + // .filter(table -> "partial".equals(table.get("status"))) + // .count(); + // long failedTables = tableDetailsList.stream() + // .filter(table -> "failed".equals(table.get("status"))) + // .count(); + + // if (groupHasCriticalFailure) { + // // If group has critical failure (100% failed tables), mark as failed + // groupStatus = "failed"; + // } else if (failedTables == 0 && partialTables == 0) { + // // All tables succeeded or had no data + // groupStatus = "completed"; + // } else if (failedTables > 0 && successTables == 0 && partialTables == 0) { + // // All tables failed + // groupStatus = "failed"; + // } else { + // // Mixed results - some success, some partial, some failed + // groupStatus = "partial"; + // } + + // Determine overall group status based on table results + String groupStatus; + long successTables = tableDetailsList.stream() + .filter(table -> "success".equals(table.get("status")) || "no_data".equals(table.get("status"))) + .count(); + long partialTables = tableDetailsList.stream() + .filter(table -> "partial".equals(table.get("status"))) + .count(); + long failedTables = tableDetailsList.stream() + .filter(table -> "failed".equals(table.get("status"))) + .count(); + + if (failedTables == 0 && partialTables == 0) { + // All tables succeeded or had no data + groupStatus = "completed"; + } else if (failedTables == tableDetailsList.size()) { + // ALL tables failed (100% failure at group level) + groupStatus = "failed"; + } else if (successTables > 0 && (failedTables > 0 || partialTables > 0)) { + // Mixed results - some success with some failures/partials + groupStatus = "partial"; + } else if (partialTables > 0 && failedTables == 0) { + // Only partial and success tables (no complete failures) + groupStatus = "partial"; + } else { + // All other mixed scenarios + groupStatus = "partial"; + } + // Create group response + Map groupResponse = new HashMap<>(); + groupResponse.put("syncTableGroupID", groupId); + groupResponse.put("syncTableGroupName", groupName != null ? groupName : "Group " + groupId); + groupResponse.put("status", groupStatus); + groupResponse.put("tables", tableDetailsList); + groupResponse.put("summary", Map.of( + "totalTables", tableDetailsList.size(), + "successfulTables", successTables, + "partialTables", partialTables, + "failedTables", failedTables)); + + responseStatus.add(groupResponse); + + // Continue to next group - NO BREAK HERE, process ALL groups + } + + // Create final response + Map finalResponse = new HashMap<>(); + + // Check if any group failed completely + boolean anyGroupFailed = responseStatus.stream() + .anyMatch(group -> "failed".equals(((Map) group).get("status"))); + + // Check if there was any data to sync + boolean hasData = responseStatus.stream() + .anyMatch(group -> { + @SuppressWarnings("unchecked") + List> tables = (List>) ((Map) group) + .get("tables"); + return tables.stream().anyMatch(table -> !("no_data".equals(table.get("status")))); + }); + + if (!hasData) { + return "No data to sync"; + } else if (anyGroupFailed) { + finalResponse.put("response", "Data sync completed with failures"); + finalResponse.put("groupsProgress", responseStatus); + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(finalResponse); + } else { + finalResponse.put("response", "Data sync completed successfully"); + finalResponse.put("groupsProgress", responseStatus); + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(finalResponse); + } + } + + private List getVanAndServerColumns(Integer groupID) throws Exception { + List syncUtilityClassList = getVanAndServerColumnList(groupID); + logger.debug("Fetched SyncUtilityClass list for groupID {}: {}", groupID, syncUtilityClassList); + return syncUtilityClassList; + } + + public List getVanAndServerColumnList(Integer groupID) throws Exception { + List syncUtilityClassList = syncutilityClassRepo + .findBySyncTableGroupIDAndDeletedOrderBySyncTableDetailID(groupID, false); + logger.debug("Fetched SyncUtilityClass list from repository for groupID {}: {}", groupID, syncUtilityClassList); + return syncUtilityClassList; + } + + private List> getDataToSync(String schemaName, String tableName, String columnNames) + throws Exception { + logger.info("Fetching data to sync for schema: {}, table: {}, columns: {}", schemaName, tableName, columnNames); + List> resultSetList = dataSyncRepository.getDataForGivenSchemaAndTable(schemaName, + tableName, columnNames); + if (resultSetList != null) { + logger.debug("Fetched {} records for schema '{}', table '{}'", resultSetList.size(), schemaName, tableName); + if (!resultSetList.isEmpty()) { + logger.debug("Sample record: {}", resultSetList.get(0)); + } + } else { + logger.debug("No records found for schema '{}', table '{}'", schemaName, tableName); + } + return resultSetList; + } + + private List> getBatchOfAskedSizeDataToSync(List> syncData, int startIndex, + int size) throws Exception { + List> syncDataOfBatchSize = syncData.subList(startIndex, (startIndex + size)); + return syncDataOfBatchSize; + } + + public Map syncDataToServer(int vanID, String schemaName, String tableName, + String vanAutoIncColumnName, String serverColumns, List> dataToBesync, + String user, String Authorization, String token) throws Exception { + + RestTemplate restTemplate = new RestTemplate(); + + // Configure timeouts + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(60000); // 60 seconds to connect + factory.setReadTimeout(600000); // 10 minutes to read response + restTemplate.setRequestFactory(factory); + + Integer facilityID = masterVanRepo.getFacilityID(vanID); + + GsonBuilder gsonBuilder = new GsonBuilder(); + gsonBuilder.serializeNulls(); + Gson gson = gsonBuilder.create(); + + Map dataMap = new HashMap<>(); + dataMap.put("schemaName", schemaName); + dataMap.put("tableName", tableName); + dataMap.put("vanAutoIncColumnName", vanAutoIncColumnName); + dataMap.put("serverColumns", serverColumns); + dataMap.put("syncData", dataToBesync); + dataMap.put("syncedBy", user); + if (facilityID != null) + dataMap.put("facilityID", facilityID); + + String requestOBJ = gson.toJson(dataMap); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization, "datasync"); + + logger.info("Syncing {} records for table {}", dataToBesync.size(), tableName); + + int successCount = 0; + int failCount = 0; + List successVanSerialNos = new ArrayList<>(); + List failedVanSerialNos = new ArrayList<>(); + List failureReasons = new ArrayList<>(); + + try { + ResponseEntity response = restTemplate.exchange(dataSyncUploadUrl, HttpMethod.POST, + request, String.class); + + logger.info("Response from server: status={}, hasBody={}, getBody={}", + response.getStatusCode(), response.hasBody(), response.getBody()); + + if (response != null && response.hasBody()) { + try { + JSONObject obj = new JSONObject(response.getBody()); + + int statusCode = obj.optInt("statusCode", 200); + String errorMessage = obj.optString("errorMessage", ""); + + // Check for ACTUAL errors - status >= 400 OR errorMessage is not "Success" + if (statusCode >= 400 || (!errorMessage.isEmpty() && !errorMessage.equalsIgnoreCase("Success"))) { + logger.error("Server returned error: {}", errorMessage); + + // Mark all as failed + for (Map map : dataToBesync) { + failedVanSerialNos.add(String.valueOf(map.get(vanAutoIncColumnName))); + failureReasons.add(errorMessage); + } + failCount = failedVanSerialNos.size(); + + } else if (obj.has("data")) { + JSONObject dataObj = obj.getJSONObject("data"); + + if (dataObj.has("records")) { + JSONArray recordsArr = dataObj.getJSONArray("records"); + for (int i = 0; i < recordsArr.length(); i++) { + JSONObject record = recordsArr.getJSONObject(i); + String vanSerialNo = record.getString("vanSerialNo"); + boolean success = record.getBoolean("success"); + + if (success) { + successVanSerialNos.add(vanSerialNo); + successCount++; + } else { + failedVanSerialNos.add(vanSerialNo); + failCount++; + String reason = record.optString("reason", "Unknown error"); + failureReasons.add(reason); + } + } + } else if (tableName.equalsIgnoreCase("m_beneficiaryregidmapping")) { + String respMsg = dataObj.optString("response", ""); + + if (respMsg.toLowerCase().contains("success") && statusCode == 200) { + for (Map map : dataToBesync) { + successVanSerialNos.add(String.valueOf(map.get(vanAutoIncColumnName))); + } + successCount = successVanSerialNos.size(); + } else { + for (Map map : dataToBesync) { + failedVanSerialNos.add(String.valueOf(map.get(vanAutoIncColumnName))); + failureReasons.add(respMsg.isEmpty() ? "Sync failed" : respMsg); + } + failCount = failedVanSerialNos.size(); + } + } + } + } catch (JSONException e) { + logger.error("Failed to parse server response: {}", e.getMessage(), e); + for (Map map : dataToBesync) { + failedVanSerialNos.add(String.valueOf(map.get(vanAutoIncColumnName))); + failureReasons.add("Invalid server response"); + } + failCount = failedVanSerialNos.size(); + } + } else { + logger.error("Empty response from server"); + for (Map map : dataToBesync) { + failedVanSerialNos.add(String.valueOf(map.get(vanAutoIncColumnName))); + failureReasons.add("Empty server response"); + } + failCount = failedVanSerialNos.size(); + } + + } catch (ResourceAccessException e) { + logger.error("Connection error during sync: {}", e.getMessage(), e); + + // Mark all as failed due to connection error + for (Map map : dataToBesync) { + failedVanSerialNos.add(String.valueOf(map.get(vanAutoIncColumnName))); + failureReasons.add("Connection failed: " + e.getMessage()); + } + failCount = failedVanSerialNos.size(); + + } catch (Exception e) { + logger.error("Unexpected error during sync: {}", e.getMessage(), e); + + for (Map map : dataToBesync) { + failedVanSerialNos.add(String.valueOf(map.get(vanAutoIncColumnName))); + failureReasons.add("Unexpected error: " + e.getMessage()); + } + failCount = failedVanSerialNos.size(); + } + + logger.info("Sync complete - Success: {}, Failed: {}", successCount, failCount); + + // Update processed flags + if (!successVanSerialNos.isEmpty()) { + dataSyncRepository.updateProcessedFlagInVan(schemaName, tableName, successVanSerialNos, + vanAutoIncColumnName, user, "P", "null"); + } + if (!failedVanSerialNos.isEmpty()) { + String firstError = failureReasons.isEmpty() ? "Unknown error" : failureReasons.get(0); + dataSyncRepository.updateProcessedFlagInVan(schemaName, tableName, failedVanSerialNos, + vanAutoIncColumnName, user, "F", firstError); + } + + Map result = new HashMap<>(); + if (successCount > 0 && failCount == 0) { + result.put("status", "Data successfully synced"); + } else if (successCount > 0 && failCount > 0) { + result.put("status", "Partial success"); + } else { + result.put("status", "Sync failed"); + } + + result.put("successCount", successCount); + result.put("failCount", failCount); + + return result; + } + + public StringBuilder getVanSerialNoListForSyncedData(String vanAutoIncColumnName, + List> dataToBesync) throws Exception { + // comma separated van serial no + StringBuilder vanSerialNos = new StringBuilder(); + + int pointer1 = 0; + for (Map map : dataToBesync) { + if (pointer1 == dataToBesync.size() - 1) + vanSerialNos.append(map.get(vanAutoIncColumnName.trim())); + else + vanSerialNos.append(map.get(vanAutoIncColumnName.trim()) + ","); + + pointer1++; + } + return vanSerialNos; + } + + public String getDataSyncGroupDetails() { + List dataSyncGroupList = dataSyncGroupsRepo.findByDeleted(false); + if (dataSyncGroupList != null) + return new Gson().toJson(dataSyncGroupList); + else + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java index 6dba4611..4eadbb49 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/DataSyncRepositoryCentral.java @@ -62,7 +62,7 @@ private JdbcTemplate getJdbcTemplate() { "t_ncdscreening", "t_ncdcare", "i_ben_flow_outreach", "t_covid19", "t_idrsdetails", "t_physicalactivity", "t_phy_generalexam", "t_phy_headtotoe", "t_sys_obstetric", "t_sys_gastrointestinal", "t_sys_cardiovascular", "t_sys_respiratory", "t_sys_centralnervous", "t_sys_musculoskeletalsystem", "t_sys_genitourinarysystem", - "t_ancdiagnosis", "t_ncddiagnosis", "t_pncdiagnosis", "t_benchefcomplaint", "t_benclinicalobservation", + "t_ancdiagnosis", "t_ncddiagnosis", "t_pncdiagnosis", "t_benchiefcomplaint", "t_benclinicalobservation", "t_prescription", "t_prescribeddrug", "t_lab_testorder", "t_benreferdetails", "t_lab_testresult", "t_physicalstockentry", "t_patientissue", "t_facilityconsumption", "t_itemstockentry", "t_itemstockexit", "t_benmedhistory", "t_femaleobstetrichistory", "t_benmenstrualdetails", @@ -114,7 +114,8 @@ private boolean isValidColumnNamesList(String columnNames) { public int checkRecordIsAlreadyPresentOrNot(String schemaName, String tableName, String vanSerialNo, String vanID, String vanAutoIncColumnName, int syncFacilityID) { - + logger.info("Checking record presence: schema={}, table={}, vanSerialNo={}, vanID={}, column={}, syncFacilityID={}", + schemaName, tableName, vanSerialNo, vanID, vanAutoIncColumnName, syncFacilityID); jdbcTemplate = getJdbcTemplate(); List params = new ArrayList<>(); @@ -128,16 +129,18 @@ public int checkRecordIsAlreadyPresentOrNot(String schemaName, String tableName, StringBuilder queryBuilder = new StringBuilder("SELECT ") .append(vanAutoIncColumnName).append(" FROM ") .append(schemaName).append(".").append(tableName).append(" WHERE VanSerialNo = ?"); - + logger.info("Constructed query: {}", queryBuilder.toString()); params.add(vanSerialNo); - + logger.info("Table name="+tableName.toLowerCase()); if (List.of("t_patientissue", "t_physicalstockentry", "t_stockadjustment", "t_saitemmapping", "t_stocktransfer", "t_patientreturn", "t_facilityconsumption", "t_indent", "t_indentorder", "t_indentissue", "t_itemstockentry", "t_itemstockexit") .contains(tableName.toLowerCase()) && syncFacilityID > 0) { + logger.info("If block"); queryBuilder.append(" AND SyncFacilityID = ?"); params.add(syncFacilityID); } else { + logger.info("Else part"); queryBuilder.append(" AND VanID = ?"); params.add(vanID); } diff --git a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java index fcc68fd3..ad6f844a 100644 --- a/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java +++ b/src/main/java/com/iemr/mmu/service/dataSyncLayerCentral/GetDataFromVanAndSyncToDBImpl.java @@ -35,6 +35,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.iemr.mmu.data.syncActivity_syncLayer.SyncUploadDataDigester; +import com.iemr.mmu.service.dataSyncActivity.SyncResult; @Service public class GetDataFromVanAndSyncToDBImpl implements GetDataFromVanAndSyncToDB { @@ -63,7 +64,7 @@ public class GetDataFromVanAndSyncToDBImpl implements GetDataFromVanAndSyncToDB "t_sys_musculoskeletalsystem", "t_sys_genitourinarysystem")); TABLE_GROUPS.put(4, - Arrays.asList("t_ancdiagnosis", "t_ncddiagnosis", "t_pncdiagnosis", "t_benchefcomplaint", + Arrays.asList("t_ancdiagnosis", "t_ncddiagnosis", "t_pncdiagnosis", "t_benchiefcomplaint", "t_benclinicalobservation", "t_prescription", "t_prescribeddrug", "t_lab_testorder", "t_benreferdetails")); @@ -95,25 +96,24 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E ObjectMapper mapper = new ObjectMapper(); SyncUploadDataDigester syncUploadDataDigester = mapper.readValue(requestOBJ, SyncUploadDataDigester.class); List> dataToBesync = syncUploadDataDigester.getSyncData(); - logger.info("Data to be synced: {}", dataToBesync); + List syncResults = new ArrayList<>(); // <-- define here + if (syncUploadDataDigester == null || syncUploadDataDigester.getTableName() == null) { logger.error("Invalid SyncUploadDataDigester object or tableName is null."); return "Error: Invalid sync request."; } String syncTableName = syncUploadDataDigester.getTableName(); - logger.info("Syncing data for table: {}", syncTableName); // Handle specific tables first, if their logic is distinct if ("m_beneficiaryregidmapping".equalsIgnoreCase(syncTableName)) { - String result = update_M_BeneficiaryRegIdMapping_for_provisioned_benID(syncUploadDataDigester); + String result = update_M_BeneficiaryRegIdMapping_for_provisioned_benID(syncUploadDataDigester, syncResults); if ("data sync passed".equals(result)) { return "Sync successful for m_beneficiaryregidmapping."; } else { logger.error("Sync failed for m_beneficiaryregidmapping: {}", result); return "Sync failed for m_beneficiaryregidmapping."; } - } - else { + } else { boolean syncSuccess = true; String errorMessage = ""; if (syncTableName != null && !syncTableName.isEmpty()) { @@ -123,7 +123,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E if (map.get("tableName") != null && map.get("tableName").toString().equalsIgnoreCase(syncTableName)) { syncSuccess = syncTablesInGroup(syncUploadDataDigester.getSchemaName(), syncTableName, - syncUploadDataDigester); + syncUploadDataDigester, syncResults); foundInGroup = true; break; } @@ -131,7 +131,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E if (!foundInGroup) { logger.warn("Table '{}' not found in any predefined groups. Proceeding with generic sync logic.", syncTableName); - syncSuccess = performGenericTableSync(syncUploadDataDigester); + syncSuccess = performGenericTableSync(syncUploadDataDigester, syncResults); } } else { @@ -142,7 +142,7 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E try { boolean currentTableSyncResult = syncTablesInGroup(syncUploadDataDigester.getSchemaName(), - table, syncUploadDataDigester); + table, syncUploadDataDigester, syncResults); if (!currentTableSyncResult) { syncSuccess = false; errorMessage += "Failed to sync table: " + table + " in Group " + groupId + ". "; @@ -163,16 +163,36 @@ public String syncDataToServer(String requestOBJ, String Authorization) throws E } } - if (syncSuccess) { - return "Overall data sync passed."; - } else { - return "Overall data sync failed. Details: " + errorMessage; - } + Map responseMap = new HashMap<>(); + responseMap.put("statusCode", 200); + responseMap.put("message", "Data sync completed"); + responseMap.put("records", syncResults); + logger.info("Response = " + responseMap); + logger.info("Sync Results = " + syncResults); + return new ObjectMapper().writeValueAsString(responseMap); + } } private boolean syncTablesInGroup(String schemaName, String currentTableName, - SyncUploadDataDigester originalDigester) { + SyncUploadDataDigester originalDigester, List syncResults) { + + // Filter syncData for this specific table + List> filteredData = new ArrayList<>(); + for (Map map : originalDigester.getSyncData()) { + if (map.get("tableName") != null && + map.get("tableName").toString().equalsIgnoreCase(currentTableName)) { + filteredData.add(map); + } + } + + logger.info("Filtered {} records for table {}", filteredData.size(), currentTableName); + + if (filteredData.isEmpty()) { + logger.info("No data found for table: {}", currentTableName); + return true; // No data to sync is considered success + } + SyncUploadDataDigester tableSpecificDigester = new SyncUploadDataDigester(); tableSpecificDigester.setSchemaName(schemaName); tableSpecificDigester.setTableName(currentTableName); @@ -180,12 +200,13 @@ private boolean syncTablesInGroup(String schemaName, String currentTableName, tableSpecificDigester.setFacilityID(originalDigester.getFacilityID()); tableSpecificDigester.setVanAutoIncColumnName(originalDigester.getVanAutoIncColumnName()); tableSpecificDigester.setServerColumns(originalDigester.getServerColumns()); - tableSpecificDigester.setSyncData(originalDigester.getSyncData()); - return performGenericTableSync(tableSpecificDigester); + tableSpecificDigester.setSyncData(filteredData); // Use filtered data + + return performGenericTableSync(tableSpecificDigester, syncResults); } private String update_M_BeneficiaryRegIdMapping_for_provisioned_benID( - SyncUploadDataDigester syncUploadDataDigester) { + SyncUploadDataDigester syncUploadDataDigester, List syncResults) { List> dataToBesync = syncUploadDataDigester.getSyncData(); List syncData = new ArrayList<>(); @@ -297,19 +318,20 @@ private String getQueryFor_I_BeneficiaryDetails(String schemaName, String tableN return queryBuilder.toString(); } - /** - * Handles the generic synchronization logic for tables not covered by specific - * handlers. - */ - - private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDigester) { +private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDigester, + List syncResults) { List> dataToBesync = syncUploadDataDigester.getSyncData(); List syncDataListInsert = new ArrayList<>(); List syncDataListUpdate = new ArrayList<>(); + Map insertIndexMap = new HashMap<>(); + Map updateIndexMap = new HashMap<>(); + + boolean overallSuccess = true; + if (dataToBesync == null || dataToBesync.isEmpty()) { logger.info("No data to sync for table: {}", syncUploadDataDigester.getTableName()); - return true; // Nothing to sync, consider it a success + return true; } String syncTableName = syncUploadDataDigester.getTableName(); @@ -317,42 +339,46 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig String schemaName = syncUploadDataDigester.getSchemaName(); Integer facilityIDFromDigester = syncUploadDataDigester.getFacilityID(); String serverColumns = syncUploadDataDigester.getServerColumns(); - + logger.info("Facility ID from digester="+facilityIDFromDigester); + int vanSerialIndex = Arrays.asList(serverColumns.split(",")).indexOf(vanAutoIncColumnName); List serverColumnsList = Arrays.asList(serverColumns.split(",")); for (Map map : dataToBesync) { - // Create a new map with clean column names as keys Map cleanRecord = new HashMap<>(); + for (String key : map.keySet()) { String cleanKey = key; - // Handle keys with SQL functions like date_format + Object value = map.get(key); + + // Handle date_format fields if (key.startsWith("date_format(") && key.endsWith(")")) { int start = key.indexOf("(") + 1; int end = key.indexOf(","); if (end > start) { cleanKey = key.substring(start, end).trim(); } else { - // Fallback if format is unexpected cleanKey = key.substring(start, key.indexOf(")")).trim(); } } - cleanRecord.put(cleanKey.trim(), map.get(key)); + + // CRITICAL FIX: Keep null as null, don't convert to string + cleanRecord.put(cleanKey.trim(), value); } + String vanSerialNo = String.valueOf(cleanRecord.get(vanAutoIncColumnName)); String vanID = String.valueOf(cleanRecord.get("VanID")); int syncFacilityID = 0; - // Update SyncedBy and SyncedDate in the xmap itself before processing cleanRecord.put("SyncedBy", syncUploadDataDigester.getSyncedBy()); cleanRecord.put("SyncedDate", String.valueOf(LocalDateTime.now())); if (facilityIDFromDigester != null) { - // Determine the 'Processed' status based on facility ID for specific tables switch (syncTableName.toLowerCase()) { case "t_indent": case "t_indentorder": { - if (cleanRecord.containsKey("FromFacilityID") && cleanRecord.get("FromFacilityID") instanceof Number) { + if (cleanRecord.containsKey("FromFacilityID") + && cleanRecord.get("FromFacilityID") instanceof Number) { Number fromFacilityID = (Number) cleanRecord.get("FromFacilityID"); if (fromFacilityID.intValue() == facilityIDFromDigester) { cleanRecord.put("Processed", "P"); @@ -361,7 +387,8 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig break; } case "t_indentissue": { - if (cleanRecord.containsKey("ToFacilityID") && cleanRecord.get("ToFacilityID") instanceof Number) { + if (cleanRecord.containsKey("ToFacilityID") + && cleanRecord.get("ToFacilityID") instanceof Number) { Number toFacilityID = (Number) cleanRecord.get("ToFacilityID"); if (toFacilityID.intValue() == facilityIDFromDigester) { cleanRecord.put("Processed", "P"); @@ -380,8 +407,10 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig break; } case "t_itemstockentry": { + logger.info("case:t_itemStockEntry"+cleanRecord); if (cleanRecord.containsKey("FacilityID") && cleanRecord.get("FacilityID") instanceof Number) { Number mapFacilityID = (Number) cleanRecord.get("FacilityID"); + if (mapFacilityID.intValue() == facilityIDFromDigester) { cleanRecord.put("Processed", "P"); } @@ -389,12 +418,10 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig break; } default: - // No specific facility ID logic for other tables break; } } - // Extract SyncFacilityID for checkRecordIsAlreadyPresentOrNot if (cleanRecord.containsKey("SyncFacilityID") && cleanRecord.get("SyncFacilityID") instanceof Number) { syncFacilityID = ((Number) cleanRecord.get("SyncFacilityID")).intValue(); } @@ -403,113 +430,289 @@ private boolean performGenericTableSync(SyncUploadDataDigester syncUploadDataDig try { recordCheck = dataSyncRepositoryCentral.checkRecordIsAlreadyPresentOrNot( schemaName, syncTableName, vanSerialNo, vanID, vanAutoIncColumnName, syncFacilityID); + logger.info("Record check result: {}", recordCheck); } catch (Exception e) { logger.error("Error checking record existence for table {}: VanSerialNo={}, VanID={}. Error: {}", syncTableName, vanSerialNo, vanID, e.getMessage(), e); - return false; // Critical error, stop sync for this table + + String mainErrorReason = "Record check failed: " + extractMainErrorReason(e); + syncResults.add(new SyncResult(schemaName, syncTableName, vanSerialNo, + syncUploadDataDigester.getSyncedBy(), false, mainErrorReason)); + overallSuccess = false; + continue; } - // Prepare Object array for insert/update List currentRecordValues = new ArrayList<>(); for (String column : serverColumnsList) { + logger.info("Column="+column); Object value = cleanRecord.get(column.trim()); - if (value instanceof Boolean) { + // CRITICAL FIX: Don't convert null to string + if (value == null) { + currentRecordValues.add(null); + } else if (value instanceof Boolean) { currentRecordValues.add(value); - } else if (value != null) { - currentRecordValues.add(String.valueOf(value)); } else { - currentRecordValues.add(null); + currentRecordValues.add(String.valueOf(value)); } } Object[] objArr = currentRecordValues.toArray(); + + int currentSyncResultIndex = syncResults.size(); + syncResults.add(new SyncResult(schemaName, syncTableName, vanSerialNo, + syncUploadDataDigester.getSyncedBy(), false, "Pending")); + if (recordCheck == 0) { + insertIndexMap.put(currentSyncResultIndex, syncDataListInsert.size()); syncDataListInsert.add(objArr); } else { - // For update, append the WHERE clause parameters at the end of the array List updateParams = new ArrayList<>(Arrays.asList(objArr)); updateParams.add(String.valueOf(vanSerialNo)); - if (Arrays.asList("t_patientissue", "t_physicalstockentry", "t_stockadjustment", "t_saitemmapping", "t_stocktransfer", "t_patientreturn", "t_facilityconsumption", "t_indent", "t_indentorder", "t_indentissue", "t_itemstockentry", "t_itemstockexit") .contains(syncTableName.toLowerCase()) && cleanRecord.containsKey("SyncFacilityID")) { + logger.info("Adding SyncFacilityID to update params for table {}", syncTableName); updateParams.add(String.valueOf(cleanRecord.get("SyncFacilityID"))); } else { + logger.info("Adding VanID to update params for table {}", syncTableName); updateParams.add(String.valueOf(vanID)); } + + updateIndexMap.put(currentSyncResultIndex, syncDataListUpdate.size()); + logger.info("Update Params=",updateParams.toArray()); syncDataListUpdate.add(updateParams.toArray()); } } + // FIXED: Initialize as true, set to false only on failures boolean insertSuccess = true; boolean updateSuccess = true; + // Process INSERT operations if (!syncDataListInsert.isEmpty()) { String queryInsert = getQueryToInsertDataToServerDB(schemaName, syncTableName, serverColumns); try { - int[] i = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, + int[] insertResults = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, serverColumns, queryInsert, syncDataListInsert); - if (i.length != syncDataListInsert.size()) { - insertSuccess = false; - logger.error("Partial insert for table {}. Expected {} inserts, got {}. Failed records: {}", - syncTableName, syncDataListInsert.size(), i.length, - getFailedRecords(i, syncDataListInsert)); - } else { - logger.info("Successfully inserted {} records into table {}.", i.length, syncTableName); + + for (Map.Entry entry : insertIndexMap.entrySet()) { + int syncResultIndex = entry.getKey(); + int insertListIndex = entry.getValue(); + + boolean success = insertListIndex < insertResults.length && insertResults[insertListIndex] > 0; + + if (!success) { + String failedVanSerialNo = getVanSerialNo(syncDataListInsert.get(insertListIndex), + vanSerialIndex, syncResults.get(syncResultIndex)); + String conciseReason = "Insert failed (code: " + + (insertListIndex < insertResults.length ? insertResults[insertListIndex] : "unknown") + ")"; + syncResults.set(syncResultIndex, new SyncResult(schemaName, syncTableName, failedVanSerialNo, + syncUploadDataDigester.getSyncedBy(), false, conciseReason)); + insertSuccess = false; + overallSuccess = false; + } else { + syncResults.set(syncResultIndex, new SyncResult(schemaName, syncTableName, + syncResults.get(syncResultIndex).getVanSerialNo(), + syncUploadDataDigester.getSyncedBy(), true, null)); + } } + } catch (Exception e) { + String mainErrorReason = extractMainErrorReason(e); + logger.info("Batch insert failed for table {}: {}", syncTableName, mainErrorReason, e); + + // Mark ALL inserts as failed + for (Map.Entry entry : insertIndexMap.entrySet()) { + int syncResultIndex = entry.getKey(); + int insertListIndex = entry.getValue(); + String vanSerialNo = getVanSerialNo(syncDataListInsert.get(insertListIndex), vanSerialIndex, + syncResults.get(syncResultIndex)); + syncResults.set(syncResultIndex, new SyncResult(schemaName, syncTableName, vanSerialNo, + syncUploadDataDigester.getSyncedBy(), false, "INSERT: " + mainErrorReason)); + } insertSuccess = false; - logger.error("Exception during insert for table {}: {}", syncTableName, e.getMessage(), e); + overallSuccess = false; } } + // Process UPDATE operations if (!syncDataListUpdate.isEmpty()) { String queryUpdate = getQueryToUpdateDataToServerDB(schemaName, serverColumns, syncTableName); + try { - int[] j = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, - SERVER_COLUMNS_NOT_REQUIRED, queryUpdate, syncDataListUpdate); - if (j.length != syncDataListUpdate.size()) { - updateSuccess = false; - logger.error("Partial update for table {}. Expected {} updates, got {}. Failed records: {}", - syncTableName, syncDataListUpdate.size(), j.length, - getFailedRecords(j, syncDataListUpdate)); - } else { - logger.info("Successfully updated {} records in table {}.", j.length, syncTableName); + int[] updateResults = dataSyncRepositoryCentral.syncDataToCentralDB(schemaName, syncTableName, + serverColumns, queryUpdate, syncDataListUpdate); + for (Map.Entry entry : updateIndexMap.entrySet()) { + int syncResultIndex = entry.getKey(); + int updateListIndex = entry.getValue(); + + boolean success = updateListIndex < updateResults.length && updateResults[updateListIndex] > 0; + if (!success) { + Object[] failedParams = syncDataListUpdate.get(updateListIndex); + + logger.info("No rows updated for {}. Query: {} | Params: {}", + syncTableName, queryUpdate, Arrays.toString(failedParams)); + + String failedVanSerialNo = getVanSerialNo(failedParams, vanSerialIndex, + syncResults.get(syncResultIndex)); + String conciseReason = "No matching row (0 rows updated)"; + + syncResults.set(syncResultIndex, new SyncResult(schemaName, syncTableName, failedVanSerialNo, + syncUploadDataDigester.getSyncedBy(), false, conciseReason)); + updateSuccess = false; + overallSuccess = false; + } else { + syncResults.set(syncResultIndex, new SyncResult(schemaName, syncTableName, + syncResults.get(syncResultIndex).getVanSerialNo(), + syncUploadDataDigester.getSyncedBy(), true, null)); + } } + } catch (Exception e) { + String mainErrorReason = extractMainErrorReason(e); + logger.info("Batch update failed for table {}: {}", syncTableName, mainErrorReason, e); + + // Mark ALL updates as failed + for (Map.Entry entry : updateIndexMap.entrySet()) { + int syncResultIndex = entry.getKey(); + int updateListIndex = entry.getValue(); + String vanSerialNo = getVanSerialNo(syncDataListUpdate.get(updateListIndex), vanSerialIndex, + syncResults.get(syncResultIndex)); + syncResults.set(syncResultIndex, new SyncResult(schemaName, syncTableName, vanSerialNo, + syncUploadDataDigester.getSyncedBy(), false, "UPDATE: " + mainErrorReason)); + } updateSuccess = false; - logger.error("Exception during update for table {}: {}", syncTableName, e.getMessage(), e); + overallSuccess = false; } } - return insertSuccess && updateSuccess; + + logger.info("Sync results for table {}: {}", syncTableName, syncResults); + return overallSuccess; } - private String getQueryToInsertDataToServerDB(String schemaName, String - tableName, String serverColumns) { - String[] columnsArr = null; - if (serverColumns != null) - columnsArr = serverColumns.split(","); - - StringBuilder preparedStatementSetter = new StringBuilder(); - - if (columnsArr != null && columnsArr.length > 0) { - for (int i = 0; i < columnsArr.length; i++) { - preparedStatementSetter.append("?"); - if (i < columnsArr.length - 1) { - preparedStatementSetter.append(", "); - } + + private String getVanSerialNo(Object[] record, int vanSerialIndex, SyncResult originalResult) { + if (vanSerialIndex >= 0 && vanSerialIndex < record.length) { + return String.valueOf(record[vanSerialIndex]); + } + return originalResult.getVanSerialNo() != null ? originalResult.getVanSerialNo() : "UNKNOWN"; } + + // Helper method to extract concise but meaningful error message + private String extractMainErrorReason(Exception e) { + if (e == null) { + return "Unknown error"; + } + + String message = e.getMessage(); + if (message == null || message.trim().isEmpty()) { + return e.getClass().getSimpleName(); + } + + // Extract key information based on common error patterns + message = message.trim(); + + // Handle SQL constraint violations - extract the key constraint info + if (message.contains("Duplicate entry") && message.contains("for key")) { + // Extract: "Duplicate entry 'value' for key 'constraint_name'" + int keyStart = message.indexOf("for key '") + 9; + int keyEnd = message.indexOf("'", keyStart); + if (keyStart > 8 && keyEnd > keyStart) { + return "Duplicate key: " + message.substring(keyStart, keyEnd); + } + return "Duplicate entry error"; + } + + // Handle column cannot be null + if (message.contains("cannot be null")) { + int colStart = message.indexOf("Column '") + 8; + int colEnd = message.indexOf("'", colStart); + if (colStart > 7 && colEnd > colStart) { + return "Required field: " + message.substring(colStart, colEnd); + } + return "Required field missing"; + } + + // Handle data too long errors + if (message.contains("Data too long for column")) { + int colStart = message.indexOf("column '") + 8; + int colEnd = message.indexOf("'", colStart); + if (colStart > 7 && colEnd > colStart) { + return "Data too long: " + message.substring(colStart, colEnd); + } + return "Data length exceeded"; + } + + // Handle foreign key constraint violations + if (message.contains("foreign key constraint")) { + if (message.contains("CONSTRAINT `")) { + int constStart = message.indexOf("CONSTRAINT `") + 12; + int constEnd = message.indexOf("`", constStart); + if (constStart > 11 && constEnd > constStart) { + return "FK violation: " + message.substring(constStart, constEnd); + } + } + return "Foreign key constraint failed"; + } + + // Handle connection/timeout issues + if (message.toLowerCase().contains("timeout")) { + return "Database connection timeout"; + } + + if (message.toLowerCase().contains("connection")) { + return "Database connection failed"; + } + + // Handle table/schema issues + if (message.contains("doesn't exist")) { + return "Table/schema not found"; + } + + // For other cases, try to get the first meaningful part of the message + // Split by common delimiters and take the first substantial part + String[] parts = message.split("[;:|]"); + for (String part : parts) { + part = part.trim(); + if (part.length() > 10 && part.length() <= 100) { // Reasonable length + return part; + } + } + + // If message is short enough, return it as is + if (message.length() <= 150) { + return message; + } + + // Otherwise, truncate to first 150 characters + return message.substring(0, 150) + "..."; } - StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); - queryBuilder.append(schemaName).append(".").append(tableName); - queryBuilder.append("("); - queryBuilder.append(serverColumns); - queryBuilder.append(") VALUES ("); - queryBuilder.append(preparedStatementSetter); - queryBuilder.append(")"); - return queryBuilder.toString(); + private String getQueryToInsertDataToServerDB(String schemaName, String tableName, String serverColumns) { + String[] columnsArr = null; + if (serverColumns != null) + columnsArr = serverColumns.split(","); + + StringBuilder preparedStatementSetter = new StringBuilder(); + + if (columnsArr != null && columnsArr.length > 0) { + for (int i = 0; i < columnsArr.length; i++) { + preparedStatementSetter.append("?"); + if (i < columnsArr.length - 1) { + preparedStatementSetter.append(", "); + } + } + } + + StringBuilder queryBuilder = new StringBuilder("INSERT INTO "); + queryBuilder.append(schemaName).append(".").append(tableName); + queryBuilder.append("("); + queryBuilder.append(serverColumns); + queryBuilder.append(") VALUES ("); + queryBuilder.append(preparedStatementSetter); + queryBuilder.append(")"); + return queryBuilder.toString(); } public String getQueryToUpdateDataToServerDB(String schemaName, String serverColumns, String tableName) { @@ -519,7 +722,17 @@ public String getQueryToUpdateDataToServerDB(String schemaName, String serverCol StringBuilder preparedStatementSetter = new StringBuilder(); - StringBuilder queryBuilder = new StringBuilder(" UPDATE "); + if (columnsArr != null && columnsArr.length > 0) { + for (int i = 0; i < columnsArr.length; i++) { + String column = columnsArr[i].trim(); + preparedStatementSetter.append(column).append(" = ?"); + if (i < columnsArr.length - 1) { + preparedStatementSetter.append(", "); + } + } + } + + StringBuilder queryBuilder = new StringBuilder("UPDATE "); queryBuilder.append(schemaName).append(".").append(tableName); queryBuilder.append(" SET "); queryBuilder.append(preparedStatementSetter); @@ -533,11 +746,13 @@ public String getQueryToUpdateDataToServerDB(String schemaName, String serverCol } else { queryBuilder.append(" AND VanID = ? "); } + logger.info("Test Query Builder: {}", queryBuilder.toString()); return queryBuilder.toString(); } // Helper to get information about failed records (for logging purposes) private String getFailedRecords(int[] results, List data) { + logger.info("Inside get Failed Records"); List failedRecordsInfo = new ArrayList<>(); for (int k = 0; k < results.length; k++) { // In Spring JDBC batchUpdate, a value of Statement.EXECUTE_FAILED or @@ -558,5 +773,4 @@ private String getFailedRecords(int[] results, List data) { return String.join("; ", failedRecordsInfo); } - } \ No newline at end of file diff --git a/src/main/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImpl.java b/src/main/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImpl.java index 6042e57f..122ceb25 100644 --- a/src/main/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImpl.java @@ -784,6 +784,10 @@ public Long saveBenExaminationDetails(JsonObject examinationDetailsOBJ, Long ben @Override @Transactional(rollbackFor = Exception.class) public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Long saveSuccessFlag = null; Long prescriptionID = null; Long investigationSuccessFlag = null; @@ -911,7 +915,17 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } + if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -939,7 +953,7 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { saveSuccessFlag = investigationSuccessFlag; @@ -1422,6 +1436,10 @@ public Long updateGeneralOPDDoctorData(JsonObject requestOBJ, String Authorizati Integer prescriptionSuccessFlag = null; Long referSaveSuccessFlag = null; Integer tcRequestStatusFlag = null; + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } if (requestOBJ != null) { TeleconsultationRequestOBJ tcRequestOBJ = null; @@ -1550,7 +1568,16 @@ public Long updateGeneralOPDDoctorData(JsonObject requestOBJ, String Authorizati tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -1580,7 +1607,7 @@ public Long updateGeneralOPDDoctorData(JsonObject requestOBJ, String Authorizati // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(commonUtilityClass, - isTestPrescribed, isMedicinePrescribed, tcRequestOBJ); + isTestPrescribed, isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { updateSuccessFlag = investigationSuccessFlag; diff --git a/src/main/java/com/iemr/mmu/service/labtechnician/LabTechnicianServiceImpl.java b/src/main/java/com/iemr/mmu/service/labtechnician/LabTechnicianServiceImpl.java index 138f626c..1026f63c 100644 --- a/src/main/java/com/iemr/mmu/service/labtechnician/LabTechnicianServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/labtechnician/LabTechnicianServiceImpl.java @@ -18,7 +18,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see https://www.gnu.org/licenses/. -*/ + */ package com.iemr.mmu.service.labtechnician; import java.util.ArrayList; @@ -42,248 +42,249 @@ @Service public class LabTechnicianServiceImpl implements LabTechnicianService { - private V_benLabTestOrderedDetailsRepo v_benLabTestOrderedDetailsRepo; - private LabResultEntryRepo labResultEntryRepo; - private CommonBenStatusFlowServiceImpl commonBenStatusFlowServiceImpl; - - @Autowired - public void setCommonBenStatusFlowServiceImpl(CommonBenStatusFlowServiceImpl commonBenStatusFlowServiceImpl) { - this.commonBenStatusFlowServiceImpl = commonBenStatusFlowServiceImpl; - } - - @Autowired - public void setLabResultEntryRepo(LabResultEntryRepo labResultEntryRepo) { - this.labResultEntryRepo = labResultEntryRepo; - } - - @Autowired - public void setV_benLabTestOrderedDetailsRepo(V_benLabTestOrderedDetailsRepo v_benLabTestOrderedDetailsRepo) { - this.v_benLabTestOrderedDetailsRepo = v_benLabTestOrderedDetailsRepo; - } - - public String getBenePrescribedProcedureDetails(Long benRegID, Long visitCode) throws Exception { - Map returnOBJ = new HashMap<>(); - - ArrayList radiologyList; - ArrayList laboratoryList; - - ArrayList resultEnteredProcList = new ArrayList<>(); - - ArrayList procedureResults = getLabResultDataForBen(benRegID, visitCode); - - if (procedureResults != null && procedureResults.size() > 0) { - for (LabResultEntry obj : procedureResults) { - resultEnteredProcList.add(obj.getProcedureID()); - } - } - resultEnteredProcList.add(0); - - ArrayList orderedLabTestListLab = v_benLabTestOrderedDetailsRepo - .findDistinctByBeneficiaryRegIDAndVisitCodeAndProcedureTypeAndProcedureIDNotInOrderByProcedureIDAscTestComponentIDAscResultValueAsc( - benRegID, visitCode, "Laboratory", resultEnteredProcList); - - ArrayList orderedLabTestListRadio = v_benLabTestOrderedDetailsRepo - .findDistinctByBeneficiaryRegIDAndVisitCodeAndProcedureTypeAndProcedureIDNotInOrderByProcedureIDAscTestComponentIDAscResultValueAsc( - benRegID, visitCode, "Radiology", resultEnteredProcList); - - radiologyList = getPrescribedLabTestInJsonFormatRadiology(orderedLabTestListRadio); - laboratoryList = getPrescribedLabTestInJsonFormatlaboratory(orderedLabTestListLab); - - returnOBJ.put("radiologyList", radiologyList); - returnOBJ.put("laboratoryList", laboratoryList); - returnOBJ.put("archive", procedureResults); - - return new Gson().toJson(returnOBJ); - } - - private ArrayList getPrescribedLabTestInJsonFormatlaboratory( - ArrayList orderedLabTestList) { - - ArrayList returnOBJ = new ArrayList<>(); - Map procDetails = null; - ArrayList compList = null; - Map compDetails = null; - Map compOption = null; - ArrayList compOptionList = null; - - if (orderedLabTestList != null && orderedLabTestList.size() > 0) { - for (V_benLabTestOrderedDetails obj : orderedLabTestList) { - - if (procDetails == null || (procDetails.containsKey("procedureID") - && !obj.getProcedureID().equals(procDetails.get("procedureID")))) { - procDetails = new HashMap<>(); - compList = new ArrayList<>(); - - procDetails.put("procedureID", obj.getProcedureID()); - procDetails.put("procedureName", obj.getProcedureName()); - procDetails.put("procedureDesc", obj.getProcedureDesc()); - procDetails.put("procedureType", "Laboratory"); - procDetails.put("prescriptionID", obj.getPrescriptionID()); - - procDetails.put("iotProcedureName", obj.getIotProcedureName()); - procDetails.put("procedureCode", obj.getProcedureCode()); - procDetails.put("procedureStartAPI", obj.getProcedureStartAPI()); - procDetails.put("procedureEndAPI", obj.getProcedureEndAPI()); - procDetails.put("procedureStatusAPI", obj.getProcedureStatusAPI()); - procDetails.put("isLabProcedure", obj.getIsLabProcedure()); - procDetails.put("discoveryCode", obj.getDiscoveryCode()); - procDetails.put("isMandatory", obj.getIsMandatory()); - procDetails.put("calibrationStartAPI", obj.getCalibrationStartAPI()); - procDetails.put("calibrationStatusAPI", obj.getCalibrationStatusAPI()); - procDetails.put("calibrationEndAPI", obj.getCalibrationEndAPI()); - // System.out.println(procDetails.get("procedureID")); + + private V_benLabTestOrderedDetailsRepo v_benLabTestOrderedDetailsRepo; + private LabResultEntryRepo labResultEntryRepo; + private CommonBenStatusFlowServiceImpl commonBenStatusFlowServiceImpl; + + @Autowired + public void setCommonBenStatusFlowServiceImpl(CommonBenStatusFlowServiceImpl commonBenStatusFlowServiceImpl) { + this.commonBenStatusFlowServiceImpl = commonBenStatusFlowServiceImpl; + } + + @Autowired + public void setLabResultEntryRepo(LabResultEntryRepo labResultEntryRepo) { + this.labResultEntryRepo = labResultEntryRepo; + } + + @Autowired + public void setV_benLabTestOrderedDetailsRepo(V_benLabTestOrderedDetailsRepo v_benLabTestOrderedDetailsRepo) { + this.v_benLabTestOrderedDetailsRepo = v_benLabTestOrderedDetailsRepo; + } + + public String getBenePrescribedProcedureDetails(Long benRegID, Long visitCode) throws Exception { + Map returnOBJ = new HashMap<>(); + + ArrayList radiologyList; + ArrayList laboratoryList; + + ArrayList resultEnteredProcList = new ArrayList<>(); + + ArrayList procedureResults = getLabResultDataForBen(benRegID, visitCode); + + if (procedureResults != null && procedureResults.size() > 0) { + for (LabResultEntry obj : procedureResults) { + resultEnteredProcList.add(obj.getProcedureID()); + } + } + resultEnteredProcList.add(0); + + ArrayList orderedLabTestListLab = v_benLabTestOrderedDetailsRepo + .findDistinctByBeneficiaryRegIDAndVisitCodeAndProcedureTypeAndProcedureIDNotInOrderByProcedureIDAscTestComponentIDAscResultValueAsc( + benRegID, visitCode, "Laboratory", resultEnteredProcList); + + ArrayList orderedLabTestListRadio = v_benLabTestOrderedDetailsRepo + .findDistinctByBeneficiaryRegIDAndVisitCodeAndProcedureTypeAndProcedureIDNotInOrderByProcedureIDAscTestComponentIDAscResultValueAsc( + benRegID, visitCode, "Radiology", resultEnteredProcList); + + radiologyList = getPrescribedLabTestInJsonFormatRadiology(orderedLabTestListRadio); + laboratoryList = getPrescribedLabTestInJsonFormatlaboratory(orderedLabTestListLab); + + returnOBJ.put("radiologyList", radiologyList); + returnOBJ.put("laboratoryList", laboratoryList); + returnOBJ.put("archive", procedureResults); + + return new Gson().toJson(returnOBJ); + } + + private ArrayList getPrescribedLabTestInJsonFormatlaboratory( + ArrayList orderedLabTestList) { + + ArrayList returnOBJ = new ArrayList<>(); + Map procDetails = null; + ArrayList compList = null; + Map compDetails = null; + Map compOption = null; + ArrayList compOptionList = null; + + if (orderedLabTestList != null && orderedLabTestList.size() > 0) { + for (V_benLabTestOrderedDetails obj : orderedLabTestList) { + + if (procDetails == null || (procDetails.containsKey("procedureID") + && !obj.getProcedureID().equals(procDetails.get("procedureID")))) { + procDetails = new HashMap<>(); + compList = new ArrayList<>(); + + procDetails.put("procedureID", obj.getProcedureID()); + procDetails.put("procedureName", obj.getProcedureName()); + procDetails.put("procedureDesc", obj.getProcedureDesc()); + procDetails.put("procedureType", "Laboratory"); + procDetails.put("prescriptionID", obj.getPrescriptionID()); + + procDetails.put("iotProcedureName", obj.getIotProcedureName()); + procDetails.put("procedureCode", obj.getProcedureCode()); + procDetails.put("procedureStartAPI", obj.getProcedureStartAPI()); + procDetails.put("procedureEndAPI", obj.getProcedureEndAPI()); + procDetails.put("procedureStatusAPI", obj.getProcedureStatusAPI()); + procDetails.put("isLabProcedure", obj.getIsLabProcedure()); + procDetails.put("discoveryCode", obj.getDiscoveryCode()); + procDetails.put("isMandatory", obj.getIsMandatory()); + procDetails.put("calibrationStartAPI", obj.getCalibrationStartAPI()); + procDetails.put("calibrationStatusAPI", obj.getCalibrationStatusAPI()); + procDetails.put("calibrationEndAPI", obj.getCalibrationEndAPI()); + // System.out.println(procDetails.get("procedureID")); // if (procDetails.get("procedureID") instanceof Integer // && obj.getProcedureID() == procDetails.get("procedureID")) { // //System.out.println("hello"); // } - if (procDetails.containsKey("compListDetails") == false) { - compList = new ArrayList<>(); - compDetails = new HashMap<>(); - compDetails.put("testComponentID", obj.getTestComponentID()); - compDetails.put("testComponentName", obj.getTestComponentName()); - compDetails.put("testComponentDesc", obj.getTestComponentDesc()); - compDetails.put("inputType", obj.getInputType()); - compDetails.put("measurementUnit", obj.getMeasurementUnit()); - compDetails.put("range_min", obj.getRange_min()); - compDetails.put("range_normal_min", obj.getRange_normal_min()); - compDetails.put("range_normal_max", obj.getRange_normal_max()); - compDetails.put("range_max", obj.getRange_max()); - compDetails.put("isDecimal", obj.getIsDecimal()); - - compDetails.put("iotComponentName", obj.getIOTComponentName()); - compDetails.put("componentCode", obj.getComponentCode()); - compDetails.put("iotProcedureID", obj.getIOTProcedureID()); - compDetails.put("componentUnit", obj.getComponentUnit()); - - compOption = new HashMap<>(); - compOptionList = new ArrayList<>(); - - compOption.put("name", obj.getResultValue()); - compOptionList.add(compOption); - - compDetails.put("compOpt", compOptionList); - - compList.add(compDetails); - procDetails.put("compListDetails", compList); - - } else { - compDetails = new HashMap<>(); - compDetails.put("testComponentID", obj.getTestComponentID()); - compDetails.put("testComponentName", obj.getTestComponentName()); - compDetails.put("testComponentDesc", obj.getTestComponentDesc()); - compDetails.put("inputType", obj.getInputType()); - compDetails.put("isDecimal", obj.getIsDecimal()); - compDetails.put("measurementUnit", obj.getMeasurementUnit()); - compDetails.put("range_min", obj.getRange_min()); - compDetails.put("range_normal_min", obj.getRange_normal_min()); - compDetails.put("range_normal_max", obj.getRange_normal_max()); - compDetails.put("range_max", obj.getRange_max()); - - compDetails.put("iotComponentName", obj.getIOTComponentName()); - compDetails.put("componentCode", obj.getComponentCode()); - compDetails.put("iotProcedureID", obj.getIOTProcedureID()); - compDetails.put("componentUnit", obj.getComponentUnit()); - - compOption = new HashMap<>(); - compOptionList = new ArrayList<>(); - - compOption.put("name", obj.getResultValue()); - compOptionList.add(compOption); - - compDetails.put("compOpt", compOptionList); - - compList.add(compDetails); - - } - - returnOBJ.add(procDetails); - - } else { - - if (compDetails == null || (compDetails.containsKey("testComponentID") - && !obj.getTestComponentID().equals(compDetails.get("testComponentID")))) { - - compDetails = new HashMap<>(); - compDetails.put("testComponentID", obj.getTestComponentID()); - compDetails.put("testComponentName", obj.getTestComponentName()); - compDetails.put("testComponentDesc", obj.getTestComponentDesc()); - compDetails.put("inputType", obj.getInputType()); - compDetails.put("isDecimal", obj.getIsDecimal()); - compDetails.put("measurementUnit", obj.getMeasurementUnit()); - compDetails.put("range_min", obj.getRange_min()); - compDetails.put("range_normal_min", obj.getRange_normal_min()); - compDetails.put("range_normal_max", obj.getRange_normal_max()); - compDetails.put("range_max", obj.getRange_max()); - - compDetails.put("iotComponentName", obj.getIOTComponentName()); - compDetails.put("componentCode", obj.getComponentCode()); - compDetails.put("iotProcedureID", obj.getIOTProcedureID()); - compDetails.put("componentUnit", obj.getComponentUnit()); - - compOption = new HashMap<>(); - compOptionList = new ArrayList<>(); - - compOption.put("name", obj.getResultValue()); - compOptionList.add(compOption); - - compDetails.put("compOpt", compOptionList); - - compList.add(compDetails); - } else { - compOption = new HashMap<>(); - compOption.put("name", obj.getResultValue()); - compOptionList.add(compOption); - } - - } - } - } - - return returnOBJ; - } - - public ArrayList getLabResultDataForBen(Long benRegID, Long visitCode) throws Exception { - ArrayList procedureResults = new ArrayList<>(); - procedureResults = labResultEntryRepo.findByBeneficiaryRegIDAndVisitCodeOrderByProcedureIDAsc(benRegID, - visitCode); - procedureResults = LabResultEntry.getLabResultEntry(procedureResults); - return procedureResults; - } + if (procDetails.containsKey("compListDetails") == false) { + compList = new ArrayList<>(); + compDetails = new HashMap<>(); + compDetails.put("testComponentID", obj.getTestComponentID()); + compDetails.put("testComponentName", obj.getTestComponentName()); + compDetails.put("testComponentDesc", obj.getTestComponentDesc()); + compDetails.put("inputType", obj.getInputType()); + compDetails.put("measurementUnit", obj.getMeasurementUnit()); + compDetails.put("range_min", obj.getRange_min()); + compDetails.put("range_normal_min", obj.getRange_normal_min()); + compDetails.put("range_normal_max", obj.getRange_normal_max()); + compDetails.put("range_max", obj.getRange_max()); + compDetails.put("isDecimal", obj.getIsDecimal()); + + compDetails.put("iotComponentName", obj.getIOTComponentName()); + compDetails.put("componentCode", obj.getComponentCode()); + compDetails.put("iotProcedureID", obj.getIOTProcedureID()); + compDetails.put("componentUnit", obj.getComponentUnit()); + + compOption = new HashMap<>(); + compOptionList = new ArrayList<>(); + + compOption.put("name", obj.getResultValue()); + compOptionList.add(compOption); + + compDetails.put("compOpt", compOptionList); + + compList.add(compDetails); + procDetails.put("compListDetails", compList); + + } else { + compDetails = new HashMap<>(); + compDetails.put("testComponentID", obj.getTestComponentID()); + compDetails.put("testComponentName", obj.getTestComponentName()); + compDetails.put("testComponentDesc", obj.getTestComponentDesc()); + compDetails.put("inputType", obj.getInputType()); + compDetails.put("isDecimal", obj.getIsDecimal()); + compDetails.put("measurementUnit", obj.getMeasurementUnit()); + compDetails.put("range_min", obj.getRange_min()); + compDetails.put("range_normal_min", obj.getRange_normal_min()); + compDetails.put("range_normal_max", obj.getRange_normal_max()); + compDetails.put("range_max", obj.getRange_max()); + + compDetails.put("iotComponentName", obj.getIOTComponentName()); + compDetails.put("componentCode", obj.getComponentCode()); + compDetails.put("iotProcedureID", obj.getIOTProcedureID()); + compDetails.put("componentUnit", obj.getComponentUnit()); + + compOption = new HashMap<>(); + compOptionList = new ArrayList<>(); + + compOption.put("name", obj.getResultValue()); + compOptionList.add(compOption); + + compDetails.put("compOpt", compOptionList); + + compList.add(compDetails); + + } + + returnOBJ.add(procDetails); + + } else { + + if (compDetails == null || (compDetails.containsKey("testComponentID") + && !obj.getTestComponentID().equals(compDetails.get("testComponentID")))) { + + compDetails = new HashMap<>(); + compDetails.put("testComponentID", obj.getTestComponentID()); + compDetails.put("testComponentName", obj.getTestComponentName()); + compDetails.put("testComponentDesc", obj.getTestComponentDesc()); + compDetails.put("inputType", obj.getInputType()); + compDetails.put("isDecimal", obj.getIsDecimal()); + compDetails.put("measurementUnit", obj.getMeasurementUnit()); + compDetails.put("range_min", obj.getRange_min()); + compDetails.put("range_normal_min", obj.getRange_normal_min()); + compDetails.put("range_normal_max", obj.getRange_normal_max()); + compDetails.put("range_max", obj.getRange_max()); + + compDetails.put("iotComponentName", obj.getIOTComponentName()); + compDetails.put("componentCode", obj.getComponentCode()); + compDetails.put("iotProcedureID", obj.getIOTProcedureID()); + compDetails.put("componentUnit", obj.getComponentUnit()); + + compOption = new HashMap<>(); + compOptionList = new ArrayList<>(); + + compOption.put("name", obj.getResultValue()); + compOptionList.add(compOption); + + compDetails.put("compOpt", compOptionList); + + compList.add(compDetails); + } else { + compOption = new HashMap<>(); + compOption.put("name", obj.getResultValue()); + compOptionList.add(compOption); + } + + } + } + } + + return returnOBJ; + } + + public ArrayList getLabResultDataForBen(Long benRegID, Long visitCode) throws Exception { + ArrayList procedureResults = new ArrayList<>(); + procedureResults = labResultEntryRepo.findByBeneficiaryRegIDAndVisitCodeOrderByProcedureIDAsc(benRegID, + visitCode); + procedureResults = LabResultEntry.getLabResultEntry(procedureResults); + return procedureResults; + } - private ArrayList getPrescribedLabTestInJsonFormatRadiology( - ArrayList orderedLabTestList) { - ArrayList returnOBJ = new ArrayList<>(); - Map procedureCompDetails; + private ArrayList getPrescribedLabTestInJsonFormatRadiology( + ArrayList orderedLabTestList) { + ArrayList returnOBJ = new ArrayList<>(); + Map procedureCompDetails; - Map compDetails; + Map compDetails; - if (orderedLabTestList != null && orderedLabTestList.size() > 0) { - for (V_benLabTestOrderedDetails obj : orderedLabTestList) { - procedureCompDetails = new HashMap<>(); - compDetails = new HashMap<>(); + if (orderedLabTestList != null && orderedLabTestList.size() > 0) { + for (V_benLabTestOrderedDetails obj : orderedLabTestList) { + procedureCompDetails = new HashMap<>(); + compDetails = new HashMap<>(); - procedureCompDetails.put("procedureID", obj.getProcedureID()); - procedureCompDetails.put("procedureName", obj.getProcedureName()); - procedureCompDetails.put("procedureDesc", obj.getProcedureDesc()); - procedureCompDetails.put("procedureType", "Radiology"); - procedureCompDetails.put("prescriptionID", obj.getPrescriptionID()); + procedureCompDetails.put("procedureID", obj.getProcedureID()); + procedureCompDetails.put("procedureName", obj.getProcedureName()); + procedureCompDetails.put("procedureDesc", obj.getProcedureDesc()); + procedureCompDetails.put("procedureType", "Radiology"); + procedureCompDetails.put("prescriptionID", obj.getPrescriptionID()); + + compDetails.put("testComponentID", obj.getTestComponentID()); + compDetails.put("testComponentName", obj.getTestComponentName()); + compDetails.put("testComponentDesc", obj.getTestComponentDesc()); + compDetails.put("inputType", "File"); - compDetails.put("testComponentID", obj.getTestComponentID()); - compDetails.put("testComponentName", obj.getTestComponentName()); - compDetails.put("testComponentDesc", obj.getTestComponentDesc()); - compDetails.put("inputType", "File"); + procedureCompDetails.put("compDetails", compDetails); - procedureCompDetails.put("compDetails", compDetails); + returnOBJ.add(procedureCompDetails); - returnOBJ.add(procedureCompDetails); + } + } - } - } + return returnOBJ; + } - return returnOBJ; - } - - /* + /* * @Transactional(rollbackFor = Exception.class) public Integer * saveLabTestResult(JsonObject requestOBJ) throws Exception { * @@ -330,193 +331,201 @@ private ArrayList getPrescribedLabTestInJsonFormatRadiology( * labResultsListNew.size() == labResultEntryRes.size()){ labResultSaveFlag = 1; * } }else{ labResultSaveFlag = 1; } }else{ labResultSaveFlag = 1; } return * labResultSaveFlag; } - */ - - @Transactional(rollbackFor = Exception.class) - public Integer saveLabTestResult(JsonObject requestOBJ) throws Exception { - - Integer labResultSaveFlag = null; - if (requestOBJ != null && requestOBJ.has("labTestResults") && null != requestOBJ.get("labTestResults") - && !requestOBJ.get("labTestResults").isJsonNull()) { - - WrapperLabResultEntry wrapperLabResults = InputMapper.gson().fromJson(requestOBJ, - WrapperLabResultEntry.class); - - labResultSaveFlag = saveLabTestResult(wrapperLabResults); - - if (labResultSaveFlag == 1) { - int i = updateBenFlowStatusFlagAfterLabResultEntry(wrapperLabResults.getLabCompleted(), - wrapperLabResults.getBenFlowID(), wrapperLabResults.getBeneficiaryRegID(), - wrapperLabResults.getVisitID(), wrapperLabResults.getNurseFlag(), - wrapperLabResults.getDoctorFlag(), wrapperLabResults.getSpecialist_flag()); - } - - } else { - labResultSaveFlag = 1; - } - - return labResultSaveFlag; - } - - private int updateBenFlowStatusFlagAfterLabResultEntry(Boolean isLabDone, Long benFlowID, Long benRegID, - Long benVisitID, Short nurseFlag, Short doctorFlag, Short specialistFlag) { - int returnOBJ = 0; - short labFlag = (short) 0; - - if (specialistFlag != null && specialistFlag == 2) { - if (isLabDone == true) { - specialistFlag = (short) 3; - } else { - labFlag = (short) 1; - } - - returnOBJ = commonBenStatusFlowServiceImpl.updateFlowAfterLabResultEntryForTCSpecialist(benFlowID, benRegID, - specialistFlag); - } else { - if (isLabDone == true) { - if (nurseFlag == 2) { - nurseFlag = 3; - doctorFlag = 1; - } else { - if (doctorFlag == 2) { - doctorFlag = 3; - } + */ + @Transactional(rollbackFor = Exception.class) + public Integer saveLabTestResult(JsonObject requestOBJ) throws Exception { + + Integer labResultSaveFlag = null; + if (requestOBJ != null && requestOBJ.has("labTestResults") && null != requestOBJ.get("labTestResults") + && !requestOBJ.get("labTestResults").isJsonNull()) { + + WrapperLabResultEntry wrapperLabResults = InputMapper.gson().fromJson(requestOBJ, + WrapperLabResultEntry.class); + + labResultSaveFlag = saveLabTestResult(wrapperLabResults); + + if (labResultSaveFlag == 1) { + int i = updateBenFlowStatusFlagAfterLabResultEntry(wrapperLabResults.getLabCompleted(), + wrapperLabResults.getBenFlowID(), wrapperLabResults.getBeneficiaryRegID(), + wrapperLabResults.getVisitID(), wrapperLabResults.getNurseFlag(), + wrapperLabResults.getDoctorFlag(), wrapperLabResults.getSpecialist_flag()); + } + + } else { + labResultSaveFlag = 1; + } + + return labResultSaveFlag; + } + + private int updateBenFlowStatusFlagAfterLabResultEntry(Boolean isLabDone, Long benFlowID, Long benRegID, + Long benVisitID, Short nurseFlag, Short doctorFlag, Short specialistFlag) { + int returnOBJ = 0; + short labFlag = (short) 0; + + if (specialistFlag != null && specialistFlag == 2) { + if (isLabDone == true) { + specialistFlag = (short) 3; + } else { + labFlag = (short) 1; + } + + returnOBJ = commonBenStatusFlowServiceImpl.updateFlowAfterLabResultEntryForTCSpecialist(benFlowID, benRegID, + specialistFlag); + } else { + if (isLabDone == true) { + if (nurseFlag == 2) { + nurseFlag = 3; + doctorFlag = 1; + } else { + if (doctorFlag == 2) { + doctorFlag = 3; + } + } + + labFlag = (short) 1; + } else { + labFlag = (short) 1; + } + returnOBJ = commonBenStatusFlowServiceImpl.updateFlowAfterLabResultEntry(benFlowID, benRegID, benVisitID, + nurseFlag, doctorFlag, labFlag); + } + + return returnOBJ; + } + + public Integer saveLabTestResult(WrapperLabResultEntry wrapperLabResults) { + Integer labResultSaveFlag = null; + Integer radiologyResultSaveFlag = null; + + List labResultsList = wrapperLabResults.getLabTestResults(); + + if ((null != labResultsList && labResultsList.size() > 0) + || (null != wrapperLabResults.getRadiologyTestResults() + && wrapperLabResults.getRadiologyTestResults().size() > 0)) { + List labResultsListNew = new ArrayList(); + for (LabResultEntry labResult : labResultsList) { + List> compResult = labResult.getCompList(); + if (null != compResult && compResult.size() > 0) { + for (Map comp : compResult) { + LabResultEntry labCompResult = new LabResultEntry(); + labCompResult.setPrescriptionID(labResult.getPrescriptionID()); + labCompResult.setProcedureID(labResult.getProcedureID()); + labCompResult.setStripsNotAvailable(labResult.getStripsNotAvailable()); + + if (null != comp.get("testComponentID") + && !String.valueOf(comp.get("testComponentID")).isEmpty() + && ((null != comp.get("testResultValue") + && !comp.get("testResultValue").toString().isEmpty()) + || (null != comp.get("stripsNotAvailable") && comp.get("stripsNotAvailable") + .toString().equalsIgnoreCase("true")))) { + labCompResult.setTestComponentID( + (int) Double.parseDouble(comp.get("testComponentID").toString())); + + if (comp.containsKey("testResultValue") && comp.get("testResultValue") != null + && !String.valueOf(comp.get("testResultValue")).isEmpty()) { + labCompResult.setTestResultValue(comp.get("testResultValue").toString()); + } + + if (comp.containsKey("testResultUnit") && comp.get("testResultUnit") != null + && !String.valueOf(comp.get("testResultUnit")).isEmpty()) { + labCompResult.setTestResultUnit(String.valueOf(comp.get("testResultUnit"))); + } + + if (comp.containsKey("remarks") && comp.get("remarks") != null + && !String.valueOf(comp.get("remarks")).isEmpty()) { + labCompResult.setRemarks(String.valueOf(comp.get("remarks"))); + } + + if (comp.containsKey("stripsNotAvailable") && comp.get("stripsNotAvailable") != null + && comp.get("stripsNotAvailable").toString().equalsIgnoreCase("true")) { + labCompResult.setStripsNotAvailable( + Boolean.valueOf(String.valueOf(comp.get("stripsNotAvailable")))); + } + + if (comp.containsKey("ecgAbnormalities") && comp.get("ecgAbnormalities") != null) { + List ecgAbnormalitiesList = (List) comp.get("ecgAbnormalities"); + // String[] ecgAbnormalities = (String[]) comp.get("ecgAbnormalities"); + + if (ecgAbnormalitiesList != null && ecgAbnormalitiesList.size() > 0) { + StringBuilder sb = new StringBuilder(); + for (String abnormility : ecgAbnormalitiesList) { + sb.append(abnormility).append("||"); + + } + if (sb.length() > 2) { + labCompResult.setEcgAbnormalitiesDB(sb.substring(0, sb.length() - 2)); + } + + } + } + + labCompResult.setBeneficiaryRegID(wrapperLabResults.getBeneficiaryRegID()); + labCompResult.setBenVisitID(wrapperLabResults.getVisitID()); + labCompResult.setVisitCode(wrapperLabResults.getVisitCode()); + labCompResult.setProviderServiceMapID(wrapperLabResults.getProviderServiceMapID()); + labCompResult.setCreatedBy(wrapperLabResults.getCreatedBy()); + + labCompResult.setVanID(wrapperLabResults.getVanID()); + labCompResult.setParkingPlaceID(wrapperLabResults.getParkingPlaceID()); + + labResultsListNew.add(labCompResult); + } + + } + } + } + for (LabResultEntry labResultEntry : wrapperLabResults.getRadiologyTestResults()) { + labResultEntry.setBeneficiaryRegID(wrapperLabResults.getBeneficiaryRegID()); + labResultEntry.setBenVisitID(wrapperLabResults.getVisitID()); + labResultEntry.setVisitCode(wrapperLabResults.getVisitCode()); + labResultEntry.setProviderServiceMapID(wrapperLabResults.getProviderServiceMapID()); + labResultEntry.setCreatedBy(wrapperLabResults.getCreatedBy()); + + labResultEntry.setVanID(wrapperLabResults.getVanID()); + labResultEntry.setParkingPlaceID(wrapperLabResults.getParkingPlaceID()); + + // add file/doc id + String[] docIdArr = labResultEntry.getFileIDs(); + StringBuilder sb = new StringBuilder(); + if (docIdArr != null && docIdArr.length > 0) { + for (String i : docIdArr) { + sb.append(i + ","); + } + } + labResultEntry.setTestReportFilePath(sb.toString()); + + labResultsListNew.add(labResultEntry); + + } + if (null != labResultsListNew && labResultsListNew.size() > 0) { + List labResultEntryRes = (List) labResultEntryRepo.saveAll(labResultsListNew); + + if (labResultEntryRes != null && labResultsListNew.size() == labResultEntryRes.size()) { + for (LabResultEntry result : labResultEntryRes) { + if (result.getID() != null) { + labResultEntryRepo.updateVanSerialNo(result.getID()); + } + } + labResultSaveFlag = 1; + } + } else { + labResultSaveFlag = 1; + } } + return labResultSaveFlag; + } - labFlag = (short) 1; - } else { - labFlag = (short) 1; - } - returnOBJ = commonBenStatusFlowServiceImpl.updateFlowAfterLabResultEntry(benFlowID, benRegID, benVisitID, - nurseFlag, doctorFlag, labFlag); - } - - return returnOBJ; - } - - public Integer saveLabTestResult(WrapperLabResultEntry wrapperLabResults) { - Integer labResultSaveFlag = null; - Integer radiologyResultSaveFlag = null; - - List labResultsList = wrapperLabResults.getLabTestResults(); - - if ((null != labResultsList && labResultsList.size() > 0) - || (null != wrapperLabResults.getRadiologyTestResults() - && wrapperLabResults.getRadiologyTestResults().size() > 0)) { - List labResultsListNew = new ArrayList(); - for (LabResultEntry labResult : labResultsList) { - List> compResult = labResult.getCompList(); - if (null != compResult && compResult.size() > 0) { - for (Map comp : compResult) { - LabResultEntry labCompResult = new LabResultEntry(); - labCompResult.setPrescriptionID(labResult.getPrescriptionID()); - labCompResult.setProcedureID(labResult.getProcedureID()); - labCompResult.setStripsNotAvailable(labResult.getStripsNotAvailable()); - - if (null != comp.get("testComponentID") - && !String.valueOf(comp.get("testComponentID")).isEmpty() - && ((null != comp.get("testResultValue") - && !comp.get("testResultValue").toString().isEmpty()) - || (null != comp.get("stripsNotAvailable") && comp.get("stripsNotAvailable") - .toString().equalsIgnoreCase("true")))) { - labCompResult.setTestComponentID( - (int) Double.parseDouble(comp.get("testComponentID").toString())); - - if (comp.containsKey("testResultValue") && comp.get("testResultValue") != null - && !String.valueOf(comp.get("testResultValue")).isEmpty()) - labCompResult.setTestResultValue(comp.get("testResultValue").toString()); - - if (comp.containsKey("testResultUnit") && comp.get("testResultUnit") != null - && !String.valueOf(comp.get("testResultUnit")).isEmpty()) - labCompResult.setTestResultUnit(String.valueOf(comp.get("testResultUnit"))); - - if (comp.containsKey("remarks") && comp.get("remarks") != null - && !String.valueOf(comp.get("remarks")).isEmpty()) - labCompResult.setRemarks(String.valueOf(comp.get("remarks"))); - - if (comp.containsKey("stripsNotAvailable") && comp.get("stripsNotAvailable") != null - && comp.get("stripsNotAvailable").toString().equalsIgnoreCase("true")) - labCompResult.setStripsNotAvailable( - Boolean.valueOf(String.valueOf(comp.get("stripsNotAvailable")))); - - if (comp.containsKey("ecgAbnormalities") && comp.get("ecgAbnormalities") != null) { - List ecgAbnormalitiesList = (List) comp.get("ecgAbnormalities"); - // String[] ecgAbnormalities = (String[]) comp.get("ecgAbnormalities"); - - if (ecgAbnormalitiesList != null && ecgAbnormalitiesList.size() > 0) { - StringBuilder sb = new StringBuilder(); - for (String abnormility : ecgAbnormalitiesList) { - sb.append(abnormility).append("||"); - - } - if (sb.length() > 2) - labCompResult.setEcgAbnormalitiesDB(sb.substring(0, sb.length() - 2)); - - } - } - - labCompResult.setBeneficiaryRegID(wrapperLabResults.getBeneficiaryRegID()); - labCompResult.setBenVisitID(wrapperLabResults.getVisitID()); - labCompResult.setVisitCode(wrapperLabResults.getVisitCode()); - labCompResult.setProviderServiceMapID(wrapperLabResults.getProviderServiceMapID()); - labCompResult.setCreatedBy(wrapperLabResults.getCreatedBy()); - - labCompResult.setVanID(wrapperLabResults.getVanID()); - labCompResult.setParkingPlaceID(wrapperLabResults.getParkingPlaceID()); - - labResultsListNew.add(labCompResult); - } - - } - } - } - for (LabResultEntry labResultEntry : wrapperLabResults.getRadiologyTestResults()) { - labResultEntry.setBeneficiaryRegID(wrapperLabResults.getBeneficiaryRegID()); - labResultEntry.setBenVisitID(wrapperLabResults.getVisitID()); - labResultEntry.setVisitCode(wrapperLabResults.getVisitCode()); - labResultEntry.setProviderServiceMapID(wrapperLabResults.getProviderServiceMapID()); - labResultEntry.setCreatedBy(wrapperLabResults.getCreatedBy()); - - labResultEntry.setVanID(wrapperLabResults.getVanID()); - labResultEntry.setParkingPlaceID(wrapperLabResults.getParkingPlaceID()); - - // add file/doc id - String[] docIdArr = labResultEntry.getFileIDs(); - StringBuilder sb = new StringBuilder(); - if (docIdArr != null && docIdArr.length > 0) { - for (String i : docIdArr) { - sb.append(i + ","); - } - } - labResultEntry.setTestReportFilePath(sb.toString()); + - labResultsListNew.add(labResultEntry); + public String getLast_3_ArchivedTestVisitList(Long benRegID, Long visitCode) { + ArrayList visitCodeList = labResultEntryRepo.getLast_3_visitForLabTestDone(benRegID, visitCode); - } - if (null != labResultsListNew && labResultsListNew.size() > 0) { - List labResultEntryRes = (List) labResultEntryRepo - .saveAll(labResultsListNew); - if (null != labResultEntryRes && labResultsListNew.size() == labResultEntryRes.size()) { - labResultSaveFlag = 1; - } - } else { - labResultSaveFlag = 1; - } - } else { - labResultSaveFlag = 1; - } - - return labResultSaveFlag; - } - - public String getLast_3_ArchivedTestVisitList(Long benRegID, Long visitCode) { - ArrayList visitCodeList = labResultEntryRepo.getLast_3_visitForLabTestDone(benRegID, visitCode); - - return new Gson().toJson(LabResultEntry.getVisitCodeAndDate(visitCodeList)); - } - - public String getLabResultForVisitcode(Long benRegID, Long visitCode) throws Exception { - ArrayList labResultList = getLabResultDataForBen(benRegID, visitCode); - return new Gson().toJson(labResultList); - } + return new Gson().toJson(LabResultEntry.getVisitCodeAndDate(visitCodeList)); + } + + public String getLabResultForVisitcode(Long benRegID, Long visitCode) throws Exception { + ArrayList labResultList = getLabResultDataForBen(benRegID, visitCode); + return new Gson().toJson(labResultList); + } } diff --git a/src/main/java/com/iemr/mmu/service/ncdCare/NCDCareServiceImpl.java b/src/main/java/com/iemr/mmu/service/ncdCare/NCDCareServiceImpl.java index 9cbe589c..8f18e060 100644 --- a/src/main/java/com/iemr/mmu/service/ncdCare/NCDCareServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/ncdCare/NCDCareServiceImpl.java @@ -106,6 +106,7 @@ public void setCommonDoctorServiceImpl(CommonDoctorServiceImpl commonDoctorServi public void setCommonNurseServiceImpl(CommonNurseServiceImpl commonNurseServiceImpl) { this.commonNurseServiceImpl = commonNurseServiceImpl; } + @Autowired private BeneficiaryFlowStatusRepo beneficiaryFlowStatusRepo; @@ -685,6 +686,10 @@ public String getBeneficiaryVitalDetails(Long beneficiaryRegID, Long visitCode) /// --------------- start of saving doctor data ------------------------ @Transactional(rollbackFor = Exception.class) public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Long saveSuccessFlag = null; Long prescriptionID = null; Long investigationSuccessFlag = null; @@ -842,7 +847,17 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } + if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -868,7 +883,7 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { saveSuccessFlag = diagnosisSuccessFlag; @@ -1142,6 +1157,11 @@ public Long updateNCDCareDoctorData(JsonObject requestOBJ, String Authorization) Long referSaveSuccessFlag = null; Integer tcRequestStatusFlag = null; + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } + if (requestOBJ != null) { TeleconsultationRequestOBJ tcRequestOBJ = null; TcSpecialistSlotBookingRequestOBJ tcSpecialistSlotBookingRequestOBJ = null; @@ -1266,7 +1286,16 @@ public Long updateNCDCareDoctorData(JsonObject requestOBJ, String Authorization) tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -1291,7 +1320,7 @@ public Long updateNCDCareDoctorData(JsonObject requestOBJ, String Authorization) // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(commonUtilityClass, - isTestPrescribed, isMedicinePrescribed, tcRequestOBJ); + isTestPrescribed, isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { updateSuccessFlag = investigationSuccessFlag; diff --git a/src/main/java/com/iemr/mmu/service/ncdscreening/NCDSCreeningDoctorServiceImpl.java b/src/main/java/com/iemr/mmu/service/ncdscreening/NCDSCreeningDoctorServiceImpl.java index 6e470273..07a4a4ee 100644 --- a/src/main/java/com/iemr/mmu/service/ncdscreening/NCDSCreeningDoctorServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/ncdscreening/NCDSCreeningDoctorServiceImpl.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.regex.Pattern; import org.springframework.beans.factory.annotation.Autowired; @@ -76,6 +77,11 @@ public int updateDoctorData(JsonObject requestOBJ) throws Exception { Long referSaveSuccessFlag = null; // Integer tcRequestStatusFlag = null; + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } + if (requestOBJ != null) { TeleconsultationRequestOBJ tcRequestOBJ = null; // TcSpecialistSlotBookingRequestOBJ tcSpecialistSlotBookingRequestOBJ = null; @@ -216,7 +222,16 @@ public int updateDoctorData(JsonObject requestOBJ) throws Exception { tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -240,7 +255,7 @@ public int updateDoctorData(JsonObject requestOBJ) throws Exception { // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(commonUtilityClass, - isTestPrescribed, isMedicinePrescribed, tcRequestOBJ); + isTestPrescribed, isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { updateSuccessFlag = 1; diff --git a/src/main/java/com/iemr/mmu/service/ncdscreening/NCDScreeningServiceImpl.java b/src/main/java/com/iemr/mmu/service/ncdscreening/NCDScreeningServiceImpl.java index 9f1018a7..03b434cf 100644 --- a/src/main/java/com/iemr/mmu/service/ncdscreening/NCDScreeningServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/ncdscreening/NCDScreeningServiceImpl.java @@ -268,10 +268,20 @@ private Long saveNCDNurseTMReferred(JsonObject requestOBJ, String authorization) tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); - if (r > 0 && r != null) { - prescriptionSuccessFlag = r; - } + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } + + if (r > 0 && r != null) { + prescriptionSuccessFlag = r; + } } else { prescriptionSuccessFlag = 1; @@ -1169,6 +1179,10 @@ public Long UpdateIDRSScreen(JsonObject idrsOBJ) throws Exception { @Transactional(rollbackFor = Exception.class) public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Long saveSuccessFlag = null; Long prescriptionID = null; Long investigationSuccessFlag = null; @@ -1319,7 +1333,16 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -1347,7 +1370,7 @@ public Long saveDoctorData(JsonObject requestOBJ, String Authorization) throws E // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { diff --git a/src/main/java/com/iemr/mmu/service/pnc/PNCServiceImpl.java b/src/main/java/com/iemr/mmu/service/pnc/PNCServiceImpl.java index 6ee2a83f..a2d627f1 100644 --- a/src/main/java/com/iemr/mmu/service/pnc/PNCServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/pnc/PNCServiceImpl.java @@ -237,6 +237,10 @@ private int updateBenStatusFlagAfterNurseSaveSuccess(JsonObject tmpOBJ, Long ben @Transactional(rollbackFor = Exception.class) public Long savePNCDoctorData(JsonObject requestOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Long saveSuccessFlag = null; Long prescriptionID = null; Long investigationSuccessFlag = null; @@ -358,7 +362,16 @@ public Long savePNCDoctorData(JsonObject requestOBJ, String Authorization) throw tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -383,7 +396,7 @@ public Long savePNCDoctorData(JsonObject requestOBJ, String Authorization) throw // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { saveSuccessFlag = diagnosisSuccessFlag; @@ -1428,6 +1441,11 @@ public Long updatePNCDoctorData(JsonObject requestOBJ, String Authorization) thr Long referSaveSuccessFlag = null; Integer tcRequestStatusFlag = null; + Boolean doctorSignatureFlag = false; + if (requestOBJ.has("doctorSignatureFlag") && !requestOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = requestOBJ.get("doctorSignatureFlag").getAsBoolean(); + } + if (requestOBJ != null) { TeleconsultationRequestOBJ tcRequestOBJ = null; TcSpecialistSlotBookingRequestOBJ tcSpecialistSlotBookingRequestOBJ = null; @@ -1550,7 +1568,16 @@ public Long updatePNCDoctorData(JsonObject requestOBJ, String Authorization) thr tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store IDs in JsonObject + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + requestOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -1576,7 +1603,7 @@ public Long updatePNCDoctorData(JsonObject requestOBJ, String Authorization) thr // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(commonUtilityClass, - isTestPrescribed, isMedicinePrescribed, tcRequestOBJ); + isTestPrescribed, isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { updateSuccessFlag = investigationSuccessFlag; diff --git a/src/main/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImpl.java b/src/main/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImpl.java index 0078c596..2062f68a 100644 --- a/src/main/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImpl.java @@ -31,6 +31,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.gson.Gson; import com.google.gson.JsonArray; @@ -84,6 +86,8 @@ public class QuickConsultationServiceImpl implements QuickConsultationService { @Autowired private TeleConsultationServiceImpl teleConsultationServiceImpl; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired public void setGeneralOPDDoctorServiceImpl(GeneralOPDDoctorServiceImpl generalOPDDoctorServiceImpl) { this.generalOPDDoctorServiceImpl = generalOPDDoctorServiceImpl; @@ -160,6 +164,7 @@ public void setPrescriptionDetailRepo(PrescriptionDetailRepo prescriptionDetailR public void setExternalTestOrderRepo(ExternalTestOrderRepo externalTestOrderRepo) { this.externalTestOrderRepo = externalTestOrderRepo; } + @Autowired private BeneficiaryFlowStatusRepo beneficiaryFlowStatusRepo; @@ -170,10 +175,18 @@ public Long saveBeneficiaryChiefComplaint(JsonObject caseSheet) { if (benChiefComplaints != null && benChiefComplaints.size() > 0) { List chiefComplaints = (List) benChiefComplaintRepo .saveAll(benChiefComplaints); - - if (benChiefComplaints.size() == chiefComplaints.size()) { - returnOBJ = new Long(1); - } + if (benChiefComplaints.size() == chiefComplaints.size()) { + // Update vanSerialNo for each saved record + for (BenChiefComplaint complaint : chiefComplaints) { + if (complaint.getBenChiefComplaintID() != null) { + benChiefComplaintRepo.updateVanSerialNo(complaint.getBenChiefComplaintID()); + } + } + returnOBJ = new Long(1); + } + // if (benChiefComplaints.size() == chiefComplaints.size()) { + // returnOBJ = new Long(1); + // } } else { returnOBJ = new Long(1); } @@ -345,6 +358,11 @@ private int updateBenStatusFlagAfterNurseSaveSuccess(BeneficiaryVisitDetail benV @Override public Integer quickConsultDoctorDataInsert(JsonObject quickConsultDoctorOBJ, String Authorization) throws Exception { + Boolean doctorSignatureFlag = false; + if (quickConsultDoctorOBJ.has("doctorSignatureFlag") + && !quickConsultDoctorOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = quickConsultDoctorOBJ.get("doctorSignatureFlag").getAsBoolean(); + } Integer returnOBJ = 0; Integer prescriptionSuccessFlag = null; Integer investigationSuccessFlag = null; @@ -426,7 +444,19 @@ public Integer quickConsultDoctorDataInsert(JsonObject quickConsultDoctorOBJ, St tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + + // Use the modified method to get both count and IDs + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store the drug IDs in the JsonObject for later retrieval in controller + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + quickConsultDoctorOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } + if (r > 0 && r != null) { prescriptionSuccessFlag = r; } @@ -476,7 +506,7 @@ public Integer quickConsultDoctorDataInsert(JsonObject quickConsultDoctorOBJ, St // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { returnOBJ = 1; @@ -555,6 +585,12 @@ public Long updateGeneralOPDQCDoctorData(JsonObject quickConsultDoctorOBJ, Strin Long referupdateSuccessFlag = null; Integer tcRequestStatusFlag = null; + Boolean doctorSignatureFlag = false; + if (quickConsultDoctorOBJ.has("doctorSignatureFlag") + && !quickConsultDoctorOBJ.get("doctorSignatureFlag").isJsonNull()) { + doctorSignatureFlag = quickConsultDoctorOBJ.get("doctorSignatureFlag").getAsBoolean(); + } + TeleconsultationRequestOBJ tcRequestOBJ = null; TcSpecialistSlotBookingRequestOBJ tcSpecialistSlotBookingRequestOBJ = null; CommonUtilityClass commonUtilityClass = InputMapper.gson().fromJson(quickConsultDoctorOBJ, @@ -645,7 +681,19 @@ public Long updateGeneralOPDQCDoctorData(JsonObject quickConsultDoctorOBJ, Strin tmpObj.setVisitCode(commonUtilityClass.getVisitCode()); tmpObj.setProviderServiceMapID(commonUtilityClass.getProviderServiceMapID()); } - Integer r = commonNurseServiceImpl.saveBenPrescribedDrugsList(prescribedDrugDetailList); + + // Use the modified method to get both count and IDs + Map drugSaveResult = commonNurseServiceImpl + .saveBenPrescribedDrugsList(prescribedDrugDetailList); + Integer r = (Integer) drugSaveResult.get("count"); + List prescribedDrugIDs = (List) drugSaveResult.get("prescribedDrugIDs"); + + // Store the drug IDs in the JsonObject for later retrieval in controller + if (prescribedDrugIDs != null && !prescribedDrugIDs.isEmpty()) { + Gson gson = new Gson(); + quickConsultDoctorOBJ.add("savedDrugIDs", gson.toJsonTree(prescribedDrugIDs)); + } + if (r > 0 && r != null) { prescribedDrugSuccessFlag = new Long(1); } @@ -694,7 +742,7 @@ public Long updateGeneralOPDQCDoctorData(JsonObject quickConsultDoctorOBJ, Strin // call method to update beneficiary flow table int i = commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(commonUtilityClass, isTestPrescribed, - isMedicinePrescribed, tcRequestOBJ); + isMedicinePrescribed, tcRequestOBJ, doctorSignatureFlag); if (i > 0) { updateSuccessFlag = benChiefComplaintID; diff --git a/src/main/java/com/iemr/mmu/utils/JwtAuthenticationUtil.java b/src/main/java/com/iemr/mmu/utils/JwtAuthenticationUtil.java index 83711a10..9733900e 100644 --- a/src/main/java/com/iemr/mmu/utils/JwtAuthenticationUtil.java +++ b/src/main/java/com/iemr/mmu/utils/JwtAuthenticationUtil.java @@ -2,6 +2,7 @@ import java.util.Optional; import java.util.concurrent.TimeUnit; +import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,6 +77,10 @@ public boolean validateUserIdAndJwtToken(String jwtToken) throws IEMRException { // Check if user data is present in Redis Users user = getUserFromCache(userId); + if(user != null) { + // Store roles in security context or cache for authorization + List roles = getUserRoles(user.getUserID()); + } if (user == null) { // If not in Redis, fetch from DB and cache the result user = fetchUserFromDB(userId); @@ -129,4 +134,19 @@ private Users fetchUserFromDB(String userId) { return null; } + + public List getUserRoles(Long userId) throws IEMRException { + if (null == userId || userId <= 0) { + throw new IEMRException("Invalid User ID : " + userId); + } + try { + List role = userLoginRepo.getRoleNamebyUserId(userId); + if (null == role || role.isEmpty()) { + throw new IEMRException("No role found for userId : " + userId); + } + return role; + } catch (Exception e) { + throw new IEMRException("Failed to retrieverole for usedId : " + userId + " error : " + e.getMessage()); + } + } } diff --git a/src/main/java/com/iemr/mmu/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/mmu/utils/JwtUserIdValidationFilter.java index fbeab7ad..4be94681 100644 --- a/src/main/java/com/iemr/mmu/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/mmu/utils/JwtUserIdValidationFilter.java @@ -5,7 +5,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; import com.iemr.mmu.utils.http.AuthorizationHeaderRequestWrapper; @@ -37,26 +36,56 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo HttpServletResponse response = (HttpServletResponse) servletResponse; String origin = request.getHeader("Origin"); - - if (origin != null && isOriginAllowed(origin)) { - response.setHeader("Access-Control-Allow-Origin", origin); - response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); - response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept, Jwttoken,serverAuthorization, ServerAuthorization, serverauthorization, Serverauthorization"); - response.setHeader("Vary", "Origin"); - response.setHeader("Access-Control-Allow-Credentials", "true"); + String method = request.getMethod(); + String uri = request.getRequestURI(); + + logger.debug("Incoming Origin: {}", origin); + logger.debug("Request Method: {}", method); + logger.debug("Request URI: {}", uri); + logger.debug("Allowed Origins Configured: {}", allowedOrigins); + + if ("OPTIONS".equalsIgnoreCase(method)) { + if (origin == null) { + logger.warn("BLOCKED - OPTIONS request without Origin header | Method: {} | URI: {}", method, uri); + response.sendError(HttpServletResponse.SC_FORBIDDEN, "OPTIONS request requires Origin header"); + return; + } + if (!isOriginAllowed(origin)) { + logger.warn("BLOCKED - Unauthorized Origin | Origin: {} | Method: {} | URI: {}", origin, method, uri); + response.sendError(HttpServletResponse.SC_FORBIDDEN, "Origin not allowed"); + return; + } } else { - logger.warn("Origin [{}] is NOT allowed. CORS headers NOT added.", origin); - } - - if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { - logger.info("OPTIONS request - skipping JWT validation"); - response.setStatus(HttpServletResponse.SC_OK); - return; + // For non-OPTIONS requests, validate origin if present + if (origin != null && !isOriginAllowed(origin)) { + logger.warn("BLOCKED - Unauthorized Origin | Origin: {} | Method: {} | URI: {}", origin, method, uri); + response.sendError(HttpServletResponse.SC_FORBIDDEN, "Origin not allowed"); + return; + } } String path = request.getRequestURI(); String contextPath = request.getContextPath(); + // Set CORS headers and handle OPTIONS request only if origin is valid and + // allowed + if (origin != null && isOriginAllowed(origin)) { + addCorsHeaders(response, origin); + logger.info("Origin Validated | Origin: {} | Method: {} | URI: {}", origin, method, uri); + + if ("OPTIONS".equalsIgnoreCase(method)) { + // OPTIONS (preflight) - respond with full allowed methods + response.setStatus(HttpServletResponse.SC_OK); + return; + } + } else { + logger.warn("Origin [{}] is NOT allowed. CORS headers NOT added.", origin); + + if ("OPTIONS".equalsIgnoreCase(method)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "Origin not allowed for OPTIONS request"); + return; + } + } // Log cookies for debugging Cookie[] cookies = request.getCookies(); if (cookies != null) { @@ -126,6 +155,15 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: " + e.getMessage()); } } + + private void addCorsHeaders(HttpServletResponse response, String origin) { + response.setHeader("Access-Control-Allow-Origin", origin); // Never use wildcard + response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS"); + response.setHeader("Access-Control-Allow-Headers", + "Authorization, Content-Type, Accept, Jwttoken, serverAuthorization, ServerAuthorization, serverauthorization, Serverauthorization"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Max-Age", "3600"); + } private boolean isOriginAllowed(String origin) { if (origin == null || allowedOrigins == null || allowedOrigins.trim().isEmpty()) { @@ -139,8 +177,7 @@ private boolean isOriginAllowed(String origin) { String regex = pattern .replace(".", "\\.") .replace("*", ".*") - .replace("http://localhost:.*", "http://localhost:\\d+"); // special case for wildcard port - + .replace("http://localhost:.*", "http://localhost:\\d+"); boolean matched = origin.matches(regex); return matched; }); @@ -174,4 +211,4 @@ private void clearUserIdCookie(HttpServletResponse response) { cookie.setMaxAge(0); // Invalidate the cookie response.addCookie(cookie); } -} \ No newline at end of file +} diff --git a/src/main/java/com/iemr/mmu/utils/JwtUtil.java b/src/main/java/com/iemr/mmu/utils/JwtUtil.java index aaa2b07e..4774233c 100644 --- a/src/main/java/com/iemr/mmu/utils/JwtUtil.java +++ b/src/main/java/com/iemr/mmu/utils/JwtUtil.java @@ -2,11 +2,9 @@ import java.util.function.Function; import javax.crypto.SecretKey; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; - import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; @@ -59,11 +57,20 @@ public T extractClaim(String token, Function claimsResolver) { return claims != null ? claimsResolver.apply(claims) : null; } - private Claims extractAllClaims(String token) { + public Claims extractAllClaims(String token) { return Jwts.parser() .verifyWith(getSigningKey()) .build() .parseSignedClaims(token) .getPayload(); } + + + public String getUserIdFromToken(String token) { + Claims claims = validateToken(token); + if (claims == null) { + return null; + } + return claims.get("userId", String.class); + } } diff --git a/src/main/java/com/iemr/mmu/utils/exception/CustomAccessDeniedHandler.java b/src/main/java/com/iemr/mmu/utils/exception/CustomAccessDeniedHandler.java new file mode 100644 index 00000000..4a53a12f --- /dev/null +++ b/src/main/java/com/iemr/mmu/utils/exception/CustomAccessDeniedHandler.java @@ -0,0 +1,28 @@ +package com.iemr.mmu.utils.exception; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.util.Map; + +@Component +public class CustomAccessDeniedHandler implements AccessDeniedHandler { + + private static final ObjectMapper mapper = new ObjectMapper(); + @Override + public void handle(HttpServletRequest request, + HttpServletResponse response, + AccessDeniedException accessDeniedException) throws IOException { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); // 403 + response.setContentType("application/json"); + Map errorResponse = Map.of("error" , "Forbidden", + "message","Access denied"); + response.getWriter().write(mapper.writeValueAsString(errorResponse)); + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/mmu/utils/exception/CustomAuthenticationEntryPoint.java b/src/main/java/com/iemr/mmu/utils/exception/CustomAuthenticationEntryPoint.java new file mode 100644 index 00000000..9a297fa2 --- /dev/null +++ b/src/main/java/com/iemr/mmu/utils/exception/CustomAuthenticationEntryPoint.java @@ -0,0 +1,28 @@ +package com.iemr.mmu.utils.exception; + +import java.io.IOException; + +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import com.google.gson.JsonObject; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +@Component +public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, + HttpServletResponse response, + AuthenticationException authException) throws IOException { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 401 + response.setContentType("application/json"); + JsonObject json = new JsonObject(); + json.addProperty("error", "Unauthorized"); + json.addProperty("message", authException.getMessage()); + response.getWriter().write(json.toString()); + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/mmu/utils/http/HttpInterceptor.java b/src/main/java/com/iemr/mmu/utils/http/HttpInterceptor.java index 9a5adeba..2eb39c9a 100644 --- a/src/main/java/com/iemr/mmu/utils/http/HttpInterceptor.java +++ b/src/main/java/com/iemr/mmu/utils/http/HttpInterceptor.java @@ -21,11 +21,14 @@ */ package com.iemr.mmu.utils.http; +import java.util.Arrays; + import javax.ws.rs.core.MediaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; @@ -43,6 +46,9 @@ public class HttpInterceptor implements HandlerInterceptor { Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + @Value("${cors.allowed-origins}") + private String allowedOrigins; + @Autowired public void setValidator(Validator validator) { this.validator = validator; @@ -111,7 +117,14 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons response.setContentType(MediaType.APPLICATION_JSON); response.setContentLength(output.toString().length()); - response.setHeader("Access-Control-Allow-Origin", "*"); + + String origin = request.getHeader("Origin"); + if (origin != null && isOriginAllowed(origin)) { + response.setHeader("Access-Control-Allow-Origin", origin); + response.setHeader("Access-Control-Allow-Credentials", "true"); + } else if (origin != null) { + logger.warn("CORS headers NOT added for error response | Unauthorized origin: {}", origin); + } response.getOutputStream().print(output.toString()); status = false; @@ -141,4 +154,20 @@ public void afterCompletion(HttpServletRequest request, HttpServletResponse resp logger.debug("In afterCompletion Request Completed"); } + private boolean isOriginAllowed(String origin) { + if (origin == null || allowedOrigins == null || allowedOrigins.trim().isEmpty()) { + return false; + } + + return Arrays.stream(allowedOrigins.split(",")) + .map(String::trim) + .anyMatch(pattern -> { + String regex = pattern + .replace(".", "\\.") + .replace("*", ".*") + .replace("http://localhost:.*", "http://localhost:\\d+"); + return origin.matches(regex); + }); + } + } diff --git a/src/main/java/com/iemr/mmu/utils/mapper/RoleAuthenticationFilter.java b/src/main/java/com/iemr/mmu/utils/mapper/RoleAuthenticationFilter.java new file mode 100644 index 00000000..a28035e3 --- /dev/null +++ b/src/main/java/com/iemr/mmu/utils/mapper/RoleAuthenticationFilter.java @@ -0,0 +1,103 @@ +package com.iemr.mmu.utils.mapper; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import com.iemr.mmu.service.common.transaction.CommonServiceImpl; +import com.iemr.mmu.service.login.IemrMmuLoginServiceImpl; +import com.iemr.mmu.utils.CookieUtil; +import com.iemr.mmu.utils.JwtAuthenticationUtil; +import com.iemr.mmu.utils.JwtUserIdValidationFilter; +import com.iemr.mmu.utils.JwtUtil; +import com.iemr.mmu.utils.redis.RedisStorage; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.io.IOException; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +@Component +public class RoleAuthenticationFilter extends OncePerRequestFilter { + Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + + @Autowired + private JwtUtil jwtUtil; + + @Autowired + private RedisStorage redisService; + + @Autowired + private JwtAuthenticationUtil userService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException, java.io.IOException { + List authRoles = null; + try { + String jwtFromCookie = CookieUtil.getJwtTokenFromCookie(request); + String jwtFromHeader = request.getHeader("Jwttoken"); + + String jwtToken = jwtFromCookie != null ? jwtFromCookie : jwtFromHeader; + if(null == jwtToken || jwtToken.trim().isEmpty()) { + filterChain.doFilter(request, response); + return; + } + Claims extractAllClaims = jwtUtil.extractAllClaims(jwtToken); + if(null == extractAllClaims) { + filterChain.doFilter(request, response); + return; + } + Object userIdObj = extractAllClaims.get("userId"); + String userId = userIdObj != null ? userIdObj.toString() : null; + if (null == userId || userId.trim().isEmpty()) { + filterChain.doFilter(request, response); + return; + } + Long userIdLong; + try { + userIdLong=Long.valueOf(userId); + }catch (NumberFormatException ex) { + logger.warn("Invalid userId format: {}",userId); + filterChain.doFilter(request, response); + return; + } + authRoles = redisService.getUserRoleFromCache(userIdLong); + if (authRoles == null || authRoles.isEmpty()) { + List roles = userService.getUserRoles(userIdLong); // assuming this returns multiple roles + authRoles = roles.stream() + .filter(Objects::nonNull) + .map(String::trim) + .map(role -> "ROLE_" + role.toUpperCase().replace(" ", "_")) + .collect(Collectors.toList()); + redisService.cacheUserRoles(userIdLong, authRoles); + } + + List authorities = authRoles.stream() + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userId, null, authorities); + SecurityContextHolder.getContext().setAuthentication(auth); + } catch (Exception e) { + logger.error("Authentication filter error for request {}: {}", request.getRequestURI(), e.getMessage()); + SecurityContextHolder.clearContext(); + } finally { + filterChain.doFilter(request, response); + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/mmu/utils/mapper/SecurityConfig.java b/src/main/java/com/iemr/mmu/utils/mapper/SecurityConfig.java new file mode 100644 index 00000000..3fe096d2 --- /dev/null +++ b/src/main/java/com/iemr/mmu/utils/mapper/SecurityConfig.java @@ -0,0 +1,53 @@ +package com.iemr.mmu.utils.mapper; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.csrf.CookieCsrfTokenRepository; + +import com.iemr.mmu.utils.exception.CustomAuthenticationEntryPoint; +import com.iemr.mmu.utils.exception.CustomAccessDeniedHandler; + + +@Configuration +@EnableMethodSecurity +@EnableWebSecurity +public class SecurityConfig { + private final RoleAuthenticationFilter roleAuthenticationFilter; + private final CustomAuthenticationEntryPoint customAuthenticationEntryPoint; + private final CustomAccessDeniedHandler customAccessDeniedHandler; + + public SecurityConfig(RoleAuthenticationFilter roleAuthenticationFilter, + CustomAuthenticationEntryPoint customAuthenticationEntryPoint, + CustomAccessDeniedHandler customAccessDeniedHandler) { + this.roleAuthenticationFilter = roleAuthenticationFilter; + this.customAuthenticationEntryPoint = customAuthenticationEntryPoint; + this.customAccessDeniedHandler = customAccessDeniedHandler; + } + +@Bean +public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + CookieCsrfTokenRepository csrfTokenRepository = new CookieCsrfTokenRepository(); + csrfTokenRepository.setCookieHttpOnly(true); + csrfTokenRepository.setCookiePath("/"); + http + .csrf(csrf -> csrf.disable()) + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests(auth -> auth + .requestMatchers("/user/**").permitAll() + .anyRequest().authenticated() + ) + .exceptionHandling(ex -> ex + .authenticationEntryPoint(customAuthenticationEntryPoint) + .accessDeniedHandler(customAccessDeniedHandler) + ) + .addFilterBefore(roleAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); + + return http.build(); +} +} diff --git a/src/main/java/com/iemr/mmu/utils/redis/RedisStorage.java b/src/main/java/com/iemr/mmu/utils/redis/RedisStorage.java index 5e80ac6d..ed8d170e 100644 --- a/src/main/java/com/iemr/mmu/utils/redis/RedisStorage.java +++ b/src/main/java/com/iemr/mmu/utils/redis/RedisStorage.java @@ -21,12 +21,15 @@ */ package com.iemr.mmu.utils.redis; +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisStringCommands.SetOption; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.types.Expiration; import org.springframework.stereotype.Component; @@ -106,4 +109,27 @@ public String updateObject(String key, String value , int expirationTime) throws return key; } + @Autowired + private RedisTemplate redisTemplate; + + public void cacheUserRoles(Long userId, List roles) { + try { + String key = "roles:" + userId; + redisTemplate.delete(key); // Clear previous cache + redisTemplate.opsForList().rightPushAll(key, roles); + } catch (Exception e) { + logger.warn("Failed to cache role for user {} : {} ", userId, e.getMessage()); + } + + } + + public List getUserRoleFromCache(Long userId) { + try { + return redisTemplate.opsForList().range("roles:" + userId, 0, -1); + } catch (Exception e) { + logger.warn("Failed to retrieve cached role for user {} : {} ", userId, e.getMessage()); + return null; + } + } + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2e6ce84f..c2e28213 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,10 +4,10 @@ spring.datasource.tomcat.max-idle=15 spring.datasource.tomcat.min-idle=5 spring.datasource.tomcat.min-evictable-idle-time-millis=15000 spring.datasource.tomcat.remove-abandoned=true -spring.datasource.tomcat.remove-abandoned-timeout=1800 +spring.datasource.tomcat.remove-abandoned-timeout=300 spring.datasource.tomcat.logAbandoned=true spring.datasource.continue-on-error=true -spring.datasource.tomcat.max-wait=60000 +spring.datasource.tomcat.max-wait=180000 ## below line added by neeraj for reset abandoned DB connection from connection pool @@ -53,3 +53,16 @@ spring.datasource.tomcat.testOnBorrow=true spring.datasource.tomcat.validationQuery=SELECT 1 spring.datasource.tomcat.validationInterval=30000 # 30 sec logging.level.org.apache.tomcat.jdbc.pool=DEBUG + +# Connection timeout - time to establish connection +spring.mvc.async.request-timeout=600000 +# HTTP client timeouts for RestTemplate +rest.connection.timeout=60000 +rest.read.timeout=600000 +rest.socket.timeout=600000 + + +# ============= SERVER TIMEOUT ============= +# Tomcat connection timeout +server.connection-timeout=600000 +server.tomcat.connection-timeout=600000 diff --git a/src/test/java/com/iemr/mmu/service/anc/ANCServiceImplTest.java b/src/test/java/com/iemr/mmu/service/anc/ANCServiceImplTest.java index f901ec9c..524eef0a 100644 --- a/src/test/java/com/iemr/mmu/service/anc/ANCServiceImplTest.java +++ b/src/test/java/com/iemr/mmu/service/anc/ANCServiceImplTest.java @@ -48,6 +48,13 @@ import java.util.*; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; class ANCServiceImplTest { @@ -696,11 +703,11 @@ void testUpdateANCDoctorData_allBranchesSuccess() throws Exception { when(commonDoctorServiceImpl.callTmForSpecialistSlotBook(any(), any())).thenReturn(1); when(teleConsultationServiceImpl.createTCRequest(any())).thenReturn(1); when(commonDoctorServiceImpl.updateDocFindings(any())).thenReturn(1); - when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); when(commonNurseServiceImpl.updatePrescription(any())).thenReturn(1); when(ancDoctorServiceImpl.updateBenANCDiagnosis(any())).thenReturn(1); when(commonNurseServiceImpl.saveBenInvestigation(any())).thenReturn(1L); - when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(1); + when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(commonDoctorServiceImpl.updateBenReferDetails(any())).thenReturn(1L); try { @@ -726,11 +733,11 @@ void testUpdateANCDoctorData_failureBranches() throws Exception { when(commonDoctorServiceImpl.callTmForSpecialistSlotBook(any(), any())).thenReturn(0); when(teleConsultationServiceImpl.createTCRequest(any())).thenReturn(0); when(commonDoctorServiceImpl.updateDocFindings(any())).thenReturn(0); - when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(0); + when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(0); when(commonNurseServiceImpl.updatePrescription(any())).thenReturn(0); when(ancDoctorServiceImpl.updateBenANCDiagnosis(any())).thenReturn(0); when(commonNurseServiceImpl.saveBenInvestigation(any())).thenReturn(0L); - when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(0); + when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(commonDoctorServiceImpl.updateBenReferDetails(any())).thenReturn(0L); try { @@ -759,13 +766,13 @@ void testSaveANCDoctorData_allBranchesSuccess() throws Exception { when(commonDoctorServiceImpl.callTmForSpecialistSlotBook(any(), any())).thenReturn(1); when(teleConsultationServiceImpl.createTCRequest(any())).thenReturn(1); when(commonDoctorServiceImpl.saveDocFindings(any())).thenReturn(1); - when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); when(commonNurseServiceImpl.savePrescriptionDetailsAndGetPrescriptionID( any(Long.class), any(Long.class), any(Integer.class), any(String.class), any(String.class), any(Long.class), any(Integer.class), any(Integer.class), any(ArrayList.class) )).thenReturn(1L); when(commonNurseServiceImpl.saveBenInvestigation(any())).thenReturn(1L); - when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(1); + when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(ancDoctorServiceImpl.saveBenANCDiagnosis(any(), any())).thenReturn(1L); when(commonDoctorServiceImpl.saveBenReferDetails(any())).thenReturn(1L); @@ -793,13 +800,13 @@ void testSaveANCDoctorData_failureBranches() throws Exception { when(commonDoctorServiceImpl.callTmForSpecialistSlotBook(any(), any())).thenReturn(0); when(teleConsultationServiceImpl.createTCRequest(any())).thenReturn(0); when(commonDoctorServiceImpl.saveDocFindings(any())).thenReturn(0); - when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(0); + when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(0); when(commonNurseServiceImpl.savePrescriptionDetailsAndGetPrescriptionID( any(Long.class), any(Long.class), any(Integer.class), any(String.class), any(String.class), any(Long.class), any(Integer.class), any(Integer.class), any(ArrayList.class) )).thenReturn(0L); when(commonNurseServiceImpl.saveBenInvestigation(any())).thenReturn(0L); - when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(0); + when(commonNurseServiceImpl.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(ancDoctorServiceImpl.saveBenANCDiagnosis(any(), any())).thenReturn(0L); when(commonDoctorServiceImpl.saveBenReferDetails(any())).thenReturn(0L); @@ -1099,10 +1106,10 @@ void testUpdateANCDoctorData_allBranches() throws Exception { // Mock all service calls to return success when(doctorService.updateDocFindings(any())).thenReturn(1); - when(doctorService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(doctorService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); when(nurseService.savePrescriptionDetailsAndGetPrescriptionID(any(), any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(1L); when(nurseService.saveBenInvestigation(any())).thenReturn(1L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(1); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(ancDoctorService.updateBenANCDiagnosis(any())).thenReturn(1); when(doctorService.updateBenReferDetails(any())).thenReturn(1L); @@ -1244,10 +1251,10 @@ void testSaveANCDoctorData_comprehensiveSuccess() throws Exception { when(doctorService.callTmForSpecialistSlotBook(any(), any())).thenReturn(1); when(teleService.createTCRequest(any())).thenReturn(1); when(doctorService.saveDocFindings(any())).thenReturn(1); - when(doctorService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(doctorService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); when(nurseService.savePrescriptionDetailsAndGetPrescriptionID(any(), any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(1L); when(nurseService.saveBenInvestigation(any())).thenReturn(1L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(1); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(ancDoctorService.saveBenANCDiagnosis(any(), any())).thenReturn(1L); when(doctorService.saveBenReferDetails(any())).thenReturn(1L); @@ -1338,9 +1345,9 @@ void testSaveANCDoctorData_prescriptionLogic() throws Exception { when(doctorService.saveDocFindings(any())).thenReturn(1); when(nurseService.savePrescriptionDetailsAndGetPrescriptionID(any(), any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(100L); when(nurseService.saveBenInvestigation(any())).thenReturn(1L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(1); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(ancDoctorService.saveBenANCDiagnosis(any(), any())).thenReturn(1L); - when(doctorService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(doctorService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); Long result = service.saveANCDoctorData(obj, "auth"); assertNotNull(result); @@ -1405,9 +1412,9 @@ void testSaveANCDoctorData_prescriptionDrugDetailProcessing() throws Exception { when(doctorService.saveDocFindings(any())).thenReturn(1); when(nurseService.savePrescriptionDetailsAndGetPrescriptionID(any(), any(), any(), any(), any(), any(), any(), any(), any())).thenReturn(999L); when(nurseService.saveBenInvestigation(any())).thenReturn(1L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(2); // Return > 0 + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(ancDoctorService.saveBenANCDiagnosis(any(), any())).thenReturn(1L); - when(doctorService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(doctorService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); Long result = service.saveANCDoctorData(obj, "auth"); assertNotNull(result); @@ -1476,9 +1483,9 @@ void testUpdateANCDoctorData_prescriptionCoverage() throws Exception { when(nurseService.updatePrescription(any())).thenReturn(1); when(ancDoctorService.updateBenANCDiagnosis(any())).thenReturn(1); when(nurseService.saveBenInvestigation(any())).thenReturn(1L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(1); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(doctorService.updateBenReferDetails(any())).thenReturn(1L); - when(doctorService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(doctorService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(), null)).thenReturn(1); // Call method - should cover prescription array processing service.updateANCDoctorData(obj, "auth"); diff --git a/src/test/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImplTest.java b/src/test/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImplTest.java index 95ab4418..4c4cc2c4 100644 --- a/src/test/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImplTest.java +++ b/src/test/java/com/iemr/mmu/service/benFlowStatus/CommonBenStatusFlowServiceImplTest.java @@ -390,7 +390,7 @@ void testUpdateBenFlowNurseAfterNurseUpdateNCD_Screening_Exception() { @Test @DisplayName("Test updateBenFlowAfterDocData - Success") - void testUpdateBenFlowAfterDocData_Success() { + void testUpdateBenFlowAfterDocData_Success() throws Exception { // Arrange Long benFlowID = 1L; Long benRegID = 1L; @@ -404,12 +404,12 @@ void testUpdateBenFlowAfterDocData_Success() { Timestamp tcDate = new Timestamp(System.currentTimeMillis()); when(beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity( - benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate)) + benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null)) .thenReturn(1); // Act int result = commonBenStatusFlowService.updateBenFlowAfterDocData( - benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null); // Assert assertEquals(1, result); @@ -417,7 +417,7 @@ void testUpdateBenFlowAfterDocData_Success() { @Test @DisplayName("Test updateBenFlowAfterDocData - Exception") - void testUpdateBenFlowAfterDocData_Exception() { + void testUpdateBenFlowAfterDocData_Exception() throws Exception { // Arrange Long benFlowID = 1L; Long benRegID = 1L; @@ -431,12 +431,12 @@ void testUpdateBenFlowAfterDocData_Exception() { Timestamp tcDate = new Timestamp(System.currentTimeMillis()); when(beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity( - benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate)) + benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null)) .thenThrow(new RuntimeException("Database error")); // Act int result = commonBenStatusFlowService.updateBenFlowAfterDocData( - benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null); // Assert assertEquals(0, result); @@ -459,12 +459,12 @@ void testUpdateBenFlowAfterDocDataUpdate_SuccessWithExistingPharmaFlag() throws when(beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID)).thenReturn((short) 1); when(beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity( - benFlowID, benRegID, benID, docFlag, (short) 1, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate)) + benFlowID, benRegID, benID, docFlag, (short) 1, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null)) .thenReturn(1); // Act int result = commonBenStatusFlowService.updateBenFlowAfterDocDataUpdate( - benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null); // Assert assertEquals(1, result); @@ -487,12 +487,12 @@ void testUpdateBenFlowAfterDocDataUpdate_SuccessWithNewPharmaFlag() throws Excep when(beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID)).thenReturn((short) 0); when(beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivity( - benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate)) + benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null)) .thenReturn(1); // Act int result = commonBenStatusFlowService.updateBenFlowAfterDocDataUpdate( - benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null); // Assert assertEquals(1, result); @@ -519,7 +519,7 @@ void testUpdateBenFlowAfterDocDataUpdate_Exception() { // Act & Assert Exception exception = assertThrows(Exception.class, () -> { commonBenStatusFlowService.updateBenFlowAfterDocDataUpdate( - benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null); }); assertNotNull(exception); @@ -541,12 +541,12 @@ void testUpdateBenFlowAfterDocDataUpdateWDF_Success() throws Exception { when(beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID)).thenReturn((short) 0); when(beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivityWDF( - benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcUserID, tcDate)) + benFlowID, benRegID, benID, docFlag, pharmaFlag, oncologistFlag, tcUserID, tcDate, null)) .thenReturn(1); // Act int result = commonBenStatusFlowService.updateBenFlowAfterDocDataUpdateWDF( - benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcUserID, tcDate); + benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcUserID, tcDate, null); // Assert assertEquals(1, result); @@ -569,12 +569,12 @@ void testUpdateBenFlowAfterDocDataUpdateTCSpecialist_Success() throws Exception when(beneficiaryFlowStatusRepo.getPharmaFlag(benFlowID)).thenReturn((short) 0); when(beneficiaryFlowStatusRepo.updateBenFlowStatusAfterDoctorActivityTCSpecialist( - benFlowID, benRegID, benID, pharmaFlag, oncologistFlag, tcSpecialistFlag)) + benFlowID, benRegID, benID, pharmaFlag, oncologistFlag, tcSpecialistFlag, null)) .thenReturn(1); // Act int result = commonBenStatusFlowService.updateBenFlowAfterDocDataUpdateTCSpecialist( - benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate); + benFlowID, benRegID, benID, benVisitID, docFlag, pharmaFlag, oncologistFlag, tcSpecialistFlag, tcUserID, tcDate, null); // Assert assertEquals(1, result); diff --git a/src/test/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImplTest.java b/src/test/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImplTest.java index 51cc9560..32107a16 100644 --- a/src/test/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImplTest.java +++ b/src/test/java/com/iemr/mmu/service/generalOPD/GeneralOPDServiceImplTest.java @@ -777,10 +777,10 @@ void saveDoctorData_success_allBranches() throws Exception { // (Assume InputMapper is static, so skip actual mapping in test) // Mock all service calls to return success - when(docService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(docService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(), null)).thenReturn(1); when(nurseService.saveBenPrescription(any())).thenReturn(2L); when(nurseService.saveBenInvestigation(any())).thenReturn(2L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(2); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(docService.saveDocFindings(any())).thenReturn(2); when(docService.saveBenReferDetails(any())).thenReturn(2L); @@ -828,10 +828,10 @@ void updateGeneralOPDDoctorData_success_allBranches() throws Exception { when(util.getCreatedBy()).thenReturn("1"); // Mock all service calls to return success - when(docService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(docService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(), null)).thenReturn(1); when(nurseService.updatePrescription(any())).thenReturn(2); when(nurseService.saveBenInvestigation(any())).thenReturn(2L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(2); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(docService.updateDocFindings(any())).thenReturn(2); when(docService.updateBenReferDetails(any())).thenReturn(2L); @@ -903,10 +903,10 @@ void updateGeneralOPDDoctorData_teleconsultationBranch_success() throws Exceptio // Mock slot booking and TC request creation when(docService.callTmForSpecialistSlotBook(any(), any())).thenReturn(1); when(teleService.createTCRequest(any())).thenReturn(1); - when(docService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(docService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(), null)).thenReturn(1); when(nurseService.updatePrescription(any())).thenReturn(2); when(nurseService.saveBenInvestigation(any())).thenReturn(2L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(2); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(docService.updateDocFindings(any())).thenReturn(2); when(docService.updateBenReferDetails(any())).thenReturn(2L); @@ -1043,10 +1043,10 @@ void saveDoctorData_teleconsultationBranch_success() throws Exception { // Mock service calls to return success values when(docService.callTmForSpecialistSlotBook(any(), any())).thenReturn(1); // Must return > 0 when(teleService.createTCRequest(any())).thenReturn(1); - when(docService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(docService.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(), null)).thenReturn(1); when(nurseService.saveBenPrescription(any())).thenReturn(2L); when(nurseService.saveBenInvestigation(any())).thenReturn(2L); - when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(2); + when(nurseService.saveBenPrescribedDrugsList(any())).thenReturn(new HashMap()); when(docService.saveDocFindings(any())).thenReturn(2); when(docService.saveBenReferDetails(any())).thenReturn(2L); @@ -1173,7 +1173,7 @@ void updateGeneralOPDDoctorData_emptyPrescription_success() throws Exception { // Mock slot booking and TC request creation when(docService.callTmForSpecialistSlotBook(any(), any())).thenReturn(1); when(teleService.createTCRequest(any())).thenReturn(1); - when(docService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(docService.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(), null)).thenReturn(1); when(nurseService.updatePrescription(any())).thenReturn(2); when(nurseService.saveBenInvestigation(any())).thenReturn(2L); when(docService.updateDocFindings(any())).thenReturn(2); diff --git a/src/test/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImplTest.java b/src/test/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImplTest.java index 9f2426e4..00f2c5bb 100644 --- a/src/test/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImplTest.java +++ b/src/test/java/com/iemr/mmu/service/quickConsultation/QuickConsultationServiceImplTest.java @@ -37,6 +37,14 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyShort; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; import java.util.*; @@ -279,9 +287,9 @@ void testUpdateGeneralOPDQCDoctorData_basicFlow() throws Exception { obj.add("refer", new JsonObject()); // Mocks for TC request block when(commonNurseServiceImpl.updatePrescription(any())).thenReturn(1); - when(commonNurseServiceImpl.saveBenPrescribedDrugsList(anyList())).thenReturn(1); + when(commonNurseServiceImpl.saveBenPrescribedDrugsList(anyList())).thenReturn(new HashMap()); when(commonDoctorServiceImpl.updateBenClinicalObservations(any())).thenReturn(1); - when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataUpdate(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); when(commonDoctorServiceImpl.updateBenReferDetails(any())).thenReturn(1L); when(commonDoctorServiceImpl.callTmForSpecialistSlotBook(any(), anyString())).thenReturn(1); when(teleConsultationServiceImpl.createTCRequest(any())).thenReturn(1); @@ -321,7 +329,7 @@ void testQuickConsultDoctorDataInsert_tcRequestFlow() throws Exception { when(mockObs.getClinicalObservationID()).thenReturn(10L); when(commonNurseServiceImpl.saveBeneficiaryPrescription(any())).thenReturn(10L); when(commonDoctorServiceImpl.saveBenReferDetails(any())).thenReturn(1L); - when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(), null)).thenReturn(1); when(commonDoctorServiceImpl.callTmForSpecialistSlotBook(any(), anyString())).thenReturn(1); when(teleConsultationServiceImpl.createTCRequest(any())).thenReturn(1); Integer result = service.quickConsultDoctorDataInsert(obj, "auth"); @@ -364,9 +372,9 @@ void testQuickConsultDoctorDataInsert_prescriptionBranch() throws Exception { when(mockObs.getClinicalObservationID()).thenReturn(10L); when(commonNurseServiceImpl.saveBeneficiaryPrescription(any())).thenReturn(10L); // Mock the prescription save branch - when(commonNurseServiceImpl.saveBenPrescribedDrugsList(anyList())).thenReturn(1); + when(commonNurseServiceImpl.saveBenPrescribedDrugsList(anyList())).thenReturn(new HashMap()); when(commonDoctorServiceImpl.saveBenReferDetails(any())).thenReturn(1L); - when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any())).thenReturn(1); + when(commonDoctorServiceImpl.updateBenFlowtableAfterDocDataSave(any(), anyBoolean(), anyBoolean(), any(),null)).thenReturn(1); Integer result = service.quickConsultDoctorDataInsert(obj, "auth"); assertEquals(1, result); }