models.py 76 KB

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