Subversion Repositories SmartDukaan

Rev

Rev 29250 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
29222 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.IOException;
6
import java.io.InputStream;
7
import java.io.InputStreamReader;
8
import java.time.LocalDate;
9
import java.time.LocalDateTime;
10
import java.time.format.DateTimeFormatter;
11
import java.util.ArrayList;
12
import java.util.Arrays;
13
import java.util.HashMap;
14
import java.util.HashSet;
15
import java.util.List;
16
import java.util.Map;
17
import java.util.Map.Entry;
18
import java.util.Set;
19
import java.util.stream.Collector;
20
import java.util.stream.Collectors;
21
 
22
import javax.servlet.http.HttpServletRequest;
23
import javax.servlet.http.HttpServletResponse;
24
import javax.transaction.Transactional;
25
 
26
import org.apache.commons.csv.CSVFormat;
27
import org.apache.commons.csv.CSVParser;
28
import org.apache.commons.csv.CSVRecord;
29
import org.apache.logging.log4j.LogManager;
30
import org.apache.logging.log4j.Logger;
31
import org.apache.poi.ss.usermodel.CellStyle;
32
import org.apache.poi.ss.usermodel.CreationHelper;
33
import org.apache.poi.xssf.usermodel.XSSFSheet;
34
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
35
import org.json.JSONArray;
36
import org.json.JSONObject;
37
import org.springframework.beans.factory.annotation.Autowired;
38
import org.springframework.core.io.InputStreamResource;
39
import org.springframework.http.HttpHeaders;
40
import org.springframework.http.HttpStatus;
41
import org.springframework.http.ResponseEntity;
42
import org.springframework.stereotype.Controller;
43
import org.springframework.ui.Model;
44
import org.springframework.web.bind.annotation.RequestBody;
45
import org.springframework.web.bind.annotation.RequestMapping;
46
import org.springframework.web.bind.annotation.RequestMethod;
47
import org.springframework.web.bind.annotation.RequestParam;
48
import org.springframework.web.bind.annotation.RequestPart;
49
import org.springframework.web.multipart.MultipartFile;
50
 
51
import com.google.gson.Gson;
52
import com.spice.profitmandi.common.enumuration.MessageType;
53
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
54
import com.spice.profitmandi.common.model.CustomRetailer;
55
import com.spice.profitmandi.common.model.ProfitMandiConstants;
56
import com.spice.profitmandi.common.model.SendNotificationModel;
57
import com.spice.profitmandi.common.util.FileUtil;
58
import com.spice.profitmandi.common.util.StringUtils;
59
import com.spice.profitmandi.dao.entity.auth.AuthUser;
60
import com.spice.profitmandi.dao.entity.cs.Position;
61
import com.spice.profitmandi.dao.entity.logistics.Provider;
62
import com.spice.profitmandi.dao.entity.logistics.ProviderDetails;
63
import com.spice.profitmandi.dao.entity.logistics.ProviderTat;
64
import com.spice.profitmandi.dao.entity.logistics.PublicHolidays;
65
import com.spice.profitmandi.dao.entity.transaction.Order;
66
import com.spice.profitmandi.dao.model.BilledOrderListModel;
67
import com.spice.profitmandi.dao.model.DispatchNotificationModel;
68
import com.spice.profitmandi.dao.model.ProviderDetailModel;
69
import com.spice.profitmandi.dao.model.ProviderTatModel;
70
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
71
import com.spice.profitmandi.dao.repository.cs.CsService;
72
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
73
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
74
import com.spice.profitmandi.dao.repository.logistics.ProviderDetailsRepository;
75
import com.spice.profitmandi.dao.repository.logistics.ProviderRepository;
76
import com.spice.profitmandi.dao.repository.logistics.ProviderTatRepository;
77
import com.spice.profitmandi.dao.repository.logistics.PublicHolidaysRepository;
78
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
79
import com.spice.profitmandi.service.LogisticsService;
80
import com.spice.profitmandi.service.NotificationService;
81
import com.spice.profitmandi.web.model.LoginDetails;
82
import com.spice.profitmandi.web.util.CookiesProcessor;
83
import com.spice.profitmandi.web.util.MVCResponseSender;
84
 
85
import in.shop2020.logistics.DeliveryType;
86
import in.shop2020.model.v1.order.OrderStatus;
87
 
