class ComponentAuthedAppid(models.Model): """ 参数 说明 authorization_info 授权信息 authorizer_appid 授权方appid authorizer_access_token 授权方令牌(在授权的公众号具备API权限时,才有此返回值) expires_in 有效期(在授权的公众号具备API权限时,才有此返回值) authorizer_refresh_token 刷新令牌(在授权的公众号具备API权限时,才有此返回值),刷新令牌主要用于公众号第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。 一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌 func_info 公众号授权给开发者的权限集列表(请注意,当出现用户已经将消息与菜单权限集授权给了某个第三方,再授权给另一个第三方时,由于该权限集是互斥的,后一个第三方的授权将去除此权限集,开发者可以在返回的func_info信息中验证这一点,避免信息遗漏), 1到8分别代表: 1消息与菜单权限集 2用户管理权限集 3帐号管理权限集 4网页授权权限集 5微信小店权限集 6多客服权限集 7业务通知权限集 8微信卡券权限集 """ component_info = models.ForeignKey(ComponentInfo) auth_code = models.TextField(default='') user_id = models.IntegerField(default=0) #对应帐号user id last_update_time = models.DateTimeField(default=datetime.now()) authorizer_appid = models.CharField(max_length=255, default='') authorizer_access_token = models.TextField(default='') authorizer_refresh_token = models.TextField(default='') func_info = models.TextField(default='') created_at = models.DateTimeField(auto_now=True) is_active = models.BooleanField(default=False) class Meta(object): db_table = 'component_authed_appid' verbose_name = '委托授权帐号基本信息' verbose_name_plural = '委托授权帐号基本信息'
class ComponentInfo(models.Model): """ <xml><AppId><![CDATA[wx984abb2d00cc47b8]]></AppId> <CreateTime>1427710810</CreateTime> <InfoType><![CDATA[component_verify_ticket]]></InfoType> <ComponentVerifyTicket><![CDATA[Z8RBNjttRu3P5eM8rPe9TW3dA09yuAequP1BmbHhITxs8lZ- X-Gxwaegr5lcPkfJ4VAiRLiuLlCrhKmIz-oSpw]]></ComponentVerifyTicket> </xml> <xml><AppId><![CDATA[wx984abb2d00cc47b8]]></AppId> <CreateTime>1427710810</CreateTime> <InfoType><![CDATA[component_verify_ticket]]></InfoType> <ComponentVerifyTicket><![CDATA[Z8RBNjttRu3P5eM8rPe9TW3dA09yuAequP1BmbHhITxs8lZ- X-Gxwaegr5lcPkfJ4VAiRLiuLlCrhKmIz-oSpw]]></ComponentVerifyTicket> </xml> """ app_id = models.CharField(max_length=64) app_secret = models.CharField(max_length=64) component_verify_ticket = models.TextField() token = models.TextField() ase_key = models.TextField() last_update_time = models.DateTimeField(default=datetime.now()) component_access_token = models.TextField() is_active = models.BooleanField(default=True) access_token_update_time = models.DateTimeField(default=datetime.now()) verify_ticket_update_time = models.DateTimeField(default=datetime.now()) def __unicode__(self): return self.app_id class Meta(object): db_table = 'component_info' verbose_name = '第三方帐号信息' verbose_name_plural = '第三方帐号信息'
class UserOrderNotifySettings(models.Model): user = models.ForeignKey(User) emails = models.TextField(default='') # '|'分割 black_member_ids = models.TextField(default='') # '|'分割,会员id status = models.IntegerField(default=0) is_active = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) class Meta(object): db_table = 'user_order_notify_setting'
class CouponRule(models.Model): """ 优惠券规则 """ owner = models.ForeignKey(User) name = models.CharField(max_length=20) #名称 valid_days = models.IntegerField(default=0) #过期天数 is_active = models.BooleanField(default=True) #是否可用 created_at = models.DateTimeField(auto_now_add=True) #添加时间 start_date = models.DateTimeField() #有效期开始时间 end_date = models.DateTimeField() #有效期结束时间 # v2 valid_restrictions = models.IntegerField(default=-1) #订单满多少可以使用规则 money = models.DecimalField() #金额 count = models.IntegerField(default=0) #发放总数量 remained_count = models.IntegerField(default=0) #剩余数量 limit_counts = models.IntegerField(default=0) #每人限领 limit_product = models.BooleanField(default=False) #限制指定商品 limit_product_id = models.CharField(max_length=2048, default=0) #限制指定商品ID remark = models.TextField(default='') #备注 get_person_count = models.IntegerField(default=0) #领取人数 get_count = models.IntegerField(default=0) #领取次数 use_count = models.IntegerField(default=0) #使用次数 receive_rule = models.BooleanField(default=False) #领取规则,仅未下单用户可领取 class Meta(object): db_table = 'market_tool_coupon_rule'
class MarketToolsIndustry(models.Model): industry_type = models.IntegerField(default=INDUSTR_IT) industry_name = models.TextField() #模版id class Meta(object): db_table = 'market_tools_industry' verbose_name = '行业信息' verbose_name_plural = '行业信息'
class MemberBrowseRecord(models.Model): member = models.ForeignKey(Member) title = models.CharField(max_length=256, default='') #页面标题 url = models.TextField() created_at = models.DateTimeField(auto_now_add=True) class Meta(object): db_table = 'member_browse_record' verbose_name = '会员浏览记录' verbose_name_plural = '会员浏览记录'
class MarketToolsTemplateMessageSendRecord(models.Model): owner = models.ForeignKey(User, related_name='user') template_id = models.TextField() #模版id member_id = models.IntegerField(default=0) status = models.IntegerField(default=0) order_id = models.CharField(max_length=200, default='') created_at = models.DateTimeField(auto_now_add=True) #添加时间 class Meta(object): db_table = 'market_tools_template_message_send_record' verbose_name = '模板消息发送记录' verbose_name_plural = 'market_tools_template_message_send_record'
class MarketToolsTemplateMessage(models.Model): industry = models.IntegerField(default=INDUSTR_IT) title = models.CharField(max_length=256) #标题 send_point = models.IntegerField(default=PAY_ORDER_SUCCESS) #发送点 attribute = models.TextField() #属性1 orderProductPrice:final_price, created_at = models.DateTimeField(auto_now_add=True) #添加时间 class Meta(object): db_table = 'market_tools_template_message' verbose_name = '模板消息' verbose_name_plural = 'template_message'
class ComponentAuthedAppidInfo(models.Model): """ 参数 说明 authorizer_info 授权方昵称 head_img 授权方头像 service_type_info 授权方公众号类型,0代表订阅号,1代表由历史老帐号升级后的订阅号,2代表服务号 verify_type_info 授权方认证类型,-1代表未认证,0代表微信认证,1代表新浪微博认证,2代表腾讯微博认证,3代表已资质认证通过但还未通过名称认证,4代表已资质认证通过、还未通过名称认证,但通过了新浪微博认证,5代表已资质认证通过、还未通过名称认证,但通过了腾讯微博认证 user_name 授权方公众号的原始ID alias 授权方公众号所设置的微信号,可能为空 qrcode_url 二维码图片的URL,开发者最好自行也进行保存 authorization_info 授权信息 appid 授权方appid func_info 公众号授权给开发者的权限集列表(请注意,当出现用户已经将消息与菜单权限集授权给了某个第三方,再授权给另一个第三方时,由于该权限集是互斥的,后一个第三方的授权将去除此权限集,开发者可以在返回的func_info信息中验证这一点,避免信息遗漏),1到9分别代表: 消息与菜单权限集 用户管理权限集 帐号管理权限集 网页授权权限集 微信小店权限集 多客服权限集 业务通知权限集 微信卡券权限集 微信扫一扫权限集 """ auth_appid = models.ForeignKey(ComponentAuthedAppid) nick_name = models.CharField(max_length=255) head_img = models.CharField(max_length=255) service_type_info = models.CharField(max_length=255) verify_type_info = models.CharField(max_length=255) user_name = models.CharField(max_length=255) #授权方公众号的原始ID alias = models.TextField() qrcode_url = models.CharField(max_length=255) appid = models.CharField(max_length=255) func_info = models.TextField() created_at = models.DateTimeField(auto_now=True) class Meta(object): db_table = 'component_authed_appid_info' verbose_name = '委托授权帐号详细信息' verbose_name_plural = '委托授权帐号详细信息'
class ExpressDelivery(models.Model): owner = models.ForeignKey(User) display_index = models.IntegerField(default=1, db_index=True) # 显示的排序 name = models.CharField(max_length=1024, verbose_name='名称') express_number = models.CharField(max_length=1024, verbose_name='编号') express_value = models.CharField(max_length=1024, verbose_name='快递value') remark = models.TextField(default='', verbose_name='备注') created_at = models.DateTimeField(auto_now_add=True, verbose_name='添加时间') class Meta(object): db_table = 'mall_express_delivery' verbose_name = '物流名称' verbose_name_plural = '物流名称'
class MemberBrowseProductRecord(models.Model): member = models.ForeignKey(Member) owner_id = models.IntegerField(default=0) #商家id product_id = models.IntegerField(default=0) #商品id referer = models.CharField(max_length=256, default='') #从哪个页面过来的 title = models.CharField(max_length=256, default='') #页面标题 url = models.TextField() created_at = models.DateTimeField(auto_now_add=True) class Meta(object): db_table = 'member_browse_product_record' verbose_name = '会员浏览商品详情记录' verbose_name_plural = '会员浏览商品详情记录'
class TemplateGlobalNavbar(models.Model): ''' 全局导航 ''' owner = models.ForeignKey(User, related_name='owned_template_global_navbar') is_enable = models.BooleanField(default=True, verbose_name='是否启用') content = models.TextField(default='', verbose_name='navbar的json字符串') created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="修改时间") class Meta(object): db_table = 'template_global_navbar'
class Member(models.Model): """ 会员 """ token = models.CharField(max_length=255) webapp_id = models.CharField(max_length=16) username_hexstr = models.CharField(max_length=2048, verbose_name='会员名称的hex str') user_icon = models.CharField(max_length=1024, verbose_name='会员头像', default='') integral = models.IntegerField(default=0, verbose_name='积分') created_at = models.DateTimeField(auto_now_add=True) grade = models.ForeignKey(MemberGrade) experience = models.IntegerField(default=0, verbose_name='经验值') remarks_name = models.CharField(max_length=32, verbose_name='备注名', default='') remarks_extra = models.TextField(verbose_name='备注信息', default='') last_visit_time = models.DateTimeField(auto_now_add=True) last_message_id = models.IntegerField(default=-1, verbose_name="最近一条消息id") session_id = models.IntegerField(default=-1, verbose_name="会话id") is_for_test = models.BooleanField(default=False) is_subscribed = models.BooleanField(default=True) friend_count = models.IntegerField(default=0) #好友数量 factor = models.FloatField(default=0.00) #社会因子 source = models.IntegerField(default=-1) #会员来源 is_for_buy_test = models.BooleanField(default=False) update_time = models.DateTimeField( default=datetime.now()) #会员信息更新时间 2014-11-11 pay_money = models.FloatField(default=0.0) pay_times = models.IntegerField(default=0) last_pay_time = models.DateTimeField(default=None) #会员信息更新时间 2014-11-11 unit_price = models.FloatField(default=0.0) #ke dan jia city = models.CharField(default='', max_length=50) province = models.CharField(default='', max_length=50) country = models.CharField(default='', max_length=50) sex = models.IntegerField(default=0, verbose_name='性别') status = models.IntegerField(default=1) purchase_frequency = models.IntegerField(default=0) # 30天购买次数 cancel_subscribe_time = models.DateTimeField(blank=True, null=True, default=None, verbose_name="取消关注时间") fans_count = models.IntegerField(default=0) #粉丝数量 class Meta(object): db_table = 'member_member' def __unicode__(self): return u'<member: %s %s>' % (self.webapp_id, self.token)
class Message(models.Model): modules = models.IntegerField(default=MODULES['DATA']) # 选择模块 message_type = models.BooleanField(default=True) # 默认消息中心 title = models.CharField(max_length=128) # 标题名 file_url = models.CharField(max_length=256) # 上传文件地址 content = models.TextField() # 内容 file_type = models.BooleanField(default=True) # 上传类型(默认word) created_at = models.DateTimeField(auto_now_add=True) # 添加时间 owner = models.ForeignKey(User) class Meta(object): db_table = 'message_message' verbose_name = '系统消息' verbose_name_plural = '系统消息'
class ChannelDistributionQrcodeSettings(models.Model): """ 渠道分销二维码 """ owner = models.ForeignKey(User) # 所有者? bing_member_title = models.CharField(max_length=512) # 关联会员头衔 award_prize_info = models.TextField( default='{"id":-1,"name":"no-prize"}') # 关注奖励,奖品信息 reply_type = models.IntegerField(default=0) # 扫码后行为:0普通关注一致,1回复文字,2回复图文 reply_detail = models.TextField(default='') # 回复文字, 当reply_type为1时有效 reply_material_id = models.IntegerField( default=0) # 图文id,reply_type为2时有效 ? coupon_ids = models.TextField() # 配置过的优惠券id集合 bing_member_id = models.IntegerField(default=0) # 关联会员:创建二维码时选择关联的会员的ID return_standard = models.IntegerField(default=0) # 多少天结算标准 group_id = models.IntegerField(default=-1) # 会员分组 distribution_rewards = models.BooleanField( default=False) # 分销奖励 False:没有 True:佣金 commission_rate = models.IntegerField() # 佣金返现率 minimun_return_rate = models.IntegerField() # 最低返现折扣 commission_return_standard = models.DecimalField( max_digits=65, decimal_places=2) # 佣金返现标准 ticket = models.CharField(default='', max_length=256) # ticket bing_member_count = models.IntegerField(default=0) # 关注数量,该二维码下边的关注人数 total_transaction_volume = models.DecimalField( max_digits=65, decimal_places=2, default=0) # 总交易额:二维码自创建以来的所有交易额 total_return = models.DecimalField( max_digits=65, decimal_places=2, default=0) # 返现总额: 二维码所有的返现总额, 只包含已经体现的金额 will_return_reward = models.DecimalField(max_digits=65, decimal_places=2, default=0) # 实施奖励 created_at = models.DateTimeField(auto_now_add=True) # 添加时间 class Meta: db_table = 'market_tool_channel_distribution_qrcode_setting'
class MarketToolsTemplateMessageDetail(models.Model): owner = models.ForeignKey(User, related_name='owner') template_message = models.ForeignKey(MarketToolsTemplateMessage) industry = models.IntegerField(default=INDUSTR_IT) template_id = models.TextField() #模版id first_text = models.CharField(max_length=1024) remark_text = models.CharField(max_length=1024) type = models.IntegerField(default=MAJOR_INDUSTRY_TYPE) status = models.IntegerField(default=0) created_at = models.DateTimeField(auto_now_add=True) #添加时间 class Meta(object): db_table = 'market_tools_template_message_detail' verbose_name = '模板消息详情' verbose_name_plural = 'market_tools_template_message_detail' ordering = ['-status', 'type']
class ExpressHasOrderPushStatus(models.Model): order_id = models.IntegerField(verbose_name="订单id,以后暂不使用", default=-1) express_company_name = models.CharField(max_length=50, default='', verbose_name="快递公司名称") express_number = models.CharField(max_length=100, verbose_name="快递单号") status = models.IntegerField(default=EXPRESS_PULL_NOT_STATUS, verbose_name="状态") send_count = models.IntegerField(default=0, verbose_name="发送订阅请求次数") receive_count = models.IntegerField(default=0, verbose_name="接收推送请求次数") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") # 重新订阅的依据信息(当重推后,该两字段的信息,将被清空) # abort_receive_at: 第一次接收 失败信息的时间 # abort_receive_message 第一次接收 "status":"abort"而且message中包含“3天”关键字的数据 abort_receive_at = models.DateTimeField(null=True, blank=True, verbose_name="接收信息时间") abort_receive_message = models.TextField(verbose_name="接收的信息") service_type = models.IntegerField(default=0, verbose_name="快递服务类型") webapp_id = models.CharField(max_length=20, default='', db_index=True, verbose_name='店铺ID') # webapp class Meta(object): db_table = 'tool_express_has_order_push_status' verbose_name = '订单的推送状态' verbose_name_plural = '订单的推送状态' @staticmethod def get(id): express = ExpressHasOrderPushStatus.objects.filter(id=id) if express.count() > 0: return express[0] else: return None @staticmethod def get_by_order(order): express = ExpressHasOrderPushStatus.objects.filter( express_company_name=order.express_company_name, express_number=order.express_number) if express.count() > 0: return express[0] else: return None
class News(models.Model): material = models.ForeignKey(Material) #素材外键 display_index = models.IntegerField() #显示顺序 title = models.CharField(max_length=40) #标题 summary = models.CharField(max_length=120) #摘要 text = models.TextField(default='') #正文 pic_url = models.CharField(max_length=1024) #图片url地址 url = models.CharField(max_length=1024) #目标地址 link_target = models.CharField(max_length=2048) #链接目标 is_active = models.BooleanField(default=True) #是否启用 created_at = models.DateTimeField(auto_now_add=True) #添加时间 is_show_cover_pic = models.BooleanField(default=True, verbose_name=u"是否在详情中显示封面图片") class Meta(object): db_table = 'material_news' verbose_name = '图文消息' verbose_name_plural = '图文消息'
class WeixinMpUser(models.Model): """ 微信公众账号 """ owner = models.ForeignKey(User, unique=True) username = models.CharField(default='', max_length=50) #用户名 password = models.CharField(default='', max_length=50) #密码 is_certified = models.BooleanField(default=False, verbose_name='是否进行过微信认证') is_service = models.BooleanField(default=False, verbose_name='是否为服务号') is_active = models.BooleanField(default=True) #公众号是否有效 aeskey = models.IntegerField(default=AESKEY_NORMAL) encode_aeskey = models.TextField(default='') created_at = models.DateTimeField(auto_now=True) #公众号添加的时间 def __unicode__(self): return self.username class Meta(object): db_table = 'account_weixin_mp_user'
class Svsmon(models.Model): """ 对运行时产生的log信息的封装 """ task_id = models.CharField(blank=False, max_length=64, db_index=True) pid = models.IntegerField() status = models.IntegerField(default=TASK_STATUS, db_index=True) task = models.CharField(max_length=512) task_name = models.CharField(null=True, max_length=512) # message = models.TextField() create_time = models.DateTimeField(auto_now_add=True) #TODO 根据数据量是否需要使用mongodb? #是否需要针对不同级别进行分开存储? # def save(self, *args, **kwargs): # self.save_base(*args, **kwargs) class Meta(object): verbose_name = 'Celery日志' verbose_name_plural = 'Celery日志'
class MemberGrade(models.Model): """ 会员等级 """ webapp_id = models.CharField(max_length=16, verbose_name='所关联的app id') name = models.TextField() is_auto_upgrade = models.BooleanField(default=False, verbose_name='是否凭经验值自动升级') upgrade_lower_bound = models.IntegerField(default=0, verbose_name='该等级的经验值下限') shop_discount = models.IntegerField(default=100, verbose_name='购物折扣') is_default_grade = models.BooleanField(default=False) usable_integral_percentage_in_order = models.IntegerField(verbose_name='一笔交易中能使用的多少积分', default=100) # -1 无限制 pay_money = models.FloatField(default=0.00) pay_times = models.IntegerField(default=0) integral = models.IntegerField(default=0) created_at = models.DateTimeField(auto_now_add=True) class Meta(object): db_table = 'member_grade' def __unicode__(self): return u"{}-{}".format(self.webapp_id, self.name)
class RedEnvelopeRule(models.Model): """ 红包规则 """ owner = models.ForeignKey(User) name = models.CharField(max_length=128) coupon_rule_id = models.IntegerField(default=0) limit_time = models.BooleanField(default=False) start_time = models.DateTimeField(default=DEFAULT_DATETIME) end_time = models.DateTimeField(default=DEFAULT_DATETIME) limit_order_money = models.DecimalField(default=0.0) use_info = models.TextField() share_title = models.CharField(max_length=256) share_pic = models.CharField(max_length=256) is_delete = models.BooleanField(default=False) status = models.BooleanField(default=False) #状态默认关闭 receive_method = models.BooleanField(default=False) #领取方式默认为下单领取 order_index = models.IntegerField(default=0) #记录排序,置后为-1 created_at = models.DateTimeField(auto_now_add=True) class Meta(object): db_table = 'mall_red_envelope_rule'