kboss/b/pub/xiaoshou_gai_zhekou_dijia.dspy
2025-07-16 14:27:17 +08:00

216 lines
9.5 KiB
Plaintext

async def xiaoshou_gai_zhekou_dijia_detail(ns={}):
"""
销售修改折扣底价
:return:
"""
productid = ns.get('productid')
db = DBPools()
async with db.sqlorContext('kboss') as sor:
try:
if not ns.get('providerid'):
ns['providerid'] = (await sor.R('product', {'id': productid}))[0]['providerid']
# 折扣底价不能低于供应商
# 按产品倒查who is provider
if ns.get('discount'):
dp_salemode = '0'
who_is_provider_sql = """SELECT offer_orgid FROM saleprotocol WHERE bid_orgid = '%s' AND salemode in ('0', '1') and
del_flg = '0' and id in (SELECT protocolid FROM product_salemode WHERE providerid = '%s' and
productid = '%s');""" % (ns.get('offer_orgid'), ns.get('providerid'), ns.get('productid'))
elif ns.get('price'):
dp_salemode = '2'
who_is_provider_sql = """SELECT offer_orgid FROM saleprotocol WHERE bid_orgid = '%s' AND salemode = '2' and
del_flg = '0' and id in (SELECT protocolid FROM product_salemode WHERE providerid = '%s' and
productid = '%s');""" % (ns.get('offer_orgid'), ns.get('providerid'), ns.get('productid'))
who_is_provider = (await sor.sqlExe(who_is_provider_sql, {}))[0]['offer_orgid']
# 查找供应商协议id
ns_provider_discount = {
'offer_orgid': who_is_provider,
'bid_orgid': ns.get('offer_orgid'),
'salemode': dp_salemode,
'del_flg': '0'
}
provider_protocol_id_li = (await sor.R('saleprotocol', ns_provider_discount))
# 可能是回佣设置折扣
if provider_protocol_id_li:
provider_protocol_id = provider_protocol_id_li[0]['id']
else:
provider_protocol_id = 0
# 查找供应商给的
if provider_protocol_id:
provider_dp_find = {
'protocolid': provider_protocol_id,
'providerid': ns.get('providerid'),
'productid': ns.get('productid'),
'del_flg': '0'
}
if ns.get('price'):
provider_price = (await sor.R('product_salemode', provider_dp_find))[0]['price']
if not provider_price:
return {
'status': False,
'msg': '获取不到供应商的底价'
}
if float(provider_price) >= float(ns.get('price')):
return {
'status': False,
'msg': '客户售价不能低于供应商底价'
}
else:
provider_discount_li = await sor.R('product_salemode', provider_dp_find)
# 回佣产品添加折扣时 没有上级折扣
if provider_discount_li:
provider_discount = provider_discount_li[0]['discount']
if float(provider_discount) >= float(ns.get('discount')):
return {
'status': False,
'msg': '客户折扣不能低于供应商折扣'
}
# 首先查找offer和bid是否已经存在
ns_offer_bid = {
'offer_orgid': ns.get('offer_orgid'),
'bid_orgid': ns.get('bid_orgid'),
'del_flg': '0'
}
if ns.get('discount'):
ns_offer_bid['salemode'] = '0'
elif ns.get('price'):
ns_offer_bid['salemode'] = '2'
else:
ns_offer_bid['salemode'] = '1'
res_offer_bid_li = await sor.R('saleprotocol', ns_offer_bid)
# 如果给客户的单独配置已经存在
if res_offer_bid_li:
protocolid = res_offer_bid_li[0]['id']
ns_zibiao = {
'protocolid': protocolid,
'del_flg': '0'
}
zibiao_cha_li = await sor.R('product_salemode', ns_zibiao)
zibiao_ids = [item.get('productid') for item in zibiao_cha_li if item]
if productid in zibiao_ids:
for prd in zibiao_cha_li:
prd_id = prd['productid']
if prd_id == productid:
# 获取子表id更新
ns_zibiao_up = {
'id': prd['id'],
# 'discount': ns.get('discount')
}
if ns.get('discount'):
ns_zibiao_up['discount'] = ns.get('discount')
elif ns.get('price'):
ns_zibiao_up['price'] = ns.get('price')
await sor.U('product_salemode', ns_zibiao_up)
# if ns.get('end_date'):
# ns_up_end_date = {
# 'id': protocolid,
# 'end_date': ns.get('end_date')
# }
# await sor.U('saleprotocol', ns_up_end_date)
else:
# 产品是以*的形式展示
ns_zibiao_c = {
'id': uuid(),
'protocolid': protocolid,
'providerid': ns.get('providerid'),
'productid': ns.get('productid'),
# 'discount': ns.get('discount')
}
if ns.get('discount'):
ns_zibiao_c['discount'] = ns.get('discount')
elif ns.get('price'):
ns_zibiao_c['price'] = ns.get('price')
await sor.C('product_salemode', ns_zibiao_c)
# if ns.get('end_date'):
# ns_up_end_date = {
# 'id': protocolid,
# 'end_date': ns.get('end_date')
# }
# await sor.U('saleprotocol', ns_up_end_date)
else:
# 获取*的start_date和end_date
ns_date_get = {
'offer_orgid': ns.get('offer_orgid'),
'bid_orgid': '*',
# 'salemode': '0',
'del_flg': '0'
}
if ns.get('discount'):
ns_date_get['salemode'] = '0'
elif ns.get('price'):
ns_date_get['salemode'] = '2'
else:
ns_date_get['salemode'] = '1'
# res_date_li = await sor.R('saleprotocol', ns_date_get)
# if res_date_li:
# start_date, end_date = res_date_li[0]['start_date'], res_date_li[0]['end_date']
# else:
start_date, end_date = time.strftime('%Y-%m-%d %H:%M:%S'), '2099-12-31'
ns_new_saleprotocol = {
'id': uuid(),
'offer_orgid': ns.get('offer_orgid'),
'bid_orgid': ns.get('bid_orgid'),
'salemode': '0',
'start_date': start_date,
'end_date': end_date
}
if ns.get('discount'):
ns_new_saleprotocol['salemode'] = '0'
elif ns.get('price'):
ns_new_saleprotocol['salemode'] = '2'
else:
ns_new_saleprotocol['salemode'] = '1'
await sor.C('saleprotocol', ns_new_saleprotocol)
ns_new_product_salemode = {
'id': uuid(),
'protocolid': ns_new_saleprotocol['id'],
'providerid': ns.get('providerid'),
'productid': ns.get('productid'),
# 'discount': ns.get('discount')
}
if ns.get('discount'):
ns_new_product_salemode['discount'] = ns.get('discount')
elif ns.get('price'):
ns_new_product_salemode['price'] = ns.get('price')
await sor.C('product_salemode', ns_new_product_salemode)
return {
'status': True,
'msg': '修改折扣底价信息成功'
}
except Exception as e:
raise e
return {
'status': False,
'msg': '修改折扣底价信息失败'
}
async def xiaoshou_gai_zhekou_dijia(ns={}):
# 如果productid是列表 循环
productidss = ns.get('productid')
productids = ns.get('productid')
if ',' in productidss:
productidss = productidss.replace('\"', '').split(',')
else:
productidss = [productidss.replace('\"', '')]
for productid in productidss:
nss = {
"discount": ns.get('discount'),
"price": ns.get('price'),
"productid": productid.strip(),
"bid_orgid": ns.get('bid_orgid'),
"offer_orgid": ns.get('offer_orgid'),
"providerid": ''
}
res = await xiaoshou_gai_zhekou_dijia_detail(nss)
return res
ret = await xiaoshou_gai_zhekou_dijia(params_kw)
return ret