feat: 会员充值明细接口与俱乐部一键创建总会员

新增 hy-recharge-records 查询 czjilu 会员单并关联 gsfenhong 分红;hy-bundle-create 支持俱乐部一步创建总会员;会员数据分析页权限改为 3300a。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-05 18:27:48 +08:00
parent 37bc8f960a
commit 2a350a2ec8
6 changed files with 438 additions and 3 deletions

View File

@@ -44,7 +44,7 @@ from .views.products import (
from .views.members import (
GetMemberListView, UpdateMemberView, AddMemberView,
ClubMemberCatalogView, ClubMemberEnableView, ClubMemberDisableView,
MemberCardImageUploadView,
MemberCardImageUploadView, MemberRechargeRecordsView, MemberBundleCreateView,
)
from .views.guanli import (
GetGuanliListView, GetGuanliDetailView, PromoteGuanshiToZuzhangView,
@@ -103,7 +103,7 @@ __all__ = [
# members
'GetMemberListView', 'UpdateMemberView', 'AddMemberView',
'ClubMemberCatalogView', 'ClubMemberEnableView', 'ClubMemberDisableView',
'MemberCardImageUploadView',
'MemberCardImageUploadView', 'MemberRechargeRecordsView', 'MemberBundleCreateView',
# guanli
'GetGuanliListView', 'GetGuanliDetailView', 'PromoteGuanshiToZuzhangView',
'UpdateGuanliView',

View File

@@ -377,3 +377,81 @@ class MemberCardImageUploadView(APIView):
return Response({'code': 0, 'msg': '上传成功', 'data': data})
class MemberRechargeRecordsView(APIView):
"""POST /jituan/houtai/hy-recharge-records — 会员充值记录明细 + 分红"""
permission_classes = []
parser_classes = [JSONParser]
def post(self, request):
username = (request.data.get('username') or request.data.get('phone') or '').strip()
if not username:
return Response({'code': 401, 'msg': '缺少username'})
kefu, permissions = verify_kefu_permission(request, username)
if kefu is None:
return permissions
if '3300a' not in permissions:
return Response({'code': 403, 'msg': '无权限查看会员充值记录'})
from jituan.services.member_recharge_records import build_member_recharge_records_payload
filters = request.data.get('filters') or {}
for key in (
'dingdan_id', 'yonghuid', 'buyer_keyword', 'huiyuan_id', 'is_trial',
'zhuangtai', 'date_from', 'date_to', 'jine_min', 'jine_max',
'guanshi_id', 'zuzhang_id', 'keyword', 'is_bundle', 'has_fenhong', 'club_id',
):
if request.data.get(key) not in (None, ''):
filters[key] = request.data.get(key)
payload = build_member_recharge_records_payload(
request,
filters=filters,
page=request.data.get('page', 1),
page_size=request.data.get('page_size', 20),
)
return Response({'code': 0, 'data': payload})
class MemberBundleCreateView(APIView):
"""POST /jituan/houtai/hy-bundle-create — 俱乐部一键创建总会员并上架"""
permission_classes = []
parser_classes = [JSONParser]
def post(self, request):
username = (request.data.get('username') or request.data.get('phone') or '').strip()
if not username:
return Response({'code': 401, 'msg': '缺少username'})
kefu, permissions = verify_kefu_permission(request, username)
if kefu is None:
return permissions
if '3300a' not in permissions:
return Response({'code': 403, 'msg': '无权限'})
jieshao = (request.data.get('jieshao') or '').strip()
if not jieshao:
return Response({'code': 400, 'msg': '会员名称不能为空'})
try:
jiage = Decimal(str(request.data.get('jiage')))
guanshifc = Decimal(str(request.data.get('guanshifc')))
zuzhangfc = Decimal(str(request.data.get('zuzhangfc')))
except Exception:
return Response({'code': 400, 'msg': '金额格式错误'})
from jituan.services.club_member_admin import create_bundle_member_for_club
data, err = create_bundle_member_for_club(
request,
jieshao=jieshao,
jiage=jiage,
guanshifc=guanshifc,
zuzhangfc=zuzhangfc,
jtjieshao=(request.data.get('jtjieshao') or '').strip(),
formal_days=int(request.data.get('formal_days') or 30),
included_huiyuan_ids=request.data.get('included_huiyuan_ids') or [],
)
if err:
return Response({'code': 400, 'msg': err})
return Response({'code': 0, 'msg': '总会员创建并上架成功', 'data': data})