2025-03-17 18:06:54 +08:00

300 lines
20 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.db import models
from utils.models import CoreModel,BaseModel
# ================================================= #
# ************** 平台使用的达人/抖客/团长账号授权信息 ************** #
# ================================================= #
class DYSystemAccount(CoreModel):
"""平台使用的达人/抖客/团长账号授权信息"""
TYPE_CHOICES = (
(0, "-"),
(1, "抖客"),
(2, "团长"),
(3, "达人"),
)
avatar = models.CharField(max_length=255,verbose_name="头像", null=True, blank=True)
nickname = models.CharField(max_length=100, help_text="用户昵称", verbose_name="用户昵称",default="", null=True, blank=True)
open_id = models.CharField(max_length=100, db_index=True,null=True,blank=True,verbose_name='抖音open_id')
fans_num = models.IntegerField(default=0,verbose_name="粉丝个数")
buyin_id = models.CharField(max_length=50, db_index=True,null=True,blank=True,verbose_name='百应ID')
pid = models.CharField(max_length=255, db_index=True, null=True, blank=True,verbose_name='抖客PID') # 抖客pid相当于抖客的推广位可以有多个达人也有自己的pid
status = models.BooleanField(default=True, verbose_name="启用状态")
access_token = models.CharField(max_length=255, null=True, blank=True, verbose_name='授权access_token')
access_token_expire = models.DateTimeField(verbose_name='access_token过期时间', null=True, blank=True)
refresh_token = models.CharField(max_length=255, null=True, blank=True,verbose_name='授权refresh_token')
refresh_token_expire = models.DateTimeField(verbose_name='refresh_token过期时间', null=True, blank=True)#refresh_expires_in
identity = models.IntegerField(choices=TYPE_CHOICES,verbose_name='用户类型',default=0)#用户类型
is_delete = models.BooleanField(default=False, verbose_name="是否逻辑删除")
class Meta:
db_table = 'dy_system_account'
verbose_name = '平台使用的达人/抖客/团长账号授权信息'
verbose_name_plural = verbose_name
# ================================================= #
# ************** 团长活动(招商)管理(一般为自己团长账号活动) model ************** #
# ================================================= #
class DyColonelActivityManage(CoreModel):
"""团长活动管理(用于团长活动商品的拉取)"""
activity_id = models.CharField(max_length=50, verbose_name='活动ID',db_index=True,default="")
activity_name = models.CharField(max_length=100, verbose_name='活动名称',null=True,blank=True)
activity_start_time = models.CharField(max_length=100, verbose_name='任务开始时间',null=True,blank=True)
activity_end_time = models.CharField(max_length=100, verbose_name='任务结束时间',null=True,blank=True)
status = models.IntegerField(default=0, verbose_name="状态", help_text="状态")#1:未上线2:报名未开始3:报名中4:推广未开始5:推广中7:报名结束
colonel_buyin_id = models.CharField(max_length=50, verbose_name='团长百应ID',default="")
institution_id = models.CharField(max_length=50, verbose_name='机构ID',default="")
class Meta:
db_table = 'dy_colonel_activity'
verbose_name = '团长活动管理'
verbose_name_plural = verbose_name
def __str__(self):
return self.activity_name
# ================================================= #
# ************** 商品分类 model ************** #
# ================================================= #
class DyProductCategoryManage(CoreModel):
"""商品分类(行业类目)"""
category_id = models.CharField(max_length=20, verbose_name='分类ID',default="")
name = models.CharField(max_length=20, verbose_name='分类名称',default="")
sort = models.PositiveSmallIntegerField(default=1, verbose_name="排序", help_text="显示顺序")
status = models.BooleanField(default=True, verbose_name="状态", help_text="状态")
class Meta:
db_table = 'dy_product_category'
verbose_name = '商品分类(行业类目)'
verbose_name_plural = verbose_name
# ================================================= #
# ************** 商品管理 model ************** #
# ================================================= #
class DyShopManage(BaseModel):
"""店铺管理"""
shop_id = models.CharField(max_length=40, verbose_name='店铺ID',db_index=True,unique=True,null=True,blank=True)
shop_name = models.CharField(max_length=50, verbose_name='店铺名称',null=True,blank=True)
shop_avatar_url = models.CharField(max_length=255, verbose_name='商家头像',null=True,blank=True)
shop_total_score = models.CharField(max_length=255, verbose_name='商家评分4种类型分数',null=True,blank=True)#对象'shop_total_score': {'logistics_score': {'level': 1,'score': '99','text': '物流体验分'},'product_score': {....}
shop_score = models.FloatField(verbose_name='商家体验分',default=0,null=True,blank=True)
shop_score_level = models.PositiveSmallIntegerField(default=0, verbose_name="商家体验分等级") #商家体验分等级。1: 高2: 中3:低; 4: 差
sort = models.PositiveSmallIntegerField(default=1, verbose_name="排序")
status = models.BooleanField(default=True, verbose_name="状态", help_text="状态")
class Meta:
db_table = 'dy_shop_manage'
verbose_name = '店铺管理'
verbose_name_plural = verbose_name
def __str__(self):
return self.shop_name
class DyProductManage(BaseModel):
"""商品管理"""
SOURCE_TYPE = (
(0, "精选联盟"),
(1, "团长活动"),
)
product_id = models.CharField(max_length=40, verbose_name='商品ID',db_index=True)
title = models.CharField(max_length=100, verbose_name='商品标题',db_index=True,null=True,blank=True)
price = models.IntegerField(verbose_name='商品价格',default=0)#单位分
sales = models.IntegerField(verbose_name='历史总销量',default=0)
begin_time = models.DateField(verbose_name='活动开始日期',null=True,blank=True)
end_time = models.DateField(verbose_name='活动结束日期',null=True,blank=True)
coupon = models.IntegerField(verbose_name='优惠券个数',default=0)
coupon_price = models.IntegerField(verbose_name='劵后价',default=0)#单位分
cover = models.CharField(max_length=255, verbose_name='商品封面',null=True,blank=True)
category_id = models.CharField(max_length=20, verbose_name='行业分类ID',null=True,blank=True)
category_name = models.CharField(max_length=30, verbose_name='行业分类名称',null=True,blank=True)
cos_ratio = models.FloatField(verbose_name='普通佣金比例',default=0)#百分比小数,只存除%比的数字部分
cos_fee = models.IntegerField(verbose_name='普通佣金金额',default=0)#单位分
comment_score = models.FloatField(verbose_name='商品评分5分制保留一位小数',default=0)
special_cos_ratio = models.IntegerField(verbose_name='达人/团长/活动佣金比例',default=0)#百分比,只存除%比的数字部分
special_cos_fee = models.IntegerField(verbose_name='达人/团长/活动佣金金额',default=0)#单位分
activity_id = models.CharField(max_length=50, verbose_name='活动ID',db_index=True,null=True,blank=True)#团长活动ID、其他活动ID
imgs = models.TextField(verbose_name='轮播图',null=True,blank=True)
detail_url = models.CharField(max_length=1000,verbose_name='商品链接',null=True,blank=True)
detail_brief = models.TextField(verbose_name='详情装修信息(商品详情图)',null=True,blank=True)
sharable = models.BooleanField(default=True, verbose_name="是否可分销")
is_assured = models.BooleanField(default=False, verbose_name="是否提供安心购服务")
has_sxt = models.BooleanField(default=False, verbose_name="是否具有短视频随心推资质")
has_subsidy_tag = models.BooleanField(default=False, verbose_name="是否是超值购商品(百亿补贴)")
has_supermarket_tag = models.BooleanField(default=False, verbose_name="是否抖音超市(次日达)商品")
has_douin_goods_tag = models.BooleanField(default=False, verbose_name="是否有【抖in好物】标签")
has_shop_brand_tag = models.BooleanField(default=False, verbose_name="是否有品牌旗舰店标签([品牌]黑标)")
in_stock = models.BooleanField(default=True, verbose_name="是否有库存")
shop_id = models.CharField(max_length=40, verbose_name='店铺ID',db_index=True,null=True,blank=True)
logistics_info = models.CharField(max_length=150, verbose_name='物流信息',null=True,blank=True)
sort = models.PositiveSmallIntegerField(default=1, verbose_name="排序", help_text="显示顺序")#自定义
status = models.BooleanField(default=True, verbose_name="商品状态", help_text="商品状态")#自定义
is_calc_award = models.BooleanField(default=False, verbose_name="是否计算(拉新、新人扶持)奖励")#自定义
order_num = models.IntegerField(verbose_name='近30天商品总销售量', default=0)
view_num = models.IntegerField(verbose_name='近30天商品总浏览量', default=0)
kol_num = models.IntegerField(verbose_name='近30天推广总达人数', default=0)
source = models.IntegerField(choices=SOURCE_TYPE,verbose_name='商品接口来源',default=0)#自定义
share_nums = models.IntegerField(verbose_name='前端总分享次数',default=0)#自定义
sample_stock = models.IntegerField(verbose_name='申请领样库存',default=0)
limit_d30_sales = models.IntegerField(verbose_name='领样要求近30天橱窗销量', default=0)
limit_fans_nums = models.IntegerField(verbose_name='领样要求:粉丝数', default=0)
dyshop = models.ForeignKey(DyShopManage,verbose_name='关联商家',db_constraint=False,on_delete=models.SET_NULL,null=True)
shop_score = models.FloatField(verbose_name='店铺分', default=0, null=True, blank=True)
is_delete = models.BooleanField(default=False, verbose_name="是否逻辑删除", help_text="是否逻辑删除")
class Meta:
db_table = 'dy_product_manage'
verbose_name = '商品管理'
verbose_name_plural = verbose_name
unique_together = ('product_id','source')
def __str__(self):
return self.title
class DyProductSaleData(BaseModel):
"""商品月售信息"""
inner_product_id = models.ForeignKey(DyProductManage,related_name='dtproductsd', verbose_name='内部关联商品ID',db_constraint=False, on_delete=models.CASCADE, null=True)
product_id = models.CharField(max_length=40, verbose_name='商品ID', db_index=True)
date = models.DateField(verbose_name='统计日期',null=True,blank=True)
order_num = models.IntegerField(verbose_name='当日商品销售量明细',default=0)
view_num = models.IntegerField(verbose_name='当日商品浏览量明细', default=0)
kol_num = models.IntegerField(verbose_name='当日推广达人数明细', default=0)
class Meta:
db_table = 'dy_product_saledata'
verbose_name = '商品月售信息'
verbose_name_plural = verbose_name
# =====================================================================================#
# ************** 赏金任务(抖音团长拥有赏金任务发布能力) model ************** #
# =====================================================================================#
class DyAwardTaskManage(BaseModel):
"""赏金任务"""
TASK_STATUS_CHOICE = (
(1, "未发布"),
(2, "审核中"),
(3, "审核未通过"),
(4, "未开始"),
(5, "进行中"),
(6, "已结束"),
)
task_id = models.CharField(max_length=40, verbose_name='任务ID',db_index=True)
task_name = models.CharField(max_length=100, verbose_name='任务名称',db_index=True,null=True,blank=True)
conver = models.CharField(max_length=255, verbose_name='封面图',null=True,blank=True)
award_description = models.CharField(max_length=255, verbose_name='奖励说明',null=True,blank=True)
task_other_requirement = models.CharField(max_length=255, verbose_name='任务其他要求',null=True,blank=True)
apply_cnt = models.IntegerField(verbose_name='已领取人数',default=0)
promote_cnt = models.IntegerField(verbose_name='已推广人数',default=0)
gmv = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='支付GMV',default=0)#单位元
order_cnt = models.IntegerField(verbose_name='总订单量',default=0)
can_apply = models.BooleanField(default=False, verbose_name="是否可报名", help_text="是否可报名")
task_start_time = models.CharField(max_length=100, verbose_name='任务开始时间',null=True,blank=True)
task_end_time = models.CharField(max_length=100, verbose_name='任务结束时间',null=True,blank=True)
task_status = models.IntegerField(choices=TASK_STATUS_CHOICE,verbose_name='任务状态',default=0)#1未发布2审核中3审核未通过4未开始5进行中6已结束
product_id = models.CharField(max_length=40, verbose_name='商品ID',db_index=True,default=None)#默认一个任务只支持1个产品如果需要支持多个用逗号分割并延长字段长度
sort = models.PositiveSmallIntegerField(default=1, verbose_name="排序")
status = models.BooleanField(default=True, verbose_name="状态", help_text="状态")
class Meta:
db_table = 'dy_awardtask'
verbose_name = '赏金任务'
verbose_name_plural = verbose_name
def __str__(self):
return self.task_name
# ================================================= #
# ************** 用户提现记录 model************** #
# ================================================= #
class DYBalanceRecord(CoreModel):
"""用户余额记录(带审核功能)"""
PAYTYPE_CHOICES = (
(10, "微信"),
(20, "支付宝"),
(30, "银行卡"),
)
TYPE_CHOICES = (
(1, "提现"),
(2, "充值"),
)
order_no = models.CharField(max_length=64, unique=True, verbose_name="订单编号(内部)")
balance = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name='剩余余额')
money = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name='金额')
trade_no = models.CharField(max_length=200, verbose_name="交易订单号(外部)", null=True, blank=True)
type = models.IntegerField(choices=TYPE_CHOICES, verbose_name="类型",default=1, help_text="类型")
paytype = models.IntegerField(choices=PAYTYPE_CHOICES, verbose_name="提现方式",default=10, help_text="提现方式")
audit_status = models.IntegerField(choices=((10, u'待审核'), (20, u'已通过'), (30, u'未通过')), verbose_name="审核状态",default=10)
status = models.IntegerField(choices=((10, u'打款中'), (20, u'已完成'), (30, u'失败')), verbose_name="打款状态",default=10)
audit_time = models.DateTimeField(verbose_name='管理员审核时间', null=True, blank=True)
audit_remarks = models.CharField(max_length=200, verbose_name="审核备注", null=True, blank=True)
class Meta:
db_table = 'dy_balance_recode'
verbose_name = '用户余额记录'
verbose_name_plural = verbose_name
# ================================================= #
# ************** 抖音订单管理 model ************** #
# ================================================= #
class DyOrderManage(BaseModel):
"""抖音订单管理"""
FLOW_POINT_CHOICES = (
('PAY_SUCC', "支付完成"),
('REFUND', "退款"),
('SETTLE', "结算"),
('CONFIRM', "确认收货"),
)
MEDIA_TYPE_CHOICES = (
('shop_list', "橱窗"),
('video', "视频"),
('live', "直播"),
('others', "其他"),#其他(如图文、微头条、问答、西瓜长视频等)
)
ORDER_TYPE_CHOICES = (
(0, ""),
(1, "橱窗订单"),
(2, "分享赚订单"),
(3, "0元购订单"),
(4, "垫付领样"),
)
order_id = models.CharField(max_length=100, verbose_name='订单号',null=True,blank=True,unique=True)
flow_point = models.CharField(choices=FLOW_POINT_CHOICES, verbose_name="订单状态", help_text="订单状态",null=True,blank=True,max_length=20)
product_id = models.CharField(max_length=40, verbose_name='商品ID',db_index=True)
product_name = models.CharField(max_length=40, verbose_name='商品名称',null=True,blank=True)
product_img = models.CharField(max_length=255, verbose_name='商品图片URL',null=True,blank=True)
app = models.CharField(max_length=40, verbose_name='来源APP', null=True, blank=True)
author_account = models.CharField(max_length=40, verbose_name="作者账号昵称", null=True, blank=True)
author_openid = models.CharField(max_length=100, verbose_name="作者抖音open_id", null=True, blank=True)
author_short_id = models.CharField(max_length=60, verbose_name="达人抖音号/火山号", null=True, blank=True)
shop_id = models.CharField(max_length=60, verbose_name="商家ID", null=True, blank=True)
shop_name = models.CharField(max_length=60, verbose_name="商家名称", null=True, blank=True)
pick_source_client_key = models.CharField(max_length=80, verbose_name="选品App client_key", null=True, blank=True)
pick_extra = models.CharField(max_length=60, verbose_name="选品来源自定义参数", null=True, blank=True)
pid = models.CharField(max_length=160, verbose_name="分销PID", null=True, blank=True)#分销信息
external_info = models.CharField(max_length=100, verbose_name="分销外部参数", null=True, blank=True) # 分销信息
media_type_name = models.CharField(max_length=160, verbose_name="分销类型", null=True, blank=True) # 分销信息-分销类型Live-直播间ProductDetail-商品详情Activity-活动(百亿补贴/秒杀Mix-H5自建活动页
media_type = models.CharField(choices=MEDIA_TYPE_CHOICES, verbose_name="带货体裁", help_text="带货体裁",null=True,blank=True,max_length=20)
item_num = models.IntegerField(verbose_name="商品数目",default=1, help_text="商品数目")
total_pay_amount = models.IntegerField(verbose_name="订单支付金额",default=0, help_text="订单支付金额") #单位分(用户实付)
commission_rate = models.IntegerField(verbose_name="达人佣金率",default=0, help_text="达人佣金率") #此处保存为真实数据x1万之后如真实是0.35这里是3500
update_time = models.DateTimeField(verbose_name="更新时间[联盟侧订单更新时间]",null=True,blank=True)
pay_success_time = models.DateTimeField(verbose_name="付款时间", null=True, blank=True)
settle_time = models.DateTimeField(verbose_name="结算时间,结算前为空", null=True, blank=True)
refund_time = models.DateTimeField(verbose_name="退款订单退款时间", null=True, blank=True)
pay_goods_amount = models.IntegerField(verbose_name="预估参与结算金额",default=0) #单位分
settled_goods_amount = models.IntegerField(verbose_name="实际参与结算金额", default=0) #单位分
estimated_commission = models.IntegerField(verbose_name="达人/渠道预估佣金收入", default=0) # 单位分
real_commission = models.IntegerField(verbose_name="达人实际佣金收入", default=0) # 单位分
order_type = models.IntegerField(choices=ORDER_TYPE_CHOICES, verbose_name="订单类型", help_text="订单类型",default=0)
from_user_id = models.CharField(max_length=60, verbose_name="达人的openid", null=True, blank=True)#同一用户在不同的APPID中openId不相同
inner_user_id = models.CharField(max_length=60, verbose_name="所属内部用户ID", null=True, blank=True)
class Meta:
db_table = 'dy_order'
verbose_name = '抖音订单管理'
verbose_name_plural = verbose_name