import sys import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) from accounting.settle import SettleAccounting, get_subjectid from accounting.accounting_config import AccountingOrgs ns = params_kw.copy() record_id = ns.get('id', '') remark = ns.get('remark', '') payment_method = ns.get('payment_method', '') if not record_id: return json.dumps({'success': False, 'error': '缺少记录ID'}, ensure_ascii=False) sc_dbname = get_module_dbname('supplychain') acc_dbname = get_module_dbname('accounting') userorgid = await get_userorgid() # 查询supplychain_accounting记录 db = DBPools() async with db.sqlorContext(sc_dbname) as sor: recs = await sor.sqlExe(""" SELECT sa.*, sp.supplier_name, sr.sub_reseller_name FROM supplychain_accounting sa LEFT JOIN suppliers sp ON sa.supplier_id = sp.id COLLATE utf8mb4_unicode_ci LEFT JOIN sub_resellers sr ON sa.sub_distributor_id = sr.id COLLATE utf8mb4_unicode_ci WHERE sa.id = ${record_id}$ """, {'record_id': record_id}) if not recs: return json.dumps({'success': False, 'error': '记录不存在'}, ensure_ascii=False) rec = recs[0] # 构建settle_log settle_log = { 'accounting_orgid': userorgid, 'providerid': rec.supplier_id or '', 'sub_distributor_id': rec.sub_distributor_id or '', 'sale_mode': '0', 'settle_date': str(rec.sale_date or curDateString()), 'settle_amt': float(rec.dist_amount or 0), 'business_op': '分销商结算', 'remark': remark } # 调用SettleAccounting try: async with db.sqlorContext(acc_dbname) as acc_sor: sa = SettleAccounting(settle_log) await sa.accounting(acc_sor) # 更新sales_ledger结算状态 async with db.sqlorContext(sc_dbname) as sc_sor: await sc_sor.sqlExe(""" UPDATE sales_ledger SET settlement_status = '1', updated_at = NOW() WHERE productid = ${productid}$ AND sub_reseller_id = ${sub_distributor_id}$ AND sale_date = ${sale_date}$ """, { 'productid': rec.productid, 'sub_distributor_id': rec.sub_distributor_id, 'sale_date': str(rec.sale_date) }) debug(f'reseller_settlement: settled {record_id}, amt={rec.dist_amount}') return json.dumps({ 'success': True, 'message': f'结算成功,金额: {rec.dist_amount}', 'settle_id': sa.settleid, 'bill_id': sa.billid }, ensure_ascii=False, default=str) except Exception as e: debug(f'reseller_settlement error: {format_exc()}') return json.dumps({'success': False, 'error': f'结算失败: {str(e)}'}, ensure_ascii=False)