Subversion Repositories SmartDukaan

Rev

Rev 35397 | Rev 35435 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 35397 Rev 35415
Line 63... Line 63...
63
import java.time.LocalDate;
63
import java.time.LocalDate;
64
import java.time.LocalDateTime;
64
import java.time.LocalDateTime;
65
import java.time.YearMonth;
65
import java.time.YearMonth;
66
import java.time.format.DateTimeFormatter;
66
import java.time.format.DateTimeFormatter;
67
import java.util.*;
67
import java.util.*;
-
 
68
import java.util.HashSet;
68
import java.util.Map.Entry;
69
import java.util.Map.Entry;
69
import java.util.stream.Collectors;
70
import java.util.stream.Collectors;
70
 
71
 
71
@Controller
72
@Controller
72
@Transactional(rollbackFor = Throwable.class)
73
@Transactional(rollbackFor = Throwable.class)
Line 621... Line 622...
621
        if (!visitRequests.isEmpty()) {
622
        if (!visitRequests.isEmpty()) {
622
            visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getVisitId()));
623
            visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getVisitId()));
623
        }
624
        }
624
        List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(), status, offset, limit);
625
        List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(), status, offset, limit);
625
 
626
 
-
 
627
        // Batch fetch all FranchiseeActivity in one query instead of N+1
-
 
628
        List<Integer> activityIds = franchiseeVisits.stream()
-
 
629
                .filter(fv -> fv.getFranchiseActivityId() != 0)
-
 
630
                .map(FranchiseeVisit::getFranchiseActivityId)
-
 
631
                .collect(Collectors.toList());
-
 
632
        Map<Integer, FranchiseeActivity> activityMap = new HashMap<>();
-
 
633
        if (!activityIds.isEmpty()) {
-
 
634
            activityMap = franchiseeActivityRepository.selectByIds(activityIds).stream()
-
 
635
                    .collect(Collectors.toMap(FranchiseeActivity::getId, x -> x));
-
 
636
        }
-
 
637
 
626
        for (FranchiseeVisit fv : franchiseeVisits) {
638
        for (FranchiseeVisit fv : franchiseeVisits) {
627
            if (visitRequestMap != null) {
639
            if (visitRequestMap != null) {
628
 
640
 
629
                List<VisitRequest> visitRequest = visitRequestMap.get(fv.getId());
641
                List<VisitRequest> visitRequest = visitRequestMap.get(fv.getId());
630
                if (visitRequest != null) {
642
                if (visitRequest != null) {
Line 640... Line 652...
640
 
652
 
641
                    }
653
                    }
642
                }
654
                }
643
            }
655
            }
644
            if (fv.getFranchiseActivityId() != 0) {
656
            if (fv.getFranchiseActivityId() != 0) {
645
                FranchiseeActivity fA = franchiseeActivityRepository.selectById(fv.getFranchiseActivityId());
657
                FranchiseeActivity fA = activityMap.get(fv.getFranchiseActivityId());
646
                fv.setFranchiseeActivity(fA);
658
                fv.setFranchiseeActivity(fA);
647
            }
659
            }
648
 
660
 
649
        }
661
        }
650
 
662
 
Line 756... Line 768...
756
    }
768
    }
757
 
769
 
