update.
This commit is contained in:
parent
c713ec9a50
commit
dac4a1f32f
@ -29,6 +29,7 @@ from app.core.qcloud import qcloud_manager
|
||||
from app.core.imageprocessor import process_image, ImageFormat
|
||||
from starlette.datastructures import Headers
|
||||
from app.models.merchant_order import MerchantOrderVerify
|
||||
from app.core.point_manager import PointManager, PointRecordType
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@ -205,6 +206,18 @@ async def verify_order(
|
||||
order.MerchantOrderDB.verify_user_id = merchant_user.userid
|
||||
order.MerchantOrderDB.status = MerchantOrderStatus.VERIFIED
|
||||
|
||||
|
||||
# 如果有积分奖励,赠送积分
|
||||
if order.MerchantProductDB.gift_points > 0:
|
||||
point_manager = PointManager(db)
|
||||
point_manager.add_points(
|
||||
order.MerchantOrderDB.user_id,
|
||||
order.MerchantProductDB.gift_points,
|
||||
PointRecordType.CONSUME_RETURN,
|
||||
f"团购券核销奖励",
|
||||
order.MerchantOrderDB.order_id
|
||||
)
|
||||
|
||||
# 对商家进行结算
|
||||
account_manager = AccountManager(db)
|
||||
settlement_amount = float(order.MerchantProductDB.settlement_amount)
|
||||
@ -245,6 +258,14 @@ async def apply_refund(
|
||||
order.status = MerchantOrderStatus.REFUNDING
|
||||
|
||||
try:
|
||||
# 调用微信支付退款
|
||||
wechat = WeChatClient()
|
||||
await wechat.apply_refund(
|
||||
order_id=order.order_id,
|
||||
total_amount=int(float(order.pay_amount) * 100), # 转换为分
|
||||
reason="用户申请退款"
|
||||
)
|
||||
|
||||
db.commit()
|
||||
return success_response(
|
||||
message="退款申请成功",
|
||||
@ -254,50 +275,6 @@ async def apply_refund(
|
||||
db.rollback()
|
||||
return error_response(code=500, message=f"申请退款失败: {str(e)}")
|
||||
|
||||
@router.post("/{order_id}/refund/confirm", response_model=ResponseModel)
|
||||
async def confirm_refund(
|
||||
order_id: str,
|
||||
db: Session = Depends(get_db),
|
||||
current_user: UserDB = Depends(get_admin_user)
|
||||
):
|
||||
"""确认退款(管理员)"""
|
||||
# 查询订单和用户信息
|
||||
order = db.query(MerchantOrderDB).join(
|
||||
UserDB,
|
||||
MerchantOrderDB.user_id == UserDB.userid
|
||||
).filter(
|
||||
MerchantOrderDB.order_id == order_id,
|
||||
MerchantOrderDB.status == MerchantOrderStatus.REFUNDING # 只能确认退款中的订单
|
||||
).first()
|
||||
|
||||
if not order:
|
||||
return error_response(code=404, message="订单不存在或状态不正确")
|
||||
|
||||
try:
|
||||
## 如果订单有支付金额,则发起微信退款
|
||||
if order.pay_amount > 0:
|
||||
# 退款
|
||||
wechat = WeChatClient()
|
||||
try:
|
||||
await wechat.apply_refund(
|
||||
order_id=order.order_id,
|
||||
total_amount=int(float(order.pay_amount) * 100), # 转换为分
|
||||
reason="用户申请退款"
|
||||
)
|
||||
except Exception as e:
|
||||
return error_response(code=500, message=f"退款失败: {str(e)}")
|
||||
else:
|
||||
# 更新状态为已退款
|
||||
order.status = MerchantOrderStatus.REFUNDED
|
||||
db.commit()
|
||||
|
||||
return success_response(
|
||||
message="退款确认成功",
|
||||
data=MerchantOrderInfo.model_validate(order)
|
||||
)
|
||||
except Exception as e:
|
||||
db.rollback()
|
||||
return error_response(code=500, message=f"确认退款失败: {str(e)}")
|
||||
|
||||
@router.get("/{order_id}", response_model=ResponseModel)
|
||||
async def get_order_detail(
|
||||
@ -398,51 +375,6 @@ async def calculate_order_price(
|
||||
"amount": product.sale_price
|
||||
})
|
||||
|
||||
class RefundRequest(BaseModel):
|
||||
"""退款请求"""
|
||||
order_id: str
|
||||
|
||||
@router.post("/refund/approve", response_model=ResponseModel)
|
||||
async def refund_merchant_order(
|
||||
request: RefundRequest,
|
||||
db: Session = Depends(get_db),
|
||||
admin_user: UserDB = Depends(get_admin_user)
|
||||
):
|
||||
"""
|
||||
审核通过退款申请(管理员接口)
|
||||
|
||||
- 检查订单是否处于退款中状态
|
||||
- 调用微信支付退款接口
|
||||
- 退款状态由微信支付回调更新
|
||||
"""
|
||||
try:
|
||||
# 查询订单
|
||||
order = db.query(MerchantOrderDB).filter(
|
||||
MerchantOrderDB.order_id == request.order_id,
|
||||
MerchantOrderDB.status == MerchantOrderStatus.REFUNDING, # 只能退款申请中的订单
|
||||
MerchantOrderDB.pay_status == True # 已支付的订单
|
||||
).first()
|
||||
|
||||
if not order:
|
||||
return error_response(code=404, message="订单不存在或状态不正确")
|
||||
|
||||
# 调用微信支付退款
|
||||
wechat = WeChatClient()
|
||||
try:
|
||||
await wechat.apply_refund(
|
||||
order_id=order.order_id,
|
||||
total_amount=int(float(order.pay_amount) * 100), # 转换为分
|
||||
reason="用户申请退款"
|
||||
)
|
||||
except Exception as e:
|
||||
return error_response(code=500, message=f"申请退款失败: {str(e)}")
|
||||
|
||||
db.commit()
|
||||
return success_response(message="退款申请成功")
|
||||
|
||||
except Exception as e:
|
||||
db.rollback()
|
||||
return error_response(code=500, message=f"处理退款失败: {str(e)}")
|
||||
|
||||
@router.get("/{order_id}/verify-qrcode", response_model=ResponseModel)
|
||||
async def get_order_qrcode(
|
||||
|
||||
@ -42,7 +42,6 @@ class MerchantOrderCreate(BaseModel):
|
||||
|
||||
class MerchantOrderVerify(BaseModel):
|
||||
verify_code: str
|
||||
|
||||
class MerchantOrderInfo(BaseModel):
|
||||
id: int
|
||||
order_id: str
|
||||
|
||||
Loading…
Reference in New Issue
Block a user