所有发送消息,采用异步方式
This commit is contained in:
parent
c0ec42ca8a
commit
5fc1acfbf9
@ -39,6 +39,8 @@ from app.core.point_manager import PointManager
|
|||||||
from datetime import time
|
from datetime import time
|
||||||
from app.core.wecombot import WecomBot
|
from app.core.wecombot import WecomBot
|
||||||
from app.models.config import ConfigDB
|
from app.models.config import ConfigDB
|
||||||
|
from app.core.mpmessage import sent_order_status_change_message
|
||||||
|
from fastapi import BackgroundTasks
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -170,6 +172,7 @@ async def pre_order(
|
|||||||
|
|
||||||
@router.post("", response_model=ResponseModel)
|
@router.post("", response_model=ResponseModel)
|
||||||
async def create_order(
|
async def create_order(
|
||||||
|
background_tasks: BackgroundTasks,
|
||||||
order: OrderCreate,
|
order: OrderCreate,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
current_user: UserDB = Depends(get_current_user)
|
current_user: UserDB = Depends(get_current_user)
|
||||||
@ -296,24 +299,29 @@ async def create_order(
|
|||||||
|
|
||||||
# 发送企业微信消息
|
# 发送企业微信消息
|
||||||
wecom_bot = WecomBot()
|
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:
|
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,
|
"character_string13": db_order.orderid,
|
||||||
"time4": db_order.create_time.strftime("%Y-%m-%d %H:%M:%S"),
|
"time4": db_order.create_time.strftime("%Y-%m-%d %H:%M:%S"),
|
||||||
"thing10": db_order.address_customer_name,
|
"thing10": db_order.address_customer_name,
|
||||||
"thing15": f"{db_order.address_community_name} {db_order.address_community_building_name} {db_order.address_detail}",
|
"thing15": f"{db_order.address_community_name} {db_order.address_community_building_name} {db_order.address_detail}",
|
||||||
"thing9": db_order.status.status_text
|
"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点,则使用明天送达的文案
|
# 超过晚上8点,则使用明天送达的文案
|
||||||
if datetime.now() > datetime.now().replace(hour=settings.ORDER_SPLIT_TIME_HOUR, minute=0, second=0):
|
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)
|
@router.post("/{orderid}/user/cancel", response_model=ResponseModel)
|
||||||
async def cancel_order(
|
async def cancel_order(
|
||||||
|
background_tasks: BackgroundTasks,
|
||||||
orderid: str,
|
orderid: str,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
current_user: UserDB = Depends(get_current_user)
|
current_user: UserDB = Depends(get_current_user)
|
||||||
@ -711,22 +720,26 @@ async def cancel_order(
|
|||||||
|
|
||||||
# 发送企业微信消息
|
# 发送企业微信消息
|
||||||
wecom_bot = WecomBot()
|
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:
|
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,
|
"character_string1": order.orderid,
|
||||||
"time19": CommonUtils.get_current_time(),
|
"time19": CommonUtils.get_current_time(),
|
||||||
"thing5": "用户主动取消订单"
|
"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(
|
return success_response(
|
||||||
@ -850,6 +863,7 @@ async def get_deliveryman_orders(
|
|||||||
|
|
||||||
@router.post("/{orderid}/deliveryman/cancel", response_model=ResponseModel)
|
@router.post("/{orderid}/deliveryman/cancel", response_model=ResponseModel)
|
||||||
async def deliveryman_cancel_order(
|
async def deliveryman_cancel_order(
|
||||||
|
background_tasks: BackgroundTasks,
|
||||||
orderid: str,
|
orderid: str,
|
||||||
cancel_data: OrderCancel,
|
cancel_data: OrderCancel,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
@ -917,27 +931,34 @@ async def deliveryman_cancel_order(
|
|||||||
|
|
||||||
# 发送企业微信消息
|
# 发送企业微信消息
|
||||||
wecom_bot = WecomBot()
|
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:
|
if order.userid:
|
||||||
order_user = db.query(UserDB).filter(
|
order_user = db.query(UserDB).filter(
|
||||||
UserDB.userid == order.userid
|
UserDB.userid == order.userid
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
if order_user.mp_openid:
|
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={
|
data={
|
||||||
"character_string1": order.orderid,
|
"character_string1": order.orderid,
|
||||||
"time19": CommonUtils.get_current_time(),
|
"time19": CommonUtils.get_current_time(),
|
||||||
"thing5": order.cancel_reason
|
"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(
|
return success_response(
|
||||||
message="订单取消成功",
|
message="订单取消成功",
|
||||||
data=OrderInfo.model_validate(order)
|
data=OrderInfo.model_validate(order)
|
||||||
@ -948,6 +969,7 @@ async def deliveryman_cancel_order(
|
|||||||
|
|
||||||
@router.post("/{orderid}/deliveryman/complete", response_model=ResponseModel)
|
@router.post("/{orderid}/deliveryman/complete", response_model=ResponseModel)
|
||||||
async def complete_order(
|
async def complete_order(
|
||||||
|
background_tasks: BackgroundTasks,
|
||||||
orderid: str,
|
orderid: str,
|
||||||
complete_data: OrderComplete,
|
complete_data: OrderComplete,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
@ -997,7 +1019,12 @@ async def complete_order(
|
|||||||
|
|
||||||
# 发送企业微信消息
|
# 发送企业微信消息
|
||||||
wecom_bot = WecomBot()
|
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:
|
if order.userid:
|
||||||
@ -1009,18 +1036,17 @@ async def complete_order(
|
|||||||
UserDB.userid == order.deliveryman_user_id
|
UserDB.userid == order.deliveryman_user_id
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
await mp_client.send_template_message(
|
|
||||||
openid=order_user.mp_openid,
|
|
||||||
template_id=settings.DELIVERY_ORDER_COMPLETED_TEMPLATE_ID,
|
|
||||||
data={
|
data={
|
||||||
"character_string13": order.orderid,
|
"character_string13": order.orderid,
|
||||||
"thing3": deliveryman_user.nickname,
|
"thing3": deliveryman_user.nickname,
|
||||||
"time5" : CommonUtils.get_current_time()
|
"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(
|
return success_response(
|
||||||
@ -1033,6 +1059,7 @@ async def complete_order(
|
|||||||
|
|
||||||
@router.post("/{orderid}/deliveryman/receive", response_model=ResponseModel)
|
@router.post("/{orderid}/deliveryman/receive", response_model=ResponseModel)
|
||||||
async def receive_order(
|
async def receive_order(
|
||||||
|
background_tasks: BackgroundTasks,
|
||||||
orderid: str,
|
orderid: str,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
deliveryman: UserDB = Depends(get_deliveryman_user)
|
deliveryman: UserDB = Depends(get_deliveryman_user)
|
||||||
@ -1069,7 +1096,13 @@ async def receive_order(
|
|||||||
|
|
||||||
# 发送企业微信消息
|
# 发送企业微信消息
|
||||||
wecom_bot = WecomBot()
|
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:
|
if order.userid:
|
||||||
@ -1081,19 +1114,19 @@ async def receive_order(
|
|||||||
UserDB.userid == order.deliveryman_user_id
|
UserDB.userid == order.deliveryman_user_id
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
await mp_client.send_template_message(
|
|
||||||
openid=order_user.mp_openid,
|
|
||||||
template_id=settings.DELIVERY_ORDER_RECEIVED_TEMPLATE_ID,
|
|
||||||
data={
|
data={
|
||||||
"character_string9": order.orderid,
|
"character_string9": order.orderid,
|
||||||
"time8": CommonUtils.get_current_time(),
|
"time8": CommonUtils.get_current_time(),
|
||||||
"thing3": deliveryman_user.nickname
|
"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(
|
return success_response(
|
||||||
message="接单成功",
|
message="接单成功",
|
||||||
data=OrderInfo.model_validate(order)
|
data=OrderInfo.model_validate(order)
|
||||||
|
|||||||
@ -24,7 +24,7 @@ from app.core.qcloud import qcloud_manager
|
|||||||
from app.models.merchant import MerchantDB
|
from app.models.merchant import MerchantDB
|
||||||
from app.models.address import AddressDB, AddressInfo
|
from app.models.address import AddressDB, AddressInfo
|
||||||
from app.models.user import UserUpdateRoles, UserUpdateDeliveryCommissionRate
|
from app.models.user import UserUpdateRoles, UserUpdateDeliveryCommissionRate
|
||||||
from app.models.order import ShippingOrderDB
|
from app.models.order import ShippingOrderDB, OrderStatus
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -368,7 +368,8 @@ async def get_referral_users(
|
|||||||
u = ReferralUserInfo.model_validate(user).model_dump()
|
u = ReferralUserInfo.model_validate(user).model_dump()
|
||||||
|
|
||||||
order_count = db.query(ShippingOrderDB).filter(
|
order_count = db.query(ShippingOrderDB).filter(
|
||||||
ShippingOrderDB.userid == user.userid
|
ShippingOrderDB.userid == user.userid,
|
||||||
|
ShippingOrderDB.status == OrderStatus.COMPLETED
|
||||||
).count()
|
).count()
|
||||||
|
|
||||||
u['is_place_order'] = order_count > 0
|
u['is_place_order'] = order_count > 0
|
||||||
|
|||||||
17
app/core/mpmessage.py
Normal file
17
app/core/mpmessage.py
Normal 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}"
|
||||||
|
}
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue
Block a user