Subversion Repositories SmartDukaan

Rev

Rev 32884 | Rev 32974 | 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
 
29578 tejbeer 3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
29222 tejbeer 4
import com.spice.profitmandi.dao.entity.logistics.Provider;
5
import com.spice.profitmandi.dao.entity.logistics.ProviderTat;
6
import com.spice.profitmandi.dao.entity.transaction.Order;
7
import com.spice.profitmandi.dao.model.DispatchNotificationModel;
8
import com.spice.profitmandi.dao.repository.logistics.ProviderTatRepository;
9
import com.spice.profitmandi.dao.repository.logistics.PublicHolidaysRepository;
10
import in.shop2020.model.v1.order.OrderStatus;
32609 raveendra. 11
import org.apache.commons.lang.StringUtils;
12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.stereotype.Component;
29222 tejbeer 14
 
32609 raveendra. 15
import java.time.DayOfWeek;
16
import java.time.LocalDate;
17
import java.time.LocalDateTime;
18
import java.util.ArrayList;
19
import java.util.List;
20
import java.util.Map;
21
import java.util.stream.Collectors;
22
 
29222 tejbeer 23
@Component
24
public class LogisticsServiceImpl implements LogisticsService {
25
 
26
	@Autowired
27
	private PublicHolidaysRepository publicHolidaysRepository;
28
 
29
	@Autowired
30
	private ProviderTatRepository providerTatRepository;
31
 
32
	@Override
29250 tejbeer 33
	public LocalDate calculateDeliveryTimeline(LocalDate date, ProviderTat providerTat, int delayDays) {
29222 tejbeer 34
		int businessDays = 0;
29255 tejbeer 35
		int deliveryTat = 3;
29222 tejbeer 36
		if (providerTat != null) {
37
			deliveryTat = providerTat.getDeliveryTime();
38
		}
29250 tejbeer 39
		deliveryTat = deliveryTat + delayDays;
40
		LocalDate currDate = date.plusDays(1);
29222 tejbeer 41
		List<LocalDate> ph = publicHolidaysRepository.selectAllByDate(currDate).stream().map(x -> x.getDate())
42
				.collect(Collectors.toList());
43
		while (businessDays < deliveryTat) {
44
			if (ph.contains(currDate) || currDate.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
45
			} else {
46
				businessDays++;
47
			}
48
			currDate = currDate.plusDays(1);
49
		}
50
		return currDate;
51
	}
52
 
53
	@Override
54
	public Map<String, DispatchNotificationModel> markedOrderShippedDetail(List<Order> orders, Provider provider,
32609 raveendra. 55
																		   Map<String, DispatchNotificationModel> dispatchNotication, String airwaybillNo, LocalDateTime shippingTimestamp)
29578 tejbeer 56
			throws ProfitMandiBusinessException {
29222 tejbeer 57
 
58
		for (Order order : orders) {
59
			if (order.getStatus().equals(OrderStatus.BILLED)) {
32973 amit.gupta 60
				if(order.getBillingTimestamp().isBefore(shippingTimestamp)) {
61
					throw new ProfitMandiBusinessException("Uploaded File", "",
62
							"Invoice Number " + order.getInvoiceNumber() + " cannot be shipped before billing date");
63
				}
29578 tejbeer 64
				if (StringUtils.isEmpty(airwaybillNo)) {
65
					throw new ProfitMandiBusinessException("Uploaded File", "",
66
							"Invoice Number " + order.getInvoiceNumber() + " airwaybill_no is empty");
67
 
68
				}
31077 tejbeer 69
 
70
				if (airwaybillNo.equals("Error")) {
71
					break;
72
				}
29222 tejbeer 73
				order.setLogisticsProviderId(provider.getId());
74
				order.setAirwayBillNumber(airwaybillNo);
75
				order.setStatus(OrderStatus.SHIPPED_FROM_WH);
29305 tejbeer 76
				order.setStatusDescription("Order shipped from warehouses");
29222 tejbeer 77
 
78
				ProviderTat pt = providerTatRepository.selectByProviderId(order.getLogisticsProviderId(),
79
						order.getWarehouseId(), order.getRetailerPinCode());
32609 raveendra. 80
				order.setShippingTimestamp(shippingTimestamp);
29222 tejbeer 81
 
29250 tejbeer 82
				LocalDate deliveryDate = this.calculateDeliveryTimeline(LocalDate.now(), pt, 0);
29222 tejbeer 83
				order.setExpectedDeliveryTime(deliveryDate.atStartOfDay());
84
 
85
				if (dispatchNotication.get(airwaybillNo) != null) {
86
					DispatchNotificationModel dnm = dispatchNotication.get(airwaybillNo);
87
					List<String> invoiceNumbers = dnm.getInvoiceNumber();
88
					invoiceNumbers.add(order.getInvoiceNumber());
89
					dnm.setInvoiceNumber(invoiceNumbers);
90
					Float totalAmount = dnm.getTotalAmount();
91
					dnm.setTotalAmount(totalAmount + order.getTotalAmount());
92
 
93
					int totalQty = dnm.getTotalQty();
94
					dnm.setTotalQty(totalQty + order.getLineItem().getQuantity());
95
 
96
					dispatchNotication.put(airwaybillNo, dnm);
97
 
98
				} else {
99
					DispatchNotificationModel dnm = new DispatchNotificationModel();
100
					List<String> invoiceNumber = new ArrayList<>();
101
					invoiceNumber.add(order.getInvoiceNumber());
102
					dnm.setInvoiceNumber(invoiceNumber);
103
					dnm.setTotalAmount(order.getTotalAmount());
104
					dnm.setTotalQty(order.getLineItem().getQuantity());
105
					dnm.setFofoId(order.getRetailerId());
106
					dnm.setProviderId(order.getLogisticsProviderId());
107
					dnm.setDate(deliveryDate);
32884 amit.gupta 108
					dnm.setShippingDate(shippingTimestamp.toLocalDate());
29222 tejbeer 109
					dispatchNotication.put(airwaybillNo, dnm);
110
 
111
				}
112
 
113
			}
114
 
115
		}
116
		return dispatchNotication;
117
 
118
	}
119
 
120
}