758
    @RequestMapping(value = "/purchaseExist", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
770
    @RequestMapping(value = "/purchaseExist", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
759
    @ApiImplicitParams({
771
    @ApiImplicitParams({
760
            @ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
772
            @ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
761
    public ResponseEntity<?> purchaseExist(HttpServletRequest request, Model model)
773
    public ResponseEntity<?> purchaseExist(HttpServletRequest request) throws ProfitMandiBusinessException {
762
            throws ProfitMandiBusinessException {
-
 
763
        int userId = (int) request.getAttribute("userId");
774
        int userId = (int) request.getAttribute("userId");
764
        UserCart uc = userAccountRepository.getUserCart(userId);
775
        UserCart uc = userAccountRepository.getUserCart(userId);
765
        boolean purchaseExist = purchaseRepository.hasPurchaseForFofoId(uc.getUserId());
776
        return responseSender.ok(purchaseRepository.hasPurchaseForFofoId(uc.getUserId()));
766
        if (purchaseExist) {
-
 
767
            return responseSender.ok(true);
-
 
768
        }
-
 
769
        return responseSender.ok(false);
-
 
770
    }
777
    }
771
 
778
 
772
    @RequestMapping(value = "/onBoardingTimelineVisibility", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
779
    @RequestMapping(value = "/onBoardingTimelineVisibility", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
773
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
780
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
774
    public ResponseEntity<?> onBoardingTimelineVisibility(HttpServletRequest request, Model model)
781
    public ResponseEntity<?> onBoardingTimelineVisibility(HttpServletRequest request, Model model)
Line 857... Line 864...
857
 
864
 
858
                Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondaryPlans = orderRepository
865
                Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondaryPlans = orderRepository
859
                        .selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
866
                        .selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
860
                        .collect(Collectors.groupingBy(x -> x.getFofoId()));
867
                        .collect(Collectors.groupingBy(x -> x.getFofoId()));
861
 
868
 
-
 
869
                // Pre-fetch all AuthUsers that might be needed (instead of N+1 queries)
-
 
870
                Set<Integer> allAuthIds = new HashSet<>();
-
 
871
                collectionMap.values().stream()
-
 
872
                        .map(PartnerCollectionPlanModel::getAuthId)
-
 
873
                        .filter(id -> id != null && id != authUser.getId())
-
 
874
                        .forEach(allAuthIds::add);
-
 
875
                partnerSecondaryPlans.values().stream()
-
 
876
                        .flatMap(List::stream)
-
 
877
                        .map(PartnerSecondaryPlanModel::getAuthId)
-
 
878
                        .filter(id -> id != null && id != authUser.getId())
-
 
879
                        .forEach(allAuthIds::add);
-
 
880
                Map<Integer, AuthUser> authUserMap = new HashMap<>();
-
 
881
                if (!allAuthIds.isEmpty()) {
-
 
882
                    authUserMap = authRepository.selectByIds(new ArrayList<>(allAuthIds)).stream()
-
 
883
                            .collect(Collectors.toMap(AuthUser::getId, x -> x));
-
 
884
                }
-
 
885
 
862
                LOGGER.info("partnerSecondayPlans {}", partnerSecondaryPlans);
886
                LOGGER.info("partnerSecondayPlans {}", partnerSecondaryPlans);
863
                for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
887
                for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
864
                    int fofoId = customRetailerEntry.getKey();
888
                    int fofoId = customRetailerEntry.getKey();
865
                    CustomRetailer customRetailer = customRetailerEntry.getValue();
889
                    CustomRetailer customRetailer = customRetailerEntry.getValue();
866
                    float totalSecondaryPlan = 0;
890
                    float totalSecondaryPlan = 0;
Line 922... Line 946...
922
 
946
 
923
                            }
947
                            }
924
                        }
948
                        }
925
 
949
 
926
                        if (authId != null && authId != authUser.getId()) {
950
                        if (authId != null && authId != authUser.getId()) {
927
                            ptam.setAuthUser(authRepository.selectById(authId));
951
                            ptam.setAuthUser(authUserMap.get(authId));
928
 
952
 
929
                        }
953
                        }
930
 
954
 
931
                        if (collectionPlan.getCommittedDate() != null) {
955
                        if (collectionPlan.getCommittedDate() != null) {
932
 
956
 
Line 997... Line 1021...
997
                        }
1021
                        }
998
 
1022
 
999
                        for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
1023
                        for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
1000
                            Integer authId = secondaryModelEntry.getValue().getAuthId();
1024
                            Integer authId = secondaryModelEntry.getValue().getAuthId();
1001
                            if (authId != null && authId != authUser.getId()) {
1025
                            if (authId != null && authId != authUser.getId()) {
1002
                                secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
1026
                                secondaryModelEntry.getValue().setAuthUser(authUserMap.get(authId));
1003
                                ptam.setSecondaryColor("red");
1027
                                ptam.setSecondaryColor("red");
1004
                            }
1028
                            }
1005
 
1029
 
1006
                        }
1030
                        }
1007
 
1031
 
Line 1389... Line 1413...
1389
                        .map(x -> x.getVisitId()).collect(Collectors.toList());
1413
                        .map(x -> x.getVisitId()).collect(Collectors.toList());
1390
                List<Lead> leads = new ArrayList<>();
1414
                List<Lead> leads = new ArrayList<>();
1391
                if (!leadIds.isEmpty()) {
1415
                if (!leadIds.isEmpty()) {
1392
                    leads = leadRepository.selectAllByIds(leadIds);
1416
                    leads = leadRepository.selectAllByIds(leadIds);
1393
 
1417
 
-
 
1418
                    // Batch fetch all LeadActivities instead of N+1
-
 
1419
                    List<LeadActivity> allLeadActivities = leadActivityRepository.selectAllByleadIds(leadIds);
-
 
1420
                    Map<Integer, List<LeadActivity>> leadActivityMap = allLeadActivities.stream()
-
 
1421
                            .collect(Collectors.groupingBy(LeadActivity::getLeadId));
-
 
1422
 
1394
                    for (Lead lead : leads) {
1423
                    for (Lead lead : leads) {
1395
                        List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(lead.getId());
1424
                        List<LeadActivity> leadActivities = leadActivityMap.get(lead.getId());
-
 
1425
                        if (leadActivities != null && !leadActivities.isEmpty()) {
1396
                        lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
1426
                            lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
1397
                        lead.setLeadActivity(leadActivities.get(0));
1427
                            lead.setLeadActivity(leadActivities.get(0));
-
 
1428
                        }
1398
                    }
1429
                    }
1399
                }
1430
                }
1400
                List<Integer> franchiseeIds = allVisitRequests.stream()
1431
                List<Integer> franchiseeIds = allVisitRequests.stream()
1401
                        .filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId())
1432
                        .filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId())
