Subversion Repositories SmartDukaan

Rev

Rev 13120 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13111 kshitij.so 1
package com.amazonaws.mws.samples;
2
 
3
import in.shop2020.model.v1.order.AmazonFCWarehouseLocation;
13479 kshitij.so 4
import in.shop2020.model.v1.order.AmazonFbaOrderItem;
13111 kshitij.so 5
import in.shop2020.model.v1.order.AmazonFbaSalesSnapshot;
6
import in.shop2020.model.v1.order.AmazonHourlySaleSnapshot;
7
 
8
import java.net.UnknownHostException;
9
import java.util.ArrayList;
10
import java.util.Calendar;
11
import java.util.List;
12
 
13
import org.apache.thrift.TException;
14
import org.json.JSONException;
15
 
16
import com.google.gson.Gson;
17
import com.mongodb.BasicDBObject;
18
import com.mongodb.DB;
19
import com.mongodb.DBCollection;
20
import com.mongodb.DBCursor;
21
import com.mongodb.DBObject;
22
import com.mongodb.MongoClient;
23
import com.mongodb.util.JSON;
24
 
25
 
26
public class Consumer 
27
{
28
    private static MongoClient mongo;
29
    private static final String AMAZON_SALES_SNAPSHOT = "AmazonSaleSnapshot";
30
    private static final String AMAZON_DAILY_SALE_SNAPSHOT = "AmazonDailySaleSnapshot";
31
    private static final String AMAZON_HOURLY_SALE_SNAPSHOT = "AmazonHourlySaleSnapshot";
13479 kshitij.so 32
    private static final String AMAZON_SALE_DUMP = "AmazonSaleData";
13111 kshitij.so 33
 
34
 
35
    static {
36
        try {
37
            mongo = new MongoClient( "localhost" , 27017 );
38
        } catch (UnknownHostException e) {
39
            e.printStackTrace();
40
        }
41
    }
42
 
43
    public static AmazonFbaSalesSnapshot getAmazonFbaSalesLatestSnapshotForItemLocationWise(long item_id, long fcLocation){
44
        AmazonFbaSalesSnapshot salesObj = new AmazonFbaSalesSnapshot();
45
        DB db = mongo.getDB(AMAZON_SALES_SNAPSHOT);
46
        DBCollection collection = db.getCollection(AMAZON_DAILY_SALE_SNAPSHOT);
47
        BasicDBObject andQuery = new BasicDBObject();
48
        List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
49
        obj.add(new BasicDBObject("item_id", item_id));
50
        obj.add(new BasicDBObject("fcLocation", AmazonFCWarehouseLocation.findByValue((int) fcLocation).toString()));
51
        Calendar cal = Calendar.getInstance();
52
        cal.add(Calendar.DATE, -1);cal.set(Calendar.HOUR_OF_DAY, 00);cal.set(Calendar.MINUTE,00);cal.set(Calendar.SECOND,00);cal.set(Calendar.MILLISECOND,00);
53
        obj.add(new BasicDBObject("dateOfSale", cal.getTimeInMillis()));
54
        andQuery.put("$and", obj);
55
        BasicDBObject orderBy = new BasicDBObject();
56
        orderBy.put("dateOfSale", -1);
57
        DBCursor cursor = collection.find(andQuery).sort(orderBy).limit(1);
58
        Gson gson = new Gson();
59
        while (cursor.hasNext()) {
60
            salesObj = gson.fromJson(cursor.next().toString(), AmazonFbaSalesSnapshot.class);
61
        }
62
        return salesObj;
63
 
64
    }
65
 
66
    public static AmazonFbaSalesSnapshot getAmazonFbaSalesLatestSnapshotForItem(long item_id){
67
        AmazonFbaSalesSnapshot salesObj = new AmazonFbaSalesSnapshot();
68
        DB db = mongo.getDB(AMAZON_SALES_SNAPSHOT);
69
        DBCollection collection = db.getCollection(AMAZON_DAILY_SALE_SNAPSHOT);
70
        BasicDBObject andQuery = new BasicDBObject();
71
        List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
72
        obj.add(new BasicDBObject("item_id", item_id));
73
        Calendar cal = Calendar.getInstance();
74
        cal.add(Calendar.DATE, -1);cal.set(Calendar.HOUR_OF_DAY, 00);cal.set(Calendar.MINUTE,00);cal.set(Calendar.SECOND,00);cal.set(Calendar.MILLISECOND,00);
75
        obj.add(new BasicDBObject("dateOfSale", cal.getTimeInMillis()));
76
        andQuery.put("$and", obj);
77
        BasicDBObject orderBy = new BasicDBObject();
78
        orderBy.put("dateOfSale", -1);
79
        DBCursor cursor = collection.find(andQuery).sort(orderBy).limit(1);
80
        Gson gson = new Gson();
81
        while (cursor.hasNext()) {
82
            salesObj = gson.fromJson(cursor.next().toString(), AmazonFbaSalesSnapshot.class);
83
        }
84
        return salesObj;
85
 
86
    }
87
 
88
    public static List<AmazonFbaSalesSnapshot> getAmazonFbaSalesSnapshotForDays(int interval){
89
        DB db = mongo.getDB(AMAZON_SALES_SNAPSHOT);
90
        DBCollection collection = db.getCollection(AMAZON_DAILY_SALE_SNAPSHOT);
91
        Calendar cal = Calendar.getInstance();
92
        cal.add(Calendar.DATE, -1);cal.set(Calendar.HOUR_OF_DAY, 00);cal.set(Calendar.MINUTE,00);cal.set(Calendar.SECOND,00);cal.set(Calendar.MILLISECOND,00);
93
        long toDate = cal.getTimeInMillis();
94
        cal.add(Calendar.DATE, -interval);
95
        long fromDate = cal.getTimeInMillis();
96
        BasicDBObject query = new BasicDBObject();
97
        BasicDBObject obj = new BasicDBObject();
98
        obj.put("$gte", fromDate);
99
        obj.put("$lte", toDate);
100
        query.put("dateOfSale",obj);
101
        BasicDBObject orderBy = new BasicDBObject();
102
        orderBy.put("dateOfSale", 1);
103
        Gson gson = new Gson();
104
        List<AmazonFbaSalesSnapshot> salesSnapshot = new ArrayList<AmazonFbaSalesSnapshot>();
105
        DBCursor cursor = collection.find(query).sort(orderBy);
106
        while (cursor.hasNext()) {
107
            AmazonFbaSalesSnapshot salesObj = gson.fromJson(cursor.next().toString(), AmazonFbaSalesSnapshot.class);
108
            salesSnapshot.add(salesObj);
109
        }
110
        return salesSnapshot;
111
    }
112
 
113
 
114
    public static boolean bulkAddOrUpdateAmazonFbaSalesSnapshot(List<AmazonFbaSalesSnapshot> sales) throws JSONException{
115
        DB db = mongo.getDB(AMAZON_SALES_SNAPSHOT);
116
        DBCollection collection = db.getCollection(AMAZON_DAILY_SALE_SNAPSHOT);
117
        Gson gs = new Gson();
118
        for (AmazonFbaSalesSnapshot sale :sales){
119
            DBObject dbObject = (DBObject) JSON.parse(gs.toJson(sale));
120
            dbObject.put("_id", generateId(sale.getDateOfSale(), sale.getItem_id(), sale.getFcLocation().getValue()));
121
            BasicDBObject searchObject = new BasicDBObject();
122
            searchObject.put("_id",generateId(sale.getDateOfSale(), sale.getItem_id(), sale.getFcLocation().getValue()));
123
            DBCursor cursor = collection.find(searchObject);
124
            if (cursor.count() > 0){
125
                BasicDBObject updateObject = new BasicDBObject();
126
                updateObject.put("promotionOrderCount",sale.getPromotionOrderCount());
127
                updateObject.put("totalSale",sale.getTotalSale());
128
                updateObject.put("promotionSale",sale.getPromotionSale());
129
                updateObject.put("totalOrderCount",sale.getTotalOrderCount());
130
                updateObject.put("fcLocation",sale.getFcLocation().toString());
131
                if (sale.getTotalOrderCount() > 0){
132
                    updateObject.put("isOutOfStock",false);
133
                }
134
                collection.update(searchObject, new BasicDBObject("$set", updateObject));
135
            }
136
            else{
137
                collection.insert(dbObject);
138
            }
139
        }
140
        collection.createIndex((DBObject) JSON.parse("{'dateOfSale':1}"));
141
        return true;
142
    }
143
 
13479 kshitij.so 144
    public static boolean addOrUpdateFbaSales(List<AmazonFbaOrderItem> sales, long startTime, long endTime) throws JSONException{
145
        DB db = mongo.getDB(AMAZON_SALES_SNAPSHOT);
146
        DBCollection collection = db.getCollection(AMAZON_SALE_DUMP);
147
        BasicDBObject query = new BasicDBObject();
148
        BasicDBObject obj = new BasicDBObject();
149
        obj.put("$gte", startTime);
150
        obj.put("$lte", endTime);
151
        query.put("purchaseDate",obj);
152
        collection.remove(query);
153
        System.out.println(query);
154
        Gson gs = new Gson();
155
        for (AmazonFbaOrderItem sale :sales){
156
            DBObject dbObject = (DBObject) JSON.parse(gs.toJson(sale));
157
            collection.insert(dbObject);
158
        }
159
        collection.createIndex((DBObject) JSON.parse("{'purchaseDate':1, 'amazonOrderId':1}"));
160
        return true;
161
    }
162
 
13111 kshitij.so 163
    public static boolean addHourlySnapshot(List<AmazonHourlySaleSnapshot> sales){
164
        DB db = mongo.getDB(AMAZON_SALES_SNAPSHOT);
165
        DBCollection collection = db.getCollection(AMAZON_HOURLY_SALE_SNAPSHOT);
166
        Calendar cal = Calendar.getInstance();
167
        cal.add(Calendar.DATE, -1);cal.set(Calendar.HOUR_OF_DAY, 00);cal.set(Calendar.MINUTE,00);cal.set(Calendar.SECOND,00);cal.set(Calendar.MILLISECOND,00);
168
        long toDate = cal.getTimeInMillis();
169
        BasicDBObject query = new BasicDBObject("snapshotTime", new BasicDBObject("$lt", toDate));
170
        collection.remove(query);
171
        Gson gs = new Gson();
172
        for (AmazonHourlySaleSnapshot sale :sales){
173
            DBObject dbObject = (DBObject) JSON.parse(gs.toJson(sale));
174
            dbObject.put("_id", generateId(sale.getSnapshotTime(), sale.getItem_id(), sale.getFcLocation().getValue()));
175
            collection.insert(dbObject);
176
        }
177
        collection.createIndex((DBObject) JSON.parse("{'snapshotTime':1}"));
178
        return true;
179
    }
180
 
181
    private static long generateId(long dateOfSale, long item_id, int warehouseLocation){
182
        return Long.valueOf(String.valueOf(dateOfSale)+String.valueOf(item_id)+String.valueOf(warehouseLocation));
183
    }
184
 
185
    public static void main (String[] args) throws JSONException, TException{
13120 kshitij.so 186
        getAmazonFbaSalesLatestSnapshotForItem(174);
187
        getAmazonFbaSalesSnapshotForDays(0);
13111 kshitij.so 188
    }
189
}