Subversion Repositories SmartDukaan

Rev

Rev 31091 | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.spice.profitmandi.service.wallet;

import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
import com.spice.profitmandi.dao.cart.CartService;
import com.spice.profitmandi.dao.entity.transaction.Order;
import com.spice.profitmandi.dao.entity.transaction.Payment;
import com.spice.profitmandi.dao.entity.transaction.Transaction;
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
import com.spice.profitmandi.dao.repository.transaction.PaymentRepository;
import com.spice.profitmandi.dao.repository.transaction.TransactionRepository;
import com.spice.profitmandi.service.order.OrderService;
import in.shop2020.model.v1.order.WalletReferenceType;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

@Component
public class CommonPaymentService {

        private static final Logger log = LogManager.getLogger(CommonPaymentService.class);

        @Autowired
        private WalletService walletService;

        @Autowired
        private OrderRepository orderRepository;

        @Autowired
        private OrderService orderService;

        @Autowired
        private TransactionRepository transactionRepository;

        @Autowired
        private PaymentRepository paymentRepository;

        @Autowired
        private CartService cartService;

        public void payThroughWallet(int transactionId) throws ProfitMandiBusinessException {
                Transaction transaction = transactionRepository.selectById(transactionId);
                List<Order> orders = orderRepository.selectAllByTransactionId(transactionId);
                payThroughWallet(transaction, orders);
        }

        public void payThroughWallet(Transaction transaction, List<Order> orders) throws ProfitMandiBusinessException {
                double walletAmount = orders.stream().collect(Collectors.summingDouble(Order::getTotalAmount));
                walletService.consumeAmountFromWallet(transaction.getRetailerId(), transaction.getId(),
                                WalletReferenceType.PURCHASE, "Against Order purchase", (float) walletAmount, LocalDateTime.now());
                this.addPayment(transaction, walletAmount);
        }

        private void addPayment(Transaction transaction, double walletAmount) {
                Payment payment = new Payment();
                payment.setAmount(walletAmount);
                payment.setGatewayId(8);
                payment.setStatus(2);
                payment.setGatewayTxnStatus("SUCCESS");
                payment.setDescription("Payment Received");
                payment.setUserId(transaction.getRetailerId());
                payment.setInitTimestamp(LocalDateTime.now());
                payment.setSuccessTimestamp(LocalDateTime.now());
                payment.setDigital(false);
                payment.setMerchantTxnId(transaction.getId());
                paymentRepository.persist(payment);
        }
}