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 = json.loads(productidss) else: productidss = [ns.get('productid')] # 如果是中金 额外添加产品id * # 获取中金id jncs_li = await sor.R('organization', {'orgname': '中金超算', 'del_flg': '0'}) jscs_id = jncs_li[0].get('id') 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'), 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('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