from lib.all import * service_name = 'vas_day_detail' log_dir = '/app/log' logger = Logger(service_name, log_dir=log_dir) hds = [ '时间', '会员数', '会员流水', '空间解锁数', '空间解锁流水', '空间超粉数', '空间超粉流水', '空间动态数', '空间动态流水', '其他数(微信+金币)', '其他流水(微信+金币)', '总流水', '主播分成', '净收入', '利润率', '会员流水占比', '空间解锁占比', '空间超粉占比', '空间动态占比', '其他占比', ] class S: def __init__(self, st, et): self.st = st self.et = et self.mysql_db_vas = Mysql( "rm-bp11t1616a1kjvmx5.mysql.rds.aliyuncs.com", 3306, "vas", "root", "Wishpal2024" ) self.mysql_db_bi = Mysql( "127.0.0.1", 3306, "metabase_bi", "metabase_bi", "Wishpal_2024" ) def __del__(self): self.mysql_db_vas.close() self.mysql_db_bi.close() def get_product_sold_list(self): sql = ''' select product_id, count(1) cnt, sum(pay_amount) money from vas_order where ct>={} and ct<{} and order_status in (1,2) group by product_id '''.format(self.st, self.et) docs = self.mysql_db_vas.query(sql) return docs def get_streamer_dias(self): sql = ''' select sum(`change`) dias from vas_ch_income where ct>={} and ct<{} and mid>0 '''.format(self.st, self.et) docs = self.mysql_db_vas.query(sql) if len(docs) > 0: return safe_get_int(docs[0], "dias") return 0 def insert_day_detail(self, data: tuple): sql = '''insert into vas_day_detail ( ptime, membership_cnt, membership_flow, zone_admission_cnt, zone_admission_flow, zone_superfan_cnt, zone_superfan_flow, zone_moment_cnt, zone_moment_flow, other_cnt, other_flow, total_flow, streamer_flow, official_flow, profit_rate, membership_rate, zone_admission_rate, zone_superfan_rate, zone_moment_rate, other_rate ) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)''' return self.mysql_db_bi.exec(sql, data) def proc(self): total_money = 0 # 总流水 membership_cnt = 0 membership_money = 0 zone_admission_cnt = 0 zone_admission_money = 0 zone_superfan_cnt = 0 zone_superfan_money = 0 zone_moment_cnt = 0 zone_moment_money = 0 other_cnt = 0 other_money = 0 sold_list = self.get_product_sold_list() for sold in sold_list: product_id = safe_get_str(sold, "product_id") cnt = safe_get_int(sold, "cnt") money = int(safe_get_int(sold, "money") / 100) total_money += money if product_id == "membership": membership_cnt += cnt membership_money += money elif product_id == "h5_zone_admission": zone_admission_cnt += cnt zone_admission_money += money elif product_id == "h5_zone_superfanship": zone_superfan_cnt += cnt zone_superfan_money += money elif product_id == "h5_zone_moment": zone_moment_cnt += cnt zone_moment_money += money else: other_cnt += cnt other_money += money streamer_dias = self.get_streamer_dias() streamer_money = int(streamer_dias / 10) official_money = total_money - streamer_money data = ( datetime.datetime.fromtimestamp(self.st).strftime('%Y-%m-%d %H:%M:%S'), membership_cnt, membership_money, zone_admission_cnt, zone_admission_money, zone_superfan_cnt, zone_superfan_money, zone_moment_cnt, zone_moment_money, other_cnt, other_money, total_money, streamer_money, official_money, safe_div(official_money, total_money), safe_div(membership_money, total_money), safe_div(zone_admission_money, total_money), safe_div(zone_superfan_money, total_money), safe_div(zone_moment_money, total_money), safe_div(other_money, total_money) ) self.insert_day_detail(data) print(data) # st_et_str_map = gen_st_et_str_map_v2( # "2024-04-16 00:00:00", "2024-05-11 00:00:00" # ) # # for st_str, et_str in st_et_str_map.items(): # s = S( # get_ts_by_str(st_str), get_ts_by_str(et_str) # ) # s.proc() st = get_today_zero_time() - 86400 et = st + 86400 s = S( st, et ) s.proc()