Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
8616 vikram.rag 1
package in.shop2020;
2
 
3
import in.shop2020.logistics.DeliveryType;
4
import in.shop2020.logistics.LogisticsInfo;
5
import in.shop2020.logistics.LogisticsServiceException;
6
import in.shop2020.model.v1.catalog.Item;
7
import in.shop2020.model.v1.catalog.CatalogService.Client;
8
import in.shop2020.model.v1.inventory.InventoryType;
9
import in.shop2020.model.v1.inventory.ItemInventory;
10
import in.shop2020.model.v1.inventory.Warehouse;
11
import in.shop2020.model.v1.inventory.WarehouseType;
12
import in.shop2020.thrift.clients.CatalogClient;
13
import in.shop2020.thrift.clients.InventoryClient;
14
import in.shop2020.thrift.clients.LogisticsClient;
15
import in.shop2020.utils.GmailUtils;
16
 
17
import java.io.File;
18
import java.io.PrintWriter;
19
import java.io.StringWriter;
20
import java.text.DateFormat;
21
import java.text.SimpleDateFormat;
22
import java.util.ArrayList;
23
import java.util.Date;
24
import java.util.HashMap;
25
import java.util.List;
26
import java.util.Map;
27
import java.util.Random;
28
 
29
import javax.xml.bind.JAXBContext;
30
import javax.xml.bind.JAXBException;
31
import javax.xml.bind.Marshaller;
32
 
33
import org.apache.thrift.TException;
34
import org.apache.thrift.transport.TTransportException;
35
 
36
import utilities.ScpService;
37
import inventory.SaholicAPI;
38
import inventory.SaholicAPI.Inventory;;
39
 
40
public class CreateSnapDealInventoryFeed {
41
	private static final String SNAPDEAL_INVENTORY_XML = "/home/snapdeal-inventory.xml";
42
 
43
	public static void main(String... args){
44
		CatalogClient catalogServiceClient = null;
45
		Map<Long,Long> itemInventoryMap = new HashMap<Long,Long>();
46
		try {
47
			catalogServiceClient = new CatalogClient();
48
		} catch (TTransportException e) {
49
			// TODO Auto-generated catch block
50
			e.printStackTrace();
51
		}
52
		Client catalogClient = catalogServiceClient.getClient();
53
		try {
54
			List<Item> items = catalogClient.getAllSnapdealListedActiveItems();
55
			File file = new File(SNAPDEAL_INVENTORY_XML);
56
			JAXBContext context;
57
			Marshaller m=null;
58
			try {
59
				context = JAXBContext.newInstance(SaholicAPI.class);
60
				m = context.createMarshaller();
61
			} catch (JAXBException e1) {
62
				e1.printStackTrace();
63
			}
64
 
65
			SaholicAPI saholicAPI =  new SaholicAPI();
66
			DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
67
			Date date = new Date();
68
			saholicAPI.setCreateDate(dateFormat.format(date));
8658 vikram.rag 69
			saholicAPI.setFeedIdentifier(date.getTime());
8616 vikram.rag 70
			List<Inventory> inventoryList = saholicAPI.getInventory();
71
			InventoryClient inventoryServiceClient = null;
72
			try {
73
				inventoryServiceClient = new InventoryClient();
74
			} catch (TTransportException e) {
75
				// TODO Auto-generated catch block
76
				e.printStackTrace();
77
			}
78
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
79
			List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
80
			Map<Long, ItemInventory> availability = inventoryClient.getInventorySnapshot(0);
81
			List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);
82
			List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
83
			List<Long> thirdpartywarehouseids = new ArrayList<Long>();
84
			List<Long> oursGoodWarehouse = new ArrayList<Long>();
85
			for(Warehouse warehouse:warehouses){
86
				thirdpartywarehouseids.add(warehouse.getId());
87
				//System.out.println("Warehouse id is " + warehouse.getId());
88
			}
89
			for (Warehouse warehouse:ours_warehouses){
90
				oursGoodWarehouse.add(warehouse.getId());
91
			}
92
			for(in.shop2020.model.v1.catalog.Item thriftItem:items){
93
				long available=0;
94
				long reserve=0;
95
				List<Warehouse> vendor_warehouses=null;
96
				if(availability.get(thriftItem.getId())!=null){ 
97
					ItemInventory iteminventory = availability.get(thriftItem.getId());
98
					Map<Long,Long> itemavailability = new HashMap<Long,Long>();
99
					itemavailability = iteminventory.getAvailability();
100
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
101
						vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);
102
						vendor_warehouses.addAll(ours_warehouses);
103
						for (Warehouse warehouse:vendor_warehouses){
104
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
105
							ignoredItem.setItemId(thriftItem.getId());
106
							ignoredItem.setWarehouseId(warehouse.getId());
107
							if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem))
108
								available = available + itemavailability.get(warehouse.getId());
109
						}
110
					}
