async def get_recharge_record(ns={}): # 列出充值记录和充值总额 recharge_records = [] recharge_amount = 0 recharge_reverse_amount = 0 action_mapping = { 'RECHARGE': '线下充值', 'RECHARGE_REVERSE': '线下充值冲账', 'RECHARGE_ALIPAY': '支付宝充值', 'RECHARGE_ALIPAY_REVERSE': '支付宝充值冲账' } db = DBPools() async with db.sqlorContext('kboss') as sor: try: user_id = await get_user() if not user_id: return {'status': False, 'message': 'user_id is missing'} result = await sor.R('users', {'id': user_id}) if not result: return {'status': False, 'message': 'No orgid found for the user'} orgid = result[0].get('orgid') start_time = ns.get('start_time') end_time = ns.get('end_time') # recharge_path = 0 recharge_path = ns.get('recharge_path') params = {'start_time': start_time, 'end_time': end_time, 'recharge_path': recharge_path, 'orgid': orgid} sql = "SELECT * FROM recharge_log WHERE del_flg = 0 AND customerid = ${orgid}$" if start_time and end_time: sql += " AND create_at BETWEEN ${start_time}$ AND ${end_time}$" if recharge_path is not None: sql += " AND recharge_path = ${recharge_path}$" reacs = await sor.sqlExe(sql, params) if not reacs: return {'status': True, 'message': 'No recharge records'} for recharge in reacs: if recharge['recharge_sno']: is_payment_received = 1 else: is_payment_received = 2 if recharge['recharge_path'] == '0': # 将字符串形式的0和2进行匹配 recharge_path = '支付宝充值' elif recharge['recharge_path'] == '2': recharge_path = '线下充值' elif recharge['recharge_path'] == '1' and recharge['weixin_sno']: recharge_path = '微信充值' else: recharge_path = '未知' if is_payment_received == 1 or recharge_path == '线下充值' or recharge_path == '微信充值': record_data = { 'is_payment_received': bool(recharge['recharge_sno']), 'recharge_path': recharge_path, 'create_at': recharge['create_at'], 'recharge_amt': round(float(recharge['recharge_amt']), 2), 'recharge_sno': recharge['recharge_sno'], 'action': action_mapping.get(recharge['action'], '未知'), 'id': recharge['customerid'], } if recharge_path == '微信充值': record_data['action'] = '微信充值' record_data['recharge_sno'] = recharge.get('weixin_sno') recharge_records.append(record_data) if recharge['action'] in ['RECHARGE', 'RECHARGE_ALIPAY']: recharge_amount += round(float(recharge['recharge_amt']), 2) elif recharge['action'] in ['RECHARGE_REVERSE', 'RECHARGE_ALIPAY_REVERSE']: recharge_reverse_amount += round(float(recharge['recharge_amt']), 2) recharge_records.sort(key=lambda x: x['create_at'], reverse=True) except Exception as e: raise total_amount = recharge_amount - recharge_reverse_amount return { 'status': True, 'message': 'ok', 'recharge_records': recharge_records, 'actual_amount': round(total_amount, 2), 'recharge_amount': round(recharge_amount, 2), 'charged_amount': round(recharge_reverse_amount, 2) } ret = await get_recharge_record(params_kw) return ret