Files
Django/jituan/views_fake_grab_order.py
XingQue ddfd3d3ac7 feat: 假单后台管理接口(按俱乐部+商品类型 CRUD)
新增 fake-grab-order-list/manage/avatar 接口,权限 2200a;支持增删改价格介绍头像等;假单展示使用自定义头像。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 22:28:13 +08:00

109 lines
4.1 KiB
Python

"""假单后台管理 API。"""
from rest_framework.parsers import FormParser, JSONParser, MultiPartParser
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated
from backend.view import verify_kefu_permission
PRODUCT_PERMS = ('2200a',)
def _check_product_perm(request, phone):
kefu, permissions = verify_kefu_permission(request, phone)
if kefu is None:
return None, permissions
if not any(p in permissions for p in PRODUCT_PERMS):
return None, Response({'code': 403, 'msg': '无商品管理权限'})
return kefu, None
class FakeGrabOrderListView(APIView):
"""POST /jituan/houtai/fake-grab-order-list"""
permission_classes = [IsAuthenticated]
parser_classes = [JSONParser]
def post(self, request):
phone = (request.data.get('phone') or request.data.get('username') or '').strip()
if not phone:
return Response({'code': 401, 'msg': '缺少客服账号'})
_, err = _check_product_perm(request, phone)
if err:
return err
from jituan.services.fake_grab_order_admin import build_fake_order_list_payload
payload = build_fake_order_list_payload(
request,
leixing_id=request.data.get('leixing_id'),
page=request.data.get('page', 1),
page_size=request.data.get('page_size', 20),
)
return Response({'code': 0, 'data': payload})
class FakeGrabOrderManageView(APIView):
"""POST /jituan/houtai/fake-grab-order-manage action=create|update|delete"""
permission_classes = [IsAuthenticated]
parser_classes = [JSONParser]
def post(self, request):
phone = (request.data.get('phone') or request.data.get('username') or '').strip()
action = (request.data.get('action') or '').strip().lower()
if not phone:
return Response({'code': 401, 'msg': '缺少客服账号'})
_, err = _check_product_perm(request, phone)
if err:
return err
from jituan.services.fake_grab_order_admin import (
create_fake_order,
delete_fake_order,
update_fake_order,
)
if action == 'create':
data, err_msg = create_fake_order(request, request.data)
if err_msg:
return Response({'code': 400, 'msg': err_msg})
return Response({'code': 0, 'msg': '创建成功', 'data': data})
if action == 'update':
order_id = request.data.get('order_id') or request.data.get('dingdan_id')
data, err_msg = update_fake_order(request, order_id, request.data)
if err_msg:
return Response({'code': 400, 'msg': err_msg})
return Response({'code': 0, 'msg': '更新成功', 'data': data})
if action == 'delete':
order_id = request.data.get('order_id') or request.data.get('dingdan_id')
data, err_msg = delete_fake_order(request, order_id)
if err_msg:
return Response({'code': 400, 'msg': err_msg})
return Response({'code': 0, 'msg': '已删除', 'data': data})
return Response({'code': 400, 'msg': '无效的 action'})
class FakeGrabOrderAvatarUploadView(APIView):
"""POST /jituan/houtai/fake-grab-order-avatar"""
permission_classes = [IsAuthenticated]
parser_classes = [MultiPartParser, FormParser, JSONParser]
def post(self, request):
phone = (request.data.get('phone') or request.data.get('username') or '').strip()
order_id = (request.data.get('order_id') or request.data.get('dingdan_id') or '').strip()
file_obj = request.FILES.get('file')
if not phone:
return Response({'code': 401, 'msg': '缺少客服账号'})
_, err = _check_product_perm(request, phone)
if err:
return err
from jituan.services.fake_grab_order_admin import upload_fake_order_avatar
data, err_msg = upload_fake_order_avatar(request, order_id, file_obj)
if err_msg:
return Response({'code': 400, 'msg': err_msg})
return Response({'code': 0, 'msg': '上传成功', 'data': data})