update
This commit is contained in:
parent
b82d5c5374
commit
9c427159ad
@ -259,6 +259,32 @@ async def pre_order(
|
|||||||
logging.exception(f"预下单失败: {str(e)}")
|
logging.exception(f"预下单失败: {str(e)}")
|
||||||
return error_response(code=500, message=f"预下单失败: {str(e)}")
|
return error_response(code=500, message=f"预下单失败: {str(e)}")
|
||||||
|
|
||||||
|
async def order_created_callback(order: OrderInfo, db: Session):
|
||||||
|
"""订单创建成功回调"""
|
||||||
|
|
||||||
|
# 发送企业微信消息
|
||||||
|
wecom_bot = WecomBot()
|
||||||
|
wecom_bot.send_order_notification(db, order, OrderStatus.CREATED)
|
||||||
|
|
||||||
|
current_user = db.query(UserDB).filter(UserDB.userid == order.userid).first()
|
||||||
|
|
||||||
|
# 发送公众号消息
|
||||||
|
if current_user.mp_openid:
|
||||||
|
data={
|
||||||
|
"character_string13": order.orderid,
|
||||||
|
"time4": order.create_time.strftime("%Y-%m-%d %H:%M:%S"),
|
||||||
|
"thing10": order.address_customer_name,
|
||||||
|
"thing15": f"{order.address_community_name} {order.address_community_building_name} {order.address_detail}",
|
||||||
|
"thing9": order.status.status_text
|
||||||
|
}
|
||||||
|
sent_order_status_change_message(db, order, current_user.mp_openid, settings.DELIVERY_ORDER_CREATED_TEMPLATE_ID)
|
||||||
|
|
||||||
|
# 添加到新订单队列
|
||||||
|
redis_client.push_new_order_to_queue(order.address_community_id, order.orderid, db)
|
||||||
|
|
||||||
|
# 添加到今日选中的配送时段的 Redis 消息队列
|
||||||
|
redis_client.push_order_to_community_period_queue(order.delivery_date, order.address_community_id, order.time_period_id, order.orderid)
|
||||||
|
|
||||||
@router.post("", response_model=ResponseModel)
|
@router.post("", response_model=ResponseModel)
|
||||||
async def create_order(
|
async def create_order(
|
||||||
background_tasks: BackgroundTasks,
|
background_tasks: BackgroundTasks,
|
||||||
@ -326,7 +352,7 @@ async def create_order(
|
|||||||
more_station_price=price_info.more_station_price,
|
more_station_price=price_info.more_station_price,
|
||||||
coupon_id=coupon_id,
|
coupon_id=coupon_id,
|
||||||
final_amount=price_info.final_amount,
|
final_amount=price_info.final_amount,
|
||||||
status=OrderStatus.CREATED,
|
status=OrderStatus.UNPAID if price_info.final_amount > 0 else OrderStatus.CREATED,
|
||||||
delivery_method=order.delivery_method,
|
delivery_method=order.delivery_method,
|
||||||
delivery_date=order.delivery_date,
|
delivery_date=order.delivery_date,
|
||||||
is_first_order=is_first_order
|
is_first_order=is_first_order
|
||||||
@ -408,61 +434,16 @@ async def create_order(
|
|||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(db_order)
|
db.refresh(db_order)
|
||||||
|
|
||||||
# 查询包裹信息
|
# 如不需要支付,直接创建订单成功
|
||||||
packages = db.query(ShippingOrderPackageDB).filter(
|
if db_order.status == OrderStatus.CREATED:
|
||||||
ShippingOrderPackageDB.orderid == orderid
|
background_tasks.add_task(order_created_callback, OrderInfo.model_validate(db_order), db)
|
||||||
).all()
|
|
||||||
|
|
||||||
# 发送企业微信消息
|
|
||||||
wecom_bot = WecomBot()
|
|
||||||
order_info = OrderInfo.model_validate(db_order)
|
|
||||||
background_tasks.add_task(
|
|
||||||
wecom_bot.send_order_notification,
|
|
||||||
db,
|
|
||||||
order_info,
|
|
||||||
OrderStatus.CREATED
|
|
||||||
)
|
|
||||||
|
|
||||||
#发送订单创建成功的公众号消息
|
|
||||||
if current_user.mp_openid:
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
background_tasks.add_task(
|
|
||||||
sent_order_status_change_message,
|
|
||||||
openid=current_user.mp_openid,
|
|
||||||
template_id=settings.DELIVERY_ORDER_CREATED_TEMPLATE_ID,
|
|
||||||
data=data,
|
|
||||||
orderid=db_order.orderid
|
|
||||||
)
|
|
||||||
|
|
||||||
# 添加到新订单队列
|
|
||||||
if db_order.address_community_id:
|
|
||||||
background_tasks.add_task(
|
|
||||||
redis_client.push_new_order_to_queue,
|
|
||||||
db_order.address_community_id,
|
|
||||||
db_order.orderid,
|
|
||||||
db
|
|
||||||
)
|
|
||||||
|
|
||||||
# 今日订单加入今日选中的配送时段的 Redis 消息队列
|
|
||||||
background_tasks.add_task(
|
|
||||||
redis_client.push_order_to_community_period_queue,
|
|
||||||
db_order.delivery_date,
|
|
||||||
order.community_time_period_id,
|
|
||||||
db_order.orderid
|
|
||||||
)
|
|
||||||
|
|
||||||
return success_response(
|
return success_response(
|
||||||
message="订单创建成功",
|
message="订单创建成功",
|
||||||
data={
|
data={
|
||||||
"order": OrderInfo.model_validate(db_order),
|
"order": OrderInfo.model_validate(db_order),
|
||||||
"packages": [OrderPackageInfo.model_validate(p) for p in packages],
|
# "packages": [OrderPackageInfo.model_validate(p) for p in packages],
|
||||||
"delivery_time": format_delivery_time(db_order.delivery_date, db_order.time_period_name),
|
"delivery_time": format_delivery_time(db_order.delivery_date, db_order.time_period_name),
|
||||||
"success_text" : f"预计 {format_delivery_time(db_order.delivery_date, db_order.time_period_name)} 送达,请注意查收"
|
"success_text" : f"预计 {format_delivery_time(db_order.delivery_date, db_order.time_period_name)} 送达,请注意查收"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,7 +24,9 @@ from app.core.point_manager import PointRecordType
|
|||||||
from app.core.account import AccountManager
|
from app.core.account import AccountManager
|
||||||
import logging
|
import logging
|
||||||
from app.core.security import get_password_hash
|
from app.core.security import get_password_hash
|
||||||
|
from app.api.endpoints.order import order_created_callback
|
||||||
|
from app.models.order import OrderInfo
|
||||||
|
from fastapi import BackgroundTasks
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
class PhoneNumberRequest(BaseModel):
|
class PhoneNumberRequest(BaseModel):
|
||||||
@ -182,6 +184,7 @@ async def create_payment(
|
|||||||
|
|
||||||
@router.post("/payment/notify")
|
@router.post("/payment/notify")
|
||||||
async def payment_notify(
|
async def payment_notify(
|
||||||
|
background_tasks: BackgroundTasks,
|
||||||
request: Request,
|
request: Request,
|
||||||
db: Session = Depends(get_db)
|
db: Session = Depends(get_db)
|
||||||
):
|
):
|
||||||
@ -223,11 +226,13 @@ async def payment_notify(
|
|||||||
if trade_state_desc == "支付成功":
|
if trade_state_desc == "支付成功":
|
||||||
# 更新订单状态
|
# 更新订单状态
|
||||||
order.pay_status = True
|
order.pay_status = True
|
||||||
order.status = OrderStatus.COMPLETED # 支付成功后状态为已完成
|
order.status = OrderStatus.CREATED # 支付成功后状态为已创建
|
||||||
order.completed_time = datetime.now()
|
order.completed_time = datetime.now()
|
||||||
order.transaction_id = transaction_id
|
order.transaction_id = transaction_id
|
||||||
order.pay_time = datetime.fromisoformat(success_time.replace('Z', '+00:00'))
|
order.pay_time = datetime.fromisoformat(success_time.replace('Z', '+00:00'))
|
||||||
|
|
||||||
|
# 回调订单创建成功
|
||||||
|
order_created_callback(OrderInfo.model_validate(order), db)
|
||||||
|
|
||||||
elif out_trade_no.startswith("M"): # 商家商品订单
|
elif out_trade_no.startswith("M"): # 商家商品订单
|
||||||
# 查询商户订单
|
# 查询商户订单
|
||||||
|
|||||||
@ -38,13 +38,13 @@ class RedisClient:
|
|||||||
return self.client
|
return self.client
|
||||||
|
|
||||||
|
|
||||||
def push_order_to_community_period_queue(self, delivery_date: date,community_time_period_id: int, order_id: str) -> bool:
|
def push_order_to_community_period_queue(self, delivery_date: date,community_id: int, time_period_id: int, order_id: str) -> bool:
|
||||||
"""
|
"""
|
||||||
添加新订单到今日队列
|
添加新订单到今日队列
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
today_date_str = delivery_date.strftime("%Y-%m-%d")
|
today_date_str = delivery_date.strftime("%Y-%m-%d")
|
||||||
key = f"community_period:{community_time_period_id}:today_orders:{today_date_str}"
|
key = f"community_period:{community_id}:{time_period_id}:today_orders:{today_date_str}"
|
||||||
self.client.lpush(key, order_id)
|
self.client.lpush(key, order_id)
|
||||||
|
|
||||||
# 设置过期时间为24小时
|
# 设置过期时间为24小时
|
||||||
|
|||||||
BIN
jobs.sqlite
BIN
jobs.sqlite
Binary file not shown.
Loading…
Reference in New Issue
Block a user