88
@Controller
89
@Transactional(rollbackOn = Throwable.class)
90
public class LogisticsController {
91
 
92
	@Autowired
93
	private OrderRepository orderRepository;
94
 
95
	@Autowired
96
	private ProviderRepository providerRepository;
97
 
98
	@Autowired
99
	private ProviderDetailsRepository providerDetailsRepository;
100
 
101
	@Autowired
102
	private MVCResponseSender mvcResponseSender;
103
 
104
	@Autowired
105
	private ProviderTatRepository providerTatRepository;
106
 
107
	@Autowired
108
	private PublicHolidaysRepository publicHolidaysRepository;
109
 
110
	@Autowired
111
	private LogisticsService logisticsService;
112
 
113
	@Autowired
114
	private UserAccountRepository userAccountRepository;
115
 
116
	@Autowired
117
	private NotificationService notificationService;
118
 
119
	@Autowired
120
	private AuthRepository authRepository;
121
 
122
	@Autowired
123
	private PositionRepository positionRepository;
124
 
125
	@Autowired
126
	private CookiesProcessor cookiesProcessor;
127
 
128
	@Autowired
129
	CsService csService;
130
 
131
	@Autowired
132
	private Gson gson;
133
 
134
	private static final Logger LOGGER = LogManager.getLogger(LogisticsController.class);
135
 
136
	@RequestMapping(value = "/logistics", method = RequestMethod.GET)
137
	public String logistics(HttpServletRequest request, Model model) throws Exception {
138
		ProviderTat pt = providerTatRepository.selectByProviderId(1, 7678, "110018");
139
 
140
		LocalDate date = logisticsService.calculateDeliveryTimeline(pt);
141
 
142
		LOGGER.info("date" + date);
143
		return "logistics";
144
 
145
	}
146
 
147
	@RequestMapping(value = "/authorisedWarehouses")
148
	public String authorisedWarehouses(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
149
 
150
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
151
		String email = loginDetails.getEmailId();
152
 
153
		AuthUser authUser = authRepository.selectByEmailOrMobile(email);
154
		List<Position> positions = positionRepository.selectAll(authUser.getId());
155
 
156
		List<Position> warehousePositions = positions.stream()
157
				.filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_WAREHOUSE)
158
				.collect(Collectors.toList());
159
		Set<CustomRetailer> positionRetailers = new HashSet<>();
160
		csService.getPositionCustomRetailerMap(warehousePositions).values().forEach(customRetailers -> {
161
			positionRetailers.addAll(customRetailers);
162
 
163
		});
164
 
165
		Map<Integer, String> warehouseMap = this.getWarehouses(positionRetailers);
166
		JSONArray response = new JSONArray();
167
 
168
		warehouseMap.keySet().stream().filter(x -> warehouseMap.get(x) != null).forEach(x -> {
169
			response.put(new JSONObject().put("id", x).put("name", warehouseMap.get(x)));
170
		});
171
 
172
		LOGGER.info("response", response.toString());
173
 
174
		model.addAttribute("response", response.toString());
175
 
176
		return "response";
177
	}
178
 
179
	@RequestMapping(value = "/billedOrderFileUploader", method = RequestMethod.POST)
180
	public String getBilledOrderFileUploader(HttpServletRequest request, Model model, HttpServletResponse response,
181
			@RequestPart MultipartFile file) throws Throwable {
182
 
183
		LOGGER.info("file" + file.toString());
184
		String fileName = file.getName();
185
 
186
		String fileNames = file.getOriginalFilename();
187
 
188
		LOGGER.info("fileName" + fileName);
189
		LOGGER.info("fileNames" + fileNames);
190
 
191
		List<BilledOrderListModel> billedOrderList = this.readFile(file);
192
 
193
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
194
		String email = loginDetails.getEmailId();
195
 
196
		AuthUser authUser = authRepository.selectByEmailOrMobile(email);
197
		List<Position> positions = positionRepository.selectAll(authUser.getId());
198
 
199
		List<Position> warehousePositions = positions.stream()
200
				.filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_WAREHOUSE)
201
				.collect(Collectors.toList());
202
		Set<CustomRetailer> positionRetailers = new HashSet<>();
203
		csService.getPositionCustomRetailerMap(warehousePositions).values().forEach(customRetailers -> {
204
			positionRetailers.addAll(customRetailers);
205
 
206
		});
