# -*- coding: utf-8 -*- """财务结算单列表查询。""" DBNAME = 'kboss' def _parse_page(ns, default_page=1, default_size=20, max_size=200): 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_list(ns={}): accounting_orgid = ns.get('accounting_orgid') if not accounting_orgid: return {'status': False, 'msg': '缺少 accounting_orgid'} current_page, page_size, offset = _parse_page(ns) conditions = ["accounting_orgid=${accounting_orgid}$", "del_flg='0'"] params = {'accounting_orgid': accounting_orgid} for key in ('counterparty_type', 'counterparty_orgid', 'status', 'period_type'): if ns.get(key): conditions.append('%s=${%s}$' % (key, key)) params[key] = ns[key] if ns.get('start_date'): conditions.append('period_end >= ${start_date}$') params['start_date'] = ns['start_date'] if ns.get('end_date'): conditions.append('period_start <= ${end_date}$') params['end_date'] = ns['end_date'] where_sql = ' AND '.join(conditions) db = DBPools() async with db.sqlorContext(DBNAME) as sor: try: count_rows = await sor.sqlExe( 'SELECT COUNT(*) AS total_count FROM finance_settlement WHERE %s' % where_sql, params, ) total_count = count_rows[0]['total_count'] if count_rows else 0 sql = """ SELECT * FROM finance_settlement WHERE %s ORDER BY period_end DESC, create_at DESC LIMIT %d OFFSET %d """ % (where_sql, page_size, offset) rows = await sor.sqlExe(sql, params) return { 'status': True, 'msg': 'ok', 'data': { 'total_count': total_count, 'current_page': current_page, 'page_size': page_size, 'items': rows, }, } except Exception as e: return {'status': False, 'msg': '查询结算单失败, %s' % str(e)} ret = await finance_settlement_list(params_kw) return ret