Guest User

Untitled

a guest
Jul 18th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.04 KB | None | 0 0
  1. class StoreTickerDailySummary(models.Model, SqlAlchemyMixin):
  2.     """Store Savings, order size, value and quality score Summary table on a daily basis.
  3.    There is one row for each unique combination of date"""
  4.  
  5.     class Meta:
  6.         db_table = 'summary_store_ticker_daily'
  7.         unique_together = ('date', 'store')
  8.  
  9.     store = models.IntegerField(db_index=True)
  10.     date = models.DateField(db_index=True)
  11.  
  12.     avg_clicks_per_day = models.FloatField(default = 0.0)
  13.     max_clicks_per_day = models.FloatField(default = 0.0)
  14.     total_clicks = models.FloatField(default = 0.0)
  15.    
  16.     avg_sale = models.FloatField(default = 0.0)
  17.     max_sale = models.FloatField(default = 0.0)
  18.    
  19.     avg_savings_per_transaction = models.FloatField(default = 0.0)
  20.     avg_savings_per_day = models.FloatField(default = 0.0)
  21.     avg_savings_per_offer = models.FloatField(default = 0.0)
  22.     max_savings = models.FloatField(default = 0.0)
  23.    
  24.     avg_sale_on_day = models.FloatField(default = 0.0)
  25.     avg_savings_per_transaction_on_day = models.FloatField(default = 0.0)
  26.    
  27.     avg_value_score = models.FloatField(default = 1.0)
  28.     max_value_score = models.FloatField(default = 1.0)
  29.     avg_quality_score = models.FloatField(default = 1.0)
  30.     max_quality_score = models.FloatField(default = 1.0)
  31.    
  32.  
  33.     @classmethod
  34.     def summarize(kls, dates):
  35.        
  36.         store_clicks_query = """
  37.            select sds.id, date,
  38.                    avg(sds.clicks) as avg_clicks_per_day,                                
  39.                    max(sds.clicks) as max_clicks_per_day,                                
  40.                    sum(sds.clicks) as total_clicks,                                    
  41.  
  42.                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  43.  
  44.             from summary_store_daily as sds
  45.             where date between %s and %s                                                
  46.             group by sds.id"""
  47.  
  48.         offer_savings_date_range_query = """
  49.            select s.id as store_id, date, 0, 0, 0,
  50.  
  51.                    sum(osds.total_sale)/sum(osds.transactions) as avg_sale,                      
  52.                    max(osds.max_sale) as max_sale,                                              
  53.                    sum(osds.total_savings)/sum(osds.transactions) as avg_savings_per_transaction,
  54.                    sum(osds.total_savings)/count(osds.date) as avg_savings_per_day,        
  55.                    sum(osds.total_savings)/count(osds.offer) as avg_savings_per_offer,      
  56.                    max(osds.max_savings) as max_savings,                                        
  57.                    
  58.                    0, 0, 0, 0, 0, 0
  59.                    
  60.                from summary_offer_savings_daily as osds
  61.                inner join offer as o on osds.offer = o.id
  62.                inner join store as s on o.store_id = s.id
  63.                where date between %s and %s                                  
  64.                group by s.id"""
  65.  
  66.         offer_savings_on_day_query = """
  67.            select s.id as store_id, date, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  68.        
  69.                    sum(osds.total_sale)/sum(osds.transactions) as avg_sale_on_day,                    
  70.                    sum(osds.total_savings)/sum(osds.transactions) as avg_savings_per_transaction_on_day,  
  71.                    
  72.                    0, 0, 0, 0
  73.                    
  74.                from summary_offer_savings_daily as osds
  75.                inner join offer as o on osds.offer = o.id
  76.                inner join store as s on o.store_id = s.id
  77.                where date = %s                                      
  78.                group by s.id"""
  79.  
  80.         offer_score_query = """
  81.            select s.id as store_id, date, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  82.            
  83.                    avg(os.value_score) as avg_value_score,                                          
  84.                    max(os.value_score) as max_value_score,                                          
  85.                    avg(os.quality_score) as avg_quality_score,                                            
  86.                    max(os.quality_score) as max_quality_score                              
  87.            
  88.                from scoring_offerscore as os
  89.                inner join offer as o on os.offer_id = o.id
  90.                inner join store as s on o.store_id = s.id
  91.                where date between %s and %s                                                            
  92.                group by s.id"""
  93.  
  94.  
  95.         store_clicks_insert_query = """
  96.            INSERT INTO summary_store_ticker_daily (store, date, avg_clicks_per_day, max_clicks_per_day, total_clicks,
  97.                                                                avg_sale, max_sale,
  98.                                                                avg_savings_per_transaction, avg_savings_per_day, avg_savings_per_offer,
  99.                                                                max_savings,
  100.                                                                
  101.                                                                avg_sale_on_day, avg_savings_per_transaction_on_day,
  102.                                                                
  103.                                                                avg_value_score, max_value_score, avg_quality_score, max_quality_score)
  104.            %s
  105.            ON DUPLICATE KEY UPDATE avg_clicks_per_day = VALUES(avg_clicks_per_day), max_clicks_per_day = VALUES(max_clicks_per_day),
  106.                                                                total_clicks = VALUES(total_clicks)"""\
  107.             % store_clicks_query
  108.  
  109.         offer_savings_date_range_insert_query = """
  110.            INSERT INTO summary_store_ticker_daily (store, date, avg_clicks_per_day, max_clicks_per_day, total_clicks,
  111.                                                                avg_sale, max_sale,
  112.                                                                avg_savings_per_transaction, avg_savings_per_day, avg_savings_per_offer,
  113.                                                                max_savings,
  114.                                                                
  115.                                                                avg_sale_on_day, avg_savings_per_transaction_on_day,
  116.                                                                
  117.                                                                avg_value_score, max_value_score, avg_quality_score, max_quality_score)
  118.            %s
  119.            ON DUPLICATE KEY UPDATE avg_sale = VALUES(avg_sale), max_sale = VALUES(max_sale),
  120.                                                            avg_savings_per_transaction = VALUES(avg_savings_per_transaction),
  121.                                                            avg_savings_per_day = VALUES(avg_savings_per_day),
  122.                                                            avg_savings_per_offer = VALUES(avg_savings_per_offer),
  123.                                                            max_savings = VALUES(max_savings)"""\
  124.             % offer_savings_date_range_query
  125.                                                            
  126.         offer_savings_on_day_insert_query = """
  127.            INSERT INTO summary_store_ticker_daily (store, date, avg_clicks_per_day, max_clicks_per_day, total_clicks,
  128.                                                                avg_sale, max_sale,
  129.                                                                avg_savings_per_transaction, avg_savings_per_day, avg_savings_per_offer,
  130.                                                                max_savings,
  131.                                                                
  132.                                                                avg_sale_on_day, avg_savings_per_transaction_on_day,
  133.                                                                
  134.                                                                avg_value_score, max_value_score, avg_quality_score, max_quality_score)
  135.            %s
  136.            ON DUPLICATE KEY UPDATE avg_sale_on_day = VALUES(avg_sale_on_day), avg_savings_per_transaction_on_day = VALUES(avg_savings_per_transaction_on_day)"""\
  137.             % offer_savings_on_day_query
  138.                                                            
  139.         offer_score_insert_query = """
  140.            INSERT INTO summary_store_ticker_daily (store, date, avg_clicks_per_day, max_clicks_per_day, total_clicks,
  141.                                                                avg_sale, max_sale,
  142.                                                                avg_savings_per_transaction, avg_savings_per_day, avg_savings_per_offer,
  143.                                                                max_savings,
  144.                                                                
  145.                                                                avg_sale_on_day, avg_savings_per_transaction_on_day,
  146.                                                                
  147.                                                                avg_value_score, max_value_score, avg_quality_score, max_quality_score)
  148.            %s
  149.            ON DUPLICATE KEY UPDATE avg_value_score = VALUES(avg_value_score), max_value_score = VALUES(max_value_score),
  150.                                                            avg_quality_score = VALUES(avg_quality_score), max_quality_score = VALUES(max_quality_score)"""\
  151.             % offer_score_query
  152.  
  153.        
  154.  
  155.  
  156.         cursor = connection.cursor()
  157.         for date in dates:
  158.             cursor.execute(store_clicks_insert_query, [date, date-datetime.timedelta(days=30)])
  159.             transaction.commit_unless_managed()
  160.            
  161.             cursor.execute(offer_savings_date_range_insert_query, [date, date-datetime.timedelta(days=30)])
  162.             transaction.commit_unless_managed()
  163.            
  164.             cursor.execute(offer_savings_on_day_insert_query, [date])
  165.             transaction.commit_unless_managed()
  166.            
  167.             cursor.execute(offer_score_insert_query, [date, date-datetime.timedelta(days=30)])
  168.             transaction.commit_unless_managed()
Add Comment
Please, Sign In to add comment