async def zj_get_order(nss={}): """ if nss['user_id'] can get single person order passing parameters: beginTime, endTime, user_id :param nss: 'beginTime': '2023-08-07' / 'endTime': '2023-08-07' :return: """ # logger = logging.getLogger('job_info') # logging.basicConfig(level=logging.INFO, # format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # datefmt='%Y-%m-%d %H:%M:%S', # filename='zj_order_scheduler.log', # filemode='a') # nss = { # 'orgid': 'R_dUvCVA-mzv8qqx5vdd8', # 'beginTime': '2023-08-07', # 'endTime': '2023-08-07' # } # if not begin and end time, get current day if not nss.get('beginTime'): nss['beginTime'] = time.strftime('%Y-%m-%d') if not nss.get('endTime'): nss['endTime'] = time.strftime('%Y-%m-%d') ns = { 'ak': 'c752863753f8', 'sk': 'c6efdbd682084a2f96e7500e5a535449', 'appId': 'cdz-server', # 'userid': 'sa-9_B-VjlnhaUzAzUvZt', 'userid': nss.get('user_id'), "supId": "99", "page": "1", "limit": "1000", # "beginTime": "2023-08-01", "beginTime": nss.get('beginTime'), # "endTime": "2023-08-07" "endTime": nss.get('endTime') } ak = ns.get('ak') sk = ns.get('sk') appId = ns.get('appId') if not (ak and sk and appId): return { "code":"1", "msg":"ak or sk or appId is None" } timestamp = str(int(time.time() * 1000)) token = str(uuid()) sign = sk + appId + token + timestamp md5_object = hashlib.md5() md5_object.update(sign.encode()) sign = md5_object.hexdigest() db = DBPools() async with db.sqlorContext('kboss') as sor: # 获取中金id jncs_li = await sor.R('organization', {'orgname': '中金超算', 'del_flg': '0'}) jscs_id = jncs_li[0].get('id') # get sync already user users_li = await sor.R('zj_users', {'sync_status': 1, 'del_flg': '0'}) # filter single person if nss.get('user_id'): users_li = [1] for user in users_li: nss['orgid'] = user.get('orgid') # find uin from zj_user if nss.get('orgid'): orgid = nss.get('orgid') else: orgid_li = await sor.R('users', {'id': await get_user()}) orgid = orgid_li[0].get('orgid') if orgid_li else '' print("get orgid: %s" % orgid) # 这个人所在的销售机构id parent_find_li = await sor.R('organization', {'id': orgid}) parent_id = parent_find_li[0].get('parentid') if parent_find_li else '' # find uid uin_li = await sor.R('zj_users', {'orgid': orgid}) uin = uin_li[0].get('thirdid') if uin_li else '' if not (orgid and uin): return { 'status': False, 'msg': 'get order failed, orgid or uin is empty' } url = 'http://101.36.139.188:8888/cdz-admin/zjapi/v1/order/list' header = { 'content-type': 'application/json', 'appId': appId, 'ak': ak, 'timestamp': timestamp, 'token': token, 'sign': sign } data = { "supId": "99", "uin": uin.strip(), "page": ns.get('page'), "limit": ns.get('limit') or '1000', "beginTime": ns.get('beginTime'), "endTime": ns.get('endTime') } res = requests.post(url=url, headers=header, json=data) res_data = json.loads(res.text) code = json.loads(res.text).get('code') if code != 200: return res_data else: data_list = res_data.get('data').get('list') if res_data.get('data') else [] # get all order id orders = await sor.R('zj_order', {}) orderid_list = [ors.get('orderid') for ors in orders] if data_list: try: for order in data_list: # filter by orderid existid = order.get('orderId') if existid in orderid_list: continue order['id'] = uuid() order['customerid'] = orgid lowercase_dict = {key.lower(): value for key, value in order.items()} # add zj_order await sor.C('zj_order', lowercase_dict) # 计算折扣后的价格 # 获取针对个人的折扣配置 real_discount = 1.0 person_discount_sql = """select * from saleprotocol where offer_orgid = '%s' and bid_orgid = '%s' and salemode = '0' and del_flg = '0' and CURRENT_DATE <= end_date and CURRENT_DATE >= start_date""" % (parent_id, orgid) tongyi_discount_sql = """select * from saleprotocol where offer_orgid = '%s' and bid_orgid = '*' and salemode = '0' and del_flg = '0' and CURRENT_DATE <= end_date and CURRENT_DATE >= start_date""" % parent_id # 没有个人配置 获取中金产品统一配置折扣 for sql_detail in [person_discount_sql, tongyi_discount_sql]: person_discount_li = await sor.sqlExe(sql_detail, {}) for person_discount in person_discount_li: protocolid = person_discount['id'] xieyi_zi_search_li = await sor.R('product_salemode', {'protocolid': protocolid, 'del_flg': '0'}) for xieyi_zi in xieyi_zi_search_li: # 协议会同时存在两个产品 一个是正常产品id 另外一个是* # *会存在 此处过滤 不会影响折扣设置 if xieyi_zi['productid'] == '*': continue provider_zi_id = xieyi_zi['providerid'] zi_discount = xieyi_zi['discount'] if provider_zi_id == jscs_id: # 判断产品是否存在 有可能在产品表已经删除 prd_res_exists_li = await sor.R('product', {'id': xieyi_zi['productid'], 'del_flg': '0'}) if not prd_res_exists_li: continue real_discount = float(zi_discount) break if real_discount != 1.0: break realcost = float(order.get('realTotalCost')) if order.get('realTotalCost') else 0 # if not realcost: # raise ValueError("bill realcost is empty") amount = float((real_discount * realcost) / 100) action = order.get('action') if '退款' in action or ('refund' in action): business_op = 'BUY_REVERSE' else: business_op = 'BUY' order_mode = order.get('payMode') if order_mode == 'postPay': order_status = 4 else: if order.get('action') == 'purchase': order_status = 0 else: order_status = 0 # add bz_order nss_bz_order = { 'id': uuid(), 'customerid': orgid, 'order_date': order.get('createTime'), 'order_status': order_status, 'business_op': business_op, 'amount': amount, # provider_orderid same as the inserted order id 'provider_orderid': order['id'], } # add data to bz_order await sor.C('bz_order', nss_bz_order) # add specificdata ns_specificdata = { 'id': uuid(), 'productid': order.get('productCode'), 'spec_data': order.get('productInfo'), 'create_date': order.get('createTime') } await sor.C('specificdata', ns_specificdata) ns_customer_goods = { 'id': uuid(), 'customerid': orgid, 'providerrid': jscs_id, 'productname': order.get('productName'), 'productdesc': order.get('productName'), 'productid': order.get('productCode'), 'specdataid': ns_specificdata['id'], 'orderid': order.get('orderId'), # 'start_date': '0000-00-00', # TODO 订单起始时间都暂时没有 # 'expire_date': '0000-00-00', # TODO 如果是核时计算 是否有起始日期 } # add data to customer_goods await sor.C('customer_goods', ns_customer_goods) # return res_data except Exception as e: raise e else: print('orgid: %s, get order empty' % orgid) print('get order success') return { 'status': True, 'msg': 'get order success' } ret = await zj_get_order(params_kw) return ret