This commit is contained in:
yumoqing 2025-12-11 14:54:59 +08:00
parent 74875afcc3
commit 438dd6042f
7 changed files with 58 additions and 8 deletions

View File

@ -1,3 +1,11 @@
# pricing # pricing
定价模块 定价模块
## 定价概念
* 定价类型规范了一类业务的定价标准,并用定价类型规格细化定价名细
* 定价项定义为什么定价,定价项目时序说明某个定价的有效时间段, 定价项规定了某个定价规格的具体定价和成本
## 使用
在资源中选择定价项目,

View File

@ -1,8 +1,7 @@
{ {
"tblname": "pricing_program", "tblname": "pricing_program_timing",
"title": "定价项目", "title": "定价项目时序",
"params": { "params": {
"sortby": "name",
"logined_userorgid": "ownerid", "logined_userorgid": "ownerid",
"browserfields": { "browserfields": {
"exclouded": ["id", "ownerid" ], "exclouded": ["id", "ownerid" ],
@ -13,7 +12,7 @@
], ],
"subtables":[ "subtables":[
{ {
"field": "ppid", "field": "pptid",
"title": "定价细项", "title": "定价细项",
"icon": "{{entire_url('/pricing/imgs/pricing_item.svg')}}", "icon": "{{entire_url('/pricing/imgs/pricing_item.svg')}}",
"subtable": "pricing_item" "subtable": "pricing_item"

View File

@ -0,0 +1,23 @@
{
"tblname": "pricing_program",
"title": "定价项目",
"params": {
"sortby": "name",
"logined_userorgid": "ownerid",
"browserfields": {
"exclouded": ["id", "ownerid" ],
"alters": {}
},
"editexclouded": [
"id", "ownerid"
],
"subtables":[
{
"field": "ppid",
"title": "定价项目时序",
"icon": "{{entire_url('/pricing/imgs/pricing_program_timing.svg')}}",
"subtable": "pricing_program_timing"
}
]
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -20,10 +20,26 @@ class PricingProgram:
self.pricing_type = await self.sor.R('pricing_type', self.pricing_type = await self.sor.R('pricing_type',
{'id': self.ptid}) {'id': self.ptid})
async def get_items(self): async def get_items(self, biz_date=None):
recs = await self.sor.R('pricing_item', {'ppid': self.id}) if biz_date is None:
env = ServerEnv()
biz_date = await env.get_business_date(self.sor)
ppts = await self.get_program_timing(biz_date)
if lne(ppts) < 1:
return None
ppt = ppts[0]
recs = await self.sor.R('pricing_item', {'pptid': ppt.id})
return recs return recs
async def get_program_timing(self, biz_date):
sql = """select * from pricing_program_timing
where enabled_date >= ${biz_date}$
and expired_date < ${biz_date}$
and ppid = ${ppid}$
"""
return await self.sor.sqlExe(sql, {'ppid':self.ppid,
'biz_date': biz_date})
async def get_specs(self): async def get_specs(self):
recs = await self.sor.R('pricing_spec', {'ptid': self.ptid}) recs = await self.sor.R('pricing_spec', {'ptid': self.ptid})
return recs return recs
@ -57,7 +73,11 @@ async def get_remote_pricing(sor, charge, data):
async def pricing_program_charging(sor, pricing_program_id, data): async def pricing_program_charging(sor, pricing_program_id, data):
pp = PricingProgram(pricing_program_id, sor) pp = PricingProgram(pricing_program_id, sor)
await pp.init() await pp.init()
pp_items = await pp.get_items() env = ServerEnv()
if not data.get('biz_date'):
biz_date = await env.get_business_date(self.sor)
data['biz_date'] = biz_date
pp_items = await pp.get_items(biz_date=data['biz_date'])
charges = [] charges = []
for item in pp_items: for item in pp_items:
charge = item.copy() charge = item.copy()