Subversion Repositories SmartDukaan

Rev

Rev 10330 | Rev 14753 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6484 amar.kumar 1
package in.shop2020.warehouse.util;
2
 
14751 manish.sha 3
import in.shop2020.model.v1.inventory.BillingType;
4
import in.shop2020.model.v1.inventory.InventoryService;
5
import in.shop2020.model.v1.inventory.InventoryServiceException;
6
import in.shop2020.model.v1.inventory.InventoryType;
7
import in.shop2020.model.v1.inventory.ItemInventory;
8
import in.shop2020.model.v1.inventory.Warehouse;
9
import in.shop2020.model.v1.inventory.WarehouseType;
10
import in.shop2020.thrift.clients.InventoryClient;
11
import in.shop2020.utils.GmailUtils;
12
import in.shop2020.warehouse.InventoryAvailability;
13
import in.shop2020.warehouse.handler.ScanHandler;
14
 
6484 amar.kumar 15
import java.io.BufferedWriter;
16
import java.io.File;
17
import java.io.FileWriter;
18
import java.io.IOException;
19
import java.util.ArrayList;
14751 manish.sha 20
import java.util.Arrays;
6484 amar.kumar 21
import java.util.HashMap;
22
import java.util.List;
23
import java.util.Map;
24
 
25
import javax.mail.MessagingException;
26
 
27
import org.apache.commons.lang.StringUtils;
28
import org.apache.thrift.TException;
29
import org.springframework.context.ApplicationContext;
30
import org.springframework.context.support.ClassPathXmlApplicationContext;
31
 
