| Line 1... |
Line 1... |
| 1 |
package com.spice.profitmandi.service;
|
1 |
package com.spice.profitmandi.service;
|
| 2 |
|
2 |
|
| - |
|
3 |
import java.text.DecimalFormat;
|
| - |
|
4 |
import java.text.NumberFormat;
|
| - |
|
5 |
import java.time.Duration;
|
| - |
|
6 |
import java.time.LocalDate;
|
| - |
|
7 |
import java.time.LocalDateTime;
|
| - |
|
8 |
import java.time.LocalTime;
|
| - |
|
9 |
import java.util.ArrayList;
|
| - |
|
10 |
import java.util.Arrays;
|
| - |
|
11 |
import java.util.HashMap;
|
| - |
|
12 |
import java.util.HashSet;
|
| - |
|
13 |
import java.util.List;
|
| - |
|
14 |
import java.util.Locale;
|
| - |
|
15 |
import java.util.Map;
|
| - |
|
16 |
import java.util.Map.Entry;
|
| - |
|
17 |
import java.util.Set;
|
| - |
|
18 |
import java.util.stream.Collectors;
|
| - |
|
19 |
|
| - |
|
20 |
import javax.mail.internet.InternetAddress;
|
| - |
|
21 |
import javax.mail.internet.MimeMessage;
|
| - |
|
22 |
|
| - |
|
23 |
import com.spice.profitmandi.dao.model.*;
|
| - |
|
24 |
import com.spice.profitmandi.service.transaction.SDCreditService;
|
| - |
|
25 |
import org.apache.commons.io.output.ByteArrayOutputStream;
|
| - |
|
26 |
import org.apache.logging.log4j.LogManager;
|
| - |
|
27 |
import org.apache.logging.log4j.Logger;
|
| - |
|
28 |
import org.springframework.beans.factory.annotation.Autowired;
|
| - |
|
29 |
import org.springframework.core.io.ByteArrayResource;
|
| - |
|
30 |
import org.springframework.core.io.InputStreamSource;
|
| - |
|
31 |
import org.springframework.mail.javamail.JavaMailSender;
|
| - |
|
32 |
import org.springframework.mail.javamail.MimeMessageHelper;
|
| - |
|
33 |
import org.springframework.stereotype.Component;
|
| - |
|
34 |
|
| 3 |
import com.spice.profitmandi.common.model.CustomRetailer;
|
35 |
import com.spice.profitmandi.common.model.CustomRetailer;
|
| 4 |
import com.spice.profitmandi.common.util.FileUtil;
|
36 |
import com.spice.profitmandi.common.util.FileUtil;
|
| 5 |
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
|
37 |
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
|
| 6 |
import com.spice.profitmandi.dao.entity.fofo.RetailerFilter;
|
38 |
import com.spice.profitmandi.dao.entity.fofo.RetailerFilter;
|
| 7 |
import com.spice.profitmandi.dao.entity.transaction.Loan;
|
39 |
import com.spice.profitmandi.dao.entity.transaction.Loan;
|
| 8 |
import com.spice.profitmandi.dao.model.BillingDaysAvg;
|
- |
|
| 9 |
import com.spice.profitmandi.dao.model.LastSaleDateModel;
|
- |
|
| 10 |
import com.spice.profitmandi.dao.model.RetailerFilterModel;
|
- |
|
| 11 |
import com.spice.profitmandi.dao.model.RetailerPeformanceFilterModel;
|
- |
|
| 12 |
import com.spice.profitmandi.dao.repository.cs.CsService;
|
40 |
import com.spice.profitmandi.dao.repository.cs.CsService;
|
| 13 |
import com.spice.profitmandi.dao.repository.dtr.RetailerFilterRepository;
|
41 |
import com.spice.profitmandi.dao.repository.dtr.RetailerFilterRepository;
|
| 14 |
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
|
42 |
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
|
| 15 |
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
|
43 |
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
|
| 16 |
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
|
44 |
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
|
| 17 |
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
|
45 |
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
|
| 18 |
import com.spice.profitmandi.service.transaction.SDCreditService;
|
46 |
import com.spice.profitmandi.service.transaction.SDCreditServiceImpl;
|
| 19 |
import com.spice.profitmandi.service.user.RetailerService;
|
47 |
import com.spice.profitmandi.service.user.RetailerService;
|
| 20 |
import org.apache.commons.io.output.ByteArrayOutputStream;
|
- |
|
| 21 |
import org.apache.logging.log4j.LogManager;
|
- |
|
| 22 |
import org.apache.logging.log4j.Logger;
|
- |
|
| 23 |
import org.springframework.beans.factory.annotation.Autowired;
|
- |
|
| 24 |
import org.springframework.core.io.ByteArrayResource;
|
- |
|
| 25 |
import org.springframework.core.io.InputStreamSource;
|
- |
|
| 26 |
import org.springframework.mail.javamail.JavaMailSender;
|
- |
|
| 27 |
import org.springframework.mail.javamail.MimeMessageHelper;
|
- |
|
| 28 |
import org.springframework.stereotype.Component;
|
- |
|
| 29 |
|
- |
|
| 30 |
import javax.mail.internet.InternetAddress;
|
- |
|
| 31 |
import javax.mail.internet.MimeMessage;
|
- |
|
| 32 |
import java.text.DecimalFormat;
|
- |
|
| 33 |
import java.text.NumberFormat;
|
- |
|
| 34 |
import java.time.Duration;
|
- |
|
| 35 |
import java.time.LocalDate;
|
- |
|
| 36 |
import java.time.LocalDateTime;
|
- |
|
| 37 |
import java.time.LocalTime;
|
- |
|
| 38 |
import java.util.*;
|
- |
|
| 39 |
import java.util.Map.Entry;
|
- |
|
| 40 |
import java.util.stream.Collectors;
|
- |
|
| 41 |
|
48 |
|
| 42 |
@Component
|
49 |
@Component
|
| 43 |
public class PerformanceServiceImpl implements PerformanceService {
|
50 |
public class PerformanceServiceImpl implements PerformanceService {
|
| 44 |
|
51 |
|
| 45 |
|
52 |
|
| Line 54... |
Line 61... |
| 54 |
|
61 |
|
| 55 |
@Autowired
|
62 |
@Autowired
|
| 56 |
private FofoOrderItemRepository fofoOrderItemRepository;
|
63 |
private FofoOrderItemRepository fofoOrderItemRepository;
|
| 57 |
|
64 |
|
| 58 |
@Autowired
|
65 |
@Autowired
|
| 59 |
private SDCreditService sdCreditServiceImpl;
|
66 |
private SDCreditService sdCreditService;
|
| 60 |
|
67 |
|
| 61 |
@Autowired
|
68 |
@Autowired
|
| 62 |
private RetailerService retailerService;
|
69 |
private RetailerService retailerService;
|
| 63 |
|
70 |
|
| 64 |
@Autowired
|
71 |
@Autowired
|
| Line 93... |
Line 100... |
| 93 |
|
100 |
|
| 94 |
Map<Integer, Double> tertiaryPartner = new HashMap<Integer, Double>();
|
101 |
Map<Integer, Double> tertiaryPartner = new HashMap<Integer, Double>();
|
| 95 |
|
102 |
|
| 96 |
|
103 |
|
| 97 |
if (retailerFilter.isCredit()) {
|
104 |
if (retailerFilter.isCredit()) {
|
| 98 |
List<Loan> dueDateLoans = sdCreditServiceImpl.getDueDateCrossLoan();
|
105 |
List<Loan> dueDateLoans = sdCreditService.getDueDateCrossLoan();
|
| 99 |
List<Loan> defaultLoans = sdCreditServiceImpl.getDefaultLoan();
|
106 |
List<Loan> defaultLoans = sdCreditService.getDefaultLoan();
|
| 100 |
|
107 |
|
| 101 |
if (!defaultLoans.isEmpty()) {
|
108 |
if (!defaultLoans.isEmpty()) {
|
| 102 |
defaultdateMap = defaultLoans.stream().collect(Collectors.groupingBy(x -> x.getFofoId()));
|
109 |
defaultdateMap = defaultLoans.stream().collect(Collectors.groupingBy(x -> x.getFofoId()));
|
| 103 |
}
|
110 |
}
|
| 104 |
if (!dueDateLoans.isEmpty()) {
|
111 |
if (!dueDateLoans.isEmpty()) {
|
| Line 211... |
Line 218... |
| 211 |
|
218 |
|
| 212 |
|
219 |
|
| 213 |
for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
|
220 |
for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
|
| 214 |
int fofoId = customRetailerEntry.getKey();
|
221 |
int fofoId = customRetailerEntry.getKey();
|
| 215 |
RetailerPeformanceFilterModel retailerPeformanceFilterModel = new RetailerPeformanceFilterModel();
|
222 |
RetailerPeformanceFilterModel retailerPeformanceFilterModel = new RetailerPeformanceFilterModel();
|
| 216 |
retailerPeformanceFilterModel.setActivationType(customRetailerEntry.getValue().getActivationType());
|
- |
|
| 217 |
retailerPeformanceFilterModel.setState(customRetailerEntry.getValue().getAddress().getState());
|
- |
|
| 218 |
if (retailerFilter.isCredit()) {
|
223 |
if (retailerFilter.isCredit()) {
|
| 219 |
|
224 |
|
| 220 |
if (!duedateMap.isEmpty()) {
|
225 |
if (!duedateMap.isEmpty()) {
|
| 221 |
if (duedateMap.containsKey(fofoId)) {
|
226 |
if (duedateMap.containsKey(fofoId)) {
|
| 222 |
retailerPeformanceFilterModel.setCredit("Due");
|
227 |
retailerPeformanceFilterModel.setCredit("Due");
|
| Line 297... |
Line 302... |
| 297 |
return retailerPerPeformanceFilterModels;
|
302 |
return retailerPerPeformanceFilterModels;
|
| 298 |
}
|
303 |
}
|
| 299 |
|
304 |
|
| 300 |
public void sendPartnerPerformanceEmail(Map<Integer, RetailerPeformanceFilterModel> partnersPerformanceMap, RetailerFilterModel retailerFilterModel, Map<Integer, CustomRetailer> customRetailers) throws Exception {
|
305 |
public void sendPartnerPerformanceEmail(Map<Integer, RetailerPeformanceFilterModel> partnersPerformanceMap, RetailerFilterModel retailerFilterModel, Map<Integer, CustomRetailer> customRetailers) throws Exception {
|
| 301 |
Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
|
306 |
Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
|
| - |
|
307 |
Map<Integer, FofoReportingModel> fofoReportingModelMap = csService.getPartnerIdSalesHeaders();
|
| 302 |
|
308 |
|
| 303 |
LOGGER.info("retailerFilterModel {}", retailerFilterModel);
|
309 |
LOGGER.info("retailerFilterModel {}", retailerFilterModel);
|
| 304 |
for (Entry<String, Set<Integer>> storeGuyEntry : storeGuyMap.entrySet()) {
|
310 |
for (Entry<String, Set<Integer>> storeGuyEntry : storeGuyMap.entrySet()) {
|
| 305 |
|
311 |
|
| 306 |
Set<Integer> fofoIds = storeGuyEntry.getValue();
|
312 |
Set<Integer> fofoIds = storeGuyEntry.getValue();
|
| 307 |
List<List<?>> rows = new ArrayList<>();
|
313 |
List<List<?>> rows = new ArrayList<>();
|
| 308 |
List<String> headers = Arrays.asList("Partner Name", "Code", "ActivationType", "State", "Credit- Due/Default", "Billing To Deliver", "Investment- Lower Than " + retailerFilterModel.getInvestmentPct() + "%", "Last Secondary-" + retailerFilterModel.getSecondaryDays() + "days", "Last Tertiary-" + retailerFilterModel.getTertiaryDays() + "days", "MTD Secondary < LMTD-" + retailerFilterModel.getMtdsPct() + "%", "MTD Tertiary < LMTD-" + retailerFilterModel.getMtdtPct() + "%");
|
314 |
List<String> headers = Arrays.asList("Partner Name", "Code","Territory Manager","Regional Manager","Credit- Due/Default", "Billing To Deliver", "Investment- Lower Than " + retailerFilterModel.getInvestmentPct() + "%", "Last Secondary-" + retailerFilterModel.getSecondaryDays() + "days", "Last Tertiary-" + retailerFilterModel.getTertiaryDays() + "days", "MTD Secondary < LMTD-" + retailerFilterModel.getMtdsPct() + "%", "MTD Tertiary < LMTD-" + retailerFilterModel.getMtdtPct() + "%");
|
| 309 |
|
- |
|
| 310 |
|
315 |
|
| 311 |
LOGGER.info("headers {}", headers);
|
316 |
LOGGER.info("headers {}", headers);
|
| 312 |
|
317 |
|
| 313 |
for (Integer fofoId : fofoIds) {
|
318 |
for (Integer fofoId : fofoIds) {
|
| 314 |
RetailerPeformanceFilterModel retailerPerformanceFilterModel = partnersPerformanceMap.get(fofoId);
|
319 |
RetailerPeformanceFilterModel retailerPerformanceFilterModel = partnersPerformanceMap.get(fofoId);
|
| 315 |
|
320 |
|
| 316 |
LOGGER.info("retailerPerformanceFilterModel {}", retailerPerformanceFilterModel);
|
321 |
LOGGER.info("retailerPerformanceFilterModel {}", retailerPerformanceFilterModel);
|
| 317 |
|
322 |
|
| 318 |
if (retailerPerformanceFilterModel != null) {
|
323 |
if (retailerPerformanceFilterModel != null) {
|
| 319 |
rows.add(Arrays.asList(customRetailers.get(fofoId).getBusinessName(), customRetailers.get(fofoId).getCode(), retailerPerformanceFilterModel.getActivationType(), retailerPerformanceFilterModel.getState(), retailerPerformanceFilterModel.getCredit(), retailerPerformanceFilterModel.getBilling(), retailerPerformanceFilterModel.getInvestment(), retailerPerformanceFilterModel.getSecondaryDays(), retailerPerformanceFilterModel.getTertiaryDays(), retailerPerformanceFilterModel.getMtds(), retailerPerformanceFilterModel.getMtdt()));
|
324 |
rows.add(Arrays.asList(customRetailers.get(fofoId).getBusinessName(), customRetailers.get(fofoId).getCode(), fofoReportingModelMap.get(fofoId).getTerritoryManager(),fofoReportingModelMap.get(fofoId).getRegionalManager(), retailerPerformanceFilterModel.getCredit(), retailerPerformanceFilterModel.getBilling(), retailerPerformanceFilterModel.getInvestment(), retailerPerformanceFilterModel.getSecondaryDays(),retailerPerformanceFilterModel.getTertiaryDays(), retailerPerformanceFilterModel.getMtds(), retailerPerformanceFilterModel.getMtdt()));
|
| 320 |
}
|
325 |
}
|
| 321 |
|
326 |
|
| 322 |
}
|
327 |
}
|
| 323 |
if (!rows.isEmpty()) {
|
328 |
if (!rows.isEmpty()) {
|
| 324 |
ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
|
329 |
ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
|
| 325 |
this.sendMailWithAttachment(mailSender, new String[]{storeGuyEntry.getKey()}, null, "Partner Performance", "PFA", "PartnerPerformance.csv", new ByteArrayResource(baos.toByteArray()));
|
330 |
this.sendMailWithAttachment(mailSender, new String[]{storeGuyEntry.getKey()}, null, "Partner Performance", "PFA", "PartnerPerformance.csv", new ByteArrayResource(baos.toByteArray()));
|
| 326 |
}
|
331 |
}
|
| 327 |
|
332 |
|
| 328 |
}
|
333 |
}
|
| 329 |
|
- |
|
| 330 |
|
- |
|
| 331 |
}
|
334 |
}
|
| 332 |
|
335 |
|
| 333 |
public void sendMailWithAttachment(JavaMailSender mailSender, String[] emailTo, String[] cc, String subject, String body, String fileName, InputStreamSource inputStreamSource) throws Exception {
|
336 |
public void sendMailWithAttachment(JavaMailSender mailSender, String[] emailTo, String[] cc, String subject, String body, String fileName, InputStreamSource inputStreamSource) throws Exception {
|
| 334 |
MimeMessage message = mailSender.createMimeMessage();
|
337 |
MimeMessage message = mailSender.createMimeMessage();
|
| 335 |
MimeMessageHelper helper = new MimeMessageHelper(message, true);
|
338 |
MimeMessageHelper helper = new MimeMessageHelper(message, true);
|