| Line 79... |
Line 79... |
| 79 |
JWTUtil jwtUtil;
|
79 |
JWTUtil jwtUtil;
|
| 80 |
|
80 |
|
| 81 |
@Autowired
|
81 |
@Autowired
|
| 82 |
private ResponseSender<?> responseSender;
|
82 |
private ResponseSender<?> responseSender;
|
| 83 |
|
83 |
|
| - |
|
84 |
// Referrals whose approval (or creation, if approval ts is missing) falls before
|
| 84 |
//Changed to 2000 as per policy
|
85 |
// TIER_POLICY_EFFECTIVE_DATE keep the flat legacy payout; everything from that date
|
| - |
|
86 |
// onward uses the monthly tier: 1 → 3000, 2 → 4000, 3+ → 5000 (applied to the whole month).
|
| 85 |
private static final int PER_REFERRAL_EARNING=2000;
|
87 |
private static final int LEGACY_PER_REFERRAL_EARNING = 2000;
|
| - |
|
88 |
private static final LocalDate TIER_POLICY_EFFECTIVE_DATE = LocalDate.of(2026, 1, 19);
|
| 86 |
|
89 |
|
| 87 |
private static final Logger LOGGER = LogManager.getLogger(UserController.class);
|
90 |
private static final Logger LOGGER = LogManager.getLogger(UserController.class);
|
| 88 |
|
91 |
|
| 89 |
@Value("${notifications.api.host}")
|
92 |
@Value("${notifications.api.host}")
|
| 90 |
private String nodeHost;
|
93 |
private String nodeHost;
|
| Line 824... |
Line 827... |
| 824 |
long previousMonthEstimateRefferal = pendingRefferalBeforeCurrentMonth
|
827 |
long previousMonthEstimateRefferal = pendingRefferalBeforeCurrentMonth
|
| 825 |
+ previousapprovedRefferalAfterSixteen + previousapprovedRefferalbeforeSixteen;
|
828 |
+ previousapprovedRefferalAfterSixteen + previousapprovedRefferalbeforeSixteen;
|
| 826 |
long previousMonthConfirmedRefferal = previousapprovedRefferalAfterSixteen
|
829 |
long previousMonthConfirmedRefferal = previousapprovedRefferalAfterSixteen
|
| 827 |
+ previoustransferredRefferalAfterSixteen + previousapprovedRefferalbeforeSixteen
|
830 |
+ previoustransferredRefferalAfterSixteen + previousapprovedRefferalbeforeSixteen
|
| 828 |
+ previoustransferredRefferalbeforeSixteen;
|
831 |
+ previoustransferredRefferalbeforeSixteen;
|
| - |
|
832 |
List<Refferal> previousMonthConfirmedList = new ArrayList<>();
|
| - |
|
833 |
previousMonthConfirmedList.addAll(previousMonthapprovedRefferalAfterSixteen);
|
| - |
|
834 |
previousMonthConfirmedList.addAll(previousMonthtransferredRefferalAfterSixteen);
|
| - |
|
835 |
previousMonthConfirmedList.addAll(previousMonthapprovedRefferalbeforeSixteen);
|
| - |
|
836 |
previousMonthConfirmedList.addAll(previousMonthtransferredRefferalbeforeSixteen);
|
| 829 |
rfm = refferAmountEarning(pendingRefferalBeforeCurrentMonth, previousMonthConfirmedRefferal,
|
837 |
rfm = refferAmountEarning(allPendingRefferalBeforeCurrentMonth, previousMonthConfirmedList,
|
| 830 |
YearMonth.now().minusMonths(1));
|
838 |
YearMonth.now().minusMonths(1));
|
| 831 |
refferAmountModel.add(rfm);
|
839 |
refferAmountModel.add(rfm);
|
| 832 |
LOGGER.info("previousMonthPendingApprovedRefferal" + previousMonthEstimateRefferal);
|
840 |
LOGGER.info("previousMonthPendingApprovedRefferal" + previousMonthEstimateRefferal);
|
| 833 |
LOGGER.info("previousMonthApprovedTransfferedRefferal" + previousMonthConfirmedRefferal);
|
841 |
LOGGER.info("previousMonthApprovedTransfferedRefferal" + previousMonthConfirmedRefferal);
|
| 834 |
|
842 |
|
| Line 842... |
Line 850... |
| 842 |
LOGGER.info("pendingofCurrentMonth" + pendingofCurrentMonth);
|
850 |
LOGGER.info("pendingofCurrentMonth" + pendingofCurrentMonth);
|
| 843 |
long pendingofCurrentMonthCount = pendingofCurrentMonth.size();
|
851 |
long pendingofCurrentMonthCount = pendingofCurrentMonth.size();
|
| 844 |
currentMonthEstimaterefferal = pendingofCurrentMonth.size() + approvedofCurrentMonth.size();
|
852 |
currentMonthEstimaterefferal = pendingofCurrentMonth.size() + approvedofCurrentMonth.size();
|
| 845 |
currentMonthConfirmedrefferal = approvedofCurrentMonth.size() + transferredofCurrentMonth.size();
|
853 |
currentMonthConfirmedrefferal = approvedofCurrentMonth.size() + transferredofCurrentMonth.size();
|
| 846 |
|
854 |
|
| - |
|
855 |
List<Refferal> currentMonthConfirmedList = new ArrayList<>();
|
| - |
|
856 |
currentMonthConfirmedList.addAll(approvedofCurrentMonth);
|
| - |
|
857 |
currentMonthConfirmedList.addAll(transferredofCurrentMonth);
|
| - |
|
858 |
|
| 847 |
rfm = refferAmountEarning(pendingofCurrentMonthCount, currentMonthConfirmedrefferal, YearMonth.now());
|
859 |
rfm = refferAmountEarning(pendingofCurrentMonth, currentMonthConfirmedList, YearMonth.now());
|
| 848 |
|
860 |
|
| 849 |
refferAmountModel.add(rfm);
|
861 |
refferAmountModel.add(rfm);
|
| 850 |
|
862 |
|
| 851 |
} else if (LocalDateTime.now().isAfter(ldt)) {
|
863 |
} else if (LocalDateTime.now().isAfter(ldt)) {
|
| 852 |
drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
|
864 |
drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
|
| Line 873... |
Line 885... |
| 873 |
.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
|
885 |
.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
|
| 874 |
|
886 |
|
| 875 |
long approvedRefferalCount = previousMonthapprovedRefferalbeforeSixteen.size()
|
887 |
long approvedRefferalCount = previousMonthapprovedRefferalbeforeSixteen.size()
|
| 876 |
+ previousMonthtransferredRefferalbeforeSixteen.size() + preCurrMonthapproved.size()
|
888 |
+ previousMonthtransferredRefferalbeforeSixteen.size() + preCurrMonthapproved.size()
|
| 877 |
+ preCurrMonthtransferred.size();
|
889 |
+ preCurrMonthtransferred.size();
|
| - |
|
890 |
List<Refferal> previousMonthSettledList = new ArrayList<>();
|
| - |
|
891 |
previousMonthSettledList.addAll(previousMonthapprovedRefferalbeforeSixteen);
|
| - |
|
892 |
previousMonthSettledList.addAll(previousMonthtransferredRefferalbeforeSixteen);
|
| - |
|
893 |
previousMonthSettledList.addAll(preCurrMonthapproved);
|
| - |
|
894 |
previousMonthSettledList.addAll(preCurrMonthtransferred);
|
| 878 |
rfm = new RefferalEarningModel();
|
895 |
rfm = new RefferalEarningModel();
|
| 879 |
rfm.setActualEarning(approvedRefferalCount * PER_REFERRAL_EARNING);
|
896 |
rfm.setActualEarning(computeEarning(previousMonthSettledList));
|
| 880 |
|
897 |
|
| 881 |
rfm.setYearMonth(YearMonth.now().minusMonths(1));
|
898 |
rfm.setYearMonth(YearMonth.now().minusMonths(1));
|
| 882 |
rfm.setPendingRefferal(0);
|
899 |
rfm.setPendingRefferal(0);
|
| 883 |
rfm.setApprovedRefferal(approvedRefferalCount);
|
900 |
rfm.setApprovedRefferal(approvedRefferalCount);
|
| 884 |
refferAmountModel.add(rfm);
|
901 |
refferAmountModel.add(rfm);
|
| Line 906... |
Line 923... |
| 906 |
currentMonthConfirmedrefferal = currentMonthapprovedRefferalAfterSixteen.size()
|
923 |
currentMonthConfirmedrefferal = currentMonthapprovedRefferalAfterSixteen.size()
|
| 907 |
+ currentMonthtransferredRefferalAfterSixteen.size()
|
924 |
+ currentMonthtransferredRefferalAfterSixteen.size()
|
| 908 |
+ currentMonthapprovedRefferalbeforeSixteen.size()
|
925 |
+ currentMonthapprovedRefferalbeforeSixteen.size()
|
| 909 |
+ currentMonthtransferredRefferalbeforeSixteen.size();
|
926 |
+ currentMonthtransferredRefferalbeforeSixteen.size();
|
| 910 |
|
927 |
|
| - |
|
928 |
List<Refferal> currentMonthConfirmedList = new ArrayList<>();
|
| - |
|
929 |
currentMonthConfirmedList.addAll(currentMonthapprovedRefferalAfterSixteen);
|
| - |
|
930 |
currentMonthConfirmedList.addAll(currentMonthtransferredRefferalAfterSixteen);
|
| - |
|
931 |
currentMonthConfirmedList.addAll(currentMonthapprovedRefferalbeforeSixteen);
|
| - |
|
932 |
currentMonthConfirmedList.addAll(currentMonthtransferredRefferalbeforeSixteen);
|
| - |
|
933 |
|
| 911 |
rfm = refferAmountEarning(pendingrefferalcount, currentMonthConfirmedrefferal, YearMonth.now());
|
934 |
rfm = refferAmountEarning(allpendingRefferal, currentMonthConfirmedList, YearMonth.now());
|
| 912 |
refferAmountModel.add(rfm);
|
935 |
refferAmountModel.add(rfm);
|
| 913 |
LOGGER.info("currentMonthpendingApprovedrefferal" + currentMonthEstimaterefferal);
|
936 |
LOGGER.info("currentMonthpendingApprovedrefferal" + currentMonthEstimaterefferal);
|
| 914 |
|
937 |
|
| 915 |
LOGGER.info("currentMonthapprovedTransferredrefferal" + currentMonthConfirmedrefferal);
|
938 |
LOGGER.info("currentMonthapprovedTransferredrefferal" + currentMonthConfirmedrefferal);
|
| 916 |
|
939 |
|
| Line 919... |
Line 942... |
| 919 |
re.setTimestamp(LocalDateTime.now());
|
942 |
re.setTimestamp(LocalDateTime.now());
|
| 920 |
re.setRefferalEarningModel(refferAmountModel);
|
943 |
re.setRefferalEarningModel(refferAmountModel);
|
| 921 |
return responseSender.ok(re);
|
944 |
return responseSender.ok(re);
|
| 922 |
}
|
945 |
}
|
| 923 |
|
946 |
|
| 924 |
private RefferalEarningModel refferAmountEarning(long pendingRefferalValue, long confirmedRefferalValue,
|
947 |
private RefferalEarningModel refferAmountEarning(List<Refferal> pendingList, List<Refferal> confirmedList,
|
| 925 |
YearMonth yearMonth) {
|
948 |
YearMonth yearMonth) {
|
| 926 |
RefferalEarningModel rfm = new RefferalEarningModel();
|
949 |
RefferalEarningModel rfm = new RefferalEarningModel();
|
| 927 |
rfm.setYearMonth(yearMonth);
|
950 |
rfm.setYearMonth(yearMonth);
|
| 928 |
rfm.setPendingRefferal(pendingRefferalValue);
|
951 |
rfm.setPendingRefferal(pendingList.size());
|
| 929 |
rfm.setApprovedRefferal(confirmedRefferalValue);
|
952 |
rfm.setApprovedRefferal(confirmedList.size());
|
| 930 |
long estimateRefferalValue = pendingRefferalValue + confirmedRefferalValue;
|
- |
|
| 931 |
|
953 |
|
| 932 |
rfm.setMaximumEarning(estimateRefferalValue * PER_REFERRAL_EARNING);
|
954 |
List<Refferal> potential = new ArrayList<>(confirmedList.size() + pendingList.size());
|
| - |
|
955 |
potential.addAll(confirmedList);
|
| - |
|
956 |
potential.addAll(pendingList);
|
| 933 |
|
957 |
|
| - |
|
958 |
rfm.setMaximumEarning(computeEarning(potential));
|
| 934 |
rfm.setMinimumEarning(confirmedRefferalValue * PER_REFERRAL_EARNING);
|
959 |
rfm.setMinimumEarning(computeEarning(confirmedList));
|
| 935 |
|
960 |
|
| 936 |
return rfm;
|
961 |
return rfm;
|
| 937 |
}
|
962 |
}
|
| 938 |
|
963 |
|
| - |
|
964 |
// 1 → 3000, 2 → 4000, 3+ → 5000; applied to every new-policy referral in the month.
|
| - |
|
965 |
private static int tierRate(long count) {
|
| - |
|
966 |
if (count == 0) return 0;
|
| - |
|
967 |
if (count == 1) return 3000;
|
| - |
|
968 |
if (count == 2) return 4000;
|
| - |
|
969 |
return 5000;
|
| - |
|
970 |
}
|
| - |
|
971 |
|
| - |
|
972 |
private static boolean isLegacy(Refferal r) {
|
| - |
|
973 |
LocalDateTime when = r.getApprovedTimestamp() != null ? r.getApprovedTimestamp() : r.getCreatedTimestamp();
|
| - |
|
974 |
return when != null && when.toLocalDate().isBefore(TIER_POLICY_EFFECTIVE_DATE);
|
| - |
|
975 |
}
|
| - |
|
976 |
|
| - |
|
977 |
private static long computeEarning(List<Refferal> referrals) {
|
| - |
|
978 |
long legacyCount = referrals.stream().filter(UserController::isLegacy).count();
|
| - |
|
979 |
long newCount = referrals.size() - legacyCount;
|
| - |
|
980 |
return legacyCount * LEGACY_PER_REFERRAL_EARNING + newCount * tierRate(newCount);
|
| - |
|
981 |
}
|
| - |
|
982 |
|
| 939 |
@RequestMapping(value = "/user/getReferals", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
983 |
@RequestMapping(value = "/user/getReferals", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
| 940 |
@ApiImplicitParams({
|
984 |
@ApiImplicitParams({
|
| 941 |
@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
|
985 |
@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
|
| 942 |
public ResponseEntity<?> getReferals(HttpServletRequest request, @RequestParam RefferalStatus status)
|
986 |
public ResponseEntity<?> getReferals(HttpServletRequest request, @RequestParam RefferalStatus status)
|
| 943 |
throws Exception {
|
987 |
throws Exception {
|