44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
from typing import cast
|
|||
|
|
|
||
|
|
from channels.layers import BaseChannelLayer, get_channel_layer
|
||
|
|
from rest_framework import status
|
||
|
|
from rest_framework.decorators import action
|
||
|
|
from rest_framework.request import Request
|
||
|
|
from rest_framework.response import Response
|
||
|
|
from rest_framework.viewsets import ViewSet
|
||
|
|
|
||
|
|
from sixGuoDjango import BaseResponse, ResData
|
||
|
|
from wechat_项目工具包.EMS中国邮政.ems邮政 import ems邮政物流工具
|
||
|
|
|
||
|
|
default_channel_layer = cast(BaseChannelLayer, get_channel_layer(alias="default"))
|
||
|
|
|
||
|
|
from functools import wraps
|
||
|
|
import threading
|
||
|
|
|
||
|
|
|
||
|
|
def sync_lock(lock):
|
||
|
|
def decorator(fn):
|
||
|
|
@wraps(fn)
|
||
|
|
def wrapper(*args, **kwargs):
|
||
|
|
with lock:
|
||
|
|
return fn(*args, **kwargs)
|
||
|
|
|
||
|
|
return wrapper
|
||
|
|
|
||
|
|
return decorator
|
||
|
|
|
||
|
|
|
||
|
|
class 实时更新物流数据ViewSets(ViewSet):
|
||
|
|
lock = threading.Lock() # 所有请求 共享这一个 lock对象
|
||
|
|
|
||
|
|
@sync_lock(lock=lock) # 锁住这个接口所有并发请求,
|
||
|
|
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="实时更新物流数据")
|
||
|
|
def 实时更新物流数据(self, request: Request):
|
||
|
|
"""前端小程序, 物流追踪页面, 左上角 刷新按钮 返回的数据"""
|
||
|
|
order物流公司订单编号 = request.data.get("order物流公司订单编号", None)
|
||
|
|
order物流订单号 = request.data.get("order物流订单号", None)
|
||
|
|
print("实时更新数据请求进来了吗")
|
||
|
|
ems邮政物流工具().更新物流快递数据(order物流公司订单编号=order物流公司订单编号, order物流订单号=order物流订单号)
|
||
|
|
httpResData = BaseResponse(resData=ResData(listData=[""], dictData={}), ).model_dump()
|
||
|
|
return Response(data=httpResData, status=status.HTTP_200_OK)
|