Subversion Repositories SmartDukaan

Rev

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