Subversion Repositories SmartDukaan

Rev

Rev 29255 | Rev 29292 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
29222 tejbeer 1
package com.spice.profitmandi.service;
2
 
3
import java.time.DayOfWeek;
4
import java.time.LocalDate;
29250 tejbeer 5
import java.time.LocalDateTime;
29222 tejbeer 6
import java.util.ArrayList;
7
import java.util.HashMap;
8
import java.util.List;
9
import java.util.Map;
10
import java.util.stream.Collectors;
11
 
12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.stereotype.Component;
14
 
15
import com.spice.profitmandi.dao.entity.logistics.Provider;
16
import com.spice.profitmandi.dao.entity.logistics.ProviderTat;
17
import com.spice.profitmandi.dao.entity.logistics.PublicHolidays;
18
import com.spice.profitmandi.dao.entity.transaction.Order;
19
import com.spice.profitmandi.dao.model.DispatchNotificationModel;
20
import com.spice.profitmandi.dao.repository.logistics.ProviderTatRepository;
21
import com.spice.profitmandi.dao.repository.logistics.PublicHolidaysRepository;
22
 
23
import in.shop2020.model.v1.order.OrderStatus;
24
 
25
@Component
26
public class LogisticsServiceImpl implements LogisticsService {
27
 
28
	@Autowired
29
	private PublicHolidaysRepository publicHolidaysRepository;
30
 
31
	@Autowired
32
	private ProviderTatRepository providerTatRepository;
33
 
34
	@Override
29250 tejbeer 35
	public LocalDate calculateDeliveryTimeline(LocalDate date, ProviderTat providerTat, int delayDays) {
29222 tejbeer 36
		int businessDays = 0;
29255 tejbeer 37
		int deliveryTat = 3;
29222 tejbeer 38
		if (providerTat != null) {
39
			deliveryTat = providerTat.getDeliveryTime();
40
		}
29250 tejbeer 41
		deliveryTat = deliveryTat + delayDays;
42
		LocalDate currDate = date.plusDays(1);
29222 tejbeer 43
		List<LocalDate> ph = publicHolidaysRepository.selectAllByDate(currDate).stream().map(x -> x.getDate())
44
				.collect(Collectors.toList());
45
		while (businessDays < deliveryTat) {
46
			if (ph.contains(currDate) || currDate.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
47
			} else {
48
				businessDays++;
49
			}
50
			currDate = currDate.plusDays(1);
51
		}
52
		return currDate;
53
	}
54
 
55
	@Override
56
	public Map<String, DispatchNotificationModel> markedOrderShippedDetail(List<Order> orders, Provider provider,
57
			String airwaybillNo) {
58
		Map<String, DispatchNotificationModel> dispatchNotication = new HashMap<>();
59
 
29256 tejbeer 60
 
29222 tejbeer 61
		for (Order order : orders) {
62
			if (order.getStatus().equals(OrderStatus.BILLED)) {
63
				order.setLogisticsProviderId(provider.getId());
64
				order.setAirwayBillNumber(airwaybillNo);
65
				order.setStatus(OrderStatus.SHIPPED_FROM_WH);
66
 
67
				ProviderTat pt = providerTatRepository.selectByProviderId(order.getLogisticsProviderId(),
68
						order.getWarehouseId(), order.getRetailerPinCode());
29250 tejbeer 69
				order.setShippingTimestamp(LocalDateTime.now());
29222 tejbeer 70
 
29250 tejbeer 71
				LocalDate deliveryDate = this.calculateDeliveryTimeline(LocalDate.now(), pt, 0);
29222 tejbeer 72
				order.setExpectedDeliveryTime(deliveryDate.atStartOfDay());
73
 
74
				if (dispatchNotication.get(airwaybillNo) != null) {
75
					DispatchNotificationModel dnm = dispatchNotication.get(airwaybillNo);
76
					List<String> invoiceNumbers = dnm.getInvoiceNumber();
77
					invoiceNumbers.add(order.getInvoiceNumber());
78
					dnm.setInvoiceNumber(invoiceNumbers);
79
					Float totalAmount = dnm.getTotalAmount();
80
					dnm.setTotalAmount(totalAmount + order.getTotalAmount());
81
 
82
					int totalQty = dnm.getTotalQty();
83
					dnm.setTotalQty(totalQty + order.getLineItem().getQuantity());
84
 
85
					dispatchNotication.put(airwaybillNo, dnm);
86
 
87
				} else {
88
					DispatchNotificationModel dnm = new DispatchNotificationModel();
89
					List<String> invoiceNumber = new ArrayList<>();
90
					invoiceNumber.add(order.getInvoiceNumber());
91
					dnm.setInvoiceNumber(invoiceNumber);
92
					dnm.setTotalAmount(order.getTotalAmount());
93
					dnm.setTotalQty(order.getLineItem().getQuantity());
94
					dnm.setFofoId(order.getRetailerId());
95
					dnm.setProviderId(order.getLogisticsProviderId());
96
					dnm.setDate(deliveryDate);
97
 
98
					dispatchNotication.put(airwaybillNo, dnm);
99
 
100
				}
101
 
102
			}
103
 
104
		}
105
		return dispatchNotication;
106
 
107
	}
108
 
109
}