111
					else{
112
						for (Map.Entry<Long,Long> entry :  itemavailability.entrySet()) {
113
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
114
							ignoredItem.setItemId(thriftItem.getId());
115
							ignoredItem.setWarehouseId(entry.getKey());
116
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
117
								available =  available + entry.getValue();	
118
							}
119
						}
120
					}
121
					Map<Long,Long> itemreserve = new HashMap<Long,Long>();
122
					itemreserve = iteminventory.getReserved();
123
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
124
						System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());
125
						for (Warehouse warehouse:vendor_warehouses){
126
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
127
							ignoredItem.setItemId(thriftItem.getId());
128
							ignoredItem.setWarehouseId(warehouse.getId());
129
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId()))
130
								reserve = reserve + itemreserve.get(warehouse.getId());
131
						}
132
					}else{
133
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
134
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
135
							ignoredItem.setItemId(thriftItem.getId());
136
							ignoredItem.setWarehouseId(entry.getKey());
137
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
138
								reserve =  reserve + entry.getValue();
139
							}
140
							else{
141
								System.out.println("skipping inventory for warehouse id " + entry.getKey());
142
							}
143
						}
144
					}
145
					itemInventoryMap.put(thriftItem.getId(), available);
146
				}
147
				else{
148
					itemInventoryMap.put(thriftItem.getId(),(long) 0);
149
				}
150
			}
151
			if(!itemInventoryMap.isEmpty()){
152
				in.shop2020.logistics.LogisticsService.Client logisticsClient=null;
153
				LogisticsClient logisticsServiceClient = null;
154
				try {
155
					logisticsServiceClient = new LogisticsClient("logistics_service_prod_server_host","logistics_service_prod_server_port");
156
					logisticsClient = logisticsServiceClient.getClient();
157
 
158
				} catch (TTransportException e) {
159
					// TODO Auto-generated catch block
160
					e.printStackTrace();
161
				}
162
 
163
				for (Map.Entry<Long, Long> entry : itemInventoryMap.entrySet()) {
164
					LogisticsInfo logisticinfo=new LogisticsInfo();
165
					boolean ex=true;
166
					int logisticCheck=0;
167
					while(ex){
168
						try {
169
							System.out.println("Fetching Logistics estimation for Item Id " + " " + entry.getKey());
170
							try {
171
								logisticinfo = logisticsClient.getLogisticsEstimation(entry.getKey(),"110001",DeliveryType.COD);
172
							} catch (LogisticsServiceException e) {
173
								// TODO Auto-generated catch block
174
								e.printStackTrace();
175
							}
176
							ex=false;
177
 
178
						} catch (TTransportException e) {
179
							// TODO Auto-generated catch  lock
180
							logisticsServiceClient = new LogisticsClient("logistics_service_prod_server_host","logistics_service_prod_server_port");
181
							logisticsClient = logisticsServiceClient.getClient();
182
							ex =true;
183
							e.printStackTrace();
184
							if (++logisticCheck==10){
185
								StringWriter errors = new StringWriter();
186
								e.printStackTrace(new PrintWriter(errors));
187
								String text = errors.toString(); 
188
								String[] sendTo = { "eng@shop2020.in" };
189
								String emailSubjectTxt = "Unable To Send Non FBA Inventory Feed ";
190
								String emailFromAddress = "build@shop2020.in";
191
								String password = "cafe@nes";
192
								GmailUtils mailer = new GmailUtils();
193
								try {
194
									mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
195
								}
196
								catch (Exception exc) {
197
									exc.printStackTrace();
198
								}
199
								System.exit(1);
200
							}
201
 
202
						}
203
					}
204
					Inventory inventory = new Inventory();
205
					inventory.setSKU(entry.getKey());
206
					inventory.setFulfillmentLatency(logisticinfo.getShippingTime());
207
					if(entry.getValue() >=0){
208
						inventory.setQuantity(entry.getValue());
209
					}
210
					else{
211
						inventory.setQuantity((long) 0);
212
					}
213
					inventoryList.add(inventory);
214
				}
215
				try {
216
					m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
217
					m.marshal(saholicAPI, file);
218
					m.marshal(saholicAPI, System.out);
219
 
220
				} catch (Exception e) {
221
					// TODO Auto-generated catch block
222
					e.printStackTrace();
223
				}
224
			}
225
			else{
226
				System.out.println("No Snapdeal listed Active items");
227
			}
228
			ScpService scpService = new ScpService();
8641 vikram.rag 229
			scpService.scpFile("/var/www/static.saholic.com/partners",SNAPDEAL_INVENTORY_XML);
8616 vikram.rag 230
		} catch (TException e) {
231
			// TODO Auto-generated catch block
232
			e.printStackTrace();
233
		}
234
	}
235
 
236
}