# 通过机构ID拿到流水 async def get_bill_data(ns): response = {"status": False} try: start_date = ns["start_date"] end_date = ns["end_date"] provider_id = ns["provider_id"] orgid = ns["orgid"] except KeyError as e: response["msg"] = f"参数错误,缺少:{e}" return response db = DBPools() # 通过供应商account表的(机构id) 拿到 acc_detail表数据, async with db.sqlorContext('kboss') as sor: sql = "SELECT a.subjectid,ad.acc_date,o.orgname,p.`name`,p.description,b.quantity,og.list_price,al.amount,og.discount,og.amount,p.ptype,ad.summary FROM acc_detail ad LEFT JOIN account a ON a.id=ad.accountid LEFT JOIN accounting_log al ON al.id=ad.acclogid LEFT JOIN bill b ON b.id=al.billid LEFT JOIN order_goods og ON og.id=b.ordergoodsid LEFT JOIN product p ON p.id=b.productid LEFT JOIN organization o ON o.id=b.customerid WHERE ad.summary IN ('BUY','BUY_REVERSE') AND ( ad.acc_date >= ${start_date}$ AND ad.acc_date < ${end_date}$ ) AND a.accounting_orgid=${orgid}$ AND a.orgid=${provider_id}$ AND a.subjectid IN ('subject010','subject011','subject009')" if start_date == end_date: sql = sql.replace(" ad.acc_date >= ${start_date}$ AND ad.acc_date < ${end_date}$", "ad.acc_date = ${end_date}$") data = await sor.sqlExe(sql, ns) if not data: response["status"] = True response["msg"] = "该供应商目前暂无流水" # 更新总价到provider_settle_data.money sql = "UPDATE provider_settle_data SET money=${money}$,money_0=0,money_1=0,money_2=0,detail_status=1 WHERE orgid=${orgid}$ and provider_id=${provider_id}$ and bill_start_date=${bill_start_date}$ and bill_end_date=${bill_end_date}$" await sor.sqlExe(sql, {"money": 0, "orgid": orgid, "provider_id": provider_id, "bill_start_date": start_date, "bill_end_date": end_date}) return response provider_data = await sor.R('provider', {'orgid': provider_id, "del_flg": 0}) if not provider_data: response["status"] = True response["msg"] = "未找到该供应商" return response else: provider_data = provider_data[0] # 转换类型 if provider_data['discount_mode'] == '1': response["provider_settle_type"] = "折扣" elif provider_data['rebate_mode'] == '1': response["provider_settle_type"] = "返佣" elif provider_data['floorprice_mode'] == '1': response["provider_settle_type"] = "底价" else: response["provider_settle_type"] = "未知知结算方式" # 计算总额 async with db.sqlorContext('kboss') as sor: total_amount = 0 data_dict = {} for i, d in enumerate(data): amount = 0 subject_id = d['subjectid'] if subject_id not in data_dict: data_dict[subject_id] = { "data": [], "amount": 0, } data_dict[subject_id]["data"].append(d) if d["summary"] == "BUY": amount += round(d['amount'] * 100) elif d["summary"] == "BUY_REVERSE": amount -= round(d['amount'] * 100) data_dict[subject_id]["amount"] += amount total_amount += amount # subject009 待结转折扣销售收入 # subject010 待结转代付费销售收入 # subject011 待结转底价销售收入 money_2 = data_dict.get("subject011", {}).get('amount', 0) money_1 = data_dict.get("subject010", {}).get('amount', 0) money_0 = data_dict.get("subject009", {}).get('amount', 0) info("更新总价到provider_settle_data.money") sql = "UPDATE provider_settle_data SET money=${money}$,money_0=${money_0}$,money_1=${money_1}$,money_2=${money_2}$,detail_status=1 WHERE orgid=${orgid}$ and provider_id=${provider_id}$ and bill_start_date=${bill_start_date}$ and bill_end_date=${bill_end_date}$" await sor.sqlExe(sql, {"money": total_amount, "orgid": orgid, "provider_id": provider_id, "bill_start_date": start_date, "bill_end_date": end_date, "money_0": money_0, "money_1": money_1, "money_2": money_2} ) info("更新总价到provider_settle_data.money完成") response["total_amount"] = total_amount response["status"] = True response["data"] = data_dict if data_dict: response["subject_type"] = list(data_dict.keys())[0] else: response["subject_type"] = "" return response ret = await get_bill_data(params_kw) return ret