From 5fc1acfbf94a0da4fb6a5dc54ba0621fa77072d5 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Tue, 25 Feb 2025 13:29:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=80=E6=9C=89=E5=8F=91=E9=80=81=E6=B6=88?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E9=87=87=E7=94=A8=E5=BC=82=E6=AD=A5=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/order.py | 139 +++++++++++++++++++++++-------------- app/api/endpoints/user.py | 5 +- app/core/mpmessage.py | 17 +++++ 3 files changed, 106 insertions(+), 55 deletions(-) create mode 100644 app/core/mpmessage.py diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index 2d2e16e..565794d 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -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={ + 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={ + 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}" - } - ) + "thing5": order.cancel_reason + } + + 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( + data={ + "character_string13": order.orderid, + "thing3": deliveryman_user.nickname, + "time5" : CommonUtils.get_current_time() + } + + background_tasks.add_task( + sent_order_status_change_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}" - } + 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( + data={ + "character_string9": order.orderid, + "time8": CommonUtils.get_current_time(), + "thing3": deliveryman_user.nickname + } + + background_tasks.add_task( + sent_order_status_change_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}" - } + data=data ) + return success_response( message="接单成功", data=OrderInfo.model_validate(order) diff --git a/app/api/endpoints/user.py b/app/api/endpoints/user.py index a2f42b7..38187dc 100644 --- a/app/api/endpoints/user.py +++ b/app/api/endpoints/user.py @@ -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 diff --git a/app/core/mpmessage.py b/app/core/mpmessage.py new file mode 100644 index 0000000..53c5a6e --- /dev/null +++ b/app/core/mpmessage.py @@ -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}" + } + ) \ No newline at end of file