newmediamonitoring/dashboard/models.py

620 lines
24 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.

import uuid
from django.contrib.auth.models import User
from django.db import models
# 权限等级
class Level(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
name = models.CharField('等级名', max_length=256, null=True, blank=True)
level = models.IntegerField('级别', blank=True, null=True, default=0)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.name
class Group_type(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
type = models.CharField('矩阵类型', max_length=256, null=True, blank=True)
def __str__(self):
return self.type
# 矩阵
class Group(models.Model):
GROUP_CLASSIFY_CHOICES = (
('0', '区域'),
('1', '媒体种类'),
('2', '行业'),
)
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
name = models.CharField('矩阵名称', max_length=256, null=True, blank=True)
presentation = models.TextField('矩阵描述', null=True, blank=True)
image = models.FileField(upload_to='groupimage', null=True, blank=True)
type = models.ForeignKey(
Group_type, on_delete=models.CASCADE, null=True, blank=True)
status = models.IntegerField(
'状态', null=True, blank=True, default=0)
province = models.CharField('', max_length=256, null=True, blank=True)
cities = models.CharField('', max_length=256, null=True, blank=True)
district = models.CharField('', max_length=256, null=True, blank=True)
town = models.CharField('', max_length=256, null=True, blank=True)
village = models.CharField('', max_length=256, null=True, blank=True)
classify = models.CharField(
'分类', max_length=256, null=True, blank=True, choices=GROUP_CLASSIFY_CHOICES)
user = models.ForeignKey(
User, on_delete=models.CASCADE, blank=True, null=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def total_user(self):
return self.group_user_set.count()
def __str__(self):
return self.name
# 矩阵管理员
class Group_admin(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
user = models.ForeignKey(
User, on_delete=models.CASCADE, null=True, blank=True)
group = models.ForeignKey(
Group, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.group.name
# 矩阵成员
class Group_user(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
user = models.ForeignKey(
User, on_delete=models.CASCADE, null=True, blank=True)
group = models.ForeignKey(
Group, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.user.username
# 单位类型
class Organizationtype(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
organizationtype = models.CharField(
'单位类型', blank=True, null=True, max_length=256)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.organizationtype
# 单位
class Organization(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
name = models.CharField('单位名', max_length=256, null=True, blank=True)
image = models.FileField(upload_to='cover', null=True, blank=True)
# organizationtype = models.ForeignKey(
# Organizationtype, on_delete=models.CASCADE, null=True, blank=True)
province = models.CharField('', max_length=256, null=True, blank=True)
cities = models.CharField('', max_length=256, null=True, blank=True)
district = models.CharField('', max_length=256, null=True, blank=True)
town = models.CharField('', max_length=256, null=True, blank=True)
village = models.CharField('', max_length=256, null=True, blank=True)
level = models.ForeignKey(
Level, on_delete=models.CASCADE, null=True, blank=True)
directly = models.CharField('单位类型', max_length=256, null=True, blank=True)
status = models.CharField('状态', max_length=256, null=True, blank=True)
#20201014新添加字段
id_code = models.CharField('单位唯一标识码',max_length=256,null=True,blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
class Meta:
ordering = ["name"]
def __str__(self):
return self.name
# 扩展用户表
class Userprofile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField('姓名', null=True, blank=True, max_length=256)
sex = models.CharField('性别', null=True, blank=True, max_length=256)
unit = models.CharField('自己输入单位', null=True, blank=True, max_length=256)
department = models.CharField('部门', null=True, blank=True, max_length=256)
post = models.CharField('职务', null=True, blank=True, max_length=256)
image = models.FileField(upload_to='profile', null=True, blank=True)
organization = models.ForeignKey(
Organization, on_delete=models.CASCADE, null=True, blank=True)
# 用户状态:注册进来默认为0为未审核状态审核后status=1
status = models.IntegerField('用户状态', null=True, blank=True, default=0)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
class Meta:
ordering = ["-created"]
def is_level1(self):
return self.organization.level.level == 1
def is_level2(self):
return self.organization.level.level == 2
@classmethod
def level2_admin(cls, cities):
return Userprofile.objects.filter(organization__level__level=2, organization__cities=cities)
@classmethod
def level1_admin(cls):
return Userprofile.objects.filter(organization__level__level=1)
def __str__(self):
return self.user.username+":"+self.name
def create_user_profile(sender, instance, created, **kwargs):
"""Create the UserProfile when a new User is saved"""
if created:
profile = Userprofile()
profile.user = instance
profile.save()
class NewMedia(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
code = models.CharField('微信公众号', max_length=256, null=True, blank=True)
alias = models.CharField('别名', max_length=256, null=True, blank=True)
image = models.FileField(
upload_to='cover/%Y/%m/%d/', null=True, blank=True)
organization = models.ForeignKey(
Organization, on_delete=models.CASCADE, null=True, blank=True)
status = models.IntegerField(
'状态', null=True, blank=True, default=0)
attention = models.CharField('关注量', null=True, blank=True, max_length=256)
remark = models.CharField('备注', null=True, blank=True, max_length=2560)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
#20201015新增字段
identificationcode = models.CharField('新媒体标识码',max_length=256,null=True,blank=True)
function = models.CharField('功能',max_length=256,null=True,blank=True)
articleurl = models.TextField('文章URL',null=True,blank=True)
class Meta:
abstract = True
ordering = ["-created"]
@classmethod
def category_one_count(cls):
t1 = Weixin.objects.exclude(
organization__province=''
).filter(
organization__cities='',
organization__district=''
).count()
t2 = Weibo.objects.exclude(
organization__province=''
).filter(
organization__cities='',
organization__district=''
).count()
t3 = Toutiao.objects.exclude(
organization__province=''
).filter(
organization__cities='',
organization__district=''
).count()
t4 = Douyin.objects.exclude(
organization__province=''
).filter(
organization__cities='',
organization__district=''
).count()
t5 = Qita.objects.exclude(
organization__province=''
).filter(
organization__cities='',
organization__district=''
).count()
return t1 + t2 + t3 + t4 + t5
@classmethod
def category_two_count(cls):
t1 = Weixin.objects.exclude(
organization__province='',
organization__cities=''
).filter(
organization__district=''
).count()
t2 = Weibo.objects.exclude(
organization__province='',
organization__cities=''
).filter(
organization__district=''
).count()
t3 = Toutiao.objects.exclude(
organization__province='',
organization__cities=''
).filter(
organization__district=''
).count()
t4 = Douyin.objects.exclude(
organization__province='',
organization__cities=''
).filter(
organization__district=''
).count()
t5 = Qita.objects.exclude(
organization__province='',
organization__cities=''
).filter(
organization__district=''
).count()
return t1 + t2 + t3 + t4 + t5
@classmethod
def category_three_count(cls):
t1 = Weixin.objects.exclude(
organization__province='',
organization__cities='',
organization__district=''
).count()
t2 = Weibo.objects.exclude(
organization__province='',
organization__cities='',
organization__district=''
).count()
t3 = Toutiao.objects.exclude(
organization__province='',
organization__cities='',
organization__district=''
).count()
t4 = Douyin.objects.exclude(
organization__province='',
organization__cities='',
organization__district=''
).count()
t5 = Qita.objects.exclude(
organization__province='',
organization__cities='',
organization__district=''
).count()
return t1 + t2 + t3 + t4 + t5
@classmethod
def media_list(cls, organization_id):
weixin = Weixin.objects.filter(
organization_id=organization_id).exclude(status=0)
weibo = Weibo.objects.filter(
organization_id=organization_id).exclude(status=0)
toutiao = Toutiao.objects.filter(
organization_id=organization_id).exclude(status=0)
douyin = Douyin.objects.filter(
organization_id=organization_id).exclude(status=0)
qita = Qita.objects.filter(
organization_id=organization_id).exclude(status=0)
results = []
for o in weixin:
result = dict()
result['id'] = o.id
result['code'] = o.code
result['alias'] = o.alias
result['status'] = o.status
result['type'] = 'weixin'
results.append(result)
for o in weibo:
result = dict()
result['id'] = o.id
result['code'] = o.code
result['alias'] = o.alias
result['status'] = o.status
result['type'] = 'weibo'
results.append(result)
for o in toutiao:
result = dict()
result['id'] = o.id
result['code'] = o.code
result['alias'] = o.alias
result['status'] = o.status
result['type'] = 'toutiao'
results.append(result)
for o in douyin:
result = dict()
result['id'] = o.id
result['code'] = o.code
result['alias'] = o.alias
result['status'] = o.status
result['type'] = 'douyin'
results.append(result)
for o in qita:
result = dict()
result['id'] = o.id
result['code'] = o.code
result['alias'] = o.alias
result['status'] = o.status
result['type'] = 'qita'
results.append(result)
return results
def __str__(self):
return self.code + ':' + self.alias
# 微信公众号
class Weixin(NewMedia):
weixinid = models.CharField('微信ID', max_length=256, null=True, blank=True)
# 微信文章采集
class Weixin_data(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
title = models.CharField('文章标题', max_length=256, null=True, blank=True)
site = models.CharField('位置', max_length=256, null=True, blank=True)
year = models.CharField('', max_length=256, null=True, blank=True)
month = models.CharField('', max_length=256, null=True, blank=True)
day = models.CharField('', max_length=256, null=True, blank=True)
original = models.BooleanField('是否原创', null=True, blank=True)
url = models.CharField('文章链接', max_length=256, null=True, blank=True)
author = models.CharField('作者', max_length=256, null=True, blank=True)
comment = models.CharField('评论数', max_length=256, null=True, blank=True)
reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
content = models.TextField('正文', null=True, blank=True)
weixin = models.ForeignKey(
Weixin, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.title
# 微信评论
class Weixin_comment(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
comment = models.TextField('评论', null=True, blank=True)
user = models.CharField('用户', max_length=256, null=True, blank=True)
reply = models.TextField('回复', null=True, blank=True)
weixin = models.ForeignKey(
Weixin, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.user
# 微信错别字
class Weixin_Wrong(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
idea = models.CharField('建议', max_length=256, null=True, blank=True)
site = models.CharField('位置', max_length=256, null=True, blank=True)
weixin = models.ForeignKey(
Weixin, on_delete=models.CASCADE, null=True, blank=True)
change = models.BooleanField('是否已修改', null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.wrong
# 微博
class Weibo(NewMedia):
weiboid = models.CharField('微博ID', max_length=256, null=True, blank=True)
# 微博文章采集
class Weibo_data(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
weiboid = models.CharField('微博ID', max_length=256, null=True, blank=True)
content = models.TextField('正文', null=True, blank=True)
url = models.CharField('文章url', max_length=256, null=True, blank=True)
originalimageurl = models.CharField(
'原始图片url', max_length=256, null=True, blank=True)
transpondimageurl = models.CharField(
'转发图片url', max_length=256, null=True, blank=True)
original = models.BooleanField('是否原创', null=True, blank=True)
site = models.CharField('发布位置', max_length=256, null=True, blank=True)
year = models.CharField('', max_length=256, null=True, blank=True)
month = models.CharField('', max_length=256, null=True, blank=True)
day = models.CharField('', max_length=256, null=True, blank=True)
tool = models.CharField('发布工具', max_length=256, null=True, blank=True)
like = models.CharField('点赞数', max_length=256, null=True, blank=True)
transpond = models.CharField('转发数', max_length=256, null=True, blank=True)
comment = models.CharField('评论数', max_length=256, null=True, blank=True)
title = models.CharField('文章标题', max_length=256, null=True, blank=True)
weibo = models.ForeignKey(
Weibo, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.title
# 微博错别字
class Weibo_Wrong(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
idea = models.CharField('建议', max_length=256, null=True, blank=True)
site = models.CharField('位置', max_length=256, null=True, blank=True)
weibo = models.ForeignKey(
Weibo, on_delete=models.CASCADE, null=True, blank=True)
change = models.BooleanField('是否已修改', null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
# 今日头条
class Toutiao(NewMedia):
toutiaoid = models.CharField('头条ID', max_length=256, null=True, blank=True)
# 今日头条数据
class Toutiao_data(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
title = models.CharField('标题', max_length=256, null=True, blank=True)
url = models.CharField('链接', max_length=256, null=True, blank=True)
img = models.CharField('缩略图', max_length=256, null=True, blank=True)
count = models.CharField('阅读数', max_length=256, null=True, blank=True)
commentcount = models.CharField(
'评论数', max_length=256, null=True, blank=True)
reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
year = models.CharField('', max_length=256, null=True, blank=True)
month = models.CharField('', max_length=256, null=True, blank=True)
day = models.CharField('', max_length=256, null=True, blank=True)
content = models.TextField('正文', null=True, blank=True)
comment = models.TextField('评论', null=True, blank=True)
toutiao = models.ForeignKey(
Toutiao, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.title
# 今日头条评论
class Toutiao_comment(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
comment = models.TextField('评论', null=True, blank=True)
user = models.CharField('用户', max_length=256, null=True, blank=True)
reply = models.TextField('回复', null=True, blank=True)
toutiao = models.ForeignKey(
Toutiao, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.user
# 今日头条错别字
class Toutiao_Wrong(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
idea = models.CharField('建议', max_length=256, null=True, blank=True)
site = models.CharField('位置', max_length=256, null=True, blank=True)
toutiao = models.ForeignKey(
Toutiao, on_delete=models.CASCADE, null=True, blank=True)
change = models.BooleanField('是否已修改', null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.wrong
# 抖音
class Douyin(NewMedia):
douyinid = models.CharField('抖音ID', max_length=256, null=True, blank=True)
# 抖音数据
class Douyin_data(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
mewnedia = models.ForeignKey(Douyin, on_delete=models.CASCADE)
count = models.CharField('总发文量', max_length=256, null=True, blank=True)
count_jc = models.CharField(
'监测时间内发文量', max_length=256, null=True, blank=True)
comment = models.CharField('评论数', max_length=256, null=True, blank=True)
reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
date = models.DateField('最近发文日期', max_length=256, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.mewnedia.code
# 其他新媒体
class Qita(NewMedia):
type = models.CharField('新媒体类型', max_length=256, null=True, blank=True)
qitaid = models.CharField('新媒体ID', max_length=256, null=True, blank=True)
def __str__(self):
return self.qitaid
# 其他新媒体监测
class Qita_jc(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
mewnedia = models.ForeignKey(Qita, on_delete=models.CASCADE)
count = models.CharField('总发文量', max_length=256, null=True, blank=True)
count_jc = models.CharField(
'监测时间内发文量', max_length=256, null=True, blank=True)
comment = models.CharField('评论数', max_length=256, null=True, blank=True)
reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
date = models.DateField('最近发文日期', max_length=256, null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('更新时间', auto_now=True)
def __str__(self):
return self.mewnedia.name
# 5级地名库
class Area_code_2020(models.Model):
code = models.CharField('区划代码', max_length=256, null=True, blank=True)
name = models.CharField('名称', max_length=256, null=True, blank=True)
level = models.CharField(
'级别1-5,省市县镇村', max_length=256, null=True, blank=True)
pcode = models.CharField('父级区划代码', max_length=256, null=True, blank=True)
def __str__(self):
return self.name
class Meta:
ordering = ["code"]
# 新闻
class News(models.Model):
NEWMEDIA_NEWS_CHOICES = (
('0', '政策依据'),
('1', '基层动态'),
('2', '外省动态'),
('3', '监测通报'),
('4', '舆情热点'),
('5', '通知'),
('6', '重点新闻'),
)
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
type = models.CharField('文章类型', max_length=256, null=True,
blank=True, choices=NEWMEDIA_NEWS_CHOICES)
source = models.CharField('文章来源', max_length=256, null=True, blank=True)
title = models.CharField('文章标题', max_length=256, null=True, blank=True)
image = models.FileField(
upload_to='news/%Y/%m/%d/', null=True, blank=True)
author = models.CharField('作者', max_length=256, null=True, blank=True)
date = models.DateField('发表日期', null=True, blank=True, max_length=256)
content = models.TextField('内容', null=True, blank=True)
def __str__(self):
return self.title
#手机验证码验证表
class CheckCode(models.Model):
phone_code = models.CharField('手机验证码',max_length=256,null=True,blank=True)
phone = models.CharField('电话号',max_length=256,null=True,blank=True)
c_time =models.DateTimeField('时间', auto_now_add=True)