| Line 28... |
Line 28... |
| 28 |
import org.springframework.web.bind.annotation.RequestParam;
|
28 |
import org.springframework.web.bind.annotation.RequestParam;
|
| 29 |
|
29 |
|
| 30 |
import javax.mail.internet.InternetAddress;
|
30 |
import javax.mail.internet.InternetAddress;
|
| 31 |
import javax.mail.internet.MimeMessage;
|
31 |
import javax.mail.internet.MimeMessage;
|
| 32 |
import javax.servlet.http.HttpServletRequest;
|
32 |
import javax.servlet.http.HttpServletRequest;
|
| - |
|
33 |
import java.time.LocalDate;
|
| 33 |
import java.time.LocalDateTime;
|
34 |
import java.time.LocalDateTime;
|
| 34 |
import java.util.*;
|
35 |
import java.util.*;
|
| 35 |
import java.util.stream.Collectors;
|
36 |
import java.util.stream.Collectors;
|
| 36 |
|
37 |
|
| 37 |
@Controller
|
38 |
@Controller
|
| Line 65... |
Line 66... |
| 65 |
@Autowired
|
66 |
@Autowired
|
| 66 |
JavaMailSender mailSender;
|
67 |
JavaMailSender mailSender;
|
| 67 |
|
68 |
|
| 68 |
private static final Logger LOGGER = LogManager.getLogger(RefferalRepository.class);
|
69 |
private static final Logger LOGGER = LogManager.getLogger(RefferalRepository.class);
|
| 69 |
|
70 |
|
| - |
|
71 |
// New tier policy: 1 → 3000, 2 → 4000, 3+ → 5000 (every successful referral that month earns that rate).
|
| - |
|
72 |
// Referrals approved (or created, if approved ts missing) before TIER_POLICY_EFFECTIVE_DATE keep the flat ₹2,000.
|
| - |
|
73 |
private static final int LEGACY_PER_REFERRAL_EARNING = 2000;
|
| - |
|
74 |
private static final LocalDate TIER_POLICY_EFFECTIVE_DATE = LocalDate.of(2026, 1, 19);
|
| - |
|
75 |
|
| - |
|
76 |
private static int tierRate(long count) {
|
| - |
|
77 |
if (count <= 0) return 0;
|
| - |
|
78 |
if (count == 1) return 3000;
|
| - |
|
79 |
if (count == 2) return 4000;
|
| - |
|
80 |
return 5000;
|
| - |
|
81 |
}
|
| - |
|
82 |
|
| - |
|
83 |
private static boolean isLegacy(Refferal r) {
|
| - |
|
84 |
LocalDateTime when = r.getApprovedTimestamp() != null ? r.getApprovedTimestamp() : r.getCreatedTimestamp();
|
| - |
|
85 |
return when != null && when.toLocalDate().isBefore(TIER_POLICY_EFFECTIVE_DATE);
|
| - |
|
86 |
}
|
| - |
|
87 |
|
| - |
|
88 |
private static long computeEarning(List<Refferal> referrals) {
|
| - |
|
89 |
long legacyCount = referrals.stream().filter(RefferalController::isLegacy).count();
|
| - |
|
90 |
long newCount = referrals.size() - legacyCount;
|
| - |
|
91 |
return legacyCount * LEGACY_PER_REFERRAL_EARNING + newCount * tierRate(newCount);
|
| - |
|
92 |
}
|
| - |
|
93 |
|
| 70 |
@RequestMapping(value = "/getRefferalsRequest", method = RequestMethod.GET)
|
94 |
@RequestMapping(value = "/getRefferalsRequest", method = RequestMethod.GET)
|
| 71 |
public String getRefferalsRequest(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
|
95 |
public String getRefferalsRequest(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
|
| 72 |
|
96 |
|
| 73 |
List<Refferal> refferals = refferalRepository.selectByStatus(RefferalStatus.pending);
|
97 |
List<Refferal> refferals = refferalRepository.selectByStatus(RefferalStatus.pending);
|
| 74 |
|
98 |
|
| Line 360... |
Line 384... |
| 360 |
@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
|
384 |
@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
|
| 361 |
throws Exception {
|
385 |
throws Exception {
|
| 362 |
|
386 |
|
| 363 |
User user = userRepository.selectByEmailId(refereeEmail);
|
387 |
User user = userRepository.selectByEmailId(refereeEmail);
|
| 364 |
if (user != null) {
|
388 |
if (user != null) {
|
| 365 |
RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
|
- |
|
| 366 |
rfm.setAmount(amount);
|
- |
|
| 367 |
rfm.setCount(count);
|
- |
|
| 368 |
rfm.setRefereeEmail(user.getEmailId());
|
- |
|
| 369 |
rfm.setCreatedTimstamp(LocalDateTime.now());
|
- |
|
| 370 |
refferalMonthlyAmountRepository.persist(rfm);
|
- |
|
| 371 |
walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.REFERRAL_INCENTIVES,
|
- |
|
| 372 |
count + "referral of" + month + "Month", amount, LocalDateTime.now());
|
- |
|
| 373 |
|
- |
|
| 374 |
DateRangeModel drm = new DateRangeModel();
|
389 |
DateRangeModel drm = new DateRangeModel();
|
| 375 |
drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
|
390 |
drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
|
| 376 |
drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
|
391 |
drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
|
| 377 |
List<Refferal> previousMonthapprovedRefferal = refferalRepository
|
392 |
List<Refferal> previousMonthapprovedRefferal = refferalRepository
|
| 378 |
.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
|
393 |
.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
|
| Line 389... |
Line 404... |
| 389 |
if (approvedRefferals.isEmpty()) {
|
404 |
if (approvedRefferals.isEmpty()) {
|
| 390 |
List<Refferal> pastApproved = refferalRepository.selectByStatusAndEmailId(RefferalStatus.approved,
|
405 |
List<Refferal> pastApproved = refferalRepository.selectByStatusAndEmailId(RefferalStatus.approved,
|
| 391 |
user.getEmailId());
|
406 |
user.getEmailId());
|
| 392 |
approvedRefferals.addAll(pastApproved);
|
407 |
approvedRefferals.addAll(pastApproved);
|
| 393 |
}
|
408 |
}
|
| - |
|
409 |
|
| - |
|
410 |
// Ignore the form-posted `amount`; recompute from the actual referrals being transferred so
|
| - |
|
411 |
// admin can't (accidentally or otherwise) credit the wrong figure.
|
| - |
|
412 |
int correctAmount = (int) computeEarning(approvedRefferals);
|
| - |
|
413 |
int correctCount = approvedRefferals.size();
|
| - |
|
414 |
LOGGER.info("addMoneyToWallet: form amount={}, form count={}, correct amount={}, correct count={}",
|
| - |
|
415 |
amount, count, correctAmount, correctCount);
|
| - |
|
416 |
|
| - |
|
417 |
RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
|
| - |
|
418 |
rfm.setAmount(correctAmount);
|
| - |
|
419 |
rfm.setCount(correctCount);
|
| - |
|
420 |
rfm.setRefereeEmail(user.getEmailId());
|
| - |
|
421 |
rfm.setCreatedTimstamp(LocalDateTime.now());
|
| - |
|
422 |
refferalMonthlyAmountRepository.persist(rfm);
|
| - |
|
423 |
walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.REFERRAL_INCENTIVES,
|
| - |
|
424 |
correctCount + "referral of" + month + "Month", correctAmount, LocalDateTime.now());
|
| - |
|
425 |
|
| 394 |
for (Refferal refferl : approvedRefferals) {
|
426 |
for (Refferal refferl : approvedRefferals) {
|
| 395 |
refferl.setStatus(RefferalStatus.transferred);
|
427 |
refferl.setStatus(RefferalStatus.transferred);
|
| 396 |
refferl.setUpdatedTimestamp(LocalDateTime.now());
|
428 |
refferl.setUpdatedTimestamp(LocalDateTime.now());
|
| 397 |
}
|
429 |
}
|
| 398 |
|
430 |
|
| Line 408... |
Line 440... |
| 408 |
@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
|
440 |
@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
|
| 409 |
throws Exception {
|
441 |
throws Exception {
|
| 410 |
|
442 |
|
| 411 |
User user = userRepository.selectByEmailId(refereeEmail);
|
443 |
User user = userRepository.selectByEmailId(refereeEmail);
|
| 412 |
if (user != null) {
|
444 |
if (user != null) {
|
| 413 |
RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
|
- |
|
| 414 |
rfm.setAmount(amount);
|
- |
|
| 415 |
rfm.setCount(count);
|
- |
|
| 416 |
rfm.setRefereeEmail(user.getEmailId());
|
- |
|
| 417 |
rfm.setCreatedTimstamp(LocalDateTime.now());
|
- |
|
| 418 |
refferalMonthlyAmountRepository.persist(rfm);
|
- |
|
| 419 |
walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
|
- |
|
| 420 |
count + "referral of" + month + "Month", amount, LocalDateTime.now());
|
- |
|
| 421 |
|
- |
|
| 422 |
DateRangeModel drm = new DateRangeModel();
|
445 |
DateRangeModel drm = new DateRangeModel();
|
| 423 |
drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
|
446 |
drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
|
| 424 |
drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
|
447 |
drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
|
| 425 |
List<Refferal> oldMonthapprovedRefferal = refferalRepository
|
448 |
List<Refferal> oldMonthapprovedRefferal = refferalRepository
|
| 426 |
.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
|
449 |
.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
|
| Line 435... |
Line 458... |
| 435 |
.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
|
458 |
.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
|
| 436 |
|
459 |
|
| 437 |
oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
|
460 |
oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
|
| 438 |
|
461 |
|
| 439 |
LOGGER.info("oldPreMonthapproved" + oldPreMonthapproved);
|
462 |
LOGGER.info("oldPreMonthapproved" + oldPreMonthapproved);
|
| - |
|
463 |
|
| - |
|
464 |
int correctAmount = (int) computeEarning(oldPreMonthapproved);
|
| - |
|
465 |
int correctCount = oldPreMonthapproved.size();
|
| - |
|
466 |
LOGGER.info("addMoneyToWalletPreviousMonth: form amount={}, form count={}, correct amount={}, correct count={}",
|
| - |
|
467 |
amount, count, correctAmount, correctCount);
|
| - |
|
468 |
|
| - |
|
469 |
RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
|
| - |
|
470 |
rfm.setAmount(correctAmount);
|
| - |
|
471 |
rfm.setCount(correctCount);
|
| - |
|
472 |
rfm.setRefereeEmail(user.getEmailId());
|
| - |
|
473 |
rfm.setCreatedTimstamp(LocalDateTime.now());
|
| - |
|
474 |
refferalMonthlyAmountRepository.persist(rfm);
|
| - |
|
475 |
walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
|
| - |
|
476 |
correctCount + "referral of" + month + "Month", correctAmount, LocalDateTime.now());
|
| - |
|
477 |
|
| 440 |
for (Refferal refferl : oldPreMonthapproved) {
|
478 |
for (Refferal refferl : oldPreMonthapproved) {
|
| 441 |
refferl.setStatus(RefferalStatus.transferred);
|
479 |
refferl.setStatus(RefferalStatus.transferred);
|
| 442 |
refferl.setUpdatedTimestamp(LocalDateTime.now());
|
480 |
refferl.setUpdatedTimestamp(LocalDateTime.now());
|
| 443 |
}
|
481 |
}
|
| 444 |
|
482 |
|