1402
                        .collect(Collectors.toList());
1433
                        .collect(Collectors.toList());
1403
                List<FranchiseeVisit> franchiseeVisits = new ArrayList<>();
1434
                List<FranchiseeVisit> franchiseeVisits = new ArrayList<>();
1404
                if (!franchiseeIds.isEmpty()) {
1435
                if (!franchiseeIds.isEmpty()) {
1405
                    franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
1436
                    franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
1406
                    LOGGER.info("franchiseeVisits {}", franchiseeVisits);
1437
                    LOGGER.info("franchiseeVisits {}", franchiseeVisits);
1407
 
1438
 
-
 
1439
                    // Batch fetch all FranchiseeActivities instead of N+1
-
 
1440
                    List<FranchiseeActivity> allFranchiseeActivities = franchiseeActivityRepository
-
 
1441
                            .selectByFranchiseeVisitIds(franchiseeIds);
-
 
1442
                    Map<Integer, List<FranchiseeActivity>> franchiseeActivityMap = allFranchiseeActivities.stream()
-
 
1443
                            .collect(Collectors.groupingBy(FranchiseeActivity::getFranchiseeVisitd));
-
 
1444
 
1408
                    for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
1445
                    for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
1409
                        List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository
1446
                        List<FranchiseeActivity> franchiseeActivities = franchiseeActivityMap.get(franchiseeVisit.getId());
1410
                                .selectByFranchiseeVisitId(franchiseeVisit.getId());
-
 
1411
                        LOGGER.info("franchiseeActivities {}", franchiseeActivities);
1447
                        LOGGER.info("franchiseeActivities {}", franchiseeActivities);
1412
 
1448
 
-
 
1449
                        if (franchiseeActivities != null && !franchiseeActivities.isEmpty()) {
1413
                        franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
1450
                            franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
1414
                        franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
1451
                            franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
-
 
1452
                        }
1415
                    }
1453
                    }
1416
 
1454
 
1417
                }
1455
                }
1418
 
1456
 
-
 
1457
                // Pre-fetch all retailers using cached method (instead of N+1 getFofoRetailer calls)
-
 
1458
                Map<Integer, CustomRetailer> allRetailersMap = retailerService.getAllFofoRetailers();
-
 
1459
 
1419
                Map<LocalDate, List<VisitRequest>> dateWiseVisitRequest = allVisitRequests.stream()
1460
                Map<LocalDate, List<VisitRequest>> dateWiseVisitRequest = allVisitRequests.stream()
1420
                        .collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().toLocalDate()));
1461
                        .collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().toLocalDate()));
1421
 
1462
 
1422
                for (Entry<LocalDate, List<VisitRequest>> visitEntry : dateWiseVisitRequest.entrySet()) {
1463
                for (Entry<LocalDate, List<VisitRequest>> visitEntry : dateWiseVisitRequest.entrySet()) {
1423
 
1464
 
Line 1499... Line 1540...
1499
                                VisitRequest visitRequest = visitRequests.stream()
1540
                                VisitRequest visitRequest = visitRequests.stream()
1500
                                        .filter(x -> x.getVisitId() == franchiseeVisit.getId()
1541
                                        .filter(x -> x.getVisitId() == franchiseeVisit.getId()
1501
                                                && x.getCreatedBy() == franchiseeVisit.getAuthId())
1542
                                                && x.getCreatedBy() == franchiseeVisit.getAuthId())
1502
                                        .findAny().orElse(null);
1543
                                        .findAny().orElse(null);
1503
 
1544
 
1504
                                CustomRetailer customRetailer = retailerService
1545
                                CustomRetailer customRetailer = allRetailersMap.get(franchiseeVisit.getFofoId());
1505
                                        .getFofoRetailer(franchiseeVisit.getFofoId());
-
 
1506
                                VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
1546
                                VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
1507
                                visitDescriptionModel.setVisitId(visitRequest.getId());
1547
                                visitDescriptionModel.setVisitId(visitRequest.getId());
1508
                                visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
1548
                                visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
-
 
1549
                                if (customRetailer != null && customRetailer.getAddress() != null) {
1509
                                visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
1550
                                    visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
1510
                                visitDescriptionModel.setState(customRetailer.getAddress().getState());
1551
                                    visitDescriptionModel.setState(customRetailer.getAddress().getState());
-
 
1552
                                }
1511
                                visitDescriptionModel.setScheduleTime(
1553
                                visitDescriptionModel.setScheduleTime(
1512
                                        franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
1554
                                        franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
1513
                                visitDescriptionModel.setStatus(visitRequest.getStatus());
1555
                                visitDescriptionModel.setStatus(visitRequest.getStatus());
1514
                                visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
1556
                                visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
1515
                                visitDescriptionModel.setVisitType(visitRequest.getVisitType());
1557
                                visitDescriptionModel.setVisitType(visitRequest.getVisitType());