| Line 1... |
Line 1... |
| 1 |
import pymongo
|
1 |
import pymongo
|
| 2 |
from datetime import datetime, timedelta, time, date
|
2 |
from datetime import datetime, timedelta, time, date
|
| 3 |
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFCWarehouseLocation
|
3 |
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFCWarehouseLocation
|
| 4 |
from shop2020.utils.Utils import to_java_date, to_py_date
|
4 |
from shop2020.utils.Utils import to_java_date, to_py_date
|
| 5 |
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFbaSalesSnapshot, AmazonHourlySaleSnapshot
|
5 |
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFbaSalesSnapshot, AmazonHourlySaleSnapshot, \
|
| - |
|
6 |
AmazonFbaOrderItem
|
| - |
|
7 |
|
| 6 |
|
8 |
|
| 7 |
con = None
|
9 |
con = None
|
| - |
|
10 |
prefix = {'FBA':0,'FBB':1,'FBG':2}
|
| 8 |
|
11 |
|
| 9 |
def get_mongo_connection(host='localhost', port=27017):
|
12 |
def get_mongo_connection(host='localhost', port=27017):
|
| 10 |
global con
|
13 |
global con
|
| 11 |
if con is None:
|
14 |
if con is None:
|
| 12 |
print "Establishing connection %s host and port %d" %(host,port)
|
15 |
print "Establishing connection %s host and port %d" %(host,port)
|
| Line 29... |
Line 32... |
| 29 |
if saleSnapshot is None:
|
32 |
if saleSnapshot is None:
|
| 30 |
return amazonHourlySaleSnapshot
|
33 |
return amazonHourlySaleSnapshot
|
| 31 |
amazonHourlySaleSnapshot.__dict__.update(saleSnapshot)
|
34 |
amazonHourlySaleSnapshot.__dict__.update(saleSnapshot)
|
| 32 |
return amazonHourlySaleSnapshot
|
35 |
return amazonHourlySaleSnapshot
|
| 33 |
|
36 |
|
| - |
|
37 |
def to_amazonFbaOrderItem(orderData):
|
| - |
|
38 |
amazonFbaOrderItem = AmazonFbaOrderItem(amazonOrderId=None, purchaseDate=None, orderStatus=None, item_id=None, fcLocation=None, totalAmount=None, promotionDiscount=None, quantity=None)
|
| - |
|
39 |
if orderData is None:
|
| - |
|
40 |
return amazonFbaOrderItem
|
| - |
|
41 |
amazonFbaOrderItem.__dict__.update(orderData)
|
| - |
|
42 |
return amazonFbaOrderItem
|
| - |
|
43 |
|
| 34 |
def getAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation):
|
44 |
def getAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation):
|
| 35 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
|
45 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
|
| 36 |
list = []
|
46 |
list = []
|
| 37 |
list.append({"dateOfSale": to_java_date(datetime.combine((datetime.now()-timedelta(days=1)).date(), time(00,00,00)))})
|
47 |
list.append({"dateOfSale": to_java_date(datetime.combine((datetime.now()-timedelta(days=1)).date(), time(00,00,00)))})
|
| 38 |
list.append({"item_id":item_id})
|
48 |
list.append({"item_id":item_id})
|
| Line 60... |
Line 70... |
| 60 |
noOfDays = 0
|
70 |
noOfDays = 0
|
| 61 |
for sale in cursor:
|
71 |
for sale in cursor:
|
| 62 |
totalSale = totalSale + sale.get('totalOrderCount')
|
72 |
totalSale = totalSale + sale.get('totalOrderCount')
|
| 63 |
noOfDays = noOfDays + 1
|
73 |
noOfDays = noOfDays + 1
|
| 64 |
return totalSale, noOfDays
|
74 |
return totalSale, noOfDays
|
| 65 |
|
- |
|
| 66 |
|
75 |
|
| 67 |
def getAmazonFbaSalesSnapshotForDays(interval):
|
76 |
def getAmazonFbaSalesSnapshotForDays(interval):
|
| 68 |
fbasalessnapshot = []
|
77 |
fbasalessnapshot = []
|
| 69 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
|
78 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
|
| 70 |
toDate = datetime.now()-timedelta(days = 1)
|
79 |
toDate = datetime.now()-timedelta(days = 1)
|
| Line 75... |
Line 84... |
| 75 |
cursor = collection.find({"dateOfSale":query}).sort([('dateOfSale',pymongo.ASCENDING)])
|
84 |
cursor = collection.find({"dateOfSale":query}).sort([('dateOfSale',pymongo.ASCENDING)])
|
| 76 |
for sale in cursor:
|
85 |
for sale in cursor:
|
| 77 |
fbasalessnapshot.append(to_amazonFbaSaleSnapshot(sale))
|
86 |
fbasalessnapshot.append(to_amazonFbaSaleSnapshot(sale))
|
| 78 |
return fbasalessnapshot
|
87 |
return fbasalessnapshot
|
| 79 |
|
88 |
|
| 80 |
|
- |
|
| 81 |
|
- |
|
| 82 |
def getLastOutOfStock(item_id,fcLocation):
|
89 |
def getLastOutOfStock(item_id,fcLocation):
|
| 83 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
|
90 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
|
| 84 |
list = []
|
91 |
list = []
|
| 85 |
list.append({"item_id":item_id})
|
92 |
list.append({"item_id":item_id})
|
| 86 |
list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
|
93 |
list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
|
| Line 103... |
Line 110... |
| 103 |
lastestSnapshotTime = r.next().get('snapshotTime')
|
110 |
lastestSnapshotTime = r.next().get('snapshotTime')
|
| 104 |
cursor = collection.find({"snapshotTime":{"$in":[lastestSnapshotTime]}})
|
111 |
cursor = collection.find({"snapshotTime":{"$in":[lastestSnapshotTime]}})
|
| 105 |
for sale in cursor:
|
112 |
for sale in cursor:
|
| 106 |
fbaHourlySnapshot.append(to_amazonFbaHourlySnapshot(sale))
|
113 |
fbaHourlySnapshot.append(to_amazonFbaHourlySnapshot(sale))
|
| 107 |
return fbaHourlySnapshot
|
114 |
return fbaHourlySnapshot
|
| - |
|
115 |
|
| - |
|
116 |
def getAmazonOrderData(startDate, endDate, offset, limit):
|
| - |
|
117 |
fbaOrderData = []
|
| - |
|
118 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonSaleData
|
| - |
|
119 |
list = []
|
| - |
|
120 |
query = {}
|
| - |
|
121 |
list.append({"orderStatus":"Shipped"})
|
| - |
|
122 |
query['$gte'] = to_java_date(startDate)
|
| - |
|
123 |
query['$lte'] = to_java_date(endDate)
|
| - |
|
124 |
list.append({"purchaseDate":query})
|
| - |
|
125 |
if offset is None and limit is None:
|
| - |
|
126 |
cursor = collection.find({"$and":list}).sort([('purchaseDate',pymongo.ASCENDING)])
|
| - |
|
127 |
else:
|
| - |
|
128 |
cursor = collection.find({"$and":list}).skip(offset).limit(limit).sort([('purchaseDate',pymongo.ASCENDING)])
|
| - |
|
129 |
for orderData in cursor:
|
| - |
|
130 |
fbaOrderData.append(to_amazonFbaOrderItem(orderData))
|
| - |
|
131 |
return fbaOrderData
|
| - |
|
132 |
|
| - |
|
133 |
def getDistinctItemsFromOrderData(startDate, endDate):
|
| - |
|
134 |
item_ids = []
|
| - |
|
135 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonSaleData
|
| - |
|
136 |
list = []
|
| - |
|
137 |
query = {}
|
| - |
|
138 |
list.append({"orderStatus":"Shipped"})
|
| - |
|
139 |
query['$gte'] = to_java_date(startDate)
|
| - |
|
140 |
query['$lte'] = to_java_date(endDate)
|
| - |
|
141 |
list.append({"purchaseDate":query})
|
| - |
|
142 |
cursor = collection.find({"$and":list}).distinct('item_id')
|
| - |
|
143 |
for item_id in cursor:
|
| - |
|
144 |
item_ids.append(item_id)
|
| - |
|
145 |
return item_ids
|
| - |
|
146 |
|
| - |
|
147 |
def getOrderByAmazonOrderIdAndSku(amazonOrderId, sku):
|
| - |
|
148 |
list = []
|
| - |
|
149 |
collection = get_mongo_connection().AmazonSaleSnapshot.AmazonSaleData
|
| - |
|
150 |
list.append({"amazonOrderId": amazonOrderId})
|
| - |
|
151 |
list.append({"item_id":int(sku[3:])})
|
| - |
|
152 |
list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(prefix.get(sku[0:3]))})
|
| - |
|
153 |
r = collection.find({"$and":list})
|
| - |
|
154 |
if r.count() > 1:
|
| - |
|
155 |
print "gt 1"
|
| - |
|
156 |
print amazonOrderId
|
| - |
|
157 |
print sku
|
| - |
|
158 |
raise
|
| - |
|
159 |
elif r.count()==0:
|
| - |
|
160 |
print "eq 0"
|
| - |
|
161 |
print amazonOrderId
|
| - |
|
162 |
print sku
|
| - |
|
163 |
raise
|
| - |
|
164 |
else:
|
| - |
|
165 |
return to_amazonFbaOrderItem(r.next())
|
| 108 |
|
166 |
|
| - |
|
167 |
|
| - |
|
168 |
|
| 109 |
|
169 |
|
| 110 |
def main():
|
170 |
def main():
|
| - |
|
171 |
# startDate = datetime.strptime('01-11-2014 00:00:00', '%d-%m-%Y %H:%M:%S')
|
| - |
|
172 |
# endDate = datetime.strptime('01-12-2014 00:00:00', '%d-%m-%Y %H:%M:%S')
|
| - |
|
173 |
# getDistinctItemsFromOrderData(startDate, endDate)
|
| - |
|
174 |
# list = []
|
| - |
|
175 |
# for x in getAmazonOrderData(startDate, endDate, None, None):
|
| - |
|
176 |
# if x.promotionDiscount > 0 and x.item_id not in list:
|
| - |
|
177 |
# list.append(x.item_id)
|
| - |
|
178 |
# print list
|
| - |
|
179 |
instock = 0
|
| 111 |
print getLatestHourlySnapshot()
|
180 |
x = getAmazonFbaSalesSnapshotForDays(29)
|
| - |
|
181 |
for i in x:
|
| - |
|
182 |
if i.item_id==17373:
|
| - |
|
183 |
print i.totalSale,
|
| - |
|
184 |
print '\t',
|
| - |
|
185 |
print i.totalOrderCount,
|
| - |
|
186 |
print '\t',
|
| - |
|
187 |
print i.promotionSale,
|
| - |
|
188 |
print '\t',
|
| - |
|
189 |
print i.promotionOrderCount,
|
| - |
|
190 |
print '\t',
|
| - |
|
191 |
print i.isOutOfStock
|
| - |
|
192 |
|
| - |
|
193 |
print "****"
|
| - |
|
194 |
print instock
|
| - |
|
195 |
|
| 112 |
|
196 |
|
| 113 |
if __name__ == "__main__":
|
197 |
if __name__ == "__main__":
|
| 114 |
main()
|
198 |
main()
|
| 115 |
|
199 |
|