diff --git a/backend/view.py b/backend/view.py index 2b0ab7e..483c02a 100644 --- a/backend/view.py +++ b/backend/view.py @@ -8644,6 +8644,7 @@ class ZxkfghdsView(APIView): Remark=old_order.Remark, User1ID=old_order.User1ID, # 商家标识 ImageURL=old_order.ImageURL, + ExternalOrderID=old_order.ExternalOrderID, ClubID=getattr(old_order, 'ClubID', None) or 'xq', # 注意:不继承 AssignedID、PlayerID ) diff --git a/jituan/services/club_member_admin.py b/jituan/services/club_member_admin.py index a4b3e77..14d7dfb 100644 --- a/jituan/services/club_member_admin.py +++ b/jituan/services/club_member_admin.py @@ -1,9 +1,10 @@ """后台会员管理:全局 Huiyuan 定义 + 各俱乐部 ClubHuiyuanPrice 售价/分成。""" +import logging import random import string from decimal import Decimal -from django.db import transaction +from django.db import transaction, IntegrityError from jituan.constants import CLUB_ID_DEFAULT, DATA_SCOPE_ALL from jituan.models import ClubHuiyuanPrice @@ -11,6 +12,14 @@ from jituan.services.club_context import club_id_for_write, resolve_club_id_from from jituan.services.club_user_access import list_response_meta from products.models import Huiyuan +logger = logging.getLogger(__name__) + +CLUB_WRITE_SCOPE_MSG = '当前为集团汇总视图,请先在顶栏切换到具体俱乐部(如星阙、星之界)后再操作' + + +def club_write_blocked(request): + return resolve_club_scope(request) == DATA_SCOPE_ALL + def _format_member(m, price_row=None): global_jiage = str(m.jiage) @@ -82,8 +91,8 @@ def build_member_list_payload(request): def update_member_for_club(request, huiyuan_id, jieshao, jiage, guanshifc, zuzhangfc, jtjieshao): - if resolve_club_scope(request) == DATA_SCOPE_ALL: - return None, '集团汇总视图下不可修改,请切换到具体俱乐部' + if club_write_blocked(request): + return None, CLUB_WRITE_SCOPE_MSG club_id = club_id_for_write(request) @@ -125,8 +134,8 @@ def update_member_for_club(request, huiyuan_id, jieshao, jiage, guanshifc, zuzha def add_member_for_club(request, jieshao, jiage, guanshifc, zuzhangfc, jtjieshao, bankuai_id=None): - if resolve_club_scope(request) == DATA_SCOPE_ALL: - return None, '集团汇总视图下不可添加,请切换到具体俱乐部' + if club_write_blocked(request): + return None, CLUB_WRITE_SCOPE_MSG club_id = club_id_for_write(request) @@ -136,26 +145,35 @@ def add_member_for_club(request, jieshao, jiage, guanshifc, zuzhangfc, jtjieshao if not Huiyuan.query.filter(huiyuan_id=new_id).exists(): return new_id - with transaction.atomic(): - new_id = generate_huiyuan_id() - member = Huiyuan.query.create( - huiyuan_id=new_id, - jieshao=jieshao, - jiage=jiage, - guanshifc=guanshifc, - zuzhangfc=zuzhangfc, - jtjieshao=jtjieshao, - goumai_cishu=0, - bankuai_id=bankuai_id, - ) - ClubHuiyuanPrice.query.create( - club_id=club_id, - huiyuan_id=new_id, - jiage=jiage, - guanshifc=guanshifc, - zuzhangfc=zuzhangfc, - is_enabled=True, - bankuai_id=bankuai_id, - ) + try: + with transaction.atomic(): + new_id = generate_huiyuan_id() + create_kwargs = dict( + huiyuan_id=new_id, + jieshao=jieshao, + jiage=jiage, + guanshifc=guanshifc, + zuzhangfc=zuzhangfc, + jtjieshao=jtjieshao or '', + goumai_cishu=0, + ) + if bankuai_id is not None: + create_kwargs['bankuai_id'] = bankuai_id + member = Huiyuan.query.create(**create_kwargs) + ClubHuiyuanPrice.query.create( + club_id=club_id, + huiyuan_id=new_id, + jiage=jiage, + guanshifc=guanshifc, + zuzhangfc=zuzhangfc, + is_enabled=True, + bankuai_id=bankuai_id, + ) + except IntegrityError as e: + logger.exception('添加会员失败 club_id=%s', club_id) + return None, f'添加失败:数据冲突({e})' + except Exception as e: + logger.exception('添加会员失败 club_id=%s', club_id) + return None, f'添加失败:{e}' return {'huiyuan_id': member.huiyuan_id}, None diff --git a/orders/views.py b/orders/views.py index e67031a..09d75cb 100644 --- a/orders/views.py +++ b/orders/views.py @@ -6339,6 +6339,7 @@ class ZxsjghdsView(APIView): User1ID=user1_id, # 商家标识 ImageURL=tupian, ExternalOrderID=waibu_dingdan_id, + ClubID=getattr(old_order, 'ClubID', None) or 'xq', # 不继承:zhiding_id, jiedan_dashou_id, dashou_liuyan 等 )