# -*- 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