32
public class InventoryMismatchGenerator {
33
 
14751 manish.sha 34
	private ScanHandler scanHandler;
35
 
6484 amar.kumar 36
	/**
37
	 * @param args
38
	 */
39
 
40
	public InventoryMismatchGenerator() {
41
		ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
14751 manish.sha 42
		scanHandler = context.getBean(ScanHandler.class);
6484 amar.kumar 43
	}
44
 
45
	public static void main(String[] args) {
46
		InventoryMismatchGenerator mismatchGenerator = new InventoryMismatchGenerator();
47
		try {
48
			mismatchGenerator.sendMailForMismatches();
14751 manish.sha 49
		} catch (Exception e) {
6484 amar.kumar 50
			// TODO Auto-generated catch block
51
			e.printStackTrace();
52
		}
53
	}
54
 
14751 manish.sha 55
	public void sendMailForMismatches() throws MessagingException, TException, InventoryServiceException {
56
 
57
		List<InventoryMismatchUnit> inventoryMismatches = new ArrayList<InventoryMismatchUnit>();
6484 amar.kumar 58
 
14751 manish.sha 59
		InventoryClient inventoryClient = new InventoryClient();
60
 
61
		InventoryService.Client invClient = inventoryClient.getClient();
62
 
63
		Map<Long, ItemInventory> itemInventoryMap = invClient.getInventorySnapshot(0);
64
		List<Warehouse> allWarehouses = invClient.getAllWarehouses(false);
65
 
66
		List<Long> PHYSICAL_WAREHOUSE_IDS = Arrays.asList(7L,13L,1765L,3298L,3931L);
67
		Map<Long, Warehouse> allWarehousesMap = new HashMap<Long, Warehouse>();
68
 
69
		List<InventoryAvailability> totalInventoryList;
70
 
71
		for(Warehouse wh : allWarehouses){
72
			allWarehousesMap.put(wh.getId(), wh);
73
		}
74
 
75
		for(Long physicalWarehouseId : PHYSICAL_WAREHOUSE_IDS){
76
			totalInventoryList = new ArrayList<InventoryAvailability>();
77
 
78
			List<InventoryAvailability> serializedInventoryList = scanHandler.getCurrentSerializedInventoryByScans(physicalWarehouseId);
79
			List<InventoryAvailability> nonSerializedInventoryList = scanHandler.getCurrentNonSerializedInventoryByScans(physicalWarehouseId);
80
 
81
			totalInventoryList.addAll(serializedInventoryList);
82
			totalInventoryList.addAll(nonSerializedInventoryList);
83
 
84
			for(InventoryAvailability availability : totalInventoryList){
85
				ItemInventory itemInvObj = itemInventoryMap.get(availability.getItemId());
86
				Map<Long, Long> itemAvailibility = itemInvObj.getAvailability();
87
				long totalInventoryAsCatalog = 0;
88
				for(Long whId : itemAvailibility.keySet()){
89
					Warehouse warehouse = allWarehousesMap.get(whId);
90
					if(warehouse.getBillingType() == BillingType.OURS && warehouse.getBillingWarehouseId()==physicalWarehouseId &&
91
					   warehouse.getInventoryType()==InventoryType.GOOD && warehouse.getWarehouseType() == WarehouseType.OURS){
92
						totalInventoryAsCatalog = totalInventoryAsCatalog + itemAvailibility.get(whId);
93
					}
94
				}
95
				InventoryMismatchUnit invMismatchUnit = new InventoryMismatchUnit();
96
				invMismatchUnit.setItemId(availability.getItemId());
97
				invMismatchUnit.setBrand(availability.getBrand());
98
				invMismatchUnit.setModelName(availability.getModelName());
99
				invMismatchUnit.setModelNumber(availability.getModelNumber());
100
				invMismatchUnit.setColor(availability.getColor());
101
				invMismatchUnit.setQuantityAsPerScans(availability.getQuantity());
102
				invMismatchUnit.setQuantityAsPerCatalog(totalInventoryAsCatalog);
103
				inventoryMismatches.add(invMismatchUnit);
104
			}
105
 
106
		}
107
 
108
		/*
109
 
110
 
111
 
6484 amar.kumar 112
		List<Map<String, Integer>> serializedInventorybyScansinList = inventoryItemhandler.getCurrentSerializedInventory();
113
		List<Map<String, Integer>> unSerializedInventorybyScansinList = inventoryItemhandler.getCurrentNonSerializedInventory();
14751 manish.sha 114
 
115
 
6484 amar.kumar 116
 
117
		Map<Long, Long> itemAvailabilityByScans = new HashMap<Long, Long>();
118
 
119
		for (Map<String,Integer> inventoryForItem : serializedInventorybyScansinList) {
120
			Object sumObj = inventoryForItem.get("sum");
121
			String sumString = sumObj.toString();
122
			Long availability = Long.parseLong(sumString);
123
			itemAvailabilityByScans.put(Long.parseLong(inventoryForItem.get("itemId").toString()), availability);
124
		}
125
 
126
		for (Map<String,Integer> inventoryForItem : unSerializedInventorybyScansinList) {
127
			Object sumObj = inventoryForItem.get("sum");
128
			String sumString = sumObj.toString();
129
			Long availability = Long.parseLong(sumString);
130
			itemAvailabilityByScans.put(Long.parseLong(inventoryForItem.get("itemId").toString()), availability);
131
		}
132
 
133
 
134
 
135
		Map<Long, Long> itemAvailabilitiesOnSite = null;
136
 
137
		try {
138
			in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = new CatalogClient().getClient();
6493 amar.kumar 139
			List<Item> activeItems = 	catalogClient.getAllItems(false);
6484 amar.kumar 140
			List<Long> itemIds = new ArrayList<Long>();
141
			for(Item item : activeItems) {
142
				itemIds.add(item.getId());
143
			}
14751 manish.sha 144
			 Client inventoryClient = new InventoryClient().getClient();
145
			itemAvailabilitiesOnSite = inventoryClient.getItemAvailabilitiesAtOurWarehouses(itemIds); 
6484 amar.kumar 146
		} catch (TException e) {
147
			e.printStackTrace();
148
			return;
149
		} catch (CatalogServiceException e) {
150
			// TODO Auto-generated catch block
151
			e.printStackTrace();
152
		}
153
 
154
 
155
		for( Long itemId : itemAvailabilitiesOnSite.keySet()) {
156
			if(itemAvailabilityByScans.containsKey(itemId)) {
157
				if(itemAvailabilitiesOnSite.get(itemId)!=itemAvailabilityByScans.get(itemId)) {
158
					Long[] mismatch = new Long[2];
159
					mismatch[0] = itemAvailabilityByScans.get(itemId);
160
					mismatch[1] = itemAvailabilitiesOnSite.get(itemId);
161
					availabilityMismatchMap.put(itemId, mismatch);
162
				}
163
			} else  {
164
				if(itemAvailabilitiesOnSite.get(itemId)!=0) {
165
					Long[] mismatch = new Long[2];
166
					mismatch[0] = 0L;
167
					mismatch[1] = itemAvailabilitiesOnSite.get(itemId);
168
					availabilityMismatchMap.put(itemId, mismatch);
169
				}
170
			}
171
		}
172
 
173
		for( Long itemId : itemAvailabilityByScans.keySet()) {
174
			if(!availabilityMismatchMap.containsKey(itemId)) {
175
				if(itemAvailabilitiesOnSite.containsKey(itemId)) {
176
					if(itemAvailabilitiesOnSite.get(itemId)!=0 && (itemAvailabilitiesOnSite.get(itemId)!=itemAvailabilityByScans.get(itemId))) {
177
						Long[] mismatch = new Long[2];
178
						mismatch[0] = itemAvailabilityByScans.get(itemId);
179
						mismatch[1] = itemAvailabilitiesOnSite.get(itemId);
180
						availabilityMismatchMap.put(itemId, mismatch);
181
					}
9849 amar.kumar 182
				} else {
6484 amar.kumar 183
					if(itemAvailabilityByScans.get(itemId)!=0) {
184
						Long[] mismatch = new Long[2];
185
						mismatch[0] = itemAvailabilityByScans.get(itemId);
186
						mismatch[1] = 0L;
187
						availabilityMismatchMap.put(itemId, mismatch);
188
					}
189
				}
190
			}
14751 manish.sha 191
		}*/
192
		int mismatchRecordsNumber = 0;
9851 amar.kumar 193
        //String subject = availabilityMismatchMap.size() + " mismatches in inventory compared to scan Records: ";
6484 amar.kumar 194
        File file = new File("inv_mismatches.xls");
195
 
196
        try {
197
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
198
            bufferedWriter.write(StringUtils.join(new String[] { "Item Id",
199
                    "Brand", "Model Name", "Model Number",
200
                    "Color", "Inventory shown", "Inventory through Scans" }, '\t'));
14751 manish.sha 201
            for (InventoryMismatchUnit invUnit : inventoryMismatches) {
202
            	if(invUnit.getQuantityAsPerScans()==invUnit.getQuantityAsPerCatalog()){
9217 amar.kumar 203
            		continue;
204
            	}
6484 amar.kumar 205
                bufferedWriter.newLine();
14751 manish.sha 206
                bufferedWriter.write(StringUtils.join(new String[] { String.valueOf(invUnit.getItemId()), invUnit.getBrand(), invUnit.getModelName(),
207
                		invUnit.getModelNumber(), invUnit.getColor(),invUnit.getQuantityAsPerCatalog()+"", invUnit.getQuantityAsPerScans()+"" }, "\t"));
208
                mismatchRecordsNumber++;
6484 amar.kumar 209
            }
210
            bufferedWriter.close();
211
        } catch (IOException e) {
14751 manish.sha 212
 
6484 amar.kumar 213
        }
9851 amar.kumar 214
        String subject = mismatchRecordsNumber + " mismatches in inventory compared to scan Records: ";
6484 amar.kumar 215
        GmailUtils g = new GmailUtils();
14751 manish.sha 216
        g.sendSSLMessage(new String[]{ "manish.sharma@shop2020.in"/*,"sandeep.sachdeva@shop2020.in","rajveer.singh@shop2020.in"*/ }, subject, 
217
                "", "adwords@shop2020.in", "adwords_shop2020", file.getAbsolutePath());
6484 amar.kumar 218
	}
219
}