async def discount_guanli_jia(ns={}): """ 折扣管理加 :return: """ # 折扣不能为空 discount_ = ns.get('discount') # if (not discount_) or (float(discount_) == 0): # return { # 'status': False, # 'msg': '折扣不能为空' # } user_orgid = ns.get('customerid') db = DBPools() async with db.sqlorContext('kboss') as sor: try: if ns.get('sor'): sor = ns.get('sor') # 首先查找协议是否已经存在 ns_discount = { 'offer_orgid': ns.get('bid_orgid'), 'bid_orgid': '*', 'salemode': '0', 'del_flg': '0' } if user_orgid: ns_discount['bid_orgid'] = user_orgid discount_res_li = await sor.R('saleprotocol', ns_discount) if discount_res_li: protocolid = discount_res_li[0]['id'] else: # 协议表不存在 就创建 # 获取这个供应商给机构签的协议起始时间 qishi_time_li = await sor.R('saleprotocol', {'offer_orgid': ns.get('providerid'), 'bid_orgid': ns.get('bid_orgid')}) if qishi_time_li: start_time, end_time = qishi_time_li[0]['start_date'], qishi_time_li[0]['end_date'] else: start_time, end_time = '2010-10-01', '2099-10-01' ns_zhubiao = { 'id': uuid(), 'offer_orgid': ns.get('bid_orgid'), 'bid_orgid': '*', 'salemode': '0', 'start_date': '2010-10-01', 'end_date': '2099-10-01' } if user_orgid: ns_zhubiao['bid_orgid'] = user_orgid await sor.C('saleprotocol', ns_zhubiao) protocolid = ns_zhubiao['id'] # 如果productid是列表 循环 productidss = ns.get('productid') if ',' in productidss: productidss = productidss.replace('\"', '').split(',') else: productidss = [productidss.replace('\"', '')] # 如果是中金 额外添加产品id * # 获取中金id jncs_li = await sor.R('organization', {'orgname': '中金超算', 'del_flg': '0'}) jscs_id = jncs_li[0].get('id') if jncs_li else None if ns.get('providerid') == jscs_id: productidss.append('*') # 给某个供应商设置统一折扣 没有传productid if not ns.get('productid'): provider_id_prd_li = await sor.R('product', {'providerid': ns.get('providerid'), 'del_flg': '0'}) productidss = [item_id.get('id') for item_id in provider_id_prd_li] # 按产品倒查who is provider 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('bid_orgid'), ns.get('providerid'), productidss[0]) 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('bid_orgid'), 'salemode': '0', '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 for productid in productidss: # 判断是否已经存在 ns_zibiao_exist = { 'protocolid': protocolid, 'providerid': ns.get('providerid'), 'productid': productid, 'del_flg': '0' } # 查找供应商给的折扣 # if provider_protocol_id: # provider_discount_find = { # 'protocolid': provider_protocol_id, # 'providerid': ns.get('providerid'), # 'productid': productid, # 'del_flg': '0' # } # provider_discount_li = await sor.R('product_salemode', provider_discount_find) # if provider_discount_li: # provider_discount = provider_discount_li[0]['discount'] # if float(provider_discount) > float(ns.get('discount')): # return { # 'status': False, # 'msg': '客户折扣不能低于供应商折扣' # } res_exist_li = await sor.R('product_salemode', ns_zibiao_exist) if res_exist_li: zi_biao_id = res_exist_li[0]['id'] ns_zibiao_zhekou = { 'id': zi_biao_id, 'protocolid': protocolid, 'providerid': ns.get('providerid'), 'productid': productid, 'discount': ns.get('discount') } await sor.U('product_salemode', ns_zibiao_zhekou) else: # 根据protocolid创建折扣 ns_zibiao_zhekou = { 'id': uuid(), 'protocolid': protocolid, 'providerid': ns.get('providerid'), 'productid': productid, 'discount': ns.get('discount') } await sor.C('product_salemode', ns_zibiao_zhekou) return { 'status': True, 'msg': '创建折扣成功' } except Exception as e: raise e return { 'status': False, 'msg': '创建折扣失败' } ret = await discount_guanli_jia(params_kw) return ret