models.py 76 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729
  1. # -*- coding: utf-8 -*-
  2. from django.db import models
  3. import django.utils.timezone as timezone
  4. from django.contrib.auth.models import AbstractUser
  5. from django.contrib.auth.models import Group, GroupManager
  6. import datetime
  7. # one_year = datetime.timedelta(days=365)
  8. # one_year_later = datetime.datetime.now() + one_year
  9. # 自定义用户组:
  10. class User_Group(Group):
  11. role_describe = models.CharField(u'角色描述', max_length=50, null=True, blank=True)
  12. role_cre_time = models.DateTimeField(u'角色添加时间', default=timezone.now)
  13. role_cre_user = models.CharField(u'角色创建者', max_length=20,null=True, blank=True)
  14. role_logo = models.ImageField(u'首页logo', upload_to="home_logo/", default="/home_logo/default_logo.png")
  15. role_footer = models.TextField(u'首页footer信息', max_length=200, default="Copyright©2007-2018 All Rrights Resvered 版权所有:河南云飞科技发展有限公司")
  16. # role_header = models.TextField(u'首页footer信息', max_length=200, default="")
  17. class Meta:
  18. verbose_name = u'用户组列表'
  19. verbose_name_plural = verbose_name
  20. # def __str__(self):
  21. # return self.name
  22. # logo表
  23. class Logo(models.Model):
  24. role_describe = models.CharField(u'角色描述', max_length=50, null=True, blank=True)
  25. role_cre_time = models.DateTimeField(u'角色添加时间', default=timezone.now)
  26. role_cre_user = models.CharField(u'角色创建者', max_length=20,null=True, blank=True)
  27. role_logo = models.ImageField(u'首页logo', upload_to="home_logo/", default="/home_logo/default_logo.png")
  28. role_footer = models.TextField(u'首页footer信息', max_length=200, default="Copyright©2007-2019 All Rrights Resvered 版权所有:河南云飞科技发展有限公司")
  29. role_header = models.TextField(u'首页header信息', max_length=200, default=" ")
  30. class Meta:
  31. verbose_name = u'logo列表'
  32. verbose_name_plural = verbose_name
  33. ordering = ['-role_cre_time']
  34. get_latest_by = 'role_cre_time'
  35. def __str__(self):
  36. return self.role_describe
  37. # # 经销商列表
  38. # class Agency(models.Model):
  39. # agency_name = models.CharField(u'经销商名字',max_length=50,null=True,blank=True)
  40. # agency_desc = models.CharField(u'经销商描述',max_length=100,null=True,blank=True)
  41. # def __str__(self):
  42. # return self.agency_name
  43. # class Meta:
  44. # verbose_name = u'经销商列表'
  45. # verbose_name_plural = verbose_name
  46. # 继承AbstractUser类
  47. class MyUser(AbstractUser):
  48. USER_RANK_CHOICES = {
  49. 1: '省级',
  50. 2: '市级',
  51. 3: '县区级',
  52. }
  53. user_remark = models.TextField(u'用户备注', max_length=200, blank=True)
  54. user_rank = models.SmallIntegerField(
  55. u'用户级别', default=1, choices=USER_RANK_CHOICES.items())
  56. user_phone = models.CharField(u'用户手机', max_length=16, blank=True)
  57. user_picture = models.ImageField(u'用户头像', upload_to="user_photo/", default="user_photo/default.png")
  58. base_name = models.CharField(u'基地名称', max_length=50, blank=True, null=True)
  59. base_show = models.ImageField(u'基地展示', upload_to="base_show/", default="base_show/default.png")
  60. user_pro = models.CharField(u'用户省', max_length=50, blank=True)
  61. user_city = models.CharField(u'用户市', max_length=50, blank=True)
  62. user_area = models.CharField(u'用户区', max_length=50, blank=True)
  63. user_agency = models.ForeignKey(User_Group,null=True,blank=True,verbose_name=u'用户所属经销商')
  64. user_header = models.CharField(u'页面标题展示', max_length=50, blank=True)
  65. is_agency = models.BooleanField(u'是否为经销商',default=False)
  66. # expire_date = models.DateTimeField(u'账号到期时间', null=True, blank=True, default=one_year_later)
  67. expire_date = models.DateTimeField(u'账号到期时间', null=True, blank=True)
  68. user_logo = models.ForeignKey(Logo,null=True,blank=True,verbose_name=u'用户使用的Logo')
  69. # 用户组:
  70. # user_group = models.ManyToManyField(User_Group,blank=True, null=True, verbose_name=u'用户所属组')
  71. class Meta:
  72. verbose_name = u'用户列表'
  73. verbose_name_plural = verbose_name
  74. ordering = ['-date_joined']
  75. get_latest_by = 'date_joined'
  76. # def __str__(self):
  77. # return self.user_remark
  78. # 用户操作日志:
  79. class User_Log(models.Model):
  80. # log_user = models.ForeignKey(MyUser,verbose_name=u'用户名', blank=True, null=True)
  81. log_user = models.CharField(u'用户名', max_length=50, null=True, blank=True)
  82. log_time = models.DateTimeField(u'操作时间', default=timezone.now)
  83. log_ip = models.CharField(u'IP地址', max_length=100, null=True, blank=True)
  84. log_desc = models.CharField(u'操作描述', max_length=100, null=True, blank=True)
  85. def __str__(self):
  86. return self.log_user
  87. class Meta:
  88. verbose_name = u'用户操作日志表'
  89. verbose_name_plural = verbose_name
  90. ordering = ['-log_time']
  91. get_latest_by = 'log_time'
  92. # 设备类型列表:
  93. class Equip_type(models.Model):
  94. type_id = models.PositiveIntegerField(u'设备类型编号', primary_key=True)
  95. type_name = models.CharField(u'设备类型名称', max_length=50, blank=True)
  96. type_add_time = models.DateTimeField(u'设备类型添加时间', default=timezone.now)
  97. topic_name = models.CharField(u'主题简称', max_length=10, blank=True)
  98. def __str__(self):
  99. return self.type_name
  100. class Meta:
  101. verbose_name = u"设备类型表"
  102. verbose_name_plural = verbose_name
  103. ordering = ['-type_add_time']
  104. get_latest_by = 'type_add_time'
  105. # 设备列表:
  106. class Equip(models.Model):
  107. equip_id = models.CharField(u'设备id', max_length=30, primary_key=True)
  108. equip_user = models.ForeignKey(
  109. MyUser, blank=True, null=True, verbose_name=u'设备用户')
  110. equip_type = models.ForeignKey(
  111. Equip_type, blank=True, null=True, verbose_name=u'设备类型')
  112. equip_name = models.CharField(u'设备名称', max_length=100, blank=True)
  113. equip_add_time = models.DateTimeField(u'设备添加时间', default=timezone.now)
  114. equip_allot_user = models.CharField(
  115. u'设备分配者id', blank=True, null=True, max_length=50)
  116. equip_sn = models.CharField(u'设备授权码', blank=True, null=True, max_length=50)
  117. # 位置字段:
  118. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  119. # equip_iccid = models.CharField(u'SIM卡iccid', max_length=50, blank=True)
  120. equip_agency = models.ForeignKey(User_Group,null=True,blank=True,verbose_name=u'设备所属经销商')
  121. equip_desc = models.CharField(u'设备状态', max_length=5, blank=True,null=True)
  122. scene = models.CharField(u'设备场景', max_length=5, blank=True,null=True) # 1 小麦玉米 2 水稻 3 果园茶园
  123. # old_eid = models.CharField(u'原始设备id', max_length=30, blank=True,null=True)
  124. # 此字段针对对接设备,非对接设备默认为空
  125. # 默认为手动添加 添加格式为 http://192.168.1.1#1 其中#后面的数字判断是否需要发送害虫识别结果
  126. ftp_addr = models.TextField(u'设备对接外部ip地址', blank=True, null=True)
  127. def __str__(self):
  128. return self.equip_id
  129. class Meta:
  130. verbose_name = u"设备列表"
  131. verbose_name_plural = verbose_name
  132. ordering = ['-equip_add_time']
  133. get_latest_by = 'equip_add_time'
  134. permissions = (
  135. ("can_see_scd", "Can see scd"),
  136. ("can_see_cbd", "Can see cbd"),
  137. ("can_see_ybq", "Can see ybq"),
  138. ("can_see_tccb", "Can see tccb"),
  139. ("can_see_qxz", "Can see qxz"),
  140. ("can_see_jk", "Can see jk"),
  141. ("can_see_bzy", "Can see bzy"),
  142. ("can_see_xyq", "Can see xyq"),
  143. ("can_see_alarm", "Can see alarm"),
  144. ("can_see_vr", "Can see vr"),
  145. ("no_can_see_sim", "No can see sim"),
  146. ("ykm_hl", "ykm hl"), # 依科曼何磊定制菜单权限
  147. )
  148. # 杀虫灯状态:
  149. class SCDstatus(models.Model):
  150. equip_id = models.ForeignKey(Equip, blank=True)
  151. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  152. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  153. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  154. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  155. ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机
  156. scd_status = models.TextField(u'杀虫灯状态', blank=True, null=True)
  157. paramconf = models.TextField(u'设备参数配置', blank=True, null=True)
  158. serverconf = models.TextField(u'服务器配置', blank=True, null=True)
  159. lng = models.CharField(u'经度', max_length=50, blank=True)
  160. lat = models.CharField(u'维度', max_length=50, blank=True)
  161. # 位置字段:
  162. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  163. # def __str__(self):
  164. # return (self.equip_id)
  165. class Meta:
  166. verbose_name = u"杀虫灯-状态表"
  167. verbose_name_plural = verbose_name
  168. ordering = ['-equip_id__equip_add_time']
  169. get_latest_by = 'equip_id__equip_add_time'
  170. # 杀虫灯状态全部数据:
  171. class SCDstatus_all(models.Model):
  172. equip_id = models.ForeignKey(Equip, blank=True)
  173. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  174. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  175. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  176. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  177. ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机
  178. scd_status = models.TextField(u'杀虫灯状态', blank=True, null=True)
  179. paramconf = models.TextField(u'设备参数配置', blank=True, null=True)
  180. serverconf = models.TextField(u'服务器配置', blank=True, null=True)
  181. lng = models.CharField(u'经度', max_length=50, blank=True)
  182. lat = models.CharField(u'维度', max_length=50, blank=True)
  183. # 位置字段:
  184. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  185. # def __str__(self):
  186. # return (self.equip_id)
  187. class Meta:
  188. verbose_name = u"杀虫灯-状态表-全部"
  189. verbose_name_plural = verbose_name
  190. ordering = ['-equip_id__equip_add_time']
  191. get_latest_by = 'equip_id__equip_add_time'
  192. # 杀虫灯数据表:
  193. class SCDdata(models.Model):
  194. equip_id = models.ForeignKey(Equip)
  195. upl_time = models.DateTimeField(u'上报时间', default=timezone.now)
  196. scd_data = models.TextField(u'杀虫灯数据', blank=True, null=True)
  197. ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机
  198. # def __str__(self):
  199. # return self.equip_id
  200. class Meta:
  201. verbose_name = u'杀虫灯-数据表'
  202. verbose_name_plural = verbose_name
  203. ordering = ['-upl_time']
  204. get_latest_by = 'upl_time'
  205. # 杀虫灯最新数据表
  206. class RecentSCDdata(models.Model):
  207. equip_id = models.ForeignKey(Equip)
  208. equip_name = models.CharField(u'设备名称', max_length=100, blank=True)
  209. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  210. scd_data = models.TextField(u'杀虫灯数据',blank=True,null=True)
  211. ds = models.CharField(u'设备开关',max_length=5,blank=True) # 设备开关 0 关机, 1 开机
  212. class Meta:
  213. verbose_name = u'杀虫灯-最新数据表'
  214. verbose_name_plural = verbose_name
  215. ordering = ['-equip_id__equip_add_time']
  216. get_latest_by = 'equip_id__equip_add_time'
  217. # 测报灯RTU状态:
  218. class RTUstatus(models.Model):
  219. equip_id = models.ForeignKey(Equip, blank=True)
  220. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  221. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  222. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  223. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  224. rtu_status = models.TextField(u'rtu状态', blank=True, null=True)
  225. # def __str__(self):
  226. # return (self.equip_id)
  227. class Meta:
  228. verbose_name = u"RTU-状态表"
  229. verbose_name_plural = verbose_name
  230. ordering = ['-equip_id__equip_add_time']
  231. get_latest_by = 'equip_id__equip_add_time'
  232. # 测报灯RTU数据表:
  233. class RTUdata(models.Model):
  234. equip_id = models.ForeignKey(Equip)
  235. upl_time = models.DateTimeField(u'上报时间', default=timezone.now)
  236. rtu_data = models.TextField(u'rtu数据', blank=True, null=True)
  237. # def __str__(self):
  238. # return self.equip_id
  239. class Meta:
  240. verbose_name = u'RTU-数据表'
  241. verbose_name_plural = verbose_name
  242. ordering = ['-upl_time']
  243. get_latest_by = 'upl_time'
  244. # 诱捕器状态:
  245. class YBQstatus(models.Model):
  246. equip_id = models.ForeignKey(Equip, blank=True)
  247. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  248. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  249. pest_name = models.CharField(u'监测害虫名称', max_length=10, blank=True,null=True)
  250. equip_code = models.CharField(u'设备编码', max_length=10, blank=True,null=True)
  251. sex_type = models.CharField(u'性诱类型', max_length=20, blank=True,null=True)
  252. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  253. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  254. ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机
  255. ybq_status = models.TextField(u'诱捕器状态', blank=True, null=True)
  256. paramconf = models.TextField(u'设备参数配置', blank=True, null=True)
  257. serverconf = models.TextField(u'服务器配置', blank=True, null=True)
  258. lng = models.CharField(u'经度', max_length=50, blank=True)
  259. lat = models.CharField(u'维度', max_length=50, blank=True)
  260. # 位置字段:
  261. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  262. # def __str__(self):
  263. # return (self.equip_id)
  264. class Meta:
  265. verbose_name = u"诱捕器-状态表"
  266. verbose_name_plural = verbose_name
  267. ordering = ['-equip_id__equip_add_time']
  268. get_latest_by = 'equip_id__equip_add_time'
  269. # 诱捕器数据表:
  270. class YBQdata(models.Model):
  271. equip_id = models.ForeignKey(Equip)
  272. upl_time = models.DateTimeField(u'上报时间', default=timezone.now)
  273. equip_code = models.CharField(u'设备编码', max_length=10, blank=True,null=True)
  274. ybq_data = models.TextField(u'诱捕器数据', blank=True, null=True)
  275. ds = models.CharField(u'设备开关', max_length=5, blank=True) # 设备开关 0 关机, 1 开机
  276. # def __str__(self):
  277. # return self.equip_id
  278. class Meta:
  279. verbose_name = u'诱捕器-数据表'
  280. verbose_name_plural = verbose_name
  281. ordering = ['-upl_time']
  282. get_latest_by = 'upl_time'
  283. # # 智能性诱图片
  284. # class Sex_Trap_Photo(models.Model):
  285. # equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  286. # upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  287. # addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  288. # # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量
  289. # describe = models.TextField(u'描述', blank=True, null=True)
  290. # def __str__(self):
  291. # return self.addr
  292. # class Meta:
  293. # verbose_name = u'性诱设备-照片列表'
  294. # verbose_name_plural = verbose_name
  295. # ordering = ['-upl_time']
  296. # get_latest_by = 'upl_time'
  297. # 诱捕器照片记录:
  298. class YBQphoto(models.Model):
  299. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  300. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  301. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  302. # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量
  303. describe = models.TextField(u'描述', blank=True, null=True)
  304. real_time = models.DateTimeField(u'入库时间', default=timezone.now)
  305. def __str__(self):
  306. return self.addr
  307. class Meta:
  308. verbose_name = u'诱捕器-照片列表'
  309. verbose_name_plural = verbose_name
  310. ordering = ['-real_time']
  311. get_latest_by = 'real_time'
  312. # 糖醋测报状态:
  313. class TCCBstatus(models.Model):
  314. equip_id = models.ForeignKey(Equip, blank=True)
  315. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  316. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  317. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  318. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  319. tccb_status = models.TextField(u'糖醋测报状态', blank=True, null=True)
  320. paramconf = models.TextField(u'设备参数配置', blank=True, null=True)
  321. serverconf = models.TextField(u'服务器配置', blank=True, null=True)
  322. lng = models.CharField(u'经度', max_length=50, blank=True)
  323. lat = models.CharField(u'维度', max_length=50, blank=True)
  324. # 位置字段:
  325. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  326. # def __str__(self):
  327. # return (self.equip_id)
  328. class Meta:
  329. verbose_name = u"糖醋测报-状态表"
  330. verbose_name_plural = verbose_name
  331. ordering = ['-equip_id__equip_add_time']
  332. get_latest_by = 'equip_id__equip_add_time'
  333. # 糖醋测报状态:
  334. class TCCBdata(models.Model):
  335. equip_id = models.ForeignKey(Equip)
  336. upl_time = models.DateTimeField(u'上报时间', default=timezone.now)
  337. tccb_data = models.TextField(u'糖醋测报数据', blank=True, null=True)
  338. # def __str__(self):
  339. # return self.equip_id
  340. class Meta:
  341. verbose_name = u'糖醋测报-数据表'
  342. verbose_name_plural = verbose_name
  343. ordering = ['-upl_time']
  344. get_latest_by = 'upl_time'
  345. # 糖醋测报照片记录:
  346. class TCCBphoto(models.Model):
  347. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  348. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  349. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  350. # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量
  351. describe = models.TextField(u'描述', blank=True, null=True)
  352. def __str__(self):
  353. return self.addr
  354. class Meta:
  355. verbose_name = u'糖醋测报-照片列表'
  356. verbose_name_plural = verbose_name
  357. ordering = ['-upl_time']
  358. get_latest_by = 'upl_time'
  359. # 测报灯状态:
  360. class CBDstatus(models.Model):
  361. equip_id = models.ForeignKey(Equip)
  362. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  363. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  364. etype = models.CharField(u'测报灯类型', max_length=30, blank=True,null=True)
  365. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  366. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  367. cbd_status = models.TextField(u'测报灯状态', blank=True, null=True)
  368. paramconf = models.TextField(u'设备参数配置', blank=True, null=True)
  369. serverconf = models.TextField(u'服务器配置', blank=True, null=True)
  370. rtuinfo = models.TextField(u'rtu信息', blank=True, null=True)
  371. lng = models.CharField(u'经度', max_length=50, blank=True,null=True)
  372. lat = models.CharField(u'纬度', max_length=50, blank=True,null=True)
  373. old_eid = models.CharField(u'原始设备id', max_length=30, blank=True,null=True)
  374. # 位置字段:
  375. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  376. # 绑定sim卡
  377. simid = models.CharField(u'设备sim卡', max_length=50, blank=True, null=True)
  378. # def __str__(self):
  379. # return (self.equip_id)
  380. class Meta:
  381. verbose_name = u"测报灯-状态表"
  382. verbose_name_plural = verbose_name
  383. ordering = ['-equip_id__equip_add_time']
  384. get_latest_by = 'equip_id__equip_add_time'
  385. # 测报灯状态全部数据:
  386. class CBDstatus_all(models.Model):
  387. equip_id = models.ForeignKey(Equip)
  388. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  389. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  390. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  391. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  392. cbd_status = models.TextField(u'测报灯状态', blank=True, null=True)
  393. paramconf = models.TextField(u'设备参数配置', blank=True, null=True)
  394. serverconf = models.TextField(u'服务器配置', blank=True, null=True)
  395. lng = models.CharField(u'经度', max_length=50, blank=True,null=True)
  396. lat = models.CharField(u'维度', max_length=50, blank=True,null=True)
  397. # 位置字段:
  398. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  399. # def __str__(self):
  400. # return (self.equip_id)
  401. class Meta:
  402. verbose_name = u"测报灯-状态表-全部"
  403. verbose_name_plural = verbose_name
  404. ordering = ['-equip_id__equip_add_time']
  405. get_latest_by = 'equip_id__equip_add_time'
  406. # 测报灯数据记录:
  407. class CBDdata(models.Model):
  408. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  409. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  410. cbd_data = models.TextField(u'测报灯数据', blank=True, null=True)
  411. # def __str__(self):
  412. # return self.equip_name
  413. class Meta:
  414. verbose_name = u'测报灯-数据表'
  415. verbose_name_plural = verbose_name
  416. ordering = ['-upl_time']
  417. get_latest_by = 'upl_time'
  418. # 测报灯最新数据记录:
  419. class RecentCBDdata(models.Model):
  420. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  421. equip_name = models.CharField(u'设备名称', max_length=100, blank=True)
  422. etype = models.CharField(u'测报灯类型', max_length=30, blank=True,null=True)
  423. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  424. cbd_data = models.TextField(u'测报灯数据', blank=True, null=True)
  425. scene = models.CharField(u'设备场景', max_length=5, blank=True,null=True) # 1 小麦玉米 2 水稻 3 果园茶园
  426. discern = models.BooleanField(u'害虫识别功能',default=False) # 害虫识别 0为带有识别功能 1为 无识别功能
  427. # 识别按钮不存在 查看统计为手动统计界面----------0
  428. # 识别按钮存在 查看统计为自动统计界面------------1
  429. # 识别按钮不存在 查看统计为自动统计界面(有计数功能)-------------2
  430. disc = models.CharField(u'是否有识别功能', max_length=5,default=1)
  431. # def __str__(self):
  432. # return self.equip_name
  433. class Meta:
  434. verbose_name = u'测报灯-最新数据表'
  435. verbose_name_plural = verbose_name
  436. ordering = ['-equip_id__equip_add_time']
  437. get_latest_by = 'equip_id__equip_add_time'
  438. # 萤石token表
  439. class JKtoken(models.Model):
  440. account = models.CharField(u'账号', max_length=30, blank=True, null=True)
  441. token = models.CharField(u'token', max_length=80, blank=True, null=True) # 七天有效期
  442. upl_time = models.DateTimeField(u'监控token获取时间', default=timezone.now)
  443. class Meta:
  444. verbose_name = u'监控-token表'
  445. verbose_name_plural = verbose_name
  446. ordering = ['-upl_time']
  447. get_latest_by = 'upl_time'
  448. # 监控设备token表
  449. class JKdata(models.Model):
  450. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  451. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  452. upl_time = models.DateTimeField(u'监控token获取时间', default=timezone.now)
  453. # 萤石云accesstoken一周过期
  454. jk_token = models.TextField(u'监控设备所需token', blank=True, null=True)
  455. jk_type = models.CharField(u'监控设备类型', max_length=10, blank=True, null=True)
  456. class Meta:
  457. verbose_name = u'监控-数据表'
  458. verbose_name_plural = verbose_name
  459. ordering = ['-equip_id__equip_add_time']
  460. get_latest_by = 'equip_id__equip_add_time'
  461. # 监控定时拍照照片表:
  462. class JKphoto(models.Model):
  463. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  464. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  465. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  466. # 用户自定义添加:孢子识别结果
  467. describe = models.TextField(u'描述', blank=True, null=True)
  468. class Meta:
  469. verbose_name = u'监控-照片列表'
  470. verbose_name_plural = verbose_name
  471. ordering = ['-upl_time']
  472. get_latest_by = 'upl_time'
  473. # 测报灯照片记录:
  474. class CBDphoto(models.Model):
  475. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  476. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  477. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  478. at = models.CharField(u'环境温度', max_length=50, blank=True, null=True)
  479. ah = models.CharField(u'环境湿度', max_length=50, blank=True, null=True)
  480. # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量
  481. describe = models.TextField(u'描述', blank=True, null=True)
  482. indentify_photo = models.CharField(u'识别照片路径', max_length=200, blank=True, null=True)
  483. indentify_result = models.TextField(u'识别结果', blank=True, null=True)
  484. def __str__(self):
  485. return self.addr
  486. class Meta:
  487. verbose_name = u'测报灯-照片列表'
  488. verbose_name_plural = verbose_name
  489. ordering = ['-upl_time']
  490. get_latest_by = 'upl_time'
  491. # 测报灯害虫种类表:
  492. class CBDpest(models.Model):
  493. user = models.ForeignKey(MyUser,verbose_name=u'害虫所属用户', blank=True, null=True)
  494. pest_add_time = models.DateTimeField(u'添加时间', default=timezone.now)
  495. pest_name = models.CharField(u'害虫名称', max_length=50)
  496. def __str__(self):
  497. return self.pest_name
  498. class Meta:
  499. verbose_name = u'测报灯-害虫列表'
  500. verbose_name_plural = verbose_name
  501. # 测报灯照片描述:
  502. class CBDphoto_desc(models.Model):
  503. equip_id = models.CharField(u'对应的设备id', max_length=50, blank=True, null=True)
  504. photo_id = models.ForeignKey(CBDphoto, blank=True, null=True, verbose_name=u'照片ID')
  505. desc_user = models.ForeignKey(MyUser,verbose_name=u'添加描述的用户', blank=True, null=True)
  506. add_time = models.DateTimeField(u'添加时间', default=timezone.now)
  507. # 用户自定义添加:作物名称、病虫害阶段、病虫名称、雌雄、数量
  508. crop_name = models.CharField(u'作物名称', max_length=20,blank=True, null=True)
  509. pest_case = models.CharField(u'虫害情况', max_length=30,blank=True, null=True)
  510. pest_name = models.ForeignKey(CBDpest, blank=True, null=True, verbose_name=u'害虫名称')
  511. pest_name2 = models.CharField(u'害虫名称2', max_length=30,blank=True, null=True)
  512. # pest_sex = models.TextField(u'害虫雌雄', max_length=10, blank=True, null=True)
  513. pest_num = models.CharField(u'害虫数量', max_length=10, blank=True, null=True)
  514. photo_time = models.CharField(u'对应的照片时间', max_length=50, blank=True, null=True)
  515. photo_time1 = models.DateTimeField(u'对应照片时间',blank=True, null=True)
  516. # def __str__(self):
  517. # return self.equip_name
  518. class Meta:
  519. verbose_name = u'测报灯-照片描述表'
  520. verbose_name_plural = verbose_name
  521. # 测报灯可升级版本:
  522. class CBDupdate(models.Model):
  523. num = models.CharField(u'序号', max_length=50, blank=True)
  524. desc = models.CharField(u'描述', max_length=20, blank=True)
  525. dver = models.CharField(u'版本号', max_length=50, blank=True)
  526. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  527. # def __str__(self):
  528. # return self.equip_name
  529. class Meta:
  530. verbose_name = u'测报灯-可升级版本'
  531. verbose_name_plural = verbose_name
  532. ordering = ['-upl_time']
  533. get_latest_by = 'upl_time'
  534. # app反馈:
  535. class Fdb(models.Model):
  536. fdb_name = models.CharField(u'姓名', max_length=50, blank=True)
  537. fdb_phone = models.CharField(u'手机', max_length=20, blank=True)
  538. fdb_email = models.CharField(u'邮箱', max_length=50, blank=True)
  539. fdb_content = models.TextField(u'反馈内容')
  540. fdb_time = models.DateTimeField(u'反馈时间', default=timezone.now)
  541. fdb_rep_status = models.NullBooleanField(u'反馈回复状态', default=False)
  542. fdb_rep_time = models.DateTimeField(u'回复时间', default=timezone.now)
  543. fdb_rep_cont = models.TextField(u'回复内容', blank=True)
  544. def __str__(self):
  545. return self.fdb_name
  546. class Meta:
  547. verbose_name_plural = u"用户反馈表"
  548. # app轮播图:
  549. class App_pic(models.Model):
  550. app_pic_title = models.CharField(u'app轮播图描述', max_length=50, blank=True)
  551. app_pic = models.CharField(u'app轮播图地址', max_length=60, blank=True)
  552. # app轮播图链接类型;0:普通轮播图,1:外链
  553. app_pic_type = models.CharField(u'链接类型', max_length=5, blank=True)
  554. # app轮播图:
  555. app_pic_content = models.ImageField()
  556. app_pic_order = models.CharField(u'轮播图顺序', max_length=10, blank=True)
  557. app_pic_cre_time = models.DateTimeField(u'上传时间', default=timezone.now)
  558. def __str__(self):
  559. return self.app_pic_title
  560. class Meta:
  561. verbose_name_plural = u"APP轮播图列表"
  562. # 气象设备数据记录:
  563. class QXdata(models.Model):
  564. # 设备数据上传时间:
  565. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  566. equip_id = models.ForeignKey(
  567. Equip, blank=True, null=True, verbose_name=u'设备ID')
  568. # def __str__(self):
  569. # return self.equip_name
  570. class Meta:
  571. verbose_name = u'气象设备'
  572. verbose_name_plural = verbose_name
  573. # 专家诊断:
  574. class Diag(models.Model):
  575. diag_title = models.CharField(u'专家诊断标题', max_length=50, blank=True)
  576. diag_content = models.CharField(u'专家诊断内容', max_length=200, blank=True)
  577. diag_time = models.DateTimeField(u'专家诊断时间', default=timezone.now)
  578. diag_oper = models.CharField(u'专家诊断操作', max_length=200, blank=True)
  579. # def __str__(self):
  580. # return self.equip_name
  581. class Meta:
  582. verbose_name_plural = "专家诊断列表"
  583. # 帮助中心 = 帮助说明+问题反馈
  584. # 帮助说明
  585. class Help(models.Model):
  586. help_title = models.CharField(u'标题', max_length=50, blank=True)
  587. help_ask = models.CharField(u'问题', max_length=200, blank=True)
  588. help_answer = models.TextField(u'回答', null=True)
  589. help_edit_time = models.DateTimeField(u'编辑时间', default=timezone.now)
  590. def __str__(self):
  591. return self.help_title
  592. class Meta:
  593. verbose_name = u"帮助中心"
  594. verbose_name_plural = verbose_name
  595. # 问题反馈:
  596. class Problem(models.Model):
  597. prob_ask = models.CharField(u'问题', max_length=200, blank=True)
  598. prob_cre_time = models.DateTimeField(u'提问时间', default=timezone.now)
  599. prob_cre_people = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'提问者',related_name='prob_cre_people')
  600. prob_answer = models.TextField(u'回答', null=True)
  601. prob_answer_people = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'回答者',related_name='prob_answer_people')
  602. # prob_answer_people = models.CharField(u'回答者',blank=True,max_length=50,null=True)
  603. prob_cre_time = models.DateTimeField(u'回答时间', auto_now=True)
  604. def __str__(self):
  605. return self.prob_ask
  606. class Meta:
  607. verbose_name = u"问题列表"
  608. verbose_name_plural = verbose_name
  609. # 评论列表:
  610. class Comment(models.Model):
  611. problem = models.ForeignKey(Problem, blank=True, null=True, verbose_name=u'问题')
  612. comment_content = models.TextField(u'评论内容', null=True)
  613. comment_people = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'评论者')
  614. comment_time = models.DateTimeField(u'评论时间', default=timezone.now)
  615. # def __str__(self):
  616. # return self.comment_content
  617. class Meta:
  618. verbose_name = u"评论列表"
  619. verbose_name_plural = verbose_name
  620. # 气象设备预警范围设定:
  621. class QXalarmrange(models.Model):
  622. upl_time = models.DateTimeField(auto_now=True)
  623. ws = models.CharField(max_length=20, blank=True)
  624. at = models.CharField(max_length=20, blank=True)
  625. ah = models.CharField(max_length=20, blank=True)
  626. equip_id = models.ForeignKey(Equip)
  627. # def __str__(self):
  628. # return self.equip_type_name
  629. class Meta:
  630. verbose_name = u"气象设备预警范围"
  631. verbose_name_plural = verbose_name
  632. # 杀虫灯预警范围设定:
  633. class SCDalarmrange(models.Model):
  634. upl_time = models.DateTimeField(auto_now=True)
  635. cv = models.CharField(u'充电电压', max_length=20, blank=True)
  636. ci = models.CharField(u'充电电流', max_length=20, blank=True)
  637. equip_type_id = models.ForeignKey(Equip_type)
  638. # def __str__(self):
  639. # return self.equip_type.name
  640. class Meta:
  641. verbose_name = u"杀虫灯-预警范围"
  642. verbose_name_plural = verbose_name
  643. # 测报灯预警范围设定:
  644. class CBDalarmrange(models.Model):
  645. # 预警范围更新时间
  646. upl_time = models.DateTimeField(auto_now=True)
  647. cv = models.CharField(max_length=20, blank=True)
  648. ci = models.CharField(max_length=20, blank=True)
  649. equip_type_id = models.ForeignKey(Equip_type)
  650. # def __str__(self):
  651. # return self.equip_type.name
  652. class Meta:
  653. verbose_name = u"测报灯-预警范围"
  654. verbose_name_plural = verbose_name
  655. # 预警列表:
  656. class Alarm_record(models.Model):
  657. equip_id = models.ForeignKey(Equip)
  658. e_type = models.CharField(u'设备类型编号', max_length=20, blank=True, null=True)
  659. alarm_time = models.DateTimeField(u'预警时间', default=timezone.now)
  660. alarm_desc = models.TextField(u'预警描述', blank=True, null=True)
  661. # def __str__(self):
  662. # return self.equip_name
  663. class Meta:
  664. verbose_name = u"预警列表"
  665. verbose_name_plural = verbose_name
  666. ordering = ['-alarm_time']
  667. get_latest_by = 'alarm_time'
  668. # 测报灯短信配置表
  669. class Msg_Conf(models.Model):
  670. equip_id = models.ForeignKey(Equip)
  671. conf = models.TextField(u'短信配置', blank=True, null=True)
  672. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  673. class Meta:
  674. verbose_name = u"测报灯短信配置表"
  675. verbose_name_plural = verbose_name
  676. ordering = ['-upl_time']
  677. get_latest_by = 'upl_time'
  678. # 短信发送记录表:
  679. class Msg_Send(models.Model):
  680. mobile = models.CharField(u'手机号',max_length=20, blank=True)
  681. equip_id = models.CharField(u'设备号',max_length=20, blank=True)
  682. send_time = models.DateTimeField(u'发送时间', default=timezone.now)
  683. send_dec = models.CharField(u'发送内容',max_length=300, blank=True)
  684. result_desc = models.TextField(u'短信描述', blank=True, null=True)
  685. # def __str__(self):
  686. # return self.equip_name
  687. class Meta:
  688. verbose_name = u"短信发送记录表"
  689. verbose_name_plural = verbose_name
  690. ordering = ['-send_time']
  691. get_latest_by = 'send_time'
  692. # 气象站短信预警
  693. class QXZ_Alarm(models.Model):
  694. equip_id = models.ForeignKey(Equip)
  695. conf = models.TextField(u'短信配置', blank=True, null=True)
  696. tel = models.CharField(u'手机号',max_length=20, blank=True)
  697. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  698. class Meta:
  699. verbose_name = u"气象站短信预警"
  700. verbose_name_plural = verbose_name
  701. ordering = ['-upl_time']
  702. get_latest_by = 'upl_time'
  703. # 气象站短信预警记录
  704. class QXZ_Alarm_Log(models.Model):
  705. equip_id = models.ForeignKey(Equip)
  706. logs = models.TextField(u'短信反馈', blank=True, null=True)
  707. ekey = models.CharField(u'通道号',max_length=20, blank=True)
  708. info = models.CharField(u'内容',max_length=20, blank=True)
  709. upl_time = models.DateTimeField(u'上报时间', default=timezone.now)
  710. class Meta:
  711. verbose_name = u"气象站短信预警记录"
  712. verbose_name_plural = verbose_name
  713. ordering = ['-upl_time']
  714. get_latest_by = 'upl_time'
  715. # 气象站基础信息表
  716. class QXZ_Base_Info(models.Model):
  717. equip_id = models.ForeignKey(Equip)
  718. volt = models.CharField(u'电压', max_length=20, blank=True, null=True)
  719. rssi = models.CharField(u'信号强度', max_length=20, blank=True, null=True)
  720. iccid = models.CharField(u'设备卡号', max_length=50, blank=True, null=True)
  721. lng = models.CharField(u'经度', max_length=50, blank=True, null=True)
  722. lat = models.CharField(u'纬度', max_length=50, blank=True, null=True)
  723. led = models.CharField(u'led点阵屏', max_length=10, blank=True, null=True)
  724. ledinfo = models.CharField(u'led屏幕内容', max_length=100, blank=True, null=True)
  725. dver = models.CharField(u'设备版本号', max_length=100, blank=True, null=True)
  726. auto_locat = models.CharField(u'经纬度判断', max_length=50, default="1")
  727. # is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  728. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  729. class Meta:
  730. verbose_name = u"气象站基础信息表"
  731. verbose_name_plural = verbose_name
  732. ordering = ['-upl_time']
  733. get_latest_by = 'upl_time'
  734. # 气象站基础信息表
  735. class QXZ_Info_Record(models.Model):
  736. equip_id = models.ForeignKey(Equip)
  737. volt = models.CharField(u'电压', max_length=20, blank=True, null=True)
  738. rssi = models.CharField(u'信号强度', max_length=20, blank=True, null=True)
  739. # is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  740. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  741. class Meta:
  742. verbose_name = u"气象站信息历史"
  743. verbose_name_plural = verbose_name
  744. ordering = ['-upl_time']
  745. get_latest_by = 'upl_time'
  746. # 值#enum#通道
  747. # 新气象站配置表
  748. class QXZ_Conf(models.Model):
  749. equip_id = models.ForeignKey(Equip)
  750. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  751. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  752. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  753. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  754. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  755. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  756. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  757. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  758. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  759. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  760. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  761. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  762. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  763. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  764. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  765. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  766. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  767. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  768. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  769. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  770. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  771. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  772. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  773. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  774. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  775. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  776. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  777. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  778. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  779. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  780. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  781. class Meta:
  782. verbose_name = u'气象站标题配置'
  783. verbose_name_plural = verbose_name
  784. ordering = ['-upl_time']
  785. get_latest_by = 'upl_time'
  786. # 值#enum#通道
  787. # 新气象站配置表
  788. class QXZ_Default_Conf(models.Model):
  789. equip_id = models.ForeignKey(Equip)
  790. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  791. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  792. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  793. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  794. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  795. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  796. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  797. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  798. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  799. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  800. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  801. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  802. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  803. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  804. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  805. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  806. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  807. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  808. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  809. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  810. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  811. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  812. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  813. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  814. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  815. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  816. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  817. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  818. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  819. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  820. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  821. class Meta:
  822. verbose_name = u'气象站标题默认配置'
  823. verbose_name_plural = verbose_name
  824. ordering = ['-upl_time']
  825. get_latest_by = 'upl_time'
  826. # 值#enum#通道
  827. # 新气象站状态记录:
  828. class QXZstatus_New(models.Model):
  829. equip_id = models.ForeignKey(Equip)
  830. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  831. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  832. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  833. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  834. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  835. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  836. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  837. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  838. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  839. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  840. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  841. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  842. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  843. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  844. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  845. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  846. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  847. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  848. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  849. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  850. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  851. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  852. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  853. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  854. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  855. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  856. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  857. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  858. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  859. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  860. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  861. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  862. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  863. lng = models.CharField(u'经度', max_length=50, blank=True)
  864. lat = models.CharField(u'维度', max_length=50, blank=True)
  865. qxz_picture = models.ImageField(u'气象站图片', upload_to="qxz_photo/", default="qxz_photo/default.png")
  866. interval = models.CharField(u'设备数据上传时间间隔', max_length=30, blank=True, null=True)
  867. class Meta:
  868. verbose_name = u'气象站-状态表-新'
  869. verbose_name_plural = verbose_name
  870. ordering = ['-equip_id__equip_add_time']
  871. get_latest_by = 'equip_id__equip_add_time'
  872. # 新气象站数据记录:
  873. # 新气象站全部数据记录
  874. class QXZdata_New(models.Model):
  875. equip_id = models.ForeignKey(Equip)
  876. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  877. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  878. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  879. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  880. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  881. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  882. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  883. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  884. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  885. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  886. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  887. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  888. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  889. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  890. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  891. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  892. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  893. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  894. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  895. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  896. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  897. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  898. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  899. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  900. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  901. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  902. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  903. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  904. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  905. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  906. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  907. class Meta:
  908. verbose_name = u'气象站-数据表-新'
  909. verbose_name_plural = verbose_name
  910. ordering = ['-upl_time']
  911. get_latest_by = 'upl_time'
  912. # 气象站状态:
  913. # 气象站最新数据记录
  914. class QXZstatus(models.Model):
  915. equip_id = models.ForeignKey(Equip)
  916. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  917. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  918. qxz_status = models.TextField(u'气象站状态', blank=True, null=True)
  919. lng = models.CharField(u'经度', max_length=50, blank=True)
  920. lat = models.CharField(u'维度', max_length=50, blank=True)
  921. qxz_picture = models.ImageField(u'气象站图片', upload_to="qxz_photo/", default="qxz_photo/default.png")
  922. # qxz_picture = models.CharField(u'气象站图片', max_length=200, default="qxz_photo/default.png")
  923. class Meta:
  924. verbose_name = u"气象站-状态表"
  925. verbose_name_plural = verbose_name
  926. ordering = ['-equip_id__equip_add_time']
  927. get_latest_by = 'equip_id__equip_add_time'
  928. # 气象站数据记录:
  929. # 气象站全部数据记录
  930. class QXZdata(models.Model):
  931. equip_id = models.ForeignKey(Equip)
  932. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  933. qxz_data = models.TextField(u'气象站数据', blank=True, null=True)
  934. class Meta:
  935. verbose_name = u'气象站-数据表'
  936. verbose_name_plural = verbose_name
  937. ordering = ['-upl_time']
  938. get_latest_by = 'upl_time'
  939. # 气象站开关表
  940. class QXZswitchstatus(models.Model):
  941. equip_id = models.ForeignKey(Equip)
  942. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  943. qxz_switch = models.TextField(u'气象站开关', blank=True, null=True)
  944. class Meta:
  945. verbose_name = u'气象站-开关表'
  946. verbose_name_plural = verbose_name
  947. ordering = ['-upl_time']
  948. get_latest_by = 'upl_time'
  949. # 气象站开关配置表
  950. class QXZswitchdata(models.Model):
  951. equip_id = models.ForeignKey(Equip)
  952. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  953. qxz_switch_data = models.TextField(u'气象站开关名字', blank=True, null=True)
  954. class Meta:
  955. verbose_name = u'气象站-开关配置表'
  956. verbose_name_plural = verbose_name
  957. ordering = ['-upl_time']
  958. get_latest_by = 'upl_time'
  959. # 气象站阈值表
  960. class QXZAutoswitch(models.Model):
  961. equip_id = models.ForeignKey(Equip)
  962. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  963. qxz_auto = models.TextField(u'气象站阈值', blank=True, null=True)
  964. class Meta:
  965. verbose_name = u'气象站-阈值表'
  966. verbose_name_plural = verbose_name
  967. ordering = ['-upl_time']
  968. get_latest_by = 'upl_time'
  969. # 气象站开关定时表
  970. class QXZTimingswitch(models.Model):
  971. equip_id = models.ForeignKey(Equip)
  972. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  973. qxz_timing = models.TextField(u'气象站开关定时', blank=True, null=True)
  974. class Meta:
  975. verbose_name = u'气象站-定时表'
  976. verbose_name_plural = verbose_name
  977. ordering = ['-upl_time']
  978. get_latest_by = 'upl_time'
  979. # 孢子仪状态:
  980. # 孢子仪最新数据记录
  981. class BZYstatus(models.Model):
  982. equip_id = models.ForeignKey(Equip)
  983. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  984. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  985. bzy_status = models.TextField(u'孢子仪状态', blank=True, null=True)
  986. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  987. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  988. netconf = models.TextField(u'孢子仪地址', blank=True, null=True)
  989. glass = models.TextField(u'载玻片更换时间', null=True, blank=True)
  990. liquid = models.TextField(u'培养液更换时间', null=True, blank=True)
  991. # 绑定sim卡
  992. simid = models.CharField(u'设备sim卡', max_length=50, blank=True, null=True)
  993. class Meta:
  994. verbose_name = u"孢子仪-状态表"
  995. verbose_name_plural = verbose_name
  996. ordering = ['-equip_id__equip_add_time']
  997. get_latest_by = 'equip_id__equip_add_time'
  998. # 孢子仪数据记录:
  999. # 孢子仪全部数据记录
  1000. class BZYdata(models.Model):
  1001. equip_id = models.ForeignKey(Equip)
  1002. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  1003. bzy_data = models.TextField(u'孢子仪数据', blank=True, null=True)
  1004. class Meta:
  1005. verbose_name = u'孢子仪-数据表'
  1006. verbose_name_plural = verbose_name
  1007. ordering = ['-upl_time']
  1008. get_latest_by = 'upl_time'
  1009. # 孢子仪照片记录:
  1010. class BZYphoto(models.Model):
  1011. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  1012. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  1013. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  1014. # 用户自定义添加:孢子识别结果
  1015. describe = models.TextField(u'描述', blank=True, null=True)
  1016. def __str__(self):
  1017. return self.addr
  1018. class Meta:
  1019. verbose_name = u'孢子仪-照片列表'
  1020. verbose_name_plural = verbose_name
  1021. ordering = ['-upl_time']
  1022. get_latest_by = 'upl_time'
  1023. # 设备sim卡信息
  1024. class Equip_SimInfo(models.Model):
  1025. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  1026. equip_name = models.CharField(u'设备名称', max_length=100, blank=True, null=True)
  1027. equip_type = models.CharField(u'设备类型', max_length=10, blank=True, null=True)
  1028. iccid = models.CharField(u'iccid', max_length=30, blank=True, null=True)
  1029. msisdn = models.CharField(u'msisdn', max_length=30, blank=True, null=True)
  1030. imsi = models.CharField(u'imsi', max_length=30, blank=True, null=True)
  1031. sp_code = models.CharField(u'短信端口', max_length=30, blank=True, null=True)
  1032. carrier = models.CharField(u'运营商', max_length=30, blank=True, null=True)
  1033. data_plan = models.CharField(u'套餐大小', max_length=20, blank=True, null=True)
  1034. data_usage = models.CharField(u'当月用量', max_length=20, blank=True, null=True)
  1035. account_status = models.CharField(u'卡状态', max_length=20, blank=True, null=True)
  1036. expiry_date = models.CharField(u'计费结束日期', max_length=20, blank=True, null=True)
  1037. active = models.CharField(u'激活状态', max_length=10, blank=True, null=True)
  1038. test_valid_date = models.CharField(u'测试期起始日期', max_length=20, blank=True, null=True)
  1039. silent_valid_date = models.CharField(u'沉默期起始日期', max_length=20, blank=True, null=True)
  1040. test_used_data_usage = models.CharField(u'测试期已用流量', max_length=20, blank=True, null=True)
  1041. active_date = models.CharField(u'激活日期', max_length=20, blank=True, null=True)
  1042. data_balance = models.CharField(u'剩余流量,单位M', max_length=20, blank=True, null=True)
  1043. outbound_date = models.CharField(u'出库日期', max_length=20, blank=True, null=True)
  1044. support_sms = models.CharField(u'是否支持短信', max_length=10, blank=True, null=True)
  1045. sim_alarm = models.TextField(u'sim卡提示配置', blank=True, null=True)
  1046. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  1047. def __str__(self):
  1048. return self.equip_id.equip_id
  1049. class Meta:
  1050. verbose_name = u'设备sim卡信息表'
  1051. verbose_name_plural = verbose_name
  1052. ordering = ['-upl_time']
  1053. get_latest_by = 'upl_time'
  1054. # 韩英磊定制版判定孢子是否存在
  1055. class Spore_Exist(models.Model):
  1056. equip_id = models.CharField(u'设备ID', max_length=50, blank=True)
  1057. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  1058. is_exist = models.BooleanField(u'是否存在孢子',default=False)
  1059. def __str__(self):
  1060. return self.equip_id
  1061. class Meta:
  1062. verbose_name = u'孢子仪-孢子存在表'
  1063. verbose_name_plural = verbose_name
  1064. ordering = ['-upl_time']
  1065. get_latest_by = 'upl_time'
  1066. # APP版本号
  1067. class App_Edition(models.Model):
  1068. edition_num = models.CharField(u'版本号', max_length=50, blank=True)
  1069. edition_desc = models.CharField(u'更新描述', max_length=50, blank=True)
  1070. upl_time = models.DateTimeField(u'更新时间', default=timezone.now)
  1071. def __str__(self):
  1072. return self.edition_num
  1073. class Meta:
  1074. verbose_name = u'APP版本描述'
  1075. verbose_name_plural = verbose_name
  1076. ordering = ['-upl_time']
  1077. get_latest_by = 'upl_time'
  1078. # 依科曼性诱状态表
  1079. class Trapstatus(models.Model):
  1080. equip_id = models.ForeignKey(Equip)
  1081. addr = models.CharField(u'设备位置', max_length=50, blank=True, null=True)
  1082. tem = models.CharField(u'温度', max_length=20, blank=True, null=True)
  1083. hum = models.CharField(u'湿度', max_length=20, blank=True, null=True)
  1084. pest = models.CharField(u'害虫名称', max_length=20, blank=True, null=True)
  1085. pestnum = models.CharField(u'害虫数量', max_length=20, blank=True, null=True)
  1086. upl_time = models.DateTimeField(u'上传时间', blank=True, null=True)
  1087. class Meta:
  1088. verbose_name = u'性诱状态表'
  1089. verbose_name_plural = verbose_name
  1090. ordering = ['-equip_id__equip_add_time']
  1091. get_latest_by = 'equip_id__equip_add_time'
  1092. # 依科曼性诱数据表
  1093. class Trapdata(models.Model):
  1094. equip_id = models.ForeignKey(Equip)
  1095. addr = models.CharField(u'设备位置', max_length=50, blank=True, null=True)
  1096. tem = models.CharField(u'温度', max_length=20, blank=True, null=True)
  1097. hum = models.CharField(u'湿度', max_length=20, blank=True, null=True)
  1098. pest = models.CharField(u'害虫名称', max_length=20, blank=True, null=True)
  1099. pestnum = models.CharField(u'害虫数量', max_length=20, blank=True, null=True)
  1100. upl_time = models.DateTimeField(u'上传时间', blank=True, null=True)
  1101. class Meta:
  1102. verbose_name = u'性诱数据表'
  1103. verbose_name_plural = verbose_name
  1104. ordering = ['-upl_time']
  1105. get_latest_by = 'upl_time'
  1106. # 性诱设备照片记录:
  1107. class Trapphoto(models.Model):
  1108. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  1109. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  1110. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  1111. def __str__(self):
  1112. return self.addr
  1113. class Meta:
  1114. verbose_name = u'性诱设备照片'
  1115. verbose_name_plural = verbose_name
  1116. ordering = ['-upl_time']
  1117. get_latest_by = 'upl_time'
  1118. # VR展示表
  1119. class VR_Photo(models.Model):
  1120. user = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'所属用户')
  1121. name = models.CharField(u'基地名称', max_length=50, blank=True, null=True)
  1122. display = models.CharField(u'缩略图', max_length=200, blank=True, null=True)
  1123. photo = models.CharField(u'VR展示图', blank=True, null=True, max_length=200)
  1124. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  1125. class Meta:
  1126. verbose_name = u'VR-照片表'
  1127. verbose_name_plural = verbose_name
  1128. ordering = ['-upl_time']
  1129. get_latest_by = 'upl_time'
  1130. # APP轮播图
  1131. class APP_Img(models.Model):
  1132. user = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'所属用户')
  1133. img = models.CharField(u'轮播图', blank=True, null=True, max_length=200)
  1134. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  1135. class Meta:
  1136. verbose_name = u'APP-轮播图'
  1137. verbose_name_plural = verbose_name
  1138. ordering = ['-upl_time']
  1139. get_latest_by = 'upl_time'
  1140. #数据转发数据、图片表
  1141. class Equip_Forward(models.Model):
  1142. equip_id = models.CharField(u"设备号",blank=True, null=True, max_length=25)
  1143. # equip_type = models.CharField(u"设备类型",blank=True, null=True, max_length=5)
  1144. equip_data_url = models.TextField(u"设备数据转发url",blank=True, null=True)
  1145. equip_img_url = models.TextField(u"设备图片转发url",blank=True, null=True)
  1146. equip_img_between = models.CharField(u"转发图片进行区分",blank=True, null=True, max_length=10)
  1147. equip_data_between = models.CharField(u"转发数据进行区分",blank=True, null=True, max_length=10)
  1148. # 1----------- 旧的数据转发地址
  1149. # 2----------- 新的数据转发地址
  1150. #equip_img_between
  1151. # 1----------- 旧的图片转发地址
  1152. # 2----------- 新的图片转发地址
  1153. class Meta:
  1154. verbose_name = u"数据转发表"
  1155. verbose_name_plural = verbose_name
  1156. #测报员表
  1157. class User_Reporter(models.Model):
  1158. user_id = models.ForeignKey(MyUser,verbose_name = "用户",null = True,blank = True)
  1159. name = models.CharField(max_length =32, verbose_name = "测报员名字", null = True , blank = True)
  1160. password = models.CharField(max_length =150, verbose_name = "密码", null = True , blank = True)
  1161. phone = models.CharField(max_length =15, verbose_name = "手机号码", null = True , blank = True,default=None)
  1162. photo = models.ImageField(u'用户头像', upload_to="ce_cuser_head/",null = True , blank = True, default="ce_cuser_head/default.png")
  1163. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1164. addr = models.CharField(max_length =64, verbose_name = "地点", null = True , blank = True,default=None)
  1165. class Meta:
  1166. db_table = "Pest_User_Reporter"
  1167. verbose_name = "病虫害测报员数据表"
  1168. verbose_name_plural = verbose_name
  1169. ordering = ['-time']
  1170. get_latest_by = 'time'
  1171. #全国省市县
  1172. class Address_Province(models.Model):
  1173. '''省市县'''
  1174. code = models.CharField(max_length = 20, verbose_name = "编码", null = True, blank = True)
  1175. name = models.CharField(max_length = 100, verbose_name = "名称", null = False, blank = False)
  1176. parent_code = models.CharField(max_length = 100, verbose_name = "上级名称", null = True, blank = True)
  1177. class Meta:
  1178. db_table = "Pest_City_Address"
  1179. verbose_name = "中国省市县"
  1180. verbose_name_plural = verbose_name
  1181. def __str__(self):
  1182. return self.name
  1183. #月份
  1184. class User_Month(models.Model):
  1185. month = models.CharField(max_length = 20, verbose_name = "月份", null = True, blank = True)
  1186. addr_id = models.ForeignKey(Address_Province, verbose_name = "地区", null = True, blank = True)
  1187. class Meta:
  1188. db_table = "Pest_User_Month"
  1189. verbose_name = "病虫害月份表"
  1190. verbose_name_plural = verbose_name
  1191. #病虫害
  1192. class Pest_Harm_New(models.Model):
  1193. pest = models.CharField(max_length = 20, verbose_name = "病虫害种类", null = False, blank = False)
  1194. pest_sort = models.CharField(max_length = 10, verbose_name = "病虫害区分", null = False, blank = False)
  1195. pest_name = models.CharField(max_length = 100, verbose_name = "病虫害名字", null = True, blank = True)
  1196. month_id = models.ForeignKey(User_Month,verbose_name = "月份", null = True, blank = True)
  1197. user_id = models.ForeignKey(User_Reporter,verbose_name = "用户", null = True, blank = True)
  1198. crop_sort = models.CharField(max_length = 20, verbose_name = "作物分类", null = True, blank = True)
  1199. class Meta:
  1200. db_table = "Pest_Harm_New"
  1201. verbose_name = "病虫害种类数据表新"
  1202. verbose_name_plural = verbose_name
  1203. #采集人数据表
  1204. class User_Data_Table_New(models.Model):
  1205. harm_id = models.ForeignKey(Pest_Harm_New,verbose_name = "病虫害", null = True, blank = True)
  1206. user_id = models.ForeignKey(User_Reporter,verbose_name = "采集人", null = True, blank = True)
  1207. upl_time = models.DateTimeField(verbose_name = '创建时间', default=timezone.now)
  1208. lng = models.CharField(u'经度', max_length=32, blank=True, null=True)
  1209. lat = models.CharField(u'维度', max_length=32, blank=True, null=True)
  1210. growth_stages = models.CharField(max_length = 32, verbose_name = '生育期', null = True, blank = True)
  1211. addr_photo = models.CharField(u'病虫害照片路径', max_length=200, blank=True, null=True)
  1212. area = models.CharField(max_length = 32, verbose_name = '统计面积', null = True, blank = True)
  1213. pestname = models.CharField(max_length =500, verbose_name = "病害值", null = True , blank = True)
  1214. cens_method = models.CharField(max_length =32, verbose_name = "统计方法", null = True , blank = True)
  1215. defa = models.CharField(max_length =5, verbose_name = "默认选中", null = True , blank = True,default=0)
  1216. class Meta:
  1217. db_table = "Pest_User_Data_Table_New"
  1218. verbose_name = "病虫害统计数据表新"
  1219. verbose_name_plural = verbose_name
  1220. ordering = ['-upl_time']
  1221. get_latest_by = 'upl_time'
  1222. #昆虫分类(以昆虫纲开始分,目、亚目、属)(弃用)
  1223. class Insecta_Sort(models.Model):
  1224. code = models.CharField(max_length =20, verbose_name = "编码", null = True , blank = True, default=None)
  1225. sort = models.CharField(max_length =50, verbose_name = "分类", null = True , blank = True,default=None)
  1226. sort_code = models.CharField(max_length = 50, verbose_name = "上级分类", null = True, blank = True,default=None)
  1227. class Meta:
  1228. db_table = "Pest_Insecta_Sort"
  1229. verbose_name = "病虫害分类表(虫害)"
  1230. verbose_name_plural = verbose_name
  1231. #昆虫种类和作物种类(弃用)
  1232. class Insect_Plant(models.Model):
  1233. ids = models.ForeignKey(MyUser,verbose_name = "用户",null = True,blank = True)
  1234. reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True)
  1235. insect_type = models.CharField(max_length =32, verbose_name = "虫害种类名称", null = True , blank = True, default=None)
  1236. plant_type = models.CharField(max_length =32, verbose_name = "作物种类名称", null = True , blank = True,default=None)
  1237. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1238. class Meta:
  1239. db_table = "Pest_Insect_Plant"
  1240. verbose_name = "病虫害种类表"
  1241. verbose_name_plural = verbose_name
  1242. ordering = ['-time']
  1243. get_latest_by = 'time'
  1244. #昆虫种类和作物种类病害级别表(弃用)
  1245. class Insect_Plant_Leve(models.Model):
  1246. inid = models.ForeignKey(Insect_Plant,verbose_name = "种类",null = True,blank = True)
  1247. plant_name = models.CharField(max_length =32, verbose_name = "作物病害名", null = True , blank = True,default=None)
  1248. insect_name = models.CharField(max_length =32, verbose_name = "虫病害名", null = True , blank = True,default=None)
  1249. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1250. class Meta:
  1251. db_table = "Pest_Insect_Plant_Leve"
  1252. verbose_name = "病虫害级别表"
  1253. verbose_name_plural = verbose_name
  1254. ordering = ['-time']
  1255. get_latest_by = 'time'
  1256. #采集人数据表(弃用)
  1257. class User_Data_Table(models.Model):
  1258. user_id=models.ForeignKey(MyUser,verbose_name = "用户",null = True,blank = True)
  1259. reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True)
  1260. time = models.DateTimeField(verbose_name = '创建时间', default=timezone.now)
  1261. user_city = models.CharField(u'用户详情地址', max_length=100, blank=True,null = True)
  1262. lng = models.CharField(u'经度', max_length=32, blank=True)
  1263. lat = models.CharField(u'维度', max_length=32, blank=True)
  1264. addr_photo = models.CharField(u'病虫害照片路径', max_length=200, blank=True, null=True)
  1265. insect_sort = models.CharField(max_length = 120, verbose_name = '所属分类',blank=True,null = True, default=None)
  1266. names = models.CharField(max_length = 32, verbose_name = '病虫害名字',blank=True,null = True)
  1267. area = models.CharField(max_length = 32, verbose_name = '统计面积', null = True, blank = True)
  1268. pestname = models.CharField(max_length =500, verbose_name = "病害值", null = True , blank = True)
  1269. statistical = models.CharField(max_length =32, verbose_name = "统计种类", null = True , blank = True)
  1270. statistical_method=models.CharField(max_length =32, verbose_name = "统计方法", null = True , blank = True)
  1271. class Meta:
  1272. db_table = "Pest_User_Data_Table"
  1273. verbose_name = "病虫害统计数据表"
  1274. verbose_name_plural = verbose_name
  1275. ordering = ['-time']
  1276. get_latest_by = 'time'
  1277. def __str__(self):
  1278. return self.reporter_id.name
  1279. #病虫害app升级
  1280. class Insect_Edition(models.Model):
  1281. app_name = models.CharField(u'app版本名称', max_length=50, blank=True)
  1282. app_num = models.CharField(u'版本号', max_length=50, blank=True)
  1283. app_desc = models.CharField(u'更新描述', max_length=50, blank=True)
  1284. upl_time = models.DateTimeField(u'更新时间', default=timezone.now)
  1285. def __str__(self):
  1286. return self.app_name
  1287. class Meta:
  1288. db_table = "Pest_Insect_Edition"
  1289. verbose_name = u'病虫害APP版本描述'
  1290. verbose_name_plural = verbose_name
  1291. ordering = ['-upl_time']
  1292. get_latest_by = 'upl_time'
  1293. #病虫害知识库
  1294. class Diseases(models.Model):
  1295. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1296. course = models.CharField(max_length=100, verbose_name="所属科目", null=True, blank=True, default=None)
  1297. name = models.CharField(max_length=32, verbose_name="病虫害名",null=True, blank=True, default=None)
  1298. # addr = models.CharField(max_length =32, verbose_name = "地点", null = True , blank = True,default=None)
  1299. # img = models.ImageField(u'用户上传识别图片',upload_to="diseases_photos",max_length = 200, default=None,null = True , blank = True)
  1300. img_urls = models.CharField(u'识别出来的图片', max_length=300, null=True, blank=True, default=None)
  1301. prevention = models.TextField(u'防止方法', max_length=5000, null=True, blank=True, default=None)
  1302. # msg = models.CharField(u'识别编号',max_length =16)
  1303. ret = models.CharField(verbose_name="病虫害", max_length=10, blank=True, null=True)
  1304. class Meta:
  1305. db_table = "Pest_Diseases_table"
  1306. verbose_name = "病虫害知识库表"
  1307. verbose_name_plural = verbose_name
  1308. #虫害识别保存
  1309. class App_Insect(models.Model):
  1310. userid = models.ForeignKey(MyUser, verbose_name='用户',null = True,blank = True)
  1311. reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True)
  1312. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1313. course = models.CharField(max_length=100, verbose_name="所属科目", null=True, blank=True, default=None)
  1314. name = models.CharField(max_length=32, verbose_name="昆虫名",null=True, blank=True, default=None)
  1315. addr = models.CharField(max_length =100, verbose_name = "识别地点", null = True , blank = True,default=None)
  1316. img = models.ImageField(u'用户上传昆虫识别图片', upload_to="insect_photos/",max_length=100, default=None, null=True, blank=True)
  1317. img_urls = models.CharField(u'识别出来的图片', max_length=300, null=True, blank=True, default=None)
  1318. prevention = models.TextField(u'防止方法', max_length=5000, null=True, blank=True, default=None)
  1319. lng = models.CharField(u'经度', max_length=32, blank=True)
  1320. lat = models.CharField(u'维度', max_length=32, blank=True)
  1321. # msg = models.CharField(u'识别编号',max_length =16)
  1322. class Meta:
  1323. db_table = "Pest_Insect_Table"
  1324. verbose_name = "病虫害害虫识别表"
  1325. verbose_name_plural = verbose_name
  1326. ordering = ['-time']
  1327. get_latest_by = 'time'
  1328. #植物识别表
  1329. class App_Plant(models.Model):
  1330. userid = models.ForeignKey(MyUser, verbose_name='用户',null = True,blank = True)
  1331. reporter_id = models.ForeignKey(User_Reporter,verbose_name = "测报员",null = True,blank = True)
  1332. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1333. course = models.CharField(max_length=100, verbose_name="所属科目", null=True, blank=True, default=None)
  1334. name = models.CharField(max_length=32, verbose_name="作物病害名", null=True, blank=True, default=None)
  1335. addr = models.CharField(max_length =100, verbose_name = "识别地点", null = True , blank = True,default=None)
  1336. img = models.ImageField(u'用户上传作物识别图片', upload_to="plant_photos/",max_length=100, default=None, null=True, blank=True)
  1337. img_urls = models.CharField(u'识别出来的图片', max_length=300, null=True, blank=True, default=None)
  1338. prevention = models.TextField(u'防止方法', max_length=5000, null=True, blank=True, default=None)
  1339. lng = models.CharField(u'经度', max_length=32, blank=True)
  1340. lat = models.CharField(u'维度', max_length=32, blank=True)
  1341. # msg = models.CharField(u'识别编号',max_length =16)
  1342. class Meta:
  1343. db_table = "Pest_Plant_Table"
  1344. verbose_name = "病虫害作物识别表"
  1345. verbose_name_plural = verbose_name
  1346. ordering = ['-time']
  1347. get_latest_by = 'time'
  1348. #用户反馈 1联系 2不联系
  1349. class Feedback(models.Model):
  1350. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1351. phone = models.CharField(max_length=32, verbose_name="电话号码", null=True, blank=True, default=None)
  1352. name = models.CharField(max_length=32, verbose_name="用户名", null=True, blank=True, default=None)
  1353. proposal = models.TextField(max_length =500, verbose_name = "用户提出的建议", null = True , blank = True,default=None)
  1354. count = models.TextField(max_length =500, verbose_name = "需要改进的地方", null = True , blank = True,default=None)
  1355. store = models.CharField(verbose_name="是否联系用户",max_length=6, blank=True, default=0, null=True)
  1356. class Meta:
  1357. db_table = "Pest_Feedback"
  1358. verbose_name = "病虫害用户反馈"
  1359. verbose_name_plural = verbose_name
  1360. ordering = ['-time']
  1361. get_latest_by = 'time'
  1362. #加密
  1363. class Encryption(models.Model):
  1364. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1365. meid = models.CharField(max_length=54, verbose_name="手机唯一标识", null=True, blank=True, default=None)
  1366. cipher = models.CharField(max_length=54, verbose_name="秘钥", null=True, blank=True, default=None)
  1367. # mark = models.CharField(max_length=10, verbose_name="标识", null=True, blank=True, default=None)
  1368. class Meta:
  1369. db_table = "Pest_Encryption"
  1370. verbose_name = "病虫害登录加密表"
  1371. verbose_name_plural = verbose_name
  1372. #购买app用户列表
  1373. class Purchase(models.Model):
  1374. time = models.DateTimeField(u'添加时间', default=timezone.now)
  1375. userid = models.ForeignKey(MyUser,verbose_name="购买用户", null=True, blank=True)
  1376. class Meta:
  1377. db_table = "Pest_Purchase"
  1378. verbose_name = "病虫害app购买表"
  1379. verbose_name_plural = verbose_name