update
This commit is contained in:
parent
69e16d04c1
commit
1ea7d64e73
@ -16,6 +16,7 @@ from app.models.order import (
|
||||
OrderPriceResult,
|
||||
RefundOrderAmountRequest
|
||||
)
|
||||
from app.models.wechat_payment import WechatPaymentRecordDB
|
||||
from app.models.order_additional_fee import OrderAdditionalFeeDB, OrderAdditionalFeeInfo, AdditionalFeeResult
|
||||
from app.models.database import get_db
|
||||
from app.api.deps import get_current_user, get_deliveryman_user, get_admin_user
|
||||
@ -483,6 +484,23 @@ async def get_order_detail(
|
||||
if not order:
|
||||
return error_response(code=404, message="订单不存在")
|
||||
|
||||
# 检查订单是否已经支付
|
||||
if order.status == OrderStatus.UNPAID:
|
||||
payment = db.query(WechatPaymentRecordDB).filter(
|
||||
WechatPaymentRecordDB.out_trade_no == orderid
|
||||
).first()
|
||||
# 如果订单已支付,则更新订单状态
|
||||
if payment and payment.trade_state == "SUCCESS":
|
||||
if order.deliveryman_user_id:
|
||||
order.status = OrderStatus.COMPLETED
|
||||
else:
|
||||
order.status = OrderStatus.CREATED
|
||||
order.pay_status = True
|
||||
order.transaction_id = payment.transaction_id
|
||||
order.pay_time = payment.success_time
|
||||
db.commit()
|
||||
db.refresh(order)
|
||||
|
||||
# 如果有配送员 id,则获取配送员信息
|
||||
if order.deliveryman_user_id:
|
||||
deliveryman_user = db.query(UserDB).filter(
|
||||
|
||||
@ -215,15 +215,17 @@ async def payment_notify(
|
||||
# 获取订单信息
|
||||
out_trade_no = data.get("out_trade_no")
|
||||
transaction_id = data.get("transaction_id")
|
||||
trade_state = data.get("trade_state")
|
||||
trade_state_desc = data.get("trade_state_desc")
|
||||
success_time = data.get("success_time")
|
||||
|
||||
logger.info(f"out_trade_no: {out_trade_no}")
|
||||
logger.info(f"transaction_id: {transaction_id}")
|
||||
logger.info(f"trade_state_desc: {trade_state_desc}")
|
||||
logger.info(f"trade_state: {trade_state}")
|
||||
logger.info(f"success_time: {success_time}")
|
||||
|
||||
if not all([out_trade_no, transaction_id, trade_state_desc]) or trade_state_desc != "支付成功":
|
||||
if not all([out_trade_no, transaction_id, trade_state])or trade_state != "SUCCESS":
|
||||
return error_response(code=400, message="缺少必要的订单信息或支付未成功")
|
||||
|
||||
# 判断订单类型并处理
|
||||
@ -236,12 +238,18 @@ async def payment_notify(
|
||||
if not order:
|
||||
return error_response(code=404, message="订单不存在")
|
||||
|
||||
if trade_state_desc == "支付成功":
|
||||
if trade_state == "SUCCESS":
|
||||
# 更新订单状态
|
||||
if order.deliveryman_user_id:
|
||||
order.status = OrderStatus.COMPLETED # 支付成功后状态为已完成
|
||||
else:
|
||||
order.status = OrderStatus.CREATED # 支付成功后状态为已创建
|
||||
order.pay_status = True
|
||||
order.completed_time = datetime.now()
|
||||
order.transaction_id = transaction_id
|
||||
order.pay_time = datetime.fromisoformat(success_time.replace('Z', '+00:00'))
|
||||
db.commit()
|
||||
db.refresh(order)
|
||||
|
||||
# 发送企业微信消息
|
||||
if order.status == OrderStatus.CREATED:
|
||||
@ -253,11 +261,6 @@ async def payment_notify(
|
||||
OrderStatus.CREATED
|
||||
)
|
||||
|
||||
order.pay_status = True
|
||||
order.completed_time = datetime.now()
|
||||
order.transaction_id = transaction_id
|
||||
order.pay_time = datetime.fromisoformat(success_time.replace('Z', '+00:00'))
|
||||
|
||||
elif out_trade_no.startswith("A"): # 加价订单
|
||||
additon_fee_order = db.query(OrderAdditionalFeeDB).filter(
|
||||
OrderAdditionalFeeDB.fee_order_id == out_trade_no
|
||||
@ -283,7 +286,8 @@ async def payment_notify(
|
||||
|
||||
# 重新计算配送员配送费用
|
||||
order.delivery_share = calculate_delivery_share(order, db)
|
||||
|
||||
db.commit()
|
||||
db.refresh(order)
|
||||
|
||||
elif out_trade_no.startswith("M"): # 商家商品订单
|
||||
# 查询商户订单
|
||||
@ -313,6 +317,8 @@ async def payment_notify(
|
||||
order.pay_status = True
|
||||
order.transaction_id = transaction_id
|
||||
order.pay_time = datetime.fromisoformat(success_time.replace('Z', '+00:00'))
|
||||
db.commit()
|
||||
db.refresh(order)
|
||||
|
||||
elif out_trade_no.startswith("P"): # 商家在线买单
|
||||
order = db.query(MerchantPayOrderDB,MerchantDB).filter(
|
||||
@ -339,6 +345,8 @@ async def payment_notify(
|
||||
order.MerchantPayOrderDB.status = MerchantPayOrderStatus.PAID
|
||||
order.MerchantPayOrderDB.transaction_id = transaction_id
|
||||
order.MerchantPayOrderDB.pay_time = datetime.fromisoformat(success_time.replace('Z', '+00:00'))
|
||||
db.commit()
|
||||
db.refresh(order)
|
||||
|
||||
# 对商家进行分账计算
|
||||
account_manager = AccountManager(db)
|
||||
@ -360,7 +368,7 @@ async def payment_notify(
|
||||
payment_record = WechatPaymentRecordDB(
|
||||
out_trade_no=out_trade_no,
|
||||
transaction_id=transaction_id,
|
||||
trade_state=data.get("trade_state"),
|
||||
trade_state=trade_state,
|
||||
trade_state_desc=trade_state_desc,
|
||||
success_time=datetime.fromisoformat(success_time) if success_time else None,
|
||||
total_amount=float(data.get("amount", {}).get("total", 0)) / 100,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user