Subversion Repositories SmartDukaan

Rev

Rev 29250 | Rev 29256 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.spice.profitmandi.service;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.spice.profitmandi.dao.entity.logistics.Provider;
import com.spice.profitmandi.dao.entity.logistics.ProviderTat;
import com.spice.profitmandi.dao.entity.logistics.PublicHolidays;
import com.spice.profitmandi.dao.entity.transaction.Order;
import com.spice.profitmandi.dao.model.DispatchNotificationModel;
import com.spice.profitmandi.dao.repository.logistics.ProviderTatRepository;
import com.spice.profitmandi.dao.repository.logistics.PublicHolidaysRepository;

import in.shop2020.model.v1.order.OrderStatus;

@Component
public class LogisticsServiceImpl implements LogisticsService {

        @Autowired
        private PublicHolidaysRepository publicHolidaysRepository;

        @Autowired
        private ProviderTatRepository providerTatRepository;

        @Override
        public LocalDate calculateDeliveryTimeline(LocalDate date, ProviderTat providerTat, int delayDays) {
                int businessDays = 0;
                int deliveryTat = 3;
                if (providerTat != null) {
                        deliveryTat = providerTat.getDeliveryTime();
                }
                deliveryTat = deliveryTat + delayDays;
                LocalDate currDate = date.plusDays(1);
                List<LocalDate> ph = publicHolidaysRepository.selectAllByDate(currDate).stream().map(x -> x.getDate())
                                .collect(Collectors.toList());
                while (businessDays < deliveryTat) {
                        if (ph.contains(currDate) || currDate.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
                        } else {
                                businessDays++;
                        }
                        currDate = currDate.plusDays(1);
                }
                return currDate;
        }

        @Override
        public Map<String, DispatchNotificationModel> markedOrderShippedDetail(List<Order> orders, Provider provider,
                        String airwaybillNo) {
                Map<String, DispatchNotificationModel> dispatchNotication = new HashMap<>();

                for (Order order : orders) {
                        if (order.getStatus().equals(OrderStatus.BILLED)) {
                                order.setLogisticsProviderId(provider.getId());
                                order.setAirwayBillNumber(airwaybillNo);
                                order.setStatus(OrderStatus.SHIPPED_FROM_WH);

                                ProviderTat pt = providerTatRepository.selectByProviderId(order.getLogisticsProviderId(),
                                                order.getWarehouseId(), order.getRetailerPinCode());
                                order.setShippingTimestamp(LocalDateTime.now());

                                LocalDate deliveryDate = this.calculateDeliveryTimeline(LocalDate.now(), pt, 0);
                                order.setExpectedDeliveryTime(deliveryDate.atStartOfDay());

                                if (dispatchNotication.get(airwaybillNo) != null) {
                                        DispatchNotificationModel dnm = dispatchNotication.get(airwaybillNo);
                                        List<String> invoiceNumbers = dnm.getInvoiceNumber();
                                        invoiceNumbers.add(order.getInvoiceNumber());
                                        dnm.setInvoiceNumber(invoiceNumbers);
                                        Float totalAmount = dnm.getTotalAmount();
                                        dnm.setTotalAmount(totalAmount + order.getTotalAmount());

                                        int totalQty = dnm.getTotalQty();
                                        dnm.setTotalQty(totalQty + order.getLineItem().getQuantity());

                                        dispatchNotication.put(airwaybillNo, dnm);

                                } else {
                                        DispatchNotificationModel dnm = new DispatchNotificationModel();
                                        List<String> invoiceNumber = new ArrayList<>();
                                        invoiceNumber.add(order.getInvoiceNumber());
                                        dnm.setInvoiceNumber(invoiceNumber);
                                        dnm.setTotalAmount(order.getTotalAmount());
                                        dnm.setTotalQty(order.getLineItem().getQuantity());
                                        dnm.setFofoId(order.getRetailerId());
                                        dnm.setProviderId(order.getLogisticsProviderId());
                                        dnm.setDate(deliveryDate);

                                        dispatchNotication.put(airwaybillNo, dnm);

                                }

                        }

                }
                return dispatchNotication;

        }

}