ns = params_kw.copy() ns['page'] = ns.get('page') or 1 ns['sort'] = ns.get('sort') or 'sale_date' date_start = ns.get('date_start', '') date_end = ns.get('date_end', '') sub_reseller_id = ns.get('sub_reseller_id', '') settlement_status = ns.get('settlement_status', '') sc_dbname = get_module_dbname('supplychain') userorgid = await get_userorgid() # 查询supplychain_accounting中该分销商的记录, 关联sales_ledger结算状态 where = "WHERE sa.resellerid = ${userorgid}$" sql_params = {'userorgid': userorgid} if date_start: where += " AND sa.sale_date >= ${date_start}$" sql_params['date_start'] = date_start if date_end: where += " AND sa.sale_date <= ${date_end}$" sql_params['date_end'] = date_end if sub_reseller_id: where += " AND sa.sub_distributor_id = ${sub_reseller_id}$" sql_params['sub_reseller_id'] = sub_reseller_id sql = f""" SELECT sa.id, sa.sub_distributor_id, sr.sub_reseller_name as sub_reseller_id_text, sa.sale_date, sa.sale_date as settlement_period, p.name as product_name, sa.productid, sa.quantity, sa.dist_amount as amount, sa.supply_amount, COALESCE(sl.settlement_status, '0') as settlement_status, sa.source_type, sa.source_id FROM supplychain_accounting sa LEFT JOIN product p ON sa.productid = p.id COLLATE utf8mb4_unicode_ci LEFT JOIN sub_resellers sr ON sa.sub_distributor_id = sr.id COLLATE utf8mb4_unicode_ci LEFT JOIN sales_ledger sl ON sl.productid = sa.productid COLLATE utf8mb4_unicode_ci AND sl.sub_reseller_id = sa.sub_distributor_id COLLATE utf8mb4_unicode_ci AND sl.sale_date = sa.sale_date {where} ORDER BY sa.sale_date DESC, sa.id """ if settlement_status: sql = f""" SELECT * FROM ({sql}) t WHERE t.settlement_status = ${settlement_status}$ """ sql_params['settlement_status'] = settlement_status db = DBPools() async with db.sqlorContext(sc_dbname) as sor: recs = await sor.sqlExe(sql, sql_params) rows = [] for r in (recs or []): rows.append({ 'id': r.id, 'sub_reseller_id': r.sub_distributor_id or '', 'sub_reseller_id_text': r.sub_reseller_id_text or '', 'settlement_period': str(r.sale_date or ''), 'product_name': r.product_name or '', 'amount': float(r.amount or 0), 'settlement_status': r.settlement_status or '0', 'settlement_date': '', 'payment_method': '', 'reference_no': r.source_id or '', 'remark': r.source_type or '', 'created_at': str(r.sale_date or '') }) total = len(rows) debug(f'get_reseller_settlement: {total} records') return json.dumps({ 'success': True, 'total': total, 'rows': rows }, ensure_ascii=False, default=str)