Subversion Repositories SmartDukaan

Rev

Rev 3122 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3116 vikas 1
package in.shop2020.web;
2
 
3
import in.shop2020.model.Item;
4
import in.shop2020.model.ItemActivity;
5
import in.shop2020.server.ItemActivityRepository;
6
import in.shop2020.server.ItemRepository;
7
 
8
import java.text.ParseException;
9
import java.text.SimpleDateFormat;
10
import java.util.Calendar;
11
import java.util.Date;
12
import java.util.HashMap;
13
import java.util.HashSet;
14
import java.util.List;
15
import java.util.Map;
16
import java.util.Map.Entry;
17
import java.util.Set;
18
import java.util.TimeZone;
19
 
20
import javax.servlet.http.HttpServlet;
21
import javax.servlet.http.HttpServletRequest;
22
import javax.servlet.http.HttpServletResponse;
23
 
24
import com.google.appengine.api.datastore.DatastoreService;
25
import com.google.appengine.api.datastore.DatastoreServiceFactory;
26
import com.google.appengine.api.datastore.Entity;
27
import com.google.appengine.api.datastore.PreparedQuery;
28
import com.google.appengine.api.datastore.Query;
29
 
30
public class DailyAggregatorServlet extends HttpServlet {
31
    private static final long serialVersionUID = -8236918415987438049L;
32
 
33
    public void doPost(HttpServletRequest req, HttpServletResponse resp) {
34
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
35
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
36
        String dateStr = req.getParameter("date");  
37
        if (dateStr != null && !dateStr.isEmpty()) {
38
            try {
39
                cal.setTime(sdf.parse(dateStr));
40
                cal.add(Calendar.DAY_OF_MONTH, 1);
41
            } catch (ParseException e) {
42
                e.printStackTrace();
43
            }
44
        }
45
        cal.set(Calendar.HOUR_OF_DAY, 0);  
46
        cal.set(Calendar.MINUTE, 0);  
47
        cal.set(Calendar.SECOND, 0);  
48
        cal.set(Calendar.MILLISECOND, 0);
49
        Date toDate = cal.getTime();
50
        cal.add(Calendar.DAY_OF_MONTH, -1);
51
        Date fromDate = cal.getTime();
52
 
53
        ItemRepository itemRepository = new ItemRepository();
54
        List<Item> items = itemRepository.getAll();
55
        Map<Long, Item> itemsMap = new HashMap<Long, Item>();
56
        Map<Long, Item> itemsCatalogIdMap = new HashMap<Long, Item>();
57
        Map<String, Item> itemsNameMap = new HashMap<String, Item>();
58
        Map<Long, Map<String, Long>> itemsResultMap = new HashMap<Long, Map<String, Long>>();
59
        for (Item item : items) {
60
            itemsMap.put(item.getId(), item);
61
            itemsCatalogIdMap.put(item.getCatalogId(), item);
62
            itemsNameMap.put(item.getName().trim(), item);
63
        }
64
 
65
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
66
        Query query = new Query("DataLog");
67
        query.addFilter("eventType", Query.FilterOperator.EQUAL, "PRODUCT_VIEW");
68
        query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
69
        query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
70
        PreparedQuery pq = datastore.prepare(query);
71
        Set<String> uniqueSet = new HashSet<String>();
72
        for (Entity result : pq.asIterable()) {
73
            String sessionId = (String)result.getProperty("sessionId");
74
            Long catalogItemId = (Long)result.getProperty("itemId");
75
            if(catalogItemId == null) {
76
                String name = (String)result.getProperty("productName");
77
                if (itemsNameMap.containsKey(name.trim())) {
78
                    catalogItemId = itemsNameMap.get(name.trim()).getCatalogId();
79
                }
80
            }
81
            if (itemsResultMap.containsKey(catalogItemId)) {
82
                Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
83
                if (itemMap.containsKey("ViewCount")) {
84
                    Long count = itemMap.get("ViewCount");
85
                    itemMap.put("ViewCount", ++count);
86
                }
87
                else {
88
                    itemMap.put("ViewCount", 1l);
89
                }
90
            }
91
            else {
92
                Map<String, Long> itemMap = new HashMap<String, Long>();
93
                itemMap.put("ViewCount", 1l);
94
                itemsResultMap.put(catalogItemId, itemMap);
95
            }
96
            String uniqueKey = sessionId + catalogItemId;
97
            if (!uniqueSet.contains(uniqueKey)) {
98
                Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
99
                if (itemMap.containsKey("uniqueViewCount")) {
100
                    Long count = itemMap.get("uniqueViewCount");
101
                    itemMap.put("uniqueViewCount", ++count);
102
                }
103
                else {
104
                    itemMap.put("uniqueViewCount", 1l);
105
                }
106
                uniqueSet.add(uniqueKey);
107
            }
108
        }
109
 
110
        query = new Query("DataLog");
111
        query.addFilter("eventType", Query.FilterOperator.EQUAL, "ADD_TO_CART");
112
        query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
113
        query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
114
        pq = datastore.prepare(query);
115
        uniqueSet = new HashSet<String>();
116
        for (Entity result : pq.asIterable()) {
117
            String sessionId = (String)result.getProperty("sessionId");
118
            for (Long itemId : (List<Long>)result.getProperty("itemIds")) {
119
                Long catalogItemId = itemsMap.get(itemId).getCatalogId();
120
                if (itemsResultMap.containsKey(catalogItemId)) {
121
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
122
                    if (itemMap.containsKey("AddToCartCount")) {
123
                        Long count = itemMap.get("AddToCartCount");
124
                        itemMap.put("AddToCartCount", ++count);
125
                    }
126
                    else {
127
                        itemMap.put("AddToCartCount", 1l);
128
                    }
129
                }
130
                else {
131
                    Map<String, Long> itemMap = new HashMap<String, Long>();
132
                    itemMap.put("AddToCartCount", 1l);
133
                    itemsResultMap.put(catalogItemId, itemMap);
134
                }
135
                String uniqueKey = sessionId + catalogItemId;
136
                if (!uniqueSet.contains(uniqueKey)) {
137
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
138
                    if (itemMap.containsKey("uniqueAddToCartCount")) {
139
                        Long count = itemMap.get("uniqueAddToCartCount");
140
                        itemMap.put("uniqueAddToCartCount", ++count);
141
                    }
142
                    else {
143
                        itemMap.put("uniqueAddToCartCount", 1l);
144
                    }
145
                    uniqueSet.add(uniqueKey);
146
                }
147
            }
148
        }
149
 
150
        query = new Query("DataLog");
151
        query.addFilter("eventType", Query.FilterOperator.EQUAL, "DELETE_FROM_CART");
152
        query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
153
        query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
154
        pq = datastore.prepare(query);
155
        uniqueSet = new HashSet<String>();
156
        for (Entity result : pq.asIterable()) {
157
            String sessionId = (String)result.getProperty("sessionId");
158
            for (Long itemId : (List<Long>)result.getProperty("itemIds")) {
159
                Long catalogItemId = itemsMap.get(itemId).getCatalogId();
160
                if (itemsResultMap.containsKey(catalogItemId)) {
161
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
162
                    if (itemMap.containsKey("DeleteFromCartCount")) {
163
                        Long count = itemMap.get("DeleteFromCartCount");
164
                        itemMap.put("DeleteFromCartCount", ++count);
165
                    }
166
                    else {
167
                        itemMap.put("DeleteFromCartCount", 1l);
168
                    }
169
                }
170
                else {
171
                    Map<String, Long> itemMap = new HashMap<String, Long>();
172
                    itemMap.put("DeleteFromCartCount", 1l);
173
                    itemsResultMap.put(catalogItemId, itemMap);
174
                }
175
                String uniqueKey = sessionId + catalogItemId;
176
                if (!uniqueSet.contains(uniqueKey)) {
177
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
178
                    if (itemMap.containsKey("uniqueDeleteFromCartCount")) {
179
                        Long count = itemMap.get("uniqueDeleteFromCartCount");
180
                        itemMap.put("uniqueDeleteFromCartCount", ++count);
181
                    }
182
                    else {
183
                        itemMap.put("uniqueDeleteFromCartCount", 1l);
184
                    }
185
                    uniqueSet.add(uniqueKey);
186
                }
187
            }
188
        }
189
 
190
        query = new Query("DataLog");
191
        query.addFilter("eventType", Query.FilterOperator.EQUAL, "RESEARCH_ADD");
192
        query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
193
        query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
194
        pq = datastore.prepare(query);
195
        uniqueSet = new HashSet<String>();
196
        for (Entity result : pq.asIterable()) {
197
            String sessionId = (String)result.getProperty("sessionId");
198
            for (Long catalogItemId : (List<Long>)result.getProperty("itemIds")) {
199
                if (itemsResultMap.containsKey(catalogItemId)) {
200
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
201
                    if (itemMap.containsKey("AddToResearchCount")) {
202
                        Long count = itemMap.get("AddToResearchCount");
203
                        itemMap.put("AddToResearchCount", ++count);
204
                    }
205
                    else {
206
                        itemMap.put("AddToResearchCount", 1l);
207
                    }
208
                }
209
                else {
210
                    Map<String, Long> itemMap = new HashMap<String, Long>();
211
                    itemMap.put("AddToResearchCount", 1l);
212
                    itemsResultMap.put(catalogItemId, itemMap);
213
                }
214
                String uniqueKey = sessionId + catalogItemId;
215
                if (!uniqueSet.contains(uniqueKey)) {
216
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
217
                    if (itemMap.containsKey("uniqueAddToResearchCount")) {
218
                        Long count = itemMap.get("uniqueAddToResearchCount");
219
                        itemMap.put("uniqueAddToResearchCount", ++count);
220
                    }
221
                    else {
222
                        itemMap.put("uniqueAddToResearchCount", 1l);
223
                    }
224
                    uniqueSet.add(uniqueKey);
225
                }
226
            }
227
        }
228
 
229
        query = new Query("DataLog");
230
        query.addFilter("eventType", Query.FilterOperator.EQUAL, "RESEARCH_DELETE");
231
        query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
232
        query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
233
        pq = datastore.prepare(query);
234
        uniqueSet = new HashSet<String>();
235
        for (Entity result : pq.asIterable()) {
236
            String sessionId = (String)result.getProperty("sessionId");
237
            for (Long catalogItemId : (List<Long>)result.getProperty("itemIds")) {
238
                if (itemsResultMap.containsKey(catalogItemId)) {
239
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
240
                    if (itemMap.containsKey("DeleteFromResearchCount")) {
241
                        Long count = itemMap.get("DeleteFromResearchCount");
242
                        itemMap.put("DeleteFromResearchCount", ++count);
243
                    }
244
                    else {
245
                        itemMap.put("DeleteFromResearchCount", 1l);
246
                    }
247
                }
248
                else {
249
                    Map<String, Long> itemMap = new HashMap<String, Long>();
250
                    itemMap.put("DeleteFromResearchCount", 1l);
251
                    itemsResultMap.put(catalogItemId, itemMap);
252
                }
253
                String uniqueKey = sessionId + catalogItemId;
254
                if (!uniqueSet.contains(uniqueKey)) {
255
                    Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
256
                    if (itemMap.containsKey("uniqueDeleteFromResearchCount")) {
257
                        Long count = itemMap.get("uniqueDeleteFromResearchCount");
258
                        itemMap.put("uniqueDeleteFromResearchCount", ++count);
259
                    }
260
                    else {
261
                        itemMap.put("uniqueDeleteFromResearchCount", 1l);
262
                    }
263
                    uniqueSet.add(uniqueKey);
264
                }
265
            }
266
        }
267
 
268
        for (Entry<Long, Map<String, Long>> entry : itemsResultMap.entrySet()) {
269
            Long catalogItemId = (Long)entry.getKey();
270
            Map<String, Long> itemMap = (Map<String, Long>)entry.getValue();
271
 
272
            ItemActivityRepository itemActivityRepository = new ItemActivityRepository();
273
            ItemActivity itemActivity = new ItemActivity();
274
            itemActivity.setCatalogId(catalogItemId);
275
            itemActivity.setDate(fromDate);
276
 
277
            itemActivity.setView(itemMap.get("ViewCount"));
278
            itemActivity.setAddToCart(itemMap.get("AddToCartCount"));
279
            itemActivity.setAddToResearch(itemMap.get("AddToResearchCount"));
280
            itemActivity.setDeleteFromCart(itemMap.get("DeleteFromCartCount"));
281
            itemActivity.setDeleteFromResearch(itemMap.get("DeleteFromResearch"));
282
 
283
            itemActivity.setUniqueView(itemMap.get("uniqueViewCount"));
284
            itemActivity.setUniqueAddToCart(itemMap.get("uniqueAddToCartCount"));
285
            itemActivity.setUniqueAddToResearch(itemMap.get("uniqueAddToResearchCount"));
286
            itemActivity.setUniqueDeleteFromCart(itemMap.get("uniqueDeleteFromCartCount"));
287
            itemActivity.setUniqueDeleteFromResearch(itemMap.get("uniqueDeleteFromResearchCount"));
288
 
289
            itemActivityRepository.create(itemActivity);
290
        }
291
    }
292
 
293
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
294
        doPost(req, resp);
295
    }
296
}