accounting/accounting/alipay_recharge.py
2024-07-31 16:16:21 +08:00

56 lines
1.8 KiB
Python

from datetime import datetime
from appPublic.uniqueID import getID
from sqlor.dbpools import DBPools
from appPublic.timeUtils import curDateString
from appPublic.argsConvert import ArgsConvert
from .accounting_config import get_accounting_config, AccountingOrgs
from .const import *
from .accountingnode import get_accounting_nodes
from .excep import *
from .getaccount import getAccountByName
from .businessdate import get_business_date
from .recharge import RechargeAccounting
class AlipayAccountingOrgs(AccountingOrgs):
def __init__(self, caller,
accounting_orgid,
customerid,
resellerid=None):
super(AlipayAccountingOrgs, self). __init__(caller,
accounting_orgid,
customerid,
resellerid=resellerid)
self.variable['手续费'] = self.caller.fee_amt
async def get_act_specstr(self):
return ACTNAME_RECHARGE_ALIPAY
class AlipayRechargeAccounting(RechargeAccounting):
def __init__(self, recharge_log):
super(AlipayRechargeAccounting, self).__init__(recharge_log)
self.fee_amt = recharge_log['fee_amt']
async def accounting(self, sor):
self.sor = sor
bz_date = await get_business_date(sor=sor)
if bz_date != self.curdate:
raise AccountingDateNotInBusinessDate(self.curdate, bz_date)
nodes = await get_accounting_nodes(sor, self.customerid)
lst = len(nodes) - 1
self.accountingOrgs = []
for i, n in enumerate(nodes):
if i < lst:
ao = AlipayAccountingOrgs(self, nodes[i], self.customerid,
resellerid=nodes[i+1])
else:
ao = AlipayAccountingOrgs(self, nodes[i], self.customerid)
self.accountingOrgs.append(ao)
await self.write_bill(sor)
[await ao.do_accounting(sor) for ao in self.accountingOrgs ]
print(f'recharge ok for {self.bill}, {nodes=}')
return True