272 lines
12 KiB
Python
272 lines
12 KiB
Python
from typing import List
|
||
from lib.all import *
|
||
|
||
|
||
# Assume these classes exist and mimic the Go structs
|
||
class ConsumeHistory:
|
||
def __init__(self, ct=None, change=None, s_type=None, type_id=None, uid=None):
|
||
self.ct = ct
|
||
self.change = change
|
||
self.s_type = s_type
|
||
self.type_id = type_id
|
||
self.uid = uid
|
||
|
||
def GetChange(self):
|
||
return self.change
|
||
|
||
def GetSType(self):
|
||
return self.s_type
|
||
|
||
def GetTypeId(self):
|
||
return self.type_id
|
||
|
||
def GetCt(self):
|
||
return self.ct
|
||
|
||
def GetUid(self):
|
||
return self.uid
|
||
|
||
|
||
class CHSt:
|
||
def __init__(self, ct=None, desc=None, change=None):
|
||
self.ct = ct
|
||
self.desc = desc
|
||
self.change = change
|
||
|
||
|
||
# Assume these constants are defined similarly to the Go constants
|
||
CHTypeCost = 1 # 消费明细(金币)
|
||
CHTypeCharge = 2 # 充值明细(金币)
|
||
CHTypeIncome = 3 # 收入明细(钻石)
|
||
CHTypeWithdraw = 4 # 提现明细(钻石)
|
||
|
||
CHSTypeCostContact = 10001 # 消费明细,联系方式
|
||
CHSTypeCostRefundContactWechat = 10002 # 消费明细,微信联系方式退款
|
||
CHSTypeCostMembership = 10003 # 消费明细,会员资格解锁(伪金币记录,会员资格解锁中间无转金币过程)
|
||
CHSTypeCostRefundMembership = 10004 # 消费明细,会员资格解锁退款(伪金币记录,会员资格解锁中间无转金币过程)
|
||
|
||
CHSTypeChargeUser = 20001 # 充值明细,用户自己冲
|
||
CHSTypeChargeOp = 20002 # 充值明细,OP充值
|
||
CHSTypeChargeRefundCoins = 20003 # 充值明细,金币退款
|
||
CHSTypeChargeRefundMembership = 20004 # 充值明细,会员退款
|
||
CHSTypeChargeMembership = 20005 # 充值明细,会员充值
|
||
CHSTypeChargeRefundContactWechat = 20006 # 充值明细,微信金币退款
|
||
CHSTypeChargeZoneMoment = 20007 # 充值明细,动态解锁
|
||
CHSTypeChargeZoneAdmission = 20008 # 充值明细,空间会员
|
||
CHSTypeChargeZoneSuperfanship = 20009 # 充值明细,空间超粉
|
||
CHSTypeChargeZoneRefundAdmission = 20010 # 充值明细,空间普通会员退款
|
||
CHSTypeChargeZoneRefundMoment = 20011 # 充值明细,空间动态退款
|
||
CHSTypeChargeZoneRefundSuperfanship = 20012 # 充值明细,空间动态退款
|
||
|
||
CHSTypeIncomeContact = 30001 # 收入明细,联系方式
|
||
CHSTypeIncomeInvite = 30002 # 收入明细,邀请分成
|
||
CHSTypeIncomeRefundMembership = 30003 # 收入明细,会员退款
|
||
CHSTypeIncomeRefundContactWechat = 30004 # 收入明细,微信退款
|
||
CHSTypeIncomeThirdPartner = 30005 # 收入明细,代运营
|
||
CHSTypeIncomeCollaborator = 30006 # 收入明细,协作者
|
||
CHSTypeIncomeZoneStreamer = 30007 # 收入明细,主播空间收益
|
||
CHSTypeIncomeMembership = 30008 # 收入明细,会员
|
||
CHSTypeIncomeRefundZoneAdmission = 30009 # 收入明细,空间普通会员分成退款
|
||
CHSTypeIncomeRefundThirdPartner = 30010 # 收入明细,代运营
|
||
CHSTypeIncomeRefundCollaborator = 30011 # 收入明细,协作者
|
||
CHSTypeIncomeRefundZoneStreamer = 30012 # 收入明细,主播空间收益
|
||
|
||
CHSTypeWithdrawDiamondAuto = 40001 # 自动提现明细
|
||
CHSTypeWithdrawDiamondHvyogo = 40002 # 慧用工提现明细
|
||
CHSTypeWithdrawDiamondReversal = 40003 # 提现冲正明细
|
||
|
||
ProductIdOpCoin = "op_coin" # op充值的金币
|
||
|
||
ProductIdH5CustomCoin = "h5_custom_coin" # H5 自定义金币
|
||
ProductIdH5Coin500 = "h5_coin_500" # H5 500币
|
||
ProductIdH5Coin1000 = "h5_coin_1000" # H5 1000币
|
||
ProductIdH5Coin3000 = "h5_coin_3000" # H5 3000币
|
||
ProductIdH5Coin5000 = "h5_coin_5000" # H5 5000币
|
||
ProductIdH5Coin8000 = "h5_coin_8000" # H5 8000币
|
||
ProductIdH5Coin10000 = "h5_coin_10000" # H5 10000币
|
||
ProductIdH5Coin15000 = "h5_coin_15000" # H5 15000币
|
||
ProductIdH5Coin18000 = "h5_coin_18000" # H5 18000币
|
||
ProductIdH5Coin20000 = "h5_coin_20000" # H5 20000币
|
||
|
||
ProductIdIosCoin70 = "70_gold"
|
||
ProductIdIosCoin350 = "350_gold"
|
||
ProductIdIosCoin686 = "686_gold"
|
||
ProductIdIosCoin2086 = "2086_gold"
|
||
ProductIdIosCoin4886 = "4886_gold"
|
||
ProductIdIosCoin6986 = "6986_gold"
|
||
ProductIdIosCoin9086 = "9086_gold"
|
||
ProductIdIosCoin13986 = "13986_gold"
|
||
ProductIdIosCoin20986 = "20986_gold"
|
||
|
||
ProductIdContactWechat = "contact_wechat" # 微信联系方式
|
||
ProductIdH5ContactWechat = "h5_contact_wechat" # h5的联系方式,rmb直接解锁
|
||
ProductIdSuperfanGiftContactWechat = "superfan_gift_contact_wechat" # 超粉赠送的联系方式
|
||
|
||
ProductIdMembership = "membership" # 会员
|
||
ProductIdH5Membership = "h5_membership" # 会员
|
||
|
||
ProductIdH5ZoneMoment = "h5_zone_moment" # 空间动态
|
||
ProductIdH5ZoneAdmission = "h5_zone_admission" # 空间普通会员
|
||
ProductIdH5ZoneIronfanship = "h5_zone_ironfanship" # 空间铁粉
|
||
ProductIdH5ZoneSuperfanship = "h5_zone_superfanship" # 空间超粉
|
||
|
||
ProductIdOuterRaven = "outer_raven" # 瑞文测试
|
||
|
||
|
||
def get_type_id_desc(type_id): # Placeholder function
|
||
return f" (Type ID: {type_id})"
|
||
|
||
|
||
def ch_list_income(ch_list: List[ConsumeHistory]) -> List[CHSt]:
|
||
"""
|
||
Translates the provided Go code snippet to Python.
|
||
|
||
Processes a list of ConsumeHistory objects and returns a list of CHSt objects.
|
||
"""
|
||
|
||
list_chst = []
|
||
for ch_db in ch_list:
|
||
item = CHSt(ct=ch_db.ct)
|
||
change_mark = "-"
|
||
if ch_db.GetChange() >= 0:
|
||
change_mark = "+"
|
||
|
||
if ch_db.GetSType() == CHSTypeIncomeContact:
|
||
item.desc = "解锁微信"
|
||
item.change = change_mark + f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeInvite:
|
||
item.desc = "邀请收益"
|
||
item.change = change_mark + f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeRefundMembership:
|
||
item.desc = "用户会员退款"
|
||
item.change = f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeRefundContactWechat:
|
||
item.desc = "用户微信退款"
|
||
item.change = f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeThirdPartner:
|
||
item.desc = "代运营收益" + get_type_id_desc(ch_db.GetTypeId())
|
||
if ch_db.GetTypeId() == ProductIdH5ZoneAdmission:
|
||
item.desc = "空间成员-代运营"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneMoment:
|
||
item.desc = "空间动态-代运营"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneSuperfanship:
|
||
item.desc = "空间超粉-代运营"
|
||
elif ch_db.GetTypeId() == ProductIdContactWechat:
|
||
if ch_db.GetCt() >= 1722497400:
|
||
item.desc = f"解锁微信({ch_db.GetUid()})-代运营"
|
||
elif ch_db.GetTypeId() == ProductIdSuperfanGiftContactWechat:
|
||
if ch_db.GetCt() >= 1722497400:
|
||
item.desc = f"超粉送微信({ch_db.GetUid()})-代运营"
|
||
item.change = change_mark + f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeCollaborator:
|
||
item.desc = "协作收益" + get_type_id_desc(ch_db.GetTypeId())
|
||
if ch_db.GetTypeId() == ProductIdH5ZoneAdmission:
|
||
item.desc = "空间成员-合伙人"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneMoment:
|
||
item.desc = "空间动态-合伙人"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneSuperfanship:
|
||
item.desc = "空间超粉-合伙人"
|
||
elif ch_db.GetTypeId() == ProductIdContactWechat:
|
||
if ch_db.GetCt() >= 1722497400:
|
||
item.desc = f"解锁微信({ch_db.GetUid()})-合伙人"
|
||
elif ch_db.GetTypeId() == ProductIdSuperfanGiftContactWechat:
|
||
if ch_db.GetCt() >= 1722497400:
|
||
item.desc = f"超粉送微信({ch_db.GetUid()})-合伙人"
|
||
item.change = change_mark + f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeZoneStreamer:
|
||
item.desc = "空间收益" + get_type_id_desc(ch_db.GetTypeId())
|
||
if ch_db.GetTypeId() == ProductIdH5ZoneAdmission:
|
||
item.desc = "空间成员"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneMoment:
|
||
item.desc = "空间动态"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneSuperfanship:
|
||
item.desc = "空间超粉"
|
||
item.change = change_mark + f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeMembership:
|
||
item.desc = "永久会员收益" + get_type_id_desc(ch_db.GetTypeId())
|
||
item.change = change_mark + f"{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeRefundZoneAdmission:
|
||
item.desc = "(旧)空间退款" + get_type_id_desc(ch_db.GetTypeId())
|
||
item.change = f"{ch_db.GetChange()}钻石"
|
||
if ch_db.GetChange() == 0: # This logic seems unusual, but it's from the original code
|
||
item.change = f"-{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeRefundThirdPartner:
|
||
item.desc = "代运营空间退款" + get_type_id_desc(ch_db.GetTypeId())
|
||
if ch_db.GetTypeId() == ProductIdH5ZoneAdmission:
|
||
item.desc = "空间成员退款-代运营"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneMoment:
|
||
item.desc = "空间动态退款-代运营"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneSuperfanship:
|
||
item.desc = "空间超粉退款-代运营"
|
||
item.change = f"{ch_db.GetChange()}钻石"
|
||
if ch_db.GetChange() == 0:
|
||
item.change = f"-{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeRefundCollaborator:
|
||
item.desc = "合伙人空间退款" + get_type_id_desc(ch_db.GetTypeId())
|
||
if ch_db.GetTypeId() == ProductIdH5ZoneAdmission:
|
||
item.desc = "空间成员退款-合伙人"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneMoment:
|
||
item.desc = "空间动态退款-合伙人"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneSuperfanship:
|
||
item.desc = "空间动态退款-合伙人" # This seems like a potential typo (should it be 超粉?)
|
||
item.change = f"{ch_db.GetChange()}钻石"
|
||
if ch_db.GetChange() == 0:
|
||
item.change = f"-{ch_db.GetChange()}钻石"
|
||
elif ch_db.GetSType() == CHSTypeIncomeRefundZoneStreamer:
|
||
item.desc = "空间退款" + get_type_id_desc(ch_db.GetTypeId())
|
||
if ch_db.GetTypeId() == ProductIdH5ZoneAdmission:
|
||
item.desc = "用户退款-空间成员"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneMoment:
|
||
item.desc = "用户退款-空间动态"
|
||
elif ch_db.GetTypeId() == ProductIdH5ZoneSuperfanship:
|
||
item.desc = "用户退款-空间超粉"
|
||
item.change = f"{ch_db.GetChange()}钻石"
|
||
if ch_db.GetChange() == 0:
|
||
item.change = f"-{ch_db.GetChange()}钻石"
|
||
|
||
list_chst.append(item)
|
||
|
||
return list_chst
|
||
|
||
|
||
class S:
|
||
def __init__(self):
|
||
self.mysql_db_vas = Mysql(
|
||
"rm-bp11t1616a1kjvmx5.mysql.rds.aliyuncs.com", 3306, "vas", "root", "Wishpal2024"
|
||
)
|
||
|
||
def __del__(self):
|
||
self.mysql_db_vas.close()
|
||
|
||
def proc(self, mid, st, et):
|
||
sql = "select * from vas_ch_income where mid=%d and ct>=%d and ct<%d" % (mid, st, et)
|
||
docs = self.mysql_db_vas.query(sql)
|
||
|
||
ch_list_db = list()
|
||
for doc in docs:
|
||
# print(doc)
|
||
ch = ConsumeHistory(
|
||
safe_get_int(doc, "ct"),
|
||
safe_get_int(doc, "change"),
|
||
safe_get_int(doc, "stype"),
|
||
safe_get_str(doc, "type_id"),
|
||
safe_get_int(doc, "uid")
|
||
)
|
||
ch_list_db.append(ch)
|
||
ch_list = ch_list_income(ch_list_db)
|
||
|
||
csv_w = Csv("231638_12月_主播收益_.csv", ["时间", "钻石变化", "描述"])
|
||
for ch in ch_list:
|
||
d = [
|
||
get_time_str_by_ts(ch.ct), ch.change, ch.desc,
|
||
]
|
||
csv_w.append([d])
|
||
|
||
|
||
s = S()
|
||
s.proc(
|
||
303906,
|
||
get_ts_by_str("2024-12-01 00:00:00"),
|
||
get_ts_by_str("2025-01-01 00:00:00"),
|
||
)
|