from lib.all import * csv_w = Csv( "income_08.csv", ["用户id", "昵称", "空间解锁", "主播收入钻石"] ) class S: def __init__(self): self.mysql_db_vas = Mysql( "rm-bp11t1616a1kjvmx5.mysql.rds.aliyuncs.com", 3306, "vas", "root", "Wishpal2024" ) self.col_ztp = MongoDB( host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659", port=3717, db="zone_third_partner", collection="zone_third_partner" ) self.col_account = MongoDB( host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659", port=3717, db="account", collection="account" ) self.col_zone = MongoDB( host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659", port=3717, db="zone", collection="zone" ) def __del__(self): self.mysql_db_vas.close() self.col_ztp.close() self.col_account.close() self.col_zone.close() def uid2mid(self, uid): q = { "user_id": uid } doc = self.col_account.find_one(q) return safe_get_int(doc, "_id") def zid2mid(self, zid): q = { "_id": zid } doc = self.col_zone.find_one(q) return safe_get_int(doc, "mid") def mid2uid_name(self, mid): q = { "_id": mid } doc = self.col_account.find_one(q) return safe_get_int(doc, "user_id"), safe_get_str(doc, "name") # 获取代运营管理的空间 def get_tp_zids(self, tp_mids): q = { "third_partner_mid": {"$in": tp_mids} } docs = self.col_ztp.find(q) zids = list() for d in docs: zid = safe_get_int(d, "zid") zids.append(zid) return zids # 获取zid解锁空间 def get_zone_admission_cnt(self, zids, st, et): sql = ''' select zid, count(1) as admission_cnt from vas_zone_member where zid in (%s) and member_type=1 and ct>=%d and ct<%d group by zid ''' % (get_list_str(zids), st, et) print(sql) rows = self.mysql_db_vas.query(sql) zid_cnt_map = dict() for row in rows: zid = safe_get_int(row, "zid") ac = safe_get_int(row, "admission_cnt") zid_cnt_map[zid] = ac return zid_cnt_map # 获取主播净收入 def get_streamer_income(self, mids, st, et): sql = ''' select mid, sum(`change`) as income from vas_ch_income where mid in (%s) and ct>=%d and ct<%d group by mid ''' % (get_list_str(mids), st, et) print(sql) rows = self.mysql_db_vas.query(sql) mid_income_map = dict() for row in rows: mid = safe_get_int(row, "mid") income = safe_get_int(row, "income") mid_income_map[mid] = income return mid_income_map def proc(self): tp_uids = [983565, 231638] tp_mids = list() for uid in tp_uids: tp_mids.append(self.uid2mid(uid)) print(tp_mids) # 获取代运营管理的空间 zids = self.get_tp_zids(tp_mids) print(zids) # 空间解锁数 zid_cnt_map = self.get_zone_admission_cnt( zids, get_ts_by_str("2024-08-01 00:00:00"), get_ts_by_str("2024-09-01 00:00:00") ) print(zid_cnt_map) # 获取空间对应的mid streamer_mids = list() for zid in zids: streamer_mids.append(self.zid2mid(zid)) print(streamer_mids) # 收入 mid_income_map = self.get_streamer_income( streamer_mids, get_ts_by_str("2024-08-01 00:00:00"), get_ts_by_str("2024-09-01 00:00:00") ) print(mid_income_map) for zid in zids: mid = self.zid2mid(zid) uid, name = self.mid2uid_name(mid) ac = safe_get_int(zid_cnt_map, zid) income = safe_get_int(mid_income_map, mid) doc = [uid, name, ac, income] print(doc) csv_w.append([doc]) s = S() s.proc()