Rev 23905 | Rev 23910 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.smartdukaan.cron.migrations;import java.io.File;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.Map;import java.util.stream.Collectors;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import org.apache.commons.io.FileUtils;import org.apache.commons.lang.StringUtils;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;import com.spice.profitmandi.common.model.CustomRetailer;import com.spice.profitmandi.common.util.FormattingUtils;import com.spice.profitmandi.dao.entity.fofo.FofoStore;import com.spice.profitmandi.dao.entity.fofo.Purchase;import com.spice.profitmandi.dao.entity.transaction.LineItem;import com.spice.profitmandi.dao.entity.transaction.LineItemImei;import com.spice.profitmandi.dao.entity.transaction.Order;import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;import com.spice.profitmandi.dao.repository.transaction.LineItemImeisRepository;import com.spice.profitmandi.dao.repository.transaction.LineItemRepository;import com.spice.profitmandi.dao.repository.transaction.OrderRepository;import com.spice.profitmandi.service.inventory.InventoryService;import com.spice.profitmandi.service.transaction.TransactionService;import com.spice.profitmandi.service.user.RetailerService;import com.spice.profitmandi.service.wallet.WalletService;@Component@Transactional(rollbackFor = Throwable.class)public class RunOnceTasks {private static final Logger LOGGER = LogManager.getLogger(RunOnceTasks.class);@Autowiredprivate LineItemRepository lineItemRepository;@Autowiredprivate JavaMailSender mailSender;@Autowiredprivate WalletService walletService;@Autowiredprivate InventoryService inventoryService;@Autowiredprivate TransactionService transactionService;@Autowiredprivate OrderRepository orderRepository;@Autowiredprivate FofoStoreRepository fofoStoreRepository;@Autowiredprivate LineItemImeisRepository lineItemImeisRepository;@Autowiredprivate RetailerService retailerService;@Autowiredprivate PurchaseRepository purchaseRepository;public void populateGrnTimestamp() {List<Purchase> allPurchases = purchaseRepository.selectAll();for (Purchase p : allPurchases) {String invoiceNumber = p.getPurchaseReference();if (p.getCompleteTimestamp() == null) {LOGGER.info("GRN for invoice {} is delivered but partially Completed.", p.getPurchaseReference());} else {List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(invoiceNumber, p.getFofoId());for (Order order : orders) {if (order.getPartnerGrnTimestamp() == null) {order.setPartnerGrnTimestamp(p.getCompleteTimestamp());orderRepository.persist(order);}}}}}public void migarateLineItemsToNewTable() {LOGGER.info("Before Migrated LineItems Successfully");int lineItemImeiId = 0;LocalDateTime startDate = null;try {lineItemImeiId = lineItemImeisRepository.selectMaxId();LineItem lineItem = lineItemRepository.selectById(lineItemImeisRepository.selectById(lineItemImeiId).getLineItemId());Order order = orderRepository.selectById(lineItem.getOrderId());startDate = order.getBillingTimestamp();} catch (Exception e) {LOGGER.info("Running before first time");startDate = LocalDateTime.of(LocalDate.of(2017, 7, 1), LocalTime.MIDNIGHT);}List<Order> orders = orderRepository.selectAllByBillingDatesBetween(startDate, LocalDateTime.now());Collections.reverse(orders);for (Order order : orders) {try {String serialNumbers = order.getLineItem().getSerialNumber();if (!StringUtils.isEmpty(serialNumbers)) {List<String> serialNumberList = Arrays.asList(serialNumbers.split(","));for (String serialNumber : serialNumberList) {int lineItemId = order.getLineItem().getId();LineItemImei lineItemImei = new LineItemImei();lineItemImei.setSerialNumber(serialNumber);lineItemImei.setLineItemId(lineItemId);lineItemImeisRepository.persist(lineItemImei);}} else {LOGGER.info("Serial Numbers dont exist for Order {}", order.getId());}} catch (Exception e) {LOGGER.info("Error occurred while creating lineitem imei {}, because of {}", order.getId(),e.getMessage());}}LOGGER.info("Migrated LineItems Successfully");}public void getInvestmentDetails() throws Exception {File f = new File("/tmp/InvestmentSummary-" + FormattingUtils.formatDate(LocalDateTime.now()) + ".csv");List<String> lines = new ArrayList<>();lines.add("Code\tStoreName\tEmail\tMobile\tminimumInvestment\twalletAmount\tinStockAmount\tunbilledStockAmount\tgrnPendingStockAmount\tTotalInvested");List<FofoStore> fofoStores = fofoStoreRepository.selectAll();Map<Integer, CustomRetailer> customRetailerMap = retailerService.getFofoRetailers(fofoStores.stream().map(x -> x.getId()).collect(Collectors.toList()));for (FofoStore fofoStore : fofoStores) {try {CustomRetailer retailer = customRetailerMap.get(fofoStore.getId());float walletAmount = walletService.getUserWallet(fofoStore.getId()).getAmount();float inStockAmount = inventoryService.getTotalAmountInStock(fofoStore.getId());float unbilledStockAmount = 0;List<Order> unbilledOrders = transactionService.getInTransitOrders(fofoStore.getId());for (Order unBilledOrder : unbilledOrders) {unbilledStockAmount += unBilledOrder.getTotalAmount();}float grnPendingStockAmount = 0;List<Order> grnPendingOrders = orderRepository.selectPendingGrnOrders(fofoStore.getId());for (Order grnPendingOrder : grnPendingOrders) {grnPendingStockAmount += grnPendingOrder.getTotalAmount();}float totalInvestedAmount = walletAmount + inStockAmount + unbilledStockAmount + grnPendingStockAmount;lines.add(String.join("\t", fofoStore.getCode(), retailer.getBusinessName(), retailer.getMobileNumber(),String.valueOf(fofoStore.getMinimumInvestment()), String.valueOf(walletAmount),String.valueOf(inStockAmount), String.valueOf(unbilledStockAmount),String.valueOf(grnPendingStockAmount), String.valueOf(totalInvestedAmount)));} catch (Exception e) {e.printStackTrace();continue;}FileUtils.writeLines(f, lines);this.sendMailWithAttachments("amit.gupta@shop2020.in", "Partner Investment Summary", "PFA", Arrays.asList(f));}}private void sendMailWithAttachments(String email, String subject, String body, List<File> attachments) throws Exception {MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message,true);helper.setSubject(subject);helper.setText(body);//String[] cc = {"backup@shop2020.in", "gadgetcops.01@gmail.com"};//String[] cc = {"amit.gupta@shop2020.in"};//helper.setCc(cc);helper.setTo(email);InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "ProfitMandi Admin");//helper.setTo("help@smartdukaan.com");helper.setFrom(senderAddress);for (File file : attachments) {helper.addAttachment(file.getName(), file);}mailSender.send(message);}}