bugfix
This commit is contained in:
parent
4971eb41d2
commit
1572df3d16
59
charge/calculate.py
Normal file
59
charge/calculate.py
Normal file
@ -0,0 +1,59 @@
|
||||
from appPublic.log import debug, exception
|
||||
from ahserver.serverenv import ServerEnv
|
||||
from sqlor.dbpools import DBPools
|
||||
|
||||
class PayeeCharge:
|
||||
def __init__(self, resourceid, ctid):
|
||||
self.resourceid = resourceid
|
||||
self.ctid = ctid
|
||||
|
||||
async get_ct_specs(self, sor):
|
||||
sql = """select a.charge_type_spec_mode as spec_type, b.*
|
||||
from charge_type a, charge_type_spec b
|
||||
where a.id = ${ctid}
|
||||
and a.id = b.ctid"""
|
||||
ctspecs = await sor.sqlExe(sql, {'ctid': self.ctid})
|
||||
return ctspecs
|
||||
|
||||
async def get_payee_charge_rules(self, sor, payee):
|
||||
pcrs = await sor.R('payee_charge_rule', {
|
||||
'resourceid': self.resourceid,
|
||||
'ctid': self.ctid,
|
||||
'payeeid': payee
|
||||
})
|
||||
return pcrs
|
||||
|
||||
def get_spec_by_ctsid(self, ctsid, ctspecs):
|
||||
for spec in ctspecs:
|
||||
if ctsid == spec.id:
|
||||
return spec
|
||||
return None
|
||||
|
||||
async def calculate_charge(self, sor, payeeids, data):
|
||||
ctspecs = await self.get_ct_specs(sor)
|
||||
charges = {}
|
||||
for payeeid in payeeids:
|
||||
charge_arr = []
|
||||
pcrs = await self.get_payee_charge_rule(sor, payeeid)
|
||||
for pcr in pcrs:
|
||||
spec = self.get_spec_by_ctsid(pcr.ctsid, ctspecs)
|
||||
if spec is None:
|
||||
continue
|
||||
charge = pcr.copy()
|
||||
d = data.get(spec.spec_name)
|
||||
if d is None:
|
||||
continue
|
||||
cnt = data.get(spec.count_name, 1)
|
||||
if spec_mode == 'spec_name':
|
||||
if d == pci.spec_value:
|
||||
pci.amount = pcr.charge_amount * cnt
|
||||
elif spec_mode == 'spec_amount':
|
||||
if pcr.charge_unit is None or pcr.charge_unit == 0:
|
||||
pci.charge_unit = 1
|
||||
charge.amount = d * pcr.charge_amount / pcr.charge_unit
|
||||
else:
|
||||
continue
|
||||
charge_arr.append(charge)
|
||||
charges[payeeid] = charge_arr
|
||||
return charges
|
||||
|
||||
6
charge/init.py
Normal file
6
charge/init.py
Normal file
@ -0,0 +1,6 @@
|
||||
from ahserver.serverenv import ServerEnv
|
||||
from charge.calculate import PayeeCharge
|
||||
def load_charge():
|
||||
env = ServerEnv()
|
||||
env.PayeeCharge = PayeeCharge
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user