kboss/b/zj/getOrder.dspy
2025-07-16 14:27:17 +08:00

150 lines
6.3 KiB
Plaintext

async def getOrder(nsss={}):
ns = {
'ak': 'c752863753f8',
'sk': 'c6efdbd682084a2f96e7500e5a535449',
'appId': 'cdz-server',
'userid': 'j6c6kebTT-HaxtTBto_UF',
# 'userid': 'eCyIfgqLT1drXwj3kQZiC',
# 'userid': 'rtfexXZIceA2UsaFYY9u8',
"supId": "99",
"page": "1",
"limit": "1000",
"beginTime": "2023-02-14",
"endTime": "2024-02-15"
}
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:
# find uin from zj_user
orgid_li = await sor.R('users', {'id': await get_user()})
orgid = orgid_li[0].get('orgid') if orgid_li else ''
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:
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)
# 计算折扣后的价格
kyy_discount_sql = """select * from cp_discount where customerid = ${customerid}$ and
productid = ${productid}$ and CURRENT_DATE <= end_date and CURRENT_DATE >= start_date"""
kyy_discount_li = await sor.sqlExe(kyy_discount_sql, {'customerid': orgid, 'productid': order.get('productCode')})
kyy_discount = kyy_discount_li[0] if kyy_discount_li else {}
real_discount = float(kyy_discount.get('discount')) if kyy_discount.get('discount') else 1.00
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': 'zhongjin',
'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
else:
return {
'status': False,
'msg': 'get order failed'
}
ret = await getOrder(params_kw)
return ret