207
 
208
		LOGGER.info("positionRetailers" + positionRetailers);
209
		List<Integer> fofoIds = new ArrayList<>();
210
		List<Integer> warehouseIds = new ArrayList<>();
211
		if (!positionRetailers.isEmpty()) {
212
			fofoIds.addAll(positionRetailers.stream().map(x -> x.getPartnerId()).collect(Collectors.toList()));
213
 
214
			warehouseIds = this.getWarehouses(positionRetailers).entrySet().stream().map(x -> x.getKey())
215
					.collect(Collectors.toList());
216
 
217
		}
218
 
219
		LOGGER.info("fofoIds" + fofoIds);
220
 
221
		Map<String, DispatchNotificationModel> dispatchNotication = new HashMap<>();
222
 
223
		if (!billedOrderList.isEmpty()) {
224
			List<Order> ords = orderRepository.selectByInvoiceNumbers(
225
					billedOrderList.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toList()));
226
 
227
			List<Integer> shippingWarehouseIds = ords.stream().map(x -> x.getWarehouseId())
228
					.collect(Collectors.toList());
229
 
230
			if (!warehouseIds.containsAll(shippingWarehouseIds)) {
231
				throw new ProfitMandiBusinessException("Uploaded File", "",
232
						"Partners are not belong to the same warehouse");
233
 
234
			}
235
 
236
			Map<String, Set<Integer>> invoicefofoIdmap = ords.stream().collect(Collectors.groupingBy(
237
					x -> x.getInvoiceNumber(), Collectors.mapping(Order::getRetailerId, Collectors.toSet())));
238
 
239
			Map<String, Set<String>> airbillInvoiceNumberMap = billedOrderList.stream()
240
					.collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(),
241
							Collectors.mapping(BilledOrderListModel::getInvoiceNumber, Collectors.toSet())));
242
 
243
			for (Entry<String, Set<String>> aim : airbillInvoiceNumberMap.entrySet()) {
244
				Set<String> InvoceNumbers = aim.getValue();
245
				Set<Integer> fofoId = new HashSet<>();
246
				for (String InvoceNumber : InvoceNumbers) {
247
					fofoId.addAll(invoicefofoIdmap.get(InvoceNumber));
248
 
249
				}
250
				LOGGER.info("fofoId" + fofoId);
251
 
252
				if (fofoId.size() > 1) {
253
					throw new ProfitMandiBusinessException("Uploaded File", "",
254
							"Waybill " + aim.getKey() + " number cannot have invoices with different Retailers");
255
				}
256
			}
257
 
258
			for (BilledOrderListModel bl : billedOrderList) {
259
				List<Order> orders = orderRepository.selectByInvoiceNumber(bl.getInvoiceNumber());
260
 
261
				Provider provider = providerRepository.selectByName(bl.getLogisticsProviderName());
262
 
263
				if (provider == null) {
264
					throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
265
				}
266
				if (!orders.isEmpty()) {
267
					dispatchNotication = logisticsService.markedOrderShippedDetail(orders, provider,
268
							bl.getAirwayBillNumber());
269
 
270
				} else {
271
					throw new ProfitMandiBusinessException("Uploaded File", "", "No Order Found");
272
				}
273
 
274
				if (!dispatchNotication.isEmpty()) {
275
 
276
					for (Entry<String, DispatchNotificationModel> dn : dispatchNotication.entrySet()) {
277
 
278
						Provider pr = providerRepository.selectById(dn.getValue().getProviderId());
279
 
280
						Set<String> invoiceNumber = new HashSet<>();
281
						invoiceNumber.addAll(dn.getValue().getInvoiceNumber());
282
						SendNotificationModel sendNotificationModel = new SendNotificationModel();
283
						sendNotificationModel.setCampaignName("Order Shipped");
284
						sendNotificationModel.setTitle("Order Shipped");
285
						sendNotificationModel.setMessage(String.format("Dear customer, your items with Invoice Number "
286
								+ String.join(",", invoiceNumber) + " worth Rs." + dn.getValue().getTotalAmount()
287
								+ " and qty " + dn.getValue().getTotalQty() + " has been shipped through "
288
								+ pr.getName() + " via your track id " + dn.getKey() + " and will be delivered by "
289
								+ dn.getValue().getDate().format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))));
290
						sendNotificationModel.setType("url");
291
						sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/dashboard");
292
						sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
293
						sendNotificationModel.setMessageType(MessageType.notification);
294
						int userId = userAccountRepository.selectUserIdByRetailerId(dn.getValue().getFofoId());
295
						sendNotificationModel.setUserIds(Arrays.asList(userId));
296
						notificationService.sendNotification(sendNotificationModel);
297
					}
