228 lines
11 KiB
Plaintext
228 lines
11 KiB
Plaintext
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 |