kboss/b/bill/finance_settlement_detail.dspy
2026-06-18 17:48:01 +08:00

62 lines
2.3 KiB
Plaintext

# -*- coding: utf-8 -*-
"""财务结算单详情查询。"""
DBNAME = 'kboss'
def _parse_page(ns, default_page=1, default_size=100, max_size=500):
try:
current_page = int(ns.get('current_page', default_page) or default_page)
except (TypeError, ValueError):
current_page = default_page
try:
page_size = int(ns.get('page_size', default_size) or default_size)
except (TypeError, ValueError):
page_size = default_size
current_page = max(1, current_page)
page_size = max(1, min(page_size, max_size))
return current_page, page_size, (current_page - 1) * page_size
async def finance_settlement_detail(ns={}):
settlement_id = ns.get('settlement_id') or ns.get('id')
if not settlement_id:
return {'status': False, 'msg': '缺少 settlement_id'}
current_page, page_size, offset = _parse_page(ns)
db = DBPools()
async with db.sqlorContext(DBNAME) as sor:
try:
rows = await sor.R('finance_settlement', {'id': settlement_id, 'del_flg': '0'})
if not rows:
return {'status': False, 'msg': '结算单不存在'}
count_rows = await sor.sqlExe("""
SELECT COUNT(*) AS total_count
FROM finance_settlement_detail
WHERE settlement_id=${settlement_id}$ AND del_flg='0'
""", {'settlement_id': settlement_id})
total_count = count_rows[0]['total_count'] if count_rows else 0
detail_rows = await sor.sqlExe("""
SELECT *
FROM finance_settlement_detail
WHERE settlement_id=${settlement_id}$ AND del_flg='0'
ORDER BY bill_date DESC, create_at DESC
LIMIT %d OFFSET %d
""" % (page_size, offset), {'settlement_id': settlement_id})
return {
'status': True,
'msg': 'ok',
'data': {
'settlement': rows[0],
'detail_total_count': total_count,
'current_page': current_page,
'page_size': page_size,
'items': detail_rows,
},
}
except Exception as e:
return {'status': False, 'msg': '查询结算单详情失败, %s' % str(e)}
ret = await finance_settlement_detail(params_kw)
return ret