From 6a3b96b925d8030268f1ed5f1082ccee547c1a04 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 5 Feb 2026 11:45:58 +0530 Subject: [PATCH 01/65] Incentive for Completing treatment of PB (Paucibacillary) leprosy patients --- .../controller/DiseaseControlController.java | 4 +- .../flw/service/DiseaseControlService.java | 2 +- .../flw/service/IncentiveLogicService.java | 10 ++ .../impl/DiseaseControlServiceImpl.java | 40 +++--- .../flw/service/impl/IncentiveLogicImpl.java | 115 ++++++++++++++++++ 5 files changed, 152 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/iemr/flw/service/IncentiveLogicService.java create mode 100644 src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java diff --git a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java index e89a5306..5ca4db8d 100644 --- a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java +++ b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java @@ -142,13 +142,13 @@ public ResponseEntity> saveFilaria(@RequestBody FilariaDTO f } @RequestMapping(value = "leprosy/saveAll", method = RequestMethod.POST, consumes = "application/json", produces = "application/json",headers = "Authorization") - public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO) { + public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO,@RequestHeader(value = "JwtToken") String token) { Map response = new HashMap<>(); try { if(leprosyDTO!=null){ response.put("status", "Success"); response.put("statusCode", 200); - response.put("data", diseaseControlService.saveLeprosy(leprosyDTO)); + response.put("data", diseaseControlService.saveLeprosy(leprosyDTO,token)); }else { response.put("message", "Invalid request"); response.put("statusCode", 400); diff --git a/src/main/java/com/iemr/flw/service/DiseaseControlService.java b/src/main/java/com/iemr/flw/service/DiseaseControlService.java index 65e315dc..db20d712 100644 --- a/src/main/java/com/iemr/flw/service/DiseaseControlService.java +++ b/src/main/java/com/iemr/flw/service/DiseaseControlService.java @@ -35,7 +35,7 @@ public interface DiseaseControlService { public String saveKalaAzar(KalaAzarDTO kalaAzarDTO); public String saveAES(AesJeDTO aesJeDTO); public String saveFilaria(FilariaDTO filariaDTO); - public String saveLeprosy(LeprosyDTO leprosyDTO); + public String saveLeprosy(LeprosyDTO leprosyDTO, String token); public Object getAllScreeningData(GetDiseaseRequestHandler getDiseaseRequestHandler); public List saveMosquitoMobilizationNet(List mosquitoNetDTOList); diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java new file mode 100644 index 00000000..3c48c1cf --- /dev/null +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -0,0 +1,10 @@ +package com.iemr.flw.service; + +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public interface IncentiveLogicService { + public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); +} diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index d5f009ea..f5d3ff73 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -32,6 +32,7 @@ import com.iemr.flw.masterEnum.DiseaseType; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.DiseaseControlService; +import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; import org.slf4j.Logger; @@ -45,6 +46,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; + import org.modelmapper.ModelMapper; @Service @@ -86,8 +88,11 @@ public class DiseaseControlServiceImpl implements DiseaseControlService { @Autowired private JwtUtil jwtUtil; + @Autowired + private IncentiveLogicService incentiveLogicService; + - private final Logger logger = LoggerFactory.getLogger(CoupleController.class); + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); @Override public String saveMalaria(MalariaDTO diseaseControlDTO) { @@ -109,7 +114,7 @@ public String saveMalaria(MalariaDTO diseaseControlDTO) { @Override public String saveKalaAzar(KalaAzarDTO diseaseControlDTO) { - logger.info("Save request: "+diseaseControlDTO.toString()); + logger.info("Save request: " + diseaseControlDTO.toString()); for (DiseaseKalaAzarDTO diseaseControlData : diseaseControlDTO.getKalaAzarLists()) { if (diseaseKalaAzarRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { return updateKalaAzarDisease(diseaseControlData); @@ -275,7 +280,7 @@ private String updateFilaria(DiseaseFilariasisDTO diseaseControlData) { @Override - public String saveLeprosy(LeprosyDTO diseaseControlDTO) { + public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { for (DiseaseLeprosyDTO diseaseControlData : diseaseControlDTO.getLeprosyLists()) { if (diseaseLeprosyRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { return updateLeprosyData(diseaseControlData); @@ -283,7 +288,15 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO) { if (diseaseControlDTO.getUserId() != null) { diseaseControlData.setUserId(diseaseControlDTO.getUserId()); } - diseaseLeprosyRepository.save(saveLeprosyData(diseaseControlData)); + ScreeningLeprosy screeningLeprosy = diseaseLeprosyRepository.save(saveLeprosyData(diseaseControlData)); + if (screeningLeprosy != null) { + if (screeningLeprosy.getIsConfirmed()) { + if (screeningLeprosy.getTypeOfLeprosy().toLowerCase().equals("PB (Paucibacillary)")) { + incentiveLogicService.incentiveForLeprosyConfirmed(screeningLeprosy.getBenId(), screeningLeprosy.getTreatmentStartDate(), screeningLeprosy.getTreatmentEndDate(), token); + } + } + } + return "Data add successfully"; } @@ -356,10 +369,10 @@ private String updateLeprosyFollowUpData(LeprosyFollowUpDTO data, LeprosyFollowU public String saveLeprosyFollowUp(LeprosyFollowUpDTO dto) { if (dto == null) return "Invalid data"; - LeprosyFollowUp entity = saveLeprosyFollowUpData(dto); - leprosyFollowUpRepository.save(entity); - return "Follow-up data added successfully"; - + LeprosyFollowUp entity = saveLeprosyFollowUpData(dto); + leprosyFollowUpRepository.save(entity); + return "Follow-up data added successfully"; + } @Override @@ -609,7 +622,7 @@ public Object getAllLeprosy(GetDiseaseRequestHandler getDiseaseRequestHandler) { private ScreeningKalaAzar saveKalaAzarDisease(DiseaseKalaAzarDTO dto) { - logger.info("KalaAzarRequest: "+dto); + logger.info("KalaAzarRequest: " + dto); ScreeningKalaAzar entity = new ScreeningKalaAzar(); entity.setBenId(dto.getBenId()); @@ -948,12 +961,10 @@ public List saveMosquitoMobilizationNet(List mos }).collect(Collectors.toList()); - // ✅ Save all List savedEntities = mosquitoNetRepository.saveAll(entityList); - // ✅ Entity → DTO return return savedEntities.stream().map(entity -> { @@ -1001,15 +1012,13 @@ public List getAllMosquitoMobilizationNet(Integer userId) { mosquitoNetListDTO.setIs_net_distributed(entity.getIsNetDistributed()); mosquitoNetListDTO.setVisit_date(entity.getVisitDate().format(formatter)); - dto.setFields(mosquitoNetListDTO); + dto.setFields(mosquitoNetListDTO); return dto; }).collect(Collectors.toList()); } - - private void checkAndAddIncentives(ScreeningMalaria diseaseScreening) { IncentiveActivity diseaseScreeningActivity; if (Objects.equals(diseaseScreening.getCaseStatus(), "Confirmed Case")) { @@ -1060,10 +1069,9 @@ record = new IncentiveActivityRecord(); } - @Override public List saveChronicDiseaseVisit( - List requestList,String token) throws IEMRException { + List requestList, String token) throws IEMRException { List responseList = new ArrayList<>(); diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java new file mode 100644 index 00000000..08b7e404 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -0,0 +1,115 @@ +package com.iemr.flw.service.impl; + +import com.iemr.flw.domain.iemr.IncentiveActivity; +import com.iemr.flw.domain.iemr.IncentiveActivityRecord; +import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.StateCode; +import com.iemr.flw.repo.iemr.IncentiveRecordRepo; +import com.iemr.flw.repo.iemr.IncentivesRepo; +import com.iemr.flw.service.IncentiveLogicService; +import com.iemr.flw.service.UserService; +import com.iemr.flw.utils.JwtUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.util.Date; + +@Service +public class IncentiveLogicImpl implements IncentiveLogicService { + + private static final Logger logger = LoggerFactory.getLogger(IncentiveLogicImpl.class); + + @Autowired + private IncentivesRepo incentivesRepo; + + @Autowired + private IncentiveRecordRepo incentiveRecordRepo; + + @Autowired + private JwtUtil jwtUtil; + + @Autowired + private UserService userService; + + @Override + public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token) { + try { + Integer stateCode = userService.getUserDetail(jwtUtil.extractUserId(token)).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", jwtUtil.extractUserId(token)); + return; + } + + String activityName = "NLEP_PB_TREATMENT"; + + if (stateCode.equals(StateCode.AM.getStateCode())) { + processIncentive(activityName, GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, treatmentStartDate, treatmentEndDate, token); + } + if (stateCode.equals(StateCode.CG.getStateCode())) { + processIncentive(activityName, GroupName.ACTIVITY.getDisplayName(), + benId, treatmentStartDate, treatmentEndDate, token); + } + + + } catch (Exception e) { + logger.error("Check Leprosy Incentive Exception: ", e); + } + } + + private void processIncentive(String activityName, String groupName, Long benId, + Date startDate, Date endDate, String token) { + try { + IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, groupName); + + if (activity == null) { + logger.info("No IncentiveActivity found for name: {} and group: {}", activityName, groupName); + return; + } + + saveIncentive(activity, benId, startDate, endDate, token); + + } catch (Exception e) { + logger.error("Process Incentive Exception: ", e); + } + } + + private void saveIncentive(IncentiveActivity activity, Long benId, Date startDate, Date endDate, String token) { + try { + Timestamp startTimestamp = new Timestamp(startDate.getTime()); + Timestamp endTimestamp = new Timestamp(endDate.getTime()); + String username = jwtUtil.extractUsername(token); + + IncentiveActivityRecord record = incentiveRecordRepo + .findRecordByActivityIdCreatedDateBenId(activity.getId(), startTimestamp, benId); + + if (record != null) { + logger.info("Incentive already exists for benId: {}, activityId: {}", benId, activity.getId()); + return; + } + + record = new IncentiveActivityRecord(); + record.setActivityId(activity.getId()); + record.setCreatedDate(startTimestamp); + record.setUpdatedDate(startTimestamp); + record.setStartDate(startTimestamp); + record.setEndDate(endTimestamp); + record.setCreatedBy(username); + record.setUpdatedBy(username); + record.setBenId(benId); + record.setAshaId(jwtUtil.extractUserId(token)); + record.setName(activity.getName()); + record.setAmount(Long.valueOf(activity.getRate())); + + incentiveRecordRepo.save(record); + logger.info("Leprosy Incentive saved successfully for benId: {}", benId); + + } catch (Exception e) { + logger.error("Save Leprosy Incentive Exception: ", e); + } + } +} From e4af5f98b2a4c2bdbd39e32c6d28bcf3ecedfdd0 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 13:10:58 +0530 Subject: [PATCH 02/65] fix code rabit comment --- .../flw/service/IncentiveLogicService.java | 4 +- .../impl/DiseaseControlServiceImpl.java | 17 +++- .../flw/service/impl/IncentiveLogicImpl.java | 87 ++++++++++++++----- .../impl/MaternalHealthServiceImpl.java | 2 + 4 files changed, 87 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index 3c48c1cf..ec3d86b8 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -1,10 +1,10 @@ package com.iemr.flw.service; +import com.iemr.flw.domain.iemr.IncentiveActivityRecord; import org.springframework.stereotype.Service; import java.util.Date; -@Service public interface IncentiveLogicService { - public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); + public IncentiveActivityRecord incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); } diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index f5d3ff73..7a22fc8f 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -35,6 +35,7 @@ import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; +import jakarta.transaction.Transactional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -280,6 +281,7 @@ private String updateFilaria(DiseaseFilariasisDTO diseaseControlData) { @Override + @Transactional public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { for (DiseaseLeprosyDTO diseaseControlData : diseaseControlDTO.getLeprosyLists()) { if (diseaseLeprosyRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { @@ -292,7 +294,20 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { if (screeningLeprosy != null) { if (screeningLeprosy.getIsConfirmed()) { if (screeningLeprosy.getTypeOfLeprosy().toLowerCase().equals("PB (Paucibacillary)")) { - incentiveLogicService.incentiveForLeprosyConfirmed(screeningLeprosy.getBenId(), screeningLeprosy.getTreatmentStartDate(), screeningLeprosy.getTreatmentEndDate(), token); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyConfirmed( + screeningLeprosy.getBenId(), + screeningLeprosy.getTreatmentStartDate(), + screeningLeprosy.getTreatmentEndDate(), + token); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + } } } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java index 08b7e404..7ab0367e 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -35,64 +35,106 @@ public class IncentiveLogicImpl implements IncentiveLogicService { private UserService userService; @Override - public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token) { + public IncentiveActivityRecord incentiveForLeprosyConfirmed( + Long benId, + Date treatmentStartDate, + Date treatmentEndDate, + String token) { + try { - Integer stateCode = userService.getUserDetail(jwtUtil.extractUserId(token)).getStateId(); + Integer userId = jwtUtil.extractUserId(token); + Integer stateCode = userService.getUserDetail(userId).getStateId(); if (stateCode == null) { - logger.warn("State code is null for user: {}", jwtUtil.extractUserId(token)); - return; + logger.warn("State code is null for user: {}", userId); + return null; } String activityName = "NLEP_PB_TREATMENT"; if (stateCode.equals(StateCode.AM.getStateCode())) { - processIncentive(activityName, GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), - benId, treatmentStartDate, treatmentEndDate, token); + return processIncentive( + activityName, + GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + token); } + if (stateCode.equals(StateCode.CG.getStateCode())) { - processIncentive(activityName, GroupName.ACTIVITY.getDisplayName(), - benId, treatmentStartDate, treatmentEndDate, token); + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + token); } + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; } catch (Exception e) { logger.error("Check Leprosy Incentive Exception: ", e); + return null; } } - private void processIncentive(String activityName, String groupName, Long benId, + + private IncentiveActivityRecord processIncentive(String activityName, String groupName, Long benId, Date startDate, Date endDate, String token) { try { IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, groupName); if (activity == null) { logger.info("No IncentiveActivity found for name: {} and group: {}", activityName, groupName); - return; + return null ; } - saveIncentive(activity, benId, startDate, endDate, token); + return saveIncentive(activity, benId, startDate, endDate, token); } catch (Exception e) { logger.error("Process Incentive Exception: ", e); + return null; + } } - private void saveIncentive(IncentiveActivity activity, Long benId, Date startDate, Date endDate, String token) { + private IncentiveActivityRecord saveIncentive( + IncentiveActivity activity, + Long benId, + Date startDate, + Date endDate, + String token) { + try { + + if (activity == null || benId == null || startDate == null || endDate == null) { + logger.warn("Invalid input for saving incentive"); + return null; + } + Timestamp startTimestamp = new Timestamp(startDate.getTime()); Timestamp endTimestamp = new Timestamp(endDate.getTime()); + + Integer userId = jwtUtil.extractUserId(token); String username = jwtUtil.extractUsername(token); - IncentiveActivityRecord record = incentiveRecordRepo - .findRecordByActivityIdCreatedDateBenId(activity.getId(), startTimestamp, benId); + // 🔍 duplicate check + IncentiveActivityRecord existing = incentiveRecordRepo + .findRecordByActivityIdCreatedDateBenId( + activity.getId(), startTimestamp, benId); - if (record != null) { - logger.info("Incentive already exists for benId: {}, activityId: {}", benId, activity.getId()); - return; + if (existing != null) { + logger.info("Incentive already exists for benId: {}, activityId: {}", + benId, activity.getId()); + return existing; } - record = new IncentiveActivityRecord(); + // 🆕 create record + IncentiveActivityRecord record = new IncentiveActivityRecord(); record.setActivityId(activity.getId()); record.setCreatedDate(startTimestamp); record.setUpdatedDate(startTimestamp); @@ -101,15 +143,20 @@ record = new IncentiveActivityRecord(); record.setCreatedBy(username); record.setUpdatedBy(username); record.setBenId(benId); - record.setAshaId(jwtUtil.extractUserId(token)); + record.setAshaId(userId); record.setName(activity.getName()); record.setAmount(Long.valueOf(activity.getRate())); - incentiveRecordRepo.save(record); + record = incentiveRecordRepo.save(record); + logger.info("Leprosy Incentive saved successfully for benId: {}", benId); + return record; + } catch (Exception e) { logger.error("Save Leprosy Incentive Exception: ", e); + return null; } } + } diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 8914941f..b7e818c8 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -7,6 +7,7 @@ import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; +import com.iemr.flw.service.IncentiveService; import com.iemr.flw.service.MaternalHealthService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; @@ -440,6 +441,7 @@ public String saveANCVisitQuestions(List dtos, String aut } ancCounsellingCareRepo.saveAll(entities); + return "ANC Counselling & Care data saved successfully"; } From 22c538e0c67f29186559cb06c538e987a5a0d14d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 13:14:13 +0530 Subject: [PATCH 03/65] fix code rabit comment --- .../com/iemr/flw/service/impl/DiseaseControlServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index 7a22fc8f..ca2ad1f7 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -293,7 +293,7 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { ScreeningLeprosy screeningLeprosy = diseaseLeprosyRepository.save(saveLeprosyData(diseaseControlData)); if (screeningLeprosy != null) { if (screeningLeprosy.getIsConfirmed()) { - if (screeningLeprosy.getTypeOfLeprosy().toLowerCase().equals("PB (Paucibacillary)")) { + if (screeningLeprosy.getTypeOfLeprosy().equals("PB (Paucibacillary)")) { IncentiveActivityRecord incentiveActivityRecord = incentiveLogicService.incentiveForLeprosyConfirmed( screeningLeprosy.getBenId(), From 249b22befa05bb4cba0640ee07ee79540643f6ec Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 15:32:30 +0530 Subject: [PATCH 04/65] fix code rabit comment --- .../controller/DiseaseControlController.java | 4 +- .../flw/service/DiseaseControlService.java | 2 +- .../flw/service/IncentiveLogicService.java | 7 +- .../impl/DiseaseControlServiceImpl.java | 39 +++++- .../flw/service/impl/IncentiveLogicImpl.java | 113 ++++++++++++++++-- .../impl/MaternalHealthServiceImpl.java | 5 + 6 files changed, 151 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java index 5ca4db8d..e89a5306 100644 --- a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java +++ b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java @@ -142,13 +142,13 @@ public ResponseEntity> saveFilaria(@RequestBody FilariaDTO f } @RequestMapping(value = "leprosy/saveAll", method = RequestMethod.POST, consumes = "application/json", produces = "application/json",headers = "Authorization") - public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO,@RequestHeader(value = "JwtToken") String token) { + public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO) { Map response = new HashMap<>(); try { if(leprosyDTO!=null){ response.put("status", "Success"); response.put("statusCode", 200); - response.put("data", diseaseControlService.saveLeprosy(leprosyDTO,token)); + response.put("data", diseaseControlService.saveLeprosy(leprosyDTO)); }else { response.put("message", "Invalid request"); response.put("statusCode", 400); diff --git a/src/main/java/com/iemr/flw/service/DiseaseControlService.java b/src/main/java/com/iemr/flw/service/DiseaseControlService.java index db20d712..65e315dc 100644 --- a/src/main/java/com/iemr/flw/service/DiseaseControlService.java +++ b/src/main/java/com/iemr/flw/service/DiseaseControlService.java @@ -35,7 +35,7 @@ public interface DiseaseControlService { public String saveKalaAzar(KalaAzarDTO kalaAzarDTO); public String saveAES(AesJeDTO aesJeDTO); public String saveFilaria(FilariaDTO filariaDTO); - public String saveLeprosy(LeprosyDTO leprosyDTO, String token); + public String saveLeprosy(LeprosyDTO leprosyDTO); public Object getAllScreeningData(GetDiseaseRequestHandler getDiseaseRequestHandler); public List saveMosquitoMobilizationNet(List mosquitoNetDTOList); diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index ec3d86b8..a0aa5ec1 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -6,5 +6,10 @@ import java.util.Date; public interface IncentiveLogicService { - public IncentiveActivityRecord incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); + public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveAssistingANCVisits(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + + } diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index ca2ad1f7..88932659 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -282,7 +282,7 @@ private String updateFilaria(DiseaseFilariasisDTO diseaseControlData) { @Override @Transactional - public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { + public String saveLeprosy(LeprosyDTO diseaseControlDTO) { for (DiseaseLeprosyDTO diseaseControlData : diseaseControlDTO.getLeprosyLists()) { if (diseaseLeprosyRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { return updateLeprosyData(diseaseControlData); @@ -295,11 +295,44 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { if (screeningLeprosy.getIsConfirmed()) { if (screeningLeprosy.getTypeOfLeprosy().equals("PB (Paucibacillary)")) { IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyConfirmed( + incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( screeningLeprosy.getBenId(), screeningLeprosy.getTreatmentStartDate(), screeningLeprosy.getTreatmentEndDate(), - token); + diseaseControlDTO.getUserId()); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + + } + if (screeningLeprosy.getTypeOfLeprosy().equals("MB (Multibacillary)")) { + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyMultibacillaryConfirmed( + screeningLeprosy.getBenId(), + screeningLeprosy.getTreatmentStartDate(), + screeningLeprosy.getTreatmentEndDate(), + diseaseControlDTO.getUserId()); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + + } + + if (screeningLeprosy.getIsConfirmed()) { + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForIdentificationLeprosy( + screeningLeprosy.getBenId(), + screeningLeprosy.getTreatmentStartDate(), + screeningLeprosy.getTreatmentEndDate(), + diseaseControlDTO.getUserId()); if (incentiveActivityRecord != null) { logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java index 7ab0367e..1257b8a5 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -6,6 +6,7 @@ import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.iemr.IncentiveRecordRepo; import com.iemr.flw.repo.iemr.IncentivesRepo; +import com.iemr.flw.repo.iemr.UserServiceRoleRepo; import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.UserService; import com.iemr.flw.utils.JwtUtil; @@ -34,15 +35,64 @@ public class IncentiveLogicImpl implements IncentiveLogicService { @Autowired private UserService userService; + @Autowired + private UserServiceRoleRepo userServiceRoleRepo; + + @Override + public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed( + Long benId, + Date treatmentStartDate, + Date treatmentEndDate, + Integer userId) { + + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "NLEP_PB_TREATMENT"; + + if (stateCode.equals(StateCode.AM.getStateCode())) { + return processIncentive( + activityName, + GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check Leprosy Incentive Exception: ", e); + return null; + } + } + @Override - public IncentiveActivityRecord incentiveForLeprosyConfirmed( + public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed( Long benId, Date treatmentStartDate, Date treatmentEndDate, - String token) { + Integer userId) { try { - Integer userId = jwtUtil.extractUserId(token); Integer stateCode = userService.getUserDetail(userId).getStateId(); if (stateCode == null) { @@ -59,7 +109,7 @@ public IncentiveActivityRecord incentiveForLeprosyConfirmed( benId, treatmentStartDate, treatmentEndDate, - token); + userId); } if (stateCode.equals(StateCode.CG.getStateCode())) { @@ -69,7 +119,7 @@ public IncentiveActivityRecord incentiveForLeprosyConfirmed( benId, treatmentStartDate, treatmentEndDate, - token); + userId); } // state not supported @@ -82,9 +132,50 @@ public IncentiveActivityRecord incentiveForLeprosyConfirmed( } } + @Override + public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "NLEP_CASE_DETECTION"; + + if (stateCode.equals(StateCode.AM.getStateCode())) { + return processIncentive( + activityName, + GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check Leprosy Incentive Exception: ", e); + return null; + } + } private IncentiveActivityRecord processIncentive(String activityName, String groupName, Long benId, - Date startDate, Date endDate, String token) { + Date startDate, Date endDate, Integer userId) { try { IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, groupName); @@ -93,7 +184,7 @@ private IncentiveActivityRecord processIncentive(String activityName, String gro return null ; } - return saveIncentive(activity, benId, startDate, endDate, token); + return saveIncentive(activity, benId, startDate, endDate, userId); } catch (Exception e) { logger.error("Process Incentive Exception: ", e); @@ -107,7 +198,7 @@ private IncentiveActivityRecord saveIncentive( Long benId, Date startDate, Date endDate, - String token) { + Integer userId) { try { @@ -119,8 +210,6 @@ private IncentiveActivityRecord saveIncentive( Timestamp startTimestamp = new Timestamp(startDate.getTime()); Timestamp endTimestamp = new Timestamp(endDate.getTime()); - Integer userId = jwtUtil.extractUserId(token); - String username = jwtUtil.extractUsername(token); // 🔍 duplicate check IncentiveActivityRecord existing = incentiveRecordRepo @@ -140,8 +229,8 @@ private IncentiveActivityRecord saveIncentive( record.setUpdatedDate(startTimestamp); record.setStartDate(startTimestamp); record.setEndDate(endTimestamp); - record.setCreatedBy(username); - record.setUpdatedBy(username); + record.setCreatedBy(userServiceRoleRepo.getUserNamedByUserId(userId)); + record.setUpdatedBy(userServiceRoleRepo.getUserNamedByUserId(userId)); record.setBenId(benId); record.setAshaId(userId); record.setName(activity.getName()); diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index b7e818c8..52ff5e1d 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -7,6 +7,7 @@ import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; +import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.IncentiveService; import com.iemr.flw.service.MaternalHealthService; import com.iemr.flw.utils.JwtUtil; @@ -22,6 +23,7 @@ import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; @@ -68,6 +70,9 @@ public class MaternalHealthServiceImpl implements MaternalHealthService { @Autowired private JwtUtil jwtUtil; + @Autowired + private IncentiveLogicService incentiveLogicService; + ObjectMapper mapper = new ObjectMapper(); From d14afc4d473382f0bb644189e881f975eb734293 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 15:48:29 +0530 Subject: [PATCH 05/65] fix code rabit comment --- src/main/java/com/iemr/flw/service/IncentiveLogicService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index a0aa5ec1..64001863 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -9,7 +9,6 @@ public interface IncentiveLogicService { public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); - public IncentiveActivityRecord incentiveAssistingANCVisits(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); } From e9ee718951d8ceef5946edcf42bb9c173eea9f48 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 9 Feb 2026 15:57:26 +0530 Subject: [PATCH 06/65] Changes incentive loigc for CG in VillageLevel --- .../flw/service/IncentiveLogicService.java | 4 + .../flw/service/impl/IncentiveLogicImpl.java | 104 +++++++++++++++++- .../impl/VillageLevelFormServiceImpl.java | 27 ++++- 3 files changed, 128 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index 64001863..1b3529b1 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -10,5 +10,9 @@ public interface IncentiveLogicService { public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForVhndMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + + public IncentiveActivityRecord incentiveForClusterMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForAttendingVhsnc(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java index 1257b8a5..c564fab7 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -80,7 +80,7 @@ public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed( return null; } catch (Exception e) { - logger.error("Check Leprosy Incentive Exception: ", e); + logger.error("Check NLEP_PB_TREATMENT Incentive Exception: ", e); return null; } } @@ -127,7 +127,103 @@ public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed( return null; } catch (Exception e) { - logger.error("Check Leprosy Incentive Exception: ", e); + logger.error("Check NLEP_PB_TREATMENT Incentive Exception: ", e); + return null; + } + } + + @Override + public IncentiveActivityRecord incentiveForVhndMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "VHND_PARTICIPATION"; + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check VHND_PARTICIPATION Incentive Exception: ", e); + return null; + } + } + + @Override + public IncentiveActivityRecord incentiveForClusterMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "CLUSTER_MEETING"; + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check CLUSTER_MEETING Incentive Exception: ", e); + return null; + } + } + + @Override + public IncentiveActivityRecord incentiveForAttendingVhsnc(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "VHSNC_MEETING"; + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check VHSNC_MEETING Incentive Exception: ", e); return null; } } @@ -238,12 +334,12 @@ private IncentiveActivityRecord saveIncentive( record = incentiveRecordRepo.save(record); - logger.info("Leprosy Incentive saved successfully for benId: {}", benId); + logger.info("Incentive saved successfully for benId: {}", benId); return record; } catch (Exception e) { - logger.error("Save Leprosy Incentive Exception: ", e); + logger.error("Error Incentive Exception: ", e); return null; } } diff --git a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java index c64654d3..579b84c9 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -29,6 +29,7 @@ import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.iemr.*; +import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.VillageLevelFormService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,8 +38,10 @@ import java.sql.Timestamp; import java.time.LocalDate; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -70,6 +73,9 @@ public class VillageLevelFormServiceImpl implements VillageLevelFormService { @Autowired private AHDFormRepo ahdFormRepo; + @Autowired + private IncentiveLogicService incentiveLogicService; + @Override public Boolean saveForm(VhndDto dto) { @@ -144,7 +150,12 @@ private Boolean saveVhncFormData(VhncFormDTO vhncFormDTO, Integer userID) { vhncForm.setFormType("VHNC"); vhncFormRepo.save(vhncForm); - checkAndAddIncentives(vhncForm.getVhncDate(), Math.toIntExact(vhncForm.getUserId()), "VHSNC_MEETING", vhncForm.getCreatedBy()); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + LocalDate localDate = LocalDate.parse(vhncForm.getVhncDate(), formatter); + + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + incentiveLogicService.incentiveForAttendingVhsnc(0L,date,date,Math.toIntExact(vhncForm.getUserId())); return true; } @@ -164,7 +175,12 @@ private Boolean savePhcForm(PhcReviewMeetingFormDTO dto, Integer userID) { phcReviewForm.setImage2(dto.getImage2()); phcReviewForm.setFormType("PHC"); phcReviewFormRepo.save(phcReviewForm); - checkAndAddIncentives(phcReviewForm.getPhcReviewDate(), Math.toIntExact(phcReviewForm.getUserId()), "CLUSTER_MEETING", phcReviewForm.getCreatedBy()); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + LocalDate localDate = LocalDate.parse(phcReviewForm.getPhcReviewDate(), formatter); + + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + incentiveLogicService.incentiveForClusterMeeting(0L,date,date,Math.toIntExact(phcReviewForm.getUserId())); return true; } @@ -226,7 +242,12 @@ private Boolean saveVhndFormData(VHNDFormDTO vhndFormDTO, Integer userID) { vhndForm.setFamilyPlanningHealthcare(vhndFormDTO.getFamilyPlanningHealthcare()); vhndForm.setFormType("VHND"); vhndRepo.save(vhndForm); - checkAndAddIncentives(vhndForm.getVhndDate(), vhndForm.getUserId(), "VHND_PARTICIPATION", vhndForm.getCreatedBy()); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + LocalDate localDate = LocalDate.parse(vhndForm.getVhndDate(), formatter); + + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + incentiveLogicService.incentiveForVhndMeeting(0L,date,date,vhndForm.getUserId()); return true; From 56d1bd2433b940fff6348a62bed8298128caf9a9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 10 Feb 2026 15:45:42 +0530 Subject: [PATCH 07/65] incentive upload files --- .../java/com/iemr/flw/controller/IncentiveController.java | 4 ++-- src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/IncentiveController.java b/src/main/java/com/iemr/flw/controller/IncentiveController.java index c76d26ae..082c1cf0 100644 --- a/src/main/java/com/iemr/flw/controller/IncentiveController.java +++ b/src/main/java/com/iemr/flw/controller/IncentiveController.java @@ -103,8 +103,8 @@ public String getAllIncentivesByUserId(@RequestBody GetBenRequestHandler request return response.toString(); } - @RequestMapping(value = {"/update"}, method = RequestMethod.POST) - public String updateIncentive(@RequestBody PendingActivityDTO requestDTO) { + @RequestMapping(value = {"/update"}, method = RequestMethod.POST, consumes = {"multipart/form-data"}) + public String updateIncentive(@ModelAttribute PendingActivityDTO requestDTO) { OutputResponse response = new OutputResponse(); try { diff --git a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java index 4d8dbd99..df15d41d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java @@ -9,6 +9,6 @@ public class PendingActivityDTO { private Long id; private Integer userId; - private List Images; + private List images; private String moduleName; } From 79ddfa2d1ce9f7595ed4a30864d99d69eff4c9b9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 17:15:31 +0530 Subject: [PATCH 08/65] incentive upload files --- .../java/com/iemr/flw/controller/IncentiveController.java | 6 +++--- src/main/java/com/iemr/flw/service/MaaMeetingService.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/IncentiveController.java b/src/main/java/com/iemr/flw/controller/IncentiveController.java index 082c1cf0..ba60dffb 100644 --- a/src/main/java/com/iemr/flw/controller/IncentiveController.java +++ b/src/main/java/com/iemr/flw/controller/IncentiveController.java @@ -116,12 +116,12 @@ public String updateIncentive(@ModelAttribute PendingActivityDTO requestDTO) { if (s != null) response.setResponse(s); else - response.setError(5000, "No record found"); + response.setError(500, "No record found"); } else - response.setError(5000, "Invalid/NULL request obj"); + response.setError(500, "Invalid/NULL request obj"); } catch (Exception e) { logger.error("Error in high risk assessment data : " + e); - response.setError(5000, "Error in high risk assessment data : " + e); + response.setError(500, "Error in high risk assessment data : " + e); } return response.toString(); diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index cb23b7b9..d3319821 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -217,7 +217,7 @@ record = new IncentiveActivityRecord(); record.setIsEligible(true); } else { record.setIsEligible(false); - // updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); + updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); } record.setAmount(Long.valueOf(incentiveActivity.getRate())); From dc864992e7766643da7e9664b098373143a0af25 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 17:32:53 +0530 Subject: [PATCH 09/65] incentive upload files --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 5580e896..3dfd7278 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,6 +205,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); + maaMeetingRequestDTO.setId(pendingActivityDTO.getId()); maaMeetingService.updateMeeting(maaMeetingRequestDTO); }catch (Exception e){ From 72612315a233b673660b56e444cd722cc5ad0afc Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 17:38:50 +0530 Subject: [PATCH 10/65] add record id --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 3dfd7278..08749cdd 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,7 +205,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingRequestDTO.setId(pendingActivityDTO.getId()); + maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); maaMeetingService.updateMeeting(maaMeetingRequestDTO); }catch (Exception e){ From c7f27583c51b6a7426be16132c25929c04ae0adb Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 18:00:40 +0530 Subject: [PATCH 11/65] add record id --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 08749cdd..37d53864 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,7 +205,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); + maaMeetingRequestDTO.setId(1L); maaMeetingService.updateMeeting(maaMeetingRequestDTO); }catch (Exception e){ From 917f8bc878313aecc19cebce0efe94f7d8521088 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 12 Feb 2026 12:57:30 +0530 Subject: [PATCH 12/65] add record id --- .../flw/repo/iemr/IncentiveRecordRepo.java | 2 + .../iemr/flw/service/MaaMeetingService.java | 53 ++++++++++++++----- .../service/impl/IncentiveServiceImpl.java | 4 +- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java index 6b8db13e..2f6dcbe3 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -16,6 +16,8 @@ public interface IncentiveRecordRepo extends JpaRepository new EntityNotFoundException("Meeting not found: " + req.getId())); + + // ✅ NULL CHECK + if (req.getMeetingDate() != null) { + existingMeeting.setMeetingDate(req.getMeetingDate()); + } + if (req.getPlace() != null) { + existingMeeting.setPlace(req.getPlace()); + } + if (req.getParticipants() != null) { + existingMeeting.setParticipants(req.getParticipants()); + } + if (req.getAshaId() != null) { + existingMeeting.setAshaId(req.getAshaId()); + } + if (req.getCreatedBY() != null) { // ✅ Typo fixed: CreatedBY → CreatedBy + existingMeeting.setCreatedBy(req.getCreatedBY()); + } + + // Images - only if provided + if (req.getMeetingImages() != null && req.getMeetingImages().length > 0) { + List base64Images = Arrays.stream(req.getMeetingImages()) + .filter(file -> file != null && !file.isEmpty()) + .map(this::convertToBase64) + .collect(Collectors.toList()); + existingMeeting.setMeetingImagesJson(objectMapper.writeValueAsString(base64Images)); + } + if (existingMeeting.getMeetingImagesJson() != null) { - checkAndUpdateIncentive(existingMeeting); + checkAndUpdateIncentive(incentiveRecordId); } return repository.save(existingMeeting); @@ -172,17 +206,8 @@ private void updatePendingActivity(Integer userId, Long recordId, Long activityI } - private void checkAndUpdateIncentive(MaaMeeting meeting) { - IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); - if (incentiveActivityAM != null) { - updateIncentive(incentiveActivityAM, meeting); - } - if (incentiveActivityCH != null) { - updateIncentive(incentiveActivityCH, meeting); - - } - + private void checkAndUpdateIncentive(Long incentiveId) { + updateIncentive(incentiveId); } private void checkAndAddIncentive(MaaMeeting meeting) { @@ -226,9 +251,9 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(IncentiveActivity incentiveActivity, MaaMeeting meeting) { + private void updateIncentive(Long id ) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L, meeting.getAshaId()); + .findRecordById(id); if (record != null) { record = new IncentiveActivityRecord(); diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 37d53864..c18d7e50 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,8 +205,8 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingRequestDTO.setId(1L); - maaMeetingService.updateMeeting(maaMeetingRequestDTO); + maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); + maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); }catch (Exception e){ return e.getMessage(); From 4db1fb2a0e667fe01deca76ba3124e020d7ee0af Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 12 Feb 2026 13:08:25 +0530 Subject: [PATCH 13/65] fix method name --- .../com/iemr/flw/repo/iemr/IncentiveRecordRepo.java | 3 ++- .../java/com/iemr/flw/service/MaaMeetingService.java | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java index 2f6dcbe3..0c2dc21b 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -9,6 +9,7 @@ import java.sql.Timestamp; import java.util.List; +import java.util.Optional; @Repository public interface IncentiveRecordRepo extends JpaRepository { @@ -16,7 +17,7 @@ public interface IncentiveRecordRepo extends JpaRepository findById(Long id); @Query("select record from IncentiveActivityRecord record where record.activityId = :id and record.createdDate = :createdDate and record.benId = :benId and record.ashaId = :ashaId") diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index cd734110..87010d90 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -251,17 +251,17 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(Long id ) { - IncentiveActivityRecord record = recordRepo - .findRecordById(id); + private void updateIncentive(Long id) { - if (record != null) { - record = new IncentiveActivityRecord(); + Optional optionalRecord = recordRepo.findById(id); + + if (optionalRecord.isPresent()) { + IncentiveActivityRecord record = optionalRecord.get(); record.setIsEligible(true); recordRepo.save(record); } - } + } From adf16a4804c6365f0f1eb7539a8c7b0d5773dfb7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 12 Feb 2026 13:17:47 +0530 Subject: [PATCH 14/65] make changes in response --- .../com/iemr/flw/service/MaaMeetingService.java | 16 ++++++++++------ .../flw/service/impl/IncentiveServiceImpl.java | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 87010d90..bde156a6 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -111,7 +111,7 @@ public MaaMeeting updateMeeting(MaaMeetingRequestDTO req) throws JsonProcessingE return repository.save(existingMeeting); } - public MaaMeeting updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long incentiveRecordId) throws JsonProcessingException { + public String updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long incentiveRecordId) throws JsonProcessingException { MaaMeeting existingMeeting = repository.findById(req.getId()) .orElseThrow(() -> new EntityNotFoundException("Meeting not found: " + req.getId())); @@ -140,12 +140,14 @@ public MaaMeeting updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long ince .collect(Collectors.toList()); existingMeeting.setMeetingImagesJson(objectMapper.writeValueAsString(base64Images)); } + repository.save(existingMeeting); if (existingMeeting.getMeetingImagesJson() != null) { - checkAndUpdateIncentive(incentiveRecordId); + return checkAndUpdateIncentive(incentiveRecordId); } - return repository.save(existingMeeting); + + return "Fail to update meeting image"; } @@ -206,8 +208,8 @@ private void updatePendingActivity(Integer userId, Long recordId, Long activityI } - private void checkAndUpdateIncentive(Long incentiveId) { - updateIncentive(incentiveId); + private String checkAndUpdateIncentive(Long incentiveId) { + return updateIncentive(incentiveId); } private void checkAndAddIncentive(MaaMeeting meeting) { @@ -251,7 +253,7 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(Long id) { + private String updateIncentive(Long id) { Optional optionalRecord = recordRepo.findById(id); @@ -259,7 +261,9 @@ private void updateIncentive(Long id) { IncentiveActivityRecord record = optionalRecord.get(); record.setIsEligible(true); recordRepo.save(record); + return "Incentive update successfully"; } + return "Fail to update Incentive"; } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index c18d7e50..8d644667 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -206,7 +206,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); - maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); + return maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); }catch (Exception e){ return e.getMessage(); From d1f81401d6f3aebc076164253a005d42a18e43ba Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 19 Feb 2026 15:30:13 +0530 Subject: [PATCH 15/65] implement check on pending doc for incentive review --- .../domain/iemr/IncentivePendingActivity.java | 8 +- .../iemr/flw/dto/iemr/PendingActivityDTO.java | 1 + .../IncentivePendingActivityRepository.java | 1 + .../iemr/flw/service/MaaMeetingService.java | 11 ++- .../service/impl/IncentiveServiceImpl.java | 96 ++++++++++--------- 5 files changed, 61 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java b/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java index 870a48f5..3f35dc59 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java @@ -24,10 +24,10 @@ public class IncentivePendingActivity { @Column(name = "record_id", nullable = false) private Long recordId; - - @Column(name = "module_name", nullable = false, length = 100) - private String moduleName; - + + @Column(name = "m_incentive_id") + private Long mincentiveId; + @Column(name = "user_id", nullable = false) private Integer userId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java index 4d8dbd99..78a20516 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java @@ -11,4 +11,5 @@ public class PendingActivityDTO { private Integer userId; private List Images; private String moduleName; + private String name; } diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java index 9bac8d21..89b2bed5 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java @@ -15,4 +15,5 @@ public interface IncentivePendingActivityRepository extends JpaRepository findByMincentiveIdAndActivityId(Long mIncentiveId,Long activityId); } diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index cb23b7b9..5813bbff 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -160,12 +160,12 @@ public List getAllMeetings(GetBenRequestHandler getBenReq }).collect(Collectors.toList()); } - private void updatePendingActivity(Integer userId, Long recordId, Long activityId, String moduleName) { + private void updatePendingActivity(Integer userId, Long recordId, Long activityId, Long mIncentiveId) { IncentivePendingActivity incentivePendingActivity = new IncentivePendingActivity(); incentivePendingActivity.setActivityId(activityId); incentivePendingActivity.setRecordId(recordId); incentivePendingActivity.setUserId(userId); - incentivePendingActivity.setModuleName(moduleName); + incentivePendingActivity.setMincentiveId(mIncentiveId); if (incentivePendingActivity != null) { incentivePendingActivityRepository.save(incentivePendingActivity); } @@ -186,8 +186,9 @@ private void checkAndUpdateIncentive(MaaMeeting meeting) { } private void checkAndAddIncentive(MaaMeeting meeting) { - IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); + String activityName = "MAA_QUARTERLY_MEETING"; + IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, GroupName.CHILD_HEALTH.getDisplayName()); + IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, GroupName.ACTIVITY.getDisplayName()); if (incentiveActivityAM != null) { addIncentive(incentiveActivityAM, meeting); } @@ -217,7 +218,7 @@ record = new IncentiveActivityRecord(); record.setIsEligible(true); } else { record.setIsEligible(false); - // updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); + updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), incentiveActivity.getId()); } record.setAmount(Long.valueOf(incentiveActivity.getRate())); diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 5580e896..72b4b1be 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -78,7 +78,7 @@ public String saveIncentivesMaster(List activityDTOS) { }); String saved = ""; activityDTOS.forEach(dto -> saved.concat(dto.getGroup() + ": " + dto.getName())); - return "saved master data for " + saved ; + return "saved master data for " + saved; } catch (Exception e) { } @@ -90,10 +90,10 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { try { List incs = new ArrayList<>(); - if(incentiveRequestDTO.getState()==StateCode.CG.getStateCode()){ + if (incentiveRequestDTO.getState() == StateCode.CG.getStateCode()) { incs = incentivesRepo.findAll().stream().filter(incentiveActivity -> incentiveActivity.getGroup().equals("ACTIVITY")).collect(Collectors.toList()); - }else { + } else { incs = incentivesRepo.findAll().stream().filter(incentiveActivity -> !incentiveActivity.getGroup().equals("ACTIVITY")).collect(Collectors.toList()); } @@ -102,40 +102,38 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { // Fetch language mapping IncentiveActivityLangMapping mapping = incentiveActivityLangMappingRepo - .findByIdAndName(inc.getId(),inc.getName()); - + .findByIdAndName(inc.getId(), inc.getName()); if (mapping != null) { dto.setName(mapping.getName()); dto.setGroupName(mapping.getGroup()); - if(Objects.equals(incentiveRequestDTO.getLangCode(), "en")){ + if (Objects.equals(incentiveRequestDTO.getLangCode(), "en")) { dto.setDescription(inc.getDescription()); + } else if (Objects.equals(incentiveRequestDTO.getLangCode(), "as")) { - }else if(Objects.equals(incentiveRequestDTO.getLangCode(), "as")){ - - if(mapping.getAssameActivityDescription()!=null){ + if (mapping.getAssameActivityDescription() != null) { dto.setDescription(mapping.getAssameActivityDescription()); - }else { + } else { dto.setDescription(mapping.getDescription()); } - }else if(Objects.equals(incentiveRequestDTO.getLangCode(), "hi")){ - if(mapping.getHindiActivityDescription()!=null){ + } else if (Objects.equals(incentiveRequestDTO.getLangCode(), "hi")) { + if (mapping.getHindiActivityDescription() != null) { dto.setDescription(mapping.getHindiActivityDescription()); - }else { + } else { dto.setDescription(mapping.getDescription()); } } - }else { + } else { dto.setGroupName(inc.getGroup()); } @@ -156,30 +154,30 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { @Override public String getAllIncentivesByUserId(GetBenRequestHandler request) { - if(request.getVillageID()!= StateCode.CG.getStateCode()){ + if (request.getVillageID() != StateCode.CG.getStateCode()) { checkMonthlyAshaIncentive(request.getAshaId()); } List dtos = new ArrayList<>(); List entities = recordRepo.findRecordsByAsha(request.getAshaId()); - if(request.getVillageID()==StateCode.CG.getStateCode()){ - entities = entities.stream().filter(entitie-> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(),true)!=null).collect(Collectors.toList()); + if (request.getVillageID() == StateCode.CG.getStateCode()) { + entities = entities.stream().filter(entitie -> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(), true) != null).collect(Collectors.toList()); - }else { - entities = entities.stream().filter(entitie-> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(),false)!=null).collect(Collectors.toList()); + } else { + entities = entities.stream().filter(entitie -> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(), false) != null).collect(Collectors.toList()); } entities.forEach(entry -> { - if(entry.getName()==null){ - if(entry.getBenId()!=0 && entry.getBenId()>0L){ + if (entry.getName() == null) { + if (entry.getBenId() != 0 && entry.getBenId() > 0L) { Long regId = beneficiaryRepo.getBenRegIdFromBenId(entry.getBenId()); - logger.info("rmnchBeneficiaryDetailsRmnch"+regId); + logger.info("rmnchBeneficiaryDetailsRmnch" + regId); BigInteger benDetailId = beneficiaryRepo.findByBenRegIdFromMapping(BigInteger.valueOf(regId)).getBenDetailsId(); RMNCHMBeneficiarydetail rmnchBeneficiaryDetails = beneficiaryRepo.findByBeneficiaryDetailsId(benDetailId); - String beneName = rmnchBeneficiaryDetails.getFirstName()+" "+rmnchBeneficiaryDetails.getLastName(); + String beneName = rmnchBeneficiaryDetails.getFirstName() + " " + rmnchBeneficiaryDetails.getLastName(); entry.setName(beneName); - }else{ + } else { entry.setName(""); } @@ -196,47 +194,51 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { @Override public String updateIncentive(PendingActivityDTO pendingActivityDTO) { - Optional incentivePendingActivity = incentivePendingActivityRepository.findByUserIdAndModuleNameAndActivityId(pendingActivityDTO.getUserId(),pendingActivityDTO.getModuleName(),pendingActivityDTO.getId()); - - if(incentivePendingActivity.isPresent()){ - IncentivePendingActivity existingIncentivePendingActivity = incentivePendingActivity.get(); - if(existingIncentivePendingActivity.getModuleName().equals("MAA_MEETING")){ - if(pendingActivityDTO.getImages()!=null){ - try { - MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); - maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingService.updateMeeting(maaMeetingRequestDTO); - - }catch (Exception e){ - return e.getMessage(); - } + IncentiveActivity incentiveActivity = incentivesRepo.findIncentiveMasterByNameAndGroup(pendingActivityDTO.getName(), pendingActivityDTO.getModuleName()); + if (incentiveActivity != null) { + Optional incentivePendingActivity = incentivePendingActivityRepository.findByMincentiveIdAndActivityId(pendingActivityDTO.getId(), incentiveActivity.getId()); + if (incentivePendingActivity.isPresent()) { + IncentivePendingActivity existingIncentivePendingActivity = incentivePendingActivity.get(); + if (existingIncentivePendingActivity.getActivityId().equals(pendingActivityDTO.getId())) { + if (pendingActivityDTO.getImages() != null) { + try { + MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); + maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); + maaMeetingService.updateMeeting(maaMeetingRequestDTO); + + } catch (Exception e) { + return e.getMessage(); + } + } } } } - return null; + + + return null; } - private void checkMonthlyAshaIncentive(Integer ashaId){ + private void checkMonthlyAshaIncentive(Integer ashaId) { IncentiveActivity MOBILEBILLREIMB_ACTIVITY = incentivesRepo.findIncentiveMasterByNameAndGroup("MOBILE_BILL_REIMB", GroupName.OTHER_INCENTIVES.getDisplayName()); IncentiveActivity ADDITIONAL_ASHA_INCENTIVE = incentivesRepo.findIncentiveMasterByNameAndGroup("ADDITIONAL_ASHA_INCENTIVE", GroupName.ADDITIONAL_INCENTIVE.getDisplayName()); IncentiveActivity ASHA_MONTHLY_ROUTINE = incentivesRepo.findIncentiveMasterByNameAndGroup("ASHA_MONTHLY_ROUTINE", GroupName.ASHA_MONTHLY_ROUTINE.getDisplayName()); - if(MOBILEBILLREIMB_ACTIVITY!=null){ - addMonthlyAshaIncentiveRecord(MOBILEBILLREIMB_ACTIVITY,ashaId); + if (MOBILEBILLREIMB_ACTIVITY != null) { + addMonthlyAshaIncentiveRecord(MOBILEBILLREIMB_ACTIVITY, ashaId); } - if(ADDITIONAL_ASHA_INCENTIVE!=null){ - addMonthlyAshaIncentiveRecord(ADDITIONAL_ASHA_INCENTIVE,ashaId); + if (ADDITIONAL_ASHA_INCENTIVE != null) { + addMonthlyAshaIncentiveRecord(ADDITIONAL_ASHA_INCENTIVE, ashaId); } - if(ASHA_MONTHLY_ROUTINE!=null){ - addMonthlyAshaIncentiveRecord(ASHA_MONTHLY_ROUTINE,ashaId); + if (ASHA_MONTHLY_ROUTINE != null) { + addMonthlyAshaIncentiveRecord(ASHA_MONTHLY_ROUTINE, ashaId); } } - private void addMonthlyAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer ashaId){ + private void addMonthlyAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer ashaId) { Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now()); Timestamp startOfMonth = Timestamp.valueOf(LocalDate.now().withDayOfMonth(1).atStartOfDay()); From fc13d610ff46c4299df2b4e7411b6b15cc60f6f0 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 19 Feb 2026 16:01:04 +0530 Subject: [PATCH 16/65] implement check on pending doc for incentive review --- .../iemr/flw/service/MaaMeetingService.java | 68 +++++++++++++------ .../service/impl/IncentiveServiceImpl.java | 27 ++++---- 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 5813bbff..24b1447e 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -107,8 +107,42 @@ public MaaMeeting updateMeeting(MaaMeetingRequestDTO req) throws JsonProcessingE } checkAndAddIncentive(existingMeeting); + + return repository.save(existingMeeting); + } + + public MaaMeeting updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long incentiveRecordId) throws JsonProcessingException { + MaaMeeting existingMeeting = repository.findById(req.getId()) + .orElseThrow(() -> new EntityNotFoundException("Meeting not found: " + req.getId())); + + // ✅ NULL CHECK + if (req.getMeetingDate() != null) { + existingMeeting.setMeetingDate(req.getMeetingDate()); + } + if (req.getPlace() != null) { + existingMeeting.setPlace(req.getPlace()); + } + if (req.getParticipants() != null) { + existingMeeting.setParticipants(req.getParticipants()); + } + if (req.getAshaId() != null) { + existingMeeting.setAshaId(req.getAshaId()); + } + if (req.getCreatedBY() != null) { // ✅ Typo fixed: CreatedBY → CreatedBy + existingMeeting.setCreatedBy(req.getCreatedBY()); + } + + // Images - only if provided + if (req.getMeetingImages() != null && req.getMeetingImages().length > 0) { + List base64Images = Arrays.stream(req.getMeetingImages()) + .filter(file -> file != null && !file.isEmpty()) + .map(this::convertToBase64) + .collect(Collectors.toList()); + existingMeeting.setMeetingImagesJson(objectMapper.writeValueAsString(base64Images)); + } + if (existingMeeting.getMeetingImagesJson() != null) { - checkAndUpdateIncentive(existingMeeting); + checkAndUpdateIncentive(incentiveRecordId); } return repository.save(existingMeeting); @@ -172,23 +206,13 @@ private void updatePendingActivity(Integer userId, Long recordId, Long activityI } - private void checkAndUpdateIncentive(MaaMeeting meeting) { - IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); - if (incentiveActivityAM != null) { - updateIncentive(incentiveActivityAM, meeting); - } - if (incentiveActivityCH != null) { - updateIncentive(incentiveActivityCH, meeting); - - } - + private void checkAndUpdateIncentive(Long incentiveId) { + updateIncentive(incentiveId); } private void checkAndAddIncentive(MaaMeeting meeting) { - String activityName = "MAA_QUARTERLY_MEETING"; - IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, GroupName.ACTIVITY.getDisplayName()); + IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); + IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); if (incentiveActivityAM != null) { addIncentive(incentiveActivityAM, meeting); } @@ -218,7 +242,7 @@ record = new IncentiveActivityRecord(); record.setIsEligible(true); } else { record.setIsEligible(false); - updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), incentiveActivity.getId()); + updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(),incentiveActivity.getId()); } record.setAmount(Long.valueOf(incentiveActivity.getRate())); @@ -227,17 +251,17 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(IncentiveActivity incentiveActivity, MaaMeeting meeting) { - IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L, meeting.getAshaId()); + private void updateIncentive(Long id) { - if (record != null) { - record = new IncentiveActivityRecord(); + Optional optionalRecord = recordRepo.findById(id); + + if (optionalRecord.isPresent()) { + IncentiveActivityRecord record = optionalRecord.get(); record.setIsEligible(true); recordRepo.save(record); } - } + } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 306516cd..ed3cc0b3 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -78,7 +78,7 @@ public String saveIncentivesMaster(List activityDTOS) { }); String saved = ""; activityDTOS.forEach(dto -> saved.concat(dto.getGroup() + ": " + dto.getName())); - return "saved master data for " + saved; + return "saved master data for " + saved ; } catch (Exception e) { } @@ -206,12 +206,13 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingService.updateMeeting(maaMeetingRequestDTO); + maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); - }catch (Exception e){ - return e.getMessage(); - } + } catch (Exception e) { + return e.getMessage(); + } + } } } } @@ -219,25 +220,25 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { } - private void checkMonthlyAshaIncentive(Integer ashaId) { + private void checkMonthlyAshaIncentive(Integer ashaId){ IncentiveActivity MOBILEBILLREIMB_ACTIVITY = incentivesRepo.findIncentiveMasterByNameAndGroup("MOBILE_BILL_REIMB", GroupName.OTHER_INCENTIVES.getDisplayName()); IncentiveActivity ADDITIONAL_ASHA_INCENTIVE = incentivesRepo.findIncentiveMasterByNameAndGroup("ADDITIONAL_ASHA_INCENTIVE", GroupName.ADDITIONAL_INCENTIVE.getDisplayName()); IncentiveActivity ASHA_MONTHLY_ROUTINE = incentivesRepo.findIncentiveMasterByNameAndGroup("ASHA_MONTHLY_ROUTINE", GroupName.ASHA_MONTHLY_ROUTINE.getDisplayName()); - if (MOBILEBILLREIMB_ACTIVITY != null) { - addMonthlyAshaIncentiveRecord(MOBILEBILLREIMB_ACTIVITY, ashaId); + if(MOBILEBILLREIMB_ACTIVITY!=null){ + addMonthlyAshaIncentiveRecord(MOBILEBILLREIMB_ACTIVITY,ashaId); } - if (ADDITIONAL_ASHA_INCENTIVE != null) { - addMonthlyAshaIncentiveRecord(ADDITIONAL_ASHA_INCENTIVE, ashaId); + if(ADDITIONAL_ASHA_INCENTIVE!=null){ + addMonthlyAshaIncentiveRecord(ADDITIONAL_ASHA_INCENTIVE,ashaId); } - if (ASHA_MONTHLY_ROUTINE != null) { - addMonthlyAshaIncentiveRecord(ASHA_MONTHLY_ROUTINE, ashaId); + if(ASHA_MONTHLY_ROUTINE!=null){ + addMonthlyAshaIncentiveRecord(ASHA_MONTHLY_ROUTINE,ashaId); } } - private void addMonthlyAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer ashaId) { + private void addMonthlyAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer ashaId){ Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now()); Timestamp startOfMonth = Timestamp.valueOf(LocalDate.now().withDayOfMonth(1).atStartOfDay()); From d13fe8a13ab67bb16096725121fcd3cb488b25e9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 19 Feb 2026 17:31:47 +0530 Subject: [PATCH 17/65] implement check on pending doc for incentive review --- .../com/iemr/flw/masterEnum/GroupName.java | 3 + .../iemr/flw/masterEnum/IncentiveName.java | 139 ++++++++++++ .../service/impl/ChildCareServiceImpl.java | 198 +++++++++++------- .../service/impl/IncentiveServiceImpl.java | 166 ++++++++++----- 4 files changed, 387 insertions(+), 119 deletions(-) create mode 100644 src/main/java/com/iemr/flw/masterEnum/IncentiveName.java diff --git a/src/main/java/com/iemr/flw/masterEnum/GroupName.java b/src/main/java/com/iemr/flw/masterEnum/GroupName.java index 8d6736eb..e53733b0 100644 --- a/src/main/java/com/iemr/flw/masterEnum/GroupName.java +++ b/src/main/java/com/iemr/flw/masterEnum/GroupName.java @@ -33,3 +33,6 @@ public String getDisplayName() { } + + + diff --git a/src/main/java/com/iemr/flw/masterEnum/IncentiveName.java b/src/main/java/com/iemr/flw/masterEnum/IncentiveName.java new file mode 100644 index 00000000..052ab011 --- /dev/null +++ b/src/main/java/com/iemr/flw/masterEnum/IncentiveName.java @@ -0,0 +1,139 @@ +package com.iemr.flw.masterEnum; + +public enum IncentiveName { + + // ---------------- CHILD HEALTH ---------------- + HBNC_0_42_DAYS(GroupName.CHILD_HEALTH), + HBYC_QUARTERLY_VISITS(GroupName.CHILD_HEALTH), + SNCU_LBW_FOLLOWUP(GroupName.CHILD_HEALTH), + SAM_REFERRAL_NRC(GroupName.CHILD_HEALTH), + CHILD_DEATH_REPORTING(GroupName.CHILD_HEALTH), + E_HBNC_CACHAR(GroupName.CHILD_HEALTH), + MAA_QUARTERLY_MEETING(GroupName.CHILD_HEALTH), + NATIONAL_DEWORMING_DAY(GroupName.CHILD_HEALTH), + ORS_DISTRIBUTION(GroupName.CHILD_HEALTH), + NATIONAL_IRON_PLUS(GroupName.CHILD_HEALTH), + NIPI_CHILDREN(GroupName.CHILD_HEALTH), + + // ---------------- IMMUNIZATION ---------------- + FULL_IMMUNIZATION_0_1(GroupName.IMMUNIZATION), + COMPLETE_IMMUNIZATION_1_2(GroupName.IMMUNIZATION), + DPT_IMMUNIZATION_5_YEARS(GroupName.IMMUNIZATION), + CHILD_MOBILIZATION_SESSIONS(GroupName.IMMUNIZATION), + + // ---------------- MATERNAL HEALTH ---------------- + ANC_REGISTRATION_1ST_TRIM(GroupName.MATERNAL_HEALTH), + FULL_ANC(GroupName.MATERNAL_HEALTH), + COMPREHENSIVE_ABORTION_CARE(GroupName.MATERNAL_HEALTH), + INST_DELIVERY_HRP(GroupName.MATERNAL_HEALTH), + EPMSMA_INST_DELIVERY(GroupName.MATERNAL_HEALTH), + EPMSMA_HRP_IDENTIFIED(GroupName.MATERNAL_HEALTH), + MATERNAL_DEATH_REPORT(GroupName.MATERNAL_HEALTH), + MH_MISOPROSTOL(GroupName.MATERNAL_HEALTH), + MH_EARLY_REG_BANK(GroupName.MATERNAL_HEALTH), + MH_ANC_3RD_TRIM(GroupName.MATERNAL_HEALTH), + MH_MOTIVATE_INST_DEL(GroupName.MATERNAL_HEALTH), + MH_HR_POSTNATAL(GroupName.MATERNAL_HEALTH), + + // ---------------- JSY ---------------- + JSY_1ST_DEL_ANC_RURAL(GroupName.JSY), + JSY_1ST_DEL_INST_RURAL(GroupName.JSY), + JSY_2ND_DEL_ANC_RURAL(GroupName.JSY), + JSY_2ND_DEL_INST_RURAL(GroupName.JSY), + JSY_3RD_DEL_ANC_RURAL(GroupName.JSY), + JSY_3RD_DEL_INST_RURAL(GroupName.JSY), + JSY_4TH_DEL_ANC_RURAL(GroupName.JSY), + JSY_4TH_DEL_INST_RURAL(GroupName.JSY), + JSY_ANC_URBAN(GroupName.JSY), + JSY_INST_URBAN(GroupName.JSY), + + // ---------------- FAMILY PLANNING ---------------- + FP_ANC_MPA1(GroupName.FAMILY_PLANNING), + FP_ANC_MPA2(GroupName.FAMILY_PLANNING), + FP_ANC_MPA3(GroupName.FAMILY_PLANNING), + FP_ANC_MPA4(GroupName.FAMILY_PLANNING), + FP_ANC_MPA5(GroupName.FAMILY_PLANNING), + FIRST_SECOND_CHILD_GAP(GroupName.FAMILY_PLANNING), + FP_DELAY_2Y(GroupName.FAMILY_PLANNING), + FP_LIMIT_2CHILD(GroupName.FAMILY_PLANNING), + FP_PPIUCD(GroupName.FAMILY_PLANNING), + FP_PAIUCD(GroupName.FAMILY_PLANNING), + FP_CONDOM(GroupName.FAMILY_PLANNING), + FP_ORALPILLS(GroupName.FAMILY_PLANNING), + FP_EC(GroupName.FAMILY_PLANNING), + FP_FEMALE_STER(GroupName.FAMILY_PLANNING), + FP_PPS(GroupName.FAMILY_PLANNING), + FP_MINILAP(GroupName.FAMILY_PLANNING), + FP_MALE_STER(GroupName.FAMILY_PLANNING), + FP_EC_SURVEY(GroupName.FAMILY_PLANNING), + FP_SAAS_BAHU(GroupName.FAMILY_PLANNING), + FP_NP_KIT(GroupName.FAMILY_PLANNING), + + // ---------------- ADOLESCENT HEALTH ---------------- + AH_SANITARY(GroupName.ADOLESCENT_HEALTH), + AH_PEER_ED(GroupName.ADOLESCENT_HEALTH), + AH_MOBILIZE(GroupName.ADOLESCENT_HEALTH), + + // ---------------- ASHA ROUTINE ---------------- + ASHA_MONTHLY_ROUTINE(GroupName.ASHA_MONTHLY_ROUTINE), + + // ---------------- UMBRELLA PROGRAMMES ---------------- + NPCB_GOVT_CATARACT(GroupName.UMBRELLA_PROGRAMMES), + NPCB_PRIVATE_CATARACT(GroupName.UMBRELLA_PROGRAMMES), + DSTB_TREATMENT(GroupName.UMBRELLA_PROGRAMMES), + DRTB_TREATMENT(GroupName.UMBRELLA_PROGRAMMES), + INFORMANT_INCENTIVE(GroupName.UMBRELLA_PROGRAMMES), + TPT_PROVIDING(GroupName.UMBRELLA_PROGRAMMES), + BANK_ACCOUNT_NPY(GroupName.UMBRELLA_PROGRAMMES), + HOUSE_TO_HOUSE_SURVEY(GroupName.UMBRELLA_PROGRAMMES), + NLEP_TRAINING(GroupName.UMBRELLA_PROGRAMMES), + NLEP_CASE_DETECTION(GroupName.UMBRELLA_PROGRAMMES), + NLEP_PB_TREATMENT(GroupName.UMBRELLA_PROGRAMMES), + NLEP_MB_TREATMENT(GroupName.UMBRELLA_PROGRAMMES), + LEPROSY_PARTIAL_ASHA(GroupName.UMBRELLA_PROGRAMMES), + NVBDCP_SLIDE_COLLECTION(GroupName.UMBRELLA_PROGRAMMES), + NVBDCP_MALARIA_TREATMENT(GroupName.UMBRELLA_PROGRAMMES), + AES_JE_REFERRAL(GroupName.UMBRELLA_PROGRAMMES), + DENGUE_CHIKUNGUNYA(GroupName.UMBRELLA_PROGRAMMES), + NIDDCP_SALT_TEST(GroupName.UMBRELLA_PROGRAMMES), + + // ---------------- NCD ---------------- + NCD_POP_ENUMERATION(GroupName.NCD), + NCD_FOLLOWUP_TREATMENT(GroupName.NCD), + NCD_NEW_PATIENT_MEDICATION_SUPPORT(GroupName.NCD), + + // ---------------- ADDITIONAL INCENTIVE ---------------- + ADDITIONAL_ASHA_INCENTIVE(GroupName.ADDITIONAL_INCENTIVE), + + // ---------------- OTHER INCENTIVES ---------------- + ABHA_ID_CREATION(GroupName.OTHER_INCENTIVES), + MOBILE_BILL_REIMB(GroupName.OTHER_INCENTIVES), + + // ---------------- ACTIVITY ---------------- + ANC_FOUR_CHECKUPS_SUPPORT(GroupName.ACTIVITY), + INST_DELIVERY_ESCORT(GroupName.ACTIVITY), + FILARIASIS_MEDICINE_DISTRIBUTION(GroupName.ACTIVITY), + VHND_PARTICIPATION(GroupName.ACTIVITY), + CLUSTER_MEETING(GroupName.ACTIVITY), + VHSNC_MEETING(GroupName.ACTIVITY), + MITANIN_REGISTER(GroupName.ACTIVITY), + HWC_REFERRAL_10_CASES(GroupName.ACTIVITY), + LACTATING_MOTHERS_HOME_VISIT(GroupName.ACTIVITY), + MITANIN_REGISTER_5_INFO_FILL(GroupName.ACTIVITY), + HIGH_RISK_POSTPARTUM_HEALTH_CHECK(GroupName.ACTIVITY), + MOSQUITO_NET_DISTRIBUTION_MOBILIZATION(GroupName.ACTIVITY), + HIGH_RISK_POSTPARTUM_CARE(GroupName.ACTIVITY), + MONTHLY_HONORARIUM(GroupName.ACTIVITY), + FULL_ANC_45(GroupName.ACTIVITY), + MH_MOTIVATE_INST_DEL_46(GroupName.ACTIVITY); + + private final GroupName groupName; + + IncentiveName(GroupName groupName) { + this.groupName = groupName; + } + + public GroupName getGroupName() { + return groupName; + } +} diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index 43a9eb1f..1ceb626a 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -11,6 +11,7 @@ import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.ChildCareService; import com.iemr.flw.utils.JwtUtil; +import jakarta.persistence.EntityNotFoundException; import org.aspectj.weaver.ast.Or; import org.modelmapper.ModelMapper; import org.slf4j.Logger; @@ -75,6 +76,8 @@ public class ChildCareServiceImpl implements ChildCareService { @Autowired private OrsDistributionRepo orsDistributionRepo; + @Autowired + private IncentivePendingActivityRepository incentivePendingActivityRepository; @Override @@ -544,7 +547,8 @@ public List getSamVisitsByBeneficiary(GetBenRequestHandler reque try { List followUpDates = mapper.readValue( entity.getFollowUpVisitDate(), - new TypeReference>() {}); + new TypeReference>() { + }); dto.setFollowUpVisitDate(followUpDates); } catch (JsonProcessingException e) { throw new RuntimeException(e); @@ -559,7 +563,6 @@ public List getSamVisitsByBeneficiary(GetBenRequestHandler reque } - return samResponseListDTO; } @@ -576,25 +579,25 @@ public String saveOrsDistributionDetails(List orsDistributio orsDistribution.setChildCount(orsDistributionDTO.getFields().getNum_under5_children().toString()); orsDistribution.setHouseholdId(orsDistributionDTO.getHouseHoldId()); orsDistribution.setUserId(userRepo.getUserIdByName(orsDistributionDTO.getUserName())); - orsDistribution.setVisitDate(LocalDate.parse(orsDistributionDTO.getFields().getVisit_date(),formatter)); + orsDistribution.setVisitDate(LocalDate.parse(orsDistributionDTO.getFields().getVisit_date(), formatter)); orsDistributionList.add(orsDistribution); }); - logger.info("orsList"+orsDistributionList.size()); - if(!orsDistributionList.isEmpty()){ + logger.info("orsList" + orsDistributionList.size()); + if (!orsDistributionList.isEmpty()) { orsDistributionRepo.saveAll(orsDistributionList); checkAndAddOrdDistributionIncentive(orsDistributionList); return "Saved " + orsDistributionList.size() + " ORS visit records successfully"; } - }catch (Exception e){ - logger.error("ORS Error"+e); + } catch (Exception e) { + logger.error("ORS Error" + e); } - return null ; + return null; } @@ -603,7 +606,7 @@ public List getOrdDistrubtion(GetBenRequestHandler r List entities = orsDistributionRepo.findByUserId(request.getAshaId()); List orsDistributionResponseDTOSList = new ArrayList<>(); - for(OrsDistribution orsDistribution: entities){ + for (OrsDistribution orsDistribution : entities) { OrsDistributionResponseDTO orsDistributionResponseDTO = new OrsDistributionResponseDTO(); OrsDistributionResponseListDTO orsDistributionResponseListDTO = new OrsDistributionResponseListDTO(); @@ -617,9 +620,8 @@ public List getOrdDistrubtion(GetBenRequestHandler r orsDistributionResponseDTOSList.add(orsDistributionResponseDTO); - } - return orsDistributionResponseDTOSList; + return orsDistributionResponseDTOSList; } @@ -633,11 +635,13 @@ private LocalDate parseDate(String dateStr) { for (DateTimeFormatter f : formatters) { try { return LocalDate.parse(dateStr, f); - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } throw new DateTimeParseException("Invalid date format: " + dateStr, dateStr, 0); } + @Override public List saveAllIfa(List dtoList) { return dtoList.stream() @@ -647,16 +651,16 @@ public List saveAllIfa(List dtoList) { } - @Override public List getByBeneficiaryId(GetBenRequestHandler requestHandler) { return ifaDistributionRepository.findByUserId(requestHandler.getAshaId()).stream() .map(this::mapToDTO) .toList(); } + // 🔁 Entity → DTO (date formatted as dd-MM-yyyy) private IfaDistributionDTO mapToDTO(IfaDistribution entity) { - final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); IfaDistributionDTO dto = new IfaDistributionDTO(); @@ -707,20 +711,20 @@ private IfaDistribution mapToEntity(IfaDistributionDTO dto) { return entity; } - private void checkAndAddSamVisitNRCReferalIncentive(List samVisits){ + private void checkAndAddSamVisitNRCReferalIncentive(List samVisits) { samVisits.forEach(samVisit -> { IncentiveActivity samreferralnrcActivityAm = incentivesRepo.findIncentiveMasterByNameAndGroup("SAM_REFERRAL_NRC", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity samreferralnrcActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("SAM_REFERRAL_NRC", GroupName.ACTIVITY.getDisplayName()); - if(samreferralnrcActivityAm!=null){ - if(samVisit.getIsChildReferredNrc().equals("Yes")){ - createIncentiveRecordforSamReferalToNrc(samVisit,samVisit.getBeneficiaryId(),samreferralnrcActivityAm,jwtUtil.getUserNameFromStorage()); + IncentiveActivity samreferralnrcActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("SAM_REFERRAL_NRC", GroupName.ACTIVITY.getDisplayName()); + if (samreferralnrcActivityAm != null) { + if (samVisit.getIsChildReferredNrc().equals("Yes")) { + createIncentiveRecordforSamReferalToNrc(samVisit, samVisit.getBeneficiaryId(), samreferralnrcActivityAm, jwtUtil.getUserNameFromStorage()); } } - if(samreferralnrcActivityCH!=null){ - if(samVisit.getIsChildReferredNrc().equals("Yes")){ - createIncentiveRecordforSamReferalToNrc(samVisit,samVisit.getBeneficiaryId(),samreferralnrcActivityCH,jwtUtil.getUserNameFromStorage()); + if (samreferralnrcActivityCH != null) { + if (samVisit.getIsChildReferredNrc().equals("Yes")) { + createIncentiveRecordforSamReferalToNrc(samVisit, samVisit.getBeneficiaryId(), samreferralnrcActivityCH, jwtUtil.getUserNameFromStorage()); } } @@ -728,20 +732,21 @@ private void checkAndAddSamVisitNRCReferalIncentive(List samVisits){ }); } - private void checkAndAddOrdDistributionIncentive(List orsDistributionList){ + + private void checkAndAddOrdDistributionIncentive(List orsDistributionList) { orsDistributionList.forEach(orsDistribution -> { IncentiveActivity orsPacketActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("ORS_DISTRIBUTION", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity orsPacketActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("ORS_DISTRIBUTION", GroupName.ACTIVITY.getDisplayName()); - if(orsPacketActivityAM!=null){ - if(orsDistribution.getNumOrsPackets()!=null){ - createIncentiveRecordforOrsDistribution(orsDistribution,orsDistribution.getBeneficiaryId(),orsPacketActivityAM,userRepo.getUserNamedByUserId(orsDistribution.getUserId()),false); + IncentiveActivity orsPacketActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("ORS_DISTRIBUTION", GroupName.ACTIVITY.getDisplayName()); + if (orsPacketActivityAM != null) { + if (orsDistribution.getNumOrsPackets() != null) { + createIncentiveRecordforOrsDistribution(orsDistribution, orsDistribution.getBeneficiaryId(), orsPacketActivityAM, userRepo.getUserNamedByUserId(orsDistribution.getUserId()), false); } } - if(orsPacketActivityCH!=null){ - if(orsDistribution.getNumOrsPackets()!=null){ - createIncentiveRecordforOrsDistribution(orsDistribution,orsDistribution.getBeneficiaryId(),orsPacketActivityCH,userRepo.getUserNamedByUserId(orsDistribution.getUserId()),true); + if (orsPacketActivityCH != null) { + if (orsDistribution.getNumOrsPackets() != null) { + createIncentiveRecordforOrsDistribution(orsDistribution, orsDistribution.getBeneficiaryId(), orsPacketActivityCH, userRepo.getUserNamedByUserId(orsDistribution.getUserId()), true); } } @@ -772,9 +777,6 @@ private void checkAndAddHbyncIncentives(List hbycList) { } - - - if (hbyncOrsPacketActivityCH != null) { if (hbyc.getOrs_given()) { createIncentiveRecordforHbyncOrsDistribution(hbyc, hbyc.getBeneficiaryId(), hbyncOrsPacketActivityCH, hbyc.getCreated_by()); @@ -806,7 +808,7 @@ private void checkAndAddHbncIncentives(List hbncVisits) { } logger.info("getDischarged_from_sncu" + hbncVisit.getDischarged_from_sncu()); - if (hbncVisit.getVisit_day().equals("42nd Day") && hbncVisit.getDischarged_from_sncu() && hbncVisit.getBaby_weight() <=2.5) { + if (hbncVisit.getVisit_day().equals("42nd Day") && hbncVisit.getDischarged_from_sncu() && hbncVisit.getBaby_weight() <= 2.5) { IncentiveActivity babyDisChargeSNCUAActivity = incentivesRepo.findIncentiveMasterByNameAndGroup("SNCU_LBW_FOLLOWUP", GroupName.CHILD_HEALTH.getDisplayName()); @@ -923,11 +925,67 @@ record = new IncentiveActivityRecord(); record.setUpdatedBy(hbncVisit.getCreatedBy()); record.setBenId(benId); record.setAshaId(hbncVisit.getAshaId()); + if (hbncVisit.getDischarge_summary_upload() == null || hbncVisit.getDischarge_summary_upload().isEmpty()) { + record.setIsEligible(false); + } else { + record.setIsEligible(false); + updatePendingActivity(hbncVisit.getAshaId(),hbncVisit.getId(),record.getActivityId(),immunizationActivity.getId()); + + } record.setAmount(Long.valueOf(immunizationActivity.getRate())); recordRepo.save(record); } } + private void updatePendingActivity(Integer userId, Long recordId, Long activityId, Long mIncentiveId) { + IncentivePendingActivity incentivePendingActivity = new IncentivePendingActivity(); + incentivePendingActivity.setActivityId(activityId); + incentivePendingActivity.setRecordId(recordId); + incentivePendingActivity.setUserId(userId); + incentivePendingActivity.setMincentiveId(mIncentiveId); + if (incentivePendingActivity != null) { + incentivePendingActivityRepository.save(incentivePendingActivity); + } + + } + public HbncVisit updateHbncFromFileUpload(MultipartFile[] dischargeSncuImage,Long incentiveRecordId,Long id) throws JsonProcessingException { + HbncVisit existingHbncVisit = hbncVisitRepo.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Meeting not found: " + id)); + + + // Images - only if provided + if (dischargeSncuImage != null && dischargeSncuImage.length > 0) { + List base64Images = Arrays.stream(dischargeSncuImage) + .filter(file -> file != null && !file.isEmpty()) + .map(this::convertToBase64) + .collect(Collectors.toList()); + existingHbncVisit.setDischarge_summary_upload(mapper.writeValueAsString(base64Images)); + } + + if (existingHbncVisit.getDischarge_summary_upload() != null) { + updateIncentive(incentiveRecordId); + + } + return hbncVisitRepo.save(existingHbncVisit); + } + private void updateIncentive(Long id) { + + Optional optionalRecord = recordRepo.findById(id); + + if (optionalRecord.isPresent()) { + IncentiveActivityRecord record = optionalRecord.get(); + record.setIsEligible(true); + recordRepo.save(record); + } + } + + private String convertToBase64(MultipartFile file) { + try { + return Base64.getEncoder().encodeToString(file.getBytes()); + } catch (IOException e) { + throw new RuntimeException("Failed to convert image to Base64: " + file.getOriginalFilename(), e); + } + } private void createIncentiveRecordforHbyncVisit(HbycChildVisit data, Long benId, IncentiveActivity immunizationActivity, String createdBy) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); @@ -987,40 +1045,40 @@ record = new IncentiveActivityRecord(); } } - private void createIncentiveRecordforOrsDistribution(OrsDistribution data, Long benId, IncentiveActivity immunizationActivity, String createdBy,boolean isCH) { - try { - // Convert to LocalDate - Timestamp visitDate = Timestamp.valueOf(data.getVisitDate().atStartOfDay()); - IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), visitDate, benId); - double packets = Double.parseDouble(data.getNumOrsPackets()); - double rate = immunizationActivity.getRate(); - - if (record == null) { - - record = new IncentiveActivityRecord(); - record.setActivityId(immunizationActivity.getId()); - record.setCreatedDate(visitDate); - record.setCreatedBy(createdBy); - record.setStartDate(visitDate); - record.setEndDate(visitDate); - record.setUpdatedDate(visitDate); - record.setUpdatedBy(createdBy); - record.setBenId(benId); - record.setAshaId(beneficiaryRepo.getUserIDByUserName(createdBy)); - if(isCH){ - record.setAmount((long) rate); - - }else { - record.setAmount((long) (rate * packets)); - - } - recordRepo.save(record); - } - }catch (Exception e){ - logger.error("Exp"+e.getMessage()); - - } + private void createIncentiveRecordforOrsDistribution(OrsDistribution data, Long benId, IncentiveActivity immunizationActivity, String createdBy, boolean isCH) { + try { + // Convert to LocalDate + Timestamp visitDate = Timestamp.valueOf(data.getVisitDate().atStartOfDay()); + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), visitDate, benId); + double packets = Double.parseDouble(data.getNumOrsPackets()); + double rate = immunizationActivity.getRate(); + + if (record == null) { + + record = new IncentiveActivityRecord(); + record.setActivityId(immunizationActivity.getId()); + record.setCreatedDate(visitDate); + record.setCreatedBy(createdBy); + record.setStartDate(visitDate); + record.setEndDate(visitDate); + record.setUpdatedDate(visitDate); + record.setUpdatedBy(createdBy); + record.setBenId(benId); + record.setAshaId(beneficiaryRepo.getUserIDByUserName(createdBy)); + if (isCH) { + record.setAmount((long) rate); + + } else { + record.setAmount((long) (rate * packets)); + + } + recordRepo.save(record); + } + } catch (Exception e) { + logger.error("Exp" + e.getMessage()); + + } } @@ -1046,8 +1104,8 @@ record = new IncentiveActivityRecord(); record.setAmount((long) incentiveActivity.getRate()); recordRepo.save(record); } - }catch (Exception e){ - logger.error("Exp"+e.getMessage()); + } catch (Exception e) { + logger.error("Exp" + e.getMessage()); } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index ed3cc0b3..94f28e6e 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -10,6 +10,7 @@ import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.IncentiveName; import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; @@ -59,6 +60,9 @@ public class IncentiveServiceImpl implements IncentiveService { @Autowired private MaaMeetingService maaMeetingService; + @Autowired + private ChildCareServiceImpl childCareService; + @Override public String saveIncentivesMaster(List activityDTOS) { try { @@ -78,7 +82,7 @@ public String saveIncentivesMaster(List activityDTOS) { }); String saved = ""; activityDTOS.forEach(dto -> saved.concat(dto.getGroup() + ": " + dto.getName())); - return "saved master data for " + saved ; + return "saved master data for " + saved; } catch (Exception e) { } @@ -90,10 +94,10 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { try { List incs = new ArrayList<>(); - if(incentiveRequestDTO.getState()==StateCode.CG.getStateCode()){ + if (incentiveRequestDTO.getState() == StateCode.CG.getStateCode()) { incs = incentivesRepo.findAll().stream().filter(incentiveActivity -> incentiveActivity.getGroup().equals("ACTIVITY")).collect(Collectors.toList()); - }else { + } else { incs = incentivesRepo.findAll().stream().filter(incentiveActivity -> !incentiveActivity.getGroup().equals("ACTIVITY")).collect(Collectors.toList()); } @@ -102,40 +106,38 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { // Fetch language mapping IncentiveActivityLangMapping mapping = incentiveActivityLangMappingRepo - .findByIdAndName(inc.getId(),inc.getName()); - + .findByIdAndName(inc.getId(), inc.getName()); if (mapping != null) { dto.setName(mapping.getName()); dto.setGroupName(mapping.getGroup()); - if(Objects.equals(incentiveRequestDTO.getLangCode(), "en")){ + if (Objects.equals(incentiveRequestDTO.getLangCode(), "en")) { dto.setDescription(inc.getDescription()); + } else if (Objects.equals(incentiveRequestDTO.getLangCode(), "as")) { - }else if(Objects.equals(incentiveRequestDTO.getLangCode(), "as")){ - - if(mapping.getAssameActivityDescription()!=null){ + if (mapping.getAssameActivityDescription() != null) { dto.setDescription(mapping.getAssameActivityDescription()); - }else { + } else { dto.setDescription(mapping.getDescription()); } - }else if(Objects.equals(incentiveRequestDTO.getLangCode(), "hi")){ - if(mapping.getHindiActivityDescription()!=null){ + } else if (Objects.equals(incentiveRequestDTO.getLangCode(), "hi")) { + if (mapping.getHindiActivityDescription() != null) { dto.setDescription(mapping.getHindiActivityDescription()); - }else { + } else { dto.setDescription(mapping.getDescription()); } } - }else { + } else { dto.setGroupName(inc.getGroup()); } @@ -156,30 +158,30 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { @Override public String getAllIncentivesByUserId(GetBenRequestHandler request) { - if(request.getVillageID()!= StateCode.CG.getStateCode()){ + if (request.getVillageID() != StateCode.CG.getStateCode()) { checkMonthlyAshaIncentive(request.getAshaId()); } List dtos = new ArrayList<>(); List entities = recordRepo.findRecordsByAsha(request.getAshaId()); - if(request.getVillageID()==StateCode.CG.getStateCode()){ - entities = entities.stream().filter(entitie-> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(),true)!=null).collect(Collectors.toList()); + if (request.getVillageID() == StateCode.CG.getStateCode()) { + entities = entities.stream().filter(entitie -> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(), true) != null).collect(Collectors.toList()); - }else { - entities = entities.stream().filter(entitie-> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(),false)!=null).collect(Collectors.toList()); + } else { + entities = entities.stream().filter(entitie -> incentivesRepo.findIncentiveMasterById(entitie.getActivityId(), false) != null).collect(Collectors.toList()); } entities.forEach(entry -> { - if(entry.getName()==null){ - if(entry.getBenId()!=0 && entry.getBenId()>0L){ + if (entry.getName() == null) { + if (entry.getBenId() != 0 && entry.getBenId() > 0L) { Long regId = beneficiaryRepo.getBenRegIdFromBenId(entry.getBenId()); - logger.info("rmnchBeneficiaryDetailsRmnch"+regId); + logger.info("rmnchBeneficiaryDetailsRmnch" + regId); BigInteger benDetailId = beneficiaryRepo.findByBenRegIdFromMapping(BigInteger.valueOf(regId)).getBenDetailsId(); RMNCHMBeneficiarydetail rmnchBeneficiaryDetails = beneficiaryRepo.findByBeneficiaryDetailsId(benDetailId); - String beneName = rmnchBeneficiaryDetails.getFirstName()+" "+rmnchBeneficiaryDetails.getLastName(); + String beneName = rmnchBeneficiaryDetails.getFirstName() + " " + rmnchBeneficiaryDetails.getLastName(); entry.setName(beneName); - }else{ + } else { entry.setName(""); } @@ -196,49 +198,115 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { @Override public String updateIncentive(PendingActivityDTO pendingActivityDTO) { - IncentiveActivity incentiveActivity = incentivesRepo.findIncentiveMasterByNameAndGroup(pendingActivityDTO.getName(), pendingActivityDTO.getModuleName()); - if (incentiveActivity != null) { - Optional incentivePendingActivity = incentivePendingActivityRepository.findByMincentiveIdAndActivityId(pendingActivityDTO.getId(), incentiveActivity.getId()); - if (incentivePendingActivity.isPresent()) { - IncentivePendingActivity existingIncentivePendingActivity = incentivePendingActivity.get(); - if (existingIncentivePendingActivity.getActivityId().equals(pendingActivityDTO.getId())) { - if (pendingActivityDTO.getImages() != null) { - try { - MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); - maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); - - } catch (Exception e) { - return e.getMessage(); - } - } + if (pendingActivityDTO == null) { + return "Invalid request"; + } + + IncentiveName incentiveName; + try { + incentiveName = IncentiveName.valueOf(pendingActivityDTO.getName()); + } catch (IllegalArgumentException e) { + return "Invalid incentive name"; + } + + IncentiveActivity incentiveActivity = + incentivesRepo.findIncentiveMasterByNameAndGroup( + pendingActivityDTO.getName(), + pendingActivityDTO.getModuleName() + ); + + if (incentiveActivity == null) { + return null; + } + + Optional optionalPendingActivity = + incentivePendingActivityRepository + .findByMincentiveIdAndActivityId( + pendingActivityDTO.getId(), + incentiveActivity.getId() + ); + + if (!optionalPendingActivity.isPresent()) { + return null; + } + + IncentivePendingActivity existingActivity = optionalPendingActivity.get(); + + if (!existingActivity.getActivityId().equals(pendingActivityDTO.getId())) { + return null; + } + + if (pendingActivityDTO.getImages() == null || pendingActivityDTO.getImages().isEmpty()) { + return null; + } + + try { + MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); + maaMeetingRequestDTO.setMeetingImages( + pendingActivityDTO.getImages().toArray(new MultipartFile[0]) + ); + + // ✅ ENUM BASED CHECK + if(pendingActivityDTO.getModuleName().equals(GroupName.ACTIVITY)){ + if (incentiveName == IncentiveName.MAA_QUARTERLY_MEETING) { + + maaMeetingService.updateMeetingFromFileUpload( + maaMeetingRequestDTO, + pendingActivityDTO.getId() + ); + } + }else { + if (incentiveName == IncentiveName.MAA_QUARTERLY_MEETING) { + + maaMeetingService.updateMeetingFromFileUpload( + maaMeetingRequestDTO, + pendingActivityDTO.getId() + ); + } + + if (incentiveName == IncentiveName.HBNC_0_42_DAYS) { + + childCareService.updateHbncFromFileUpload( + pendingActivityDTO.getImages().toArray(new MultipartFile[0]), + pendingActivityDTO.getId(), + existingActivity.getRecordId() + + ); } + + } + + + + + } catch (Exception e) { + return e.getMessage(); } - return null; + return null; } - private void checkMonthlyAshaIncentive(Integer ashaId){ + private void checkMonthlyAshaIncentive(Integer ashaId) { IncentiveActivity MOBILEBILLREIMB_ACTIVITY = incentivesRepo.findIncentiveMasterByNameAndGroup("MOBILE_BILL_REIMB", GroupName.OTHER_INCENTIVES.getDisplayName()); IncentiveActivity ADDITIONAL_ASHA_INCENTIVE = incentivesRepo.findIncentiveMasterByNameAndGroup("ADDITIONAL_ASHA_INCENTIVE", GroupName.ADDITIONAL_INCENTIVE.getDisplayName()); IncentiveActivity ASHA_MONTHLY_ROUTINE = incentivesRepo.findIncentiveMasterByNameAndGroup("ASHA_MONTHLY_ROUTINE", GroupName.ASHA_MONTHLY_ROUTINE.getDisplayName()); - if(MOBILEBILLREIMB_ACTIVITY!=null){ - addMonthlyAshaIncentiveRecord(MOBILEBILLREIMB_ACTIVITY,ashaId); + if (MOBILEBILLREIMB_ACTIVITY != null) { + addMonthlyAshaIncentiveRecord(MOBILEBILLREIMB_ACTIVITY, ashaId); } - if(ADDITIONAL_ASHA_INCENTIVE!=null){ - addMonthlyAshaIncentiveRecord(ADDITIONAL_ASHA_INCENTIVE,ashaId); + if (ADDITIONAL_ASHA_INCENTIVE != null) { + addMonthlyAshaIncentiveRecord(ADDITIONAL_ASHA_INCENTIVE, ashaId); } - if(ASHA_MONTHLY_ROUTINE!=null){ - addMonthlyAshaIncentiveRecord(ASHA_MONTHLY_ROUTINE,ashaId); + if (ASHA_MONTHLY_ROUTINE != null) { + addMonthlyAshaIncentiveRecord(ASHA_MONTHLY_ROUTINE, ashaId); } } - private void addMonthlyAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer ashaId){ + private void addMonthlyAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer ashaId) { Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now()); Timestamp startOfMonth = Timestamp.valueOf(LocalDate.now().withDayOfMonth(1).atStartOfDay()); From 3593e4520a948d5cd755eea2946014fb8b4774dd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 19 Feb 2026 17:36:40 +0530 Subject: [PATCH 18/65] implement check on pending doc for incentive review --- .../flw/repo/iemr/IncentivePendingActivityRepository.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java index 89b2bed5..295d447b 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java @@ -9,11 +9,5 @@ @Repository public interface IncentivePendingActivityRepository extends JpaRepository { - Optional - findByUserIdAndModuleNameAndActivityId( - Integer userId, - String moduleName, - Long activityId - ); Optional findByMincentiveIdAndActivityId(Long mIncentiveId,Long activityId); } From 13fedf9b30fc5d18003155ef7fec1847e638fd64 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 19 Feb 2026 17:49:50 +0530 Subject: [PATCH 19/65] implement check on pending doc for incentive review --- src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java | 2 +- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java index b85ffc9f..5fcdd537 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java @@ -11,5 +11,5 @@ public class PendingActivityDTO { private Integer userId; private List images; private String moduleName; - private String name; + private String activityName; } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 94f28e6e..c6a77964 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,14 +205,14 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { IncentiveName incentiveName; try { - incentiveName = IncentiveName.valueOf(pendingActivityDTO.getName()); + incentiveName = IncentiveName.valueOf(pendingActivityDTO.getActivityName()); } catch (IllegalArgumentException e) { return "Invalid incentive name"; } IncentiveActivity incentiveActivity = incentivesRepo.findIncentiveMasterByNameAndGroup( - pendingActivityDTO.getName(), + pendingActivityDTO.getActivityName(), pendingActivityDTO.getModuleName() ); From 1cb9e1416974333a993c45ba4423be6b31203aca Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 19 Feb 2026 18:04:48 +0530 Subject: [PATCH 20/65] implement check on pending doc for incentive review --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index c6a77964..1c39b5c6 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -257,7 +257,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { ); } }else { - if (incentiveName == IncentiveName.MAA_QUARTERLY_MEETING) { + if (incentiveName.name().equals(IncentiveName.MAA_QUARTERLY_MEETING.name())) { maaMeetingService.updateMeetingFromFileUpload( maaMeetingRequestDTO, @@ -265,7 +265,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { ); } - if (incentiveName == IncentiveName.HBNC_0_42_DAYS) { + if (incentiveName.name().equals(IncentiveName.HBNC_0_42_DAYS.name())) { childCareService.updateHbncFromFileUpload( pendingActivityDTO.getImages().toArray(new MultipartFile[0]), From aa46e6b5c06938c29332ecbb0cbd85335052c034 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 20 Feb 2026 12:15:48 +0530 Subject: [PATCH 21/65] implement check on pending doc for incentive review --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 1c39b5c6..4438e2cb 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -249,7 +249,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { // ✅ ENUM BASED CHECK if(pendingActivityDTO.getModuleName().equals(GroupName.ACTIVITY)){ - if (incentiveName == IncentiveName.MAA_QUARTERLY_MEETING) { + if (incentiveName.name() == IncentiveName.MAA_QUARTERLY_MEETING.name()) { maaMeetingService.updateMeetingFromFileUpload( maaMeetingRequestDTO, From 655f6a3b9f907e05e09106134fe9a0451eddb174 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 20 Feb 2026 12:24:24 +0530 Subject: [PATCH 22/65] implement check on pending doc for incentive review --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 4438e2cb..33f8ac1d 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -246,6 +246,8 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { maaMeetingRequestDTO.setMeetingImages( pendingActivityDTO.getImages().toArray(new MultipartFile[0]) ); + logger.info("Activity Name from request:"+incentiveName.name()); + logger.info("Activity Name from enum:"+IncentiveName.MAA_QUARTERLY_MEETING.name()); // ✅ ENUM BASED CHECK if(pendingActivityDTO.getModuleName().equals(GroupName.ACTIVITY)){ From 2ad53c11d271223a43eebe31cb6513988c8c989b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 13:41:51 +0530 Subject: [PATCH 23/65] optmiz code of get all Beneficiary --- .../service/impl/BeneficiaryServiceImpl.java | 835 ++++++++---------- 1 file changed, 371 insertions(+), 464 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index f5a75785..b4e388ac 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -1,8 +1,6 @@ package com.iemr.flw.service.impl; import java.math.BigInteger; -import java.sql.Date; -import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.Period; import java.time.format.DateTimeFormatter; @@ -14,10 +12,8 @@ import java.util.stream.Collectors; import com.iemr.flw.domain.iemr.EyeCheckupVisit; -import com.iemr.flw.domain.iemr.IncentiveActivity; import com.iemr.flw.dto.iemr.EyeCheckupListDTO; import com.iemr.flw.dto.iemr.EyeCheckupRequestDTO; -import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.utils.JwtUtil; import org.slf4j.Logger; @@ -25,7 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.PropertySource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; @@ -35,8 +30,6 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializer; import com.iemr.flw.domain.identity.BenHealthIDDetails; import com.iemr.flw.domain.identity.RMNCHBeneficiaryDetailsRmnch; import com.iemr.flw.domain.identity.RMNCHBornBirthDetails; @@ -52,36 +45,45 @@ import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.identity.HouseHoldRepo; import com.iemr.flw.service.BeneficiaryService; -import com.iemr.flw.utils.config.ConfigProperties; import com.iemr.flw.utils.http.HttpUtils; @Service @Qualifier("rmnchServiceImpl") - public class BeneficiaryServiceImpl implements BeneficiaryService { - private final Logger logger = LoggerFactory.getLogger(BeneficiaryServiceImpl.class); + private static final Logger logger = LoggerFactory.getLogger(BeneficiaryServiceImpl.class); + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + private static final Gson GSON = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); + + // Map keys as constants to avoid typos and magic strings + private static final String KEY_HOUSEHOLD_DETAILS = "householdDetails"; + private static final String KEY_BORN_BIRTH_DETAILS = "bornBirthDetails"; + private static final String KEY_BENEFICIARY_DETAILS = "beneficiaryDetails"; + private static final String KEY_ABHA_HEALTH_DETAILS = "abhaHealthDetails"; + @Value("${door-to-door-page-size}") - private String door_to_door_page_size; + private String doorToDoorPageSize; @Value("${fhir-url}") private String fhirUrl; @Value("${getHealthID}") private String getHealthID; + @Autowired private BeneficiaryRepo beneficiaryRepo; @Autowired private HouseHoldRepo houseHoldRepo; + @Autowired private GeneralOpdRepo generalOpdRepo; @Autowired - IncentivesRepo incentivesRepo; + private IncentivesRepo incentivesRepo; @Autowired - IncentiveRecordRepo recordRepo; + private IncentiveRecordRepo recordRepo; @Autowired private EyeCheckUpVisitRepo eyeCheckUpVisitRepo; @@ -92,497 +94,402 @@ public class BeneficiaryServiceImpl implements BeneficiaryService { @Autowired private UserServiceRoleRepo userRepo; - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); - + // Single shared HttpUtils instance — avoid creating one per request + private final HttpUtils httpUtils = new HttpUtils(); + // ------------------------------------------------------------------------- + // Public API + // ------------------------------------------------------------------------- @Override public String getBenData(GetBenRequestHandler request, String authorisation) throws Exception { - String outputResponse = null; - int totalPage = 0; + if (request == null || request.getAshaId() == null) { + throw new Exception("Invalid/missing village details"); + } + if (request.getPageNo() == null) { + throw new Exception("Invalid page no"); + } - try { - if (request != null && request.getAshaId() != null) { - List resultSet; - Integer pageSize = Integer.valueOf(door_to_door_page_size); - if (request.getPageNo() != null) { - String userName = beneficiaryRepo.getUserName(request.getAshaId()); - if (userName == null || userName.isEmpty()) - throw new Exception("Asha details not found, please contact administrator"); - - request.setUserName(userName); - - PageRequest pr = PageRequest.of(request.getPageNo(), pageSize); - if (request.getFromDate() != null && request.getToDate() != null) { - Page p = beneficiaryRepo.getBenDataWithinDates( - request.getUserName(), request.getFromDate(), request.getToDate(), pr); - resultSet = p.getContent(); - totalPage = p.getTotalPages(); - } else { - Page p = beneficiaryRepo.getBenDataByUser(request.getUserName(), - pr); - resultSet = p.getContent(); - totalPage = p.getTotalPages(); - } - if (resultSet != null && resultSet.size() > 0) { - outputResponse = getMappingsForAddressIDs(resultSet, totalPage, authorisation); - } - } else { - // page no not invalid - throw new Exception("Invalid page no"); - } - } else - throw new Exception("Invalid/missing village details"); - } catch (Exception e) { - throw new Exception(e.getMessage()); + String userName = beneficiaryRepo.getUserName(request.getAshaId()); + if (userName == null || userName.isEmpty()) { + throw new Exception("Asha details not found, please contact administrator"); + } + request.setUserName(userName); + + int pageSize = Integer.parseInt(doorToDoorPageSize); + PageRequest pr = PageRequest.of(request.getPageNo(), pageSize); + + Page page; + if (request.getFromDate() != null && request.getToDate() != null) { + page = beneficiaryRepo.getBenDataWithinDates( + request.getUserName(), request.getFromDate(), request.getToDate(), pr); + } else { + page = beneficiaryRepo.getBenDataByUser(request.getUserName(), pr); + } + + List resultSet = page.getContent(); + if (resultSet.isEmpty()) { + Map emptyResponse = new HashMap<>(); + emptyResponse.put("data", new ArrayList<>()); + emptyResponse.put("pageSize", pageSize); + emptyResponse.put("totalPage", 0); + return GSON.toJson(emptyResponse); } - return outputResponse; + return buildBeneficiaryResponse(resultSet, page.getTotalPages(), authorisation); } - private String getMappingsForAddressIDs(List addressList, int totalPage, - String authorisation) { - RMNCHHouseHoldDetails benHouseHoldRMNCH_ROBJ; - RMNCHBeneficiaryDetailsRmnch benDetailsRMNCH_OBJ; - RMNCHBornBirthDetails benBotnBirthRMNCH_ROBJ; + @Override + public String saveEyeCheckupVsit(List eyeCheckupRequestDTOS) { + if (eyeCheckupRequestDTOS == null || eyeCheckupRequestDTOS.isEmpty()) { + throw new IllegalArgumentException("Eye checkup list must not be empty"); + } - RMNCHMBeneficiarydetail benDetailsOBJ; - RMNCHMBeneficiaryAccount benAccountOBJ; - RMNCHMBeneficiaryImage benImageOBJ; - RMNCHMBeneficiaryaddress benAddressOBJ; - RMNCHMBeneficiarycontact benContactOBJ; + // Resolve userId once — same ASHA for the whole batch + Integer userId = userRepo.getUserIdByName(jwtUtil.getUserNameFromStorage()); + + List visitsToSave = eyeCheckupRequestDTOS.stream().map(dto -> { + EyeCheckupListDTO f = dto.getFields(); + EyeCheckupVisit visit = new EyeCheckupVisit(); + visit.setBeneficiaryId(dto.getBeneficiaryId()); + visit.setHouseholdId(dto.getHouseHoldId()); + visit.setUserId(userId); + visit.setCreatedBy(dto.getUserName()); + visit.setVisitDate(LocalDate.parse(f.getVisit_date(), FORMATTER)); + visit.setSymptomsObserved(f.getSymptoms_observed()); + visit.setEyeAffected(f.getEye_affected()); + visit.setReferredTo(f.getReferred_to()); + // No-op StringBuilder removed; just use the value directly + visit.setDischargeSummaryUpload(f.getDischarge_summary_upload()); + visit.setFollowUpStatus(f.getFollow_up_status()); + visit.setDateOfSurgery(f.getDate_of_surgery()); + return visit; + }).collect(Collectors.toList()); - Map resultMap; - ArrayList> resultList = new ArrayList<>(); + // Batch save instead of one-by-one + eyeCheckUpVisitRepo.saveAll(visitsToSave); + return "Eye checkup data saved successfully."; + } - for (RMNCHMBeneficiaryaddress a : addressList) { - // exception by-passing + @Override + public List getEyeCheckUpVisit(GetBenRequestHandler request) { + List visits = eyeCheckUpVisitRepo.findByUserId(request.getAshaId()); + return visits.stream().map(this::mapVisitToDto).collect(Collectors.toList()); + } + + // ------------------------------------------------------------------------- + // Private helpers + // ------------------------------------------------------------------------- + + private String buildBeneficiaryResponse(List addressList, + int totalPage, String authorisation) { + List> resultList = new ArrayList<>(addressList.size()); + + for (RMNCHMBeneficiaryaddress address : addressList) { try { - RMNCHMBeneficiarymapping m = beneficiaryRepo.getByAddressID(a.getId()); - if (m != null) { - benHouseHoldRMNCH_ROBJ = new RMNCHHouseHoldDetails(); - benDetailsRMNCH_OBJ = new RMNCHBeneficiaryDetailsRmnch(); - benBotnBirthRMNCH_ROBJ = new RMNCHBornBirthDetails(); - - benDetailsOBJ = new RMNCHMBeneficiarydetail(); - benAccountOBJ = new RMNCHMBeneficiaryAccount(); - benImageOBJ = new RMNCHMBeneficiaryImage(); - benAddressOBJ = new RMNCHMBeneficiaryaddress(); - benContactOBJ = new RMNCHMBeneficiarycontact(); - Map healthDetails = getBenHealthDetails(m.getBenRegId()); - if (m.getBenDetailsId() != null) { - benDetailsOBJ = beneficiaryRepo.getDetailsById(m.getBenDetailsId()); - } - if (m.getBenAccountID() != null) { - benAccountOBJ = beneficiaryRepo.getAccountById(m.getBenAccountID()); - } - if (m.getBenImageId() != null) { - benImageOBJ = beneficiaryRepo.getImageById(m.getBenImageId().longValue()); - } - if (m.getBenAddressId() != null) { - benAddressOBJ = beneficiaryRepo.getAddressById(m.getBenAddressId()); - } - if (m.getBenContactsId() != null) { - benContactOBJ = beneficiaryRepo.getContactById(m.getBenContactsId()); - } - - BigInteger benID = null; - if (m.getBenRegId() != null) - benID = beneficiaryRepo.getBenIdFromRegID(m.getBenRegId().longValue()); - - if (m.getBenRegId() != null) { - benDetailsRMNCH_OBJ = beneficiaryRepo - .getDetailsByRegID((m.getBenRegId()).longValue()); - benBotnBirthRMNCH_ROBJ = beneficiaryRepo.getBornBirthByRegID((m.getBenRegId()).longValue()); - - if (benDetailsRMNCH_OBJ != null && benDetailsRMNCH_OBJ.getHouseoldId() != null) - benHouseHoldRMNCH_ROBJ = houseHoldRepo - .getByHouseHoldID(benDetailsRMNCH_OBJ.getHouseoldId()); - - } - if (benDetailsRMNCH_OBJ == null) - benDetailsRMNCH_OBJ = new RMNCHBeneficiaryDetailsRmnch(); - - // new mapping 30-06-2021 - if (benDetailsOBJ.getMotherName() != null) - benDetailsRMNCH_OBJ.setMotherName(benDetailsOBJ.getMotherName()); - if (benDetailsOBJ.getLiteracyStatus() != null) - benDetailsRMNCH_OBJ.setLiteracyStatus(benDetailsOBJ.getLiteracyStatus()); - - // bank - if (benAccountOBJ.getNameOfBank() != null) - benDetailsRMNCH_OBJ.setNameOfBank(benAccountOBJ.getNameOfBank()); - if (benAccountOBJ.getBranchName() != null) - benDetailsRMNCH_OBJ.setBranchName(benAccountOBJ.getBranchName()); - if (benAccountOBJ.getIfscCode() != null) - benDetailsRMNCH_OBJ.setIfscCode(benAccountOBJ.getIfscCode()); - if (benAccountOBJ.getBankAccount() != null) - benDetailsRMNCH_OBJ.setBankAccount(benAccountOBJ.getBankAccount()); - - // location - if (benAddressOBJ.getCountyid() != null) - benDetailsRMNCH_OBJ.setCountryId(benAddressOBJ.getCountyid()); - if (benAddressOBJ.getPermCountry() != null) - benDetailsRMNCH_OBJ.setCountryName(benAddressOBJ.getPermCountry()); - - if (benAddressOBJ.getStatePerm() != null) - benDetailsRMNCH_OBJ.setStateId(benAddressOBJ.getStatePerm()); - if (benAddressOBJ.getPermState() != null) - benDetailsRMNCH_OBJ.setStateName(benAddressOBJ.getPermState()); - - if (benAddressOBJ.getDistrictidPerm() != null) { - benDetailsRMNCH_OBJ.setDistrictid(benAddressOBJ.getDistrictidPerm()); - - } - if (benAddressOBJ.getDistrictnamePerm() != null) { - benDetailsRMNCH_OBJ.setDistrictname(benAddressOBJ.getDistrictnamePerm()); - - } - - if (benAddressOBJ.getPermSubDistrictId() != null) - benDetailsRMNCH_OBJ.setBlockId(benAddressOBJ.getPermSubDistrictId()); - if (benAddressOBJ.getPermSubDistrict() != null) - benDetailsRMNCH_OBJ.setBlockName(benAddressOBJ.getPermSubDistrict()); - - if (benAddressOBJ.getVillageidPerm() != null) - benDetailsRMNCH_OBJ.setVillageId(benAddressOBJ.getVillageidPerm()); - if (benAddressOBJ.getVillagenamePerm() != null) - benDetailsRMNCH_OBJ.setVillageName(benAddressOBJ.getVillagenamePerm()); - - if (benAddressOBJ.getPermServicePointId() != null) - benDetailsRMNCH_OBJ.setServicePointID(benAddressOBJ.getPermServicePointId()); - if (benAddressOBJ.getPermServicePoint() != null) - benDetailsRMNCH_OBJ.setServicePointName(benAddressOBJ.getPermServicePoint()); - - if (benAddressOBJ.getPermZoneID() != null) - benDetailsRMNCH_OBJ.setZoneID(benAddressOBJ.getPermZoneID()); - if (benAddressOBJ.getPermZone() != null) - benDetailsRMNCH_OBJ.setZoneName(benAddressOBJ.getPermZone()); - - if (benAddressOBJ.getPermAddrLine1() != null) - benDetailsRMNCH_OBJ.setAddressLine1(benAddressOBJ.getPermAddrLine1()); - if (benAddressOBJ.getPermAddrLine2() != null) - benDetailsRMNCH_OBJ.setAddressLine2(benAddressOBJ.getPermAddrLine2()); - if (benAddressOBJ.getPermAddrLine3() != null) - benDetailsRMNCH_OBJ.setAddressLine3(benAddressOBJ.getPermAddrLine3()); - - // ----------------------------------------------------------------------------- - - // related benids - if (benDetailsRMNCH_OBJ.getRelatedBeneficiaryIdsDB() != null) { - - String[] relatedBenIDsString = benDetailsRMNCH_OBJ.getRelatedBeneficiaryIdsDB().split(","); - Long[] relatedBenIDs = new Long[relatedBenIDsString.length]; - int pointer = 0; - for (String s : relatedBenIDsString) { - relatedBenIDs[pointer] = Long.valueOf(s); - pointer++; - } - - benDetailsRMNCH_OBJ.setRelatedBeneficiaryIds(relatedBenIDs); - } - // ------------------------------------------------------------------------------ - - if (benDetailsOBJ.getCommunity() != null) - benDetailsRMNCH_OBJ.setCommunity(benDetailsOBJ.getCommunity()); - if (benDetailsOBJ.getCommunityId() != null) - benDetailsRMNCH_OBJ.setCommunityId(benDetailsOBJ.getCommunityId()); - if (benContactOBJ.getPreferredPhoneNum() != null) - benDetailsRMNCH_OBJ.setContact_number(benContactOBJ.getPreferredPhoneNum()); - - if (benDetailsOBJ.getDob() != null) - benDetailsRMNCH_OBJ.setDob(benDetailsOBJ.getDob()); - if (benDetailsOBJ.getFatherName() != null) - benDetailsRMNCH_OBJ.setFatherName(benDetailsOBJ.getFatherName()); - if (benDetailsOBJ.getFirstName() != null) - benDetailsRMNCH_OBJ.setFirstName(benDetailsOBJ.getFirstName()); - if (benDetailsOBJ.getGender() != null) - benDetailsRMNCH_OBJ.setGender(benDetailsOBJ.getGender()); - if (benDetailsOBJ.getGenderId() != null) - benDetailsRMNCH_OBJ.setGenderId(benDetailsOBJ.getGenderId()); - - if (benDetailsOBJ.getMaritalstatus() != null) - benDetailsRMNCH_OBJ.setMaritalstatus(benDetailsOBJ.getMaritalstatus()); - if (benDetailsOBJ.getMaritalstatusId() != null) - benDetailsRMNCH_OBJ.setMaritalstatusId(benDetailsOBJ.getMaritalstatusId()); - if (benDetailsOBJ.getMarriageDate() != null) - benDetailsRMNCH_OBJ.setMarriageDate(benDetailsOBJ.getMarriageDate()); - - if (benDetailsOBJ.getReligion() != null) - benDetailsRMNCH_OBJ.setReligion(benDetailsOBJ.getReligion()); - if (benDetailsOBJ.getReligionID() != null) - benDetailsRMNCH_OBJ.setReligionID(benDetailsOBJ.getReligionID()); - if (benDetailsOBJ.getSpousename() != null) - benDetailsRMNCH_OBJ.setSpousename(benDetailsOBJ.getSpousename()); - - if (benImageOBJ != null && benImageOBJ.getUser_image() != null) - benDetailsRMNCH_OBJ.setUser_image(benImageOBJ.getUser_image()); - - // new fields -// benDetailsRMNCH_OBJ.setRegistrationDate(benDetailsOBJ.getCreatedDate()); - if (benID != null) - benDetailsRMNCH_OBJ.setBenficieryid(benID.longValue()); - - if (benDetailsOBJ.getLastName() != null) - benDetailsRMNCH_OBJ.setLastName(benDetailsOBJ.getLastName()); - - if (benDetailsRMNCH_OBJ.getCreatedBy() == null) - if (benDetailsOBJ.getCreatedBy() != null) - benDetailsRMNCH_OBJ.setCreatedBy(benDetailsOBJ.getCreatedBy()); - - // age calculation - String ageDetails = ""; - int age_val = 0; - String ageUnit = null; - if (benDetailsOBJ.getDob() != null) { - - Date date = new Date(benDetailsOBJ.getDob().getTime()); - Calendar cal = Calendar.getInstance(); - - cal.setTime(date); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - java.time.LocalDate todayDate = java.time.LocalDate.now(); - java.time.LocalDate birthdate = java.time.LocalDate.of(year, month, day); - Period p = Period.between(birthdate, todayDate); - - int d = p.getDays(); - int mo = p.getMonths(); - int y = p.getYears(); - - if (y > 0) { - ageDetails = y + " years - " + mo + " months"; - age_val = y; - ageUnit = (age_val > 1) ? "Years" : "Year"; - } else { - if (mo > 0) { - ageDetails = mo + " months - " + d + " days"; - age_val = mo; - ageUnit = (age_val > 1) ? "Months" : "Month"; - } else { - ageDetails = d + " days"; - age_val = d; - ageUnit = (age_val > 1) ? "Days" : "Day"; - } - } - - } - - benDetailsRMNCH_OBJ.setAgeFull(ageDetails); - benDetailsRMNCH_OBJ.setAge(age_val); - if (ageUnit != null) - benDetailsRMNCH_OBJ.setAge_unit(ageUnit); - - resultMap = new HashMap<>(); - if (benHouseHoldRMNCH_ROBJ != null) - resultMap.put("householdDetails", benHouseHoldRMNCH_ROBJ); - else - resultMap.put("householdDetails", new HashMap()); - - if (benBotnBirthRMNCH_ROBJ != null) - resultMap.put("bornbirthDeatils", benBotnBirthRMNCH_ROBJ); - else - resultMap.put("bornbirthDeatils", new HashMap()); - - resultMap.put("beneficiaryDetails", benDetailsRMNCH_OBJ); - resultMap.put("abhaHealthDetails", healthDetails); - resultMap.put("houseoldId", benDetailsRMNCH_OBJ.getHouseoldId()); - resultMap.put("benficieryid", benDetailsRMNCH_OBJ.getBenficieryid()); - resultMap.put("isDeath", benDetailsRMNCH_OBJ.getIsDeath()); - resultMap.put("isDeathValue", benDetailsRMNCH_OBJ.getIsDeathValue()); - resultMap.put("dateOfDeath",benDetailsRMNCH_OBJ.getDateOfDeath()); - resultMap.put("timeOfDeath", benDetailsRMNCH_OBJ.getTimeOfDeath()); - resultMap.put("reasonOfDeath", benDetailsRMNCH_OBJ.getReasonOfDeath()); - resultMap.put("reasonOfDeathId", benDetailsRMNCH_OBJ.getReasonOfDeathId()); - resultMap.put("placeOfDeath", benDetailsRMNCH_OBJ.getPlaceOfDeath()); - resultMap.put("placeOfDeathId", benDetailsRMNCH_OBJ.getPlaceOfDeathId()); - resultMap.put("isSpouseAdded", benDetailsRMNCH_OBJ.getIsSpouseAdded()); - resultMap.put("isChildrenAdded", benDetailsRMNCH_OBJ.getIsChildrenAdded()); - resultMap.put("noOfchildren", benDetailsRMNCH_OBJ.getNoOfchildren()); - resultMap.put("isMarried", benDetailsRMNCH_OBJ.getIsMarried()); - resultMap.put("doYouHavechildren", benDetailsRMNCH_OBJ.getDoYouHavechildren()); - resultMap.put("noofAlivechildren",benDetailsRMNCH_OBJ.getNoofAlivechildren()); - resultMap.put("isDeactivate",benDetailsRMNCH_OBJ.getIsDeactivate()); - resultMap.put("BenRegId", m.getBenRegId()); - - // adding asha id / created by - user id - if (benAddressOBJ.getCreatedBy() != null) { - Integer userID = beneficiaryRepo.getUserIDByUserName(benAddressOBJ.getCreatedBy()); - if (userID != null && userID > 0) - resultMap.put("ashaId", userID); - } - // get HealthID of ben - if (m.getBenRegId() != null) { - fetchHealthIdByBenRegID(m.getBenRegId().longValue(), authorisation, resultMap); - } - - resultList.add(resultMap); - - } else { - // mapping not available - } + RMNCHMBeneficiarymapping mapping = beneficiaryRepo.getByAddressID(address.getId()); + if (mapping == null) continue; + + Map resultMap = buildResultMap(mapping, authorisation); + resultList.add(resultMap); } catch (Exception e) { - logger.error("error for addressID :"+e.getMessage() + a.getId() + " and vanID : " + a.getVanID()); + logger.error("Error processing addressID: {} vanID: {} — {}", + address.getId(), address.getVanID(), e.getMessage(), e); } } Map response = new HashMap<>(); response.put("data", resultList); - response.put("pageSize", Integer.parseInt(door_to_door_page_size)); + response.put("pageSize", Integer.parseInt(doorToDoorPageSize)); response.put("totalPage", totalPage); - Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); - return gson.toJson(response); + return GSON.toJson(response); } - - private Map getBenHealthDetails(BigInteger benRegId) { - Map healthDetails = new HashMap<>(); - if (null != benRegId) { - Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); - if (benHealthIdNumber != null && benHealthIdNumber.length > 0) { - Object[] healthData = (Object[]) benHealthIdNumber[0]; - String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; - String healthId = healthData[1] != null ? healthData[1].toString() : null; - - if (null != healthIdNumber) { - List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); - if (health != null && !health.isEmpty()) { - for (Object[] objects : health) { - healthDetails.put("HealthID", objects[0]); - healthDetails.put("HealthIdNumber", objects[1]); - healthDetails.put("isNewAbha", objects[2]); - } - } else { - healthDetails.put("HealthIdNumber", healthIdNumber); - healthDetails.put("HealthID", healthId); - healthDetails.put("isNewAbha", null); - } - } - } - } - return healthDetails; - } - - private Map getBenBenVisitDetails(BigInteger benRegId) { - Map healthDetails = new HashMap<>(); - if (null != benRegId) { - String benHealthIdNumber = String.valueOf(beneficiaryRepo.getBenHealthIdNumber(benRegId)); - if (null != benHealthIdNumber) { - ArrayList health = beneficiaryRepo.getBenHealthDetails(benHealthIdNumber); - for (Object[] objects : health) { - healthDetails.put("HealthID", objects[0]); - healthDetails.put("HealthIdNumber", objects[1]); - healthDetails.put("isNewAbha", objects[2]); + /** + * Builds the complete result map for one beneficiary mapping. + * All sub-fetches are grouped here so the flow is easy to follow. + */ + private Map buildResultMap(RMNCHMBeneficiarymapping m, String authorisation) { + // ---- Fetch sub-objects (null-safe defaults) ---- + RMNCHMBeneficiarydetail benDetail = fetchOrDefault(m.getBenDetailsId(), + beneficiaryRepo::getDetailsById, new RMNCHMBeneficiarydetail()); + RMNCHMBeneficiaryAccount benAccount = fetchOrDefault(m.getBenAccountID(), + beneficiaryRepo::getAccountById, new RMNCHMBeneficiaryAccount()); + RMNCHMBeneficiaryImage benImage = m.getBenImageId() != null + ? beneficiaryRepo.getImageById(m.getBenImageId().longValue()) : new RMNCHMBeneficiaryImage(); + RMNCHMBeneficiaryaddress benAddress = fetchOrDefault(m.getBenAddressId(), + beneficiaryRepo::getAddressById, new RMNCHMBeneficiaryaddress()); + RMNCHMBeneficiarycontact benContact = fetchOrDefault(m.getBenContactsId(), + beneficiaryRepo::getContactById, new RMNCHMBeneficiarycontact()); + + BigInteger benID = m.getBenRegId() != null + ? beneficiaryRepo.getBenIdFromRegID(m.getBenRegId().longValue()) : null; + + RMNCHBeneficiaryDetailsRmnch benDetailsRMNCH = new RMNCHBeneficiaryDetailsRmnch(); + RMNCHHouseHoldDetails householdDetails = new RMNCHHouseHoldDetails(); + RMNCHBornBirthDetails bornBirthDetails = new RMNCHBornBirthDetails(); + + if (m.getBenRegId() != null) { + RMNCHBeneficiaryDetailsRmnch fetched = + beneficiaryRepo.getDetailsByRegID(m.getBenRegId().longValue()); + if (fetched != null) { + benDetailsRMNCH = fetched; + if (benDetailsRMNCH.getHouseoldId() != null) { + householdDetails = houseHoldRepo.getByHouseHoldID(benDetailsRMNCH.getHouseoldId()); } } + RMNCHBornBirthDetails birth = beneficiaryRepo.getBornBirthByRegID(m.getBenRegId().longValue()); + if (birth != null) bornBirthDetails = birth; } - return healthDetails; - } - public void fetchHealthIdByBenRegID(Long benRegID, String authorization, Map resultMap) { - Map requestMap = new HashMap(); - requestMap.put("beneficiaryRegID", benRegID); - requestMap.put("beneficiaryID", null); - JsonParser jsnParser = new JsonParser(); - HttpUtils utils = new HttpUtils(); - List result = null; - try { - HashMap header = new HashMap(); - header.put("Authorization", authorization); - String responseStr = utils.post(fhirUrl + "/" - + getHealthID, new Gson().toJson(requestMap), header); - JsonElement jsnElmnt = jsnParser.parse(responseStr); - JsonObject jsnOBJ = new JsonObject(); - jsnOBJ = jsnElmnt.getAsJsonObject(); - if (jsnOBJ.get("data") != null && jsnOBJ.get("data").getAsJsonObject().get("BenHealthDetails") != null) { - result = new ArrayList(); - BenHealthIDDetails[] ben = InputMapper.gson().fromJson( - new Gson().toJson(jsnOBJ.get("data").getAsJsonObject().get("BenHealthDetails")), - BenHealthIDDetails[].class); - for (BenHealthIDDetails value : ben) { - if (value.getHealthId() != null) - resultMap.put("healthId", value.getHealthId()); - if (value.getHealthIdNumber() != null) - resultMap.put("healthIdNumber", value.getHealthIdNumber()); - } - } + // ---- Merge fields into benDetailsRMNCH ---- + mergeDetailFields(benDetailsRMNCH, benDetail, benAccount, benAddress, benContact, benImage, benID); + + // ---- Age calculation ---- + applyAgeCalculation(benDetailsRMNCH, benDetail); + + // ---- Health details ---- + Map healthDetails = getBenHealthDetails(m.getBenRegId()); + + // ---- Assemble result map ---- + Map resultMap = new HashMap<>(); + resultMap.put(KEY_HOUSEHOLD_DETAILS, householdDetails != null ? householdDetails : new HashMap<>()); + resultMap.put(KEY_BORN_BIRTH_DETAILS, bornBirthDetails); + resultMap.put(KEY_BENEFICIARY_DETAILS, benDetailsRMNCH); + resultMap.put(KEY_ABHA_HEALTH_DETAILS, healthDetails); + resultMap.put("houseoldId", benDetailsRMNCH.getHouseoldId()); + resultMap.put("benficieryid", benDetailsRMNCH.getBenficieryid()); + resultMap.put("isDeath", benDetailsRMNCH.getIsDeath()); + resultMap.put("isDeathValue", benDetailsRMNCH.getIsDeathValue()); + resultMap.put("dateOfDeath", benDetailsRMNCH.getDateOfDeath()); + resultMap.put("timeOfDeath", benDetailsRMNCH.getTimeOfDeath()); + resultMap.put("reasonOfDeath", benDetailsRMNCH.getReasonOfDeath()); + resultMap.put("reasonOfDeathId", benDetailsRMNCH.getReasonOfDeathId()); + resultMap.put("placeOfDeath", benDetailsRMNCH.getPlaceOfDeath()); + resultMap.put("placeOfDeathId", benDetailsRMNCH.getPlaceOfDeathId()); + resultMap.put("isSpouseAdded", benDetailsRMNCH.getIsSpouseAdded()); + resultMap.put("isChildrenAdded", benDetailsRMNCH.getIsChildrenAdded()); + resultMap.put("noOfchildren", benDetailsRMNCH.getNoOfchildren()); + resultMap.put("isMarried", benDetailsRMNCH.getIsMarried()); + resultMap.put("doYouHavechildren", benDetailsRMNCH.getDoYouHavechildren()); + resultMap.put("noofAlivechildren", benDetailsRMNCH.getNoofAlivechildren()); // typo fixed (no trailing spaces) + resultMap.put("BenRegId", m.getBenRegId()); + + // ASHA id from address creator + if (benAddress.getCreatedBy() != null) { + Integer userID = beneficiaryRepo.getUserIDByUserName(benAddress.getCreatedBy()); + if (userID != null && userID > 0) resultMap.put("ashaId", userID); + } - } catch (Exception e) { - logger.info("Error while fetching ABHA" + e.getMessage()); -// return null; + // External ABHA fetch + if (m.getBenRegId() != null) { + fetchHealthIdByBenRegID(m.getBenRegId().longValue(), authorisation, resultMap); } -// return result; + return resultMap; + } + /** Copies all mergeable fields from sub-objects into the RMNCH details object. */ + private void mergeDetailFields(RMNCHBeneficiaryDetailsRmnch dest, + RMNCHMBeneficiarydetail detail, + RMNCHMBeneficiaryAccount account, + RMNCHMBeneficiaryaddress address, + RMNCHMBeneficiarycontact contact, + RMNCHMBeneficiaryImage image, + BigInteger benID) { + // Personal + setIfNotNull(detail.getFirstName(), dest::setFirstName); + setIfNotNull(detail.getLastName(), dest::setLastName); + setIfNotNull(detail.getMotherName(), dest::setMotherName); + setIfNotNull(detail.getFatherName(), dest::setFatherName); + setIfNotNull(detail.getSpousename(), dest::setSpousename); + setIfNotNull(detail.getDob(), dest::setDob); + setIfNotNull(detail.getGender(), dest::setGender); + setIfNotNull(detail.getGenderId(), dest::setGenderId); + setIfNotNull(detail.getMaritalstatus(), dest::setMaritalstatus); + setIfNotNull(detail.getMaritalstatusId(),dest::setMaritalstatusId); + setIfNotNull(detail.getMarriageDate(), dest::setMarriageDate); + setIfNotNull(detail.getLiteracyStatus(), dest::setLiteracyStatus); + setIfNotNull(detail.getCommunity(), dest::setCommunity); + setIfNotNull(detail.getCommunityId(), dest::setCommunityId); + setIfNotNull(detail.getReligion(), dest::setReligion); + setIfNotNull(detail.getReligionID(), dest::setReligionID); + if (dest.getCreatedBy() == null) setIfNotNull(detail.getCreatedBy(), dest::setCreatedBy); + + // Bank + setIfNotNull(account.getNameOfBank(), dest::setNameOfBank); + setIfNotNull(account.getBranchName(), dest::setBranchName); + setIfNotNull(account.getIfscCode(), dest::setIfscCode); + setIfNotNull(account.getBankAccount(), dest::setBankAccount); + + // Address + setIfNotNull(address.getCountyid(), dest::setCountryId); + setIfNotNull(address.getPermCountry(), dest::setCountryName); + setIfNotNull(address.getStatePerm(), dest::setStateId); + setIfNotNull(address.getPermState(), dest::setStateName); + setIfNotNull(address.getDistrictidPerm(), dest::setDistrictid); + setIfNotNull(address.getDistrictnamePerm(), dest::setDistrictname); + setIfNotNull(address.getPermSubDistrictId(), dest::setBlockId); + setIfNotNull(address.getPermSubDistrict(), dest::setBlockName); + setIfNotNull(address.getVillageidPerm(), dest::setVillageId); + setIfNotNull(address.getVillagenamePerm(), dest::setVillageName); + setIfNotNull(address.getPermServicePointId(), dest::setServicePointID); + setIfNotNull(address.getPermServicePoint(), dest::setServicePointName); + setIfNotNull(address.getPermZoneID(), dest::setZoneID); + setIfNotNull(address.getPermZone(), dest::setZoneName); + setIfNotNull(address.getPermAddrLine1(), dest::setAddressLine1); + setIfNotNull(address.getPermAddrLine2(), dest::setAddressLine2); + setIfNotNull(address.getPermAddrLine3(), dest::setAddressLine3); + + // Contact + setIfNotNull(contact.getPreferredPhoneNum(), dest::setContact_number); + + // Image + if (image != null) setIfNotNull(image.getUser_image(), dest::setUser_image); + + // Ben ID + if (benID != null) dest.setBenficieryid(benID.longValue()); + + // Related beneficiary IDs + if (dest.getRelatedBeneficiaryIdsDB() != null) { + String[] parts = dest.getRelatedBeneficiaryIdsDB().split(","); + Long[] ids = new Long[parts.length]; + for (int i = 0; i < parts.length; i++) ids[i] = Long.valueOf(parts[i].trim()); + dest.setRelatedBeneficiaryIds(ids); + } } + /** Calculates age from DOB and sets ageFull, age, and age_unit on the destination object. */ + private void applyAgeCalculation(RMNCHBeneficiaryDetailsRmnch dest, RMNCHMBeneficiarydetail detail) { + if (detail.getDob() == null) return; + + Calendar cal = Calendar.getInstance(); + cal.setTime(detail.getDob()); + LocalDate birthDate = LocalDate.of( + cal.get(Calendar.YEAR), + cal.get(Calendar.MONTH) + 1, + cal.get(Calendar.DAY_OF_MONTH)); + + Period p = Period.between(birthDate, LocalDate.now()); + int years = p.getYears(); + int months = p.getMonths(); + int days = p.getDays(); + + String ageFull; + int ageVal; + String ageUnit; + + if (years > 0) { + ageFull = years + " years - " + months + " months"; + ageVal = years; + ageUnit = years > 1 ? "Years" : "Year"; + } else if (months > 0) { + ageFull = months + " months - " + days + " days"; + ageVal = months; + ageUnit = months > 1 ? "Months" : "Month"; + } else { + ageFull = days + " days"; + ageVal = days; + ageUnit = days > 1 ? "Days" : "Day"; + } - @Override - public String saveEyeCheckupVsit(List eyeCheckupRequestDTOS) { + dest.setAgeFull(ageFull); + dest.setAge(ageVal); + dest.setAge_unit(ageUnit); + } + + private Map getBenHealthDetails(BigInteger benRegId) { + Map healthDetails = new HashMap<>(); + if (benRegId == null) return healthDetails; + + Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); + if (benHealthIdNumber == null || benHealthIdNumber.length == 0) return healthDetails; + + Object[] healthData = (Object[]) benHealthIdNumber[0]; + String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; + String healthId = healthData[1] != null ? healthData[1].toString() : null; + + if (healthIdNumber == null) return healthDetails; + + List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); + if (health != null && !health.isEmpty()) { + Object[] row = health.get(0); // last writer wins anyway; just use first + healthDetails.put("HealthID", row[0]); + healthDetails.put("HealthIdNumber", row[1]); + healthDetails.put("isNewAbha", row[2]); + } else { + healthDetails.put("HealthIdNumber", healthIdNumber); + healthDetails.put("HealthID", healthId); + healthDetails.put("isNewAbha", null); + } + return healthDetails; + } + + public void fetchHealthIdByBenRegID(Long benRegID, String authorization, Map resultMap) { + Map requestBody = new HashMap<>(); + requestBody.put("beneficiaryRegID", benRegID); + requestBody.put("beneficiaryID", null); try { - for (EyeCheckupRequestDTO dto : eyeCheckupRequestDTOS) { - EyeCheckupVisit visit = new EyeCheckupVisit(); - - visit.setBeneficiaryId(dto.getBeneficiaryId()); - visit.setHouseholdId(dto.getHouseHoldId()); - visit.setUserId(userRepo.getUserIdByName(jwtUtil.getUserNameFromStorage())); // cache se lena hai - visit.setCreatedBy(dto.getUserName()); - StringBuilder sb = new StringBuilder(); - - - // fields mapping - EyeCheckupListDTO f = dto.getFields(); - sb.append(f.getDischarge_summary_upload()); - String longText = sb.toString(); - visit.setVisitDate(LocalDate.parse(f.getVisit_date(), FORMATTER)); - visit.setSymptomsObserved(f.getSymptoms_observed()); - visit.setEyeAffected(f.getEye_affected()); - visit.setReferredTo(f.getReferred_to()); - visit.setDischargeSummaryUpload(longText); - visit.setFollowUpStatus(f.getFollow_up_status()); - visit.setDateOfSurgery(f.getDate_of_surgery()); - - // save/update - eyeCheckUpVisitRepo.save(visit); + HashMap headers = new HashMap<>(); + headers.put("Authorization", authorization); + String responseStr = httpUtils.post(fhirUrl + "/" + getHealthID, GSON.toJson(requestBody), headers); + + JsonElement element = JsonParser.parseString(responseStr); // non-deprecated API + if (!element.isJsonObject()) return; + + JsonObject root = element.getAsJsonObject(); + if (root.get("data") == null) return; + + JsonObject data = root.getAsJsonObject("data"); + if (data.get("BenHealthDetails") == null) return; + + BenHealthIDDetails[] details = InputMapper.gson().fromJson( + GSON.toJson(data.get("BenHealthDetails")), BenHealthIDDetails[].class); + + for (BenHealthIDDetails d : details) { + if (d.getHealthId() != null) resultMap.put("healthId", d.getHealthId()); + if (d.getHealthIdNumber() != null) resultMap.put("healthIdNumber", d.getHealthIdNumber()); } - return "Eye checkup data saved successfully."; } catch (Exception e) { - e.printStackTrace(); - + logger.warn("Failed to fetch ABHA for benRegID {}: {}", benRegID, e.getMessage()); } - return null ; } - @Override - public List getEyeCheckUpVisit(GetBenRequestHandler request) { - List visits = eyeCheckUpVisitRepo.findByUserId(request.getAshaId()); - - return visits.stream().map(v -> { - EyeCheckupRequestDTO dto = new EyeCheckupRequestDTO(); - dto.setId(v.getId()); - dto.setBeneficiaryId(v.getBeneficiaryId()); - dto.setHouseHoldId(v.getHouseholdId()); - dto.setUserName(v.getCreatedBy()); - dto.setVisitDate(v.getVisitDate().format(FORMATTER)); - - EyeCheckupListDTO fields = new EyeCheckupListDTO(); - fields.setVisit_date(v.getVisitDate().format(FORMATTER)); - fields.setSymptoms_observed(v.getSymptomsObserved()); - fields.setEye_affected(v.getEyeAffected()); - fields.setReferred_to(v.getReferredTo()); - fields.setFollow_up_status(v.getFollowUpStatus()); - fields.setDate_of_surgery(v.getDateOfSurgery()); - fields.setDischarge_summary_upload(v.getDischargeSummaryUpload()); - - - dto.setFields(fields); - return dto; - }).collect(Collectors.toList()); + private EyeCheckupRequestDTO mapVisitToDto(EyeCheckupVisit v) { + EyeCheckupRequestDTO dto = new EyeCheckupRequestDTO(); + dto.setId(v.getId()); + dto.setBeneficiaryId(v.getBeneficiaryId()); + dto.setHouseHoldId(v.getHouseholdId()); + dto.setUserName(v.getCreatedBy()); + dto.setVisitDate(v.getVisitDate().format(FORMATTER)); + + EyeCheckupListDTO fields = new EyeCheckupListDTO(); + fields.setVisit_date(v.getVisitDate().format(FORMATTER)); + fields.setSymptoms_observed(v.getSymptomsObserved()); + fields.setEye_affected(v.getEyeAffected()); + fields.setReferred_to(v.getReferredTo()); + fields.setFollow_up_status(v.getFollowUpStatus()); + fields.setDate_of_surgery(v.getDateOfSurgery()); + fields.setDischarge_summary_upload(v.getDischargeSummaryUpload()); + + dto.setFields(fields); + return dto; } + // ------------------------------------------------------------------------- + // Generic utilities + // ------------------------------------------------------------------------- + + /** Calls setter only when value is non-null — replaces the repetitive if-blocks. */ + private void setIfNotNull(T value, java.util.function.Consumer setter) { + if (value != null) setter.accept(value); + } -} + /** Fetches an entity by ID; returns defaultValue when ID is null. */ + private T fetchOrDefault(ID id, java.util.function.Function fetcher, T defaultValue) { + if (id == null) return defaultValue; + T result = fetcher.apply(id); + return result != null ? result : defaultValue; + } +} \ No newline at end of file From 3da48c327289718d7f025a3afdb8d7d6601eac32 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 15:20:16 +0530 Subject: [PATCH 24/65] optmiz code of get all Beneficiary --- .../com/iemr/flw/service/impl/BeneficiaryServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index b4e388ac..7fc6d127 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -259,6 +259,7 @@ private Map buildResultMap(RMNCHMBeneficiarymapping m, String au resultMap.put(KEY_ABHA_HEALTH_DETAILS, healthDetails); resultMap.put("houseoldId", benDetailsRMNCH.getHouseoldId()); resultMap.put("benficieryid", benDetailsRMNCH.getBenficieryid()); + resultMap.put("BenRegId", m.getBenRegId()); resultMap.put("isDeath", benDetailsRMNCH.getIsDeath()); resultMap.put("isDeathValue", benDetailsRMNCH.getIsDeathValue()); resultMap.put("dateOfDeath", benDetailsRMNCH.getDateOfDeath()); @@ -273,7 +274,6 @@ private Map buildResultMap(RMNCHMBeneficiarymapping m, String au resultMap.put("isMarried", benDetailsRMNCH.getIsMarried()); resultMap.put("doYouHavechildren", benDetailsRMNCH.getDoYouHavechildren()); resultMap.put("noofAlivechildren", benDetailsRMNCH.getNoofAlivechildren()); // typo fixed (no trailing spaces) - resultMap.put("BenRegId", m.getBenRegId()); // ASHA id from address creator if (benAddress.getCreatedBy() != null) { @@ -420,7 +420,7 @@ private Map getBenHealthDetails(BigInteger benRegId) { } else { healthDetails.put("HealthIdNumber", healthIdNumber); healthDetails.put("HealthID", healthId); - healthDetails.put("isNewAbha", null); + healthDetails.put("isNewAbha", false); } return healthDetails; } From 79b564e04df6b805d255c8288c5757ce2ff5043c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 15:31:19 +0530 Subject: [PATCH 25/65] optmiz code of get all Beneficiary --- .../service/impl/BeneficiaryServiceImpl.java | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 7fc6d127..0e9f97fb 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -400,27 +400,28 @@ private void applyAgeCalculation(RMNCHBeneficiaryDetailsRmnch dest, RMNCHMBenefi private Map getBenHealthDetails(BigInteger benRegId) { Map healthDetails = new HashMap<>(); - if (benRegId == null) return healthDetails; - - Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); - if (benHealthIdNumber == null || benHealthIdNumber.length == 0) return healthDetails; - - Object[] healthData = (Object[]) benHealthIdNumber[0]; - String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; - String healthId = healthData[1] != null ? healthData[1].toString() : null; - - if (healthIdNumber == null) return healthDetails; - - List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); - if (health != null && !health.isEmpty()) { - Object[] row = health.get(0); // last writer wins anyway; just use first - healthDetails.put("HealthID", row[0]); - healthDetails.put("HealthIdNumber", row[1]); - healthDetails.put("isNewAbha", row[2]); - } else { - healthDetails.put("HealthIdNumber", healthIdNumber); - healthDetails.put("HealthID", healthId); - healthDetails.put("isNewAbha", false); + if (null != benRegId) { + Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); + if (benHealthIdNumber != null && benHealthIdNumber.length > 0) { + Object[] healthData = (Object[]) benHealthIdNumber[0]; + String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; + String healthId = healthData[1] != null ? healthData[1].toString() : null; + + if (null != healthIdNumber) { + List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); + if (health != null && !health.isEmpty()) { + for (Object[] objects : health) { + healthDetails.put("HealthID", objects[0]); + healthDetails.put("HealthIdNumber", objects[1]); + healthDetails.put("isNewAbha", objects[2]); + } + } else { + healthDetails.put("HealthIdNumber", healthIdNumber); + healthDetails.put("HealthID", healthId); + healthDetails.put("isNewAbha", null); + } + } + } } return healthDetails; } From 95c51378fd2183f1492bae073e9de3e34f4d65bd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 16:06:18 +0530 Subject: [PATCH 26/65] optmiz code of get all Beneficiary --- .../service/impl/BeneficiaryServiceImpl.java | 643 ++++++++++-------- 1 file changed, 344 insertions(+), 299 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 0e9f97fb..29a3da48 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -1,6 +1,8 @@ package com.iemr.flw.service.impl; import java.math.BigInteger; +import java.sql.Date; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.Period; import java.time.format.DateTimeFormatter; @@ -12,8 +14,10 @@ import java.util.stream.Collectors; import com.iemr.flw.domain.iemr.EyeCheckupVisit; +import com.iemr.flw.domain.iemr.IncentiveActivity; import com.iemr.flw.dto.iemr.EyeCheckupListDTO; import com.iemr.flw.dto.iemr.EyeCheckupRequestDTO; +import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.utils.JwtUtil; import org.slf4j.Logger; @@ -21,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; @@ -30,6 +35,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializer; import com.iemr.flw.domain.identity.BenHealthIDDetails; import com.iemr.flw.domain.identity.RMNCHBeneficiaryDetailsRmnch; import com.iemr.flw.domain.identity.RMNCHBornBirthDetails; @@ -45,45 +52,40 @@ import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.identity.HouseHoldRepo; import com.iemr.flw.service.BeneficiaryService; +import com.iemr.flw.utils.config.ConfigProperties; import com.iemr.flw.utils.http.HttpUtils; @Service @Qualifier("rmnchServiceImpl") + public class BeneficiaryServiceImpl implements BeneficiaryService { - private static final Logger logger = LoggerFactory.getLogger(BeneficiaryServiceImpl.class); - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); - private static final Gson GSON = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); + private final Logger logger = LoggerFactory.getLogger(BeneficiaryServiceImpl.class); + @Value("${door-to-door-page-size}") + private String door_to_door_page_size; - // Map keys as constants to avoid typos and magic strings - private static final String KEY_HOUSEHOLD_DETAILS = "householdDetails"; - private static final String KEY_BORN_BIRTH_DETAILS = "bornBirthDetails"; - private static final String KEY_BENEFICIARY_DETAILS = "beneficiaryDetails"; - private static final String KEY_ABHA_HEALTH_DETAILS = "abhaHealthDetails"; - @Value("${door-to-door-page-size}") - private String doorToDoorPageSize; + private static final Gson GSON = new GsonBuilder() + .setDateFormat("MMM dd, yyyy h:mm:ss a").create(); @Value("${fhir-url}") private String fhirUrl; @Value("${getHealthID}") private String getHealthID; - @Autowired private BeneficiaryRepo beneficiaryRepo; @Autowired private HouseHoldRepo houseHoldRepo; - @Autowired private GeneralOpdRepo generalOpdRepo; @Autowired - private IncentivesRepo incentivesRepo; + IncentivesRepo incentivesRepo; @Autowired - private IncentiveRecordRepo recordRepo; + IncentiveRecordRepo recordRepo; @Autowired private EyeCheckUpVisitRepo eyeCheckUpVisitRepo; @@ -94,303 +96,286 @@ public class BeneficiaryServiceImpl implements BeneficiaryService { @Autowired private UserServiceRoleRepo userRepo; - // Single shared HttpUtils instance — avoid creating one per request - private final HttpUtils httpUtils = new HttpUtils(); + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + - // ------------------------------------------------------------------------- - // Public API - // ------------------------------------------------------------------------- @Override public String getBenData(GetBenRequestHandler request, String authorisation) throws Exception { - if (request == null || request.getAshaId() == null) { + + // ✅ Early validation — no nested if/else pyramid + if (request == null || request.getAshaId() == null) throw new Exception("Invalid/missing village details"); - } - if (request.getPageNo() == null) { + if (request.getPageNo() == null) throw new Exception("Invalid page no"); - } String userName = beneficiaryRepo.getUserName(request.getAshaId()); - if (userName == null || userName.isEmpty()) { + if (userName == null || userName.isEmpty()) throw new Exception("Asha details not found, please contact administrator"); - } + request.setUserName(userName); - int pageSize = Integer.parseInt(doorToDoorPageSize); + int pageSize = Integer.parseInt(door_to_door_page_size); // ✅ parse once PageRequest pr = PageRequest.of(request.getPageNo(), pageSize); - Page page; - if (request.getFromDate() != null && request.getToDate() != null) { - page = beneficiaryRepo.getBenDataWithinDates( - request.getUserName(), request.getFromDate(), request.getToDate(), pr); - } else { - page = beneficiaryRepo.getBenDataByUser(request.getUserName(), pr); - } + // ✅ Ternary to pick query — removes duplicate Page<> variable declarations + Page page = + (request.getFromDate() != null && request.getToDate() != null) + ? beneficiaryRepo.getBenDataWithinDates( + request.getUserName(), request.getFromDate(), request.getToDate(), pr) + : beneficiaryRepo.getBenDataByUser(request.getUserName(), pr); List resultSet = page.getContent(); - if (resultSet.isEmpty()) { - Map emptyResponse = new HashMap<>(); - emptyResponse.put("data", new ArrayList<>()); - emptyResponse.put("pageSize", pageSize); - emptyResponse.put("totalPage", 0); - return GSON.toJson(emptyResponse); - } - return buildBeneficiaryResponse(resultSet, page.getTotalPages(), authorisation); - } - - @Override - public String saveEyeCheckupVsit(List eyeCheckupRequestDTOS) { - if (eyeCheckupRequestDTOS == null || eyeCheckupRequestDTOS.isEmpty()) { - throw new IllegalArgumentException("Eye checkup list must not be empty"); + // ✅ isEmpty() instead of size() > 0 + if (resultSet == null || resultSet.isEmpty()) { + // Return empty response instead of null + Map empty = new HashMap<>(); + empty.put("data", new ArrayList<>()); + empty.put("pageSize", pageSize); + empty.put("totalPage", 0); + return GSON.toJson(empty); } - // Resolve userId once — same ASHA for the whole batch - Integer userId = userRepo.getUserIdByName(jwtUtil.getUserNameFromStorage()); - - List visitsToSave = eyeCheckupRequestDTOS.stream().map(dto -> { - EyeCheckupListDTO f = dto.getFields(); - EyeCheckupVisit visit = new EyeCheckupVisit(); - visit.setBeneficiaryId(dto.getBeneficiaryId()); - visit.setHouseholdId(dto.getHouseHoldId()); - visit.setUserId(userId); - visit.setCreatedBy(dto.getUserName()); - visit.setVisitDate(LocalDate.parse(f.getVisit_date(), FORMATTER)); - visit.setSymptomsObserved(f.getSymptoms_observed()); - visit.setEyeAffected(f.getEye_affected()); - visit.setReferredTo(f.getReferred_to()); - // No-op StringBuilder removed; just use the value directly - visit.setDischargeSummaryUpload(f.getDischarge_summary_upload()); - visit.setFollowUpStatus(f.getFollow_up_status()); - visit.setDateOfSurgery(f.getDate_of_surgery()); - return visit; - }).collect(Collectors.toList()); - - // Batch save instead of one-by-one - eyeCheckUpVisitRepo.saveAll(visitsToSave); - return "Eye checkup data saved successfully."; + return getMappingsForAddressIDs(resultSet, page.getTotalPages(), authorisation); } - @Override - public List getEyeCheckUpVisit(GetBenRequestHandler request) { - List visits = eyeCheckUpVisitRepo.findByUserId(request.getAshaId()); - return visits.stream().map(this::mapVisitToDto).collect(Collectors.toList()); - } +// --------------------------------------------------------------- +// PRIVATE METHOD +// --------------------------------------------------------------- - // ------------------------------------------------------------------------- - // Private helpers - // ------------------------------------------------------------------------- - - private String buildBeneficiaryResponse(List addressList, + private String getMappingsForAddressIDs(List addressList, int totalPage, String authorisation) { - List> resultList = new ArrayList<>(addressList.size()); - for (RMNCHMBeneficiaryaddress address : addressList) { + List> resultList = new ArrayList<>(addressList.size()); // ✅ pre-sized + + for (RMNCHMBeneficiaryaddress a : addressList) { try { - RMNCHMBeneficiarymapping mapping = beneficiaryRepo.getByAddressID(address.getId()); - if (mapping == null) continue; + RMNCHMBeneficiarymapping m = beneficiaryRepo.getByAddressID(a.getId()); + if (m == null) continue; // ✅ skip instead of deeply nested if block - Map resultMap = buildResultMap(mapping, authorisation); + Map resultMap = buildResultMap(m, authorisation); resultList.add(resultMap); + } catch (Exception e) { - logger.error("Error processing addressID: {} vanID: {} — {}", - address.getId(), address.getVanID(), e.getMessage(), e); + // ✅ Fixed log format — message was concatenated before addressID making it unreadable + logger.error("Error processing addressID: {}, vanID: {}, reason: {}", + a.getId(), a.getVanID(), e.getMessage()); } } Map response = new HashMap<>(); response.put("data", resultList); - response.put("pageSize", Integer.parseInt(doorToDoorPageSize)); + response.put("pageSize", Integer.parseInt(door_to_door_page_size)); response.put("totalPage", totalPage); - return GSON.toJson(response); + return GSON.toJson(response); // ✅ reuse static GSON instance } - /** - * Builds the complete result map for one beneficiary mapping. - * All sub-fetches are grouped here so the flow is easy to follow. - */ +// --------------------------------------------------------------- +// EXTRACTED: build one beneficiary's result map +// --------------------------------------------------------------- + private Map buildResultMap(RMNCHMBeneficiarymapping m, String authorisation) { + // ---- Fetch sub-objects (null-safe defaults) ---- - RMNCHMBeneficiarydetail benDetail = fetchOrDefault(m.getBenDetailsId(), - beneficiaryRepo::getDetailsById, new RMNCHMBeneficiarydetail()); - RMNCHMBeneficiaryAccount benAccount = fetchOrDefault(m.getBenAccountID(), - beneficiaryRepo::getAccountById, new RMNCHMBeneficiaryAccount()); - RMNCHMBeneficiaryImage benImage = m.getBenImageId() != null + RMNCHMBeneficiarydetail benDetail = m.getBenDetailsId() != null + ? beneficiaryRepo.getDetailsById(m.getBenDetailsId()) : new RMNCHMBeneficiarydetail(); + RMNCHMBeneficiaryAccount benAccount = m.getBenAccountID() != null + ? beneficiaryRepo.getAccountById(m.getBenAccountID()) : new RMNCHMBeneficiaryAccount(); + RMNCHMBeneficiaryImage benImage = m.getBenImageId() != null ? beneficiaryRepo.getImageById(m.getBenImageId().longValue()) : new RMNCHMBeneficiaryImage(); - RMNCHMBeneficiaryaddress benAddress = fetchOrDefault(m.getBenAddressId(), - beneficiaryRepo::getAddressById, new RMNCHMBeneficiaryaddress()); - RMNCHMBeneficiarycontact benContact = fetchOrDefault(m.getBenContactsId(), - beneficiaryRepo::getContactById, new RMNCHMBeneficiarycontact()); + RMNCHMBeneficiaryaddress benAddress = m.getBenAddressId() != null + ? beneficiaryRepo.getAddressById(m.getBenAddressId()) : new RMNCHMBeneficiaryaddress(); + RMNCHMBeneficiarycontact benContact = m.getBenContactsId() != null + ? beneficiaryRepo.getContactById(m.getBenContactsId()) : new RMNCHMBeneficiarycontact(); + + // ---- Protect against null returns from repo ---- + if (benDetail == null) benDetail = new RMNCHMBeneficiarydetail(); + if (benAccount == null) benAccount = new RMNCHMBeneficiaryAccount(); + if (benAddress == null) benAddress = new RMNCHMBeneficiaryaddress(); + if (benContact == null) benContact = new RMNCHMBeneficiarycontact(); BigInteger benID = m.getBenRegId() != null ? beneficiaryRepo.getBenIdFromRegID(m.getBenRegId().longValue()) : null; - RMNCHBeneficiaryDetailsRmnch benDetailsRMNCH = new RMNCHBeneficiaryDetailsRmnch(); - RMNCHHouseHoldDetails householdDetails = new RMNCHHouseHoldDetails(); - RMNCHBornBirthDetails bornBirthDetails = new RMNCHBornBirthDetails(); + // ---- RMNCH details + household + birth ---- + RMNCHBeneficiaryDetailsRmnch benRMNCH = new RMNCHBeneficiaryDetailsRmnch(); + RMNCHHouseHoldDetails household = new RMNCHHouseHoldDetails(); + RMNCHBornBirthDetails bornBirth = new RMNCHBornBirthDetails(); if (m.getBenRegId() != null) { RMNCHBeneficiaryDetailsRmnch fetched = beneficiaryRepo.getDetailsByRegID(m.getBenRegId().longValue()); if (fetched != null) { - benDetailsRMNCH = fetched; - if (benDetailsRMNCH.getHouseoldId() != null) { - householdDetails = houseHoldRepo.getByHouseHoldID(benDetailsRMNCH.getHouseoldId()); - } + benRMNCH = fetched; + if (benRMNCH.getHouseoldId() != null) + household = houseHoldRepo.getByHouseHoldID(benRMNCH.getHouseoldId()); } RMNCHBornBirthDetails birth = beneficiaryRepo.getBornBirthByRegID(m.getBenRegId().longValue()); - if (birth != null) bornBirthDetails = birth; + if (birth != null) bornBirth = birth; } - // ---- Merge fields into benDetailsRMNCH ---- - mergeDetailFields(benDetailsRMNCH, benDetail, benAccount, benAddress, benContact, benImage, benID); + // ---- Merge all sub-object fields into benRMNCH ---- + mergeFields(benRMNCH, benDetail, benAccount, benAddress, benContact, benImage, benID); - // ---- Age calculation ---- - applyAgeCalculation(benDetailsRMNCH, benDetail); + // ---- Age ---- + applyAge(benRMNCH, benDetail); - // ---- Health details ---- + // ---- Health details from local DB ---- Map healthDetails = getBenHealthDetails(m.getBenRegId()); - // ---- Assemble result map ---- - Map resultMap = new HashMap<>(); - resultMap.put(KEY_HOUSEHOLD_DETAILS, householdDetails != null ? householdDetails : new HashMap<>()); - resultMap.put(KEY_BORN_BIRTH_DETAILS, bornBirthDetails); - resultMap.put(KEY_BENEFICIARY_DETAILS, benDetailsRMNCH); - resultMap.put(KEY_ABHA_HEALTH_DETAILS, healthDetails); - resultMap.put("houseoldId", benDetailsRMNCH.getHouseoldId()); - resultMap.put("benficieryid", benDetailsRMNCH.getBenficieryid()); - resultMap.put("BenRegId", m.getBenRegId()); - resultMap.put("isDeath", benDetailsRMNCH.getIsDeath()); - resultMap.put("isDeathValue", benDetailsRMNCH.getIsDeathValue()); - resultMap.put("dateOfDeath", benDetailsRMNCH.getDateOfDeath()); - resultMap.put("timeOfDeath", benDetailsRMNCH.getTimeOfDeath()); - resultMap.put("reasonOfDeath", benDetailsRMNCH.getReasonOfDeath()); - resultMap.put("reasonOfDeathId", benDetailsRMNCH.getReasonOfDeathId()); - resultMap.put("placeOfDeath", benDetailsRMNCH.getPlaceOfDeath()); - resultMap.put("placeOfDeathId", benDetailsRMNCH.getPlaceOfDeathId()); - resultMap.put("isSpouseAdded", benDetailsRMNCH.getIsSpouseAdded()); - resultMap.put("isChildrenAdded", benDetailsRMNCH.getIsChildrenAdded()); - resultMap.put("noOfchildren", benDetailsRMNCH.getNoOfchildren()); - resultMap.put("isMarried", benDetailsRMNCH.getIsMarried()); - resultMap.put("doYouHavechildren", benDetailsRMNCH.getDoYouHavechildren()); - resultMap.put("noofAlivechildren", benDetailsRMNCH.getNoofAlivechildren()); // typo fixed (no trailing spaces) - - // ASHA id from address creator + // ---- Build result map ---- + Map map = new HashMap<>(); + map.put("householdDetails", household != null ? household : new HashMap<>()); + map.put("bornbirthDeatils", bornBirth != null ? bornBirth : new HashMap<>()); // key kept as-is for backward compat + map.put("beneficiaryDetails", benRMNCH); + map.put("abhaHealthDetails", healthDetails); + map.put("houseoldId", benRMNCH.getHouseoldId()); + map.put("benficieryid", benRMNCH.getBenficieryid()); + map.put("isDeath", benRMNCH.getIsDeath()); + map.put("isDeathValue", benRMNCH.getIsDeathValue()); + map.put("dateOfDeath", benRMNCH.getDateOfDeath()); + map.put("timeOfDeath", benRMNCH.getTimeOfDeath()); + map.put("reasonOfDeath", benRMNCH.getReasonOfDeath()); + map.put("reasonOfDeathId", benRMNCH.getReasonOfDeathId()); + map.put("placeOfDeath", benRMNCH.getPlaceOfDeath()); + map.put("placeOfDeathId", benRMNCH.getPlaceOfDeathId()); + map.put("isSpouseAdded", benRMNCH.getIsSpouseAdded()); + map.put("isChildrenAdded", benRMNCH.getIsChildrenAdded()); + map.put("noOfchildren", benRMNCH.getNoOfchildren()); + map.put("isMarried", benRMNCH.getIsMarried()); + map.put("doYouHavechildren", benRMNCH.getDoYouHavechildren()); + map.put("noofAlivechildren", benRMNCH.getNoofAlivechildren()); // ✅ trailing spaces removed + map.put("isDeactivate", benRMNCH.getIsDeactivate()); + map.put("BenRegId", m.getBenRegId()); + + // ✅ ASHA id lookup if (benAddress.getCreatedBy() != null) { Integer userID = beneficiaryRepo.getUserIDByUserName(benAddress.getCreatedBy()); - if (userID != null && userID > 0) resultMap.put("ashaId", userID); + if (userID != null && userID > 0) map.put("ashaId", userID); } - // External ABHA fetch - if (m.getBenRegId() != null) { - fetchHealthIdByBenRegID(m.getBenRegId().longValue(), authorisation, resultMap); - } + // ✅ External ABHA fetch + if (m.getBenRegId() != null) + fetchHealthIdByBenRegID(m.getBenRegId().longValue(), authorisation, map); - return resultMap; + return map; } - /** Copies all mergeable fields from sub-objects into the RMNCH details object. */ - private void mergeDetailFields(RMNCHBeneficiaryDetailsRmnch dest, - RMNCHMBeneficiarydetail detail, - RMNCHMBeneficiaryAccount account, - RMNCHMBeneficiaryaddress address, - RMNCHMBeneficiarycontact contact, - RMNCHMBeneficiaryImage image, - BigInteger benID) { - // Personal - setIfNotNull(detail.getFirstName(), dest::setFirstName); - setIfNotNull(detail.getLastName(), dest::setLastName); - setIfNotNull(detail.getMotherName(), dest::setMotherName); - setIfNotNull(detail.getFatherName(), dest::setFatherName); - setIfNotNull(detail.getSpousename(), dest::setSpousename); - setIfNotNull(detail.getDob(), dest::setDob); - setIfNotNull(detail.getGender(), dest::setGender); - setIfNotNull(detail.getGenderId(), dest::setGenderId); - setIfNotNull(detail.getMaritalstatus(), dest::setMaritalstatus); - setIfNotNull(detail.getMaritalstatusId(),dest::setMaritalstatusId); - setIfNotNull(detail.getMarriageDate(), dest::setMarriageDate); - setIfNotNull(detail.getLiteracyStatus(), dest::setLiteracyStatus); - setIfNotNull(detail.getCommunity(), dest::setCommunity); - setIfNotNull(detail.getCommunityId(), dest::setCommunityId); - setIfNotNull(detail.getReligion(), dest::setReligion); - setIfNotNull(detail.getReligionID(), dest::setReligionID); - if (dest.getCreatedBy() == null) setIfNotNull(detail.getCreatedBy(), dest::setCreatedBy); - - // Bank - setIfNotNull(account.getNameOfBank(), dest::setNameOfBank); - setIfNotNull(account.getBranchName(), dest::setBranchName); - setIfNotNull(account.getIfscCode(), dest::setIfscCode); - setIfNotNull(account.getBankAccount(), dest::setBankAccount); - - // Address - setIfNotNull(address.getCountyid(), dest::setCountryId); - setIfNotNull(address.getPermCountry(), dest::setCountryName); - setIfNotNull(address.getStatePerm(), dest::setStateId); - setIfNotNull(address.getPermState(), dest::setStateName); - setIfNotNull(address.getDistrictidPerm(), dest::setDistrictid); - setIfNotNull(address.getDistrictnamePerm(), dest::setDistrictname); - setIfNotNull(address.getPermSubDistrictId(), dest::setBlockId); - setIfNotNull(address.getPermSubDistrict(), dest::setBlockName); - setIfNotNull(address.getVillageidPerm(), dest::setVillageId); - setIfNotNull(address.getVillagenamePerm(), dest::setVillageName); - setIfNotNull(address.getPermServicePointId(), dest::setServicePointID); - setIfNotNull(address.getPermServicePoint(), dest::setServicePointName); - setIfNotNull(address.getPermZoneID(), dest::setZoneID); - setIfNotNull(address.getPermZone(), dest::setZoneName); - setIfNotNull(address.getPermAddrLine1(), dest::setAddressLine1); - setIfNotNull(address.getPermAddrLine2(), dest::setAddressLine2); - setIfNotNull(address.getPermAddrLine3(), dest::setAddressLine3); +// --------------------------------------------------------------- +// EXTRACTED: merge all sub-object fields into RMNCH object +// replaces ~50 repetitive if (x != null) dest.setX(x) blocks +// --------------------------------------------------------------- + + private void mergeFields(RMNCHBeneficiaryDetailsRmnch d, + RMNCHMBeneficiarydetail detail, + RMNCHMBeneficiaryAccount account, + RMNCHMBeneficiaryaddress address, + RMNCHMBeneficiarycontact contact, + RMNCHMBeneficiaryImage image, + BigInteger benID) { + + // Personal details + ifNotNull(detail.getFirstName(), d::setFirstName); + ifNotNull(detail.getLastName(), d::setLastName); + ifNotNull(detail.getMotherName(), d::setMotherName); + ifNotNull(detail.getFatherName(), d::setFatherName); + ifNotNull(detail.getSpousename(), d::setSpousename); + ifNotNull(detail.getDob(), d::setDob); + ifNotNull(detail.getGender(), d::setGender); + ifNotNull(detail.getGenderId(), d::setGenderId); + ifNotNull(detail.getMaritalstatus(), d::setMaritalstatus); + ifNotNull(detail.getMaritalstatusId(), d::setMaritalstatusId); + ifNotNull(detail.getMarriageDate(), d::setMarriageDate); + ifNotNull(detail.getLiteracyStatus(), d::setLiteracyStatus); + ifNotNull(detail.getCommunity(), d::setCommunity); + ifNotNull(detail.getCommunityId(), d::setCommunityId); + ifNotNull(detail.getReligion(), d::setReligion); + ifNotNull(detail.getReligionID(), d::setReligionID); + // createdBy — only set if not already populated from RMNCH fetch + if (d.getCreatedBy() == null) ifNotNull(detail.getCreatedBy(), d::setCreatedBy); + + // Bank details + ifNotNull(account.getNameOfBank(), d::setNameOfBank); + ifNotNull(account.getBranchName(), d::setBranchName); + ifNotNull(account.getIfscCode(), d::setIfscCode); + ifNotNull(account.getBankAccount(), d::setBankAccount); + + // Address / location + ifNotNull(address.getCountyid(), d::setCountryId); + ifNotNull(address.getPermCountry(), d::setCountryName); + ifNotNull(address.getStatePerm(), d::setStateId); + ifNotNull(address.getPermState(), d::setStateName); + ifNotNull(address.getDistrictidPerm(), d::setDistrictid); + ifNotNull(address.getDistrictnamePerm(), d::setDistrictname); + ifNotNull(address.getPermSubDistrictId(), d::setBlockId); + ifNotNull(address.getPermSubDistrict(), d::setBlockName); + ifNotNull(address.getVillageidPerm(), d::setVillageId); + ifNotNull(address.getVillagenamePerm(), d::setVillageName); + ifNotNull(address.getPermServicePointId(), d::setServicePointID); + ifNotNull(address.getPermServicePoint(), d::setServicePointName); + ifNotNull(address.getPermZoneID(), d::setZoneID); + ifNotNull(address.getPermZone(), d::setZoneName); + ifNotNull(address.getPermAddrLine1(), d::setAddressLine1); + ifNotNull(address.getPermAddrLine2(), d::setAddressLine2); + ifNotNull(address.getPermAddrLine3(), d::setAddressLine3); // Contact - setIfNotNull(contact.getPreferredPhoneNum(), dest::setContact_number); + ifNotNull(contact.getPreferredPhoneNum(), d::setContact_number); // Image - if (image != null) setIfNotNull(image.getUser_image(), dest::setUser_image); + if (image != null) ifNotNull(image.getUser_image(), d::setUser_image); // Ben ID - if (benID != null) dest.setBenficieryid(benID.longValue()); + if (benID != null) d.setBenficieryid(benID.longValue()); - // Related beneficiary IDs - if (dest.getRelatedBeneficiaryIdsDB() != null) { - String[] parts = dest.getRelatedBeneficiaryIdsDB().split(","); + // Related beneficiary IDs — split CSV string into Long[] + if (d.getRelatedBeneficiaryIdsDB() != null) { + String[] parts = d.getRelatedBeneficiaryIdsDB().split(","); Long[] ids = new Long[parts.length]; - for (int i = 0; i < parts.length; i++) ids[i] = Long.valueOf(parts[i].trim()); - dest.setRelatedBeneficiaryIds(ids); + for (int i = 0; i < parts.length; i++) + ids[i] = Long.valueOf(parts[i].trim()); + d.setRelatedBeneficiaryIds(ids); } } - /** Calculates age from DOB and sets ageFull, age, and age_unit on the destination object. */ - private void applyAgeCalculation(RMNCHBeneficiaryDetailsRmnch dest, RMNCHMBeneficiarydetail detail) { - if (detail.getDob() == null) return; +// --------------------------------------------------------------- +// EXTRACTED: age calculation +// --------------------------------------------------------------- + + private void applyAge(RMNCHBeneficiaryDetailsRmnch dest, RMNCHMBeneficiarydetail detail) { + if (detail.getDob() == null) { + dest.setAgeFull(""); + dest.setAge(0); + return; + } Calendar cal = Calendar.getInstance(); cal.setTime(detail.getDob()); - LocalDate birthDate = LocalDate.of( + LocalDate birth = LocalDate.of( cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH)); - Period p = Period.between(birthDate, LocalDate.now()); - int years = p.getYears(); - int months = p.getMonths(); - int days = p.getDays(); + Period p = Period.between(birth, LocalDate.now()); + int y = p.getYears(), mo = p.getMonths(), d = p.getDays(); String ageFull; int ageVal; String ageUnit; - if (years > 0) { - ageFull = years + " years - " + months + " months"; - ageVal = years; - ageUnit = years > 1 ? "Years" : "Year"; - } else if (months > 0) { - ageFull = months + " months - " + days + " days"; - ageVal = months; - ageUnit = months > 1 ? "Months" : "Month"; + if (y > 0) { + ageFull = y + " years - " + mo + " months"; + ageVal = y; + ageUnit = y > 1 ? "Years" : "Year"; + } else if (mo > 0) { + ageFull = mo + " months - " + d + " days"; + ageVal = mo; + ageUnit = mo > 1 ? "Months" : "Month"; } else { - ageFull = days + " days"; - ageVal = days; - ageUnit = days > 1 ? "Days" : "Day"; + ageFull = d + " days"; + ageVal = d; + ageUnit = d > 1 ? "Days" : "Day"; } dest.setAgeFull(ageFull); @@ -398,99 +383,159 @@ private void applyAgeCalculation(RMNCHBeneficiaryDetailsRmnch dest, RMNCHMBenefi dest.setAge_unit(ageUnit); } - private Map getBenHealthDetails(BigInteger benRegId) { +// --------------------------------------------------------------- +// UTILITY: replaces 50+ repetitive if-not-null setter blocks +// --------------------------------------------------------------- + + private void ifNotNull(T value, java.util.function.Consumer setter) { + if (value != null) setter.accept(value); + } + + private Map getBenHealthDetails(BigInteger benRegId) { + Map healthDetails = new HashMap<>(); + if (null != benRegId) { + Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); + if (benHealthIdNumber != null && benHealthIdNumber.length > 0) { + Object[] healthData = (Object[]) benHealthIdNumber[0]; + String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; + String healthId = healthData[1] != null ? healthData[1].toString() : null; + + if (null != healthIdNumber) { + List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); + if (health != null && !health.isEmpty()) { + for (Object[] objects : health) { + healthDetails.put("HealthID", objects[0]); + healthDetails.put("HealthIdNumber", objects[1]); + healthDetails.put("isNewAbha", objects[2]); + } + } else { + healthDetails.put("HealthIdNumber", healthIdNumber); + healthDetails.put("HealthID", healthId); + healthDetails.put("isNewAbha", null); + } + } + } + } + return healthDetails; + } + + private Map getBenBenVisitDetails(BigInteger benRegId) { Map healthDetails = new HashMap<>(); if (null != benRegId) { - Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); - if (benHealthIdNumber != null && benHealthIdNumber.length > 0) { - Object[] healthData = (Object[]) benHealthIdNumber[0]; - String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; - String healthId = healthData[1] != null ? healthData[1].toString() : null; - - if (null != healthIdNumber) { - List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); - if (health != null && !health.isEmpty()) { - for (Object[] objects : health) { - healthDetails.put("HealthID", objects[0]); - healthDetails.put("HealthIdNumber", objects[1]); - healthDetails.put("isNewAbha", objects[2]); - } - } else { - healthDetails.put("HealthIdNumber", healthIdNumber); - healthDetails.put("HealthID", healthId); - healthDetails.put("isNewAbha", null); - } + String benHealthIdNumber = String.valueOf(beneficiaryRepo.getBenHealthIdNumber(benRegId)); + if (null != benHealthIdNumber) { + ArrayList health = beneficiaryRepo.getBenHealthDetails(benHealthIdNumber); + for (Object[] objects : health) { + healthDetails.put("HealthID", objects[0]); + healthDetails.put("HealthIdNumber", objects[1]); + healthDetails.put("isNewAbha", objects[2]); } } } return healthDetails; } - public void fetchHealthIdByBenRegID(Long benRegID, String authorization, Map resultMap) { - Map requestBody = new HashMap<>(); - requestBody.put("beneficiaryRegID", benRegID); - requestBody.put("beneficiaryID", null); - + public void fetchHealthIdByBenRegID(Long benRegID, String authorization, Map resultMap) { + Map requestMap = new HashMap(); + requestMap.put("beneficiaryRegID", benRegID); + requestMap.put("beneficiaryID", null); + JsonParser jsnParser = new JsonParser(); + HttpUtils utils = new HttpUtils(); + List result = null; try { - HashMap headers = new HashMap<>(); - headers.put("Authorization", authorization); - String responseStr = httpUtils.post(fhirUrl + "/" + getHealthID, GSON.toJson(requestBody), headers); + HashMap header = new HashMap(); + header.put("Authorization", authorization); + String responseStr = utils.post(fhirUrl + "/" + + getHealthID, new Gson().toJson(requestMap), header); + JsonElement jsnElmnt = jsnParser.parse(responseStr); + JsonObject jsnOBJ = new JsonObject(); + jsnOBJ = jsnElmnt.getAsJsonObject(); + if (jsnOBJ.get("data") != null && jsnOBJ.get("data").getAsJsonObject().get("BenHealthDetails") != null) { + result = new ArrayList(); + BenHealthIDDetails[] ben = InputMapper.gson().fromJson( + new Gson().toJson(jsnOBJ.get("data").getAsJsonObject().get("BenHealthDetails")), + BenHealthIDDetails[].class); + for (BenHealthIDDetails value : ben) { + if (value.getHealthId() != null) + resultMap.put("healthId", value.getHealthId()); + if (value.getHealthIdNumber() != null) + resultMap.put("healthIdNumber", value.getHealthIdNumber()); + } + } + + } catch (Exception e) { + logger.info("Error while fetching ABHA" + e.getMessage()); +// return null; + } - JsonElement element = JsonParser.parseString(responseStr); // non-deprecated API - if (!element.isJsonObject()) return; +// return result; - JsonObject root = element.getAsJsonObject(); - if (root.get("data") == null) return; + } - JsonObject data = root.getAsJsonObject("data"); - if (data.get("BenHealthDetails") == null) return; - BenHealthIDDetails[] details = InputMapper.gson().fromJson( - GSON.toJson(data.get("BenHealthDetails")), BenHealthIDDetails[].class); + @Override + public String saveEyeCheckupVsit(List eyeCheckupRequestDTOS) { - for (BenHealthIDDetails d : details) { - if (d.getHealthId() != null) resultMap.put("healthId", d.getHealthId()); - if (d.getHealthIdNumber() != null) resultMap.put("healthIdNumber", d.getHealthIdNumber()); + try { + for (EyeCheckupRequestDTO dto : eyeCheckupRequestDTOS) { + EyeCheckupVisit visit = new EyeCheckupVisit(); + + visit.setBeneficiaryId(dto.getBeneficiaryId()); + visit.setHouseholdId(dto.getHouseHoldId()); + visit.setUserId(userRepo.getUserIdByName(jwtUtil.getUserNameFromStorage())); // cache se lena hai + visit.setCreatedBy(dto.getUserName()); + StringBuilder sb = new StringBuilder(); + + + // fields mapping + EyeCheckupListDTO f = dto.getFields(); + sb.append(f.getDischarge_summary_upload()); + String longText = sb.toString(); + visit.setVisitDate(LocalDate.parse(f.getVisit_date(), FORMATTER)); + visit.setSymptomsObserved(f.getSymptoms_observed()); + visit.setEyeAffected(f.getEye_affected()); + visit.setReferredTo(f.getReferred_to()); + visit.setDischargeSummaryUpload(longText); + visit.setFollowUpStatus(f.getFollow_up_status()); + visit.setDateOfSurgery(f.getDate_of_surgery()); + + // save/update + eyeCheckUpVisitRepo.save(visit); } + return "Eye checkup data saved successfully."; } catch (Exception e) { - logger.warn("Failed to fetch ABHA for benRegID {}: {}", benRegID, e.getMessage()); - } - } + e.printStackTrace(); - private EyeCheckupRequestDTO mapVisitToDto(EyeCheckupVisit v) { - EyeCheckupRequestDTO dto = new EyeCheckupRequestDTO(); - dto.setId(v.getId()); - dto.setBeneficiaryId(v.getBeneficiaryId()); - dto.setHouseHoldId(v.getHouseholdId()); - dto.setUserName(v.getCreatedBy()); - dto.setVisitDate(v.getVisitDate().format(FORMATTER)); - - EyeCheckupListDTO fields = new EyeCheckupListDTO(); - fields.setVisit_date(v.getVisitDate().format(FORMATTER)); - fields.setSymptoms_observed(v.getSymptomsObserved()); - fields.setEye_affected(v.getEyeAffected()); - fields.setReferred_to(v.getReferredTo()); - fields.setFollow_up_status(v.getFollowUpStatus()); - fields.setDate_of_surgery(v.getDateOfSurgery()); - fields.setDischarge_summary_upload(v.getDischargeSummaryUpload()); - - dto.setFields(fields); - return dto; + } + return null ; } - // ------------------------------------------------------------------------- - // Generic utilities - // ------------------------------------------------------------------------- + @Override + public List getEyeCheckUpVisit(GetBenRequestHandler request) { + List visits = eyeCheckUpVisitRepo.findByUserId(request.getAshaId()); - /** Calls setter only when value is non-null — replaces the repetitive if-blocks. */ - private void setIfNotNull(T value, java.util.function.Consumer setter) { - if (value != null) setter.accept(value); + return visits.stream().map(v -> { + EyeCheckupRequestDTO dto = new EyeCheckupRequestDTO(); + dto.setId(v.getId()); + dto.setBeneficiaryId(v.getBeneficiaryId()); + dto.setHouseHoldId(v.getHouseholdId()); + dto.setUserName(v.getCreatedBy()); + dto.setVisitDate(v.getVisitDate().format(FORMATTER)); + + EyeCheckupListDTO fields = new EyeCheckupListDTO(); + fields.setVisit_date(v.getVisitDate().format(FORMATTER)); + fields.setSymptoms_observed(v.getSymptomsObserved()); + fields.setEye_affected(v.getEyeAffected()); + fields.setReferred_to(v.getReferredTo()); + fields.setFollow_up_status(v.getFollowUpStatus()); + fields.setDate_of_surgery(v.getDateOfSurgery()); + fields.setDischarge_summary_upload(v.getDischargeSummaryUpload()); + + + dto.setFields(fields); + return dto; + }).collect(Collectors.toList()); } - /** Fetches an entity by ID; returns defaultValue when ID is null. */ - private T fetchOrDefault(ID id, java.util.function.Function fetcher, T defaultValue) { - if (id == null) return defaultValue; - T result = fetcher.apply(id); - return result != null ? result : defaultValue; - } -} \ No newline at end of file + +} From 3a226a8afee30c18bb1c9f3d41ed00c327bc9c9c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 16:28:47 +0530 Subject: [PATCH 27/65] optmiz code of get all Beneficiary --- .../java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java | 7 ++++--- .../java/com/iemr/flw/utils/JwtAuthenticationUtil.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java index d3ac8edf..9e45788a 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java @@ -1,12 +1,13 @@ package com.iemr.flw.repo.iemr; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.iemr.flw.domain.iemr.M_User; @Repository public interface EmployeeMasterRepo extends JpaRepository { - M_User findByUserID(Integer userID); - - M_User getUserByUserID(Integer parseLong); + @Query("SELECT u FROM User u WHERE u.userID = :userID and u.deleted=false and u.statusID in (1, 2)") + M_User findUserByUserID(@Param("userID") Integer userID); } diff --git a/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java b/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java index 9144ca3b..042e3839 100644 --- a/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java +++ b/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java @@ -109,7 +109,7 @@ private M_User fetchUserFromDB(String userId) { String redisKey = "user_" + userId; // Redis key format // Fetch user from DB - M_User user = userLoginRepo.getUserByUserID(Integer.parseInt(userId)); + M_User user = userLoginRepo.findUserByUserID(Integer.parseInt(userId)); if (user != null) { M_User userHash = new M_User(); From 10ab15f79bae36403dbde991411b513d909cd71a Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 16:32:39 +0530 Subject: [PATCH 28/65] optmiz code of get all Beneficiary --- src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java index 9e45788a..2db2b200 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java @@ -8,6 +8,6 @@ import com.iemr.flw.domain.iemr.M_User; @Repository public interface EmployeeMasterRepo extends JpaRepository { - @Query("SELECT u FROM User u WHERE u.userID = :userID and u.deleted=false and u.statusID in (1, 2)") + @Query("SELECT u FROM M_User u WHERE u.userID = :userID and u.deleted=false and u.statusID in (1, 2)") M_User findUserByUserID(@Param("userID") Integer userID); } From c1ec40d7d6924f16863c9de40428658285fb6e48 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 16:35:48 +0530 Subject: [PATCH 29/65] optmiz code of get all Beneficiary --- src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java b/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java index 042e3839..46b35eb4 100644 --- a/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java +++ b/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java @@ -81,7 +81,7 @@ public boolean validateUserIdAndJwtToken(String jwtToken) throws IEMRException { user = fetchUserFromDB(userId); } if (user == null) { - throw new IEMRException("Invalid User ID."); + throw new IEMRException("Invalid User ID or user is deactivated please contact to admin."); } return true; // Valid userId and JWT token From 7fd16447611ca5490a1845e9b5a1a403c0cee8b7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 16:47:45 +0530 Subject: [PATCH 30/65] optmiz code of get all Beneficiary --- .../flw/controller/AshaProfileController.java | 14 -------------- .../flw/domain/iemr/{M_User.java => User.java} | 17 ++++------------- .../iemr/flw/repo/iemr/EmployeeMasterRepo.java | 9 +++++---- .../iemr/flw/service/EmployeeMasterInter.java | 6 +++--- .../iemr/flw/service/impl/AshaProfileImpl.java | 12 ++---------- .../flw/service/impl/EmployeeMasterImpl.java | 8 ++++---- .../impl/NotificationSchedulerService.java | 10 ++-------- .../flw/service/impl/SmsSchedulerService.java | 11 ++--------- .../iemr/flw/utils/JwtAuthenticationUtil.java | 14 +++++++------- .../com/iemr/flw/utils/redis/RedisConfig.java | 4 ++-- 10 files changed, 31 insertions(+), 74 deletions(-) rename src/main/java/com/iemr/flw/domain/iemr/{M_User.java => User.java} (91%) diff --git a/src/main/java/com/iemr/flw/controller/AshaProfileController.java b/src/main/java/com/iemr/flw/controller/AshaProfileController.java index 1bda4499..cedfcda0 100644 --- a/src/main/java/com/iemr/flw/controller/AshaProfileController.java +++ b/src/main/java/com/iemr/flw/controller/AshaProfileController.java @@ -1,35 +1,21 @@ package com.iemr.flw.controller; import com.iemr.flw.domain.iemr.AshaWorker; -import com.iemr.flw.domain.iemr.M_User; -import com.iemr.flw.dto.iemr.UserServiceRoleDTO; -import com.iemr.flw.repo.iemr.UserServiceRoleRepo; import com.iemr.flw.service.AshaProfileService; import com.iemr.flw.service.EmployeeMasterInter; -import com.iemr.flw.service.UserService; import io.lettuce.core.dynamic.annotation.Param; import com.iemr.flw.utils.JwtUtil; -import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import com.iemr.flw.utils.JwtAuthenticationUtil; -import com.iemr.flw.utils.JwtUtil; -import com.iemr.flw.utils.exception.IEMRException; -import io.jsonwebtoken.Claims; -import io.swagger.v3.oas.annotations.Operation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; -import java.util.Objects; @RestController @RequestMapping(value = "/asha", produces = "application/json") diff --git a/src/main/java/com/iemr/flw/domain/iemr/M_User.java b/src/main/java/com/iemr/flw/domain/iemr/User.java similarity index 91% rename from src/main/java/com/iemr/flw/domain/iemr/M_User.java rename to src/main/java/com/iemr/flw/domain/iemr/User.java index 0187a613..d422f926 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/M_User.java +++ b/src/main/java/com/iemr/flw/domain/iemr/User.java @@ -1,7 +1,6 @@ package com.iemr.flw.domain.iemr; import java.sql.Timestamp; -import java.time.LocalDate; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.Expose; @@ -14,18 +13,10 @@ import jakarta.persistence.Table; import lombok.Data; -import com.google.gson.annotations.Expose; -import jakarta.persistence.*; -import lombok.Data; -import java.sql.Date; -import java.sql.Timestamp; -import java.time.LocalDate; - @Entity -@Table(name = "m_User", schema = "db_iemr") +@Table(name = "m_user", schema = "db_iemr") @Data -public class M_User { - +public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Expose @@ -144,11 +135,11 @@ public class M_User { @Column(name = "failed_attempt", insertable = false) private Integer failedAttempt; - public M_User() { + public User() { // TODO Auto-generated constructor stub } - public M_User(Integer userID, String userName) { + public User(Integer userID, String userName) { // TODO Auto-generated constructor stub this.userID = userID; this.userName = userName; diff --git a/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java index 2db2b200..943b43b1 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java @@ -2,12 +2,13 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.domain.iemr.User; @Repository -public interface EmployeeMasterRepo extends JpaRepository { - @Query("SELECT u FROM M_User u WHERE u.userID = :userID and u.deleted=false and u.statusID in (1, 2)") - M_User findUserByUserID(@Param("userID") Integer userID); +public interface EmployeeMasterRepo extends JpaRepository { + @Query("SELECT u FROM User u WHERE u.userID = :userID and u.deleted=false and u.statusID in (1, 2)") + User findUserByUserID(@Param("userID") Integer userID); } diff --git a/src/main/java/com/iemr/flw/service/EmployeeMasterInter.java b/src/main/java/com/iemr/flw/service/EmployeeMasterInter.java index 1c4369da..4e81445c 100644 --- a/src/main/java/com/iemr/flw/service/EmployeeMasterInter.java +++ b/src/main/java/com/iemr/flw/service/EmployeeMasterInter.java @@ -1,13 +1,13 @@ package com.iemr.flw.service; -import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.domain.iemr.User; import org.springframework.stereotype.Service; import java.util.List; @Service public interface EmployeeMasterInter { - public M_User getUserDetails(Integer userID); + public User getUserDetails(Integer userID); - List getAllUsers(); + List getAllUsers(); } diff --git a/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java index 29ca30da..df86d7ec 100644 --- a/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java @@ -1,19 +1,15 @@ package com.iemr.flw.service.impl; import com.iemr.flw.domain.iemr.AshaWorker; -import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.domain.iemr.User; import com.iemr.flw.repo.iemr.AshaProfileRepo; import com.iemr.flw.repo.iemr.UserServiceRoleRepo; import com.iemr.flw.service.AshaProfileService; import com.iemr.flw.service.EmployeeMasterInter; import com.iemr.flw.repo.iemr.EmployeeMasterRepo; -import com.iemr.flw.service.AshaProfileService; -import com.iemr.flw.service.EmployeeMasterInter; import com.iemr.flw.utils.JwtAuthenticationUtil; import com.iemr.flw.utils.JwtUtil; -import com.iemr.flw.utils.exception.IEMRException; -import io.jsonwebtoken.Claims; import jakarta.transaction.Transactional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,10 +20,6 @@ import java.util.Objects; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Service; - -import java.util.Objects; -import java.util.concurrent.TimeUnit; @Service public class AshaProfileImpl implements AshaProfileService { @@ -96,7 +88,7 @@ public AshaWorker getProfileData(Integer userId) { private AshaWorker getDetails(Integer userID) { try { - M_User m_user = Objects.requireNonNull(employeeMasterInter.getUserDetails(userID), "User details not found for ID: " + userID); + User m_user = Objects.requireNonNull(employeeMasterInter.getUserDetails(userID), "User details not found for ID: " + userID); AshaWorker ashaWorker = new AshaWorker(); ashaWorker.setEmployeeId(m_user.getUserID()); // Convert DOB (Timestamp) to LocalDate diff --git a/src/main/java/com/iemr/flw/service/impl/EmployeeMasterImpl.java b/src/main/java/com/iemr/flw/service/impl/EmployeeMasterImpl.java index 2f67fc2b..acf7836c 100644 --- a/src/main/java/com/iemr/flw/service/impl/EmployeeMasterImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/EmployeeMasterImpl.java @@ -1,6 +1,6 @@ package com.iemr.flw.service.impl; -import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.domain.iemr.User; import com.iemr.flw.repo.iemr.EmployeeMasterRepo; import com.iemr.flw.service.EmployeeMasterInter; @@ -19,13 +19,13 @@ public class EmployeeMasterImpl implements EmployeeMasterInter { @Override - public M_User getUserDetails(Integer userID) { + public User getUserDetails(Integer userID) { logger.debug("Fetching user details for userID: {}", userID); try { if (userID == null) { throw new IllegalArgumentException("UserID cannot be null"); } - return employeeMasterRepo.findByUserID(userID); + return employeeMasterRepo.findUserByUserID(userID); } catch (Exception e) { logger.error("Error fetching user details for userID: {}", userID, e); throw e; @@ -33,7 +33,7 @@ public M_User getUserDetails(Integer userID) { } @Override - public List getAllUsers() { + public List getAllUsers() { return employeeMasterRepo.findAll(); } } diff --git a/src/main/java/com/iemr/flw/service/impl/NotificationSchedulerService.java b/src/main/java/com/iemr/flw/service/impl/NotificationSchedulerService.java index a5b6dd77..21d0da45 100644 --- a/src/main/java/com/iemr/flw/service/impl/NotificationSchedulerService.java +++ b/src/main/java/com/iemr/flw/service/impl/NotificationSchedulerService.java @@ -1,19 +1,13 @@ package com.iemr.flw.service.impl; -import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.domain.iemr.User; import com.iemr.flw.service.EmployeeMasterInter; -import com.iemr.flw.service.impl.ChildCareServiceImpl; -import com.iemr.flw.service.impl.MaternalHealthServiceImpl; import com.iemr.flw.utils.CookieUtil; -import jakarta.annotation.PostConstruct; -import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; @Service public class NotificationSchedulerService { @@ -61,7 +55,7 @@ public void triggerAncRemindersForAllAsha() { @Scheduled(cron = "0 0 9 * * *") public void trigerTomorrowImmunizationReminders() { - for(M_User m_user: employeeMasterInter.getAllUsers()){ + for(User m_user: employeeMasterInter.getAllUsers()){ childCareService.getTomorrowImmunizationReminders(m_user.getUserID()); } diff --git a/src/main/java/com/iemr/flw/service/impl/SmsSchedulerService.java b/src/main/java/com/iemr/flw/service/impl/SmsSchedulerService.java index 637d011a..90b57fdd 100644 --- a/src/main/java/com/iemr/flw/service/impl/SmsSchedulerService.java +++ b/src/main/java/com/iemr/flw/service/impl/SmsSchedulerService.java @@ -2,22 +2,16 @@ import com.iemr.flw.domain.identity.RMNCHBeneficiaryDetailsRmnch; import com.iemr.flw.domain.iemr.ANCVisit; -import com.iemr.flw.domain.iemr.M_User; -import com.iemr.flw.dto.iemr.ANCVisitDTO; +import com.iemr.flw.domain.iemr.User; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.ANCVisitRepo; import com.iemr.flw.service.EmployeeMasterInter; import com.iemr.flw.utils.CookieUtil; -import jakarta.annotation.PostConstruct; -import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import java.math.BigInteger; import java.sql.Timestamp; @@ -25,7 +19,6 @@ import java.time.ZoneId; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @Service public class SmsSchedulerService { @@ -94,7 +87,7 @@ public void sendAncReminders() { @Scheduled(cron = "0 0 9 * * *") public void trigerTomorrowImmunizationReminders() { - for (M_User m_user : employeeMasterInter.getAllUsers()) { + for (User m_user : employeeMasterInter.getAllUsers()) { childCareService.getTomorrowImmunizationReminders(m_user.getUserID()); } diff --git a/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java b/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java index 46b35eb4..5a9f76bf 100644 --- a/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java +++ b/src/main/java/com/iemr/flw/utils/JwtAuthenticationUtil.java @@ -11,7 +11,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; -import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.domain.iemr.User; import com.iemr.flw.repo.iemr.EmployeeMasterRepo; import com.iemr.flw.utils.exception.IEMRException; @@ -75,7 +75,7 @@ public boolean validateUserIdAndJwtToken(String jwtToken) throws IEMRException { String userId = claims.get("userId", String.class); // Check if user data is present in Redis - M_User user = getUserFromCache(userId); + User user = getUserFromCache(userId); if (user == null) { // If not in Redis, fetch from DB and cache the result user = fetchUserFromDB(userId); @@ -91,9 +91,9 @@ public boolean validateUserIdAndJwtToken(String jwtToken) throws IEMRException { } } - private M_User getUserFromCache(String userId) { + private User getUserFromCache(String userId) { String redisKey = "user_" + userId; // The Redis key format - M_User user = (M_User) redisTemplate.opsForValue().get(redisKey); + User user = (User) redisTemplate.opsForValue().get(redisKey); if (user == null) { logger.warn("User not found in Redis. Will try to fetch from DB."); @@ -104,15 +104,15 @@ private M_User getUserFromCache(String userId) { return user; // Returns null if not found } - private M_User fetchUserFromDB(String userId) { + private User fetchUserFromDB(String userId) { // This method will only be called if the user is not found in Redis. String redisKey = "user_" + userId; // Redis key format // Fetch user from DB - M_User user = userLoginRepo.findUserByUserID(Integer.parseInt(userId)); + User user = userLoginRepo.findUserByUserID(Integer.parseInt(userId)); if (user != null) { - M_User userHash = new M_User(); + User userHash = new User(); userHash.setUserID(user.getUserID()); userHash.setUserName(user.getUserName()); diff --git a/src/main/java/com/iemr/flw/utils/redis/RedisConfig.java b/src/main/java/com/iemr/flw/utils/redis/RedisConfig.java index 0a279319..98acde7a 100644 --- a/src/main/java/com/iemr/flw/utils/redis/RedisConfig.java +++ b/src/main/java/com/iemr/flw/utils/redis/RedisConfig.java @@ -7,7 +7,7 @@ import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; -import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.domain.iemr.User; @Configuration public class RedisConfig { @@ -20,7 +20,7 @@ public RedisTemplate redisTemplate(RedisConnectionFactory factor template.setKeySerializer(new StringRedisSerializer()); // Use Jackson2JsonRedisSerializer for values (Users objects) - Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(M_User.class); + Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(User.class); template.setValueSerializer(serializer); return template; From e4da85aa2b8deca848d9fee1cf94e4e99f6da360 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 17:55:39 +0530 Subject: [PATCH 31/65] optmiz code of get all Beneficiary --- .../flw/service/impl/IncentiveServiceImpl.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 33f8ac1d..480b5174 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -198,10 +198,12 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { @Override public String updateIncentive(PendingActivityDTO pendingActivityDTO) { + logger.info("run--1"); if (pendingActivityDTO == null) { return "Invalid request"; } + logger.info("run--2"); IncentiveName incentiveName; try { @@ -209,12 +211,16 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { } catch (IllegalArgumentException e) { return "Invalid incentive name"; } + logger.info("run--3"); + IncentiveActivity incentiveActivity = incentivesRepo.findIncentiveMasterByNameAndGroup( pendingActivityDTO.getActivityName(), pendingActivityDTO.getModuleName() ); + logger.info("run--3"); + if (incentiveActivity == null) { return null; @@ -226,20 +232,24 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { pendingActivityDTO.getId(), incentiveActivity.getId() ); + logger.info("run--4"); if (!optionalPendingActivity.isPresent()) { return null; } + logger.info("run--5"); IncentivePendingActivity existingActivity = optionalPendingActivity.get(); if (!existingActivity.getActivityId().equals(pendingActivityDTO.getId())) { return null; } + logger.info("run--6"); if (pendingActivityDTO.getImages() == null || pendingActivityDTO.getImages().isEmpty()) { return null; } + logger.info("run--7"); try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); @@ -251,7 +261,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { // ✅ ENUM BASED CHECK if(pendingActivityDTO.getModuleName().equals(GroupName.ACTIVITY)){ - if (incentiveName.name() == IncentiveName.MAA_QUARTERLY_MEETING.name()) { + if (Objects.equals(incentiveName.name(), IncentiveName.MAA_QUARTERLY_MEETING.name())) { maaMeetingService.updateMeetingFromFileUpload( maaMeetingRequestDTO, @@ -284,6 +294,8 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { } catch (Exception e) { + logger.info("run--last"+e.getMessage()); + return e.getMessage(); } From 3ca37275f853b9189020d96011730071fb9d787b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 18:06:19 +0530 Subject: [PATCH 32/65] optmiz code of get all Beneficiary --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 480b5174..5266eaa2 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -229,8 +229,8 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { Optional optionalPendingActivity = incentivePendingActivityRepository .findByMincentiveIdAndActivityId( - pendingActivityDTO.getId(), - incentiveActivity.getId() + incentiveActivity.getId(), + pendingActivityDTO.getId() ); logger.info("run--4"); From 56d7e9c5705e9a2c75632bc963b59d4849de2bd8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 18:14:40 +0530 Subject: [PATCH 33/65] optmiz code of get all Beneficiary --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 5266eaa2..aac6f3e6 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -253,6 +253,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); + maaMeetingRequestDTO.setId(existingActivity.getRecordId()); maaMeetingRequestDTO.setMeetingImages( pendingActivityDTO.getImages().toArray(new MultipartFile[0]) ); From e324e00fcf1e34a61ff12f68343459f24952cd7f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 18:22:24 +0530 Subject: [PATCH 34/65] optmiz code of get all Beneficiary --- .../service/impl/IncentiveServiceImpl.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index aac6f3e6..e1a5ed3e 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -3,10 +3,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.iemr.flw.domain.identity.RMNCHMBeneficiarydetail; -import com.iemr.flw.domain.iemr.IncentiveActivity; -import com.iemr.flw.domain.iemr.IncentiveActivityLangMapping; -import com.iemr.flw.domain.iemr.IncentiveActivityRecord; -import com.iemr.flw.domain.iemr.IncentivePendingActivity; +import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; @@ -264,28 +261,38 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { if(pendingActivityDTO.getModuleName().equals(GroupName.ACTIVITY)){ if (Objects.equals(incentiveName.name(), IncentiveName.MAA_QUARTERLY_MEETING.name())) { - maaMeetingService.updateMeetingFromFileUpload( + MaaMeeting meeting= maaMeetingService.updateMeetingFromFileUpload( maaMeetingRequestDTO, pendingActivityDTO.getId() ); + if(meeting!=null){ + return "Incentive update successfully"; + } } }else { if (incentiveName.name().equals(IncentiveName.MAA_QUARTERLY_MEETING.name())) { - maaMeetingService.updateMeetingFromFileUpload( + MaaMeeting meeting = maaMeetingService.updateMeetingFromFileUpload( maaMeetingRequestDTO, pendingActivityDTO.getId() ); + if(meeting!=null){ + return "Incentive update successfully"; + } + } if (incentiveName.name().equals(IncentiveName.HBNC_0_42_DAYS.name())) { - childCareService.updateHbncFromFileUpload( + HbncVisit hbncVisit= childCareService.updateHbncFromFileUpload( pendingActivityDTO.getImages().toArray(new MultipartFile[0]), pendingActivityDTO.getId(), existingActivity.getRecordId() ); + if(hbncVisit!=null){ + return "Incentive update successfully"; + } } From d61625e8391087e3e36e4d59fca8ebc16840cf67 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 23 Feb 2026 18:29:36 +0530 Subject: [PATCH 35/65] optmiz code of get all Beneficiary --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index e1a5ed3e..8ee38dc2 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -172,7 +172,6 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { if (entry.getName() == null) { if (entry.getBenId() != 0 && entry.getBenId() > 0L) { Long regId = beneficiaryRepo.getBenRegIdFromBenId(entry.getBenId()); - logger.info("rmnchBeneficiaryDetailsRmnch" + regId); BigInteger benDetailId = beneficiaryRepo.findByBenRegIdFromMapping(BigInteger.valueOf(regId)).getBenDetailsId(); RMNCHMBeneficiarydetail rmnchBeneficiaryDetails = beneficiaryRepo.findByBeneficiaryDetailsId(benDetailId); String beneName = rmnchBeneficiaryDetails.getFirstName() + " " + rmnchBeneficiaryDetails.getLastName(); From ed03ce073a711c93c80a675f8abe31d2fe774eb1 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 24 Feb 2026 15:11:23 +0530 Subject: [PATCH 36/65] optmiz code of get all Beneficiary --- src/main/java/com/iemr/flw/repo/iemr/DeliveryOutcomeRepo.java | 2 ++ .../com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/DeliveryOutcomeRepo.java b/src/main/java/com/iemr/flw/repo/iemr/DeliveryOutcomeRepo.java index 643d7c9a..cf09f625 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/DeliveryOutcomeRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/DeliveryOutcomeRepo.java @@ -16,5 +16,7 @@ public interface DeliveryOutcomeRepo extends JpaRepository getDeliveryOutcomeByAshaId(@Param("userId") String userId, @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); + List findByCreatedBy(String userName); + DeliveryOutcome findDeliveryOutcomeByBenIdAndIsActive(Long benId, Boolean isActive); } diff --git a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java index 0e329f4b..63f86c9a 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -109,7 +109,7 @@ public String registerDeliveryOutcome(List deliveryOutcomeDT public List getDeliveryOutcome(GetBenRequestHandler dto) { try { String user = beneficiaryRepo.getUserName(dto.getAshaId()); - List deliveryOutcomeList = deliveryOutcomeRepo.getDeliveryOutcomeByAshaId(user, dto.getFromDate(), dto.getToDate()); + List deliveryOutcomeList = deliveryOutcomeRepo.findByCreatedBy(user); return deliveryOutcomeList.stream() .map(deliveryOutcome -> mapper.convertValue(deliveryOutcome, DeliveryOutcomeDTO.class)) .collect(Collectors.toList()); From 94e4aff80b233292723babd123ae4f5803d331d8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 24 Feb 2026 15:29:02 +0530 Subject: [PATCH 37/65] optmiz code of get all Beneficiary --- src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java index eb8b0107..d6bcd7b6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java @@ -45,7 +45,7 @@ public class ScreeningKalaAzar { @Column(name = "house_hold_details_Id",nullable = false) private Long houseHoldDetailsId; - @Column(name = "userID") + @Column(name = "user_id") private Integer userId; @Temporal(TemporalType.DATE) @@ -97,7 +97,7 @@ public class ScreeningKalaAzar { @Column(name = "created_by") private String createdBy; - @Column(name = "diseaseTypeID") + @Column(name = "disease_type_id") private Integer diseaseTypeId; @Column(name = "refer_to_name") From d8f3a0d03703bfaf77114cbd6614bd8a3ede0b45 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 24 Feb 2026 22:55:27 +0530 Subject: [PATCH 38/65] fix DeliveryOutcome data issue --- .../service/impl/BeneficiaryServiceImpl.java | 641 ++++++++++-------- 1 file changed, 344 insertions(+), 297 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 29a3da48..dbbe40e7 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -64,10 +64,6 @@ public class BeneficiaryServiceImpl implements BeneficiaryService { @Value("${door-to-door-page-size}") private String door_to_door_page_size; - - private static final Gson GSON = new GsonBuilder() - .setDateFormat("MMM dd, yyyy h:mm:ss a").create(); - @Value("${fhir-url}") private String fhirUrl; @@ -102,65 +98,334 @@ public class BeneficiaryServiceImpl implements BeneficiaryService { @Override public String getBenData(GetBenRequestHandler request, String authorisation) throws Exception { + String outputResponse = null; + int totalPage = 0; - // ✅ Early validation — no nested if/else pyramid - if (request == null || request.getAshaId() == null) - throw new Exception("Invalid/missing village details"); - if (request.getPageNo() == null) - throw new Exception("Invalid page no"); - - String userName = beneficiaryRepo.getUserName(request.getAshaId()); - if (userName == null || userName.isEmpty()) - throw new Exception("Asha details not found, please contact administrator"); - - request.setUserName(userName); - - int pageSize = Integer.parseInt(door_to_door_page_size); // ✅ parse once - PageRequest pr = PageRequest.of(request.getPageNo(), pageSize); - - // ✅ Ternary to pick query — removes duplicate Page<> variable declarations - Page page = - (request.getFromDate() != null && request.getToDate() != null) - ? beneficiaryRepo.getBenDataWithinDates( - request.getUserName(), request.getFromDate(), request.getToDate(), pr) - : beneficiaryRepo.getBenDataByUser(request.getUserName(), pr); - - List resultSet = page.getContent(); - - // ✅ isEmpty() instead of size() > 0 - if (resultSet == null || resultSet.isEmpty()) { - // Return empty response instead of null - Map empty = new HashMap<>(); - empty.put("data", new ArrayList<>()); - empty.put("pageSize", pageSize); - empty.put("totalPage", 0); - return GSON.toJson(empty); + try { + if (request != null && request.getAshaId() != null) { + List resultSet; + Integer pageSize = Integer.valueOf(door_to_door_page_size); + if (request.getPageNo() != null) { + String userName = beneficiaryRepo.getUserName(request.getAshaId()); + if (userName == null || userName.isEmpty()) + throw new Exception("Asha details not found, please contact administrator"); + + request.setUserName(userName); + + PageRequest pr = PageRequest.of(request.getPageNo(), pageSize); + if (request.getFromDate() != null && request.getToDate() != null) { + Page p = beneficiaryRepo.getBenDataWithinDates( + request.getUserName(), request.getFromDate(), request.getToDate(), pr); + resultSet = p.getContent(); + totalPage = p.getTotalPages(); + } else { + Page p = beneficiaryRepo.getBenDataByUser(request.getUserName(), + pr); + resultSet = p.getContent(); + totalPage = p.getTotalPages(); + } + if (resultSet != null && resultSet.size() > 0) { + outputResponse = getMappingsForAddressIDs(resultSet, totalPage, authorisation); + } + } else { + // page no not invalid + throw new Exception("Invalid page no"); + } + } else + throw new Exception("Invalid/missing village details"); + } catch (Exception e) { + throw new Exception(e.getMessage()); } - return getMappingsForAddressIDs(resultSet, page.getTotalPages(), authorisation); + return outputResponse; } -// --------------------------------------------------------------- -// PRIVATE METHOD -// --------------------------------------------------------------- + private String getMappingsForAddressIDs(List addressList, int totalPage, + String authorisation) { + RMNCHHouseHoldDetails benHouseHoldRMNCH_ROBJ; + RMNCHBeneficiaryDetailsRmnch benDetailsRMNCH_OBJ; + RMNCHBornBirthDetails benBotnBirthRMNCH_ROBJ; - private String getMappingsForAddressIDs(List addressList, - int totalPage, String authorisation) { + RMNCHMBeneficiarydetail benDetailsOBJ; + RMNCHMBeneficiaryAccount benAccountOBJ; + RMNCHMBeneficiaryImage benImageOBJ; + RMNCHMBeneficiaryaddress benAddressOBJ; + RMNCHMBeneficiarycontact benContactOBJ; - List> resultList = new ArrayList<>(addressList.size()); // ✅ pre-sized + Map resultMap; + ArrayList> resultList = new ArrayList<>(); for (RMNCHMBeneficiaryaddress a : addressList) { + // exception by-passing try { RMNCHMBeneficiarymapping m = beneficiaryRepo.getByAddressID(a.getId()); - if (m == null) continue; // ✅ skip instead of deeply nested if block - - Map resultMap = buildResultMap(m, authorisation); - resultList.add(resultMap); - + if (m != null) { + benHouseHoldRMNCH_ROBJ = new RMNCHHouseHoldDetails(); + benDetailsRMNCH_OBJ = new RMNCHBeneficiaryDetailsRmnch(); + benBotnBirthRMNCH_ROBJ = new RMNCHBornBirthDetails(); + + benDetailsOBJ = new RMNCHMBeneficiarydetail(); + benAccountOBJ = new RMNCHMBeneficiaryAccount(); + benImageOBJ = new RMNCHMBeneficiaryImage(); + benAddressOBJ = new RMNCHMBeneficiaryaddress(); + benContactOBJ = new RMNCHMBeneficiarycontact(); + Map healthDetails = getBenHealthDetails(m.getBenRegId()); + if (m.getBenDetailsId() != null) { + benDetailsOBJ = beneficiaryRepo.getDetailsById(m.getBenDetailsId()); + } + if (m.getBenAccountID() != null) { + benAccountOBJ = beneficiaryRepo.getAccountById(m.getBenAccountID()); + } + if (m.getBenImageId() != null) { + benImageOBJ = beneficiaryRepo.getImageById(m.getBenImageId().longValue()); + } + if (m.getBenAddressId() != null) { + benAddressOBJ = beneficiaryRepo.getAddressById(m.getBenAddressId()); + } + if (m.getBenContactsId() != null) { + benContactOBJ = beneficiaryRepo.getContactById(m.getBenContactsId()); + } + + BigInteger benID = null; + if (m.getBenRegId() != null) + benID = beneficiaryRepo.getBenIdFromRegID(m.getBenRegId().longValue()); + + if (m.getBenRegId() != null) { + benDetailsRMNCH_OBJ = beneficiaryRepo + .getDetailsByRegID((m.getBenRegId()).longValue()); + benBotnBirthRMNCH_ROBJ = beneficiaryRepo.getBornBirthByRegID((m.getBenRegId()).longValue()); + + if (benDetailsRMNCH_OBJ != null && benDetailsRMNCH_OBJ.getHouseoldId() != null) + benHouseHoldRMNCH_ROBJ = houseHoldRepo + .getByHouseHoldID(benDetailsRMNCH_OBJ.getHouseoldId()); + + } + if (benDetailsRMNCH_OBJ == null) + benDetailsRMNCH_OBJ = new RMNCHBeneficiaryDetailsRmnch(); + + // new mapping 30-06-2021 + if (benDetailsOBJ.getMotherName() != null) + benDetailsRMNCH_OBJ.setMotherName(benDetailsOBJ.getMotherName()); + if (benDetailsOBJ.getLiteracyStatus() != null) + benDetailsRMNCH_OBJ.setLiteracyStatus(benDetailsOBJ.getLiteracyStatus()); + + // bank + if (benAccountOBJ.getNameOfBank() != null) + benDetailsRMNCH_OBJ.setNameOfBank(benAccountOBJ.getNameOfBank()); + if (benAccountOBJ.getBranchName() != null) + benDetailsRMNCH_OBJ.setBranchName(benAccountOBJ.getBranchName()); + if (benAccountOBJ.getIfscCode() != null) + benDetailsRMNCH_OBJ.setIfscCode(benAccountOBJ.getIfscCode()); + if (benAccountOBJ.getBankAccount() != null) + benDetailsRMNCH_OBJ.setBankAccount(benAccountOBJ.getBankAccount()); + + // location + if (benAddressOBJ.getCountyid() != null) + benDetailsRMNCH_OBJ.setCountryId(benAddressOBJ.getCountyid()); + if (benAddressOBJ.getPermCountry() != null) + benDetailsRMNCH_OBJ.setCountryName(benAddressOBJ.getPermCountry()); + + if (benAddressOBJ.getStatePerm() != null) + benDetailsRMNCH_OBJ.setStateId(benAddressOBJ.getStatePerm()); + if (benAddressOBJ.getPermState() != null) + benDetailsRMNCH_OBJ.setStateName(benAddressOBJ.getPermState()); + + if (benAddressOBJ.getDistrictidPerm() != null) { + benDetailsRMNCH_OBJ.setDistrictid(benAddressOBJ.getDistrictidPerm()); + + } + if (benAddressOBJ.getDistrictnamePerm() != null) { + benDetailsRMNCH_OBJ.setDistrictname(benAddressOBJ.getDistrictnamePerm()); + + } + + if (benAddressOBJ.getPermSubDistrictId() != null) + benDetailsRMNCH_OBJ.setBlockId(benAddressOBJ.getPermSubDistrictId()); + if (benAddressOBJ.getPermSubDistrict() != null) + benDetailsRMNCH_OBJ.setBlockName(benAddressOBJ.getPermSubDistrict()); + + if (benAddressOBJ.getVillageidPerm() != null) + benDetailsRMNCH_OBJ.setVillageId(benAddressOBJ.getVillageidPerm()); + if (benAddressOBJ.getVillagenamePerm() != null) + benDetailsRMNCH_OBJ.setVillageName(benAddressOBJ.getVillagenamePerm()); + + if (benAddressOBJ.getPermServicePointId() != null) + benDetailsRMNCH_OBJ.setServicePointID(benAddressOBJ.getPermServicePointId()); + if (benAddressOBJ.getPermServicePoint() != null) + benDetailsRMNCH_OBJ.setServicePointName(benAddressOBJ.getPermServicePoint()); + + if (benAddressOBJ.getPermZoneID() != null) + benDetailsRMNCH_OBJ.setZoneID(benAddressOBJ.getPermZoneID()); + if (benAddressOBJ.getPermZone() != null) + benDetailsRMNCH_OBJ.setZoneName(benAddressOBJ.getPermZone()); + + if (benAddressOBJ.getPermAddrLine1() != null) + benDetailsRMNCH_OBJ.setAddressLine1(benAddressOBJ.getPermAddrLine1()); + if (benAddressOBJ.getPermAddrLine2() != null) + benDetailsRMNCH_OBJ.setAddressLine2(benAddressOBJ.getPermAddrLine2()); + if (benAddressOBJ.getPermAddrLine3() != null) + benDetailsRMNCH_OBJ.setAddressLine3(benAddressOBJ.getPermAddrLine3()); + + // ----------------------------------------------------------------------------- + + // related benids + if (benDetailsRMNCH_OBJ.getRelatedBeneficiaryIdsDB() != null) { + + String[] relatedBenIDsString = benDetailsRMNCH_OBJ.getRelatedBeneficiaryIdsDB().split(","); + Long[] relatedBenIDs = new Long[relatedBenIDsString.length]; + int pointer = 0; + for (String s : relatedBenIDsString) { + relatedBenIDs[pointer] = Long.valueOf(s); + pointer++; + } + + benDetailsRMNCH_OBJ.setRelatedBeneficiaryIds(relatedBenIDs); + } + // ------------------------------------------------------------------------------ + + if (benDetailsOBJ.getCommunity() != null) + benDetailsRMNCH_OBJ.setCommunity(benDetailsOBJ.getCommunity()); + if (benDetailsOBJ.getCommunityId() != null) + benDetailsRMNCH_OBJ.setCommunityId(benDetailsOBJ.getCommunityId()); + if (benContactOBJ.getPreferredPhoneNum() != null) + benDetailsRMNCH_OBJ.setContact_number(benContactOBJ.getPreferredPhoneNum()); + + if (benDetailsOBJ.getDob() != null) + benDetailsRMNCH_OBJ.setDob(benDetailsOBJ.getDob()); + if (benDetailsOBJ.getFatherName() != null) + benDetailsRMNCH_OBJ.setFatherName(benDetailsOBJ.getFatherName()); + if (benDetailsOBJ.getFirstName() != null) + benDetailsRMNCH_OBJ.setFirstName(benDetailsOBJ.getFirstName()); + if (benDetailsOBJ.getGender() != null) + benDetailsRMNCH_OBJ.setGender(benDetailsOBJ.getGender()); + if (benDetailsOBJ.getGenderId() != null) + benDetailsRMNCH_OBJ.setGenderId(benDetailsOBJ.getGenderId()); + + if (benDetailsOBJ.getMaritalstatus() != null) + benDetailsRMNCH_OBJ.setMaritalstatus(benDetailsOBJ.getMaritalstatus()); + if (benDetailsOBJ.getMaritalstatusId() != null) + benDetailsRMNCH_OBJ.setMaritalstatusId(benDetailsOBJ.getMaritalstatusId()); + if (benDetailsOBJ.getMarriageDate() != null) + benDetailsRMNCH_OBJ.setMarriageDate(benDetailsOBJ.getMarriageDate()); + + if (benDetailsOBJ.getReligion() != null) + benDetailsRMNCH_OBJ.setReligion(benDetailsOBJ.getReligion()); + if (benDetailsOBJ.getReligionID() != null) + benDetailsRMNCH_OBJ.setReligionID(benDetailsOBJ.getReligionID()); + if (benDetailsOBJ.getSpousename() != null) + benDetailsRMNCH_OBJ.setSpousename(benDetailsOBJ.getSpousename()); + + if (benImageOBJ != null && benImageOBJ.getUser_image() != null) + benDetailsRMNCH_OBJ.setUser_image(benImageOBJ.getUser_image()); + + // new fields +// benDetailsRMNCH_OBJ.setRegistrationDate(benDetailsOBJ.getCreatedDate()); + if (benID != null) + benDetailsRMNCH_OBJ.setBenficieryid(benID.longValue()); + + if (benDetailsOBJ.getLastName() != null) + benDetailsRMNCH_OBJ.setLastName(benDetailsOBJ.getLastName()); + + if (benDetailsRMNCH_OBJ.getCreatedBy() == null) + if (benDetailsOBJ.getCreatedBy() != null) + benDetailsRMNCH_OBJ.setCreatedBy(benDetailsOBJ.getCreatedBy()); + + // age calculation + String ageDetails = ""; + int age_val = 0; + String ageUnit = null; + if (benDetailsOBJ.getDob() != null) { + + Date date = new Date(benDetailsOBJ.getDob().getTime()); + Calendar cal = Calendar.getInstance(); + + cal.setTime(date); + + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + int day = cal.get(Calendar.DAY_OF_MONTH); + + java.time.LocalDate todayDate = java.time.LocalDate.now(); + java.time.LocalDate birthdate = java.time.LocalDate.of(year, month, day); + Period p = Period.between(birthdate, todayDate); + + int d = p.getDays(); + int mo = p.getMonths(); + int y = p.getYears(); + + if (y > 0) { + ageDetails = y + " years - " + mo + " months"; + age_val = y; + ageUnit = (age_val > 1) ? "Years" : "Year"; + } else { + if (mo > 0) { + ageDetails = mo + " months - " + d + " days"; + age_val = mo; + ageUnit = (age_val > 1) ? "Months" : "Month"; + } else { + ageDetails = d + " days"; + age_val = d; + ageUnit = (age_val > 1) ? "Days" : "Day"; + } + } + + } + + benDetailsRMNCH_OBJ.setAgeFull(ageDetails); + benDetailsRMNCH_OBJ.setAge(age_val); + if (ageUnit != null) + benDetailsRMNCH_OBJ.setAge_unit(ageUnit); + + resultMap = new HashMap<>(); + if (benHouseHoldRMNCH_ROBJ != null) + resultMap.put("householdDetails", benHouseHoldRMNCH_ROBJ); + else + resultMap.put("householdDetails", new HashMap()); + + if (benBotnBirthRMNCH_ROBJ != null) + resultMap.put("bornbirthDeatils", benBotnBirthRMNCH_ROBJ); + else + resultMap.put("bornbirthDeatils", new HashMap()); + + resultMap.put("beneficiaryDetails", benDetailsRMNCH_OBJ); + resultMap.put("abhaHealthDetails", healthDetails); + resultMap.put("houseoldId", benDetailsRMNCH_OBJ.getHouseoldId()); + resultMap.put("benficieryid", benDetailsRMNCH_OBJ.getBenficieryid()); + resultMap.put("isDeath", benDetailsRMNCH_OBJ.getIsDeath()); + resultMap.put("isDeathValue", benDetailsRMNCH_OBJ.getIsDeathValue()); + resultMap.put("dateOfDeath",benDetailsRMNCH_OBJ.getDateOfDeath()); + resultMap.put("timeOfDeath", benDetailsRMNCH_OBJ.getTimeOfDeath()); + resultMap.put("reasonOfDeath", benDetailsRMNCH_OBJ.getReasonOfDeath()); + resultMap.put("reasonOfDeathId", benDetailsRMNCH_OBJ.getReasonOfDeathId()); + resultMap.put("placeOfDeath", benDetailsRMNCH_OBJ.getPlaceOfDeath()); + resultMap.put("placeOfDeathId", benDetailsRMNCH_OBJ.getPlaceOfDeathId()); + resultMap.put("isSpouseAdded", benDetailsRMNCH_OBJ.getIsSpouseAdded()); + resultMap.put("isChildrenAdded", benDetailsRMNCH_OBJ.getIsChildrenAdded()); + resultMap.put("noOfchildren", benDetailsRMNCH_OBJ.getNoOfchildren()); + resultMap.put("isMarried", benDetailsRMNCH_OBJ.getIsMarried()); + resultMap.put("doYouHavechildren", benDetailsRMNCH_OBJ.getDoYouHavechildren()); + resultMap.put("noofAlivechildren",benDetailsRMNCH_OBJ.getNoofAlivechildren()); + resultMap.put("isDeactivate",benDetailsRMNCH_OBJ.getIsDeactivate()); + resultMap.put("BenRegId", m.getBenRegId()); + + // adding asha id / created by - user id + if (benAddressOBJ.getCreatedBy() != null) { + Integer userID = beneficiaryRepo.getUserIDByUserName(benAddressOBJ.getCreatedBy()); + if (userID != null && userID > 0) + resultMap.put("ashaId", userID); + } + // get HealthID of ben + if (m.getBenRegId() != null) { + fetchHealthIdByBenRegID(m.getBenRegId().longValue(), authorisation, resultMap); + } + + resultList.add(resultMap); + + } else { + // mapping not available + } } catch (Exception e) { - // ✅ Fixed log format — message was concatenated before addressID making it unreadable - logger.error("Error processing addressID: {}, vanID: {}, reason: {}", - a.getId(), a.getVanID(), e.getMessage()); + logger.error("error for addressID :"+e.getMessage() + a.getId() + " and vanID : " + a.getVanID()); } } @@ -168,257 +433,39 @@ private String getMappingsForAddressIDs(List addressLi response.put("data", resultList); response.put("pageSize", Integer.parseInt(door_to_door_page_size)); response.put("totalPage", totalPage); - return GSON.toJson(response); // ✅ reuse static GSON instance + Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); + return gson.toJson(response); } -// --------------------------------------------------------------- -// EXTRACTED: build one beneficiary's result map -// --------------------------------------------------------------- - - private Map buildResultMap(RMNCHMBeneficiarymapping m, String authorisation) { - - // ---- Fetch sub-objects (null-safe defaults) ---- - RMNCHMBeneficiarydetail benDetail = m.getBenDetailsId() != null - ? beneficiaryRepo.getDetailsById(m.getBenDetailsId()) : new RMNCHMBeneficiarydetail(); - RMNCHMBeneficiaryAccount benAccount = m.getBenAccountID() != null - ? beneficiaryRepo.getAccountById(m.getBenAccountID()) : new RMNCHMBeneficiaryAccount(); - RMNCHMBeneficiaryImage benImage = m.getBenImageId() != null - ? beneficiaryRepo.getImageById(m.getBenImageId().longValue()) : new RMNCHMBeneficiaryImage(); - RMNCHMBeneficiaryaddress benAddress = m.getBenAddressId() != null - ? beneficiaryRepo.getAddressById(m.getBenAddressId()) : new RMNCHMBeneficiaryaddress(); - RMNCHMBeneficiarycontact benContact = m.getBenContactsId() != null - ? beneficiaryRepo.getContactById(m.getBenContactsId()) : new RMNCHMBeneficiarycontact(); - - // ---- Protect against null returns from repo ---- - if (benDetail == null) benDetail = new RMNCHMBeneficiarydetail(); - if (benAccount == null) benAccount = new RMNCHMBeneficiaryAccount(); - if (benAddress == null) benAddress = new RMNCHMBeneficiaryaddress(); - if (benContact == null) benContact = new RMNCHMBeneficiarycontact(); - - BigInteger benID = m.getBenRegId() != null - ? beneficiaryRepo.getBenIdFromRegID(m.getBenRegId().longValue()) : null; - - // ---- RMNCH details + household + birth ---- - RMNCHBeneficiaryDetailsRmnch benRMNCH = new RMNCHBeneficiaryDetailsRmnch(); - RMNCHHouseHoldDetails household = new RMNCHHouseHoldDetails(); - RMNCHBornBirthDetails bornBirth = new RMNCHBornBirthDetails(); - - if (m.getBenRegId() != null) { - RMNCHBeneficiaryDetailsRmnch fetched = - beneficiaryRepo.getDetailsByRegID(m.getBenRegId().longValue()); - if (fetched != null) { - benRMNCH = fetched; - if (benRMNCH.getHouseoldId() != null) - household = houseHoldRepo.getByHouseHoldID(benRMNCH.getHouseoldId()); - } - RMNCHBornBirthDetails birth = beneficiaryRepo.getBornBirthByRegID(m.getBenRegId().longValue()); - if (birth != null) bornBirth = birth; - } - - // ---- Merge all sub-object fields into benRMNCH ---- - mergeFields(benRMNCH, benDetail, benAccount, benAddress, benContact, benImage, benID); - - // ---- Age ---- - applyAge(benRMNCH, benDetail); - - // ---- Health details from local DB ---- - Map healthDetails = getBenHealthDetails(m.getBenRegId()); - - // ---- Build result map ---- - Map map = new HashMap<>(); - map.put("householdDetails", household != null ? household : new HashMap<>()); - map.put("bornbirthDeatils", bornBirth != null ? bornBirth : new HashMap<>()); // key kept as-is for backward compat - map.put("beneficiaryDetails", benRMNCH); - map.put("abhaHealthDetails", healthDetails); - map.put("houseoldId", benRMNCH.getHouseoldId()); - map.put("benficieryid", benRMNCH.getBenficieryid()); - map.put("isDeath", benRMNCH.getIsDeath()); - map.put("isDeathValue", benRMNCH.getIsDeathValue()); - map.put("dateOfDeath", benRMNCH.getDateOfDeath()); - map.put("timeOfDeath", benRMNCH.getTimeOfDeath()); - map.put("reasonOfDeath", benRMNCH.getReasonOfDeath()); - map.put("reasonOfDeathId", benRMNCH.getReasonOfDeathId()); - map.put("placeOfDeath", benRMNCH.getPlaceOfDeath()); - map.put("placeOfDeathId", benRMNCH.getPlaceOfDeathId()); - map.put("isSpouseAdded", benRMNCH.getIsSpouseAdded()); - map.put("isChildrenAdded", benRMNCH.getIsChildrenAdded()); - map.put("noOfchildren", benRMNCH.getNoOfchildren()); - map.put("isMarried", benRMNCH.getIsMarried()); - map.put("doYouHavechildren", benRMNCH.getDoYouHavechildren()); - map.put("noofAlivechildren", benRMNCH.getNoofAlivechildren()); // ✅ trailing spaces removed - map.put("isDeactivate", benRMNCH.getIsDeactivate()); - map.put("BenRegId", m.getBenRegId()); - - // ✅ ASHA id lookup - if (benAddress.getCreatedBy() != null) { - Integer userID = beneficiaryRepo.getUserIDByUserName(benAddress.getCreatedBy()); - if (userID != null && userID > 0) map.put("ashaId", userID); - } - // ✅ External ABHA fetch - if (m.getBenRegId() != null) - fetchHealthIdByBenRegID(m.getBenRegId().longValue(), authorisation, map); - - return map; - } - -// --------------------------------------------------------------- -// EXTRACTED: merge all sub-object fields into RMNCH object -// replaces ~50 repetitive if (x != null) dest.setX(x) blocks -// --------------------------------------------------------------- - - private void mergeFields(RMNCHBeneficiaryDetailsRmnch d, - RMNCHMBeneficiarydetail detail, - RMNCHMBeneficiaryAccount account, - RMNCHMBeneficiaryaddress address, - RMNCHMBeneficiarycontact contact, - RMNCHMBeneficiaryImage image, - BigInteger benID) { - - // Personal details - ifNotNull(detail.getFirstName(), d::setFirstName); - ifNotNull(detail.getLastName(), d::setLastName); - ifNotNull(detail.getMotherName(), d::setMotherName); - ifNotNull(detail.getFatherName(), d::setFatherName); - ifNotNull(detail.getSpousename(), d::setSpousename); - ifNotNull(detail.getDob(), d::setDob); - ifNotNull(detail.getGender(), d::setGender); - ifNotNull(detail.getGenderId(), d::setGenderId); - ifNotNull(detail.getMaritalstatus(), d::setMaritalstatus); - ifNotNull(detail.getMaritalstatusId(), d::setMaritalstatusId); - ifNotNull(detail.getMarriageDate(), d::setMarriageDate); - ifNotNull(detail.getLiteracyStatus(), d::setLiteracyStatus); - ifNotNull(detail.getCommunity(), d::setCommunity); - ifNotNull(detail.getCommunityId(), d::setCommunityId); - ifNotNull(detail.getReligion(), d::setReligion); - ifNotNull(detail.getReligionID(), d::setReligionID); - // createdBy — only set if not already populated from RMNCH fetch - if (d.getCreatedBy() == null) ifNotNull(detail.getCreatedBy(), d::setCreatedBy); - - // Bank details - ifNotNull(account.getNameOfBank(), d::setNameOfBank); - ifNotNull(account.getBranchName(), d::setBranchName); - ifNotNull(account.getIfscCode(), d::setIfscCode); - ifNotNull(account.getBankAccount(), d::setBankAccount); - - // Address / location - ifNotNull(address.getCountyid(), d::setCountryId); - ifNotNull(address.getPermCountry(), d::setCountryName); - ifNotNull(address.getStatePerm(), d::setStateId); - ifNotNull(address.getPermState(), d::setStateName); - ifNotNull(address.getDistrictidPerm(), d::setDistrictid); - ifNotNull(address.getDistrictnamePerm(), d::setDistrictname); - ifNotNull(address.getPermSubDistrictId(), d::setBlockId); - ifNotNull(address.getPermSubDistrict(), d::setBlockName); - ifNotNull(address.getVillageidPerm(), d::setVillageId); - ifNotNull(address.getVillagenamePerm(), d::setVillageName); - ifNotNull(address.getPermServicePointId(), d::setServicePointID); - ifNotNull(address.getPermServicePoint(), d::setServicePointName); - ifNotNull(address.getPermZoneID(), d::setZoneID); - ifNotNull(address.getPermZone(), d::setZoneName); - ifNotNull(address.getPermAddrLine1(), d::setAddressLine1); - ifNotNull(address.getPermAddrLine2(), d::setAddressLine2); - ifNotNull(address.getPermAddrLine3(), d::setAddressLine3); - - // Contact - ifNotNull(contact.getPreferredPhoneNum(), d::setContact_number); - - // Image - if (image != null) ifNotNull(image.getUser_image(), d::setUser_image); - - // Ben ID - if (benID != null) d.setBenficieryid(benID.longValue()); - - // Related beneficiary IDs — split CSV string into Long[] - if (d.getRelatedBeneficiaryIdsDB() != null) { - String[] parts = d.getRelatedBeneficiaryIdsDB().split(","); - Long[] ids = new Long[parts.length]; - for (int i = 0; i < parts.length; i++) - ids[i] = Long.valueOf(parts[i].trim()); - d.setRelatedBeneficiaryIds(ids); - } - } - -// --------------------------------------------------------------- -// EXTRACTED: age calculation -// --------------------------------------------------------------- - - private void applyAge(RMNCHBeneficiaryDetailsRmnch dest, RMNCHMBeneficiarydetail detail) { - if (detail.getDob() == null) { - dest.setAgeFull(""); - dest.setAge(0); - return; - } - - Calendar cal = Calendar.getInstance(); - cal.setTime(detail.getDob()); - LocalDate birth = LocalDate.of( - cal.get(Calendar.YEAR), - cal.get(Calendar.MONTH) + 1, - cal.get(Calendar.DAY_OF_MONTH)); - - Period p = Period.between(birth, LocalDate.now()); - int y = p.getYears(), mo = p.getMonths(), d = p.getDays(); - - String ageFull; - int ageVal; - String ageUnit; - - if (y > 0) { - ageFull = y + " years - " + mo + " months"; - ageVal = y; - ageUnit = y > 1 ? "Years" : "Year"; - } else if (mo > 0) { - ageFull = mo + " months - " + d + " days"; - ageVal = mo; - ageUnit = mo > 1 ? "Months" : "Month"; - } else { - ageFull = d + " days"; - ageVal = d; - ageUnit = d > 1 ? "Days" : "Day"; + private Map getBenHealthDetails(BigInteger benRegId) { + Map healthDetails = new HashMap<>(); + if (null != benRegId) { + Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); + if (benHealthIdNumber != null && benHealthIdNumber.length > 0) { + Object[] healthData = (Object[]) benHealthIdNumber[0]; + String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; + String healthId = healthData[1] != null ? healthData[1].toString() : null; + + if (null != healthIdNumber) { + List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); + if (health != null && !health.isEmpty()) { + for (Object[] objects : health) { + healthDetails.put("HealthID", objects[0]); + healthDetails.put("HealthIdNumber", objects[1]); + healthDetails.put("isNewAbha", objects[2]); + } + } else { + healthDetails.put("HealthIdNumber", healthIdNumber); + healthDetails.put("HealthID", healthId); + healthDetails.put("isNewAbha", null); + } + } + } } - - dest.setAgeFull(ageFull); - dest.setAge(ageVal); - dest.setAge_unit(ageUnit); - } - -// --------------------------------------------------------------- -// UTILITY: replaces 50+ repetitive if-not-null setter blocks -// --------------------------------------------------------------- - - private void ifNotNull(T value, java.util.function.Consumer setter) { - if (value != null) setter.accept(value); + return healthDetails; } - private Map getBenHealthDetails(BigInteger benRegId) { - Map healthDetails = new HashMap<>(); - if (null != benRegId) { - Object[] benHealthIdNumber = beneficiaryRepo.getBenHealthIdNumber(benRegId); - if (benHealthIdNumber != null && benHealthIdNumber.length > 0) { - Object[] healthData = (Object[]) benHealthIdNumber[0]; - String healthIdNumber = healthData[0] != null ? healthData[0].toString() : null; - String healthId = healthData[1] != null ? healthData[1].toString() : null; - - if (null != healthIdNumber) { - List health = beneficiaryRepo.getBenHealthDetails(healthIdNumber); - if (health != null && !health.isEmpty()) { - for (Object[] objects : health) { - healthDetails.put("HealthID", objects[0]); - healthDetails.put("HealthIdNumber", objects[1]); - healthDetails.put("isNewAbha", objects[2]); - } - } else { - healthDetails.put("HealthIdNumber", healthIdNumber); - healthDetails.put("HealthID", healthId); - healthDetails.put("isNewAbha", null); - } - } - } - } - return healthDetails; - } - private Map getBenBenVisitDetails(BigInteger benRegId) { Map healthDetails = new HashMap<>(); if (null != benRegId) { @@ -435,7 +482,7 @@ private Map getBenBenVisitDetails(BigInteger benRegId) { return healthDetails; } - public void fetchHealthIdByBenRegID(Long benRegID, String authorization, Map resultMap) { + public void fetchHealthIdByBenRegID(Long benRegID, String authorization, Map resultMap) { Map requestMap = new HashMap(); requestMap.put("beneficiaryRegID", benRegID); requestMap.put("beneficiaryID", null); From aa412482fdef3f9f578f5bbc67120ae56ace41cc Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 24 Feb 2026 23:42:55 +0530 Subject: [PATCH 39/65] fix DeliveryOutcome data issue --- .../com/iemr/flw/controller/DeathReportsController.java | 6 ++---- .../com/iemr/flw/controller/MaternalHealthController.java | 8 ++++---- src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java | 2 +- src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java | 2 +- .../iemr/flw/service/impl/DeathReportsServiceImpl.java | 4 ++-- .../iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java | 2 +- 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/DeathReportsController.java b/src/main/java/com/iemr/flw/controller/DeathReportsController.java index f5317a8b..d8c3c745 100644 --- a/src/main/java/com/iemr/flw/controller/DeathReportsController.java +++ b/src/main/java/com/iemr/flw/controller/DeathReportsController.java @@ -84,8 +84,7 @@ public String getCdrRecords(@RequestBody GetBenRequestHandler requestDTO, logger.info("fetching All CDR Details for user: " + requestDTO.getAshaId()); if (requestDTO != null) { List result = deathReportsService.getCdrRecords(requestDTO); - Gson gson = new GsonBuilder() - .setDateFormat("MMM dd, yyyy h:mm:ss a") // Set the desired date format + Gson gson = new GsonBuilder()// Set the desired date format .create(); String s = gson.toJson(result); if (s != null) @@ -111,8 +110,7 @@ public String getMdsrRecords(@RequestBody GetBenRequestHandler requestDTO, logger.info("fetching All MDSR Details for user: " + requestDTO.getAshaId()); if (requestDTO != null) { List result = deathReportsService.getMdsrRecords(requestDTO); - Gson gson = new GsonBuilder() - .setDateFormat("MMM dd, yyyy h:mm:ss a") // Set the desired date format + Gson gson = new GsonBuilder()// Set the desired date format .create(); String s = gson.toJson(result); if (s != null) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index e65eacda..02a28b94 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -239,11 +239,11 @@ public String getDeliveryOutcome(@RequestBody GetBenRequestHandler requestDTO, logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " + requestDTO); List result = deliveryOutcomeService.getDeliveryOutcome(requestDTO); - Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); + Gson gson = new GsonBuilder().create(); String s = gson.toJson(result); - if (s != null) - response.setResponse(s); - else + if (result != null && !result.isEmpty()) { + response.setResponse(gson.toJson(result)); + }else response.setError(5000, "No record found"); } else response.setError(5000, "Invalid/NULL request obj"); diff --git a/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java b/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java index d5e0e711..f6ccf7fb 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java @@ -14,7 +14,7 @@ public interface CdrRepo extends JpaRepository { CDR findCDRByBenId(Long benId); - @Query(" SELECT c FROM CDR c WHERE c.createdBy = :userId and c.createdDate >= :fromDate and c.createdDate <= :toDate") + @Query(" SELECT c FROM CDR c WHERE c.createdBy = :userId") List getAllCdrByBenId(@Param("userId") String userId, @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); } diff --git a/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java b/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java index 532a62c9..687b1864 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java @@ -14,7 +14,7 @@ public interface MdsrRepo extends JpaRepository { MDSR findMDSRByBenId(Long benId); - @Query(" SELECT m FROM MDSR m WHERE m.createdBy = :userId and m.createdDate >= :fromDate and m.createdDate <= :toDate") + @Query(" SELECT m FROM MDSR m WHERE m.createdBy = :userId") List getAllMdsrByAshaId(@Param("userId") String userId, @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); } diff --git a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java index 82cee5d0..344ed422 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java @@ -104,7 +104,7 @@ public String registerMDSR(List mdsrDTOs) { @Override public List getCdrRecords(GetBenRequestHandler dto) { try{ - String user = beneficiaryRepo.getUserName(dto.getAshaId()); + String user = userRepo.getUserNamedByUserId(dto.getAshaId()); List cdrlist = cdrRepo.getAllCdrByBenId(user, dto.getFromDate(), dto.getToDate()); return cdrlist.stream() @@ -120,7 +120,7 @@ public List getCdrRecords(GetBenRequestHandler dto) { public List getMdsrRecords(GetBenRequestHandler dto) { try { - String user = beneficiaryRepo.getUserName(dto.getAshaId()); + String user = userRepo.getUserNamedByUserId(dto.getAshaId()); List mdsrList = mdsrRepo.getAllMdsrByAshaId(user, dto.getFromDate(), dto.getToDate()); diff --git a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java index 63f86c9a..737182f7 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -108,7 +108,7 @@ public String registerDeliveryOutcome(List deliveryOutcomeDT @Override public List getDeliveryOutcome(GetBenRequestHandler dto) { try { - String user = beneficiaryRepo.getUserName(dto.getAshaId()); + String user = userRepo.getUserNamedByUserId(dto.getAshaId()); List deliveryOutcomeList = deliveryOutcomeRepo.findByCreatedBy(user); return deliveryOutcomeList.stream() .map(deliveryOutcome -> mapper.convertValue(deliveryOutcome, DeliveryOutcomeDTO.class)) From 9518f5e9243314eda71d9940d8cdc6a92dfabb5a Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 24 Feb 2026 23:45:08 +0530 Subject: [PATCH 40/65] fix DeliveryOutcome data issue --- src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java | 2 ++ src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java | 2 ++ .../com/iemr/flw/service/impl/DeathReportsServiceImpl.java | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java b/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java index f6ccf7fb..873eb0c1 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java @@ -14,6 +14,8 @@ public interface CdrRepo extends JpaRepository { CDR findCDRByBenId(Long benId); + ListfindByCreatedBy(String userName); + @Query(" SELECT c FROM CDR c WHERE c.createdBy = :userId") List getAllCdrByBenId(@Param("userId") String userId, @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); diff --git a/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java b/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java index 687b1864..57a43883 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java @@ -14,6 +14,8 @@ public interface MdsrRepo extends JpaRepository { MDSR findMDSRByBenId(Long benId); + List findByCreatedBy(String userName); + @Query(" SELECT m FROM MDSR m WHERE m.createdBy = :userId") List getAllMdsrByAshaId(@Param("userId") String userId, @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); diff --git a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java index 344ed422..1feabe77 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java @@ -106,7 +106,7 @@ public List getCdrRecords(GetBenRequestHandler dto) { try{ String user = userRepo.getUserNamedByUserId(dto.getAshaId()); List cdrlist = - cdrRepo.getAllCdrByBenId(user, dto.getFromDate(), dto.getToDate()); + cdrRepo.findByCreatedBy(user); return cdrlist.stream() .map(cdr -> mapper.convertValue(cdr, CdrDTO.class)) .collect(Collectors.toList()); @@ -123,7 +123,7 @@ public List getMdsrRecords(GetBenRequestHandler dto) { String user = userRepo.getUserNamedByUserId(dto.getAshaId()); List mdsrList = - mdsrRepo.getAllMdsrByAshaId(user, dto.getFromDate(), dto.getToDate()); + mdsrRepo.findByCreatedBy(user); return mdsrList.stream() .map(mdsr -> mapper.convertValue(mdsr, MdsrDTO.class)) .collect(Collectors.toList()); From af33afe4c10fff2fa6f70f656bc913df2c00d3e9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 24 Feb 2026 23:49:01 +0530 Subject: [PATCH 41/65] fix DeliveryOutcome data issue --- src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java b/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java index 873eb0c1..069362e8 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/CdrRepo.java @@ -15,8 +15,4 @@ public interface CdrRepo extends JpaRepository { CDR findCDRByBenId(Long benId); ListfindByCreatedBy(String userName); - - @Query(" SELECT c FROM CDR c WHERE c.createdBy = :userId") - List getAllCdrByBenId(@Param("userId") String userId, - @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); } From a7831ef35b082e7cf534e30c4fbd88ee94ae0eec Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 24 Feb 2026 23:50:17 +0530 Subject: [PATCH 42/65] fix DeliveryOutcome data issue --- src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java b/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java index 57a43883..127954c6 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/MdsrRepo.java @@ -16,7 +16,4 @@ public interface MdsrRepo extends JpaRepository { List findByCreatedBy(String userName); - @Query(" SELECT m FROM MDSR m WHERE m.createdBy = :userId") - List getAllMdsrByAshaId(@Param("userId") String userId, - @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); } From 12837a8f52dab58304a63f5bfc0be6ed9ec2213a Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 11:39:39 +0530 Subject: [PATCH 43/65] fix DeliveryOutcome data issue --- .../com/iemr/flw/repo/identity/BeneficiaryRepo.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java b/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java index 96301fb3..94b1cd0e 100644 --- a/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java +++ b/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java @@ -28,10 +28,15 @@ public interface BeneficiaryRepo extends JpaRepository getBenDataWithinDates(@Param("userName") String userName, - @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate, Pageable pageable); + + @Query("SELECT t FROM RMNCHMBeneficiaryaddress t " + + "WHERE t.createdDate BETWEEN :fromDate AND :toDate " + + "AND t.createdBy = :userName") + Page getBenDataWithinDates( + @Param("userName") String userName, + @Param("fromDate") Timestamp fromDate, + @Param("toDate") Timestamp toDate, + Pageable pageable); @Query(value = " SELECT t FROM RMNCHMBeneficiaryaddress t WHERE t.createdBy = :userName ") Page getBenDataByUser(@Param("userName") String userName, Pageable pageable); From a870b3cb4e5089743de7c1ddb12b7a98caaa2cac Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 12:22:27 +0530 Subject: [PATCH 44/65] optimize ben address query --- .../flw/repo/identity/BeneficiaryRepo.java | 1 + .../service/impl/BeneficiaryServiceImpl.java | 87 +++++++++++-------- 2 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java b/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java index 94b1cd0e..3af9cd6b 100644 --- a/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java +++ b/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java @@ -13,6 +13,7 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.Optional; +import java.util.stream.Stream; @Repository public interface BeneficiaryRepo extends JpaRepository { diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index dbbe40e7..8a60e271 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import java.util.stream.Stream; import com.iemr.flw.domain.iemr.EyeCheckupVisit; import com.iemr.flw.domain.iemr.IncentiveActivity; @@ -54,6 +55,7 @@ import com.iemr.flw.service.BeneficiaryService; import com.iemr.flw.utils.config.ConfigProperties; import com.iemr.flw.utils.http.HttpUtils; +import org.springframework.transaction.annotation.Transactional; @Service @Qualifier("rmnchServiceImpl") @@ -98,48 +100,59 @@ public class BeneficiaryServiceImpl implements BeneficiaryService { @Override public String getBenData(GetBenRequestHandler request, String authorisation) throws Exception { - String outputResponse = null; - int totalPage = 0; - try { - if (request != null && request.getAshaId() != null) { - List resultSet; - Integer pageSize = Integer.valueOf(door_to_door_page_size); - if (request.getPageNo() != null) { - String userName = beneficiaryRepo.getUserName(request.getAshaId()); - if (userName == null || userName.isEmpty()) - throw new Exception("Asha details not found, please contact administrator"); - - request.setUserName(userName); - - PageRequest pr = PageRequest.of(request.getPageNo(), pageSize); - if (request.getFromDate() != null && request.getToDate() != null) { - Page p = beneficiaryRepo.getBenDataWithinDates( - request.getUserName(), request.getFromDate(), request.getToDate(), pr); - resultSet = p.getContent(); - totalPage = p.getTotalPages(); - } else { - Page p = beneficiaryRepo.getBenDataByUser(request.getUserName(), - pr); - resultSet = p.getContent(); - totalPage = p.getTotalPages(); - } - if (resultSet != null && resultSet.size() > 0) { - outputResponse = getMappingsForAddressIDs(resultSet, totalPage, authorisation); - } - } else { - // page no not invalid - throw new Exception("Invalid page no"); - } - } else - throw new Exception("Invalid/missing village details"); - } catch (Exception e) { - throw new Exception(e.getMessage()); + if (request == null || request.getAshaId() == null) { + throw new Exception("Invalid/missing asha details"); } - return outputResponse; + if (request.getPageNo() == null || request.getPageNo() < 0) { + throw new Exception("Invalid page number"); + } + + String userName = beneficiaryRepo.getUserName(request.getAshaId()); + + if (userName == null || userName.isEmpty()) { + throw new Exception("Asha details not found, please contact administrator"); + } + + request.setUserName(userName); + + int pageSize = Integer.parseInt(door_to_door_page_size); + PageRequest pageRequest = PageRequest.of(request.getPageNo(), pageSize); + + Page pageResult; + + // ✅ Date Filter Handling + if (request.getFromDate() != null && request.getToDate() != null) { + + if (request.getFromDate().after(request.getToDate())) { + throw new Exception("Invalid date range"); + } + + pageResult = beneficiaryRepo.getBenDataWithinDates( + userName, + request.getFromDate(), + request.getToDate(), + pageRequest + ); + + } else { + + pageResult = beneficiaryRepo.getBenDataByUser(userName, pageRequest); + } + + if (!pageResult.hasContent()) { + return null; + } + + return getMappingsForAddressIDs( + pageResult.getContent(), + pageResult.getTotalPages(), + authorisation + ); } + private String getMappingsForAddressIDs(List addressList, int totalPage, String authorisation) { RMNCHHouseHoldDetails benHouseHoldRMNCH_ROBJ; From 63a8d25151865e55a19ed11f5c06b67f42fe319c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 12:30:44 +0530 Subject: [PATCH 45/65] optimize ben address query --- .../com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java index 737182f7..6d360b46 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -110,11 +110,12 @@ public List getDeliveryOutcome(GetBenRequestHandler dto) { try { String user = userRepo.getUserNamedByUserId(dto.getAshaId()); List deliveryOutcomeList = deliveryOutcomeRepo.findByCreatedBy(user); + logger.info("DeliveryOutcome Response{}",deliveryOutcomeList); return deliveryOutcomeList.stream() .map(deliveryOutcome -> mapper.convertValue(deliveryOutcome, DeliveryOutcomeDTO.class)) .collect(Collectors.toList()); } catch (Exception e) { - logger.error(e.getMessage()); + logger.error("DeliveryOutcome Exception:",e.getMessage()); } return null; } From 564b1dcf5d22e123740c9019a23567fac5ddef8d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 15:27:48 +0530 Subject: [PATCH 46/65] optimize ben address query --- .../java/com/iemr/flw/controller/MaternalHealthController.java | 2 +- src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java | 2 -- src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java | 1 + .../com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index 02a28b94..5f664991 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -26,7 +26,7 @@ import java.util.List; @RestController -@RequestMapping(value = "/maternalCare", headers = "Authorization", consumes = "application/json", produces = "application/json") +@RequestMapping(value = "/maternalCare", consumes = "application/json", produces = "application/json") public class MaternalHealthController { private final Logger logger = LoggerFactory.getLogger(CoupleController.class); diff --git a/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java b/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java index 6050fab5..d3a1b56c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java @@ -17,7 +17,6 @@ public class DeliveryOutcome { @Column(name = "ben_id") private Long benId; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy, h:mm:ss a") @Column(name = "delivery_date") private Timestamp dateOfDelivery; @@ -54,7 +53,6 @@ public class DeliveryOutcome { @Column(name = "still_birth") private Integer stillBirth; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy, h:mm:ss a") @Column(name = "discharge_date") private Timestamp dateOfDischarge; diff --git a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java index 941721ca..539bffb2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java @@ -23,6 +23,7 @@ public class DeliveryOutcomeDTO { private Integer deliveryOutcome; private Integer liveBirth; private Integer stillBirth; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy, h:mm:ss a") private Timestamp dateOfDischarge; private String timeOfDischarge; private Boolean isJSYBenificiary; diff --git a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java index 6d360b46..8c87202a 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -115,7 +115,7 @@ public List getDeliveryOutcome(GetBenRequestHandler dto) { .map(deliveryOutcome -> mapper.convertValue(deliveryOutcome, DeliveryOutcomeDTO.class)) .collect(Collectors.toList()); } catch (Exception e) { - logger.error("DeliveryOutcome Exception:",e.getMessage()); + logger.error("DeliveryOutcome Exception:"+e.getMessage()); } return null; } From 00aa3e7f84b711d6f3ddb8d4f75bc801af80abb0 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 15:48:36 +0530 Subject: [PATCH 47/65] optimize ben address query --- src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java index 539bffb2..85fc4590 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java @@ -23,7 +23,7 @@ public class DeliveryOutcomeDTO { private Integer deliveryOutcome; private Integer liveBirth; private Integer stillBirth; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy, h:mm:ss a") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy h:mm:ss a") private Timestamp dateOfDischarge; private String timeOfDischarge; private Boolean isJSYBenificiary; From de32d2b089417aa3b85f6e9afe61479d1b9d0e02 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 16:16:04 +0530 Subject: [PATCH 48/65] optimize ben address query --- .../com/iemr/flw/controller/DeathReportsController.java | 2 ++ .../com/iemr/flw/controller/MaternalHealthController.java | 2 +- src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java | 1 + .../java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java | 6 ++++-- src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java | 6 ++++++ .../com/iemr/flw/service/impl/DeathReportsServiceImpl.java | 7 +++++++ 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/DeathReportsController.java b/src/main/java/com/iemr/flw/controller/DeathReportsController.java index d8c3c745..0839ec1f 100644 --- a/src/main/java/com/iemr/flw/controller/DeathReportsController.java +++ b/src/main/java/com/iemr/flw/controller/DeathReportsController.java @@ -85,6 +85,7 @@ public String getCdrRecords(@RequestBody GetBenRequestHandler requestDTO, if (requestDTO != null) { List result = deathReportsService.getCdrRecords(requestDTO); Gson gson = new GsonBuilder()// Set the desired date format + .setDateFormat("MMM d yyyy h:mm:ss a") .create(); String s = gson.toJson(result); if (s != null) @@ -111,6 +112,7 @@ public String getMdsrRecords(@RequestBody GetBenRequestHandler requestDTO, if (requestDTO != null) { List result = deathReportsService.getMdsrRecords(requestDTO); Gson gson = new GsonBuilder()// Set the desired date format + .setDateFormat("MMM d yyyy h:mm:ss a") .create(); String s = gson.toJson(result); if (s != null) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index 5f664991..e87a6374 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -239,7 +239,7 @@ public String getDeliveryOutcome(@RequestBody GetBenRequestHandler requestDTO, logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " + requestDTO); List result = deliveryOutcomeService.getDeliveryOutcome(requestDTO); - Gson gson = new GsonBuilder().create(); + Gson gson = new GsonBuilder().setDateFormat("MMM d yyyy h:mm:ss a").create(); String s = gson.toJson(result); if (result != null && !result.isEmpty()) { response.setResponse(gson.toJson(result)); diff --git a/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java b/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java index 122f652d..18b5ca52 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java @@ -54,6 +54,7 @@ public class CdrDTO { private String deathCertImage1; private String deathCertImage2; + private String cdrImage; private Timestamp updatedDate; diff --git a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java index 85fc4590..cc4f4fe1 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java @@ -10,7 +10,7 @@ public class DeliveryOutcomeDTO { private Long id; private Long benId; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp dateOfDelivery; private String timeOfDelivery; private String placeOfDelivery; @@ -23,13 +23,15 @@ public class DeliveryOutcomeDTO { private Integer deliveryOutcome; private Integer liveBirth; private Integer stillBirth; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy h:mm:ss a") + @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp dateOfDischarge; private String timeOfDischarge; private Boolean isJSYBenificiary; private Boolean isActive; + @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp createdDate; private String createdBy; + @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp updatedDate; private String updatedBy; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java index 5b07e40a..e59047ab 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java @@ -35,4 +35,10 @@ public class MdsrDTO { private Timestamp updatedDate; private String updatedBy; + + private String mdsr1File; + + private String mdsr2File; + + private String mdsrDeathCertFile; } diff --git a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java index 1feabe77..43a6fa71 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java @@ -11,6 +11,8 @@ import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.DeathReportsService; import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -43,6 +45,7 @@ public class DeathReportsServiceImpl implements DeathReportsService { @Autowired private IncentiveRecordRepo recordRepo; + private final Logger logger = LoggerFactory.getLogger(DeathReportsServiceImpl.class); @Override public String registerCDR(List cdrDTOs) { @@ -111,6 +114,8 @@ public List getCdrRecords(GetBenRequestHandler dto) { .map(cdr -> mapper.convertValue(cdr, CdrDTO.class)) .collect(Collectors.toList()); } catch (Exception e) { + logger.error("MDSR Exception:"+e.getMessage()); + // log } return null; @@ -128,6 +133,8 @@ public List getMdsrRecords(GetBenRequestHandler dto) { .map(mdsr -> mapper.convertValue(mdsr, MdsrDTO.class)) .collect(Collectors.toList()); } catch (Exception e) { + logger.error("MDSR Exception:"+e.getMessage()); + // log } return null; From f41000045bd076f46f18c15341762d25930aaa81 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 16:35:28 +0530 Subject: [PATCH 49/65] optimize ben address query --- .../java/com/iemr/flw/controller/DeathReportsController.java | 4 ++-- .../com/iemr/flw/controller/MaternalHealthController.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/DeathReportsController.java b/src/main/java/com/iemr/flw/controller/DeathReportsController.java index 0839ec1f..e8b50de9 100644 --- a/src/main/java/com/iemr/flw/controller/DeathReportsController.java +++ b/src/main/java/com/iemr/flw/controller/DeathReportsController.java @@ -85,7 +85,7 @@ public String getCdrRecords(@RequestBody GetBenRequestHandler requestDTO, if (requestDTO != null) { List result = deathReportsService.getCdrRecords(requestDTO); Gson gson = new GsonBuilder()// Set the desired date format - .setDateFormat("MMM d yyyy h:mm:ss a") + .setDateFormat("MMM dd, yyyy h:mm:ss a") .create(); String s = gson.toJson(result); if (s != null) @@ -112,7 +112,7 @@ public String getMdsrRecords(@RequestBody GetBenRequestHandler requestDTO, if (requestDTO != null) { List result = deathReportsService.getMdsrRecords(requestDTO); Gson gson = new GsonBuilder()// Set the desired date format - .setDateFormat("MMM d yyyy h:mm:ss a") + .setDateFormat("MMM dd, yyyy h:mm:ss a") .create(); String s = gson.toJson(result); if (s != null) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index e87a6374..f0955af6 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -239,7 +239,7 @@ public String getDeliveryOutcome(@RequestBody GetBenRequestHandler requestDTO, logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " + requestDTO); List result = deliveryOutcomeService.getDeliveryOutcome(requestDTO); - Gson gson = new GsonBuilder().setDateFormat("MMM d yyyy h:mm:ss a").create(); + Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); String s = gson.toJson(result); if (result != null && !result.isEmpty()) { response.setResponse(gson.toJson(result)); From b0f74e9a0864efa962b2abe154344f945b8de2c8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 17:35:34 +0530 Subject: [PATCH 50/65] optimize ben address query --- .../com/iemr/flw/dto/iemr/TBScreeningDTO.java | 93 +------------------ .../impl/DiseaseControlServiceImpl.java | 8 +- .../service/impl/TBScreeningServiceImpl.java | 25 +++-- 3 files changed, 20 insertions(+), 106 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java index 017d73af..36f48dfc 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -37,98 +37,7 @@ public class TBScreeningDTO { private Boolean bmi; private Boolean contactWithTBPatient; private Boolean historyOfTBInLastFiveYrs; - private String sympotomatic; + private String sympotomatic; private String asymptomatic; private String recommandateTest; - - - - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getBenId() { - return benId; - } - - public void setBenId(Long benId) { - this.benId = benId; - } - - public Timestamp getVisitDate() { - return visitDate; - } - - public void setVisitDate(Timestamp visitDate) { - this.visitDate = visitDate; - } - - public Boolean getCoughMoreThan2Weeks() { - return coughMoreThan2Weeks; - } - - public void setCoughMoreThan2Weeks(Boolean coughMoreThan2Weeks) { - this.coughMoreThan2Weeks = coughMoreThan2Weeks; - } - - public Boolean getBloodInSputum() { - return bloodInSputum; - } - - public void setBloodInSputum(Boolean bloodInSputum) { - this.bloodInSputum = bloodInSputum; - } - - public Boolean getFeverMoreThan2Weeks() { - return feverMoreThan2Weeks; - } - - public void setFeverMoreThan2Weeks(Boolean feverMoreThan2Weeks) { - this.feverMoreThan2Weeks = feverMoreThan2Weeks; - } - - public Boolean getLossOfWeight() { - return lossOfWeight; - } - - public void setLossOfWeight(Boolean lossOfWeight) { - this.lossOfWeight = lossOfWeight; - } - - public Boolean getNightSweats() { - return nightSweats; - } - - public void setNightSweats(Boolean nightSweats) { - this.nightSweats = nightSweats; - } - - public Boolean getHistoryOfTb() { - return historyOfTb; - } - - public void setHistoryOfTb(Boolean historyOfTb) { - this.historyOfTb = historyOfTb; - } - - public Boolean getTakingAntiTBDrugs() { - return takingAntiTBDrugs; - } - - public void setTakingAntiTBDrugs(Boolean takingAntiTBDrugs) { - this.takingAntiTBDrugs = takingAntiTBDrugs; - } - - public Boolean getFamilySufferingFromTB() { - return familySufferingFromTB; - } - - public void setFamilySufferingFromTB(Boolean familySufferingFromTB) { - this.familySufferingFromTB = familySufferingFromTB; - } } diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index 88932659..3a2e9e5b 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -463,7 +463,7 @@ public Object getAllMalaria(GetDiseaseRequestHandler getDiseaseRequestHandler) { // Check if the list is empty if (filteredList.isEmpty()) { - return Collections.singletonMap("message", "No data found for Malaria."); + return filteredList; } // Map to DTOs @@ -551,7 +551,7 @@ public Object getAllKalaAzar(GetDiseaseRequestHandler getDiseaseRequestHandler) // Check if the list is empty if (filteredList.isEmpty()) { - return Collections.singletonMap("message", "No data found for Kala Azar."); + return filteredList; } // Map to DTOs @@ -590,7 +590,7 @@ public Object getAllKalaAzar(GetDiseaseRequestHandler getDiseaseRequestHandler) public Object getAllKalaAES(GetDiseaseRequestHandler getDiseaseRequestHandler) { if (diseaseAESJERepository.findAll().isEmpty()) { - return Collections.singletonMap("message", "No data found for AES."); + return diseaseAESJERepository.findAll(); } return diseaseAESJERepository.findAll().stream().filter(diseaseAesje -> Objects.equals(diseaseAesje.getUserId(), getDiseaseRequestHandler.getUserId())).collect(Collectors.toList()); @@ -641,7 +641,7 @@ public Object getAllLeprosy(GetDiseaseRequestHandler getDiseaseRequestHandler) { // Check if the list is empty if (filteredList.isEmpty()) { - return Collections.singletonMap("message", "No data found for Leprosy."); + return filteredList; } // Map to DTOs diff --git a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java index b6210169..df70cd75 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java @@ -55,16 +55,21 @@ public String save(TBScreeningRequestDTO requestDTO) throws Exception { @Override public String getByUserId(GetBenRequestHandler request) { - List dtos = new ArrayList<>(); - List tbScreeningList = tbScreeningRepo.getByUserId(request.getAshaId(), request.getFromDate(), request.getToDate()); - tbScreeningList.forEach(tbScreening -> dtos.add(modelMapper.map(tbScreening, TBScreeningDTO.class))); - TBScreeningRequestDTO tbScreeningRequestDTO = new TBScreeningRequestDTO(); - tbScreeningRequestDTO.setTbScreeningList(dtos); - tbScreeningRequestDTO.setUserId(request.getAshaId()); - Gson gson = new GsonBuilder() - .setDateFormat("MMM dd, yyyy h:mm:ss a") // Set the desired date format - .create(); - return gson.toJson(tbScreeningRequestDTO); + try { + List dtos = new ArrayList<>(); + List tbScreeningList = tbScreeningRepo.getByUserId(request.getAshaId(), request.getFromDate(), request.getToDate()); + tbScreeningList.forEach(tbScreening -> dtos.add(modelMapper.map(tbScreening, TBScreeningDTO.class))); + TBScreeningRequestDTO tbScreeningRequestDTO = new TBScreeningRequestDTO(); + tbScreeningRequestDTO.setTbScreeningList(dtos); + tbScreeningRequestDTO.setUserId(request.getAshaId()); + Gson gson = new GsonBuilder() + .setDateFormat("MMM dd, yyyy h:mm:ss a") // Set the desired date format + .create(); + return gson.toJson(tbScreeningRequestDTO); + }catch (Exception e){ + logger.error("TBScreening Exception:"+e.getMessage()); + } + return null; } } From cd595185c35bf4c27c097e01cc7b84fff2bdc92b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 17:45:24 +0530 Subject: [PATCH 51/65] optimize ben address query --- src/main/java/com/iemr/flw/repo/iemr/TBScreeningRepo.java | 4 ++-- .../com/iemr/flw/service/impl/TBScreeningServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/TBScreeningRepo.java b/src/main/java/com/iemr/flw/repo/iemr/TBScreeningRepo.java index e2f7fed0..61be2a57 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/TBScreeningRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/TBScreeningRepo.java @@ -15,6 +15,6 @@ public interface TBScreeningRepo extends JpaRepository { @Query(value = "SELECT tbs FROM TBScreening tbs WHERE tbs.benId = :benId and tbs.userId = :userId") TBScreening getByUserIdAndBenId(@Param("benId") Long benId, @Param("userId") Integer userId); - @Query(value = "SELECT tbs FROM TBScreening tbs WHERE tbs.userId = :userId and tbs.visitDate >= :fromDate and tbs.visitDate <= :toDate") - List getByUserId(@Param("userId") Integer userId, @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); + @Query(value = "SELECT tbs FROM TBScreening tbs WHERE tbs.userId = :userId") + List getByUserId(@Param("userId") Integer userId); } diff --git a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java index df70cd75..a6c217b8 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java @@ -57,7 +57,7 @@ public String save(TBScreeningRequestDTO requestDTO) throws Exception { public String getByUserId(GetBenRequestHandler request) { try { List dtos = new ArrayList<>(); - List tbScreeningList = tbScreeningRepo.getByUserId(request.getAshaId(), request.getFromDate(), request.getToDate()); + List tbScreeningList = tbScreeningRepo.getByUserId(request.getAshaId()); tbScreeningList.forEach(tbScreening -> dtos.add(modelMapper.map(tbScreening, TBScreeningDTO.class))); TBScreeningRequestDTO tbScreeningRequestDTO = new TBScreeningRequestDTO(); tbScreeningRequestDTO.setTbScreeningList(dtos); From fa117105418c3ddfa50a5bcbbbaf1cb4442a811c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 17:49:57 +0530 Subject: [PATCH 52/65] optimize ben address query --- src/main/java/com/iemr/flw/repo/iemr/PNCVisitRepo.java | 5 ++--- .../com/iemr/flw/service/impl/MaternalHealthServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/PNCVisitRepo.java b/src/main/java/com/iemr/flw/repo/iemr/PNCVisitRepo.java index 063a0795..28675daa 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/PNCVisitRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/PNCVisitRepo.java @@ -12,9 +12,8 @@ @Repository public interface PNCVisitRepo extends JpaRepository { - @Query(value = "SELECT pnc FROM PNCVisit pnc WHERE pnc.createdBy = :userId and pnc.isActive = true and pnc.createdDate >= :fromDate and pnc.createdDate <= :toDate") - List getPNCForPW(@Param("userId") String userId, - @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); + @Query(value = "SELECT pnc FROM PNCVisit pnc WHERE pnc.createdBy = :userId and pnc.isActive = true") + List getPNCForPW(@Param("userId") String userId); PNCVisit findPNCVisitByBenIdAndPncPeriodAndIsActive(Long benId, Integer pncVisit, Boolean isActive); } diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 52ff5e1d..08bb264a 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -309,7 +309,7 @@ record = new IncentiveActivityRecord(); public List getPNCVisits(GetBenRequestHandler dto) { try { String user = beneficiaryRepo.getUserName(dto.getAshaId()); - List pncVisits = pncVisitRepo.getPNCForPW(user, dto.getFromDate(), dto.getToDate()); + List pncVisits = pncVisitRepo.getPNCForPW(user); return pncVisits.stream() .map(pnc -> mapper.convertValue(pnc, PNCVisitDTO.class)) .collect(Collectors.toList()); From 896dae7d7de96c636297bee7ffe4a6fe19913230 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 17:53:02 +0530 Subject: [PATCH 53/65] optimize ben address query --- .../com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java index 8c87202a..3ccd9973 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -109,7 +109,7 @@ public String registerDeliveryOutcome(List deliveryOutcomeDT public List getDeliveryOutcome(GetBenRequestHandler dto) { try { String user = userRepo.getUserNamedByUserId(dto.getAshaId()); - List deliveryOutcomeList = deliveryOutcomeRepo.findByCreatedBy(user); + List deliveryOutcomeList = deliveryOutcomeRepo.getDeliveryOutcomeByAshaId(user,dto.getFromDate(),dto.getToDate()); logger.info("DeliveryOutcome Response{}",deliveryOutcomeList); return deliveryOutcomeList.stream() .map(deliveryOutcome -> mapper.convertValue(deliveryOutcome, DeliveryOutcomeDTO.class)) From 44374882f7b935540f6b2a3c9006b69d3b063166 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 23:52:47 +0530 Subject: [PATCH 54/65] optimize ben address query --- .../iemr/flw/service/UwinSessionService.java | 2 + .../service/impl/IncentiveServiceImpl.java | 16 +++++++ .../UpdateIncentivePendindDocService.java | 48 +++++++++++++++++++ .../service/impl/UwinSessionServiceImpl.java | 45 +++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 src/main/java/com/iemr/flw/service/impl/UpdateIncentivePendindDocService.java diff --git a/src/main/java/com/iemr/flw/service/UwinSessionService.java b/src/main/java/com/iemr/flw/service/UwinSessionService.java index 3f6ddf0a..ce4185c3 100644 --- a/src/main/java/com/iemr/flw/service/UwinSessionService.java +++ b/src/main/java/com/iemr/flw/service/UwinSessionService.java @@ -1,5 +1,6 @@ package com.iemr.flw.service; +import com.iemr.flw.domain.iemr.UwinSession; import com.iemr.flw.dto.iemr.UwinSessionRequestDTO; import com.iemr.flw.dto.iemr.UwinSessionResponseDTO; @@ -7,5 +8,6 @@ public interface UwinSessionService { UwinSessionResponseDTO saveSession(UwinSessionRequestDTO req) throws Exception; + UwinSession updateSession(UwinSessionRequestDTO req, Long recordId,Long activityId) throws Exception; List getSessionsByAsha(Integer ashaId) throws Exception; } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 8ee38dc2..25e5f28f 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -13,6 +13,7 @@ import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.IncentiveService; import com.iemr.flw.service.MaaMeetingService; +import com.iemr.flw.service.UwinSessionService; import com.iemr.flw.utils.JwtUtil; import org.modelmapper.ModelMapper; import org.slf4j.Logger; @@ -60,6 +61,9 @@ public class IncentiveServiceImpl implements IncentiveService { @Autowired private ChildCareServiceImpl childCareService; + @Autowired + private UwinSessionService uwinSessionService; + @Override public String saveIncentivesMaster(List activityDTOS) { try { @@ -268,6 +272,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { return "Incentive update successfully"; } } + }else { if (incentiveName.name().equals(IncentiveName.MAA_QUARTERLY_MEETING.name())) { @@ -293,6 +298,17 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { return "Incentive update successfully"; } } + if(incentiveName.name().equals(IncentiveName.CHILD_MOBILIZATION_SESSIONS.name())){ + UwinSessionRequestDTO uwinSessionRequestDTO = new UwinSessionRequestDTO(); + uwinSessionRequestDTO.setAttachments(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); + UwinSession uwinSession = uwinSessionService.updateSession(uwinSessionRequestDTO,existingActivity.getRecordId(),pendingActivityDTO.getId()); + if(uwinSession!=null){ + return "Incentive update successfully"; + + } + + + } } diff --git a/src/main/java/com/iemr/flw/service/impl/UpdateIncentivePendindDocService.java b/src/main/java/com/iemr/flw/service/impl/UpdateIncentivePendindDocService.java new file mode 100644 index 00000000..bfda259f --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/UpdateIncentivePendindDocService.java @@ -0,0 +1,48 @@ +package com.iemr.flw.service.impl; + +import com.iemr.flw.domain.iemr.IncentiveActivityRecord; +import com.iemr.flw.domain.iemr.IncentivePendingActivity; +import com.iemr.flw.repo.iemr.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class UpdateIncentivePendindDocService { + @Autowired + private IncentivesRepo incentivesRepo; + + @Autowired + private UserServiceRoleRepo userRepo; + + @Autowired + private IncentiveRecordRepo recordRepo; + + @Autowired + private IncentivePendingActivityRepository incentivePendingActivityRepository; + + public void updateIncentive(Long id) { + + Optional optionalRecord = recordRepo.findById(id); + + if (optionalRecord.isPresent()) { + IncentiveActivityRecord record = optionalRecord.get(); + record.setIsEligible(true); + recordRepo.save(record); + } + } + + public void updatePendingActivity(Integer userId, Long recordId, Long activityId, Long mIncentiveId) { + IncentivePendingActivity incentivePendingActivity = new IncentivePendingActivity(); + incentivePendingActivity.setActivityId(activityId); + incentivePendingActivity.setRecordId(recordId); + incentivePendingActivity.setUserId(userId); + incentivePendingActivity.setMincentiveId(mIncentiveId); + if (incentivePendingActivity != null) { + incentivePendingActivityRepository.save(incentivePendingActivity); + } + + } + +} diff --git a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java index bb2a944c..d1a9792a 100644 --- a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java @@ -40,6 +40,9 @@ public class UwinSessionServiceImpl implements UwinSessionService { @Autowired private IncentiveRecordRepo recordRepo; + @Autowired + private UpdateIncentivePendindDocService updateIncentivePendindDocService; + @Override public UwinSessionResponseDTO saveSession(UwinSessionRequestDTO req) throws Exception { @@ -104,6 +107,36 @@ public UwinSessionResponseDTO saveSession(UwinSessionRequestDTO req) throws Exce return dto; } + @Override + public UwinSession updateSession(UwinSessionRequestDTO req,Long recordId,Long activityId) throws Exception { + Optional optionalUwinSession = repo.findById(recordId); + if(optionalUwinSession.isPresent()){ + UwinSession session = new UwinSession(); + if (req.getAttachments() != null && req.getAttachments().length > 0) { + List base64Images = Arrays.stream(req.getAttachments()) + .filter(file -> !file.isEmpty()) + .map(file -> { + try { + return Base64.getEncoder().encodeToString(file.getBytes()); + } catch (IOException e) { + throw new RuntimeException("Error converting image to Base64", e); + } + }) + .collect(Collectors.toList()); + + String imagesJson = objectMapper.writeValueAsString(base64Images); + session.setAttachmentsJson(imagesJson); + } + + repo.save(session); + if(session.getAttachmentsJson()!=null){ + updateIncentivePendindDocService.updateIncentive(activityId); + } + } + + + return optionalUwinSession.get(); + } @Override public List getSessionsByAsha(Integer ashaId) throws Exception { @@ -146,6 +179,12 @@ record = new IncentiveActivityRecord(); record.setUpdatedBy(session.getCreatedBy()); record.setBenId(0L); record.setAshaId(session.getAshaId()); + if(session.getAttachmentsJson()!=null){ + record.setIsEligible(true); + }else { + record.setIsEligible(false); + updateIncentivePendindDocService.updatePendingActivity(session.getAshaId(),session.getId(),record.getId(),incentiveActivityAM.getId()); + } record.setAmount(Long.valueOf(incentiveActivityAM.getRate())); recordRepo.save(record); } @@ -166,6 +205,12 @@ record = new IncentiveActivityRecord(); record.setBenId(0L); record.setAshaId(session.getAshaId()); record.setAmount(Long.valueOf(incentiveActivityCH.getRate())); + if(session.getAttachmentsJson()!=null){ + record.setIsEligible(true); + }else { + record.setIsEligible(false); + updateIncentivePendindDocService.updatePendingActivity(session.getAshaId(),session.getId(),record.getId(),incentiveActivityCH.getId()); + } recordRepo.save(record); } } From df1182b548abcb8346d83bcd7ec777eb70c35cea Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 25 Feb 2026 23:57:44 +0530 Subject: [PATCH 55/65] optimize ben address query --- .../service/impl/IncentiveServiceImpl.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 25e5f28f..8b35c4db 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -252,17 +252,18 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { logger.info("run--7"); try { - MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); - maaMeetingRequestDTO.setId(existingActivity.getRecordId()); - maaMeetingRequestDTO.setMeetingImages( - pendingActivityDTO.getImages().toArray(new MultipartFile[0]) - ); - logger.info("Activity Name from request:"+incentiveName.name()); - logger.info("Activity Name from enum:"+IncentiveName.MAA_QUARTERLY_MEETING.name()); // ✅ ENUM BASED CHECK if(pendingActivityDTO.getModuleName().equals(GroupName.ACTIVITY)){ if (Objects.equals(incentiveName.name(), IncentiveName.MAA_QUARTERLY_MEETING.name())) { + MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); + maaMeetingRequestDTO.setId(existingActivity.getRecordId()); + maaMeetingRequestDTO.setMeetingImages( + pendingActivityDTO.getImages().toArray(new MultipartFile[0]) + ); + logger.info("Activity Name from request:"+incentiveName.name()); + logger.info("Activity Name from enum:"+IncentiveName.MAA_QUARTERLY_MEETING.name()); + MaaMeeting meeting= maaMeetingService.updateMeetingFromFileUpload( maaMeetingRequestDTO, @@ -275,8 +276,16 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { }else { if (incentiveName.name().equals(IncentiveName.MAA_QUARTERLY_MEETING.name())) { + MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); + maaMeetingRequestDTO.setId(existingActivity.getRecordId()); + maaMeetingRequestDTO.setMeetingImages( + pendingActivityDTO.getImages().toArray(new MultipartFile[0]) + ); + logger.info("Activity Name from request:"+incentiveName.name()); + logger.info("Activity Name from enum:"+IncentiveName.MAA_QUARTERLY_MEETING.name()); + - MaaMeeting meeting = maaMeetingService.updateMeetingFromFileUpload( + MaaMeeting meeting = maaMeetingService.updateMeetingFromFileUpload( maaMeetingRequestDTO, pendingActivityDTO.getId() ); From 167004fa210aed64efc311a6cf28abdd10cd03cf Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 26 Feb 2026 00:07:11 +0530 Subject: [PATCH 56/65] optimize ben address query --- .../iemr/flw/service/MaaMeetingService.java | 15 ++-- .../flw/service/impl/SammelanServiceImpl.java | 71 +++++++++++-------- .../service/impl/UwinSessionServiceImpl.java | 12 +++- 3 files changed, 61 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 24b1447e..d8fdd82b 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -111,7 +111,7 @@ public MaaMeeting updateMeeting(MaaMeetingRequestDTO req) throws JsonProcessingE return repository.save(existingMeeting); } - public MaaMeeting updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long incentiveRecordId) throws JsonProcessingException { + public MaaMeeting updateMeetingFromFileUpload(MaaMeetingRequestDTO req, Long incentiveRecordId) throws JsonProcessingException { MaaMeeting existingMeeting = repository.findById(req.getId()) .orElseThrow(() -> new EntityNotFoundException("Meeting not found: " + req.getId())); @@ -238,15 +238,21 @@ record = new IncentiveActivityRecord(); record.setUpdatedBy(meeting.getCreatedBy()); record.setBenId(0L); record.setAshaId(meeting.getAshaId()); + record.setAmount(Long.valueOf(incentiveActivity.getRate())); + if (meeting.getMeetingImagesJson() != null) { record.setIsEligible(true); + recordRepo.save(record); + } else { record.setIsEligible(false); - updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(),incentiveActivity.getId()); + IncentiveActivityRecord activityRecord = recordRepo.save(record); + if (activityRecord != null) { + updatePendingActivity(meeting.getAshaId(), meeting.getId(), activityRecord.getId(), incentiveActivity.getId()); + + } } - record.setAmount(Long.valueOf(incentiveActivity.getRate())); - recordRepo.save(record); } } @@ -263,5 +269,4 @@ private void updateIncentive(Long id) { } - } diff --git a/src/main/java/com/iemr/flw/service/impl/SammelanServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SammelanServiceImpl.java index 53497981..b9d035a7 100644 --- a/src/main/java/com/iemr/flw/service/impl/SammelanServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SammelanServiceImpl.java @@ -51,6 +51,8 @@ public class SammelanServiceImpl implements SammelanService { @Autowired private IncentivesRepo incentivesRepo; + @Autowired + private UpdateIncentivePendindDocService updateIncentivePendindDocService; @Override @@ -62,36 +64,36 @@ public SammelanResponseDTO submitSammelan(SammelanRequestDTO sammelanRequestDTO) // Save Sammelan record record = new SammelanRecord(); record.setAshaId(sammelanRequestDTO.getAshaId()); - logger.info("Meeting Date:"+sammelanRequestDTO.getDate()); + logger.info("Meeting Date:" + sammelanRequestDTO.getDate()); Timestamp timestamp = new Timestamp(sammelanRequestDTO.getDate()); record.setMeetingDate(timestamp); record.setPlace(sammelanRequestDTO.getPlace()); record.setParticipants(sammelanRequestDTO.getParticipants()); - if (sammelanRequestDTO.getSammelanImages() != null && sammelanRequestDTO.getSammelanImages().length > 0) { - List base64Images = Arrays.stream(sammelanRequestDTO.getSammelanImages()) - .filter(file -> !file.isEmpty()) - .map(file -> { - try { - return Base64.getEncoder().encodeToString(file.getBytes()); - } catch (IOException e) { - throw new RuntimeException("Error converting image to Base64", e); - } - }) - .collect(Collectors.toList()); - - String imagesJson = objectMapper.writeValueAsString(base64Images); - record .setAttachments(imagesJson); - } + if (sammelanRequestDTO.getSammelanImages() != null && sammelanRequestDTO.getSammelanImages().length > 0) { + List base64Images = Arrays.stream(sammelanRequestDTO.getSammelanImages()) + .filter(file -> !file.isEmpty()) + .map(file -> { + try { + return Base64.getEncoder().encodeToString(file.getBytes()); + } catch (IOException e) { + throw new RuntimeException("Error converting image to Base64", e); + } + }) + .collect(Collectors.toList()); - if(record!=null){ - record = recordRepo.save(record); - checkIncentive(record); + String imagesJson = objectMapper.writeValueAsString(base64Images); + record.setAttachments(imagesJson); + } + + if (record != null) { + record = recordRepo.save(record); + checkIncentive(record); - } - // Prepare Response DTO + } + // Prepare Response DTO response.setId(record.getId()); response.setAshaId(record.getAshaId()); Timestamp ts = Timestamp.valueOf(record.getMeetingDate().toLocalDateTime()); @@ -103,7 +105,7 @@ record = recordRepo.save(record); } catch (Exception e) { - logger.info("SammelanRecord Exception: "+e.getMessage()); + logger.info("SammelanRecord Exception: " + e.getMessage()); } return response; @@ -112,14 +114,14 @@ record = recordRepo.save(record); private void checkIncentive(SammelanRecord record) { IncentiveActivity incentiveActivity = incentivesRepo.findIncentiveMasterByNameAndGroup("FP_SAAS_BAHU", GroupName.FAMILY_PLANNING.getDisplayName()); - logger.info("SammelanRecord: "+incentiveActivity.getRate()); - if(incentiveActivity!=null){ - addSammelanIncentive(incentiveActivity,record); + logger.info("SammelanRecord: " + incentiveActivity.getRate()); + if (incentiveActivity != null) { + addSammelanIncentive(incentiveActivity, record); } } private void addSammelanIncentive(IncentiveActivity incentiveActivity, SammelanRecord record) { - IncentiveActivityRecord incentiveActivityRecord = incentiveRecordRepo .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), record.getMeetingDate(), 0L,record.getAshaId()); + IncentiveActivityRecord incentiveActivityRecord = incentiveRecordRepo.findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), record.getMeetingDate(), 0L, record.getAshaId()); try { if (incentiveActivityRecord == null) { incentiveActivityRecord = new IncentiveActivityRecord(); @@ -133,10 +135,21 @@ private void addSammelanIncentive(IncentiveActivity incentiveActivity, SammelanR incentiveActivityRecord.setBenId(0L); incentiveActivityRecord.setAshaId(record.getAshaId()); incentiveActivityRecord.setAmount(Long.valueOf(incentiveActivity.getRate())); - incentiveRecordRepo.save(incentiveActivityRecord); + if (record.getAttachments() != null) { + incentiveActivityRecord.setIsEligible(true); + incentiveRecordRepo.save(incentiveActivityRecord); + + } else { + incentiveActivityRecord.setIsEligible(false); + IncentiveActivityRecord activityRecord = incentiveRecordRepo.save(incentiveActivityRecord); + if (activityRecord != null) { + updateIncentivePendindDocService.updatePendingActivity(record.getAshaId(), record.getId(), activityRecord.getActivityId(), incentiveActivity.getId()); + + } + } } - }catch (Exception e){ - logger.info("SammelanRecord save Record: ",e); + } catch (Exception e) { + logger.info("SammelanRecord save Record: ", e); } diff --git a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java index d1a9792a..86f62659 100644 --- a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java @@ -179,14 +179,20 @@ record = new IncentiveActivityRecord(); record.setUpdatedBy(session.getCreatedBy()); record.setBenId(0L); record.setAshaId(session.getAshaId()); + record.setAmount(Long.valueOf(incentiveActivityAM.getRate())); if(session.getAttachmentsJson()!=null){ record.setIsEligible(true); + recordRepo.save(record); + }else { record.setIsEligible(false); - updateIncentivePendindDocService.updatePendingActivity(session.getAshaId(),session.getId(),record.getId(),incentiveActivityAM.getId()); + IncentiveActivityRecord incentiveActivityRecord = recordRepo.save(record); + if(incentiveActivityRecord!=null){ + updateIncentivePendindDocService.updatePendingActivity(session.getAshaId(),session.getId(),incentiveActivityRecord.getId(),incentiveActivityAM.getId()); + + } } - record.setAmount(Long.valueOf(incentiveActivityAM.getRate())); - recordRepo.save(record); + } } From 3e4f8c7e93e6bf0f26fe71483316ccd5c8cbfe4b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 26 Feb 2026 11:03:32 +0530 Subject: [PATCH 57/65] optimize ben address query --- .../service/impl/UwinSessionServiceImpl.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java index 86f62659..b63afb0f 100644 --- a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java @@ -107,11 +107,19 @@ public UwinSessionResponseDTO saveSession(UwinSessionRequestDTO req) throws Exce return dto; } - @Override - public UwinSession updateSession(UwinSessionRequestDTO req,Long recordId,Long activityId) throws Exception { + @Override + public UwinSession updateSession(UwinSessionRequestDTO req, Long recordId, Long activityId) throws Exception { Optional optionalUwinSession = repo.findById(recordId); - if(optionalUwinSession.isPresent()){ - UwinSession session = new UwinSession(); + + if (optionalUwinSession.isPresent()) { + UwinSession session = optionalUwinSession.get(); // ✅ Use existing session + + // Update fields if present in request + if (req.getPlace() != null) session.setPlace(req.getPlace()); + if (req.getParticipants() != null) session.setParticipants(req.getParticipants()); + if (req.getDate() != null) session.setDate(req.getDate()); + + // Update attachments if present if (req.getAttachments() != null && req.getAttachments().length > 0) { List base64Images = Arrays.stream(req.getAttachments()) .filter(file -> !file.isEmpty()) @@ -126,16 +134,16 @@ public UwinSession updateSession(UwinSessionRequestDTO req,Long recordId,Long ac String imagesJson = objectMapper.writeValueAsString(base64Images); session.setAttachmentsJson(imagesJson); - } - repo.save(session); - if(session.getAttachmentsJson()!=null){ + // Trigger incentive update if attachments exist updateIncentivePendindDocService.updateIncentive(activityId); } - } - - return optionalUwinSession.get(); + repo.save(session); // ✅ Save updated session + return session; + } else { + throw new RuntimeException("Session not found for id: " + recordId); + } } @Override From 3920c9efaa7623185ecc437fe5545ca10ac57881 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 26 Feb 2026 12:40:45 +0530 Subject: [PATCH 58/65] fix logic of upload file for death reporting --- .../service/impl/DeathReportsServiceImpl.java | 140 ++++++++++++++++-- .../service/impl/IncentiveServiceImpl.java | 59 ++++++++ 2 files changed, 183 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java index 43a6fa71..15d7fc1a 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java @@ -7,6 +7,7 @@ import com.iemr.flw.dto.iemr.CdrDTO; import com.iemr.flw.dto.iemr.MdsrDTO; import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.DeathReportsService; @@ -18,6 +19,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -45,17 +47,20 @@ public class DeathReportsServiceImpl implements DeathReportsService { @Autowired private IncentiveRecordRepo recordRepo; + @Autowired + private UpdateIncentivePendindDocService pendindDocService; + private final Logger logger = LoggerFactory.getLogger(DeathReportsServiceImpl.class); @Override public String registerCDR(List cdrDTOs) { try { List cdrList = new ArrayList<>(); - cdrDTOs.forEach(it ->{ + cdrDTOs.forEach(it -> { CDR existingCDR = cdrRepo.findCDRByBenId(it.getBenId()); - if(existingCDR != null) { + if (existingCDR != null) { Long id = existingCDR.getId(); modelMapper.map(it, existingCDR); existingCDR.setId(id); @@ -76,15 +81,47 @@ public String registerCDR(List cdrDTOs) { } } + public String updateCDRUploadFiles(CdrDTO cdrDTOs, Long incentiveActivityId) { + try { + Optional cdrOptional = cdrRepo.findById(cdrDTOs.getId()); + CDR cdr = new CDR(); + if (cdrOptional.isPresent()) { + cdr = cdrOptional.get(); + if (cdrDTOs.getCdrImage() != null && !cdrDTOs.getCdrImage().isEmpty()) { + cdr.setCdrImage(cdrDTOs.getCdrImage()); + } + + if (cdrDTOs.getCdrImage2() != null && !cdrDTOs.getCdrImage2().isEmpty()) { + cdr.setCdrImage2(cdrDTOs.getCdrImage2()); + } + + if (cdrDTOs.getDeathCertImage1() != null && !cdrDTOs.getDeathCertImage1().isEmpty()) { + cdr.setDeathCertImage1(cdrDTOs.getDeathCertImage1()); + } + + if (cdrDTOs.getDeathCertImage2() != null && !cdrDTOs.getDeathCertImage2().isEmpty()) { + cdr.setDeathCertImage2(cdrDTOs.getDeathCertImage2()); + } + } + cdrRepo.save(cdr); + + pendindDocService.updateIncentive(incentiveActivityId); + + return "no of cdr details update: "; + } catch (Exception e) { + return "error while saving cdr details: " + e.getMessage(); + } + } + @Override public String registerMDSR(List mdsrDTOs) { try { List mdsrList = new ArrayList<>(); - mdsrDTOs.forEach(it ->{ + mdsrDTOs.forEach(it -> { MDSR mdsr = mdsrRepo.findMDSRByBenId(it.getBenId()); - if(mdsr != null) { + if (mdsr != null) { Long id = mdsr.getId(); modelMapper.map(it, mdsr); mdsr.setId(id); @@ -104,9 +141,47 @@ public String registerMDSR(List mdsrDTOs) { } } + public String updateMDSR(MdsrDTO mdsrDTO, Long incentiveActivityId) { + try { + + Optional mdsrOptional = mdsrRepo.findById(mdsrDTO.getId()); + MDSR mdsr = new MDSR(); + + if (mdsrOptional.isPresent()) { + + mdsr = mdsrOptional.get(); + + if (mdsrDTO.getMdsr1File() != null && !mdsrDTO.getMdsr1File().isEmpty()) { + mdsr.setMdsr1File(mdsrDTO.getMdsr1File()); + } + + if (mdsrDTO.getMdsr2File() != null && !mdsrDTO.getMdsr2File().isEmpty()) { + mdsr.setMdsr2File(mdsrDTO.getMdsr2File()); + } + + if (mdsrDTO.getMdsrDeathCertFile() != null && !mdsrDTO.getMdsrDeathCertFile().isEmpty()) { + mdsr.setMdsrDeathCertFile(mdsrDTO.getMdsrDeathCertFile()); + } + + } else { + return "MDSR record not found with id: " + mdsrDTO.getId(); + } + + mdsrRepo.save(mdsr); + + // incentive update + pendindDocService.updateIncentive(incentiveActivityId); + + return "MDSR updated successfully for id: " + mdsrDTO.getId(); + + } catch (Exception e) { + return "error while updating mdsr details: " + e.getMessage(); + } + } + @Override public List getCdrRecords(GetBenRequestHandler dto) { - try{ + try { String user = userRepo.getUserNamedByUserId(dto.getAshaId()); List cdrlist = cdrRepo.findByCreatedBy(user); @@ -114,7 +189,7 @@ public List getCdrRecords(GetBenRequestHandler dto) { .map(cdr -> mapper.convertValue(cdr, CdrDTO.class)) .collect(Collectors.toList()); } catch (Exception e) { - logger.error("MDSR Exception:"+e.getMessage()); + logger.error("MDSR Exception:" + e.getMessage()); // log } @@ -133,7 +208,7 @@ public List getMdsrRecords(GetBenRequestHandler dto) { .map(mdsr -> mapper.convertValue(mdsr, MdsrDTO.class)) .collect(Collectors.toList()); } catch (Exception e) { - logger.error("MDSR Exception:"+e.getMessage()); + logger.error("MDSR Exception:" + e.getMessage()); // log } @@ -142,11 +217,11 @@ public List getMdsrRecords(GetBenRequestHandler dto) { private void checkAndAddIncentives(List cdrList) { - cdrList.forEach( cdr -> { + cdrList.forEach(cdr -> { Integer userId = userRepo.getUserIdByName(cdr.getCreatedBy()); IncentiveActivity immunizationActivity = incentivesRepo.findIncentiveMasterByNameAndGroup("CHILD_DEATH_REPORTING", GroupName.CHILD_HEALTH.getDisplayName()); - createIncentiveRecord(cdr,cdr.getBenId(),userId,immunizationActivity); + createIncentiveRecord(cdr, cdr.getBenId(), userId, immunizationActivity); }); } @@ -154,17 +229,16 @@ private void checkAndAddIncentives(List cdrList) { private void checkAndAddIncentivesMdsr(List mdsrList) { - mdsrList.forEach( mdsr -> { + mdsrList.forEach(mdsr -> { Integer userId = userRepo.getUserIdByName(mdsr.getCreatedBy()); IncentiveActivity immunizationActivity = incentivesRepo.findIncentiveMasterByNameAndGroup("MATERNAL_DEATH_REPORT", GroupName.MATERNAL_HEALTH.getDisplayName()); - createIncentiveRecord(mdsr,mdsr.getBenId(),userId,immunizationActivity); + createIncentiveRecord(mdsr, mdsr.getBenId(), userId, immunizationActivity); }); } - private void createIncentiveRecord(CDR cdr, Long benId, Integer userId, IncentiveActivity immunizationActivity) { IncentiveActivityRecord record = recordRepo .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), cdr.getCreatedDate(), benId); @@ -180,7 +254,26 @@ record = new IncentiveActivityRecord(); record.setBenId(benId); record.setAshaId(userId); record.setAmount(Long.valueOf(immunizationActivity.getRate())); - recordRepo.save(record); + if (userRepo.getUserRole(userId).get(0).getStateId() == StateCode.AM.getStateCode()) { + if (cdr.getDeathCertImage1() != null && cdr.getCdrImage() != null && cdr.getCdrImage2() != null && cdr.getDeathCertImage2() != null) { + record.setIsEligible(true); + recordRepo.save(record); + + } else { + record.setIsEligible(false); + IncentiveActivityRecord incentiveActivityRecord = recordRepo.save(record); + if (incentiveActivityRecord == null) { + recordRepo.save(record); + pendindDocService.updatePendingActivity(userId, cdr.getId(), record.getId(), immunizationActivity.getId()); + + } + + } + } else { + recordRepo.save(record); + + } + } } @@ -199,14 +292,29 @@ record = new IncentiveActivityRecord(); record.setBenId(benId); record.setAshaId(userId); record.setAmount(Long.valueOf(immunizationActivity.getRate())); - recordRepo.save(record); - } - } + if (userRepo.getUserRole(userId).get(0).getStateId() == StateCode.AM.getStateCode()) { + if (mdsr.getMdsrDeathCertFile() != null && mdsr.getMdsr1File() != null && mdsr.getMdsr2File() != null) { + record.setIsEligible(true); + recordRepo.save(record); + + } else { + record.setIsEligible(false); + IncentiveActivityRecord incentiveActivityRecord = recordRepo.save(record); + if (incentiveActivityRecord == null) { + recordRepo.save(record); + pendindDocService.updatePendingActivity(userId, mdsr.getId(), record.getId(), immunizationActivity.getId()); + } + } + } else { + recordRepo.save(record); + } + } + } } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 8b35c4db..ea84e929 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -1,5 +1,6 @@ package com.iemr.flw.service.impl; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.iemr.flw.domain.identity.RMNCHMBeneficiarydetail; @@ -22,6 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.math.BigInteger; import java.sql.Timestamp; import java.time.LocalDate; @@ -64,6 +66,9 @@ public class IncentiveServiceImpl implements IncentiveService { @Autowired private UwinSessionService uwinSessionService; + @Autowired + private DeathReportsServiceImpl deathReportsService; + @Override public String saveIncentivesMaster(List activityDTOS) { try { @@ -318,6 +323,52 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { } + if (pendingActivityDTO != null + && incentiveName != null + && IncentiveName.CHILD_DEATH_REPORTING.name().equals(incentiveName.name())) { + + CdrDTO cdrDTO = new CdrDTO(); + List images = pendingActivityDTO.getImages(); + + if (images != null && !images.isEmpty()) { + + if (images.size() > 0 && images.get(0) != null && !images.get(0).isEmpty()) + cdrDTO.setCdrImage(convertAttachmentsToJson(images.get(0))); + + if (images.size() > 1 && images.get(1) != null && !images.get(1).isEmpty()) + cdrDTO.setCdrImage2(convertAttachmentsToJson(images.get(1))); + + if (images.size() > 2 && images.get(2) != null && !images.get(2).isEmpty()) + cdrDTO.setDeathCertImage1(convertAttachmentsToJson(images.get(2))); + + if (images.size() > 3 && images.get(3) != null && !images.get(3).isEmpty()) + cdrDTO.setDeathCertImage2(convertAttachmentsToJson(images.get(3))); + } + + deathReportsService.updateCDRUploadFiles(cdrDTO, pendingActivityDTO.getId()); + } + + if (pendingActivityDTO != null + && incentiveName != null + && IncentiveName.MATERNAL_DEATH_REPORT.name().equals(incentiveName.name())) { + + MdsrDTO mdsrDTO = new MdsrDTO(); + List images = pendingActivityDTO.getImages(); + + if (images != null && !images.isEmpty()) { + + if (images.size() > 0 && images.get(0) != null && !images.get(0).isEmpty()) + mdsrDTO.setMdsr1File(convertAttachmentsToJson(images.get(0))); + + if (images.size() > 1 && images.get(1) != null && !images.get(1).isEmpty()) + mdsrDTO.setMdsr2File(convertAttachmentsToJson(images.get(1))); + + if (images.size() > 2 && images.get(2) != null && !images.get(2).isEmpty()) + mdsrDTO.setMdsrDeathCertFile(convertAttachmentsToJson(images.get(2))); + } + deathReportsService.updateMDSR(mdsrDTO, pendingActivityDTO.getId()); + + } } @@ -334,6 +385,14 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { return null; } + public String convertAttachmentsToJson(MultipartFile file) { + try { + String base64 = Base64.getEncoder().encodeToString(file.getBytes()); + return new ObjectMapper().writeValueAsString(base64); + } catch (Exception e) { + throw new RuntimeException("Error converting file", e); + } + } private void checkMonthlyAshaIncentive(Integer ashaId) { IncentiveActivity MOBILEBILLREIMB_ACTIVITY = incentivesRepo.findIncentiveMasterByNameAndGroup("MOBILE_BILL_REIMB", GroupName.OTHER_INCENTIVES.getDisplayName()); IncentiveActivity ADDITIONAL_ASHA_INCENTIVE = incentivesRepo.findIncentiveMasterByNameAndGroup("ADDITIONAL_ASHA_INCENTIVE", GroupName.ADDITIONAL_INCENTIVE.getDisplayName()); From 9d2163de944722eacbcf954c5839f9bd71bc16ab Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 26 Feb 2026 12:49:12 +0530 Subject: [PATCH 59/65] fix logic of upload file for death reporting --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index ea84e929..bbf28e4d 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -328,6 +328,8 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { && IncentiveName.CHILD_DEATH_REPORTING.name().equals(incentiveName.name())) { CdrDTO cdrDTO = new CdrDTO(); + cdrDTO.setId(existingActivity.getRecordId()); + List images = pendingActivityDTO.getImages(); if (images != null && !images.isEmpty()) { @@ -354,7 +356,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { MdsrDTO mdsrDTO = new MdsrDTO(); List images = pendingActivityDTO.getImages(); - + mdsrDTO.setId(existingActivity.getRecordId()); if (images != null && !images.isEmpty()) { if (images.size() > 0 && images.get(0) != null && !images.get(0).isEmpty()) From 03b610b4b2dbbc19a6d547c34e09227440652891 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 27 Feb 2026 16:01:54 +0530 Subject: [PATCH 60/65] update version in pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 42245b93..1c802cfc 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iemr.common.flw flw-api - 3.7.0 + 3.8.0 war FLW-API From b144c902c0c1f40bdea53552a614707163f369bb Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 2 Mar 2026 10:41:02 +0530 Subject: [PATCH 61/65] fix incentive logic in childcare --- .../service/impl/ChildCareServiceImpl.java | 129 +++++++++++------- .../service/impl/UwinSessionServiceImpl.java | 14 +- 2 files changed, 85 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index 1ceb626a..a33f5078 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -7,6 +7,7 @@ import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.ChildCareService; @@ -792,35 +793,38 @@ private void checkAndAddHbyncIncentives(List hbycList) { private void checkAndAddHbncIncentives(List hbncVisits) { hbncVisits.forEach(hbncVisit -> { - boolean isVisitDone = List.of("1st Day", "3rd Day", "7th Day", "42nd Day") - .stream() - .allMatch(hbncVisits::contains); + GroupName.setIsCh(false); Long benId = hbncVisit.getBeneficiaryId(); - if (hbncVisit.getVisit_day().equals("42nd Day")) { - IncentiveActivity visitActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity visitActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.ACTIVITY.getDisplayName()); + Integer stateId = userRepo.getUserRole(hbncVisit.getAshaId()).get(0).getStateId(); - createIncentiveRecordforHbncVisit(hbncVisit, benId, visitActivityAM, "HBNC_0_42_DAYS"); - createIncentiveRecordforHbncVisit(hbncVisit, benId, visitActivityCH, "HBNC_0_42_DAYS_CH"); + if (hbncVisit.getVisit_day().equals("42nd Day")) { + if (stateId != null && stateId.equals(com.iemr.flw.masterEnum.StateCode.AM.getStateCode())) { + IncentiveActivity visitActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.CHILD_HEALTH.getDisplayName()); + createIncentiveRecordforHbncVisit(hbncVisit, benId, visitActivityAM, "HBNC_0_42_DAYS"); + } else if (stateId != null && stateId.equals(com.iemr.flw.masterEnum.StateCode.CG.getStateCode())) { + IncentiveActivity visitActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.ACTIVITY.getDisplayName()); + createIncentiveRecordforHbncVisit(hbncVisit, benId, visitActivityCH, "HBNC_0_42_DAYS_CH"); + } } logger.info("getDischarged_from_sncu" + hbncVisit.getDischarged_from_sncu()); + if (stateId != null && stateId.equals(com.iemr.flw.masterEnum.StateCode.AM.getStateCode())) { + if (hbncVisit.getVisit_day().equals("42nd Day") && hbncVisit.getDischarged_from_sncu() && hbncVisit.getBaby_weight() <= 2.5) { + IncentiveActivity babyDisChargeSNCUAActivity = + incentivesRepo.findIncentiveMasterByNameAndGroup("SNCU_LBW_FOLLOWUP", GroupName.CHILD_HEALTH.getDisplayName()); - if (hbncVisit.getVisit_day().equals("42nd Day") && hbncVisit.getDischarged_from_sncu() && hbncVisit.getBaby_weight() <= 2.5) { - IncentiveActivity babyDisChargeSNCUAActivity = - incentivesRepo.findIncentiveMasterByNameAndGroup("SNCU_LBW_FOLLOWUP", GroupName.CHILD_HEALTH.getDisplayName()); + createIncentiveRecordforHbncVisit(hbncVisit, benId, babyDisChargeSNCUAActivity, "SNCU_LBW_FOLLOWUP"); - createIncentiveRecordforHbncVisit(hbncVisit, benId, babyDisChargeSNCUAActivity, "SNCU_LBW_FOLLOWUP"); - - } - logger.info("getIs_baby_alive" + hbncVisit.getIs_baby_alive()); - if (!hbncVisit.getIs_baby_alive()) { - IncentiveActivity isChildDeathActivity = - incentivesRepo.findIncentiveMasterByNameAndGroup("CHILD_DEATH_REPORTING", GroupName.CHILD_HEALTH.getDisplayName()); + } + logger.info("getIs_baby_alive" + hbncVisit.getIs_baby_alive()); + if (!hbncVisit.getIs_baby_alive()) { + IncentiveActivity isChildDeathActivity = + incentivesRepo.findIncentiveMasterByNameAndGroup("CHILD_DEATH_REPORTING", GroupName.CHILD_HEALTH.getDisplayName()); - createIncentiveRecordforHbncVisit(hbncVisit, benId, isChildDeathActivity, "CHILD_DEATH_REPORTING"); + createIncentiveRecordforHbncVisit(hbncVisit, benId, isChildDeathActivity, "CHILD_DEATH_REPORTING"); + } } @@ -836,48 +840,71 @@ private void checkAndAddIncentives(List vaccinationList) { vaccinationList.forEach(vaccination -> { Long benId = beneficiaryRepo.getBenIdFromRegID(vaccination.getBeneficiaryRegId()).longValue(); Integer userId = userRepo.getUserIdByName(vaccination.getCreatedBy()); + Integer stateId = userRepo.getUserRole(userId).get(0).getStateId(); Integer immunizationServiceId = getImmunizationServiceIdForVaccine(vaccination.getVaccineId().shortValue()); if (immunizationServiceId < 6) { - IncentiveActivity immunizationActivityAM = - incentivesRepo.findIncentiveMasterByNameAndGroup("FULL_IMMUNIZATION_0_1", GroupName.IMMUNIZATION.getDisplayName()); - IncentiveActivity immunizationActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("FULL_IMMUNIZATION_0_1", GroupName.ACTIVITY.getDisplayName()); + if (stateId != null && stateId.equals(StateCode.AM.getStateCode())) { + IncentiveActivity immunizationActivityAM = + incentivesRepo.findIncentiveMasterByNameAndGroup("FULL_IMMUNIZATION_0_1", GroupName.IMMUNIZATION.getDisplayName()); + + if (immunizationActivityAM != null && childVaccinationRepo.getFirstYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) + .equals(childVaccinationRepo.getFirstYearVaccineCount())) { + + createIncentiveRecord(vaccination, benId, userId, immunizationActivityAM); + } - if (immunizationActivityAM != null && childVaccinationRepo.getFirstYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) - .equals(childVaccinationRepo.getFirstYearVaccineCount())) { - createIncentiveRecord(vaccination, benId, userId, immunizationActivityAM); } + if (stateId != null && stateId.equals(StateCode.CG.getStateCode())) { + IncentiveActivity immunizationActivityCH = + incentivesRepo.findIncentiveMasterByNameAndGroup("FULL_IMMUNIZATION_0_1", GroupName.ACTIVITY.getDisplayName()); - if (immunizationActivityCH != null && childVaccinationRepo.getFirstYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) - .equals(childVaccinationRepo.getFirstYearVaccineCount())) { - createIncentiveRecord(vaccination, benId, userId, immunizationActivityCH); + + if (immunizationActivityCH != null && childVaccinationRepo.getFirstYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) + .equals(childVaccinationRepo.getFirstYearVaccineCount())) { + createIncentiveRecord(vaccination, benId, userId, immunizationActivityCH); + } } + + } else if (immunizationServiceId == 7) { - IncentiveActivity immunizationActivity2AM = - incentivesRepo.findIncentiveMasterByNameAndGroup("COMPLETE_IMMUNIZATION_1_2", GroupName.IMMUNIZATION.getDisplayName()); - IncentiveActivity immunizationActivity2CH = - incentivesRepo.findIncentiveMasterByNameAndGroup("COMPLETE_IMMUNIZATION_1_2", GroupName.ACTIVITY.getDisplayName()); - if (immunizationActivity2AM != null && childVaccinationRepo.getSecondYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) - .equals(childVaccinationRepo.getSecondYearVaccineCount())) { - createIncentiveRecord(vaccination, benId, userId, immunizationActivity2AM); + if (stateId != null && stateId.equals(StateCode.AM.getStateCode())) { + IncentiveActivity immunizationActivity2AM = + incentivesRepo.findIncentiveMasterByNameAndGroup("COMPLETE_IMMUNIZATION_1_2", GroupName.IMMUNIZATION.getDisplayName()); + if (immunizationActivity2AM != null && childVaccinationRepo.getSecondYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) + .equals(childVaccinationRepo.getSecondYearVaccineCount())) { + createIncentiveRecord(vaccination, benId, userId, immunizationActivity2AM); + } } - if (immunizationActivity2CH != null && childVaccinationRepo.getSecondYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) - .equals(childVaccinationRepo.getSecondYearVaccineCount())) { - createIncentiveRecord(vaccination, benId, userId, immunizationActivity2CH); + + if (stateId != null && stateId.equals(StateCode.CG.getStateCode())) { + IncentiveActivity immunizationActivity2CH = + incentivesRepo.findIncentiveMasterByNameAndGroup("COMPLETE_IMMUNIZATION_1_2", GroupName.ACTIVITY.getDisplayName()); + if (immunizationActivity2CH != null && childVaccinationRepo.getSecondYearVaccineCountForBenId(vaccination.getBeneficiaryRegId()) + .equals(childVaccinationRepo.getSecondYearVaccineCount())) { + createIncentiveRecord(vaccination, benId, userId, immunizationActivity2CH); + } } + + } - IncentiveActivity immunizationActivity5AM = - incentivesRepo.findIncentiveMasterByNameAndGroup("DPT_IMMUNIZATION_5_YEARS", GroupName.IMMUNIZATION.getDisplayName()); - if (immunizationActivity5AM != null && childVaccinationRepo.checkDptVaccinatedUser(vaccination.getBeneficiaryRegId()) == 1) { - createIncentiveRecord(vaccination, benId, userId, immunizationActivity5AM); + if (stateId != null && stateId.equals(StateCode.AM.getStateCode())) { + IncentiveActivity immunizationActivity5AM = + incentivesRepo.findIncentiveMasterByNameAndGroup("DPT_IMMUNIZATION_5_YEARS", GroupName.IMMUNIZATION.getDisplayName()); + if (immunizationActivity5AM != null && childVaccinationRepo.checkDptVaccinatedUser(vaccination.getBeneficiaryRegId()) == 1) { + createIncentiveRecord(vaccination, benId, userId, immunizationActivity5AM); + } + } + if (stateId != null && stateId.equals(StateCode.CG.getStateCode())) { - IncentiveActivity immunizationActivity5CH = - incentivesRepo.findIncentiveMasterByNameAndGroup("DPT_IMMUNIZATION_5_YEARS", GroupName.ACTIVITY.getDisplayName()); - if (immunizationActivity5CH != null && childVaccinationRepo.checkDptVaccinatedUser(vaccination.getBeneficiaryRegId()) == 1) { - createIncentiveRecord(vaccination, benId, userId, immunizationActivity5CH); + IncentiveActivity immunizationActivity5CH = + incentivesRepo.findIncentiveMasterByNameAndGroup("DPT_IMMUNIZATION_5_YEARS", GroupName.ACTIVITY.getDisplayName()); + if (immunizationActivity5CH != null && childVaccinationRepo.checkDptVaccinatedUser(vaccination.getBeneficiaryRegId()) == 1) { + createIncentiveRecord(vaccination, benId, userId, immunizationActivity5CH); + } } + }); } @@ -929,13 +956,14 @@ record = new IncentiveActivityRecord(); record.setIsEligible(false); } else { record.setIsEligible(false); - updatePendingActivity(hbncVisit.getAshaId(),hbncVisit.getId(),record.getActivityId(),immunizationActivity.getId()); + updatePendingActivity(hbncVisit.getAshaId(), hbncVisit.getId(), record.getActivityId(), immunizationActivity.getId()); } record.setAmount(Long.valueOf(immunizationActivity.getRate())); recordRepo.save(record); } } + private void updatePendingActivity(Integer userId, Long recordId, Long activityId, Long mIncentiveId) { IncentivePendingActivity incentivePendingActivity = new IncentivePendingActivity(); incentivePendingActivity.setActivityId(activityId); @@ -947,7 +975,8 @@ private void updatePendingActivity(Integer userId, Long recordId, Long activityI } } - public HbncVisit updateHbncFromFileUpload(MultipartFile[] dischargeSncuImage,Long incentiveRecordId,Long id) throws JsonProcessingException { + + public HbncVisit updateHbncFromFileUpload(MultipartFile[] dischargeSncuImage, Long incentiveRecordId, Long id) throws JsonProcessingException { HbncVisit existingHbncVisit = hbncVisitRepo.findById(id) .orElseThrow(() -> new EntityNotFoundException("Meeting not found: " + id)); @@ -967,6 +996,7 @@ public HbncVisit updateHbncFromFileUpload(MultipartFile[] dischargeSncuImage,Lon } return hbncVisitRepo.save(existingHbncVisit); } + private void updateIncentive(Long id) { Optional optionalRecord = recordRepo.findById(id); @@ -986,6 +1016,7 @@ private String convertToBase64(MultipartFile file) { throw new RuntimeException("Failed to convert image to Base64: " + file.getOriginalFilename(), e); } } + private void createIncentiveRecordforHbyncVisit(HbycChildVisit data, Long benId, IncentiveActivity immunizationActivity, String createdBy) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); diff --git a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java index b63afb0f..759a2a58 100644 --- a/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/UwinSessionServiceImpl.java @@ -8,6 +8,7 @@ import com.iemr.flw.dto.iemr.UwinSessionRequestDTO; import com.iemr.flw.dto.iemr.UwinSessionResponseDTO; import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.iemr.IncentiveRecordRepo; import com.iemr.flw.repo.iemr.IncentivesRepo; import com.iemr.flw.repo.iemr.UserServiceRoleRepo; @@ -171,9 +172,9 @@ public List getSessionsByAsha(Integer ashaId) throws Exc private void checkAndAddIncentive(UwinSession session) { IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("CHILD_MOBILIZATION_SESSIONS", GroupName.IMMUNIZATION.getDisplayName()); IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("CHILD_MOBILIZATION_SESSIONS", GroupName.ACTIVITY.getDisplayName()); + Integer stateId = userRepo.getUserRole(session.getAshaId()).get(0).getStateId(); - - if(incentiveActivityAM!=null){ + if(incentiveActivityAM!=null && stateId!=null && stateId.equals(StateCode.AM.getStateCode())){ IncentiveActivityRecord record = recordRepo .findRecordByActivityIdCreatedDateBenId(incentiveActivityAM.getId(), session.getDate(), 0L,session.getAshaId()); if (record == null) { @@ -204,7 +205,7 @@ record = new IncentiveActivityRecord(); } } - if(incentiveActivityCH!=null){ + if(incentiveActivityCH!=null && stateId!=null && stateId.equals(StateCode.CG.getStateCode())){ IncentiveActivityRecord record = recordRepo .findRecordByActivityIdCreatedDateBenId(incentiveActivityCH.getId(), session.getDate(), 0L,session.getAshaId()); if (record == null) { @@ -219,12 +220,7 @@ record = new IncentiveActivityRecord(); record.setBenId(0L); record.setAshaId(session.getAshaId()); record.setAmount(Long.valueOf(incentiveActivityCH.getRate())); - if(session.getAttachmentsJson()!=null){ - record.setIsEligible(true); - }else { - record.setIsEligible(false); - updateIncentivePendindDocService.updatePendingActivity(session.getAshaId(),session.getId(),record.getId(),incentiveActivityCH.getId()); - } + record.setIsEligible(true); recordRepo.save(record); } } From b85482a6a3f6d6aba5c5700cb08a08789ec0f3cf Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 2 Mar 2026 14:01:17 +0530 Subject: [PATCH 62/65] fix: handle flexible date formats for Timestamp deserialization --- src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java index cc4f4fe1..5e94697a 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java @@ -10,7 +10,6 @@ public class DeliveryOutcomeDTO { private Long id; private Long benId; - @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp dateOfDelivery; private String timeOfDelivery; private String placeOfDelivery; @@ -23,15 +22,12 @@ public class DeliveryOutcomeDTO { private Integer deliveryOutcome; private Integer liveBirth; private Integer stillBirth; - @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp dateOfDischarge; private String timeOfDischarge; private Boolean isJSYBenificiary; private Boolean isActive; - @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp createdDate; private String createdBy; - @JsonFormat(pattern = "MMM d yyyy h:mm:ss a") private Timestamp updatedDate; private String updatedBy; } From 1eece8a294814ee1507c70adba3e22c247d3fc70 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 2 Mar 2026 14:29:26 +0530 Subject: [PATCH 63/65] fix --- .../flw/service/IncentiveLogicService.java | 2 + .../service/impl/HRPregnantServiceImpl.java | 13 ++++++ .../flw/service/impl/IncentiveLogicImpl.java | 43 +++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index 1b3529b1..ead35ffb 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -15,4 +15,6 @@ public interface IncentiveLogicService { public IncentiveActivityRecord incentiveForClusterMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); public IncentiveActivityRecord incentiveForAttendingVhsnc(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForIdentifiedPNC(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + } diff --git a/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java index c7794d0e..e84940e2 100644 --- a/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java @@ -28,9 +28,14 @@ public class HRPregnantServiceImpl implements HighRiskPregnantService { private HRPregnantAssessRepo assessRepo; @Autowired private HRPregnantTrackRepo trackRepo; + + @Autowired + private IncentiveLogicImpl incentiveLogic; private final ModelMapper modelMapper = new ModelMapper(); + + @Override public String getAllAssessments(GetBenRequestHandler request) { List dtos = new ArrayList<>(); @@ -65,6 +70,14 @@ public String saveAllAssessment(UserDataDTO requestDTO) { assess.setUserId(requestDTO.getUserId()); assessRepo.save(assess); + if(assess!=null){ + if(assess.getIsHighRisk()){ + incentiveLogic.incentiveForIdentifiedPNC(assess.getBenId(),assess.getVisitDate(),assess.getVisitDate(),assess.getUserId()); + + } + + } + }); return "no of high risk assessment items saved: " + requestDTO.getEntries().size(); } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java index c564fab7..52dc5c09 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -3,6 +3,7 @@ import com.iemr.flw.domain.iemr.IncentiveActivity; import com.iemr.flw.domain.iemr.IncentiveActivityRecord; import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.IncentiveName; import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.iemr.IncentiveRecordRepo; import com.iemr.flw.repo.iemr.IncentivesRepo; @@ -228,6 +229,48 @@ public IncentiveActivityRecord incentiveForAttendingVhsnc(Long benId, Date treat } } + @Override + public IncentiveActivityRecord incentiveForIdentifiedPNC(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityNameAM = IncentiveName.MH_HR_POSTNATAL.name(); + String activityNameCG = IncentiveName.HIGH_RISK_POSTPARTUM_HEALTH_CHECK.name(); + + if (stateCode.equals(StateCode.AM.getStateCode())) { + return processIncentive( + activityNameAM, + GroupName.MATERNAL_HEALTH.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityNameCG, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check VHSNC_MEETING Incentive Exception: ", e); + return null; + } + } + @Override public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { try { From 8996d3072cff92c3f84d7881307f80b771223a12 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 2 Mar 2026 14:31:16 +0530 Subject: [PATCH 64/65] fix --- .../java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java index e84940e2..3fd8db23 100644 --- a/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/HRPregnantServiceImpl.java @@ -71,7 +71,7 @@ public String saveAllAssessment(UserDataDTO requestDTO) { assess.setUserId(requestDTO.getUserId()); assessRepo.save(assess); if(assess!=null){ - if(assess.getIsHighRisk()){ + if(assess.getIsHighRisk()!=null && assess.getIsHighRisk()){ incentiveLogic.incentiveForIdentifiedPNC(assess.getBenId(),assess.getVisitDate(),assess.getVisitDate(),assess.getUserId()); } From 7e1b55ccbea56620e5675ea6135fc81b906f4c51 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 2 Mar 2026 15:57:49 +0530 Subject: [PATCH 65/65] fix --- .../service/impl/BeneficiaryServiceImpl.java | 89 ++++++++----------- 1 file changed, 38 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 8a60e271..6601186f 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -12,7 +12,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import java.util.stream.Stream; import com.iemr.flw.domain.iemr.EyeCheckupVisit; import com.iemr.flw.domain.iemr.IncentiveActivity; @@ -55,7 +54,6 @@ import com.iemr.flw.service.BeneficiaryService; import com.iemr.flw.utils.config.ConfigProperties; import com.iemr.flw.utils.http.HttpUtils; -import org.springframework.transaction.annotation.Transactional; @Service @Qualifier("rmnchServiceImpl") @@ -100,59 +98,48 @@ public class BeneficiaryServiceImpl implements BeneficiaryService { @Override public String getBenData(GetBenRequestHandler request, String authorisation) throws Exception { + String outputResponse = null; + int totalPage = 0; - if (request == null || request.getAshaId() == null) { - throw new Exception("Invalid/missing asha details"); - } - - if (request.getPageNo() == null || request.getPageNo() < 0) { - throw new Exception("Invalid page number"); - } - - String userName = beneficiaryRepo.getUserName(request.getAshaId()); - - if (userName == null || userName.isEmpty()) { - throw new Exception("Asha details not found, please contact administrator"); - } - - request.setUserName(userName); - - int pageSize = Integer.parseInt(door_to_door_page_size); - PageRequest pageRequest = PageRequest.of(request.getPageNo(), pageSize); - - Page pageResult; - - // ✅ Date Filter Handling - if (request.getFromDate() != null && request.getToDate() != null) { - - if (request.getFromDate().after(request.getToDate())) { - throw new Exception("Invalid date range"); - } - - pageResult = beneficiaryRepo.getBenDataWithinDates( - userName, - request.getFromDate(), - request.getToDate(), - pageRequest - ); - - } else { - - pageResult = beneficiaryRepo.getBenDataByUser(userName, pageRequest); - } - - if (!pageResult.hasContent()) { - return null; + try { + if (request != null && request.getAshaId() != null) { + List resultSet; + Integer pageSize = Integer.valueOf(door_to_door_page_size); + if (request.getPageNo() != null) { + String userName = beneficiaryRepo.getUserName(request.getAshaId()); + if (userName == null || userName.isEmpty()) + throw new Exception("Asha details not found, please contact administrator"); + + request.setUserName(userName); + + PageRequest pr = PageRequest.of(request.getPageNo(), pageSize); + if (request.getFromDate() != null && request.getToDate() != null) { + Page p = beneficiaryRepo.getBenDataWithinDates( + request.getUserName(), request.getFromDate(), request.getToDate(), pr); + resultSet = p.getContent(); + totalPage = p.getTotalPages(); + } else { + Page p = beneficiaryRepo.getBenDataByUser(request.getUserName(), + pr); + resultSet = p.getContent(); + totalPage = p.getTotalPages(); + } + if (resultSet != null && resultSet.size() > 0) { + outputResponse = getMappingsForAddressIDs(resultSet, totalPage, authorisation); + } + } else { + // page no not invalid + throw new Exception("Invalid page no"); + } + } else + throw new Exception("Invalid/missing village details"); + } catch (Exception e) { + throw new Exception(e.getMessage()); } - return getMappingsForAddressIDs( - pageResult.getContent(), - pageResult.getTotalPages(), - authorisation - ); + return outputResponse; } - private String getMappingsForAddressIDs(List addressList, int totalPage, String authorisation) { RMNCHHouseHoldDetails benHouseHoldRMNCH_ROBJ; @@ -402,6 +389,7 @@ private String getMappingsForAddressIDs(List addressLi resultMap.put("beneficiaryDetails", benDetailsRMNCH_OBJ); resultMap.put("abhaHealthDetails", healthDetails); + resultMap.put("BenRegId", m.getBenRegId()); resultMap.put("houseoldId", benDetailsRMNCH_OBJ.getHouseoldId()); resultMap.put("benficieryid", benDetailsRMNCH_OBJ.getBenficieryid()); resultMap.put("isDeath", benDetailsRMNCH_OBJ.getIsDeath()); @@ -419,7 +407,6 @@ private String getMappingsForAddressIDs(List addressLi resultMap.put("doYouHavechildren", benDetailsRMNCH_OBJ.getDoYouHavechildren()); resultMap.put("noofAlivechildren",benDetailsRMNCH_OBJ.getNoofAlivechildren()); resultMap.put("isDeactivate",benDetailsRMNCH_OBJ.getIsDeactivate()); - resultMap.put("BenRegId", m.getBenRegId()); // adding asha id / created by - user id if (benAddressOBJ.getCreatedBy() != null) {