diff --git a/pom.xml b/pom.xml index b0e8639c..aa3c19c9 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.iemr.mmu mmu-api - 3.4.0 + 3.4.1 war MMU-API 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/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..01fcffc0 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; @@ -415,7 +419,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 +1475,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; @@ -1622,7 +1630,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..1144746b 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(); } @@ -2815,7 +2831,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 +2856,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 +2881,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 +2906,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 +2931,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 +2956,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..c2868e44 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; @@ -962,7 +967,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 +1154,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; @@ -1258,7 +1267,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..aa75eb58 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; @@ -939,7 +943,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 +1426,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; @@ -1580,7 +1588,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..aed7f4ea 100644 --- a/src/main/java/com/iemr/mmu/service/ncdCare/NCDCareServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/ncdCare/NCDCareServiceImpl.java @@ -685,6 +685,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; @@ -868,7 +872,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 +1146,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; @@ -1291,7 +1300,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..fad48bf5 100644 --- a/src/main/java/com/iemr/mmu/service/ncdscreening/NCDSCreeningDoctorServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/ncdscreening/NCDSCreeningDoctorServiceImpl.java @@ -76,6 +76,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; @@ -240,7 +245,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..a03e9c10 100644 --- a/src/main/java/com/iemr/mmu/service/ncdscreening/NCDScreeningServiceImpl.java +++ b/src/main/java/com/iemr/mmu/service/ncdscreening/NCDScreeningServiceImpl.java @@ -1169,6 +1169,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; @@ -1347,7 +1351,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..473151b5 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; @@ -383,7 +387,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 +1432,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; @@ -1576,7 +1585,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..7cf4801f 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; @@ -170,10 +174,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 +357,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; @@ -476,7 +493,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 +572,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, @@ -694,7 +717,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/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