Subversion Repositories SmartDukaan

Rev

Rev 6579 | Rev 9848 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.warehouse.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.mail.MessagingException;

import org.apache.commons.lang.StringUtils;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import in.shop2020.model.v1.catalog.CatalogServiceException;
import in.shop2020.model.v1.catalog.Item;
import in.shop2020.model.v1.inventory.InventoryService.Client;
import in.shop2020.thrift.clients.CatalogClient;
import in.shop2020.thrift.clients.InventoryClient;
import in.shop2020.utils.GmailUtils;
import in.shop2020.warehouse.handler.InventoryItemHandler;

public class InventoryMismatchGenerator {

        private InventoryItemHandler inventoryItemhandler;
        /**
         * @param args
         */
        
        public InventoryMismatchGenerator() {
                ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
                inventoryItemhandler = context.getBean(InventoryItemHandler.class);
        }
       
        public static void main(String[] args) {
                InventoryMismatchGenerator mismatchGenerator = new InventoryMismatchGenerator();
                try {
                        mismatchGenerator.sendMailForMismatches();
                } catch (MessagingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

        public void sendMailForMismatches() throws MessagingException {
                Map<Long, Long[]> availabilityMismatchMap = new HashMap<Long, Long[]>();
                
                List<Map<String, Integer>> serializedInventorybyScansinList = inventoryItemhandler.getCurrentSerializedInventory();
                List<Map<String, Integer>> unSerializedInventorybyScansinList = inventoryItemhandler.getCurrentNonSerializedInventory();
        
                Map<Long, Long> itemAvailabilityByScans = new HashMap<Long, Long>();
                
                for (Map<String,Integer> inventoryForItem : serializedInventorybyScansinList) {
                        Object sumObj = inventoryForItem.get("sum");
                        String sumString = sumObj.toString();
                        Long availability = Long.parseLong(sumString);
                        itemAvailabilityByScans.put(Long.parseLong(inventoryForItem.get("itemId").toString()), availability);
                }
                
                for (Map<String,Integer> inventoryForItem : unSerializedInventorybyScansinList) {
                        Object sumObj = inventoryForItem.get("sum");
                        String sumString = sumObj.toString();
                        Long availability = Long.parseLong(sumString);
                        itemAvailabilityByScans.put(Long.parseLong(inventoryForItem.get("itemId").toString()), availability);
                }
                
                
                
                Map<Long, Long> itemAvailabilitiesOnSite = null;
                
                try {
                        in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = new CatalogClient().getClient();
                        List<Item> activeItems =        catalogClient.getAllItems(false);
                        List<Long> itemIds = new ArrayList<Long>();
                        for(Item item : activeItems) {
                                itemIds.add(item.getId());
                        }
                        Client inventoryClient = new InventoryClient().getClient();
                        itemAvailabilitiesOnSite = inventoryClient.getItemAvailabilitiesAtOurWarehouses(itemIds);
                } catch (TException e) {
                        e.printStackTrace();
                        return;
                } catch (CatalogServiceException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                

                for( Long itemId : itemAvailabilitiesOnSite.keySet()) {
                        if(itemAvailabilityByScans.containsKey(itemId)) {
                                if(itemAvailabilitiesOnSite.get(itemId)!=itemAvailabilityByScans.get(itemId)) {
                                        Long[] mismatch = new Long[2];
                                        mismatch[0] = itemAvailabilityByScans.get(itemId);
                                        mismatch[1] = itemAvailabilitiesOnSite.get(itemId);
                                        availabilityMismatchMap.put(itemId, mismatch);
                                }
                        } else  {
                                if(itemAvailabilitiesOnSite.get(itemId)!=0) {
                                        Long[] mismatch = new Long[2];
                                        mismatch[0] = 0L;
                                        mismatch[1] = itemAvailabilitiesOnSite.get(itemId);
                                        availabilityMismatchMap.put(itemId, mismatch);
                                }
                        }
                }
                
                for( Long itemId : itemAvailabilityByScans.keySet()) {
                        if(!availabilityMismatchMap.containsKey(itemId)) {
                                if(itemAvailabilitiesOnSite.containsKey(itemId)) {
                                        if(itemAvailabilitiesOnSite.get(itemId)!=0 && (itemAvailabilitiesOnSite.get(itemId)!=itemAvailabilityByScans.get(itemId))) {
                                                Long[] mismatch = new Long[2];
                                                mismatch[0] = itemAvailabilityByScans.get(itemId);
                                                mismatch[1] = itemAvailabilitiesOnSite.get(itemId);
                                                availabilityMismatchMap.put(itemId, mismatch);
                                        }
                                } else  {
                                        if(itemAvailabilityByScans.get(itemId)!=0) {
                                                Long[] mismatch = new Long[2];
                                                mismatch[0] = itemAvailabilityByScans.get(itemId);
                                                mismatch[1] = 0L;
                                                availabilityMismatchMap.put(itemId, mismatch);
                                        }
                                }
                        }
                }
                
        String subject = availabilityMismatchMap.size() + " mismatches in inventory compared to scan Records: ";
        File file = new File("inv_mismatches.xls");

        try {
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
            bufferedWriter.write(StringUtils.join(new String[] { "Item Id",
                    "Brand", "Model Name", "Model Number",
                    "Color", "Inventory shown", "Inventory through Scans" }, '\t'));
            for (Long itemId : availabilityMismatchMap.keySet()) {
                Item item = null;
                try {
                        in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = new CatalogClient().getClient();
                        item = catalogClient.getItem(itemId);
                                } catch (CatalogServiceException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                } catch (TException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                } 
                bufferedWriter.newLine();
                bufferedWriter.write(StringUtils.join(new String[] { String.valueOf(item.getId()), item.getBrand(), item.getModelName(),
                        item.getModelNumber(), item.getColor(),availabilityMismatchMap.get(itemId)[1].toString(), availabilityMismatchMap.get(itemId)[0].toString() }, "\t"));
            }
            bufferedWriter.close();
        } catch (IOException e) {
//TODO            logger.error("Could not write mismatches to file", e);
        }

        GmailUtils g = new GmailUtils();
        g.sendSSLMessage(new String[]{ "amar.kumar@shop2020.in","sandeep.sachdeva@shop2020.in","rajveer.singh@shop2020.in" }, subject, 
                "", "cnc.center@shop2020.in", "5h0p2o2o", file.getAbsolutePath());
        }
}