feat: 商品/专区/店铺按俱乐部分离,工单统计与点单手机号认证
商品与专区、店铺增加 club_id(历史默认 xq);列表按俱乐部过滤;工单列表返回待办统计;新增 hqshouji/rzwlsjh 手机号查询与认证接口。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
42
products/migrations/0012_shangpin_zhuanqu_club_id.py
Normal file
42
products/migrations/0012_shangpin_zhuanqu_club_id.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from django.db import migrations, models
|
||||
from django.db.models import Q
|
||||
|
||||
|
||||
def backfill_club_xq(apps, schema_editor):
|
||||
Shangpin = apps.get_model('products', 'Shangpin')
|
||||
ShangpinZhuanqu = apps.get_model('products', 'ShangpinZhuanqu')
|
||||
Shangpin.objects.filter(Q(club_id__isnull=True) | Q(club_id='')).update(club_id='xq')
|
||||
ShangpinZhuanqu.objects.filter(Q(club_id__isnull=True) | Q(club_id='')).update(club_id='xq')
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0011_huiyuan_is_bundle'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='club_id',
|
||||
field=models.CharField(
|
||||
db_index=True,
|
||||
default='xq',
|
||||
help_text='公共商品按俱乐部隔离;历史数据默认星阙 xq',
|
||||
max_length=16,
|
||||
verbose_name='所属俱乐部',
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='club_id',
|
||||
field=models.CharField(
|
||||
db_index=True,
|
||||
default='xq',
|
||||
help_text='公共专区按俱乐部隔离;历史数据默认星阙 xq',
|
||||
max_length=16,
|
||||
verbose_name='所属俱乐部',
|
||||
),
|
||||
),
|
||||
migrations.RunPython(backfill_club_xq, migrations.RunPython.noop),
|
||||
]
|
||||
@@ -55,6 +55,10 @@ class Shangpin(QModel):
|
||||
shangjia_zhuangtai = models.BooleanField(default=True, verbose_name='是否上架')
|
||||
fengjin_zhuangtai = models.BooleanField(default=True, verbose_name='是否封禁')
|
||||
shenhe_zhuangtai = models.BooleanField(default=False, verbose_name='平台审核状态',help_text='True=审核通过,False=未审核')
|
||||
club_id = models.CharField(
|
||||
max_length=16, default='xq', db_index=True, verbose_name='所属俱乐部',
|
||||
help_text='公共商品按俱乐部隔离;历史数据默认星阙 xq',
|
||||
)
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin'
|
||||
@@ -121,6 +125,10 @@ class ShangpinZhuanqu(QModel):
|
||||
)
|
||||
shangjia_zhuangtai = models.BooleanField(default=True, verbose_name='是否上架')
|
||||
fengjin_zhuangtai = models.BooleanField(default=True, verbose_name='是否封禁')
|
||||
club_id = models.CharField(
|
||||
max_length=16, default='xq', db_index=True, verbose_name='所属俱乐部',
|
||||
help_text='公共专区按俱乐部隔离;历史数据默认星阙 xq',
|
||||
)
|
||||
|
||||
|
||||
class Meta:
|
||||
|
||||
@@ -69,6 +69,7 @@ from jituan.services.club_context import resolve_effective_club_id
|
||||
from jituan.services.club_write import resolve_club_id_for_write
|
||||
from jituan.services.club_user import get_payment_openid
|
||||
from jituan.services.club_penalty import resolve_gsfenhong_club_id
|
||||
from jituan.constants import CLUB_ID_DEFAULT
|
||||
|
||||
import traceback
|
||||
|
||||
@@ -115,8 +116,9 @@ class ShangpinHuoquView(APIView):
|
||||
if visible_leixing_ids:
|
||||
zhuanqu_queryset = ShangpinZhuanqu.query.filter(
|
||||
leixing_id__in=visible_leixing_ids,
|
||||
shenhezhuangtai=1 # 🔴【添加】只筛选审核状态为2的专区
|
||||
).order_by('-paixu', 'id') # 先按paixu降序,再按id升序
|
||||
shenhezhuangtai=1,
|
||||
club_id=club_id or CLUB_ID_DEFAULT,
|
||||
).order_by('-paixu', 'id')
|
||||
else:
|
||||
zhuanqu_queryset = ShangpinZhuanqu.query.none()
|
||||
|
||||
@@ -137,7 +139,8 @@ class ShangpinHuoquView(APIView):
|
||||
# 注意:这里使用values()只获取指定字段,提高查询效率
|
||||
shangpin_queryset = Shangpin.query.filter(
|
||||
zhuanqu_id__in=visible_zhuanqu_ids,
|
||||
shenhezhuangtai=1 # 🔴【添加】只筛选审核状态为2的商品
|
||||
shenhezhuangtai=1,
|
||||
club_id=club_id or CLUB_ID_DEFAULT,
|
||||
).values(
|
||||
'id', 'biaoqian', 'jiage', 'leixing_id',
|
||||
'zhuanqu_id', 'tupian_url', 'duiwai_xiaoliang', 'paixu'
|
||||
|
||||
@@ -357,9 +357,11 @@ class ShangpinZhuanquFabuView(APIView):
|
||||
)
|
||||
|
||||
# === 3. 创建商品专区记录 ===
|
||||
club_id = resolve_club_id_for_write(request)
|
||||
zhuanqu_obj = ShangpinZhuanqu(
|
||||
mingzi=mingzi,
|
||||
leixing_id=leixing_id
|
||||
leixing_id=leixing_id,
|
||||
club_id=club_id,
|
||||
)
|
||||
|
||||
zhuanqu_obj.save()
|
||||
@@ -604,6 +606,7 @@ class ShangpinFabuView(APIView):
|
||||
duiwai_xiaoliang_value = 0
|
||||
|
||||
# 4.2 创建商品对象
|
||||
club_id = resolve_club_id_for_write(request)
|
||||
shangpin_obj = Shangpin(
|
||||
biaoqian=biaoti,
|
||||
jiage=jiage_value,
|
||||
@@ -616,6 +619,7 @@ class ShangpinFabuView(APIView):
|
||||
yaoqiuleixing=yaoqiuleixing_int,
|
||||
huiyuan_id=huiyuan_id_value,
|
||||
yongjin=yongjin_value,
|
||||
club_id=club_id,
|
||||
# tupian_url 先留空,上传成功后再更新
|
||||
)
|
||||
|
||||
@@ -1354,11 +1358,13 @@ class AdShangpinHuQu(APIView):
|
||||
'yongjin' # 佣金要求(如果yaoqiuleixing=2)
|
||||
)
|
||||
|
||||
# 9. 查询商品专区数据
|
||||
shangpinzhuanqu_data = ShangpinZhuanqu.query.all().values(
|
||||
# 9. 查询商品专区数据(按当前俱乐部)
|
||||
admin_club_id = resolve_effective_club_id(request, getattr(request, 'user', None)) or 'xq'
|
||||
shangpinzhuanqu_data = ShangpinZhuanqu.query.filter(club_id=admin_club_id).values(
|
||||
'id', # 专区ID
|
||||
'mingzi', # 专区名称
|
||||
'leixing_id' # 所属类型ID
|
||||
'leixing_id', # 所属类型ID
|
||||
'club_id',
|
||||
)
|
||||
|
||||
# 10. 查询会员数据
|
||||
@@ -1368,15 +1374,16 @@ class AdShangpinHuQu(APIView):
|
||||
'jiage' # 会员价格
|
||||
)
|
||||
|
||||
# 11. 查询商品数据
|
||||
shangpin_data = Shangpin.query.all().values(
|
||||
# 11. 查询商品数据(按当前俱乐部)
|
||||
shangpin_data = Shangpin.query.filter(club_id=admin_club_id).values(
|
||||
'id', # 商品ID
|
||||
'biaoqian', # 商品标题/标签
|
||||
'jiage', # 商品价格
|
||||
'leixing_id', # 商品类型ID
|
||||
'zhuanqu_id', # 商品专区ID
|
||||
'tupian_url', # 商品图片URL
|
||||
'duiwai_xiaoliang' # 商品对外销量
|
||||
'duiwai_xiaoliang', # 商品对外销量
|
||||
'club_id',
|
||||
)
|
||||
|
||||
# 12. 构造返回数据
|
||||
|
||||
Reference in New Issue
Block a user