async def RebateAdd(ns={}): """ add reseller rebate `id` VARCHAR(32) comment 'id', `resellerid` VARCHAR(32) comment '分销商id', `productid` VARCHAR(32) comment '产品id', `level` int comment '级别', `sale_amount` double(18,2) comment '最低销售额', `rebate_rate` double(18,2) comment '返佣率', `start_date` date comment '起效日期', `end_date` date comment '失效日期', :param ns: :return: """ await get_user() if not ns: return { "status": False, "msg": "rebate data is empty, please check" } if not ns.get('end_date'): ns['end_date'] = '9999-12-31' ns_ctl = { 'id': uuid(), 'resellerid': ns.get('resellerid'), 'productid': ns.get('productid'), 'rebateid': uuid(), 'start_date': ns.get('start_date'), 'end_date': ns.get('end_date'), } db = DBPools() async with db.sqlorContext('kboss') as sor: try: if ns.get('resellerid') and ns.get('productid'): ns_exists_rebate = { 'resellerid': ns.get('resellerid'), 'productid': ns.get('productid'), 'sort': ['start_date'], 'del_flg': '0' } ns['del_flg'] = 0 same_productid = await sor.R('rp_rebate_ctl', ns_exists_rebate) insert_date = datetime.datetime.strptime(ns['start_date'], '%Y-%m-%d').date() for index, prd in enumerate(same_productid): start_date = datetime.datetime.strptime(prd['start_date'], '%Y-%m-%d').date() end_date = datetime.datetime.strptime(prd['end_date'], '%Y-%m-%d').date() if index == 0 and insert_date < start_date: ns_ctl['end_date'] = start_date await sor.C('rp_rebate_ctl', ns_ctl) break if index == len(same_productid) - 1 and insert_date > start_date: prd['end_date'] = ns_ctl.get('start_date') await sor.U('rp_rebate_ctl', prd) ns_ctl['end_date'] = '9999-12-31' await sor.C('rp_rebate_ctl', ns_ctl) break if start_date < insert_date < end_date: ns_ctl['end_date'] = prd.get('end_date') prd['end_date'] = ns.get('start_date') await sor.U('rp_rebate_ctl', prd) await sor.C('rp_rebate_ctl', ns_ctl) break if start_date == insert_date: return { "status": False, "msg": "Warning: The current date has already been configured" } if not same_productid: ns_ctl['end_date'] = '9999-12-31' await sor.C('rp_rebate_ctl', ns_ctl) return { "status": True, "msg": "rebate ctl add success" } elif ns.get('rebateid'): ns['id'] = uuid() await sor.C('rp_rebate', ns) return { 'status': True, 'msg': 'rebate add success' } except Exception as e: raise e return { "status": False, "msg": "rebate add failed" } ret = await RebateAdd(params_kw) return ret