298
 
299
				}
300
 
301
				LOGGER.info("dispatchNotication" + dispatchNotication);
302
			}
303
		}
304
 
305
		LOGGER.info("dispatchNotication" + dispatchNotication);
306
		LOGGER.info("billedOrderList" + billedOrderList);
307
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
308
		return "response";
309
 
310
	}
311
 
312
	private List<BilledOrderListModel> readFile(MultipartFile file) throws Exception {
313
		CSVParser parser = new CSVParser(new InputStreamReader(file.getInputStream()), CSVFormat.DEFAULT);
314
		List<CSVRecord> records = parser.getRecords();
315
		LOGGER.info("records" + records);
316
		LOGGER.info("parser" + parser);
317
		if (records.size() < 2) {
318
			parser.close();
319
			throw new ProfitMandiBusinessException("Uploaded File", "", "No records Found");
320
		}
321
		// Remove header
322
		records.remove(0);
323
		List<BilledOrderListModel> returnList = new ArrayList<BilledOrderListModel>();
324
		for (CSVRecord record : records) {
325
			BilledOrderListModel cp = null;
326
			BilledOrderListModel sgr = createBilleOrder(record);
327
			returnList.add(sgr);
328
 
329
			LOGGER.info("records" + record.get(1));
330
		}
331
		parser.close();
332
		return returnList;
333
	}
334
 
335
	private BilledOrderListModel createBilleOrder(CSVRecord record) {
336
		BilledOrderListModel bol = new BilledOrderListModel();
337
		bol.setInvoiceNumber(record.get(0));
338
		bol.setLogisticsProviderName(record.get(1));
339
		bol.setAirwayBillNumber(record.get(2));
340
 
341
		return bol;
342
	}
343
 
344
	@RequestMapping(value = "/provider", method = RequestMethod.GET)
345
	public String provider(HttpServletRequest request, Model model) throws Exception {
346
		List<Provider> providers = providerRepository.selectAll();
347
		List<Integer> providerIds = providers.stream().map(x -> x.getId()).collect(Collectors.toList());
348
		Map<Integer, ProviderDetails> providerDetails = providerDetailsRepository
349
				.selectByProviderIds(providerIds, DeliveryType.PREPAID, true).stream()
350
				.collect(Collectors.toMap(x -> x.getProviderId(), x -> x));
351
		model.addAttribute("providers", providers);
352
		model.addAttribute("providerDetails", providerDetails);
353
 
354
		model.addAttribute("deliveryTypes", DeliveryType.values());
355
 
356
		return "provider";
357
 
358
	}
359
 
360
	@RequestMapping(value = "/createProvider", method = RequestMethod.POST)
361
	public String createProvider(HttpServletRequest request, @RequestBody ProviderDetailModel providerDetailModel,
362
			Model model) throws Exception {
363
 
364
		Provider provider = new Provider();
365
		provider.setName(providerDetailModel.getName());
366
		provider.setActive(providerDetailModel.isProvideractive());
367
		provider.setBundleWeightLimit(0);
368
		provider.setGroupShipmentAllowed(true);
369
		provider.setPickup(0);
370
		provider.setMaxCODLimit(0);
371
 
372
		providerRepository.persist(provider);
373
 
374
		ProviderDetails pd = new ProviderDetails();
375
		pd.setAccountNo(providerDetailModel.getAccountNo());
376
		pd.setEmail(providerDetailModel.getEmail());
377
		pd.setPhone(providerDetailModel.getMobile());
378
		pd.setProviderId(provider.getId());
379
		pd.setActive(true);
380
		pd.setType(DeliveryType.PREPAID);
381
		providerDetailsRepository.persist(pd);
382
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
383
 
384
		return "response";
385
 
386
	}
387
 
388
	@RequestMapping(value = "/providerTat", method = RequestMethod.GET)
