async def resellerDiscountAdd(ns={}): """ add reseller discount `id` VARCHAR(32) comment 'id', `resellerid` VARCHAR(32) comment '分销商id', `productid` VARCHAR(32) comment '产品id', `discount` double(18,2) comment '折扣率', `income_pzt` double(18,2) comment '收入百分比', `start_date` date comment '起效日期', `end_date` date comment '失效日期', :param ns: :return: """ ns['id'] = uuid() db = DBPools() async with db.sqlorContext('kboss') as sor: try: ns_exists_discount = { 'resellerid': ns.get('resellerid'), 'productid': ns.get('productid'), 'sort': ['start_date'] } ns['del_flg'] = 0 same_productid = await sor.R('rp_discount', ns_exists_discount) 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['end_date'] = start_date await sor.C('rp_discount', ns) break if index == len(same_productid) - 1 and insert_date > start_date: prd['end_date'] = ns.get('start_date') await sor.U('rp_discount', prd) ns['end_date'] = '9999-12-31' await sor.C('rp_discount', ns) break if start_date < insert_date < end_date: ns['end_date'] = prd.get('end_date') prd['end_date'] = ns.get('start_date') await sor.U('rp_discount', prd) await sor.C('rp_discount', ns) break if start_date == insert_date: return { "status": False, "msg": "Warning: The current date has already been configured" } if not same_productid: ns['end_date'] = '9999-12-31' await sor.C('rp_discount', ns) return { "status": True, "msg": "reseller discount add success" } except Exception as e: return { "status": False, "msg": "reseller discount add failed" } ret = await resellerDiscountAdd(params_kw) return ret