# -*- coding: utf-8 -*- from django.db import models import django.utils.timezone as timezone from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import Group, GroupManager import datetime # one_year = datetime.timedelta(days=365) # one_year_later = datetime.datetime.now() + one_year # 自定义用户组: class User_Group(Group): role_describe = models.CharField(u'角色描述', max_length=50, null=True, blank=True) role_cre_time = models.DateTimeField(u'角色添加时间', default=timezone.now) role_cre_user = models.CharField(u'角色创建者', max_length=20,null=True, blank=True) role_logo = models.ImageField(u'首页logo', upload_to="home_logo/", default="/home_logo/default_logo.png") role_footer = models.TextField(u'首页footer信息', max_length=200, default="Copyright©2007-2018 All Rrights Resvered 版权所有:河南云飞科技发展有限公司") # role_header = models.TextField(u'首页footer信息', max_length=200, default="") class Meta: verbose_name = u'用户组列表' verbose_name_plural = verbose_name # def __str__(self): # return self.name # logo表 class Logo(models.Model): role_describe = models.CharField(u'角色描述', max_length=50, null=True, blank=True) role_cre_time = models.DateTimeField(u'角色添加时间', default=timezone.now) role_cre_user = models.CharField(u'角色创建者', max_length=20,null=True, blank=True) role_logo = models.ImageField(u'首页logo', upload_to="home_logo/", default="/home_logo/default_logo.png") role_footer = models.TextField(u'首页footer信息', max_length=200, default="Copyright©2007-2019 All Rrights Resvered 版权所有:河南云飞科技发展有限公司") role_header = models.TextField(u'首页header信息', max_length=200, default=" ") class Meta: verbose_name = u'logo列表' verbose_name_plural = verbose_name def __str__(self): return self.role_describe # # 经销商列表 # class Agency(models.Model): # agency_name = models.CharField(u'经销商名字',max_length=50,null=True,blank=True) # agency_desc = models.CharField(u'经销商描述',max_length=100,null=True,blank=True) # def __str__(self): # return self.agency_name # class Meta: # verbose_name = u'经销商列表' # verbose_name_plural = verbose_name # 继承AbstractUser类 class MyUser(AbstractUser): USER_RANK_CHOICES = { 1: '省级', 2: '市级', 3: '县区级', } user_remark = models.TextField(u'用户备注', max_length=200, blank=True) user_rank = models.SmallIntegerField( u'用户级别', default=1, choices=USER_RANK_CHOICES.items()) user_phone = models.CharField(u'用户手机', max_length=16, blank=True) user_picture = models.ImageField(u'用户头像', upload_to="user_photo/", default="user_photo/default.png") base_name = models.CharField(u'基地名称', max_length=50, blank=True, null=True) base_show = models.ImageField(u'基地展示', upload_to="base_show/", default="base_show/default.png") user_pro = models.CharField(u'用户省', max_length=50, blank=True) user_city = models.CharField(u'用户市', max_length=50, blank=True) user_area = models.CharField(u'用户区', max_length=50, blank=True) user_agency = models.ForeignKey(User_Group,null=True,blank=True,verbose_name=u'用户所属经销商') user_header = models.CharField(u'页面标题展示', max_length=50, blank=True) is_agency = models.BooleanField(u'是否为经销商',default=False) # expire_date = models.DateTimeField(u'账号到期时间', null=True, blank=True, default=one_year_later) expire_date = models.DateTimeField(u'账号到期时间', null=True, blank=True) user_logo = models.ForeignKey(Logo,null=True,blank=True,verbose_name=u'用户使用的Logo') # 用户组: # user_group = models.ManyToManyField(User_Group,blank=True, null=True, verbose_name=u'用户所属组') class Meta: verbose_name = u'用户列表' verbose_name_plural = verbose_name ordering = ['-date_joined'] get_latest_by = 'date_joined' # def __str__(self): # return self.user_remark # 用户操作日志: class User_Log(models.Model): # log_user = models.ForeignKey(MyUser,verbose_name=u'用户名', blank=True, null=True) log_user = models.CharField(u'用户名', max_length=50, null=True, blank=True) log_time = models.DateTimeField(u'操作时间', default=timezone.now) log_ip = models.CharField(u'IP地址', max_length=100, null=True, blank=True) log_desc = models.CharField(u'操作描述', max_length=100, null=True, blank=True) def __str__(self): return self.log_user class Meta: verbose_name = u'用户操作日志表' verbose_name_plural = verbose_name ordering = ['-log_time'] get_latest_by = 'log_time' # 设备类型列表: class Equip_type(models.Model): type_id = models.PositiveIntegerField(u'设备类型编号', primary_key=True) type_name = models.CharField(u'设备类型名称', max_length=50, blank=True) type_add_time = models.DateTimeField(u'设备类型添加时间', default=timezone.now) topic_name = models.CharField(u'主题简称', max_length=10, blank=True) def __str__(self): return self.type_name class Meta: verbose_name = u"设备类型表" verbose_name_plural = verbose_name ordering = ['-type_add_time'] get_latest_by = 'type_add_time' # 设备列表: class Equip(models.Model): equip_id = models.CharField(u'设备id', max_length=30, primary_key=True) equip_user = models.ForeignKey( MyUser, blank=True, null=True, verbose_name=u'设备用户') equip_type = models.ForeignKey( Equip_type, blank=True, null=True, verbose_name=u'设备类型') equip_name = models.CharField(u'设备名称', max_length=100, blank=True) equip_add_time = models.DateTimeField(u'设备添加时间', default=timezone.now) equip_allot_user = models.CharField( u'设备分配者id', blank=True, null=True, max_length=50) equip_sn = models.CharField(u'设备授权码', blank=True, null=True, max_length=50) # 位置字段: equip_location = models.CharField(u'设备位置', max_length=150, blank=True) # equip_iccid = models.CharField(u'SIM卡iccid', max_length=50, blank=True) equip_agency = models.ForeignKey(User_Group,null=True,blank=True,verbose_name=u'设备所属经销商') equip_desc = models.CharField(u'设备状态', max_length=5, blank=True,null=True) scene = models.CharField(u'设备场景', max_length=5, blank=True,null=True) # 1 小麦玉米 2 水稻 3 果园茶园 # old_eid = models.CharField(u'原始设备id', max_length=30, blank=True,null=True) # 此字段针对对接设备,非对接设备默认为空 # 默认为手动添加 添加格式为 http://192.168.1.1#1 其中#后面的数字判断是否需要发送害虫识别结果 ftp_addr = models.TextField(u'设备对接外部ip地址', blank=True, null=True) def __str__(self): return self.equip_id class Meta: verbose_name = u"设备列表" verbose_name_plural = verbose_name ordering = ['-equip_add_time'] get_latest_by = 'equip_add_time' permissions = ( ("can_see_scd", "Can see scd"), ("can_see_cbd", "Can see cbd"), ("can_see_ybq", "Can see ybq"), ("can_see_tccb", "Can see tccb"), ("can_see_qxz", "Can see qxz"), ("can_see_jk", "Can see jk"), ("can_see_bzy", "Can see bzy"), ("can_see_xyq", "Can see xyq"), ("can_see_alarm", "Can see alarm"), ("can_see_vr", "Can see vr"), ("ykm_hl", "ykm hl"), # 依科曼何磊定制菜单权限 ) # 杀虫灯状态: class SCDstatus(models.Model): equip_id = models.ForeignKey(Equip, blank=True) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机 scd_status = models.TextField(u'杀虫灯状态', blank=True, null=True) paramconf = models.TextField(u'设备参数配置', blank=True, null=True) serverconf = models.TextField(u'服务器配置', blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True) lat = models.CharField(u'维度', max_length=50, blank=True) # 位置字段: equip_location = models.CharField(u'设备位置', max_length=150, blank=True) # def __str__(self): # return (self.equip_id) class Meta: verbose_name = u"杀虫灯-状态表" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 杀虫灯状态全部数据: class SCDstatus_all(models.Model): equip_id = models.ForeignKey(Equip, blank=True) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机 scd_status = models.TextField(u'杀虫灯状态', blank=True, null=True) paramconf = models.TextField(u'设备参数配置', blank=True, null=True) serverconf = models.TextField(u'服务器配置', blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True) lat = models.CharField(u'维度', max_length=50, blank=True) # 位置字段: equip_location = models.CharField(u'设备位置', max_length=150, blank=True) # def __str__(self): # return (self.equip_id) class Meta: verbose_name = u"杀虫灯-状态表-全部" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 杀虫灯数据表: class SCDdata(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'上报时间', default=timezone.now) scd_data = models.TextField(u'杀虫灯数据', blank=True, null=True) ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机 # def __str__(self): # return self.equip_id class Meta: verbose_name = u'杀虫灯-数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 杀虫灯最新数据表 class RecentSCDdata(models.Model): equip_id = models.ForeignKey(Equip) equip_name = models.CharField(u'设备名称', max_length=100, blank=True) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) scd_data = models.TextField(u'杀虫灯数据',blank=True,null=True) ds = models.CharField(u'设备开关',max_length=5,blank=True) # 设备开关 0 关机, 1 开机 class Meta: verbose_name = u'杀虫灯-最新数据表' verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 测报灯RTU状态: class RTUstatus(models.Model): equip_id = models.ForeignKey(Equip, blank=True) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) rtu_status = models.TextField(u'rtu状态', blank=True, null=True) # def __str__(self): # return (self.equip_id) class Meta: verbose_name = u"RTU-状态表" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 测报灯RTU数据表: class RTUdata(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'上报时间', default=timezone.now) rtu_data = models.TextField(u'rtu数据', blank=True, null=True) # def __str__(self): # return self.equip_id class Meta: verbose_name = u'RTU-数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 诱捕器状态: class YBQstatus(models.Model): equip_id = models.ForeignKey(Equip, blank=True) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) pest_name = models.CharField(u'监测害虫名称', max_length=10, blank=True,null=True) equip_code = models.CharField(u'设备编码', max_length=10, blank=True,null=True) sex_type = models.CharField(u'性诱类型', max_length=20, blank=True,null=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机 ybq_status = models.TextField(u'诱捕器状态', blank=True, null=True) paramconf = models.TextField(u'设备参数配置', blank=True, null=True) serverconf = models.TextField(u'服务器配置', blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True) lat = models.CharField(u'维度', max_length=50, blank=True) # 位置字段: equip_location = models.CharField(u'设备位置', max_length=150, blank=True) # def __str__(self): # return (self.equip_id) class Meta: verbose_name = u"诱捕器-状态表" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 诱捕器数据表: class YBQdata(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'上报时间', default=timezone.now) equip_code = models.CharField(u'设备编码', max_length=10, blank=True,null=True) ybq_data = models.TextField(u'诱捕器数据', blank=True, null=True) ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机 # def __str__(self): # return self.equip_id class Meta: verbose_name = u'诱捕器-数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # # 智能性诱图片 # class Sex_Trap_Photo(models.Model): # equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') # upl_time = models.DateTimeField(u'上传时间', default=timezone.now) # addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True) # # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量 # describe = models.TextField(u'描述', blank=True, null=True) # def __str__(self): # return self.addr # class Meta: # verbose_name = u'性诱设备-照片列表' # verbose_name_plural = verbose_name # ordering = ['-upl_time'] # get_latest_by = 'upl_time' # 诱捕器照片记录: class YBQphoto(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') upl_time = models.DateTimeField(u'上传时间', default=timezone.now) addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True) # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量 describe = models.TextField(u'描述', blank=True, null=True) real_time = models.DateTimeField(u'入库时间', default=timezone.now) def __str__(self): return self.addr class Meta: verbose_name = u'诱捕器-照片列表' verbose_name_plural = verbose_name ordering = ['-real_time'] get_latest_by = 'real_time' # 糖醋测报状态: class TCCBstatus(models.Model): equip_id = models.ForeignKey(Equip, blank=True) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) tccb_status = models.TextField(u'糖醋测报状态', blank=True, null=True) paramconf = models.TextField(u'设备参数配置', blank=True, null=True) serverconf = models.TextField(u'服务器配置', blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True) lat = models.CharField(u'维度', max_length=50, blank=True) # 位置字段: equip_location = models.CharField(u'设备位置', max_length=150, blank=True) # def __str__(self): # return (self.equip_id) class Meta: verbose_name = u"糖醋测报-状态表" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 糖醋测报状态: class TCCBdata(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'上报时间', default=timezone.now) tccb_data = models.TextField(u'糖醋测报数据', blank=True, null=True) # def __str__(self): # return self.equip_id class Meta: verbose_name = u'糖醋测报-数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 糖醋测报照片记录: class TCCBphoto(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') upl_time = models.DateTimeField(u'上传时间', default=timezone.now) addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True) # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量 describe = models.TextField(u'描述', blank=True, null=True) def __str__(self): return self.addr class Meta: verbose_name = u'糖醋测报-照片列表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 测报灯状态: class CBDstatus(models.Model): equip_id = models.ForeignKey(Equip) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) etype = models.CharField(u'测报灯类型', max_length=30, blank=True,null=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) cbd_status = models.TextField(u'测报灯状态', blank=True, null=True) paramconf = models.TextField(u'设备参数配置', blank=True, null=True) serverconf = models.TextField(u'服务器配置', blank=True, null=True) rtuinfo = models.TextField(u'rtu信息', blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True,null=True) lat = models.CharField(u'纬度', max_length=50, blank=True,null=True) old_eid = models.CharField(u'原始设备id', max_length=30, blank=True,null=True) # 位置字段: equip_location = models.CharField(u'设备位置', max_length=150, blank=True) # 绑定sim卡 simid = models.CharField(u'设备sim卡', max_length=50, blank=True, null=True) # def __str__(self): # return (self.equip_id) class Meta: verbose_name = u"测报灯-状态表" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 测报灯状态全部数据: class CBDstatus_all(models.Model): equip_id = models.ForeignKey(Equip) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) cbd_status = models.TextField(u'测报灯状态', blank=True, null=True) paramconf = models.TextField(u'设备参数配置', blank=True, null=True) serverconf = models.TextField(u'服务器配置', blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True,null=True) lat = models.CharField(u'维度', max_length=50, blank=True,null=True) # 位置字段: equip_location = models.CharField(u'设备位置', max_length=150, blank=True) # def __str__(self): # return (self.equip_id) class Meta: verbose_name = u"测报灯-状态表-全部" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 测报灯数据记录: class CBDdata(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) cbd_data = models.TextField(u'测报灯数据', blank=True, null=True) # def __str__(self): # return self.equip_name class Meta: verbose_name = u'测报灯-数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 测报灯最新数据记录: class RecentCBDdata(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') equip_name = models.CharField(u'设备名称', max_length=100, blank=True) etype = models.CharField(u'测报灯类型', max_length=30, blank=True,null=True) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) cbd_data = models.TextField(u'测报灯数据', blank=True, null=True) scene = models.CharField(u'设备场景', max_length=5, blank=True,null=True) # 1 小麦玉米 2 水稻 3 果园茶园 discern = models.BooleanField(u'害虫识别功能',default=False) # 害虫识别 0为带有识别功能 1为 无识别功能 # 识别按钮不存在 查看统计为手动统计界面----------0 # 识别按钮存在 查看统计为自动统计界面------------1 # 识别按钮不存在 查看统计为自动统计界面(有计数功能)-------------2 disc = models.CharField(u'是否有识别功能', max_length=5,default=1) # def __str__(self): # return self.equip_name class Meta: verbose_name = u'测报灯-最新数据表' verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 萤石token表 class JKtoken(models.Model): account = models.CharField(u'账号', max_length=30, blank=True, null=True) token = models.CharField(u'token', max_length=80, blank=True, null=True) # 七天有效期 upl_time = models.DateTimeField(u'监控token获取时间', default=timezone.now) class Meta: verbose_name = u'监控-token表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 监控设备token表 class JKdata(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) upl_time = models.DateTimeField(u'监控token获取时间', default=timezone.now) # 萤石云accesstoken一周过期 jk_token = models.TextField(u'监控设备所需token', blank=True, null=True) jk_type = models.CharField(u'监控设备类型', max_length=10, blank=True, null=True) class Meta: verbose_name = u'监控-数据表' verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 监控定时拍照照片表: class JKphoto(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') upl_time = models.DateTimeField(u'上传时间', default=timezone.now) addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True) # 用户自定义添加:孢子识别结果 describe = models.TextField(u'描述', blank=True, null=True) class Meta: verbose_name = u'监控-照片列表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 测报灯照片记录: class CBDphoto(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') upl_time = models.DateTimeField(u'上传时间', default=timezone.now) addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True) at = models.CharField(u'环境温度', max_length=50, blank=True, null=True) ah = models.CharField(u'环境湿度', max_length=50, blank=True, null=True) # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量 describe = models.TextField(u'描述', blank=True, null=True) indentify_photo = models.CharField(u'识别照片路径', max_length=200, blank=True, null=True) indentify_result = models.TextField(u'识别结果', blank=True, null=True) def __str__(self): return self.addr class Meta: verbose_name = u'测报灯-照片列表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 测报灯害虫种类表: class CBDpest(models.Model): user = models.ForeignKey(MyUser,verbose_name=u'害虫所属用户', blank=True, null=True) pest_add_time = models.DateTimeField(u'添加时间', default=timezone.now) pest_name = models.CharField(u'害虫名称', max_length=50) def __str__(self): return self.pest_name class Meta: verbose_name = u'测报灯-害虫列表' verbose_name_plural = verbose_name # 测报灯照片描述: class CBDphoto_desc(models.Model): equip_id = models.CharField(u'对应的设备id', max_length=50, blank=True, null=True) photo_id = models.ForeignKey(CBDphoto, blank=True, null=True, verbose_name=u'照片ID') desc_user = models.ForeignKey(MyUser,verbose_name=u'添加描述的用户', blank=True, null=True) add_time = models.DateTimeField(u'添加时间', default=timezone.now) # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量 crop_name = models.CharField(u'作物名称', max_length=20,blank=True, null=True) pest_case = models.CharField(u'虫害情况', max_length=30,blank=True, null=True) pest_name = models.ForeignKey(CBDpest, blank=True, null=True, verbose_name=u'害虫名称') pest_name2 = models.CharField(u'害虫名称2', max_length=30,blank=True, null=True) # pest_sex = models.TextField(u'害虫雌雄', max_length=10, blank=True, null=True) pest_num = models.CharField(u'害虫数量', max_length=10, blank=True, null=True) photo_time = models.CharField(u'对应的照片时间', max_length=50, blank=True, null=True) photo_time1 = models.DateTimeField(u'对应照片时间',blank=True, null=True) # def __str__(self): # return self.equip_name class Meta: verbose_name = u'测报灯-照片描述表' verbose_name_plural = verbose_name # 测报灯可升级版本: class CBDupdate(models.Model): num = models.CharField(u'序号', max_length=50, blank=True) desc = models.CharField(u'描述', max_length=20, blank=True) dver = models.CharField(u'版本号', max_length=50, blank=True) upl_time = models.DateTimeField(u'上传时间', default=timezone.now) # def __str__(self): # return self.equip_name class Meta: verbose_name = u'测报灯-可升级版本' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # app反馈: class Fdb(models.Model): fdb_name = models.CharField(u'姓名', max_length=50, blank=True) fdb_phone = models.CharField(u'手机', max_length=20, blank=True) fdb_email = models.CharField(u'邮箱', max_length=50, blank=True) fdb_content = models.TextField(u'反馈内容') fdb_time = models.DateTimeField(u'反馈时间', default=timezone.now) fdb_rep_status = models.NullBooleanField(u'反馈回复状态', default=False) fdb_rep_time = models.DateTimeField(u'回复时间', default=timezone.now) fdb_rep_cont = models.TextField(u'回复内容', blank=True) def __str__(self): return self.fdb_name class Meta: verbose_name_plural = u"用户反馈表" # app轮播图: class App_pic(models.Model): app_pic_title = models.CharField(u'app轮播图描述', max_length=50, blank=True) app_pic = models.CharField(u'app轮播图地址', max_length=60, blank=True) # app轮播图链接类型;0:普通轮播图,1:外链 app_pic_type = models.CharField(u'链接类型', max_length=5, blank=True) # app轮播图: app_pic_content = models.ImageField() app_pic_order = models.CharField(u'轮播图顺序', max_length=10, blank=True) app_pic_cre_time = models.DateTimeField(u'上传时间', default=timezone.now) def __str__(self): return self.app_pic_title class Meta: verbose_name_plural = u"APP轮播图列表" # 气象设备数据记录: class QXdata(models.Model): # 设备数据上传时间: upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) equip_id = models.ForeignKey( Equip, blank=True, null=True, verbose_name=u'设备ID') # def __str__(self): # return self.equip_name class Meta: verbose_name = u'气象设备' verbose_name_plural = verbose_name # 专家诊断: class Diag(models.Model): diag_title = models.CharField(u'专家诊断标题', max_length=50, blank=True) diag_content = models.CharField(u'专家诊断内容', max_length=200, blank=True) diag_time = models.DateTimeField(u'专家诊断时间', default=timezone.now) diag_oper = models.CharField(u'专家诊断操作', max_length=200, blank=True) # def __str__(self): # return self.equip_name class Meta: verbose_name_plural = "专家诊断列表" # 帮助中心 = 帮助说明+问题反馈 # 帮助说明 class Help(models.Model): help_title = models.CharField(u'标题', max_length=50, blank=True) help_ask = models.CharField(u'问题', max_length=200, blank=True) help_answer = models.TextField(u'回答', null=True) help_edit_time = models.DateTimeField(u'编辑时间', default=timezone.now) def __str__(self): return self.help_title class Meta: verbose_name = u"帮助中心" verbose_name_plural = verbose_name # 问题反馈: class Problem(models.Model): prob_ask = models.CharField(u'问题', max_length=200, blank=True) prob_cre_time = models.DateTimeField(u'提问时间', default=timezone.now) prob_cre_people = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'提问者',related_name='prob_cre_people') prob_answer = models.TextField(u'回答', null=True) prob_answer_people = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'回答者',related_name='prob_answer_people') # prob_answer_people = models.CharField(u'回答者',blank=True,max_length=50,null=True) prob_cre_time = models.DateTimeField(u'回答时间', auto_now=True) def __str__(self): return self.prob_ask class Meta: verbose_name = u"问题列表" verbose_name_plural = verbose_name # 评论列表: class Comment(models.Model): problem = models.ForeignKey(Problem, blank=True, null=True, verbose_name=u'问题') comment_content = models.TextField(u'评论内容', null=True) comment_people = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'评论者') comment_time = models.DateTimeField(u'评论时间', default=timezone.now) # def __str__(self): # return self.comment_content class Meta: verbose_name = u"评论列表" verbose_name_plural = verbose_name # 气象设备预警范围设定: class QXalarmrange(models.Model): upl_time = models.DateTimeField(auto_now=True) ws = models.CharField(max_length=20, blank=True) at = models.CharField(max_length=20, blank=True) ah = models.CharField(max_length=20, blank=True) equip_id = models.ForeignKey(Equip) # def __str__(self): # return self.equip_type_name class Meta: verbose_name = u"气象设备预警范围" verbose_name_plural = verbose_name # 杀虫灯预警范围设定: class SCDalarmrange(models.Model): upl_time = models.DateTimeField(auto_now=True) cv = models.CharField(u'充电电压', max_length=20, blank=True) ci = models.CharField(u'充电电流', max_length=20, blank=True) equip_type_id = models.ForeignKey(Equip_type) # def __str__(self): # return self.equip_type.name class Meta: verbose_name = u"杀虫灯-预警范围" verbose_name_plural = verbose_name # 测报灯预警范围设定: class CBDalarmrange(models.Model): # 预警范围更新时间 upl_time = models.DateTimeField(auto_now=True) cv = models.CharField(max_length=20, blank=True) ci = models.CharField(max_length=20, blank=True) equip_type_id = models.ForeignKey(Equip_type) # def __str__(self): # return self.equip_type.name class Meta: verbose_name = u"测报灯-预警范围" verbose_name_plural = verbose_name # 预警列表: class Alarm_record(models.Model): equip_id = models.ForeignKey(Equip) e_type = models.CharField(u'设备类型编号', max_length=20, blank=True, null=True) alarm_time = models.DateTimeField(u'预警时间', default=timezone.now) alarm_desc = models.TextField(u'预警描述', blank=True, null=True) # def __str__(self): # return self.equip_name class Meta: verbose_name = u"预警列表" verbose_name_plural = verbose_name ordering = ['-alarm_time'] get_latest_by = 'alarm_time' # 测报灯短信配置表 class Msg_Conf(models.Model): equip_id = models.ForeignKey(Equip) conf = models.TextField(u'短信配置', blank=True, null=True) upl_time = models.DateTimeField(u'上报时间', auto_now=True) class Meta: verbose_name = u"测报灯短信配置表" verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 短信发送记录表: class Msg_Send(models.Model): mobile = models.CharField(u'手机号',max_length=20, blank=True) equip_id = models.CharField(u'设备号',max_length=20, blank=True) send_time = models.DateTimeField(u'发送时间', default=timezone.now) send_dec = models.CharField(u'发送内容',max_length=300, blank=True) result_desc = models.TextField(u'短信描述', blank=True, null=True) # def __str__(self): # return self.equip_name class Meta: verbose_name = u"短信发送记录表" verbose_name_plural = verbose_name ordering = ['-send_time'] get_latest_by = 'send_time' # 气象站短信预警 class QXZ_Alarm(models.Model): equip_id = models.ForeignKey(Equip) conf = models.TextField(u'短信配置', blank=True, null=True) tel = models.CharField(u'手机号',max_length=20, blank=True) upl_time = models.DateTimeField(u'上报时间', auto_now=True) class Meta: verbose_name = u"气象站短信预警" verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站短信预警记录 class QXZ_Alarm_Log(models.Model): equip_id = models.ForeignKey(Equip) logs = models.TextField(u'短信反馈', blank=True, null=True) ekey = models.CharField(u'通道号',max_length=20, blank=True) info = models.CharField(u'内容',max_length=20, blank=True) upl_time = models.DateTimeField(u'上报时间', default=timezone.now) class Meta: verbose_name = u"气象站短信预警记录" verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站基础信息表 class QXZ_Base_Info(models.Model): equip_id = models.ForeignKey(Equip) volt = models.CharField(u'电压', max_length=20, blank=True, null=True) rssi = models.CharField(u'信号强度', max_length=20, blank=True, null=True) iccid = models.CharField(u'设备卡号', max_length=50, blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True, null=True) lat = models.CharField(u'纬度', max_length=50, blank=True, null=True) led = models.CharField(u'led点阵屏', max_length=10, blank=True, null=True) ledinfo = models.CharField(u'led屏幕内容', max_length=100, blank=True, null=True) dver = models.CharField(u'设备版本号', max_length=100, blank=True, null=True) # is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) upl_time = models.DateTimeField(u'上报时间', auto_now=True) class Meta: verbose_name = u"气象站基础信息表" verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站基础信息表 class QXZ_Info_Record(models.Model): equip_id = models.ForeignKey(Equip) volt = models.CharField(u'电压', max_length=20, blank=True, null=True) rssi = models.CharField(u'信号强度', max_length=20, blank=True, null=True) # is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) upl_time = models.DateTimeField(u'上报时间', auto_now=True) class Meta: verbose_name = u"气象站信息历史" verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 值#enum#通道 # 新气象站配置表 class QXZ_Conf(models.Model): equip_id = models.ForeignKey(Equip) e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True) e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True) e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True) e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True) e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True) e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True) e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True) e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True) e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True) e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True) e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True) e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True) e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True) e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True) e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True) e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True) e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True) e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True) e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True) e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True) e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True) e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True) e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True) e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True) e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True) e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True) e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True) e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True) e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True) e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) class Meta: verbose_name = u'气象站标题配置' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 值#enum#通道 # 新气象站配置表 class QXZ_Default_Conf(models.Model): equip_id = models.ForeignKey(Equip) e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True) e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True) e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True) e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True) e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True) e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True) e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True) e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True) e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True) e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True) e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True) e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True) e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True) e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True) e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True) e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True) e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True) e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True) e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True) e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True) e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True) e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True) e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True) e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True) e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True) e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True) e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True) e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True) e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True) e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) class Meta: verbose_name = u'气象站标题默认配置' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 值#enum#通道 # 新气象站状态记录: class QXZstatus_New(models.Model): equip_id = models.ForeignKey(Equip) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True) e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True) e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True) e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True) e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True) e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True) e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True) e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True) e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True) e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True) e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True) e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True) e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True) e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True) e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True) e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True) e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True) e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True) e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True) e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True) e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True) e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True) e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True) e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True) e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True) e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True) e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True) e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True) e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True) e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True) lat = models.CharField(u'维度', max_length=50, blank=True) qxz_picture = models.ImageField(u'气象站图片', upload_to="qxz_photo/", default="qxz_photo/default.png") interval = models.CharField(u'设备数据上传时间间隔', max_length=30, blank=True, null=True) class Meta: verbose_name = u'气象站-状态表-新' verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 新气象站数据记录: # 新气象站全部数据记录 class QXZdata_New(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True) e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True) e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True) e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True) e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True) e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True) e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True) e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True) e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True) e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True) e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True) e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True) e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True) e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True) e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True) e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True) e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True) e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True) e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True) e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True) e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True) e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True) e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True) e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True) e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True) e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True) e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True) e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True) e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True) e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True) class Meta: verbose_name = u'气象站-数据表-新' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站状态: # 气象站最新数据记录 class QXZstatus(models.Model): equip_id = models.ForeignKey(Equip) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) qxz_status = models.TextField(u'气象站状态', blank=True, null=True) lng = models.CharField(u'经度', max_length=50, blank=True) lat = models.CharField(u'维度', max_length=50, blank=True) qxz_picture = models.ImageField(u'气象站图片', upload_to="qxz_photo/", default="qxz_photo/default.png") # qxz_picture = models.CharField(u'气象站图片', max_length=200, default="qxz_photo/default.png") class Meta: verbose_name = u"气象站-状态表" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 气象站数据记录: # 气象站全部数据记录 class QXZdata(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) qxz_data = models.TextField(u'气象站数据', blank=True, null=True) class Meta: verbose_name = u'气象站-数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站开关表 class QXZswitchstatus(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) qxz_switch = models.TextField(u'气象站开关', blank=True, null=True) class Meta: verbose_name = u'气象站-开关表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站开关配置表 class QXZswitchdata(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) qxz_switch_data = models.TextField(u'气象站开关名字', blank=True, null=True) class Meta: verbose_name = u'气象站-开关配置表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站阈值表 class QXZAutoswitch(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) qxz_auto = models.TextField(u'气象站阈值', blank=True, null=True) class Meta: verbose_name = u'气象站-阈值表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 气象站开关定时表 class QXZTimingswitch(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) qxz_timing = models.TextField(u'气象站开关定时', blank=True, null=True) class Meta: verbose_name = u'气象站-定时表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 孢子仪状态: # 孢子仪最新数据记录 class BZYstatus(models.Model): equip_id = models.ForeignKey(Equip) #auto_now=True:媒体更新状态表时,随之更新上报时间!!! upl_time = models.DateTimeField(u'上报时间', auto_now=True) bzy_status = models.TextField(u'孢子仪状态', blank=True, null=True) is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True) off_time = models.DateTimeField(u'离线时间', blank=True,null=True) netconf = models.TextField(u'孢子仪地址', blank=True, null=True) glass = models.TextField(u'载玻片更换时间', null=True, blank=True) liquid = models.TextField(u'培养液更换时间', null=True, blank=True) # 绑定sim卡 simid = models.CharField(u'设备sim卡', max_length=50, blank=True, null=True) class Meta: verbose_name = u"孢子仪-状态表" verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 孢子仪数据记录: # 孢子仪全部数据记录 class BZYdata(models.Model): equip_id = models.ForeignKey(Equip) upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now) bzy_data = models.TextField(u'孢子仪数据', blank=True, null=True) class Meta: verbose_name = u'孢子仪-数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 孢子仪照片记录: class BZYphoto(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') upl_time = models.DateTimeField(u'上传时间', default=timezone.now) addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True) # 用户自定义添加:孢子识别结果 describe = models.TextField(u'描述', blank=True, null=True) def __str__(self): return self.addr class Meta: verbose_name = u'孢子仪-照片列表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 设备sim卡信息 class Equip_SimInfo(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') equip_name = models.CharField(u'设备名称', max_length=100, blank=True, null=True) equip_type = models.CharField(u'设备类型', max_length=10, blank=True, null=True) iccid = models.CharField(u'iccid', max_length=30, blank=True, null=True) msisdn = models.CharField(u'msisdn', max_length=30, blank=True, null=True) imsi = models.CharField(u'imsi', max_length=30, blank=True, null=True) sp_code = models.CharField(u'短信端口', max_length=30, blank=True, null=True) carrier = models.CharField(u'运营商', max_length=30, blank=True, null=True) data_plan = models.CharField(u'套餐大小', max_length=20, blank=True, null=True) data_usage = models.CharField(u'当月用量', max_length=20, blank=True, null=True) account_status = models.CharField(u'卡状态', max_length=20, blank=True, null=True) expiry_date = models.CharField(u'计费结束日期', max_length=20, blank=True, null=True) active = models.CharField(u'激活状态', max_length=10, blank=True, null=True) test_valid_date = models.CharField(u'测试期起始日期', max_length=20, blank=True, null=True) silent_valid_date = models.CharField(u'沉默期起始日期', max_length=20, blank=True, null=True) test_used_data_usage = models.CharField(u'测试期已用流量', max_length=20, blank=True, null=True) active_date = models.CharField(u'激活日期', max_length=20, blank=True, null=True) data_balance = models.CharField(u'剩余流量,单位M', max_length=20, blank=True, null=True) outbound_date = models.CharField(u'出库日期', max_length=20, blank=True, null=True) support_sms = models.CharField(u'是否支持短信', max_length=10, blank=True, null=True) sim_alarm = models.TextField(u'sim卡提示配置', blank=True, null=True) upl_time = models.DateTimeField(u'上传时间', default=timezone.now) def __str__(self): return self.equip_id.equip_id class Meta: verbose_name = u'设备sim卡信息表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 韩英磊定制版判定孢子是否存在 class Spore_Exist(models.Model): equip_id = models.CharField(u'设备ID', max_length=50, blank=True) upl_time = models.DateTimeField(u'上传时间', default=timezone.now) is_exist = models.BooleanField(u'是否存在孢子',default=False) def __str__(self): return self.equip_id class Meta: verbose_name = u'孢子仪-孢子存在表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # APP版本号 class App_Edition(models.Model): edition_num = models.CharField(u'版本号', max_length=50, blank=True) edition_desc = models.CharField(u'更新描述', max_length=50, blank=True) upl_time = models.DateTimeField(u'更新时间', default=timezone.now) def __str__(self): return self.edition_num class Meta: verbose_name = u'APP版本描述' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 依科曼性诱状态表 class Trapstatus(models.Model): equip_id = models.ForeignKey(Equip) addr = models.CharField(u'设备位置', max_length=50, blank=True, null=True) tem = models.CharField(u'温度', max_length=20, blank=True, null=True) hum = models.CharField(u'湿度', max_length=20, blank=True, null=True) pest = models.CharField(u'害虫名称', max_length=20, blank=True, null=True) pestnum = models.CharField(u'害虫数量', max_length=20, blank=True, null=True) upl_time = models.DateTimeField(u'上传时间', blank=True, null=True) class Meta: verbose_name = u'性诱状态表' verbose_name_plural = verbose_name ordering = ['-equip_id__equip_add_time'] get_latest_by = 'equip_id__equip_add_time' # 依科曼性诱数据表 class Trapdata(models.Model): equip_id = models.ForeignKey(Equip) addr = models.CharField(u'设备位置', max_length=50, blank=True, null=True) tem = models.CharField(u'温度', max_length=20, blank=True, null=True) hum = models.CharField(u'湿度', max_length=20, blank=True, null=True) pest = models.CharField(u'害虫名称', max_length=20, blank=True, null=True) pestnum = models.CharField(u'害虫数量', max_length=20, blank=True, null=True) upl_time = models.DateTimeField(u'上传时间', blank=True, null=True) class Meta: verbose_name = u'性诱数据表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # 性诱设备照片记录: class Trapphoto(models.Model): equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID') upl_time = models.DateTimeField(u'上传时间', default=timezone.now) addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True) def __str__(self): return self.addr class Meta: verbose_name = u'性诱设备照片' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # VR展示表 class VR_Photo(models.Model): user = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'所属用户') name = models.CharField(u'基地名称', max_length=50, blank=True, null=True) display = models.CharField(u'缩略图', max_length=200, blank=True, null=True) photo = models.CharField(u'VR展示图', blank=True, null=True, max_length=200) upl_time = models.DateTimeField(u'上传时间', default=timezone.now) class Meta: verbose_name = u'VR-照片表' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' # APP轮播图 class APP_Img(models.Model): user = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'所属用户') img = models.CharField(u'轮播图', blank=True, null=True, max_length=200) upl_time = models.DateTimeField(u'上传时间', default=timezone.now) class Meta: verbose_name = u'APP-轮播图' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' #数据转发数据、图片表 class Equip_Forward(models.Model): equip_id = models.CharField(u"设备号",blank=True, null=True, max_length=25) # equip_type = models.CharField(u"设备类型",blank=True, null=True, max_length=5) equip_data_url = models.CharField(u"设备数据转发url",blank=True, null=True, max_length=100) equip_img_url = models.CharField(u"设备图片转发url",blank=True, null=True, max_length=100) equip_img_between = models.CharField(u"转发图片进行区分",blank=True, null=True, max_length=10) equip_data_between = models.CharField(u"转发数据进行区分",blank=True, null=True, max_length=10) # 1----------- 旧的数据转发地址 # 2----------- 新的数据转发地址 #equip_img_between # 1----------- 旧的图片转发地址 # 2----------- 新的图片转发地址 class Meta: verbose_name = u"数据转发表" verbose_name_plural = verbose_name #测报员表 class User_Reporter(models.Model): user_id = models.ForeignKey(MyUser,verbose_name = "用户",null = True,blank = True) name = models.CharField(max_length =32, verbose_name = "测报员名字", null = True , blank = True) password = models.CharField(max_length =150, verbose_name = "密码", null = True , blank = True) phone = models.CharField(max_length =15, verbose_name = "手机号码", null = True , blank = True,default=None) photo = models.ImageField(u'用户头像', upload_to="ce_cuser_head/",null = True , blank = True, default="ce_cuser_head/default.png") time = models.DateTimeField(u'添加时间', default=timezone.now) addr = models.CharField(max_length =64, verbose_name = "地点", null = True , blank = True,default=None) class Meta: db_table = "Pest_User_Reporter" verbose_name = "病虫害测报员数据表" verbose_name_plural = verbose_name ordering = ['-time'] get_latest_by = 'time' #全国省市县 class Address_Province(models.Model): '''省市县''' code = models.CharField(max_length = 20, verbose_name = "编码", null = True, blank = True) name = models.CharField(max_length = 100, verbose_name = "名称", null = False, blank = False) parent_code = models.CharField(max_length = 100, verbose_name = "上级名称", null = True, blank = True) class Meta: db_table = "Pest_City_Address" verbose_name = "中国省市县" verbose_name_plural = verbose_name def __str__(self): return self.name #月份 class User_Month(models.Model): month = models.CharField(max_length = 20, verbose_name = "月份", null = True, blank = True) addr_id = models.ForeignKey(Address_Province, verbose_name = "地区", null = True, blank = True) class Meta: db_table = "Pest_User_Month" verbose_name = "病虫害月份表" verbose_name_plural = verbose_name #病虫害 class Pest_Harm_New(models.Model): pest = models.CharField(max_length = 20, verbose_name = "病虫害种类", null = False, blank = False) pest_sort = models.CharField(max_length = 10, verbose_name = "病虫害区分", null = False, blank = False) pest_name = models.CharField(max_length = 100, verbose_name = "病虫害名字", null = True, blank = True) month_id = models.ForeignKey(User_Month,verbose_name = "月份", null = True, blank = True) user_id = models.ForeignKey(User_Reporter,verbose_name = "用户", null = True, blank = True) crop_sort = models.CharField(max_length = 20, verbose_name = "作物分类", null = True, blank = True) class Meta: db_table = "Pest_Harm_New" verbose_name = "病虫害种类数据表新" verbose_name_plural = verbose_name #采集人数据表 class User_Data_Table_New(models.Model): harm_id = models.ForeignKey(Pest_Harm_New,verbose_name = "病虫害", null = True, blank = True) user_id = models.ForeignKey(User_Reporter,verbose_name = "采集人", null = True, blank = True) upl_time = models.DateTimeField(verbose_name = '创建时间', default=timezone.now) lng = models.CharField(u'经度', max_length=32, blank=True, null=True) lat = models.CharField(u'维度', max_length=32, blank=True, null=True) growth_stages = models.CharField(max_length = 32, verbose_name = '生育期', null = True, blank = True) addr_photo = models.CharField(u'病虫害照片路径', max_length=200, blank=True, null=True) area = models.CharField(max_length = 32, verbose_name = '统计面积', null = True, blank = True) pestname = models.CharField(max_length =500, verbose_name = "病害值", null = True , blank = True) cens_method = models.CharField(max_length =32, verbose_name = "统计方法", null = True , blank = True) defa = models.CharField(max_length =5, verbose_name = "默认选中", null = True , blank = True,default=0) class Meta: db_table = "Pest_User_Data_Table_New" verbose_name = "病虫害统计数据表新" verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' #昆虫分类(以昆虫纲开始分,目、亚目、属)(弃用) class Insecta_Sort(models.Model): code = models.CharField(max_length =20, verbose_name = "编码", null = True , blank = True, default=None) sort = models.CharField(max_length =50, verbose_name = "分类", null = True , blank = True,default=None) sort_code = models.CharField(max_length = 50, verbose_name = "上级分类", null = True, blank = True,default=None) class Meta: db_table = "Pest_Insecta_Sort" verbose_name = "病虫害分类表(虫害)" verbose_name_plural = verbose_name #昆虫种类和作物种类(弃用) class Insect_Plant(models.Model): ids = models.ForeignKey(MyUser,verbose_name = "用户",null = True,blank = True) reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True) insect_type = models.CharField(max_length =32, verbose_name = "虫害种类名称", null = True , blank = True, default=None) plant_type = models.CharField(max_length =32, verbose_name = "作物种类名称", null = True , blank = True,default=None) time = models.DateTimeField(u'添加时间', default=timezone.now) class Meta: db_table = "Pest_Insect_Plant" verbose_name = "病虫害种类表" verbose_name_plural = verbose_name ordering = ['-time'] get_latest_by = 'time' #昆虫种类和作物种类病害级别表(弃用) class Insect_Plant_Leve(models.Model): inid = models.ForeignKey(Insect_Plant,verbose_name = "种类",null = True,blank = True) plant_name = models.CharField(max_length =32, verbose_name = "作物病害名", null = True , blank = True,default=None) insect_name = models.CharField(max_length =32, verbose_name = "虫病害名", null = True , blank = True,default=None) time = models.DateTimeField(u'添加时间', default=timezone.now) class Meta: db_table = "Pest_Insect_Plant_Leve" verbose_name = "病虫害级别表" verbose_name_plural = verbose_name ordering = ['-time'] get_latest_by = 'time' #采集人数据表(弃用) class User_Data_Table(models.Model): user_id=models.ForeignKey(MyUser,verbose_name = "用户",null = True,blank = True) reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True) time = models.DateTimeField(verbose_name = '创建时间', default=timezone.now) user_city = models.CharField(u'用户详情地址', max_length=100, blank=True,null = True) lng = models.CharField(u'经度', max_length=32, blank=True) lat = models.CharField(u'维度', max_length=32, blank=True) addr_photo = models.CharField(u'病虫害照片路径', max_length=200, blank=True, null=True) insect_sort = models.CharField(max_length = 120, verbose_name = '所属分类',blank=True,null = True, default=None) names = models.CharField(max_length = 32, verbose_name = '病虫害名字',blank=True,null = True) area = models.CharField(max_length = 32, verbose_name = '统计面积', null = True, blank = True) pestname = models.CharField(max_length =500, verbose_name = "病害值", null = True , blank = True) statistical = models.CharField(max_length =32, verbose_name = "统计种类", null = True , blank = True) statistical_method=models.CharField(max_length =32, verbose_name = "统计方法", null = True , blank = True) class Meta: db_table = "Pest_User_Data_Table" verbose_name = "病虫害统计数据表" verbose_name_plural = verbose_name ordering = ['-time'] get_latest_by = 'time' def __str__(self): return self.reporter_id.name #病虫害app升级 class Insect_Edition(models.Model): app_name = models.CharField(u'app版本名称', max_length=50, blank=True) app_num = models.CharField(u'版本号', max_length=50, blank=True) app_desc = models.CharField(u'更新描述', max_length=50, blank=True) upl_time = models.DateTimeField(u'更新时间', default=timezone.now) def __str__(self): return self.app_name class Meta: db_table = "Pest_Insect_Edition" verbose_name = u'病虫害APP版本描述' verbose_name_plural = verbose_name ordering = ['-upl_time'] get_latest_by = 'upl_time' #病虫害知识库 class Diseases(models.Model): time = models.DateTimeField(u'添加时间', default=timezone.now) course = models.CharField(max_length=100, verbose_name="所属科目", null=True, blank=True, default=None) name = models.CharField(max_length=32, verbose_name="病虫害名",null=True, blank=True, default=None) # addr = models.CharField(max_length =32, verbose_name = "地点", null = True , blank = True,default=None) # img = models.ImageField(u'用户上传识别图片',upload_to="diseases_photos",max_length = 200, default=None,null = True , blank = True) img_urls = models.CharField(u'识别出来的图片', max_length=300, null=True, blank=True, default=None) prevention = models.TextField(u'防止方法', max_length=5000, null=True, blank=True, default=None) # msg = models.CharField(u'识别编号',max_length =16) ret = models.CharField(verbose_name="病虫害", max_length=10, blank=True, null=True) class Meta: db_table = "Pest_Diseases_table" verbose_name = "病虫害知识库表" verbose_name_plural = verbose_name #虫害识别保存 class App_Insect(models.Model): userid = models.ForeignKey(MyUser, verbose_name='用户',null = True,blank = True) reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True) time = models.DateTimeField(u'添加时间', default=timezone.now) course = models.CharField(max_length=100, verbose_name="所属科目", null=True, blank=True, default=None) name = models.CharField(max_length=32, verbose_name="昆虫名",null=True, blank=True, default=None) addr = models.CharField(max_length =100, verbose_name = "识别地点", null = True , blank = True,default=None) img = models.ImageField(u'用户上传昆虫识别图片', upload_to="insect_photos/",max_length=100, default=None, null=True, blank=True) img_urls = models.CharField(u'识别出来的图片', max_length=300, null=True, blank=True, default=None) prevention = models.TextField(u'防止方法', max_length=5000, null=True, blank=True, default=None) lng = models.CharField(u'经度', max_length=32, blank=True) lat = models.CharField(u'维度', max_length=32, blank=True) # msg = models.CharField(u'识别编号',max_length =16) class Meta: db_table = "Pest_Insect_Table" verbose_name = "病虫害害虫识别表" verbose_name_plural = verbose_name ordering = ['-time'] get_latest_by = 'time' #植物识别表 class App_Plant(models.Model): userid = models.ForeignKey(MyUser, verbose_name='用户',null = True,blank = True) reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True) time = models.DateTimeField(u'添加时间', default=timezone.now) course = models.CharField(max_length=100, verbose_name="所属科目", null=True, blank=True, default=None) name = models.CharField(max_length=32, verbose_name="作物病害名", null=True, blank=True, default=None) addr = models.CharField(max_length =100, verbose_name = "识别地点", null = True , blank = True,default=None) img = models.ImageField(u'用户上传作物识别图片', upload_to="plant_photos/",max_length=100, default=None, null=True, blank=True) img_urls = models.CharField(u'识别出来的图片', max_length=300, null=True, blank=True, default=None) prevention = models.TextField(u'防止方法', max_length=5000, null=True, blank=True, default=None) lng = models.CharField(u'经度', max_length=32, blank=True) lat = models.CharField(u'维度', max_length=32, blank=True) # msg = models.CharField(u'识别编号',max_length =16) class Meta: db_table = "Pest_Plant_Table" verbose_name = "病虫害作物识别表" verbose_name_plural = verbose_name ordering = ['-time'] get_latest_by = 'time' #用户反馈 1联系 2不联系 class Feedback(models.Model): time = models.DateTimeField(u'添加时间', default=timezone.now) phone = models.CharField(max_length=32, verbose_name="电话号码", null=True, blank=True, default=None) name = models.CharField(max_length=32, verbose_name="用户名", null=True, blank=True, default=None) proposal = models.TextField(max_length =500, verbose_name = "用户提出的建议", null = True , blank = True,default=None) count = models.TextField(max_length =500, verbose_name = "需要改进的地方", null = True , blank = True,default=None) store = models.CharField(verbose_name="是否联系用户",max_length=6, blank=True, default=0, null=True) class Meta: db_table = "Pest_Feedback" verbose_name = "病虫害用户反馈" verbose_name_plural = verbose_name ordering = ['-time'] get_latest_by = 'time' #加密 class Encryption(models.Model): time = models.DateTimeField(u'添加时间', default=timezone.now) meid = models.CharField(max_length=54, verbose_name="手机唯一标识", null=True, blank=True, default=None) cipher = models.CharField(max_length=54, verbose_name="秘钥", null=True, blank=True, default=None) # mark = models.CharField(max_length=10, verbose_name="标识", null=True, blank=True, default=None) class Meta: db_table = "Pest_Encryption" verbose_name = "病虫害登录加密表" verbose_name_plural = verbose_name #购买app用户列表 class Purchase(models.Model): time = models.DateTimeField(u'添加时间', default=timezone.now) userid = models.ForeignKey(MyUser,verbose_name="购买用户", null=True, blank=True) class Meta: db_table = "Pest_Purchase" verbose_name = "病虫害app购买表" verbose_name_plural = verbose_name