所有发送消息,采用异步方式

This commit is contained in:
aaron 2025-02-25 13:29:29 +08:00
parent c0ec42ca8a
commit 5fc1acfbf9
3 changed files with 106 additions and 55 deletions

View File

@ -39,6 +39,8 @@ from app.core.point_manager import PointManager
from datetime import time
from app.core.wecombot import WecomBot
from app.models.config import ConfigDB
from app.core.mpmessage import sent_order_status_change_message
from fastapi import BackgroundTasks
router = APIRouter()
@ -170,6 +172,7 @@ async def pre_order(
@router.post("", response_model=ResponseModel)
async def create_order(
background_tasks: BackgroundTasks,
order: OrderCreate,
db: Session = Depends(get_db),
current_user: UserDB = Depends(get_current_user)
@ -296,24 +299,29 @@ async def create_order(
# 发送企业微信消息
wecom_bot = WecomBot()
await wecom_bot.send_order_notification(db, db_order, OrderStatus.CREATED)
background_tasks.add_task(
wecom_bot.send_order_notification,
db,
db_order,
OrderStatus.CREATED
)
#发送订单创建成功的消息
if current_user.mp_openid:
await mp_client.send_template_message(
openid=current_user.mp_openid,
template_id=settings.DELIVERY_ORDER_CREATED_TEMPLATE_ID,
data={
"character_string13": db_order.orderid,
"time4": db_order.create_time.strftime("%Y-%m-%d %H:%M:%S"),
"thing10": db_order.address_customer_name,
"thing15": f"{db_order.address_community_name} {db_order.address_community_building_name} {db_order.address_detail}",
"thing9": db_order.status.status_text
}, miniprogram={
"appid": settings.WECHAT_APPID,
"path": f"/pages/order/detail/index?id={db_order.orderid}"
})
}
background_tasks.add_task(
sent_order_status_change_message,
openid=current_user.mp_openid,
template_id=settings.DELIVERY_ORDER_CREATED_TEMPLATE_ID,
data=data
)
# 超过晚上8点则使用明天送达的文案
if datetime.now() > datetime.now().replace(hour=settings.ORDER_SPLIT_TIME_HOUR, minute=0, second=0):
@ -643,6 +651,7 @@ async def get_user_orders(
@router.post("/{orderid}/user/cancel", response_model=ResponseModel)
async def cancel_order(
background_tasks: BackgroundTasks,
orderid: str,
db: Session = Depends(get_db),
current_user: UserDB = Depends(get_current_user)
@ -711,22 +720,26 @@ async def cancel_order(
# 发送企业微信消息
wecom_bot = WecomBot()
await wecom_bot.send_order_notification(db, order, OrderStatus.CANCELLED)
background_tasks.add_task(
wecom_bot.send_order_notification,
db,
order,
OrderStatus.CANCELLED
)
# 发送模板消息
if current_user.mp_openid:
await mp_client.send_template_message(
openid=current_user.mp_openid,
template_id=settings.DELIVERY_ORDER_CANCELLED_TEMPLATE_ID,
data={
"character_string1": order.orderid,
"time19": CommonUtils.get_current_time(),
"thing5": "用户主动取消订单"
},
miniprogram={
"appid": settings.WECHAT_APPID,
"path": f"/pages/order/detail/index?id={order.orderid}"
}
background_tasks.add_task(
sent_order_status_change_message,
openid=current_user.mp_openid,
template_id=settings.DELIVERY_ORDER_CANCELLED_TEMPLATE_ID,
data=data
)
return success_response(
@ -850,6 +863,7 @@ async def get_deliveryman_orders(
@router.post("/{orderid}/deliveryman/cancel", response_model=ResponseModel)
async def deliveryman_cancel_order(
background_tasks: BackgroundTasks,
orderid: str,
cancel_data: OrderCancel,
db: Session = Depends(get_db),
@ -917,27 +931,34 @@ async def deliveryman_cancel_order(
# 发送企业微信消息
wecom_bot = WecomBot()
await wecom_bot.send_order_notification(db, order, OrderStatus.CANCELLED)
background_tasks.add_task(
wecom_bot.send_order_notification,
db,
order,
OrderStatus.CANCELLED
)
# 发送模板消息
if order.userid:
order_user = db.query(UserDB).filter(
UserDB.userid == order.userid
).first()
if order_user.mp_openid:
await mp_client.send_template_message(
openid=order_user.mp_openid,
template_id=settings.DELIVERY_ORDER_CANCELLED_TEMPLATE_ID,
data={
"character_string1": order.orderid,
"time19": CommonUtils.get_current_time(),
"thing5": order.cancel_reason
},
miniprogram={
"appid": settings.WECHAT_APPID,
"path": f"/pages/order/detail/index?id={order.orderid}"
}
background_tasks.add_task(
sent_order_status_change_message,
openid=order_user.mp_openid,
template_id=settings.DELIVERY_ORDER_CANCELLED_TEMPLATE_ID,
data=data
)
return success_response(
message="订单取消成功",
data=OrderInfo.model_validate(order)
@ -948,6 +969,7 @@ async def deliveryman_cancel_order(
@router.post("/{orderid}/deliveryman/complete", response_model=ResponseModel)
async def complete_order(
background_tasks: BackgroundTasks,
orderid: str,
complete_data: OrderComplete,
db: Session = Depends(get_db),
@ -997,7 +1019,12 @@ async def complete_order(
# 发送企业微信消息
wecom_bot = WecomBot()
await wecom_bot.send_order_notification(db, order, OrderStatus.COMPLETED)
background_tasks.add_task(
wecom_bot.send_order_notification,
db,
order,
OrderStatus.COMPLETED
)
# 发送模板消息
if order.userid:
@ -1009,18 +1036,17 @@ async def complete_order(
UserDB.userid == order.deliveryman_user_id
).first()
await mp_client.send_template_message(
openid=order_user.mp_openid,
template_id=settings.DELIVERY_ORDER_COMPLETED_TEMPLATE_ID,
data={
"character_string13": order.orderid,
"thing3": deliveryman_user.nickname,
"time5" : CommonUtils.get_current_time()
},
miniprogram={
"appid": settings.WECHAT_APPID,
"path": f"/pages/order/detail/index?id={order.orderid}"
}
background_tasks.add_task(
sent_order_status_change_message,
openid=order_user.mp_openid,
template_id=settings.DELIVERY_ORDER_COMPLETED_TEMPLATE_ID,
data=data
)
return success_response(
@ -1033,6 +1059,7 @@ async def complete_order(
@router.post("/{orderid}/deliveryman/receive", response_model=ResponseModel)
async def receive_order(
background_tasks: BackgroundTasks,
orderid: str,
db: Session = Depends(get_db),
deliveryman: UserDB = Depends(get_deliveryman_user)
@ -1069,7 +1096,13 @@ async def receive_order(
# 发送企业微信消息
wecom_bot = WecomBot()
await wecom_bot.send_order_notification(db, order, OrderStatus.RECEIVED)
background_tasks.add_task(
wecom_bot.send_order_notification,
db,
order,
OrderStatus.RECEIVED
)
# 发送模板消息
if order.userid:
@ -1081,19 +1114,19 @@ async def receive_order(
UserDB.userid == order.deliveryman_user_id
).first()
await mp_client.send_template_message(
openid=order_user.mp_openid,
template_id=settings.DELIVERY_ORDER_RECEIVED_TEMPLATE_ID,
data={
"character_string9": order.orderid,
"time8": CommonUtils.get_current_time(),
"thing3": deliveryman_user.nickname
},
miniprogram={
"appid": settings.WECHAT_APPID,
"path": f"/pages/order/detail/index?id={order.orderid}"
}
background_tasks.add_task(
sent_order_status_change_message,
openid=order_user.mp_openid,
template_id=settings.DELIVERY_ORDER_RECEIVED_TEMPLATE_ID,
data=data
)
return success_response(
message="接单成功",
data=OrderInfo.model_validate(order)

View File

@ -24,7 +24,7 @@ from app.core.qcloud import qcloud_manager
from app.models.merchant import MerchantDB
from app.models.address import AddressDB, AddressInfo
from app.models.user import UserUpdateRoles, UserUpdateDeliveryCommissionRate
from app.models.order import ShippingOrderDB
from app.models.order import ShippingOrderDB, OrderStatus
router = APIRouter()
@ -368,7 +368,8 @@ async def get_referral_users(
u = ReferralUserInfo.model_validate(user).model_dump()
order_count = db.query(ShippingOrderDB).filter(
ShippingOrderDB.userid == user.userid
ShippingOrderDB.userid == user.userid,
ShippingOrderDB.status == OrderStatus.COMPLETED
).count()
u['is_place_order'] = order_count > 0

17
app/core/mpmessage.py Normal file
View File

@ -0,0 +1,17 @@
from app.core.config import settings
from app.core.mpclient import mp_client
from app.core.config import settings
# 发送订单状态改变消息
async def sent_order_status_change_message(openid: str, template_id: str, data: dict):
await mp_client.send_template_message(
openid=openid,
template_id=template_id,
data=data,
miniprogram={
"appid": settings.WECHAT_APPID,
"path": f"/pages/order/detail/index?id={data.orderid}"
}
)