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 blocke.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 blocke.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 blocke.printStackTrace();} catch (TException e) {// TODO Auto-generated catch blocke.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());}}