300 lines
20 KiB
Python
300 lines
20 KiB
Python
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 |