# Upsert折扣明细:对比old_discount和discount,不同才更新 # 参数: discountid, productid, discount, old_discount, detail_id(可选) result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid', 'type': 'error'}} try: discountid = params_kw.get('discountid') productid = params_kw.get('productid') discount_val = params_kw.get('discount') old_discount = params_kw.get('old_discount') detail_id = params_kw.get('detail_id') if not discountid or not productid: raise Exception('缺少必要参数: discountid, productid') # 对比新旧值,相同则跳过 if discount_val is not None and old_discount is not None: try: if float(discount_val) == float(old_discount): result = {'widgettype': 'Message', 'options': {'title': 'Success', 'message': '折扣未变化', 'type': 'success'}} return result except: pass user_orgid = await get_userorgid() dbname = get_module_dbname('discount') # discount为0或空时,如果已有记录则删除 if not discount_val or float(discount_val) == 0: if detail_id: async with DBPools().sqlorContext(dbname) as sor: await sor.D('discount_detail', {'id': detail_id}) result = {'widgettype': 'Message', 'options': {'title': 'Success', 'message': '折扣已清除', 'type': 'success'}} else: result = {'widgettype': 'Message', 'options': {'title': 'Success', 'message': 'ok', 'type': 'success'}} return result async with DBPools().sqlorContext(dbname) as sor: if detail_id: await sor.U('discount_detail', { 'id': detail_id, 'discount': float(discount_val) }) else: await sor.C('discount_detail', { 'id': getID(), 'discountid': discountid, 'resellerid': user_orgid, 'prodtypeid': None, 'productid': productid, 'discount': float(discount_val) }) result = {'widgettype': 'Message', 'options': {'title': 'Success', 'message': '折扣保存成功', 'type': 'success'}} except Exception as e: debug(f'save_discount error: {format_exc()}') result['options'] = {'title': 'Error', 'message': f'保存失败: {str(e)}', 'type': 'error'} return result