diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java index adacdb1b..8310eb65 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java @@ -70,4 +70,5 @@ public class TBConfirmedCase { @Column(name = "updated_at") private LocalDate updatedAt; + } 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 b3988c3e..e4ce22f0 100644 --- a/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java +++ b/src/main/java/com/iemr/flw/repo/identity/BeneficiaryRepo.java @@ -26,7 +26,7 @@ public interface BeneficiaryRepo extends JpaRepository findById(Long benID); List findByHouseoldId(Long houseHoldId); - Optional findByBenficieryid(Long benID); + List findByBenficieryid(Long benID); @Query(value = "SELECT beneficiaryRegID FROM db_identity.i_beneficiarydetails_rmnch WHERE BeneficiaryId = :benId", nativeQuery = true) Long getBenRegIdFromBenId(@Param("benId") Long benId); diff --git a/src/main/java/com/iemr/flw/repo/iemr/DiseaseLeprosyRepository.java b/src/main/java/com/iemr/flw/repo/iemr/DiseaseLeprosyRepository.java index 567b62a5..36873319 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/DiseaseLeprosyRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/DiseaseLeprosyRepository.java @@ -16,4 +16,6 @@ public interface DiseaseLeprosyRepository extends JpaRepository getByCreatedBy(@Param("createdBy") String createdBy); + + } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/repo/iemr/HbncVisitRepo.java b/src/main/java/com/iemr/flw/repo/iemr/HbncVisitRepo.java index 655c0547..cbc7f568 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/HbncVisitRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/HbncVisitRepo.java @@ -1,6 +1,8 @@ package com.iemr.flw.repo.iemr; import com.iemr.flw.domain.iemr.HbncVisit; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -20,6 +22,5 @@ public interface HbncVisitRepo extends JpaRepository { HbncVisit findByBeneficiaryIdAndVisit_day(@Param("beneficiaryId") Long beneficiaryId, @Param("visitDay") String visitDay); - List findByAshaId(Integer ashaId); - + Page findByAshaId(Integer ashaId, Pageable pageable); } 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 11710e4c..8c21f0e9 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -3,6 +3,8 @@ import com.iemr.flw.domain.iemr.IncentiveActivityRecord; import jakarta.persistence.Column; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -18,41 +20,51 @@ public interface IncentiveRecordRepo extends JpaRepository { @Query(value = """ - SELECT * - FROM db_iemr.incentive_activity_record r - WHERE r.activity_id = :id - AND r.ben_id = :benId - AND MONTH(r.created_date) = MONTH(:createdDate) - AND YEAR(r.created_date) = YEAR(:createdDate) - LIMIT 1 - """, nativeQuery = true) - IncentiveActivityRecord findRecordByActivityIdCreatedDateBenId(@Param("id") Long id, @Param("createdDate") Timestamp createdDate, @Param("benId") Long benId); + SELECT * + FROM db_iemr.incentive_activity_record r + WHERE r.activity_id = :id + AND r.ben_id = :benId + AND r.asha_id = :ashaId + AND MONTH(r.start_date) = MONTH(:createdDate) + AND YEAR(r.start_date) = YEAR(:createdDate) + LIMIT 1 + """, nativeQuery = true) + IncentiveActivityRecord findRecordByActivityIdCreatedDateBenId( + @Param("id") Long id, + @Param("createdDate") Timestamp createdDate, + @Param("benId") Long benId, + @Param("ashaId") Integer ashaId); Optional 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") - IncentiveActivityRecord findRecordByActivityIdCreatedDateBenId(@Param("id") Long id, @Param("createdDate") Timestamp createdDate, @Param("benId") Long benId, @Param("ashaId") Integer ashaId); - - - @Query("SELECT record FROM IncentiveActivityRecord record " + - "WHERE record.activityId = :id " + - "AND record.createdDate BETWEEN :startDate AND :endDate " + - "AND record.benId = :benId " + // ← space added here - "AND record.ashaId = :ashaId") + @Query(value = """ + SELECT * + FROM incentive_activity_record + WHERE activity_id = :activityId + AND ben_id = :benId + AND asha_id = :ashaId + AND created_date >= :startOfMonth + AND created_date < :startOfNextMonth + ORDER BY created_date DESC + LIMIT 1 + """, nativeQuery = true) IncentiveActivityRecord findRecordByActivityIdCreatedDateBenId( - @Param("id") Long id, - @Param("startDate") Timestamp startDate, - @Param("endDate") Timestamp endDate, + @Param("activityId") Long activityId, @Param("benId") Long benId, - @Param("ashaId") Integer ashaId + @Param("ashaId") Integer ashaId, + @Param("startOfMonth") Timestamp startOfMonth, + @Param("startOfNextMonth") Timestamp startOfNextMonth ); @Query("select record from IncentiveActivityRecord record where record.ashaId = :ashaId and record.startDate >= :fromDate and record.startDate <= :toDate and record.endDate >= :fromDate and record.endDate <= :toDate ") List findRecordsByAsha(@Param("ashaId") Integer ashaId, @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); + @Query("SELECT DISTINCT record FROM IncentiveActivityRecord record WHERE record.ashaId = :ashaId") + Page findRecordsByAsha(@Param("ashaId") Integer ashaId, Pageable pageable); + @Query("SELECT DISTINCT record FROM IncentiveActivityRecord record WHERE record.ashaId = :ashaId") List findRecordsByAsha(@Param("ashaId") Integer ashaId); diff --git a/src/main/java/com/iemr/flw/repo/iemr/LeprosyFollowUpRepository.java b/src/main/java/com/iemr/flw/repo/iemr/LeprosyFollowUpRepository.java index 4227fb3a..a2b38f55 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/LeprosyFollowUpRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/LeprosyFollowUpRepository.java @@ -12,7 +12,7 @@ @Repository public interface LeprosyFollowUpRepository extends JpaRepository { - Optional findByBenId(Long benId); + List findByBenId(Long benId); // Custom queries can be added here if needed @Query("SELECT s FROM LeprosyFollowUp s WHERE s.createdBy = :createdBy") diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index d8fdd82b..cfe6aa20 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -239,20 +239,23 @@ record = new IncentiveActivityRecord(); record.setBenId(0L); record.setAshaId(meeting.getAshaId()); record.setAmount(Long.valueOf(incentiveActivity.getRate())); + record.setIsEligible(true); + recordRepo.save(record); - if (meeting.getMeetingImagesJson() != null) { - record.setIsEligible(true); - recordRepo.save(record); - - } else { - record.setIsEligible(false); - IncentiveActivityRecord activityRecord = recordRepo.save(record); - if (activityRecord != null) { - updatePendingActivity(meeting.getAshaId(), meeting.getId(), activityRecord.getId(), incentiveActivity.getId()); - - } - } +// if (meeting.getMeetingImagesJson() != null) { +// record.setIsEligible(true); +// recordRepo.save(record); +// +// } else { +// record.setIsEligible(false); +// IncentiveActivityRecord activityRecord = recordRepo.save(record); +// if (activityRecord != null) { +// updatePendingActivity(meeting.getAshaId(), meeting.getId(), activityRecord.getId(), incentiveActivity.getId()); +// +// } +// +// } } } diff --git a/src/main/java/com/iemr/flw/service/impl/AdolescentHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/AdolescentHealthServiceImpl.java index 43986a8c..8be992af 100644 --- a/src/main/java/com/iemr/flw/service/impl/AdolescentHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/AdolescentHealthServiceImpl.java @@ -126,7 +126,7 @@ private void checkAndAddIncentives(AdolescentHealth adolescentHealth) { if (sellingSanitaryActivity != null) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(sellingSanitaryActivity.getId(), adolescentHealth.getCreatedDate(), adolescentHealth.getBenId().longValue()); + .findRecordByActivityIdCreatedDateBenId(sellingSanitaryActivity.getId(), adolescentHealth.getCreatedDate(), adolescentHealth.getBenId().longValue(),adolescentHealth.getUserId()); if (record == null) { record = new IncentiveActivityRecord(); record.setActivityId(sellingSanitaryActivity.getId()); @@ -151,7 +151,7 @@ record = new IncentiveActivityRecord(); if (mobilizingADHActivity != null) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(mobilizingADHActivity.getId(), adolescentHealth.getCreatedDate(), adolescentHealth.getBenId().longValue()); + .findRecordByActivityIdCreatedDateBenId(mobilizingADHActivity.getId(), adolescentHealth.getCreatedDate(), adolescentHealth.getBenId().longValue(),adolescentHealth.getUserId()); if (record == null) { record = new IncentiveActivityRecord(); record.setActivityId(mobilizingADHActivity.getId()); diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 1d1988d4..f9c07632 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -449,7 +449,7 @@ private List parseBase64Json(String jsonString) { private void checkMonthlyPulsePolioIncentive(Integer ashaId,LocalDate startDate,LocalDate endDate) { - IncentiveActivity CHILD_MOBILIZATION_SESSIONS = incentivesRepo.findIncentiveMasterByNameAndGroup("CHILD_MOBILIZATION_SESSIONS", GroupName.ACTIVITY.getDisplayName()); + IncentiveActivity CHILD_MOBILIZATION_SESSIONS = incentivesRepo.findIncentiveMasterByNameAndGroup("PULSE_POLIO_SUPPORT", GroupName.ACTIVITY.getDisplayName()); if (CHILD_MOBILIZATION_SESSIONS != null) { addAshaIncentiveRecord(CHILD_MOBILIZATION_SESSIONS, ashaId,startDate,endDate); } @@ -480,10 +480,10 @@ private void addAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId( incentiveActivity.getId(), - startOfMonth, - endOfMonth, 0L, - ashaId + ashaId, + startOfMonth, + endOfMonth ); 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 f452916c..4903e1fc 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -21,6 +21,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -229,51 +233,62 @@ public List getHbycRecords(GetBenRequestHandler dto) { @Override public List getHBNCDetails(GetBenRequestHandler dto) { List result = new ArrayList<>(); + int page = 0; + int size = 20; + + Page visitPage; try { - List hbncVisits = hbncVisitRepo.findByAshaId(dto.getAshaId()); + do { + Pageable pageable = PageRequest.of(page, size, Sort.by("id").descending()); - for (HbncVisit visit : hbncVisits) { - HbncVisitResponseDTO responseDTO = new HbncVisitResponseDTO(); - responseDTO.setId(visit.getId()); - responseDTO.setBeneficiaryId(visit.getBeneficiaryId()); // Update with actual value - responseDTO.setHouseHoldId(visit.getHouseHoldId()); // Update with actual value - responseDTO.setVisitDate(visit.getVisit_date().split(" ")[0]); // Format visit.getVisitDate() + visitPage = hbncVisitRepo.findByAshaId(dto.getAshaId(), pageable); - // Convert all fields to Map - Map fields = new HashMap<>(); - if(visit.getVisit_day()!=null){ - addIfValid(fields, "visit_day", visit.getVisit_day()); + List hbncVisits = visitPage.getContent(); + + for (HbncVisit visit : hbncVisits) { + HbncVisitResponseDTO responseDTO = new HbncVisitResponseDTO(); + responseDTO.setId(visit.getId()); + responseDTO.setBeneficiaryId(visit.getBeneficiaryId()); // Update with actual value + responseDTO.setHouseHoldId(visit.getHouseHoldId()); // Update with actual value + responseDTO.setVisitDate(visit.getVisit_date().split(" ")[0]); // Format visit.getVisitDate() + + // Convert all fields to Map + Map fields = new HashMap<>(); + if(visit.getVisit_day()!=null){ + addIfValid(fields, "visit_day", visit.getVisit_day()); + + } + addIfValid(fields, "due_date", visit.getDue_date()); + addIfValid(fields, "is_baby_alive", convert(visit.getIs_baby_alive())); + addIfValid(fields, "date_of_death", visit.getDate_of_death()); + addIfValid(fields, "reason_for_death", visit.getReasonForDeath()); + addIfValid(fields, "place_of_death", visit.getPlace_of_death()); + addIfValid(fields, "other_place_of_death", visit.getOther_place_of_death()); + addIfValid(fields, "baby_weight", visit.getBaby_weight()); + addIfValid(fields, "urine_passed", convert(visit.getUrine_passed())); + addIfValid(fields, "stool_passed", convert(visit.getStool_passed())); + addIfValid(fields, "diarrhoea", convert(visit.getDiarrhoea())); + addIfValid(fields, "vomiting", convert(visit.getVomiting())); + addIfValid(fields, "convulsions", convert(visit.getConvulsions())); + addIfValid(fields, "activity", visit.getActivity()); + addIfValid(fields, "sucking", visit.getSucking()); + addIfValid(fields, "breathing", visit.getBreathing()); + addIfValid(fields, "chest_indrawing", visit.getChest_indrawing()); + addIfValid(fields, "temperature", visit.getTemperature()); + addIfValid(fields, "jaundice", convert(visit.getJaundice())); + addIfValid(fields, "umbilical_stump", visit.getUmbilical_stump()); + addIfValid(fields, "discharged_from_sncu", convert(visit.getDischarged_from_sncu())); + addIfValid(fields, "discharge_summary_upload", visit.getDischarge_summary_upload()); + + // Add more fields as required + + responseDTO.setFields(fields); + result.add(responseDTO); } - addIfValid(fields, "due_date", visit.getDue_date()); - addIfValid(fields, "is_baby_alive", convert(visit.getIs_baby_alive())); - addIfValid(fields, "date_of_death", visit.getDate_of_death()); - addIfValid(fields, "reason_for_death", visit.getReasonForDeath()); - addIfValid(fields, "place_of_death", visit.getPlace_of_death()); - addIfValid(fields, "other_place_of_death", visit.getOther_place_of_death()); - addIfValid(fields, "baby_weight", visit.getBaby_weight()); - addIfValid(fields, "urine_passed", convert(visit.getUrine_passed())); - addIfValid(fields, "stool_passed", convert(visit.getStool_passed())); - addIfValid(fields, "diarrhoea", convert(visit.getDiarrhoea())); - addIfValid(fields, "vomiting", convert(visit.getVomiting())); - addIfValid(fields, "convulsions", convert(visit.getConvulsions())); - addIfValid(fields, "activity", visit.getActivity()); - addIfValid(fields, "sucking", visit.getSucking()); - addIfValid(fields, "breathing", visit.getBreathing()); - addIfValid(fields, "chest_indrawing", visit.getChest_indrawing()); - addIfValid(fields, "temperature", visit.getTemperature()); - addIfValid(fields, "jaundice", convert(visit.getJaundice())); - addIfValid(fields, "umbilical_stump", visit.getUmbilical_stump()); - addIfValid(fields, "discharged_from_sncu", convert(visit.getDischarged_from_sncu())); - addIfValid(fields, "discharge_summary_upload", visit.getDischarge_summary_upload()); - - // Add more fields as required - - responseDTO.setFields(fields); - result.add(responseDTO); - checkAndAddHbncIncentives(hbncVisits, dto.getAshaId()); + page++; - } + }while (visitPage.hasNext()); } catch (Exception e) { logger.error("Error in getHBNCDetails: ", e); @@ -826,55 +841,58 @@ private void checkAndAddOrdDistributionIncentive(List orsDistri 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); } } - if (orsPacketActivityCH != null) { - if (orsDistribution.getNumOrsPackets() != null) { - createIncentiveRecordforOrsDistribution(orsDistribution, orsDistribution.getBeneficiaryId(), orsPacketActivityCH, userRepo.getUserNamedByUserId(orsDistribution.getUserId()), true); - } - } - }); } private void checkAndAddHbyncIncentives(List hbycList) { - IncentiveActivity hbync15MonethVisitActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("HBYC_QUARTERLY_VISITS", GroupName.ACTIVITY.getDisplayName()); - IncentiveActivity hbyncVisitActivity = - incentivesRepo.findIncentiveMasterByNameAndGroup("HBYC_QUARTERLY_VISITS", GroupName.CHILD_HEALTH.getDisplayName()); + if(!hbycList.isEmpty()){ + Integer userId = hbycList.get(0).getUserId(); + Integer stateId = userService.getUserDetail(userId).getStateId(); + IncentiveActivity hbync15MonethVisitActivityCH = + incentivesRepo.findIncentiveMasterByNameAndGroup("HBYC_QUARTERLY_VISITS", GroupName.ACTIVITY.getDisplayName()); + IncentiveActivity hbyncVisitActivity = + incentivesRepo.findIncentiveMasterByNameAndGroup("HBYC_QUARTERLY_VISITS", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity hbyncOrsPacketActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("ORS_DISTRIBUTION", GroupName.ACTIVITY.getDisplayName()); - hbycList.forEach(hbyc -> { - Set eligibleHbycVisits = Set.of("3 Months", "6 Months", "9 Months", "12 Months", "15 Months"); + IncentiveActivity hbyncLactatingIronPacketActivityCH = + incentivesRepo.findIncentiveMasterByNameAndGroup("LACTATING_MOTHERS_HOME_VISIT", GroupName.ACTIVITY.getDisplayName()); - if (hbyncVisitActivity != null && eligibleHbycVisits.contains(hbyc.getVisit_day())) { - createIncentiveRecordforHbyncVisit(hbyc, hbyc.getBeneficiaryId(), hbyncVisitActivity, hbyc.getCreated_by()); - } - - if (hbync15MonethVisitActivityCH != null && eligibleHbycVisits.contains(hbyc.getVisit_day())) { - createIncentiveRecordforHbyncVisit(hbyc, hbyc.getBeneficiaryId(), hbync15MonethVisitActivityCH, hbyc.getCreated_by()); - } + hbycList.forEach(hbyc -> { + Set eligibleHbycVisits = Set.of("3 Months", "6 Months", "9 Months", "12 Months", "15 Months"); + if(stateId.equals(StateCode.AM.getStateCode())){ + if (hbyncVisitActivity != null && eligibleHbycVisits.contains(hbyc.getVisit_day())) { + createIncentiveRecordforHbyncVisit(hbyc, hbyc.getBeneficiaryId(), hbyncVisitActivity, hbyc.getCreated_by()); + } + } + if(stateId.equals(StateCode.CG.getStateCode())){ + if (hbync15MonethVisitActivityCH != null && eligibleHbycVisits.contains(hbyc.getVisit_day())) { + createIncentiveRecordforHbyncVisit(hbyc, hbyc.getBeneficiaryId(), hbync15MonethVisitActivityCH, hbyc.getCreated_by()); + } + if(hbyc.getIfa_given() && eligibleHbycVisits.contains(hbyc.getVisit_day())){ + if(hbyncLactatingIronPacketActivityCH!=null){ + createIncentiveRecordforHbyncVisit(hbyc, hbyc.getBeneficiaryId(), hbyncLactatingIronPacketActivityCH, hbyc.getCreated_by()); - if (hbyncOrsPacketActivityCH != null) { - if (hbyc.getOrs_given()) { - createIncentiveRecordforHbyncOrsDistribution(hbyc, hbyc.getBeneficiaryId(), hbyncOrsPacketActivityCH, hbyc.getCreated_by()); + } + } } - } - }); + + + }); + } + } @@ -1158,7 +1176,7 @@ private void checkAndAddIncentives(List vaccinationList) { private void createIncentiveRecord(ChildVaccination vaccination, Long benId, Integer userId, IncentiveActivity immunizationActivity) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), vaccination.getCreatedDate(), benId); + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), vaccination.getCreatedDate(), benId,userId); if (record == null) { record = new IncentiveActivityRecord(); @@ -1180,7 +1198,7 @@ private void createIncentiveRecordforHbncVisit(HbncVisit hbncVisit, Long benId, logger.info("RecordIncentive" + activityName); IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), hbncVisit.getCreatedDate(), benId); + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), hbncVisit.getCreatedDate(), benId,hbncVisit.getAshaId()); if (record == null) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); @@ -1267,7 +1285,7 @@ private void createIncentiveRecordforHbyncVisit(HbycChildVisit data, Long benId, // Convert LocalDate to Timestamp (00:00:00 by default) Timestamp visitDate = Timestamp.valueOf(localDate.atStartOfDay()); IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), visitDate, benId); + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), visitDate, benId,data.getUserId()); if (record == null) { @@ -1288,41 +1306,12 @@ record = new IncentiveActivityRecord(); } - private void createIncentiveRecordforHbyncOrsDistribution(HbycChildVisit data, Long benId, IncentiveActivity immunizationActivity, String createdBy) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); - - // Convert to LocalDate - LocalDate localDate = LocalDate.parse(data.getVisit_date(), formatter); - - // Convert LocalDate to Timestamp (00:00:00 by default) - Timestamp visitDate = Timestamp.valueOf(localDate.atStartOfDay()); - IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), visitDate, benId); - - - 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(data.getUserId()); - record.setAmount(Long.valueOf(immunizationActivity.getRate())); - recordRepo.save(record); - } - } - 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); + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), visitDate, benId,data.getUserId()); double packets = Double.parseDouble(data.getNumOrsPackets()); double rate = immunizationActivity.getRate(); @@ -1336,7 +1325,7 @@ record = new IncentiveActivityRecord(); record.setEndDate(visitDate); record.setUpdatedDate(visitDate); record.setUpdatedBy(createdBy); - record.setBenId(benId); + record.setBenId(0L); record.setAshaId(data.getUserId()); if (isCH) { record.setAmount((long) rate); @@ -1359,7 +1348,7 @@ private void createIncentiveRecordforSamReferalToNrc(SamVisit data, Long benId, // Convert to LocalDate Timestamp visitDate = Timestamp.valueOf(data.getVisitDate().atStartOfDay()); IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), visitDate, benId); + .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), visitDate, benId,data.getUserId()); if (record == null) { diff --git a/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java index e6aca951..e22147af 100644 --- a/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.Base64; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Service @@ -60,6 +61,8 @@ public class CoupleServiceImpl implements CoupleService { private BeneficiaryRepo beneficiaryRepo; private final Logger logger = LoggerFactory.getLogger(CoupleServiceImpl.class); + private final ConcurrentHashMap lockMap = new ConcurrentHashMap<>(); + @Override @@ -259,7 +262,7 @@ private void checkIncentiveForChildGap(Integer stateId, String userName,List new Object()); + synchronized (lock){ + if (activity != null) { + Integer userId = userRepo.getUserIdByName(eligibleCoupleDTO.getCreatedBy()); + + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(activity.getId(), eligibleCoupleDTO.getCreatedDate(), eligibleCoupleDTO.getBenId(),userId); + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(activity.getId()); + record.setCreatedDate(eligibleCoupleDTO.getCreatedDate()); + record.setCreatedBy(eligibleCoupleDTO.getCreatedBy()); + record.setStartDate(eligibleCoupleDTO.getCreatedDate()); + record.setEndDate(eligibleCoupleDTO.getCreatedDate()); + record.setUpdatedDate(eligibleCoupleDTO.getCreatedDate()); + record.setUpdatedBy(eligibleCoupleDTO.getCreatedBy()); + record.setBenId(eligibleCoupleDTO.getBenId()); + record.setAshaId(userId); + record.setAmount(Long.valueOf(activity.getRate())); + recordRepo.save(record); + } } } + lockMap.remove(lockKey, lock); + + + } @Override @@ -572,7 +585,7 @@ private void checkAndAddAntaraIncentive(EligibleCoupleTracking ect) { private void addIncenticeRecord(EligibleCoupleTracking ect, Integer userId, IncentiveActivity antaraActivity) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(antaraActivity.getId(), ect.getCreatedDate(), ect.getBenId()); + .findRecordByActivityIdCreatedDateBenId(antaraActivity.getId(), ect.getVisitDate(), ect.getBenId(),userId); // get bene details if (record == null) { 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 2bd0ead8..b7eee7dd 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeathReportsServiceImpl.java @@ -216,17 +216,21 @@ public List getMdsrRecords(GetBenRequestHandler dto) { } private void checkAndAddIncentives(List cdrList) { + if(!cdrList.isEmpty()){ + Integer userId = userRepo.getUserIdByName(cdrList.get(0).getCreatedBy()); + cdrList.forEach(cdr -> { + IncentiveActivity immunizationActivity = + incentivesRepo.findIncentiveMasterByNameAndGroup("CHILD_DEATH_REPORTING", GroupName.CHILD_HEALTH.getDisplayName()); + createIncentiveRecord(cdr, cdr.getBenId(), userId, immunizationActivity); + if(immunizationActivity!=null){ + createIncentiveRecord(cdr,cdr.getBenId(),userId,immunizationActivity); + + } + }); + + } - 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); - if(immunizationActivity!=null){ - createIncentiveRecord(cdr,cdr.getBenId(),userId,immunizationActivity); - } - }); } @@ -263,7 +267,7 @@ private void checkAndAddIncentivesMdsr(List mdsrList) { private void createIncentiveRecord(CDR cdr, Long benId, Integer userId, IncentiveActivity immunizationActivity) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), cdr.getCreatedDate(), benId); + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), cdr.getCreatedDate(), benId,userId); if (record == null) { record = new IncentiveActivityRecord(); record.setActivityId(immunizationActivity.getId()); @@ -276,32 +280,16 @@ record = new IncentiveActivityRecord(); record.setBenId(benId); record.setAshaId(userId); record.setAmount(Long.valueOf(immunizationActivity.getRate())); - 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); + 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); - - } } } private void createIncentiveRecord(MDSR mdsr, Long benId, Integer userId, IncentiveActivity immunizationActivity) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), mdsr.getCreatedDate(), benId); + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), mdsr.getCreatedDate(), benId,userId); if (record == null) { record = new IncentiveActivityRecord(); record.setActivityId(immunizationActivity.getId()); 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 3ccd9973..3170deba 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -11,6 +11,7 @@ import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.DeliveryOutcomeDTO; import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.identity.HouseHoldRepo; import com.iemr.flw.repo.iemr.DeliveryOutcomeRepo; @@ -18,6 +19,7 @@ import com.iemr.flw.repo.iemr.IncentivesRepo; import com.iemr.flw.repo.iemr.UserServiceRoleRepo; import com.iemr.flw.service.DeliveryOutcomeService; +import com.iemr.flw.service.UserService; import jakarta.annotation.PostConstruct; import org.apache.commons.lang3.Validate; import org.modelmapper.ModelMapper; @@ -27,6 +29,10 @@ import org.springframework.stereotype.Service; import java.math.BigInteger; +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -51,6 +57,9 @@ public class DeliveryOutcomeServiceImpl implements DeliveryOutcomeService { @Autowired private UserServiceRoleRepo userRepo; + @Autowired + private UserService userService; + @Autowired private IncentiveRecordRepo recordRepo; @@ -122,85 +131,171 @@ public List getDeliveryOutcome(GetBenRequestHandler dto) { public void checkAndAddJsyIncentive(List delOutList) { + if(!delOutList.isEmpty()){ + Integer userID = userRepo.getUserIdByName(delOutList.get(0).getCreatedBy()); + Integer stateId = userService.getUserDetail(userID).getStateId(); + delOutList.forEach(deliveryOutcome -> { + + IncentiveActivity institutionalDeliveryActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MH_MOTIVATE_INST_DEL", GroupName.MATERNAL_HEALTH.getDisplayName()); + IncentiveActivity institutionalDeliveryActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("INST_DELIVERY_ESCORT", GroupName.ACTIVITY.getDisplayName()); + if (deliveryOutcome.getPlaceOfDelivery() != null) { + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + + if (placeOfDelivery != null && + (!placeOfDelivery.equalsIgnoreCase("home") || + !placeOfDelivery.equalsIgnoreCase("in transit") || + !placeOfDelivery.equalsIgnoreCase("other private hospital"))) { + + // Institutional delivery (eligible case) + if (institutionalDeliveryActivityAM != null) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), institutionalDeliveryActivityAM); + } - delOutList.forEach(deliveryOutcome -> { - - IncentiveActivity institutionalDeliveryActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MH_MOTIVATE_INST_DEL", GroupName.MATERNAL_HEALTH.getDisplayName()); - IncentiveActivity institutionalDeliveryActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("INST_DELIVERY_ESCORT", GroupName.ACTIVITY.getDisplayName()); - if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); - - if (placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || - !placeOfDelivery.equalsIgnoreCase("other private hospital"))) { - - // Institutional delivery (eligible case) - if (institutionalDeliveryActivityAM != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), institutionalDeliveryActivityAM); + if (institutionalDeliveryActivityCH != null) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), institutionalDeliveryActivityCH); + } } + } - if (institutionalDeliveryActivityCH != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), institutionalDeliveryActivityCH); + if (deliveryOutcome.getIsJSYBenificiary()) { + IncentiveActivity incentiveActivityInstJSY1 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_1ST_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); + IncentiveActivity incentiveActivityInstJSY2 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_2ND_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); + IncentiveActivity incentiveActivityInstJSY3 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_3RD_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); + IncentiveActivity incentiveActivityInstJSY4 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_4TH_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); + + + logger.info("delOutList" + gson.toJson(deliveryOutcome)); + IncentiveActivity incentiveActivityJSY1 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_1ST_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); + if (incentiveActivityJSY1 != null) { + if (deliveryOutcome.getDeliveryOutcome() == 1) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY1); + if (deliveryOutcome.getPlaceOfDelivery() != null) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY1); + } + } } - } - } - if (deliveryOutcome.getIsJSYBenificiary()) { - IncentiveActivity incentiveActivityInstJSY1 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_1ST_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); - IncentiveActivity incentiveActivityInstJSY2 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_2ND_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); - IncentiveActivity incentiveActivityInstJSY3 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_3RD_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); - IncentiveActivity incentiveActivityInstJSY4 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_4TH_DEL_INST_RURAL", GroupName.JSY.getDisplayName()); + IncentiveActivity incentiveActivityJSY2 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_2ND_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); + if (incentiveActivityJSY2 != null) { + if (deliveryOutcome.getDeliveryOutcome() == 2) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY2); + if (deliveryOutcome.getPlaceOfDelivery() != null) { - logger.info("delOutList" + gson.toJson(deliveryOutcome)); - IncentiveActivity incentiveActivityJSY1 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_1ST_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); - if (incentiveActivityJSY1 != null) { - if (deliveryOutcome.getDeliveryOutcome() == 1) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY1); - if (deliveryOutcome.getPlaceOfDelivery() != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY1); + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY2); + } } } - } + IncentiveActivity incentiveActivityJSY3 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_3RD_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); + if (incentiveActivityJSY3 != null) { + if (deliveryOutcome.getDeliveryOutcome() == 3) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY3); + if (deliveryOutcome.getPlaceOfDelivery() != null) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY3); + } + } + } - IncentiveActivity incentiveActivityJSY2 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_2ND_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); - if (incentiveActivityJSY2 != null) { - if (deliveryOutcome.getDeliveryOutcome() == 2) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY2); - if (deliveryOutcome.getPlaceOfDelivery() != null) { + IncentiveActivity incentiveActivityJSY4 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_4TH_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); + if (incentiveActivityJSY4 != null) { + if (deliveryOutcome.getDeliveryOutcome() == 4) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY4); + if (deliveryOutcome.getPlaceOfDelivery() != null) { + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY4); - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY2); + } } } + } + if(deliveryOutcome.getDeliveryOutcome()!=null){ + if(!beneficiaryRepo.findByBenficieryid(deliveryOutcome.getBenId()).isEmpty()){ + RMNCHBeneficiaryDetailsRmnch rmnchBeneficiaryDetailsRmnch = beneficiaryRepo.findByBenficieryid(deliveryOutcome.getBenId()).get(0); + LocalDate marriageDate = rmnchBeneficiaryDetailsRmnch.getDateMarriage() + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + LocalDate deliveryDate = deliveryOutcome.getDateOfDelivery() + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + long years = ChronoUnit.YEARS.between(marriageDate, deliveryDate); + if (years >= 2 && !rmnchBeneficiaryDetailsRmnch.getDoYouHavechildren()) { + if(stateId.equals(StateCode.CG.getStateCode())){ + IncentiveActivity activity = + incentivesRepo.findIncentiveMasterByNameAndGroup( + "FP_DELAY_2Y", + GroupName.ACTIVITY.getDisplayName()); + + createIncentiveRecordforYearGap(deliveryOutcome, deliveryOutcome.getBenId(), activity); + } + if(stateId.equals(StateCode.AM.getStateCode())){ + IncentiveActivity activity = + incentivesRepo.findIncentiveMasterByNameAndGroup( + "FP_DELAY_2Y", + GroupName.FAMILY_PLANNING.getDisplayName()); + + createIncentiveRecordforYearGap(deliveryOutcome, deliveryOutcome.getBenId(), activity); + } + - IncentiveActivity incentiveActivityJSY3 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_3RD_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); - if (incentiveActivityJSY3 != null) { - if (deliveryOutcome.getDeliveryOutcome() == 3) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY3); - if (deliveryOutcome.getPlaceOfDelivery() != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY3); } + } + + + } - IncentiveActivity incentiveActivityJSY4 = incentivesRepo.findIncentiveMasterByNameAndGroup("JSY_4TH_DEL_ANC_RURAL", GroupName.JSY.getDisplayName()); - if (incentiveActivityJSY4 != null) { - if (deliveryOutcome.getDeliveryOutcome() == 4) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY4); - if (deliveryOutcome.getPlaceOfDelivery() != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY4); + if(deliveryOutcome.getDeliveryOutcome()!=null){ + if(!beneficiaryRepo.findByBenficieryid(deliveryOutcome.getBenId()).isEmpty()){ + RMNCHBeneficiaryDetailsRmnch rmnchBeneficiaryDetailsRmnch = beneficiaryRepo.findByBenficieryid(deliveryOutcome.getBenId()).get(0); + LocalDate marriageDate = rmnchBeneficiaryDetailsRmnch.getDateMarriage() + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + LocalDate deliveryDate = deliveryOutcome.getDateOfDelivery() + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + long years = ChronoUnit.YEARS.between(marriageDate, deliveryDate); + + if (years >= 3 && rmnchBeneficiaryDetailsRmnch.getDoYouHavechildren()) { + if(stateId.equals(StateCode.AM.getStateCode())){ + IncentiveActivity activity = + incentivesRepo.findIncentiveMasterByNameAndGroup( + "1st_2nd_CHILD_GAP", + GroupName.FAMILY_PLANNING.getDisplayName()); + + createIncentiveRecordforYearGap(deliveryOutcome, deliveryOutcome.getBenId(), activity); + } + if(stateId.equals(StateCode.CG.getStateCode())){ + IncentiveActivity activity = + incentivesRepo.findIncentiveMasterByNameAndGroup( + "1st_2nd_CHILD_GAP", + GroupName.ACTIVITY.getDisplayName()); + + createIncentiveRecordforYearGap(deliveryOutcome, deliveryOutcome.getBenId(), activity); + } + } } + + + } - } + + }); + } - }); // JSY_ANC_URBAN // JSY_INST_URBAN @@ -213,7 +308,41 @@ private void createIncentiveRecordforJsy(DeliveryOutcome delOutList, Long benId, try { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), delOutList.getCreatedDate(), benId); + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), delOutList.getDateOfDelivery(), benId,userRepo.getUserIdByName(delOutList.getUpdatedBy())); + + + if (record == null) { + logger.info("setStartDate" + delOutList.getDateOfDelivery()); + logger.info("setCreatedDate" + delOutList.getCreatedDate()); + record = new IncentiveActivityRecord(); + record.setActivityId(immunizationActivity.getId()); + record.setCreatedDate(delOutList.getDateOfDelivery()); + record.setCreatedBy(delOutList.getCreatedBy()); + record.setStartDate(delOutList.getDateOfDelivery()); + record.setEndDate(delOutList.getDateOfDelivery()); + record.setUpdatedDate(delOutList.getDateOfDelivery()); + record.setUpdatedBy(delOutList.getCreatedBy()); + record.setBenId(benId); + record.setAshaId(userRepo.getUserIdByName(delOutList.getUpdatedBy())); + record.setAmount(Long.valueOf(immunizationActivity.getRate())); + recordRepo.save(record); + } else { + logger.info("benId:" + record.getId()); + + } + } catch (Exception e) { + logger.error("JSY Incentive:", e); + } + + + } + + private void createIncentiveRecordforYearGap(DeliveryOutcome delOutList, Long benId, IncentiveActivity immunizationActivity) { + logger.info("benId" + benId); + + try { + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(immunizationActivity.getId(), delOutList.getDateOfDelivery(), benId,userRepo.getUserIdByName(delOutList.getUpdatedBy())); if (record == null) { @@ -225,7 +354,7 @@ record = new IncentiveActivityRecord(); record.setCreatedBy(delOutList.getCreatedBy()); record.setStartDate(delOutList.getDateOfDelivery()); record.setEndDate(delOutList.getDateOfDelivery()); - record.setUpdatedDate(delOutList.getCreatedDate()); + record.setUpdatedDate(delOutList.getDateOfDelivery()); record.setUpdatedBy(delOutList.getCreatedBy()); record.setBenId(benId); record.setAshaId(userRepo.getUserIdByName(delOutList.getUpdatedBy())); 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 feb02d9e..e6a69ba2 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -305,8 +305,8 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO) { IncentiveActivityRecord incentiveActivityRecord = incentiveLogicService.incentiveForIdentificationLeprosy( screeningLeprosy.getBenId(), - screeningLeprosy.getTreatmentStartDate(), - screeningLeprosy.getTreatmentEndDate(), + screeningLeprosy.getHomeVisitDate(), + screeningLeprosy.getHomeVisitDate(), diseaseControlDTO.getUserId()); if (incentiveActivityRecord != null) { @@ -316,44 +316,6 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO) { logger.info("Incentive not created"); } } - if (screeningLeprosy.getIsConfirmed()) { - if(screeningLeprosy.getTypeOfLeprosy()!=null){ - if (screeningLeprosy.getTypeOfLeprosy().equals("PB (Paucibacillary)")) { - IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( - 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.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"); - } - - } - } - - - } return "Data add successfully"; @@ -391,38 +353,46 @@ private LeprosyFollowUp saveLeprosyFollowUpData(LeprosyFollowUpDTO data) { entity.setModifiedBy(data.getModifiedBy()); entity.setLastModDate( data.getLastModDate() != null ? data.getLastModDate() : new Timestamp(System.currentTimeMillis())); - + if(!leprosyFollowUpRepository.findByBenId(entity.getBenId()).isEmpty()){ + if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=6 && leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()<=12){ + Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( + entity.getBenId(), + entity.getTreatmentEndDate(), + entity.getTreatmentEndDate(), + userId); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + } + } + + if(!leprosyFollowUpRepository.findByBenId(entity.getBenId()).isEmpty()){ + if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=12){ + Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyMultibacillaryConfirmed( + entity.getBenId(), + entity.getTreatmentEndDate(), + entity.getTreatmentEndDate(), + userId); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + } + } return entity; } - private String updateLeprosyFollowUpData(LeprosyFollowUpDTO data, LeprosyFollowUp entity) { - entity.setVisitNumber(data.getVisitNumber()); - entity.setFollowUpDate(data.getFollowUpDate()); - entity.setTreatmentStatus(data.getTreatmentStatus()); - entity.setMdtBlisterPackReceived(data.getMdtBlisterPackReceived()); - entity.setTreatmentCompleteDate(data.getTreatmentCompleteDate()); - entity.setRemarks(data.getRemarks()); - entity.setHomeVisitDate(data.getHomeVisitDate()); - entity.setLeprosySymptoms(data.getLeprosySymptoms()); - entity.setTypeOfLeprosy(data.getTypeOfLeprosy()); - entity.setLeprosySymptomsPosition(data.getLeprosySymptomsPosition()); - entity.setVisitLabel(data.getVisitLabel()); - entity.setLeprosyStatus(data.getLeprosyStatus()); - entity.setReferredTo(data.getReferredTo()); - entity.setReferToName(data.getReferToName()); - entity.setTreatmentEndDate(data.getTreatmentEndDate()); - entity.setMdtBlisterPackRecived(data.getMdtBlisterPackRecived()); - entity.setTreatmentStartDate(data.getTreatmentStartDate()); - - // Update audit info - entity.setModifiedBy(data.getModifiedBy()); - entity.setLastModDate( - data.getLastModDate() != null ? data.getLastModDate() : new Timestamp(System.currentTimeMillis())); - - leprosyFollowUpRepository.save(entity); - return "Follow-up data updated successfully"; - } - @Override public String saveLeprosyFollowUp(LeprosyFollowUpDTO dto) { if (dto == null) @@ -443,68 +413,10 @@ public List getAllLeprosyData(String createdBy) { List dtos = new ArrayList<>(); leprosyList.forEach(leprosy -> { dtos.add(modelMapper.map(leprosy, DiseaseGetLeprosyDTO.class)); - checkAndIncentive(leprosy,leprosy.getUserId()); }); return dtos; } - private void checkAndIncentive(ScreeningLeprosy screeningLeprosy,Integer userId){ - if(screeningLeprosy.getIsConfirmed()){ - IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForIdentificationLeprosy( - screeningLeprosy.getBenId(), - screeningLeprosy.getTreatmentStartDate(), - screeningLeprosy.getTreatmentEndDate(), - userId); - - if (incentiveActivityRecord != null) { - logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", - incentiveActivityRecord.getId()); - } else { - logger.info("Incentive not created"); - } - } - if (screeningLeprosy.getIsConfirmed()) { - if(screeningLeprosy.getTypeOfLeprosy()!=null){ - if (screeningLeprosy.getTypeOfLeprosy().equals("PB (Paucibacillary)")) { - IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( - screeningLeprosy.getBenId(), - screeningLeprosy.getTreatmentStartDate(), - screeningLeprosy.getTreatmentEndDate(), - userId); - - 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(), - userId); - - if (incentiveActivityRecord != null) { - logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", - incentiveActivityRecord.getId()); - } else { - logger.info("Incentive not created"); - } - - } - } - - - - } - } - @Override public List getAllLeprosyFollowUpData(String createdBy) { logger.info("Fetching leprosy data for createdBy: " + createdBy); @@ -1368,7 +1280,7 @@ private void addIncentive(IncentiveActivity diseaseScreeningActivity, MosquitoNe .findRecordByActivityIdCreatedDateBenId( diseaseScreeningActivity.getId(), visitTimestamp, - diseaseScreening.getBeneficiaryId()); + diseaseScreening.getBeneficiaryId(),diseaseScreening.getUserId()); if (record == null) { @@ -1394,16 +1306,19 @@ record = new IncentiveActivityRecord(); private void addIncentive(IncentiveActivity diseaseScreeningActivity, ScreeningMalaria diseaseScreening) { try { + Timestamp screeningTimestamp = diseaseScreening.getScreeningDate() != null + ? new Timestamp(diseaseScreening.getScreeningDate().getTime()) + : null; IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(diseaseScreeningActivity.getId(), Timestamp.valueOf(diseaseScreening.getCreatedDate().toString()), diseaseScreening.getBenId().longValue()); + .findRecordByActivityIdCreatedDateBenId(diseaseScreeningActivity.getId(), Timestamp.valueOf(diseaseScreening.getCreatedDate().toString()), diseaseScreening.getBenId().longValue(),diseaseScreening.getUserId()); if (record == null) { record = new IncentiveActivityRecord(); record.setActivityId(diseaseScreeningActivity.getId()); - record.setCreatedDate(Timestamp.valueOf(diseaseScreening.getCreatedDate().toString())); + record.setCreatedDate(screeningTimestamp); record.setCreatedBy(userService.getUserDetail(diseaseScreening.getUserId()).getUserName()); - record.setStartDate(Timestamp.valueOf(diseaseScreening.getCreatedDate().toString())); - record.setEndDate(Timestamp.valueOf(diseaseScreening.getCreatedDate().toString())); - record.setUpdatedDate(Timestamp.valueOf(diseaseScreening.getCreatedDate().toString())); + record.setStartDate(screeningTimestamp); + record.setEndDate(screeningTimestamp); + record.setUpdatedDate(screeningTimestamp); record.setUpdatedBy(userService.getUserDetail(diseaseScreening.getUserId()).getUserName()); record.setUpdatedBy(userService.getUserDetail(diseaseScreening.getUserId()).getUserName()); record.setBenId(diseaseScreening.getBenId().longValue()); @@ -1475,8 +1390,9 @@ private void checkIncentive(ChronicDiseaseVisitEntity chronicDiseaseVisitEntity, Integer stateId = userService.getUserDetail(ashaId).getStateId(); IncentiveActivity incentiveActivity = incentivesRepo.findIncentiveMasterByNameAndGroup("NCD_FOLLOWUP_TREATMENT", GroupName.NCD.getDisplayName()); IncentiveActivity incentiveActivityCG = incentivesRepo.findIncentiveMasterByNameAndGroup("NCD_FOLLOWUP_TREATMENT", GroupName.ACTIVITY.getDisplayName()); + IncentiveActivity incentiveActivityCGForNCDnewPatient = incentivesRepo.findIncentiveMasterByNameAndGroup("NCD_NEW_PATIENT_MEDICATION_SUPPORT", GroupName.ACTIVITY.getDisplayName()); logger.info("incentiveActivity:" + incentiveActivity.getId()); - if (incentiveActivity != null) { + if (chronicDiseaseVisitEntity.getFollowUpNo() != null && chronicDiseaseVisitEntity.getCreatedDate() != null && chronicDiseaseVisitEntity.getDiagnosisCodes() != null) { @@ -1487,6 +1403,7 @@ private void checkIncentive(ChronicDiseaseVisitEntity chronicDiseaseVisitEntity, "Cancer" ); + List diagnosisList = Arrays.asList( chronicDiseaseVisitEntity.getDiagnosisCodes().split(",") ); @@ -1494,7 +1411,18 @@ private void checkIncentive(ChronicDiseaseVisitEntity chronicDiseaseVisitEntity, boolean matchFound = diagnosisList.stream() .map(String::trim) .anyMatch(targetDiseases::contains); - + if(matchFound & Integer.valueOf(0).equals(chronicDiseaseVisitEntity.getFollowUpNo()) ){ + LocalDateTime localDateTime = chronicDiseaseVisitEntity.getTreatmentStartDate().atStartOfDay(); + + Timestamp treatmentStartDate = Timestamp.valueOf(localDateTime); + addNCDFolloupIncentiveRecord( + incentiveActivityCGForNCDnewPatient, + ashaId, + chronicDiseaseVisitEntity.getBenId(), + treatmentStartDate, + userName + ); + } if (matchFound && Integer.valueOf(6).equals(chronicDiseaseVisitEntity.getFollowUpNo())) { LocalDateTime localDateTime = chronicDiseaseVisitEntity.getFollowUpDate().atStartOfDay(); @@ -1520,7 +1448,7 @@ private void checkIncentive(ChronicDiseaseVisitEntity chronicDiseaseVisitEntity, } } - } + } @@ -1529,7 +1457,7 @@ private void addNCDFolloupIncentiveRecord(IncentiveActivity incentiveActivity, I Long benId, Timestamp createdDate, String userName) { try { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), createdDate, benId); + .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), createdDate, benId,ashaId); Timestamp now = Timestamp.valueOf(LocalDateTime.now()); if (record == null) { diff --git a/src/main/java/com/iemr/flw/service/impl/IFAFormSubmissionServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IFAFormSubmissionServiceImpl.java index 76e8dc58..362dc1ea 100644 --- a/src/main/java/com/iemr/flw/service/impl/IFAFormSubmissionServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IFAFormSubmissionServiceImpl.java @@ -121,7 +121,7 @@ private void addIFAIncentive(IFAFormSubmissionData ifaFormSubmissionData, Incent Timestamp ifaVisitDateTimestamp = Timestamp.valueOf(ifaVisitDate.atStartOfDay()); - IncentiveActivityRecord incentiveActivityRecord = incentiveRecordRepo.findRecordByActivityIdCreatedDateBenId(incentiveActivityAM.getId(),ifaVisitDateTimestamp,ifaFormSubmissionData.getBeneficiaryId()); + IncentiveActivityRecord incentiveActivityRecord = incentiveRecordRepo.findRecordByActivityIdCreatedDateBenId(incentiveActivityAM.getId(),ifaVisitDateTimestamp,ifaFormSubmissionData.getBeneficiaryId(),userServiceRoleRepo.getUserIdByName(ifaFormSubmissionData.getUserName())); if(incentiveActivityRecord==null){ incentiveActivityRecord = new IncentiveActivityRecord(); incentiveActivityRecord.setActivityId(incentiveActivityAM.getId()); 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 2802fa92..b6e4b7c7 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -132,7 +132,7 @@ public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed( return null; } - String activityName = "NLEP_PB_TREATMENT"; + String activityName = "NLEP_MB_TREATMENT"; if (stateCode.equals(StateCode.AM.getStateCode())) { return processIncentive( @@ -159,7 +159,7 @@ public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed( return null; } catch (Exception e) { - logger.error("Check NLEP_PB_TREATMENT Incentive Exception: ", e); + logger.error("Check NLEP_MB_TREATMENT Incentive Exception: ", e); return null; } } @@ -672,7 +672,7 @@ private IncentiveActivityRecord saveIncentive( // 🔍 duplicate check IncentiveActivityRecord existing = incentiveRecordRepo .findRecordByActivityIdCreatedDateBenId( - activity.getId(), startTimestamp, benId); + activity.getId(), startTimestamp, benId,userId); if (existing != null) { logger.info("Incentive already exists for benId: {}, activityId: {}", 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 5ff7ddb2..f109c88a 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -22,6 +22,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -33,6 +37,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.stream.Collectors; @@ -78,6 +83,9 @@ public class IncentiveServiceImpl implements IncentiveService { @Autowired private IFAFormSubmissionRepository ifaFormSubmissionRepository; + private final ConcurrentHashMap lockMap = new ConcurrentHashMap<>(); + + // ================= MASTER SAVE ================= @Override @@ -187,6 +195,10 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { @Override public String getAllIncentivesByUserId(GetBenRequestHandler request) { + int page = 0; + int size = 20; + Page pageResult; + List finalDtos = new ArrayList<>(); Integer stateCode = userService.getUserDetail(request.getAshaId()).getStateId(); String userName = userService.getUserDetail(request.getAshaId()).getUserName(); @@ -199,7 +211,6 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { checkMonthlyAshaIncentiveForCg(request.getAshaId()); } - checkIncentiveForChildGap(stateCode, userName); } catch (Exception e) { logger.error("Error in checkMonthlyAshaIncentive: ", e); @@ -215,86 +226,105 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { boolean isCG = stateCode != null && stateCode.equals(StateCode.CG.getStateCode()); - // Step 1: Fetch all records for this ASHA - List entities = recordRepo.findRecordsByAsha(request.getAshaId()); + do { - if (entities.isEmpty()) { - return new Gson().toJson(Collections.emptyList()); - } + Pageable pageable = PageRequest.of( + page, + size, + Sort.by("id").descending() // latest first + ); - // Step 2: Collect all activityIds — fetch valid ones in ONE query - List activityIds = entities.stream() - .map(IncentiveActivityRecord::getActivityId) - .distinct() - .collect(Collectors.toList()); + pageResult = recordRepo.findRecordsByAsha( + request.getAshaId(), + pageable + ); - // Single bulk query instead of N individual findIncentiveMasterById() calls - Set validActivityIds = isCG - ? incentivesRepo.findValidActivityIds(activityIds, true) - : incentivesRepo.findValidActivityIds(activityIds, false); + List entities = pageResult.getContent(); - // Filter entities based on valid activity IDs - entities = entities.stream() - .filter(e -> validActivityIds.contains(e.getActivityId())) - .collect(Collectors.toList()); + if (entities.isEmpty()) { + return new Gson().toJson(Collections.emptyList()); + } - // Step 3: Collect all benIds that need name lookup (name == null and benId > 0) - List benIdsToFetch = entities.stream() - .filter(e -> e.getName() == null && e.getBenId() != null && e.getBenId() > 0) - .map(IncentiveActivityRecord::getBenId) - .distinct() - .collect(Collectors.toList()); + // Step 2: Collect all activityIds — fetch valid ones in ONE query + List activityIds = entities.stream() + .map(IncentiveActivityRecord::getActivityId) + .distinct() + .collect(Collectors.toList()); - // Step 4: Bulk fetch all beneficiary names in ONE query instead of 3 queries per record - Map benIdToNameMap = new HashMap<>(); - if (!benIdsToFetch.isEmpty()) { - List benDetails = beneficiaryRepo.findBenNamesByBenIds(benIdsToFetch); - for (Object[] row : benDetails) { - Long benId = ((Number) row[0]).longValue(); - String first = row[1] != null ? (String) row[1] : ""; - String last = row[2] != null ? (String) row[2] : ""; - benIdToNameMap.put(benId, (first + " " + last).trim()); - } - } + // Single bulk query instead of N individual findIncentiveMasterById() calls + Set validActivityIds = isCG + ? incentivesRepo.findValidActivityIds(activityIds, true) + : incentivesRepo.findValidActivityIds(activityIds, false); - // Step 5: Map entities to DTOs - List dtos = entities.stream().map(entry -> { - if (entry.getName() == null) { - if (entry.getBenId() != null && entry.getBenId() > 0) { - String name = benIdToNameMap.getOrDefault(entry.getBenId(), ""); - entry.setName(name); - if (isCG) { - entry.setIsEligible(true); - } - } else { - entry.setName(""); - } - if (entry.getVerifiedByUserId() != null) { - entry.setSupervisorRole(userRepo.getUserRole(entry.getVerifiedByUserId()).get(0).getRoleName()); - entry.setVerifiedByUserName(userRepo.getUserRole(entry.getVerifiedByUserId()).get(0).getName()); + // Filter entities based on valid activity IDs + entities = entities.stream() + .filter(e -> validActivityIds.contains(e.getActivityId())) + .collect(Collectors.toList()); + // Step 3: Collect all benIds that need name lookup (name == null and benId > 0) + List benIdsToFetch = entities.stream() + .filter(e -> e.getName() == null && e.getBenId() != null && e.getBenId() > 0) + .map(IncentiveActivityRecord::getBenId) + .distinct() + .collect(Collectors.toList()); + + // Step 4: Bulk fetch all beneficiary names in ONE query instead of 3 queries per record + Map benIdToNameMap = new HashMap<>(); + if (!benIdsToFetch.isEmpty()) { + List benDetails = beneficiaryRepo.findBenNamesByBenIds(benIdsToFetch); + for (Object[] row : benDetails) { + Long benId = ((Number) row[0]).longValue(); + String first = row[1] != null ? (String) row[1] : ""; + String last = row[2] != null ? (String) row[2] : ""; + benIdToNameMap.put(benId, (first + " " + last).trim()); } - if (entry.getAshaId() != null) { - if (entry.getCreatedBy() == null) { - entry.setCreatedBy(userName); + } + + // Step 5: Map entities to DTOs + List dtos = entities.stream().map(entry -> { + if (entry.getName() == null) { + if (entry.getBenId() != null && entry.getBenId() > 0) { + String name = benIdToNameMap.getOrDefault(entry.getBenId(), ""); + entry.setName(name); + if (isCG) { + entry.setIsEligible(true); + } + } else { + entry.setName(""); } + if (entry.getVerifiedByUserId() != null) { + entry.setSupervisorRole(userRepo.getUserRole(entry.getVerifiedByUserId()).get(0).getRoleName()); + entry.setVerifiedByUserName(userRepo.getUserRole(entry.getVerifiedByUserId()).get(0).getName()); - if (entry.getUpdatedBy() == null) { - entry.setUpdatedBy(userName); } + if (entry.getAshaId() != null) { + if (entry.getCreatedBy() == null) { + entry.setCreatedBy(userName); + } + + if (entry.getUpdatedBy() == null) { + entry.setUpdatedBy(userName); + } - if (entry.getIsEligible() == null) { - entry.setIsEligible(true); + if (entry.getIsEligible() == null) { + entry.setIsEligible(true); + } } + + } + return modelMapper.map(entry, IncentiveRecordDTO.class); + }).collect(Collectors.toList()); + finalDtos.addAll(dtos); + + page++; + + } while (pageResult.hasNext()); - } - return modelMapper.map(entry, IncentiveRecordDTO.class); - }).collect(Collectors.toList()); Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); - return gson.toJson(dtos); + return gson.toJson(finalDtos); } // ================= GROUPED SUMMARY ================= @@ -569,27 +599,13 @@ private void incentiveOfNcdReferal(Integer ashaId, Integer stateId) { if (ncdPopEnumeration != null && !cbacDetailsImer.isEmpty()) { - List cbacBenIds = cbacDetailsImer.stream() - .filter(c -> c != null && c.getBeneficiaryRegId() != null) - .map(CbacDetailsImer::getBeneficiaryRegId) - .collect(Collectors.toList()); - - // Batch fetch existing records — 1 query instead of N - Set existingKeys = recordRepo - .findExistingRecords(ncdPopEnumeration.getId(), cbacBenIds, ashaId) - .stream() - .map(r -> r.getActivityId() + "_" + r.getBenId() + "_" + r.getCreatedDate()) - .collect(Collectors.toSet()); final IncentiveActivity activity = ncdPopEnumeration; - cbacDetailsImer.stream() - .filter(c -> c != null && c.getBeneficiaryRegId() != null) - .forEach(c -> { - String key = activity.getId() + "_" + c.getBeneficiaryRegId() + "_" + c.getCreatedDate(); - if (!existingKeys.contains(key)) { - recordsToSave.add(addNCDandCBACIncentiveRecord(activity, ashaId, c.getBeneficiaryRegId(), c.getCreatedDate(), userName)); - } - }); + cbacDetailsImer.forEach(cbacDetailsImer1 -> { + if(cbacDetailsImer1!=null){ + addNCDandCBACIncentiveRecord(activity, ashaId, cbacDetailsImer1.getBeneficiaryRegId(), cbacDetailsImer1.getCreatedDate(), userName); + } + }); } if (hwcReferralEnumeration != null) { @@ -627,21 +643,34 @@ private void incentiveOfNcdReferal(Integer ashaId, Integer stateId) { } // Helper — record banana - private IncentiveActivityRecord addNCDandCBACIncentiveRecord(IncentiveActivity activity, Integer ashaId, + private void addNCDandCBACIncentiveRecord(IncentiveActivity activity, Integer ashaId, Long benId, Timestamp createdDate, String userName) { - Timestamp now = Timestamp.valueOf(LocalDateTime.now()); - IncentiveActivityRecord record = new IncentiveActivityRecord(); - record.setActivityId(activity.getId()); - record.setCreatedDate(createdDate); - record.setCreatedBy(userName); - record.setStartDate(createdDate); - record.setEndDate(createdDate); - record.setUpdatedDate(now); - record.setUpdatedBy(userName); - record.setBenId(benId); - record.setAshaId(ashaId); - record.setAmount(Long.valueOf(activity.getRate())); - return record; + + String lockKey = activity.getId() + "_" + benId + "_" + createdDate; + + Object lock = lockMap.computeIfAbsent(lockKey, k -> new Object()); + synchronized (lock){ + IncentiveActivityRecord incentiveActivityRecord = recordRepo.findRecordByActivityIdCreatedDateBenId(activity.getId(),createdDate,benId,ashaId); + if(incentiveActivityRecord==null){ + Timestamp now = Timestamp.valueOf(LocalDateTime.now()); + IncentiveActivityRecord record = new IncentiveActivityRecord(); + record.setActivityId(activity.getId()); + record.setCreatedDate(createdDate); + record.setCreatedBy(userName); + record.setStartDate(createdDate); + record.setEndDate(createdDate); + record.setUpdatedDate(now); + record.setUpdatedBy(userName); + record.setBenId(benId); + record.setAshaId(ashaId); + record.setAmount(Long.valueOf(activity.getRate())); + recordRepo.save(record); + } + lockMap.remove(lockKey, lock); + + } + + } private String resolveGroupName(Integer stateId) { @@ -654,6 +683,7 @@ private String resolveGroupName(Integer stateId) { } private void checkMonthlyAshaIncentive(Integer ashaId) { + try { String userName = userRepo.getUserNamedByUserId(ashaId); @@ -714,10 +744,10 @@ private void addMonthlyAshaIncentiveRecord(IncentiveActivity incentiveActivity, IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId( incentiveActivity.getId(), - startOfMonth, - endOfMonth, 0L, - ashaId + ashaId, + startOfMonth, + endOfMonth ); @@ -753,10 +783,10 @@ private void addHwcReferalAshaIncentiveRecord(IncentiveActivity incentiveActivit IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId( incentiveActivity.getId(), - startOfMonth, - endOfMonth, 0L, - ashaId + ashaId, + startOfMonth, + endOfMonth ); @@ -830,166 +860,46 @@ private void addIncentiveForIronTablets(Integer userId) { } private void addIFAIncentive(IFAFormSubmissionData ifaFormSubmissionData, IncentiveActivity incentiveActivityAM, Integer userId, String userName) { - Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now()); - Timestamp startOfMonth = Timestamp.valueOf(LocalDate.now().withDayOfMonth(1).atStartOfDay()); Timestamp endOfMonth = Timestamp.valueOf(LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth()).atTime(23, 59, 59)); - logger.info("IFA incentive"); - IncentiveActivityRecord incentiveActivityRecord = recordRepo.findRecordByActivityIdCreatedDateBenId( - incentiveActivityAM.getId(), - startOfMonth, - endOfMonth, - 0L, - userId - ); - if (incentiveActivityRecord == null) { - incentiveActivityRecord = new IncentiveActivityRecord(); - incentiveActivityRecord.setActivityId(incentiveActivityAM.getId()); - incentiveActivityRecord.setCreatedDate(timestamp); - incentiveActivityRecord.setStartDate(timestamp); - incentiveActivityRecord.setEndDate(timestamp); - incentiveActivityRecord.setUpdatedDate(timestamp); - incentiveActivityRecord.setUpdatedBy(ifaFormSubmissionData.getUserName()); - incentiveActivityRecord.setCreatedBy(ifaFormSubmissionData.getUserName()); - incentiveActivityRecord.setBenId(0L); - incentiveActivityRecord.setAshaId(userId); - incentiveActivityRecord.setAmount(Long.valueOf(incentiveActivityAM.getRate())); - recordRepo.save(incentiveActivityRecord); - logger.info("saved IFA incentive"); - - } - } - - private void checkIncentiveForChildGap(Integer stateId, String userName) { - - logger.info("Checking Child Gap Incentive for user: {}, stateId: {}", userName, stateId); - - List eligibleCoupleRegisters = eligibleCoupleRegisterRepo.findByCreatedBy(userName); - - logger.info("Eligible Couple Records Found: {}", eligibleCoupleRegisters.size()); - - if (!eligibleCoupleRegisters.isEmpty()) { - - eligibleCoupleRegisters.forEach(eligibleCoupleRegister -> { - - logger.info( - "Processing EligibleCoupleRegister -> BenId: {}, NumChildren: {}, MarriageFirstChildGap: {}, FirstAndSecondChildGap: {}", - eligibleCoupleRegister.getBenId(), - eligibleCoupleRegister.getNumChildren(), - eligibleCoupleRegister.getMarriageFirstChildGap(), - eligibleCoupleRegister.getFirstAndSecondChildGap()); - - // Marriage -> First Child Gap - if(eligibleCoupleRegister.getFirstAndSecondChildGap()!=null){ - if (eligibleCoupleRegister.getFirstAndSecondChildGap()>=3 ) { - - logger.info("Marriage -> First Child Gap condition matched."); - - if (stateId.equals(StateCode.AM.getStateCode())) { - - logger.info("Fetching incentive for Assam."); - - IncentiveActivity activity1 = - incentivesRepo.findIncentiveMasterByNameAndGroup( - "FP_DELAY_2Y", - GroupName.FAMILY_PLANNING.getDisplayName()); - - logger.info("Incentive Activity: {}", activity1); - - createIncentiveRecord(eligibleCoupleRegister, activity1); - - logger.info("Marriage -> First Child Gap incentive created."); - } - - if (stateId.equals(StateCode.CG.getStateCode())) { - - logger.info("Fetching incentive for Chhattisgarh."); - - IncentiveActivity activityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup( - "FP_DELAY_2Y", - GroupName.ACTIVITY.getDisplayName()); - - logger.info("Incentive Activity: {}", activityCH); - - createIncentiveRecord(eligibleCoupleRegister, activityCH); - - logger.info("Marriage -> First Child Gap incentive created."); - } - } - } - + String lockKey = incentiveActivityAM.getId() + "_" + 0 + "_" + startOfMonth; - // First -> Second Child Gap - if(eligibleCoupleRegister.getMarriageFirstChildGap()!=null){ - if (eligibleCoupleRegister.getMarriageFirstChildGap()>=2) { - - logger.info("1st -> 2nd Child Gap condition matched."); - - if (stateId.equals(StateCode.AM.getStateCode())) { - - logger.info("Fetching incentive for Assam."); - - IncentiveActivity activity2 = - incentivesRepo.findIncentiveMasterByNameAndGroup( - "1st_2nd_CHILD_GAP", - GroupName.FAMILY_PLANNING.getDisplayName()); - - logger.info("Incentive Activity: {}", activity2); - - createIncentiveRecord(eligibleCoupleRegister, activity2); - - logger.info("1st -> 2nd Child Gap incentive created."); - } - - if (stateId.equals(StateCode.CG.getStateCode())) { - - logger.info("Fetching incentive for Chhattisgarh."); - - IncentiveActivity activityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup( - "1st_2nd_CHILD_GAP", - GroupName.ACTIVITY.getDisplayName()); - - logger.info("Incentive Activity: {}", activityCH); + Object lock = lockMap.computeIfAbsent(lockKey, k -> new Object()); + Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now()); - createIncentiveRecord(eligibleCoupleRegister, activityCH); - logger.info("1st -> 2nd Child Gap incentive created."); - } - } - } + logger.info("IFA incentive"); + synchronized (lock){ + IncentiveActivityRecord incentiveActivityRecord = recordRepo.findRecordByActivityIdCreatedDateBenId( + incentiveActivityAM.getId(), + 0L, + userId, + startOfMonth, + endOfMonth + ); + if (incentiveActivityRecord == null) { + incentiveActivityRecord = new IncentiveActivityRecord(); + incentiveActivityRecord.setActivityId(incentiveActivityAM.getId()); + incentiveActivityRecord.setCreatedDate(timestamp); + incentiveActivityRecord.setStartDate(timestamp); + incentiveActivityRecord.setEndDate(timestamp); + incentiveActivityRecord.setUpdatedDate(timestamp); + incentiveActivityRecord.setUpdatedBy(ifaFormSubmissionData.getUserName()); + incentiveActivityRecord.setCreatedBy(ifaFormSubmissionData.getUserName()); + incentiveActivityRecord.setBenId(0L); + incentiveActivityRecord.setAshaId(userId); + incentiveActivityRecord.setAmount(Long.valueOf(incentiveActivityAM.getRate())); + recordRepo.save(incentiveActivityRecord); + logger.info("saved IFA incentive"); - }); + } - } else { - logger.info("No Eligible Couple Register records found for user: {}", userName); } + lockMap.remove(lockKey, lock); - logger.info("Completed Child Gap Incentive check for user: {}", userName); - } - private void createIncentiveRecord(EligibleCoupleRegister eligibleCoupleRegister, IncentiveActivity activity) { - if (activity != null) { - IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(activity.getId(), eligibleCoupleRegister.getCreatedDate(), eligibleCoupleRegister.getBenId()); - Integer userId = userRepo.getUserIdByName(eligibleCoupleRegister.getCreatedBy()); - if (record == null) { - record = new IncentiveActivityRecord(); - record.setActivityId(activity.getId()); - record.setCreatedDate(eligibleCoupleRegister.getCreatedDate()); - record.setCreatedBy(eligibleCoupleRegister.getCreatedBy()); - record.setStartDate(eligibleCoupleRegister.getCreatedDate()); - record.setEndDate(eligibleCoupleRegister.getCreatedDate()); - record.setUpdatedDate(eligibleCoupleRegister.getCreatedDate()); - record.setUpdatedBy(eligibleCoupleRegister.getCreatedBy()); - record.setBenId(eligibleCoupleRegister.getBenId()); - record.setAshaId(userId); - record.setAmount(Long.valueOf(activity.getRate())); - recordRepo.save(record); - } - } } + } diff --git a/src/main/java/com/iemr/flw/service/impl/InfantServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/InfantServiceImpl.java index 03af282a..bd040990 100644 --- a/src/main/java/com/iemr/flw/service/impl/InfantServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/InfantServiceImpl.java @@ -98,7 +98,7 @@ private void checkAndGenerateIncentive(List infantList) { } private void addIsSncuIncentive(IncentiveActivity activity, Long benId, String createdBy, Timestamp createdDate) { - IncentiveActivityRecord incentiveActivityRecord = incentiveRecordRepo.findRecordByActivityIdCreatedDateBenId(activity.getId(),createdDate,benId); + IncentiveActivityRecord incentiveActivityRecord = incentiveRecordRepo.findRecordByActivityIdCreatedDateBenId(activity.getId(),createdDate,benId,userServiceRoleRepo.getUserIdByName(createdBy)); if(incentiveActivityRecord==null){ incentiveActivityRecord = new IncentiveActivityRecord(); 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 0b14f90a..41849ee3 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -29,6 +29,7 @@ import java.time.format.DateTimeParseException; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Service @@ -91,6 +92,9 @@ public class MaternalHealthServiceImpl implements MaternalHealthService { public static final List PNC_PERIODS = Arrays.asList("1st Day", "3rd Day", "7th Day", "14th Day", "21st Day", "28th Day", "42nd Day"); + private final ConcurrentHashMap lockMap = new ConcurrentHashMap<>(); + + @Override public String registerPregnantWoman(List pregnantWomanDTOs) { @@ -148,7 +152,7 @@ public List getANCVisits(GetBenRequestHandler dto) { .map(anc -> mapper.convertValue(anc, ANCVisitDTO.class)) .collect(Collectors.toList()); } catch (Exception e) { - logger.error("ANC VISIT :---------------------"+e.getMessage()); + logger.error("ANC VISIT :---------------------" + e.getMessage()); } return null; } @@ -170,7 +174,7 @@ public String saveANCVisit(List ancVisitDTOs, Integer userId) { List ancVisitList = ancVisitRepo.findANCVisitByBenIdAndAncVisitAndIsActive(it.getBenId(), it.getAncVisit(), true); ANCVisit ancVisit = new ANCVisit(); - if(!ancVisitList.isEmpty()){ + if (!ancVisitList.isEmpty()) { ancVisit = ancVisitList.get(0); } logger.info("ANC visit fetch completed"); @@ -351,7 +355,7 @@ private void checkAndAddHighRisk(List pmsmaList) { private void addIncentiveForHighRisk(IncentiveActivity incentiveActivity, PMSMA pmsma) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), pmsma.getCreatedDate(), pmsma.getBenId()); + .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), pmsma.getCreatedDate(), pmsma.getBenId(),userRepo.getUserIdByName(pmsma.getCreatedBy())); // get bene details if (record == null) { @@ -375,11 +379,6 @@ public List getPNCVisits(GetBenRequestHandler dto) { try { String user = beneficiaryRepo.getUserName(dto.getAshaId()); List pncVisits = pncVisitRepo.getPNCForPW(user); - pncVisits.forEach(pncVisit -> { - checkAndAddAntaraIncentive(pncVisit); - - }); - return pncVisits.stream() .map(pnc -> mapper.convertValue(pnc, PNCVisitDTO.class)) .collect(Collectors.toList()); @@ -448,7 +447,7 @@ public String savePNCVisit(List pncVisitDTOs) { @Override @Transactional public String saveANCVisitQuestions(List dtos, String authorization) throws IEMRException { - Integer userId = jwtUtil.extractUserId(authorization); + Integer userId = jwtUtil.extractUserId(authorization); String userName = userRepo.getUserNamedByUserId(userId); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); @@ -595,7 +594,7 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { logger.info("ContraceptionMethod:" + ect.getContraceptionMethod()); // logic for assam - if(stateId.equals(StateCode.AM.getStateCode())){ + if (stateId.equals(StateCode.AM.getStateCode())) { if (ect.getContraceptionMethod() != null && ect.getContraceptionMethod().equals("MALE STERILIZATION")) { IncentiveActivity maleSterilizationActivityAM = @@ -646,33 +645,49 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } // logic for cg - if(stateId.equals(StateCode.CG.getStateCode())){ + if (stateId.equals(StateCode.CG.getStateCode())) { + if (ect.getAnyContraceptionMethod() != null) { + if (ect.getAnyContraceptionMethod()) { + IncentiveActivity femaleSterilizationActivityCH = + incentivesRepo.findIncentiveMasterByNameAndGroup("FP_FEMALE_STER", GroupName.ACTIVITY.getDisplayName()); - IncentiveActivity PPIUCDActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("FP_PPIUCD", GroupName.ACTIVITY.getDisplayName()); + IncentiveActivity PPIUCDActivityCH = + incentivesRepo.findIncentiveMasterByNameAndGroup("FP_PPIUCD", GroupName.ACTIVITY.getDisplayName()); - if (PPIUCDActivityCH != null) { - addIncenticeRecord(ect, userId, PPIUCDActivityCH); - } + IncentiveActivity maleSterilizationActivityCH = + incentivesRepo.findIncentiveMasterByNameAndGroup("FP_MALE_STER", GroupName.ACTIVITY.getDisplayName()); - IncentiveActivity femaleSterilizationActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("FP_FEMALE_STER", GroupName.ACTIVITY.getDisplayName()); + if (PPIUCDActivityCH != null) { + if (ect.getContraceptionMethod().equals("POST PARTUM IUCD (PPIUCD)")) { + addIncenticeRecord(ect, userId, PPIUCDActivityCH); + + } + } + + + if (femaleSterilizationActivityCH != null) { + if (ect.getContraceptionMethod().equals("FEMALE STERILIZATION")) { + addIncenticeRecord(ect, userId, femaleSterilizationActivityCH); + + } + } - if (femaleSterilizationActivityCH != null) { - addIncenticeRecord(ect, userId, femaleSterilizationActivityCH); - } - IncentiveActivity maleSterilizationActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("FP_MALE_STER", GroupName.ACTIVITY.getDisplayName()); + if (maleSterilizationActivityCH != null) { + if (ect.getContraceptionMethod().equals("MALE STERILIZATION")) { + addIncenticeRecord(ect, userId, maleSterilizationActivityCH); + + } + } + } - if (maleSterilizationActivityCH != null) { - addIncenticeRecord(ect, userId, maleSterilizationActivityCH); } - if(ect.getMotherDangerSign() != null + + if (ect.getMotherDangerSign() != null && !ect.getMotherDangerSign().isEmpty() - && ect.getPncPeriod() == 42){ + && ect.getPncPeriod() == 42) { IncentiveActivity highRiskPostpartumCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); if (highRiskPostpartumCareActivityCH != null) { @@ -682,8 +697,6 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } if (ect.getPncPeriod() == 42) { - - IncentiveActivity highRiskPostpartumHealthCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); @@ -714,25 +727,35 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } + + @Transactional private void addIncenticeRecord(PNCVisit ect, Integer userId, IncentiveActivity antaraActivity) { - IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(antaraActivity.getId(), ect.getCreatedDate(), ect.getBenId()); - // get bene details - if (record == null) { - record = new IncentiveActivityRecord(); - record.setActivityId(antaraActivity.getId()); - record.setCreatedDate(ect.getPncDate()); - record.setCreatedBy(ect.getCreatedBy()); - record.setStartDate(ect.getPncDate()); - record.setEndDate(ect.getPncDate()); - record.setUpdatedDate(ect.getPncDate()); - record.setUpdatedBy(ect.getCreatedBy()); - record.setBenId(ect.getBenId()); - record.setAshaId(userId); - record.setAmount(Long.valueOf(antaraActivity.getRate())); - recordRepo.save(record); + String lockKey = antaraActivity.getId() + "_" + ect.getBenId() + "_" + ect.getPncDate(); + + Object lock = lockMap.computeIfAbsent(lockKey, k -> new Object()); + + synchronized (lock) { + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(antaraActivity.getId(), ect.getPncDate(), ect.getBenId(),userId); + + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(antaraActivity.getId()); + record.setCreatedDate(ect.getPncDate()); + record.setCreatedBy(ect.getCreatedBy()); + record.setStartDate(ect.getPncDate()); + record.setEndDate(ect.getPncDate()); + record.setUpdatedDate(ect.getPncDate()); + record.setUpdatedBy(ect.getCreatedBy()); + record.setBenId(ect.getBenId()); + record.setAshaId(userId); + record.setAmount(Long.valueOf(antaraActivity.getRate())); + recordRepo.save(record); + } } + + lockMap.remove(lockKey, lock); } @@ -748,16 +771,23 @@ private void checkAndAddIncentives(List ancList, Integer userId) { IncentiveActivity ancFullActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup( "FULL_ANC", GroupName.MATERNAL_HEALTH.getDisplayName()); IncentiveActivity identifiedHrpActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("EPMSMA_HRP_IDENTIFIED", GroupName.MATERNAL_HEALTH.getDisplayName()); - IncentiveActivity comprehensiveAbortionActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup( + IncentiveActivity comprehensiveAbortionActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup( "COMPREHENSIVE_ABORTION_CARE", GroupName.MATERNAL_HEALTH.getDisplayName()); IncentiveActivity paiucdActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup( "FP_PAIUCD", GroupName.FAMILY_PLANNING.getDisplayName()); + IncentiveActivity iucdActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup( + "FP_IUCD", GroupName.FAMILY_PLANNING.getDisplayName()); ancList.forEach(ancVisit -> { - - if (paiucdActivityAM != null && ancVisit.getIsPaiucdId() != null - && ancVisit.getIsPaiucdId().toString().equals("1")) { - recordAncRelatedIncentive(paiucdActivityAM, ancVisit); + if(ancVisit.getIsAborted()){ + if (paiucdActivityAM != null && ancVisit.getIsPaiucdId() != null && ancVisit.getIsPaiucdId()==2 && + ancVisit.getIsPaiucd().toString().contains("Tubectomy")) { + recordAncRelatedIncentive(paiucdActivityAM, ancVisit); + } + if (iucdActivityAM != null && ancVisit.getIsPaiucdId() != null && ancVisit.getIsPaiucdId()==1 && + ancVisit.getIsPaiucd().toString().contains("Copper-T")) { + recordAncRelatedIncentive(iucdActivityAM, ancVisit); + } } @@ -791,7 +821,7 @@ private void checkAndAddIncentives(List ancList, Integer userId) { // ✅ State 8 if (stateId.equals(8)) { - IncentiveActivity ancFullActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup( + IncentiveActivity ancFullActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup( "ANC_FOUR_CHECKUPS_SUPPORT", GroupName.ACTIVITY.getDisplayName()); IncentiveActivity comprehensiveAbortionActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup( "COMPREHENSIVE_ABORTION_CARE", GroupName.ACTIVITY.getDisplayName()); @@ -800,15 +830,24 @@ private void checkAndAddIncentives(List ancList, Integer userId) { IncentiveActivity paiucdActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup( "FP_PAIUCD", GroupName.ACTIVITY.getDisplayName()); + IncentiveActivity iucdActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup( + "FP_IUCD", GroupName.ACTIVITY.getDisplayName()); + ancList.forEach(ancVisit -> { - if ( ancVisit.getIsAborted()) { - recordAncRelatedIncentive(paiucdActivityCH, ancVisit); + if (ancVisit.getIsAborted()) { + if (paiucdActivityCH != null && ancVisit.getIsPaiucdId() != null && ancVisit.getIsPaiucdId()==2 && + ancVisit.getIsPaiucd().toString().contains("Tubectomy")) { + recordAncRelatedIncentive(paiucdActivityCH, ancVisit); + } + if (iucdActivityCH != null && ancVisit.getIsPaiucdId() != null && ancVisit.getIsPaiucdId()==1 + && ancVisit.getIsPaiucd().toString().contains("Copper-T")) { + recordAncRelatedIncentive(iucdActivityCH, ancVisit); + } } - if (ancFullActivityCH != null && ancVisit.getAncVisit() != null && ancVisit.getAncVisit() == 4) { recordAncRelatedIncentive(ancFullActivityCH, ancVisit); @@ -823,13 +862,13 @@ private void checkAndAddIncentives(List ancList, Integer userId) { } - } private void recordAncRelatedIncentive(IncentiveActivity incentiveActivity, ANCVisit ancVisit) { - IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), ancVisit.getCreatedDate(), ancVisit.getBenId()); Integer userId = userRepo.getUserIdByName(ancVisit.getCreatedBy()); + IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), ancVisit.getCreatedDate(), ancVisit.getBenId(),userId); + if (record == null) { record = new IncentiveActivityRecord(); record.setActivityId(incentiveActivity.getId()); @@ -848,6 +887,7 @@ record = new IncentiveActivityRecord(); } private void recordAncFirstTRIMIncentive(IncentiveActivity incentiveActivity, ANCVisit ancVisit) { + Integer userId = userRepo.getUserIdByName(ancVisit.getCreatedBy()); if (ancVisit.getAncDate() == null || ancVisit.getLmpDate() == null) { return; @@ -865,10 +905,9 @@ private void recordAncFirstTRIMIncentive(IncentiveActivity incentiveActivity, AN IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId( incentiveActivity.getId(), ancVisit.getCreatedDate(), - ancVisit.getBenId() + ancVisit.getBenId(),userId ); - Integer userId = userRepo.getUserIdByName(ancVisit.getCreatedBy()); if (record == null) { record = new IncentiveActivityRecord(); @@ -887,11 +926,14 @@ record = new IncentiveActivityRecord(); } private void recordFullAncIncentive(IncentiveActivity incentiveActivity, ANCVisit ancVisit) { - + Integer userId = userRepo.getUserIdByName(ancVisit.getCreatedBy()); + if (userId == null) { + return; + } IncentiveActivityRecord existRecord = recordRepo.findRecordByActivityIdCreatedDateBenId( incentiveActivity.getId(), - ancVisit.getCreatedDate(), - ancVisit.getBenId() + ancVisit.getAncDate(), + ancVisit.getBenId(),userId ); @@ -899,11 +941,6 @@ private void recordFullAncIncentive(IncentiveActivity incentiveActivity, ANCVisi return; } - Integer userId = userRepo.getUserIdByName(ancVisit.getCreatedBy()); - if (userId == null) { - return; - } - IncentiveActivityRecord record = new IncentiveActivityRecord(); record.setActivityId(incentiveActivity.getId()); record.setCreatedDate(ancVisit.getAncDate()); diff --git a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java index 92493c75..e89928de 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -66,15 +66,11 @@ public String save(List request, String authorisation) throw entity.setReasonForNotCompleting(dto.getReasonForNotCompleting()); if(entity!=null){ repository.save(entity); - checkIncentive(entity); } } - - - response.setResponse("TB Confirmed case saved successfully"); } else { @@ -96,21 +92,21 @@ private void checkIncentive(TBConfirmedCase entity){ || "Longer Regimen (18–24 Months)".equalsIgnoreCase(regimen); if (Boolean.TRUE.equals(entity.getTreatmentCompleted()) - && entity.getActualTreatmentCompletionDate() != null) { + && entity.getExpectedTreatmentCompletionDate() != null) { if (isDrTb) { incentiveLogicService.incentiveForTbFollowUpIsDrTb( entity.getBenId(), - Timestamp.valueOf(entity.getTreatmentStartDate().atStartOfDay()), - Timestamp.valueOf(entity.getActualTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), entity.getUserId() ); } else { incentiveLogicService.incentiveForTbFollowUp( entity.getBenId(), - Timestamp.valueOf(entity.getTreatmentStartDate().atStartOfDay()), - Timestamp.valueOf(entity.getActualTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), entity.getUserId() ); 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 4519bc62..7f1104d1 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -24,7 +24,6 @@ */ package com.iemr.flw.service.impl; -import com.iemr.flw.controller.CoupleController; import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; @@ -150,12 +149,8 @@ private Boolean saveVhncFormData(VhncFormDTO vhncFormDTO, Integer userID) { vhncForm.setFormType("VHNC"); vhncFormRepo.save(vhncForm); - 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())); + checkVhncIncentive(vhncForm.getCreatedDate(),Math.toIntExact(vhncForm.getUserId())); return true; } @@ -175,12 +170,8 @@ private Boolean savePhcForm(PhcReviewMeetingFormDTO dto, Integer userID) { phcReviewForm.setImage2(dto.getImage2()); phcReviewForm.setFormType("PHC"); phcReviewFormRepo.save(phcReviewForm); - 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())); + checkPhcMeetingIncentive(phcReviewForm.getCreatedDate(),Math.toIntExact(phcReviewForm.getUserId())); return true; } @@ -286,18 +277,121 @@ private Boolean saveVhndFormData(VHNDFormDTO vhndFormDTO, Integer userID) { : null); vhndForm.setFormType("VHND"); vhndRepo.save(vhndForm); - 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()); + checkVhndIncentive(vhndForm.getCreatedDate(),vhndForm.getUserId()); return true; } + private void checkVhndIncentive(Timestamp startTimestamp, Integer userId){ + + try { + IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup("VHND_PARTICIPATION", GroupName.ACTIVITY.getDisplayName()); + if(activity!=null){ + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(activity.getId(), startTimestamp, 0L,userId); + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(activity.getId()); + record.setCreatedDate(startTimestamp); + record.setCreatedBy(userRepo.getUserNamedByUserId(userId)); + record.setStartDate(startTimestamp); + record.setEndDate(startTimestamp); + record.setUpdatedDate(startTimestamp); + record.setUpdatedBy(userRepo.getUserNamedByUserId(userId)); + record.setAshaId(userId); + record.setBenId(0L); + record.setAmount(Long.valueOf(activity.getRate())); + record.setIsEligible(true); + recordRepo.save(record); + + } + } + + + + } catch (Exception e) { + logger.error("Process Incentive Exception: ", e); + + + } + + } + + private void checkPhcMeetingIncentive(Timestamp startTimestamp, Integer userId){ + + try { + IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup("CLUSTER_MEETING", GroupName.ACTIVITY.getDisplayName()); + if(activity!=null){ + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(activity.getId(), startTimestamp, 0L,userId); + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(activity.getId()); + record.setCreatedDate(startTimestamp); + record.setCreatedBy(userRepo.getUserNamedByUserId(userId)); + record.setStartDate(startTimestamp); + record.setEndDate(startTimestamp); + record.setUpdatedDate(startTimestamp); + record.setUpdatedBy(userRepo.getUserNamedByUserId(userId)); + record.setAshaId(userId); + record.setBenId(0L); + record.setAmount(Long.valueOf(activity.getRate())); + record.setIsEligible(true); + recordRepo.save(record); + + } + } + + + + } catch (Exception e) { + logger.error("Process Incentive Exception: ", e); + + + } + + } + + + private void checkVhncIncentive(Timestamp startTimestamp, Integer userId){ + + try { + IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup("VHSNC_MEETING", GroupName.ACTIVITY.getDisplayName()); + if(activity!=null){ + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(activity.getId(), startTimestamp, 0L,userId); + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(activity.getId()); + record.setCreatedDate(startTimestamp); + record.setCreatedBy(userRepo.getUserNamedByUserId(userId)); + record.setStartDate(startTimestamp); + record.setEndDate(startTimestamp); + record.setUpdatedDate(startTimestamp); + record.setUpdatedBy(userRepo.getUserNamedByUserId(userId)); + record.setAshaId(userId); + record.setBenId(0L); + record.setAmount(Long.valueOf(activity.getRate())); + record.setIsEligible(true); + recordRepo.save(record); + + } + } + + + + } catch (Exception e) { + logger.error("Process Incentive Exception: ", e); + + + } + + } + @Override public List getAll(GetVillageLevelRequestHandler getVillageLevelRequestHandler) {