389
	public String providerTat(HttpServletRequest request, Model model) throws Exception {
390
 
391
		List<Provider> providers = providerRepository.selectAll();
392
		model.addAttribute("providers", providers);
393
		return "provider-tat";
394
 
395
	}
396
 
397
	@RequestMapping(value = "/getProviderTat", method = RequestMethod.GET)
398
	public String getProviderTat(HttpServletRequest request, @RequestParam int providerId, Model model)
399
			throws Exception {
400
		List<ProviderTat> providerTat = providerTatRepository.selectByProviderId(providerId);
401
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
402
 
403
		providerTat = providerTat.stream().filter(x -> warehouseMap.containsKey(x.getWarehouseLocation()))
404
				.collect(Collectors.toList());
405
 
406
		Map<Integer, Provider> providerIdMap = new HashMap<>();
407
		Provider provider = providerRepository.selectById(providerId);
408
		providerIdMap.put(provider.getId(), provider);
409
 
410
		LOGGER.info("providerTat" + providerTat);
411
		model.addAttribute("providerTat", providerTat);
412
		model.addAttribute("warehouseMap", warehouseMap);
413
		model.addAttribute("providerIdMap", providerIdMap);
414
 
415
		return "provider-tat-detail";
416
 
417
	}
418
 
419
	@RequestMapping(value = "/providerTatFileUploader", method = RequestMethod.POST)
420
	public String providerTatFileUploader(HttpServletRequest request, Model model, HttpServletResponse response,
421
			@RequestPart MultipartFile file) throws Throwable {
422
 
423
		LOGGER.info("file" + file.toString());
424
		String fileName = file.getName();
425
 
426
		String fileNames = file.getOriginalFilename();
427
 
428
		LOGGER.info("fileName" + fileName);
429
		LOGGER.info("fileNames" + fileNames);
430
		List<ProviderTatModel> providerTatList = this.readTatFile(file);
431
		if (!providerTatList.isEmpty()) {
432
 
433
			for (ProviderTatModel pt : providerTatList) {
434
 
435
				LOGGER.info("ProviderTatModel" + pt);
436
 
437
				Provider provider = providerRepository.selectByName(pt.getProviderName());
438
 
439
				if (provider == null) {
440
					throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
441
				}
442
 
443
				Map<String, Integer> warehouseMap = ProfitMandiConstants.WAREHOUSE_NAME_MAP;
444
				ProviderTat providerTat = providerTatRepository.selectByProviderId(provider.getId(),
445
						warehouseMap.get(pt.getWarehouseName()), pt.getPincode());
446
 
447
				LOGGER.info("providerTat" + providerTat);
448
				if (providerTat == null) {
449
					LOGGER.info("providerTat" + providerTat);
450
					providerTat = new ProviderTat();
451
					providerTat.setDestinationPin(pt.getPincode());
452
					providerTat.setProviderId(provider.getId());
453
					providerTat.setWarehouseLocation(warehouseMap.get(pt.getWarehouseName()));
454
					providerTat.setDeliveryTime(pt.getTat());
455
					providerTatRepository.persist(providerTat);
456
				} else {
457
					LOGGER.info("providerTat else" + providerTat);
458
					providerTat.setDeliveryTime(pt.getTat());
459
				}
460
 
461
			}
462
		}
463
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
464
		return "response";
465
 
466
	}
467
 
468
	private List<ProviderTatModel> readTatFile(MultipartFile file) throws Exception {
469
 
470
		CSVParser parser = new CSVParser(new InputStreamReader(file.getInputStream()), CSVFormat.DEFAULT);
471
		List<CSVRecord> records = parser.getRecords();
472
		LOGGER.info("records" + records);
473
		LOGGER.info("parser" + parser);
474
		if (records.size() < 2) {
475
			parser.close();
476
			throw new ProfitMandiBusinessException("Uploaded File", "", "No records Found");
477
		}
478
		// Remove header
479
		records.remove(0);
480
		List<ProviderTatModel> returnList = new ArrayList<ProviderTatModel>();
481
		for (CSVRecord record : records) {
482
			ProviderTatModel sgr = createProviderTat(record);
483
			returnList.add(sgr);
484
 
485
			LOGGER.info("records" + record.get(1));
486
		}
487
		parser.close();
488
		return returnList;
489
	}
490
 
