From c0f27fefec38ee4e52148c478c29c205cc45beaf Mon Sep 17 00:00:00 2001 From: Srishti gupta <76839176+srishtigrp78@users.noreply.github.com> Date: Wed, 11 Dec 2024 02:50:31 -0800 Subject: [PATCH] AMM-1005 | API for downloading the master data for lab module (#109) * adding changes for downloading the master data for lab module * adding changes suggested by code rabbit --------- Co-authored-by: SR20290919 --- .../LabTechnicianController.java | 30 ++ .../labModule/ProcedureComponentMapping.java | 449 ++++++++++++++++++ .../ProcedureCompMappedMasterRepo.java | 32 ++ .../labtechnician/LabTechnicianService.java | 2 +- .../LabTechnicianServiceImpl.java | 32 ++ 5 files changed, 544 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iemr/hwc/data/labModule/ProcedureComponentMapping.java create mode 100644 src/main/java/com/iemr/hwc/repo/procedureCompMapMaster/ProcedureCompMappedMasterRepo.java diff --git a/src/main/java/com/iemr/hwc/controller/labtechnician/LabTechnicianController.java b/src/main/java/com/iemr/hwc/controller/labtechnician/LabTechnicianController.java index 510ba9fa..002b2229 100644 --- a/src/main/java/com/iemr/hwc/controller/labtechnician/LabTechnicianController.java +++ b/src/main/java/com/iemr/hwc/controller/labtechnician/LabTechnicianController.java @@ -160,5 +160,35 @@ public String getLabResultForVisitCode(@RequestBody String requestOBJ) { } return response.toString(); } + + @CrossOrigin + @Operation(summary = "Get procedure component mapped master data") + @PostMapping(value = { "/get/fetchProcCompMapMasterData" }) + public String getProcedureComponentMappedMasterData(@RequestBody String requestOBJ) { + OutputResponse response = new OutputResponse(); + try { + logger.info("Request obj to fetch procedure component mapped master data "); + JsonObject jsnOBJ = new JsonObject(); + JsonElement jsnElement = JsonParser.parseString(requestOBJ); + jsnOBJ = jsnElement.getAsJsonObject(); + + if (jsnOBJ != null && !jsnOBJ.isJsonNull() && jsnOBJ.has("providerServiceMapID")) { + + String s = labTechnicianServiceImpl.getProcedureComponentMappedMasterData( + jsnOBJ.get("providerServiceMapID").getAsLong()); + if (s != null) + response.setResponse(s); + else + response.setError(5000, "Error in fetching procedure component mapped master data"); + } else { + response.setError(5000, "Invalid request"); + } + } catch (Exception e) { + logger.error("Error while fetching procedure component mapped master data:" + e); + response.setError(5000, "Error while fetching procedure component mapped master data"); + } + return response.toString(); + } + } diff --git a/src/main/java/com/iemr/hwc/data/labModule/ProcedureComponentMapping.java b/src/main/java/com/iemr/hwc/data/labModule/ProcedureComponentMapping.java new file mode 100644 index 00000000..f18df2d9 --- /dev/null +++ b/src/main/java/com/iemr/hwc/data/labModule/ProcedureComponentMapping.java @@ -0,0 +1,449 @@ +/* +* 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.hwc.data.labModule; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import com.google.gson.annotations.Expose; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; + + +@Entity +@Table(name = "m_procedurecomponentmap") +public class ProcedureComponentMapping { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Expose + @Column(name = "ProcedureComponentMapID") + private Integer procedureComponentMapID; + @Expose + @Column(name = "ProcedureID") + private Integer procedureID; + @Expose + @Column(name = "TestComponentID") + private Integer testComponentID; + @Expose + @Column(name = "ProviderServiceMapID") + private Integer providerServiceMapID; + @Expose + @Column(name = "Deleted", insertable = false) + private Boolean deleted; + @Expose + @Column(name = "Processed", insertable = false) + private String processed; + @Expose + @Column(name = "CreatedBy") + private String createdBy; + @Expose + @Column(name = "CreatedDate", insertable = false, updatable = false) + private Timestamp createdDate; + @Expose + @Column(name = "ModifiedBy") + private String modifiedBy; + @Expose + @Column(name = "LastModDate", insertable = false) + private Timestamp lastModDate; + + @Transient + @Expose + private ArrayList> compList; + + @Expose + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "testComponentID", insertable = false, updatable = false) + private TestComponentMaster compMaster; + + @Expose + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "procedureID", insertable = false, updatable = false) + private ProcedureData procMaster; + + @Transient + @Expose + private String procedureName; + @Transient + @Expose + private String mappedComponent; + + @Transient + @Expose + private String procedureDesc; + + public TestComponentMaster getCompMaster() { + return compMaster; + } + + public void setCompMaster(TestComponentMaster compMaster) { + this.compMaster = compMaster; + } + + public ProcedureData getProcMaster() { + return procMaster; + } + + public void setProcMaster(ProcedureData procMaster) { + this.procMaster = procMaster; + } + + public String getProcedureName() { + return procedureName; + } + + public void setProcedureName(String procedureName) { + this.procedureName = procedureName; + } + + public String getMappedComponent() { + return mappedComponent; + } + + public String getProcedureDesc() { + return procedureDesc; + } + + public void setProcedureDesc(String procedureDesc) { + this.procedureDesc = procedureDesc; + } + + public void setMappedComponent(String mappedComponent) { + this.mappedComponent = mappedComponent; + } + + public ProcedureComponentMapping() { + } + + public ProcedureComponentMapping(Integer procedureComponentMapID, Integer procedureID, Integer testComponentID, + Integer providerServiceMapID, Boolean deleted, String processed, String createdBy, Timestamp createdDate, + String modifiedBy, Timestamp lastModDate, ArrayList> compList, + TestComponentMaster compMaster, ProcedureData procMaster, String procedureName, String mappedComponent, + String procedureDesc) { + super(); + this.procedureComponentMapID = procedureComponentMapID; + this.procedureID = procedureID; + this.testComponentID = testComponentID; + this.providerServiceMapID = providerServiceMapID; + this.deleted = deleted; + this.processed = processed; + this.createdBy = createdBy; + this.createdDate = createdDate; + this.modifiedBy = modifiedBy; + this.lastModDate = lastModDate; + this.compList = compList; + this.compMaster = compMaster; + this.procMaster = procMaster; + this.procedureName = procedureName; + this.mappedComponent = mappedComponent; + this.procedureDesc = procedureDesc; + } + + public ProcedureComponentMapping(Integer procedureComponentMapID, Integer procedureID, Integer testComponentID, + Integer providerServiceMapID, Boolean deleted, String processed, String createdBy, Timestamp createdDate, + String modifiedBy, Timestamp lastModDate) { + super(); + this.procedureComponentMapID = procedureComponentMapID; + this.procedureID = procedureID; + this.testComponentID = testComponentID; + this.providerServiceMapID = providerServiceMapID; + this.deleted = deleted; + this.processed = processed; + this.createdBy = createdBy; + this.createdDate = createdDate; + this.modifiedBy = modifiedBy; + this.lastModDate = lastModDate; + } + + public ProcedureComponentMapping(Integer procedureComponentMapID, Integer procedureID, Integer testComponentID, + Integer providerServiceMapID, Boolean deleted, String processed, String createdBy, Timestamp createdDate, + String modifiedBy, Timestamp lastModDate, ArrayList> compList) { + super(); + this.procedureComponentMapID = procedureComponentMapID; + this.procedureID = procedureID; + this.testComponentID = testComponentID; + this.providerServiceMapID = providerServiceMapID; + this.deleted = deleted; + this.processed = processed; + this.createdBy = createdBy; + this.createdDate = createdDate; + this.modifiedBy = modifiedBy; + this.lastModDate = lastModDate; + this.compList = compList; + } + + public static ArrayList getProcedureComponentMappingObjList( + ArrayList> compList, Integer pID, Integer psmID, String createdBy) { + ArrayList pcmList = new ArrayList<>(); + ProcedureComponentMapping pcmOBJ; + for (Map cMap : compList) { + if (cMap.containsKey("testComponentID") && cMap.get("testComponentID") != null) { + pcmOBJ = new ProcedureComponentMapping(); + Double cID = (Double) cMap.get("testComponentID"); + pcmOBJ.setTestComponentID(cID.intValue()); + pcmOBJ.setProcedureID(pID); + pcmOBJ.setProviderServiceMapID(psmID); + pcmOBJ.setCreatedBy(createdBy); + pcmList.add(pcmOBJ); + } + } + return pcmList; + } +// @Autowired +// private static ComponentMasterRepo componentMasterRepo; + + + + public ProcedureComponentMapping(Integer procedureID, String procedureName, String mappedComponent, + String procedureDesc) { + super(); + this.procedureID = procedureID; + this.procedureName = procedureName; + this.mappedComponent = mappedComponent; + this.procedureDesc = procedureDesc; + } + + public static ArrayList> getProcedureComponentMappingObjListDetails(ArrayList obj) { + ArrayList pcmList = new ArrayList<>(); + ProcedureComponentMapping pcmOBJ; + Map procCompListMap = null; + ArrayList> tmpList = new ArrayList<>(); + Map compMap = null; + ArrayList> compList = null; + StringBuilder s = null; + + + + Integer tmpProcID = 0; + int i = 0; + for (Object[] obj1 : obj) { + Integer procID = (Integer) obj1[0]; + + + + if (true) { + i = 1; + procCompListMap = new HashMap(); + + + + compList = new ArrayList<>(); + compMap = new HashMap<>(); + compMap.put("testComponentID", obj1[1]); + compMap.put("testComponentName", obj1[4]); + compMap.put("testComponentDesc", obj1[6]); + compList.add(compMap); + + + + s = new StringBuilder("(" + i + ")" + (String) obj1[4]); + procCompListMap.put("procedureID", procID); + procCompListMap.put("procedureName", (String) obj1[2]); + procCompListMap.put("procedureDesc", (String) obj1[3]); + procCompListMap.put("compList", s); + + + + procCompListMap.put("compListDetails", compList); + + + + tmpList.add(procCompListMap); + i++; + } + + + tmpProcID = procID; + } + return tmpList; + } + + + public static ArrayList> getProcedureComponentMappedMasterDataObjListDetails(ArrayList obj) { + ArrayList pcmList = new ArrayList<>(); + ProcedureComponentMapping pcmOBJ; + Map procCompListMap = null; + ArrayList> tmpList = new ArrayList<>(); + Map compMap = null; + ArrayList> compList = null; + StringBuilder s = null; + + + + Integer tmpProcID = 0; + int i = 0; + for (Object[] obj1 : obj) { + Integer procID = (Integer) obj1[1]; + + + + if (true) { + i = 1; + procCompListMap = new HashMap(); + + + + compList = new ArrayList<>(); + compMap = new HashMap<>(); + compMap.put("testComponentID", obj1[2]); + compMap.put("testComponentName", obj1[13]); + compMap.put("testComponentDesc", obj1[14]); + compMap.put("loinc_num", obj1[15]); + compMap.put("loinc_component", obj1[16]); + compMap.put("inputType", obj1[17]); + compMap.put("measurementUnit", obj1[18]); + compMap.put("isDecimal",obj1[19]); + compMap.put("range_min", obj1[20]); + compMap.put("range_normal_min", obj1[21]); + compMap.put("range_normal_max", obj1[22]); + compMap.put("range_max", obj1[23]); + compList.add(compMap); + + + + s = new StringBuilder("(" + i + ")" + (String) obj1[13]); + procCompListMap.put("procedureID", procID); + procCompListMap.put("procedureName", (String) obj1[6]); + procCompListMap.put("procedureDesc", (String) obj1[7]); + procCompListMap.put("procedureType", (String) obj1[8]); + procCompListMap.put("gender", (String) obj1[9]); + procCompListMap.put("IOTProcedureID", obj1[10]); + // procCompListMap.put("isMandatory", (String) obj1[11]); + procCompListMap.put("isMandatory", obj1[11]); + procCompListMap.put("isCalibration", (String) obj1[12]); + procCompListMap.put("compList", s); + + + + procCompListMap.put("compListDetails", compList); + + + + tmpList.add(procCompListMap); + i++; + } + + + tmpProcID = procID; + } + return tmpList; + } + + public Integer getProcedureComponentMapID() { + return procedureComponentMapID; + } + + public void setProcedureComponentMapID(Integer procedureComponentMapID) { + this.procedureComponentMapID = procedureComponentMapID; + } + + public Integer getProcedureID() { + return procedureID; + } + + public void setProcedureID(Integer procedureID) { + this.procedureID = procedureID; + } + + public Integer getTestComponentID() { + return testComponentID; + } + + public void setTestComponentID(Integer testComponentID) { + this.testComponentID = testComponentID; + } + + public Integer getProviderServiceMapID() { + return providerServiceMapID; + } + + public void setProviderServiceMapID(Integer providerServiceMapID) { + this.providerServiceMapID = providerServiceMapID; + } + + public Boolean getDeleted() { + return deleted; + } + + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } + + public String getProcessed() { + return processed; + } + + public void setProcessed(String processed) { + this.processed = processed; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Timestamp getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Timestamp createdDate) { + this.createdDate = createdDate; + } + + public String getModifiedBy() { + return modifiedBy; + } + + public void setModifiedBy(String modifiedBy) { + this.modifiedBy = modifiedBy; + } + + public Timestamp getLastModDate() { + return lastModDate; + } + + public void setLastModDate(Timestamp lastModDate) { + this.lastModDate = lastModDate; + } + + public ArrayList> getCompList() { + return compList; + } + + public void setCompList(ArrayList> compList) { + this.compList = compList; + } + +} diff --git a/src/main/java/com/iemr/hwc/repo/procedureCompMapMaster/ProcedureCompMappedMasterRepo.java b/src/main/java/com/iemr/hwc/repo/procedureCompMapMaster/ProcedureCompMappedMasterRepo.java new file mode 100644 index 00000000..bc0ba98d --- /dev/null +++ b/src/main/java/com/iemr/hwc/repo/procedureCompMapMaster/ProcedureCompMappedMasterRepo.java @@ -0,0 +1,32 @@ +package com.iemr.hwc.repo.procedureCompMapMaster; + +import java.util.ArrayList; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.rest.core.annotation.RestResource; +import org.springframework.stereotype.Repository; + +import com.iemr.hwc.data.labModule.ProcedureComponentMapping; + + +@Repository +@RestResource(exported = false) +public interface ProcedureCompMappedMasterRepo extends CrudRepository { + + + @Query(nativeQuery = true, value = "SELECT pcm.ProcedureComponentMapID, pcm.procedureID, pcm.TestComponentID, " + + "pcm.providerservicemapid, pcm.deleted, pcm.processed, p.procedureName, p.procedureDesc, " + + "p.procedureType, p.gender, p.IOTProcedureID, p.isMandatory, p.isCalibration, t.testComponentName, " + + "t.testComponentDesc, t.loinc_num, t.loinc_component, t.inputType, t.measurementUnit, " + + "t.isDecimal, t.range_min, t.range_normal_min, t.range_normal_max, t.range_max " + + "FROM m_procedurecomponentmap pcm " + + "INNER JOIN m_procedure p on p.procedureid=pcm.procedureid " + + "INNER JOIN m_testcomponent t on t.TestComponentID=pcm.TestComponentID " + + "where pcm.deleted is false and p.Deleted is false and t.deleted is false " + + "and pcm.providerservicemapid= :providerServiceMapID ") + public ArrayList getProcedureComponentMappedMasterData(@Param("providerServiceMapID") Long providerServiceMapID); + + +} diff --git a/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianService.java b/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianService.java index d059797a..8ba4d183 100644 --- a/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianService.java +++ b/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianService.java @@ -22,5 +22,5 @@ package com.iemr.hwc.service.labtechnician; public interface LabTechnicianService { - + String getProcedureComponentMappedMasterData(Long providerServiceMapID) throws Exception; } diff --git a/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianServiceImpl.java b/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianServiceImpl.java index cbf8b116..51240c0a 100644 --- a/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/labtechnician/LabTechnicianServiceImpl.java @@ -27,16 +27,19 @@ import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.iemr.hwc.data.labModule.LabResultEntry; +import com.iemr.hwc.data.labModule.ProcedureComponentMapping; import com.iemr.hwc.data.labModule.WrapperLabResultEntry; import com.iemr.hwc.data.labtechnician.V_benLabTestOrderedDetails; import com.iemr.hwc.repo.labModule.LabResultEntryRepo; import com.iemr.hwc.repo.labtechnician.V_benLabTestOrderedDetailsRepo; +import com.iemr.hwc.repo.procedureCompMapMaster.ProcedureCompMappedMasterRepo; import com.iemr.hwc.service.benFlowStatus.CommonBenStatusFlowServiceImpl; import com.iemr.hwc.utils.mapper.InputMapper; @@ -45,6 +48,8 @@ public class LabTechnicianServiceImpl implements LabTechnicianService { private V_benLabTestOrderedDetailsRepo v_benLabTestOrderedDetailsRepo; private LabResultEntryRepo labResultEntryRepo; private CommonBenStatusFlowServiceImpl commonBenStatusFlowServiceImpl; + private ProcedureCompMappedMasterRepo procedureCompMappedMasterRepo; + @Autowired public void setCommonBenStatusFlowServiceImpl(CommonBenStatusFlowServiceImpl commonBenStatusFlowServiceImpl) { @@ -60,6 +65,11 @@ public void setLabResultEntryRepo(LabResultEntryRepo labResultEntryRepo) { public void setV_benLabTestOrderedDetailsRepo(V_benLabTestOrderedDetailsRepo v_benLabTestOrderedDetailsRepo) { this.v_benLabTestOrderedDetailsRepo = v_benLabTestOrderedDetailsRepo; } + + @Autowired + public void setProcedureCompMappedMasterRepo(ProcedureCompMappedMasterRepo procedureCompMappedMasterRepo) { + this.procedureCompMappedMasterRepo = procedureCompMappedMasterRepo; + } public String getBenePrescribedProcedureDetails(Long benRegID, Long visitCode) { Map returnOBJ = new HashMap<>(); @@ -499,4 +509,26 @@ public String getLabResultForVisitcode(Long benRegID, Long visitCode) { ArrayList labResultList = getLabResultDataForBen(benRegID, visitCode); return new Gson().toJson(labResultList); } + + public String getProcedureComponentMappedMasterData(Long providerServiceMapID) throws Exception { + if(providerServiceMapID == null) { + throw new IllegalArgumentException("Provider service map id cannot be null"); + } + try { + ArrayList procCompMapMasterList = procedureCompMappedMasterRepo.getProcedureComponentMappedMasterData(providerServiceMapID); + if (procCompMapMasterList != null && procCompMapMasterList.size() > 0) { + ArrayList> responseList = ProcedureComponentMapping + .getProcedureComponentMappedMasterDataObjListDetails(procCompMapMasterList); + return new Gson().toJson(responseList); + } else { + return new Gson().toJson(new ArrayList<>()); + } + } + catch (DataAccessResourceFailureException e) { + throw new DataAccessResourceFailureException("Failed to fetch procedure component mapped master data", e); + } + + } + + }