Rev 15367 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/usr/bin/pythonfrom elixir import *import optparseimport sysimport tracebackif __name__ == '__main__' and __package__ is None:import ossys.path.insert(0, os.getcwd())from datetime import timedelta, datetimefrom shop2020.thriftpy.model.v1.order.ttypes import RechargeOrderStatusfrom shop2020.model.v1.order.impl.DataAccessors import update_recharge_order_status,\update_recharge_transaction_statusfrom shop2020.model.v1.order.impl import DataService, RechargeServicefrom shop2020.model.v1.order.impl.DataService import RechargeTransactionfrom shop2020.model.v1.order.impl.model.RechargeOrder import RechargeOrderdef processRechargeTransactions(deltaTime):#Lets first get all recharge unknown orders irrespective of recharge mode in delta minutes time windowtry:timeFilter = datetime.now() -timedelta(minutes=deltaTime)unknownOrders = RechargeTransaction.query.filter(RechargeTransaction.status.in_([RechargeOrderStatus.RECHARGE_UNKNOWN, RechargeOrderStatus.INIT])).filter(RechargeTransaction.transactionTime >=timeFilter).all()for unknownOrder in unknownOrders:try:status, description = RechargeService.checkTransactionStatus('', str(unknownOrder.id))print status, descriptionif status:update_recharge_transaction_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)else:update_recharge_transaction_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_FAILED)except:print "Still unknown"finally:session.close()try:timeFilter = datetime.now() -timedelta(minutes=2,seconds=30)inprocessOrders = RechargeTransaction.query.filter(RechargeTransaction.status == RechargeOrderStatus.RECHARGE_IN_PROCESS).filter(RechargeTransaction.responseTime < timeFilter).all()#Lets mark all recharges in process in above time window as payment successfulfor inprocessOrder in inprocessOrders:inprocessOrder.status = RechargeOrderStatus.RECHARGE_UNKNOWNinprocessOrder.responseTime = datetime.now()session.commit()for inprocessOrder in inprocessOrders:try:status, description = RechargeService.checkTransactionStatus('', str(inprocessOrder.id))print status, descriptionif status:update_recharge_transaction_status(inprocessOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)else:update_recharge_transaction_status(inprocessOrder.id, RechargeOrderStatus.RECHARGE_FAILED)except:print "Still unknown"finally:session.close()def processRechargeOrders(deltaTime):#Lets first get all payment successful orders irrespective of recharge mode in delta minutes time windowtry:paymentSuccessfulOrders = RechargeOrder.query.filter(RechargeOrder.status == RechargeOrderStatus.PAYMENT_SUCCESSFUL).all()for paymentSuccessfulOrder in paymentSuccessfulOrders:try:status, description = RechargeService.checkTransactionStatus('', str(paymentSuccessfulOrder.id))print status, descriptionif status:update_recharge_order_status(paymentSuccessfulOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)else:update_recharge_order_status(paymentSuccessfulOrder.id, RechargeOrderStatus.RECHARGE_FAILED)except:traceback.print_exc()print "Still unknown"finally:session.close()try:timeFilter = datetime.now() -timedelta(minutes=5)unknownOrders = RechargeOrder.query.filter(RechargeOrder.status == RechargeOrderStatus.RECHARGE_UNKNOWN).filter(RechargeOrder.responseTimestamp < timeFilter).all()#Lets mark all recharges unknown in above time window as payment successfulfor unknownOrder in unknownOrders:unknownOrder.status = RechargeOrderStatus.PAYMENT_SUCCESSFULunknownOrder.responseTimestamp = datetime.now()session.commit()for unknownOrder in unknownOrders:try:status, description = RechargeService.checkTransactionStatus('', str(unknownOrder.id))print status, descriptionif status:update_recharge_order_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)else:update_recharge_order_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_FAILED)except:print "Still unknown"finally:session.close()def main():parser = optparse.OptionParser()parser.add_option("-H", "--host", dest="hostname",default="localhost",type="string", help="The HOST where the DB server is running",metavar="HOST")parser.add_option("-T", "--time", dest="time",default=60,type="int", help="Time in minutes to filter recharge orders/transaction",metavar="TIME")(options, args) = parser.parse_args()if len(args) != 0:parser.error("You've supplied extra arguments. Are you sure you want to run this program?")DataService.initialize(db_hostname=options.hostname, echoOn=True)processRechargeOrders(options.time)processRechargeTransactions(options.time)if __name__=='__main__':main()