491
	private ProviderTatModel createProviderTat(CSVRecord record) {
492
		ProviderTatModel ptm = new ProviderTatModel();
493
		ptm.setProviderName(record.get(0));
494
		ptm.setWarehouseName(record.get(1));
495
		ptm.setPincode(record.get(2));
496
		ptm.setTat(Integer.parseInt(record.get(3)));
497
 
498
		return ptm;
499
	}
500
 
501
	@RequestMapping(value = "/publicProviderHolidays", method = RequestMethod.GET)
502
	public String publicProviderHolidays(HttpServletRequest request, Model model) throws Exception {
503
 
504
		List<PublicHolidays> publicHolidays = publicHolidaysRepository
505
				.selectAllByDate(LocalDate.of(LocalDate.now().getYear(), 1, 1));
506
 
507
		model.addAttribute("publicHolidays", publicHolidays);
508
		return "public-provider-holiday";
509
 
510
	}
511
 
512
	@RequestMapping(value = "/createPublicHoliday", method = RequestMethod.POST)
513
	public String createPublicHoliday(HttpServletRequest request, @RequestParam LocalDate date,
514
			@RequestParam String occassion, Model model) throws Exception {
515
 
516
		PublicHolidays ph = new PublicHolidays();
517
		ph.setDate(date);
518
		ph.setHolidayDate(LocalDate.now().atStartOfDay());
519
		ph.setOccasion(occassion);
520
		publicHolidaysRepository.persist(ph);
521
 
522
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
523
		return "response";
524
	}
525
 
526
	@RequestMapping(value = "/downloadUploadShippingTemplate", method = RequestMethod.GET)
527
	public ResponseEntity<?> downloadUploadShippingTemplate(HttpServletRequest request, @RequestParam int warehouseId)
528
			throws Exception {
529
 
530
		List<List<?>> rows = new ArrayList<>();
531
 
532
		List<Order> orders = orderRepository.selectAllByWarehouseAndStatus(warehouseId, OrderStatus.BILLED);
533
 
534
		if (orders.isEmpty()) {
535
			throw new ProfitMandiBusinessException("Template File", "", "No order has been billed");
536
 
537
		}
538
		Set<String> invoiceNumbers = orders.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toSet());
539
 
540
		for (String invoicdNumber : invoiceNumbers) {
541
			rows.add(Arrays.asList(invoicdNumber));
542
 
543
		}
544
 
545
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
546
				.getCSVByteStream(Arrays.asList("Invoice Number", "Provider", "AWB"), rows);
547
 
548
		final HttpHeaders headers = new HttpHeaders();
549
		headers.set("Content-Type", "text/csv");
550
		headers.set("Content-disposition", "inline; filename=upload-shipping-template.csv");
551
		headers.setContentLength(baos.toByteArray().length);
552
 
553
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
554
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
555
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
556
 
557
	}
558
 
559
	private Map<Integer, String> getWarehouses(Set<CustomRetailer> positionRetailers) {
560
		Map<Integer, String> warehouses = new HashMap<>();
561
		positionRetailers.stream().forEach(x -> {
562
			if (x.getWarehouseId() != 0) {
563
				warehouses.put(x.getWarehouseId(), ProfitMandiConstants.WAREHOUSE_MAP.get(x.getWarehouseId()));
564
			}
565
		});
566
		return warehouses;
567
 
568
	}
569
 
570
	@RequestMapping(value = "/downloadProviderTatTemplate", method = RequestMethod.GET)
571
	public ResponseEntity<?> downloadProviderTatTemplate(HttpServletRequest request) throws Exception {
572
		List<List<?>> rows = new ArrayList<>();
573
		Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
574
		for (Entry<Integer, String> warehouse : warehouseMap.entrySet()) {
575
			rows.add(Arrays.asList("Delhivery", warehouse.getValue(), "110018", "-"));
576
		}
577
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
578
				Arrays.asList("Provider Name", "Source Warehouse", "Destination Pincode", "TAT in days"), rows);
579
 
580
		final HttpHeaders headers = new HttpHeaders();
581
		headers.set("Content-Type", "text/csv");
582
		headers.set("Content-disposition", "inline; filename=provider-tat-template.csv");
583
		headers.setContentLength(baos.toByteArray().length);
584
 
585
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
586
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
587
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
588
 
589
	}
590
 
591
}