Browse Source

丁燕青四情切割项目

yf_zd 5 years atrás
commit
3a3932b296
100 changed files with 16626 additions and 0 deletions
  1. 88 0
      .gitignore
  2. 1 0
      .sync/ID
  3. 13 0
      .sync/IgnoreList
  4. 7 0
      .sync/StreamsList
  5. 0 0
      .vscode/last.sql
  6. 3 0
      .vscode/settings.json
  7. 72 0
      LICENSE
  8. 5 0
      README.md
  9. 0 0
      apps/AppInfoManage/__init__.py
  10. 38 0
      apps/AppInfoManage/admin.py
  11. 9 0
      apps/AppInfoManage/apps.py
  12. 1725 0
      apps/AppInfoManage/models.py
  13. 3 0
      apps/AppInfoManage/tests.py
  14. 11 0
      apps/AppInfoManage/urls.py
  15. 17 0
      apps/AppInfoManage/views.py
  16. 0 0
      apps/EquipAllot/__init__.py
  17. 3 0
      apps/EquipAllot/admin.py
  18. 5 0
      apps/EquipAllot/apps.py
  19. 0 0
      apps/EquipAllot/migrations/__init__.py
  20. 3 0
      apps/EquipAllot/models.py
  21. 3 0
      apps/EquipAllot/tests.py
  22. 16 0
      apps/EquipAllot/urls.py
  23. 426 0
      apps/EquipAllot/views.py
  24. 1 0
      apps/EquipList/__init__.py
  25. 63 0
      apps/EquipList/admin.py
  26. 37 0
      apps/EquipList/adminx.py
  27. 8 0
      apps/EquipList/apps.py
  28. 0 0
      apps/EquipList/migrations/__init__.py
  29. 7 0
      apps/EquipList/models.py
  30. 3 0
      apps/EquipList/tests.py
  31. 15 0
      apps/EquipList/urls.py
  32. 405 0
      apps/EquipList/views.py
  33. 2 0
      apps/EquipManage/__init__.py
  34. 2079 0
      apps/EquipManage/admin.py
  35. 70 0
      apps/EquipManage/adminx.py
  36. 8 0
      apps/EquipManage/apps.py
  37. 0 0
      apps/EquipManage/migrations/__init__.py
  38. 3 0
      apps/EquipManage/models.py
  39. 3 0
      apps/EquipManage/tests.py
  40. 205 0
      apps/EquipManage/urls.py
  41. 5173 0
      apps/EquipManage/views.py
  42. 1 0
      apps/ExpertDiag/__init__.py
  43. 20 0
      apps/ExpertDiag/admin.py
  44. 8 0
      apps/ExpertDiag/apps.py
  45. 0 0
      apps/ExpertDiag/migrations/__init__.py
  46. 2 0
      apps/ExpertDiag/models.py
  47. 3 0
      apps/ExpertDiag/tests.py
  48. 10 0
      apps/ExpertDiag/urls.py
  49. 17 0
      apps/ExpertDiag/views.py
  50. 1 0
      apps/HelpCenter/__init__.py
  51. 36 0
      apps/HelpCenter/admin.py
  52. 8 0
      apps/HelpCenter/apps.py
  53. 0 0
      apps/HelpCenter/migrations/__init__.py
  54. 3 0
      apps/HelpCenter/models.py
  55. 3 0
      apps/HelpCenter/tests.py
  56. 14 0
      apps/HelpCenter/urls.py
  57. 26 0
      apps/HelpCenter/views.py
  58. 0 0
      apps/Home/__init__.py
  59. 3 0
      apps/Home/admin.py
  60. 8 0
      apps/Home/apps.py
  61. 219 0
      apps/Home/forms.py
  62. 0 0
      apps/Home/migrations/__init__.py
  63. 3 0
      apps/Home/models.py
  64. 3 0
      apps/Home/tests.py
  65. 103 0
      apps/Home/urls.py
  66. 1357 0
      apps/Home/views.py
  67. 0 0
      apps/MsgAlarm/__init__.py
  68. 3 0
      apps/MsgAlarm/admin.py
  69. 5 0
      apps/MsgAlarm/apps.py
  70. 0 0
      apps/MsgAlarm/migrations/__init__.py
  71. 3 0
      apps/MsgAlarm/models.py
  72. 3 0
      apps/MsgAlarm/tests.py
  73. 29 0
      apps/MsgAlarm/urls.py
  74. 419 0
      apps/MsgAlarm/views.py
  75. 0 0
      apps/PestPC/__init__.py
  76. 338 0
      apps/PestPC/admin.py
  77. 5 0
      apps/PestPC/apps.py
  78. 0 0
      apps/PestPC/migrations/__init__.py
  79. 3 0
      apps/PestPC/models.py
  80. 3 0
      apps/PestPC/tests.py
  81. 66 0
      apps/PestPC/urls.py
  82. 1254 0
      apps/PestPC/views.py
  83. 0 0
      apps/Pestapp/__init__.py
  84. 194 0
      apps/Pestapp/admin.py
  85. 5 0
      apps/Pestapp/apps.py
  86. 0 0
      apps/Pestapp/migrations/__init__.py
  87. 3 0
      apps/Pestapp/models.py
  88. 3 0
      apps/Pestapp/tests.py
  89. 104 0
      apps/Pestapp/urls.py
  90. 1498 0
      apps/Pestapp/views.py
  91. 0 0
      apps/Products/__init__.py
  92. 3 0
      apps/Products/admin.py
  93. 5 0
      apps/Products/apps.py
  94. 0 0
      apps/Products/migrations/__init__.py
  95. 3 0
      apps/Products/models.py
  96. 3 0
      apps/Products/tests.py
  97. 60 0
      apps/Products/urls.py
  98. 234 0
      apps/Products/views.py
  99. 2 0
      apps/ReportManage/__init__.py
  100. 0 0
      apps/ReportManage/admin.py

+ 88 - 0
.gitignore

@@ -0,0 +1,88 @@
+# ---> Python
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*,cover
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+!apps/AppInfoManage/migrations/__init__.py
+apps/AppInfoManage/migrations/
+cbd_img/
+bzy_img/
+pyftp/ftp_file/
+vr_photo/
+user_photo/
+base_show/
+home_logo/
+update/
+/static/
+/logs/
+/env/
+result_cbd_img/
+result_pyftp/
+app_file/
+qxz_photo/
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+.mmdb
+
+ce_cuser_head/
+harm_photos/
+harm_base_photos/
+insect_photos/
+insect_photos_fail/
+plant_photos/
+plant_photos_fail/
+level_app/
+sexport_file/
+download_app/
+wechat_photo/
+qr_code/

+ 1 - 0
.sync/ID

@@ -0,0 +1 @@
+–~8»¿ço1S™¸”Æ·bácdŽ

+ 13 - 0
.sync/IgnoreList

@@ -0,0 +1,13 @@
+# IgnoreList is a UTF-8 encoded .txt file that helps you specify single files, paths and rules 
+# for ignoring during the synchronization job. It supports "?" and "*" wildcard symbols.
+#
+#
+# OS generated files #
+.DS_Store
+.Spotlight-V100
+.Trashes
+~*
+ehthumbs.db
+desktop.ini
+Thumbs.db
+._*

+ 7 - 0
.sync/StreamsList

@@ -0,0 +1,7 @@
+# StreamsList is a UTF-8 encoded .txt file that helps you specify alternate streams,
+# xattrs and resource forks white list. It supports "?" and "*" wildcard symbols.
+#
+#
+com.apple.metadata:_kMDItemUserTags
+com.apple.ResourceFork
+com.apple.metadata:kMDItemFinderComment

+ 0 - 0
.vscode/last.sql


+ 3 - 0
.vscode/settings.json

@@ -0,0 +1,3 @@
+{
+    "python.pythonPath": "D:\\python361\\python.exe"
+}

File diff suppressed because it is too large
+ 72 - 0
LICENSE


+ 5 - 0
README.md

@@ -0,0 +1,5 @@
+# yfwlw
+
+云飞物联网发布的新平台V3.0.0
+
+V3.1.0  2020.01.07增加用户页面账号有效期显示以及增加充值时间按钮

+ 0 - 0
apps/AppInfoManage/__init__.py


+ 38 - 0
apps/AppInfoManage/admin.py

@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+from django.contrib import admin
+from .models import Fdb, App_pic
+# Register your models here.
+# 定制反馈列表Fdb的 Admin 后台
+
+
+class FdbAdmin(admin.ModelAdmin):
+    list_display = [
+        'fdb_name',
+        'fdb_phone',
+        'fdb_email',
+        'fdb_content',
+        'fdb_time',
+        'fdb_rep_status',
+        'fdb_rep_time',
+        'fdb_rep_cont'
+    ]
+
+
+admin.site.register(Fdb, FdbAdmin)
+
+# 定制反馈列表Fdb的 Admin 后台
+
+
+class App_picAdmin(admin.ModelAdmin):
+    list_display = [
+        'app_pic_title',
+        'app_pic',
+        'app_pic_type',
+        'app_pic_content',
+        'app_pic_order',
+        'app_pic_cre_time'
+    ]
+
+
+admin.site.register(App_pic, App_picAdmin)

+ 9 - 0
apps/AppInfoManage/apps.py

@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+from django.apps import AppConfig
+
+
+class AppinfomanageConfig(AppConfig):
+    name = 'apps.AppInfoManage'
+    verbose_name = u'APP管理'
+

File diff suppressed because it is too large
+ 1725 - 0
apps/AppInfoManage/models.py


+ 3 - 0
apps/AppInfoManage/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 11 - 0
apps/AppInfoManage/urls.py

@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+
+app_name = 'apps.AppInfoManage'
+urlpatterns = [
+    url(r'^app_picture$', views.app_picture, name='app_picture'),
+    url(r'^app_advice$', views.app_advice, name='app_advice'),
+]

+ 17 - 0
apps/AppInfoManage/views.py

@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render
+from apps.AppInfoManage.models import User_Log
+
+# APP轮播图:
+def app_picture(request):
+    User_Log.objects.create(log_user=request.user.username,
+                               log_ip=request.META['REMOTE_ADDR'], log_desc='APP信息管理-轮播图管理')
+    return render(request, 'appinfomanage/app_picture.html', context={})
+
+
+# APP意见反馈:
+def app_advice(request):
+    User_Log.objects.create(log_user=request.user.username,
+                               log_ip=request.META['REMOTE_ADDR'], log_desc='APP信息管理-意见反馈')
+    return render(request, 'appinfomanage/app_advice.html', context={})

+ 0 - 0
apps/EquipAllot/__init__.py


+ 3 - 0
apps/EquipAllot/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 5 - 0
apps/EquipAllot/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class EquipallotConfig(AppConfig):
+    name = 'EquipAllot'

+ 0 - 0
apps/EquipAllot/migrations/__init__.py


+ 3 - 0
apps/EquipAllot/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/EquipAllot/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 16 - 0
apps/EquipAllot/urls.py

@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+from .views import EquipAllot
+
+
+app_name = 'apps.EquipAllot'
+urlpatterns = [
+    url(r'^equipallot$', EquipAllot.as_view(), name='equipallot'),
+    url(r'^allot_user_list$', views.allot_user_list, name='allot_user_list'),
+
+    url(r'^allot$', views.allot, name='allot'),
+    url(r'^allot_equip_list$', views.allot_equip_list, name='allot_equip_list'),
+]

+ 426 - 0
apps/EquipAllot/views.py

@@ -0,0 +1,426 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render
+from django.views.generic import ListView
+from apps.AppInfoManage.models import MyUser, User_Log, Equip, Group
+from django import forms
+from django.db.models import Q
+import re
+import datetime
+
+
+# 分配设备
+class EquipAllot(ListView):
+    def get(self, request):
+        # 接收当前用户
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        # 判断是经销商还是超级管理员
+        if current_user.is_superuser == True or current_user.is_staff == True:
+            user_list = MyUser.objects.all()
+        else:
+            user_list = MyUser.objects.filter(user_agency=current_user.user_agency)
+        nums = user_list.count()
+        User_Log.objects.create(log_user=request.user.username,
+                                log_ip=request.META['REMOTE_ADDR'], log_desc='设备分配')
+        return render(request, 'equipallot/equipallot.html', context={"nums": nums})
+
+    def post(self, request):
+        pass
+
+
+def allot_user_list(request):
+    if request.method == 'GET':
+        page = int(request.GET.get('page'))
+        print("page=", page)
+        # 接收当前用户
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        # 判断是经销商还是超级管理员
+        if current_user.is_superuser == True or current_user.is_staff == True:
+            user_list = MyUser.objects.all().order_by(
+                "-date_joined")[(10*(page-1)):(page*10)]
+        else:
+            user_list = MyUser.objects.filter(user_agency=current_user.user_agency).order_by(
+                "-date_joined")[(10*(page-1)):(page*10)]
+        return render(request, 'equipallot/allot_user_list.html', context={'user_list': user_list})
+
+    elif request.method == 'POST':
+        req = request.POST.get('req')
+        print("req:", req)
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        if req == "filter":
+            # 筛选:用户名、创建时间:f:filter
+            print("筛选:")
+            f_name = request.POST.get('uname')
+            f_tbegin = request.POST.get('begin')
+            f_tend = request.POST.get('end')
+            print("f_name:", f_name)
+            print("f_tbegin:", f_tbegin)
+            print("f_tend:", f_tend)
+
+            page = int(request.POST.get('page'))
+            print("page:", page)
+
+            if f_name == '' and f_tbegin == '' and f_tend == '':
+                # 判断是经销商还是超级管理员
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    user_list = MyUser.objects.all()
+                else:
+                    user_list = MyUser.objects.filter(user_agency=current_user.user_agency)
+            elif f_name == '' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+                print("begindate:", begindate)
+                print("enddate:", enddate)
+                start_date = datetime.date(
+                    int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(
+                    int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                print("begindate:", begindate)
+                print("enddate:", enddate)
+                # 判断是经销商还是超级管理员
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    user_list = MyUser.objects.filter(
+                        date_joined__range=(start_date, end_date))
+                else:
+                    user_list = MyUser.objects.filter(
+                        user_agency=current_user.user_agency,date_joined__range=(start_date, end_date))
+            elif f_name != '' and f_tbegin == '' and f_tend == '':
+                # 判断是经销商还是超级管理员
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    user_list = MyUser.objects.filter(username__contains=f_name)
+                else:
+                    user_list = MyUser.objects.filter(
+                        user_agency=current_user.user_agency,username__contains=f_name)
+            elif f_name != '' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+                start_date = datetime.date(
+                    int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(
+                    int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                # 判断是经销商还是超级管理员
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    user_list = MyUser.objects.filter(
+                        username__contains=f_name, date_joined__range=(start_date, end_date))
+                else:
+                    user_list = MyUser.objects.filter(
+                        user_agency=current_user.user_agency,username__contains=f_name, date_joined__range=(start_date, end_date))
+            nums = user_list.count()
+            user_list = user_list[(10*(page-1)):(page*10)]
+            return render(request, 'equipallot/allot_user_list.html', context={'user_list': user_list, "nums": nums})
+
+
+from django.views.decorators.csrf import csrf_exempt
+
+
+@csrf_exempt
+def allot_equip_list(request):
+
+    # 当前用户已拥有的设备的列表:
+    equip_list1 = []
+    # 未被分配的设备的列表:
+    equip_list2 = []
+    # 当前页的设备id列表:
+    equip_ids = []
+
+    if request.method == 'GET':
+        # 选中需要进行分配设备的用户后:显示的设备列表;
+        uname = request.GET.get('uname')
+        print("uname=", uname)
+        uname_obj = MyUser.objects.get(username=uname)
+        page = int(request.GET.get('page'))
+        print("page=", page)
+        # 接收当前用户
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        # 判断是经销商还是超级管理员
+        if current_user.is_superuser == True or current_user.is_staff == True:
+            equip_list = Equip.objects.filter(
+                Q(equip_user=None) | Q(equip_user=uname_obj))
+        else:
+            equip_list = Equip.objects.filter(
+                Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency,
+                equip_user=uname_obj))
+
+        equip_list = list(equip_list)
+        print('type equip_list:', type(equip_list))
+        # print('equip_list:', equip_list)
+
+        for i in equip_list:
+            if i.equip_user != None:
+                equip_list1.append(i)
+            else:
+                equip_list2.append(i)
+        # print('equip_list1:', equip_list1)
+        # print('equip_list2:', equip_list2)
+
+        equip_list = equip_list1+equip_list2
+        equip_list = equip_list[(10*(page-1)):(page*10)]
+        for i in equip_list:
+            equip_ids.append(i.equip_id)
+        equip_ids = ','.join(equip_ids)
+
+        return render(request, 'equipallot/allot_equip_list.html', context={'equip_list': equip_list, 'equip_ids': equip_ids, "uname": uname})
+
+    elif request.method == 'POST':
+        req = request.POST.get('req')
+        print("req:", req)
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        if req == "filter":
+            # 筛选:用户名、创建时间:f:filter
+            print("筛选:")
+
+            uname = request.POST.get('uname')
+            print("uname=", uname)
+            uname_obj = MyUser.objects.get(username=uname)
+
+            f_type = request.POST.get('type')
+            f_id = request.POST.get('f_id')
+            f_tbegin = request.POST.get('begin')
+            f_tend = request.POST.get('end')
+            print("f_type:", f_type)
+            print("f_id:", f_id)
+            print("f_tbegin:", f_tbegin)
+            print("f_tend:", f_tend)
+
+            page = int(request.POST.get('page'))
+            print("page:", page)
+            # 000
+            if f_id == None and f_type == '0' and f_tbegin == '' and f_tend == '':
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(
+                        Q(equip_user=None) | Q(equip_user=uname_obj))
+                else:
+                    equip_list = Equip.objects.filter(
+                        Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency,
+                        equip_user=uname_obj))
+            # 001  Q(equip_id=None)|
+            elif f_id == None and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+                print("begindate:", begindate)
+                print("enddate:", enddate)
+                start_date = datetime.date(
+                    int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(
+                    int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                print("begindate:", begindate)
+                print("enddate:", enddate)
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(Q(equip_user=None, equip_add_time__range=(
+                        start_date, end_date)) | Q(equip_user=uname_obj, equip_add_time__range=(start_date, end_date)))
+                else:
+                    equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency,
+                        equip_user=None, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency,
+                        equip_user=uname_obj, equip_add_time__range=(start_date, end_date)))
+            # 010
+            elif f_id == None and f_type != '0' and f_tbegin == '' and f_tend == '':
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(Q(equip_user=None, equip_type=f_type) | Q(
+                        equip_user=uname_obj, equip_type=f_type))
+                else:
+                    equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, 
+                        equip_type=f_type) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_type=f_type))
+            # 011
+            elif f_id == None and f_type != '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+                start_date = datetime.date(
+                    int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(
+                    int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(Q(equip_user=None, equip_type=f_type, equip_add_time__range=(
+                        start_date, end_date)) | Q(equip_user=uname_obj, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
+                else:
+                    equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_type=f_type, 
+                        equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency,
+                        equip_user=uname_obj, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
+            # 100
+            elif f_id != None and f_type == '0' and f_tbegin == '' and f_tend == '':
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(
+                        Q(equip_user=None, equip_id__contains=f_id) | Q(equip_user=uname_obj, equip_id__contains=f_id))
+                else:
+                    equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, 
+                        equip_id__contains=f_id) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_id__contains=f_id))
+            # 101
+            elif f_id != None and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+                start_date = datetime.date(
+                    int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(
+                    int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_add_time__range=(
+                        start_date, end_date)) | Q(equip_user=uname_obj, equip_id__contains=f_id, equip_add_time__range=(start_date, end_date)))
+                else:
+                    equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id, 
+                        equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, 
+                        equip_id__contains=f_id, equip_add_time__range=(start_date, end_date)))
+            # 110
+            elif f_id != None and f_type != '0' and f_tbegin == '' and f_tend == '':
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_type=f_type) | Q(
+                        equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type))
+                else:
+                    equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, 
+                        equip_id__contains=f_id, equip_type=f_type) | Q(equip_agency=current_user.user_agency,
+                        equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type))
+            # 111
+            elif f_id != None and f_type != '0' and f_tbegin != '' and f_tend != '':
+                if current_user.is_superuser == True or current_user.is_staff == True:
+                    equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(
+                        start_date, end_date)) | Q(equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
+                else:
+                    equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id, 
+                        equip_type=f_type, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, 
+                        equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
+            nums = equip_list.count()
+            equip_list = equip_list[(10*(page-1)):(page*10)]
+
+            for i in equip_list:
+                equip_ids.append(i.equip_id)
+            equip_ids = ','.join(equip_ids)
+            return render(request, 'equipallot/allot_equip_list.html', context={'equip_list': equip_list, 'equip_ids': equip_ids, "nums": nums})
+
+
+# 进入对应的用户分配设备页面
+def allot(request):
+    if request.method == 'GET':
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        uname = request.GET.get('uname')
+        uname_obj = MyUser.objects.get(username=uname)
+        print("uname=", uname)
+        if current_user.is_superuser == True or current_user.is_staff == True:
+            nums = Equip.objects.filter(
+                Q(equip_user=None) | Q(equip_user=uname_obj)).count()
+        else:
+            nums = Equip.objects.filter(
+                Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj)).count()
+        print('nums:', nums)
+        return render(request, 'equipallot/allot.html', context={'nums': nums, "uname": uname})
+
+    if request.method == 'POST':
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        uname = request.POST.get('uname')
+        uname_obj = MyUser.objects.get(username=uname)
+        print("uname=", uname)
+        # 获得当前页的全部id:equip_ids
+        equip_ids = request.POST.get('equip_ids')
+        # print("equip_ids=", equip_ids)
+        equip_ids = equip_ids.split(',')
+        # print("当前页的所有设备id:equip_ids=", equip_ids)
+        # # 此处equip_list不应该是 当前用户下所有设备和所有未分配的设备的“并集”
+        # # 而应该是对该“并集”进行当前页的切片!否则会对非当前页的设备进行分配;
+        # equip_list = equip_list1+equip_list2
+        # # equip_list = equip_list[(10*(page-1)):(page*10)]
+        button = request.POST.get('submit')
+        if button == "fenpei":
+            # 获得选中的复选框:
+            check_box_list = request.POST.getlist('check_box_list')
+            print('check_box_list:', check_box_list)
+            no_check_box_list = []
+
+            for i in equip_ids:
+                if i in check_box_list:
+                    pass
+                else:
+                    no_check_box_list.append(i)
+            # print('no_check_box_list=', no_check_box_list)
+            # # 定义空列表no_check_box_list---#获得未选中的复选框
+            # no_check_box_list = []
+            # # 当前页的设备列表:# 当前页的全部id:
+            # for a in equip_ids:
+
+            #     no_check_box_list.append(a)
+            # # 先获得选中的复选框的list(从set到list)
+            # print('no_check_box_list=', no_check_box_list)
+            # # 遍历选中的复选框中的元素
+            # for b in check_box_list:
+            #     # 如果复选框中的元素在当前显示的no_check_box_list中
+            #     if b in no_check_box_list:
+            #         # 得到该元素对应的列表no_check_box_list中的索引;
+            #         x = no_check_box_list.index(b)
+            #         # 根据no_check_box_list列表的索引删除元素,剩下的即使没有被勾选的复选框
+            #         no_check_box_list.pop(x)
+            # print('no_check_box_list2=', no_check_box_list)  # 得到未选中的复选框的list
+
+            # 分配复选框选中的设备:
+            for checked_id in check_box_list:
+                choose_equip = Equip.objects.get(equip_id=checked_id)
+                # 如果选中的设备没有用户:即选中的设备 设备用户为None:
+                if choose_equip.equip_user == None:  # 只有当选中的设备id对应的设备  没有用户时才分配
+                    choose_equip.equip_user = uname_obj
+                    choose_equip.save()  # 保存到数据库
+
+            # 取消分配:给当前用户取消已分配的设备;
+
+            for a in no_check_box_list:
+                choose_equip = Equip.objects.get(equip_id=a)
+                choose_equip.equip_user = None  # 把设备的设备用户改为None,表示取消分配
+                choose_equip.save()
+            if current_user.is_superuser == True:
+                equip_list = Equip.objects.filter(
+                    Q(equip_user=None) | Q(equip_user=uname_obj))
+            else:
+                equip_list = Equip.objects.filter(
+                    Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj))
+            user_equip_list = Equip.objects.filter(equip_user=uname_obj)
+            equip_type_list = []
+            for i in user_equip_list:
+                equip_type_list.append(i.equip_type.type_id)
+            print('abcdef',equip_type_list)
+            groups = Group.objects.filter(user=uname_obj)
+            # uname_obj.groups.clear()
+            # uname_obj.groups.add(post_groups)
+            scdgroup = Group.objects.get(name='杀虫灯用户')
+            cbdgroup = Group.objects.get(name='测报灯用户')
+            qxzgroup = Group.objects.get(name='气象站用户')
+            bzygroup = Group.objects.get(name='孢子仪用户')
+            jkgroup = Group.objects.get(name='监控用户')
+            # 将用户加入所拥有设备类型的相对应的分组
+            if 2 in equip_type_list:
+                uname_obj.groups.add(scdgroup)
+            else:
+                uname_obj.groups.remove(scdgroup)
+            
+            if 3 in equip_type_list:
+                uname_obj.groups.add(cbdgroup)
+            else:
+                uname_obj.groups.remove(cbdgroup)
+
+            if 5 in equip_type_list:
+                uname_obj.groups.add(qxzgroup)
+            else:
+                uname_obj.groups.remove(qxzgroup)
+            
+            if 6 in equip_type_list:
+                uname_obj.groups.add(jkgroup)
+            else:
+                uname_obj.groups.remove(jkgroup)
+            
+            if 7 in equip_type_list:
+                uname_obj.groups.add(bzygroup)
+            else:
+                uname_obj.groups.remove(bzygroup)
+           
+
+            nums = equip_list.count()
+            User_Log.objects.create(log_user=request.user.username,
+                                    log_ip=request.META['REMOTE_ADDR'], log_desc='设备分配--分配设备')
+            return render(request, 'equipallot/allot.html', context={'equip_list': equip_list, 'nums': nums, "uname": uname, 'allot_note': '设备分配成功!'})

+ 1 - 0
apps/EquipList/__init__.py

@@ -0,0 +1 @@
+default_app_config = 'apps.EquipList.apps.EquiplistConfig'

+ 63 - 0
apps/EquipList/admin.py

@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+
+from django.contrib import admin
+from apps.AppInfoManage.models import Equip, Equip_type
+
+# Register your models here.
+
+# 设备模型注册和装饰:
+
+
+@admin.register(Equip)
+class EquipAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 放大镜图标:
+    #raw_id_fields = ('equip_type',)
+    list_display = [
+        'equip_id',
+        'equip_type',
+        'equip_name',
+        'equip_add_time',
+        'equip_user',
+        'equip_desc',
+        'equip_allot_user',
+        'equip_agency',
+        'scene',
+        # 'old_eid',
+        'ftp_addr',
+    ]
+    list_filter = (
+        'equip_add_time',
+        'equip_type'
+    )
+    search_fields = [
+        'equip_id',
+        'equip_name'
+    ]
+    # 设置点击哪些字段可以进入修改页面:
+    list_display_links = (
+        'equip_id',
+        'equip_user',
+        'equip_agency'
+    )
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+EquipAdmin.short_description = u'设备'
+
+# 定制模型设备类型Equip_type的 Admin 后台
+
+
+
+class Equip_typeAdmin(admin.ModelAdmin):
+    list_display = [
+        'type_id',
+        'type_name',
+        'type_add_time',
+        'topic_name'
+    ]
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+admin.site.register(Equip_type, Equip_typeAdmin)

+ 37 - 0
apps/EquipList/adminx.py

@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+import xadmin
+from .models import Equip,Equip_type
+# Register your models here.
+
+#设备模型注册和装饰:
+
+class EquipAdmin(object):
+    actions_on_bottom = False
+    actions_on_top = True
+    #放大镜图标:
+    #raw_id_fields = ('equip_type',)
+    list_display = ['equip_id','equip_user','equip_name','equip_version','equip_code','equip_addtime','equip_type','equip_prov','equip_city','equip_area']#(_('equip_prov'))
+    list_filter = ('equip_type','equip_addtime')
+    search_fields = ['equip_id','equip_name']
+    #设置点击哪些字段可以进入修改页面:
+    list_display_links = ('equip_id', 'equip_user')
+    #设置每页显示记录数:
+    list_per_page = 10
+    '''
+    def equip_view(self, request, extra_context=None):
+        self.fieldsets =('equip_id','equip_name','equip_version','equip_code','equip_addtime','equip_type','equip_prov','equip_city','equip_area')                      
+    '''
+
+    #fields = ('equip_id','equip_name','equip_version','equip_code','equip_addtime','equip_type','equip_prov','equip_city','equip_area')
+EquipAdmin.short_description = u'设备'
+
+xadmin.site.register(Equip,EquipAdmin)
+
+
+
+#定制模型设备类型Equip_type的 Admin 后台
+class Equip_typeAdmin(object):
+    list_display = ['equip_type_id','equip_type_name','equip_type_cretime']   
+xadmin.site.register(Equip_type,Equip_typeAdmin)
+

+ 8 - 0
apps/EquipList/apps.py

@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from django.apps import AppConfig
+
+
+class EquiplistConfig(AppConfig):
+    name = 'apps.EquipList'
+    verbose_name = u'????'

+ 0 - 0
apps/EquipList/migrations/__init__.py


+ 7 - 0
apps/EquipList/models.py

@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+
+from django.db import models
+import django.utils.timezone as timezone
+
+# Create your models here.
+

+ 3 - 0
apps/EquipList/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 15 - 0
apps/EquipList/urls.py

@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+from .views import EquipList,EquipListFilter,EquipListData, QXZ_Location
+
+app_name = 'apps.EquipList'
+urlpatterns = [
+    url(r'^equiplist$', EquipList.as_view(), name='equiplist'),
+    url(r'^equiplist_data$', EquipListData.as_view(), name='equiplist_data'),
+    url(r'^equiplist_filter$', EquipListFilter.as_view(), name='equiplist_filter'),
+    
+    url(r'^qxz_location$', QXZ_Location.as_view(), name='qxz_location'),
+]

+ 405 - 0
apps/EquipList/views.py

@@ -0,0 +1,405 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render
+from django.http.response import HttpResponse,HttpResponseBadRequest
+from django.views.generic import ListView
+
+from apps.AppInfoManage.models import Equip, MyUser, User_Log,SCDstatus,CBDstatus, RecentCBDdata, RecentSCDdata, QXZstatus, QXZ_Base_Info
+
+from django.http import JsonResponse
+
+from django.core.exceptions import ObjectDoesNotExist
+import json
+from django.core import serializers
+
+import datetime
+# from apps.AppInfoManage.common import CJSONEncoder
+from apps.EquipManage.views import CJSONEncoder
+
+
+
+# 设备列表:
+class EquipList(ListView):
+
+    def get(self, request):
+        current_user = request.session.get('username')
+        current_user = MyUser.objects.get(username=current_user)
+        if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
+            print("---用户")
+            nums = Equip.objects.filter(equip_user=current_user).count()
+        elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
+            print("---代理商")
+            nums = Equip.objects.filter(equip_agency=current_user.user_agency).count()
+        else:
+            print("---管理员")
+            nums = Equip.objects.all().count()
+        User_Log.objects.create(log_user=request.user.username,
+                                   log_ip=request.META['REMOTE_ADDR'], log_desc='设备列表')
+
+        return render(request, 'equiplist/equiplist.html', context={'nums': nums})
+
+    def post(self, request):
+        if request.is_ajax():
+            print("ajax-post!")
+            req = request.POST.get('req')
+            if req == "rename":
+                print("修改名称")
+                equip_id = request.POST.get('eid')
+                print("equip_id:",equip_id)
+                new_name = request.POST.get('ename')
+                print("new_name:",new_name)
+
+                equip = Equip.objects.get(equip_id=equip_id) 
+                # 如果输入的设备名,和当前的设备列表中已存在:
+                try:
+                    Equip.objects.get(equip_name=new_name)
+                    data = "1"
+                # 输入的设备名不存在,说明是新设备名称
+                except ObjectDoesNotExist:
+                    equip.equip_name = new_name
+                    equip.save()
+                    if equip.equip_type_id == 2:
+                        scdobj = RecentSCDdata.objects.get(equip_id=equip.equip_id)
+                        scdobj.equip_name = new_name
+                        scdobj.save()
+                    elif equip.equip_type_id == 3:
+                        cbdobj = RecentCBDdata.objects.get(equip_id=equip.equip_id)
+                        cbdobj.equip_name = new_name
+                        cbdobj.save()
+
+                    data = "0"
+                    print("新设备名称为:", new_name)
+                    User_Log.objects.create(
+                        log_user=request.user.username, log_ip=request.META['REMOTE_ADDR'], log_desc='设备列表-修改设备名称')
+                return HttpResponse(data)   
+            elif req == "addAddr":
+                print("添加位置!")
+                equip_id = request.POST.get('eid')
+                print("equip_id:",equip_id)
+                address = request.POST.get('address')
+                print("address:",address)
+
+                equip = Equip.objects.get(equip_id=equip_id)
+                equip.equip_location =  address
+                equip.save()
+                print("equip.equip_type:",equip.equip_type.type_id)
+                if 2 == equip.equip_type.type_id:
+                    print("修改杀虫灯")
+                    SCDstatus.objects.filter(equip_id=equip_id).update(equip_location = address)
+                elif 3 == equip.equip_type.type_id:
+                    print("修改测报灯")
+                    CBDstatus.objects.filter(equip_id=equip_id).update(equip_location = address)
+                data = "2"
+                User_Log.objects.create(
+                    log_user=request.user.username, log_ip=request.META['REMOTE_ADDR'], log_desc='设备列表-添加位置')
+                return HttpResponse(data)
+            elif req == "cbdscene":
+                print("添加测报灯场景!")
+                equip_id = request.POST.get('eid')
+                print("equip_id:",equip_id)
+                scene = request.POST.get('scene')
+                print("scene:",scene)
+                equip = Equip.objects.get(equip_id=equip_id)
+                equip.scene =  scene
+                equip.save()
+                cbd_obj = RecentCBDdata.objects.get(equip_id=equip)
+                cbd_obj.scene =  scene
+                cbd_obj.save()
+                return HttpResponse("0")
+            else:
+                print("unknown request!")
+                return HttpResponseBadRequest()
+        else:
+            print("unknown request!")
+            return HttpResponseBadRequest()
+
+# 数据接口:
+class EquipListData(ListView):
+    def get(self, request):
+        pass
+    def post(self, request):
+        print("数据!!!")
+        if request.is_ajax():
+            print("ajax-post!")
+            if request.POST.get('req') == "reqdat":
+                page = int(request.POST.get('page'))
+                print("page:",page)
+                current_user = request.session.get('username')
+                print("current_user:",current_user)
+                current_user = MyUser.objects.get(username=current_user)
+                if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
+                    print("---不是管理员")
+                    equip_list = Equip.objects.filter(equip_user=current_user)[(10*(page-1)):(page*10)]
+                elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
+                    print("---代理商")
+                    equip_list = Equip.objects.filter(equip_agency=current_user.user_agency)[(10*(page-1)):(page*10)]
+                else:
+                    print("---管理员")
+                    equip_list = Equip.objects.all()[(10*(page-1)):(page*10)]
+                data = []
+                for i in equip_list:
+                    sta1 = Equip.objects.filter(equip_id=i.equip_id).select_related()
+ 
+                    for x in sta1:
+                        try:
+                            sta2 = {"equip_id": x.equip_id, 
+                                    "equip_user": x.equip_user.username, 
+                                    "scene":x.scene,
+                                    "equip_name": x.equip_name,
+                                    "equip_add_time": x.equip_add_time,
+                                    "equip_type": x.equip_type.type_id,
+                                    "equip_location": x.equip_location}
+                        except AttributeError:
+                            sta2 = {"equip_id": x.equip_id, 
+                                    "equip_user": "", 
+                                    "scene":x.scene,
+                                    "equip_name": x.equip_name,
+                                    "equip_add_time": x.equip_add_time,
+                                    "equip_type": x.equip_type.type_id,
+                                    "equip_location": x.equip_location}
+                        data.append(sta2)
+                    
+                User_Log.objects.create(log_user=request.user.username,log_ip=request.META['REMOTE_ADDR'], log_desc='设备列表')
+                # data = serializers.serialize("json", equip_list)
+                data = json.dumps(data, cls=CJSONEncoder)
+                # print("data:",data)
+                return HttpResponse(data)
+            else:
+                print("unknown request!")
+                return HttpResponseBadRequest()
+        else:
+            print("unknown request!")
+            return HttpResponseBadRequest()
+    
+
+# 筛选接口:
+import re
+
+class EquipListFilter(ListView):
+    def get(self, request):
+        pass
+    def post(self, request):
+        print("筛选!!!")
+        f_type = request.POST.get('f_type')
+        f_id = request.POST.get('f_id')
+        f_tbegin = request.POST.get('f_tbegin')
+        f_tend = request.POST.get('f_tend')
+
+        page = int(request.POST.get('page'))
+
+        print("f_type:", f_type)
+        print("f_id:", f_id)
+
+        print("f_tbegin:", f_tbegin)
+        print("f_tend:", f_tend)
+
+        print("page:", page)
+
+        current_user = request.session.get('username')
+        print("current_user:",current_user)
+
+        current_user = MyUser.objects.get(username=current_user)
+        if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
+            print("---不是管理员")
+            # 000
+            if f_id == '' and f_type == '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_user=current_user)
+            # 001
+            elif f_id == '' and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_user=current_user,equip_add_time__range=(start_date, end_date))
+            # 010
+            elif f_id == '' and f_type != '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_user=current_user,equip_type=f_type)
+            # 011
+            elif f_id == '' and f_type != '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_user=current_user,equip_type=f_type,equip_add_time__range=(start_date, end_date))
+            # 100
+            elif f_id != '' and f_type == '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_user=current_user,equip_id__contains=f_id)
+            # 101
+            elif f_id != '' and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_user=current_user,equip_id__contains=f_id,equip_add_time__range=(start_date, end_date))
+            # 110
+            elif f_id != '' and f_type != '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_user=current_user,equip_id__contains=f_id,equip_type=f_type)
+            # 111
+            # elif f_id != '' and f_type != '0' and f_tbegin != '' and f_tend != '':
+            else:
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_user=current_user,equip_id__contains=f_id,equip_type=f_type,equip_add_time__range=(start_date, end_date))
+
+        elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
+            print("---代理商")
+            # 000
+            if f_id == '' and f_type == '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency)
+            # 001
+            elif f_id == '' and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency, equip_add_time__range=(start_date, end_date))
+            # 010
+            elif f_id == '' and f_type != '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency, equip_type=f_type)
+            # 011
+            elif f_id == '' and f_type != '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency, equip_type=f_type, equip_add_time__range=(start_date, end_date))
+            # 100
+            elif f_id != '' and f_type == '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency, equip_id__contains=f_id)
+            # 101
+            elif f_id != '' and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency, equip_id__contains=f_id, equip_add_time__range=(start_date, end_date))
+            # 110
+            elif f_id != '' and f_type != '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency, equip_id__contains=f_id, equip_type=f_type)
+            # 111
+            # elif f_id != '' and f_type != '0' and f_tbegin != '' and f_tend != '':
+            else:
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_agency=current_user.user_agency, equip_id__contains=f_id, 
+                                                  equip_type=f_type,equip_add_time__range=(start_date, end_date))
+
+
+        else:
+            print("---管理员")
+            # 000
+            if f_id == '' and f_type == '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.all()
+            # 001
+            elif f_id == '' and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_add_time__range=(start_date, end_date))
+            # 010
+            elif f_id == '' and f_type != '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_type=f_type)
+            # 011
+            elif f_id == '' and f_type != '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_type=f_type,equip_add_time__range=(start_date, end_date))
+            # 100
+            elif f_id != '' and f_type == '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_id__contains=f_id)
+            # 101
+            elif f_id != '' and f_type == '0' and f_tbegin != '' and f_tend != '':
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_id__contains=f_id,equip_add_time__range=(start_date, end_date))
+            # 110
+            elif f_id != '' and f_type != '0' and f_tbegin == '' and f_tend == '':
+                equip_list = Equip.objects.filter(equip_id__contains=f_id,equip_type=f_type)
+            # 111
+            # elif f_id != '' and f_type != '0' and f_tbegin != '' and f_tend != '':
+            else:
+                begindate = re.findall(r"\d+\.?\d*", f_tbegin)
+                enddate = re.findall(r"\d+\.?\d*", f_tend)
+
+                start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
+                end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
+                equip_list = Equip.objects.filter(equip_id__contains=f_id).filter(equip_type=f_type,equip_add_time__range=(start_date, end_date))
+
+        # data = []
+        dat = []
+        for i in equip_list[(10*(page-1)):(page*10)]:
+            sta1 = Equip.objects.filter(equip_id=i.equip_id).select_related()
+            try:
+                for x in sta1:
+                    sta2 = {"equip_id": x.equip_id, 
+                            "equip_user": x.equip_user.username, 
+                            "scene":x.scene,
+                            "equip_name": x.equip_name,
+                            "equip_add_time": x.equip_add_time,
+                            "equip_type": x.equip_type.type_id,
+                            "equip_location": x.equip_location} 
+                    dat.append(sta2)
+            except AttributeError:
+                for x in sta1:
+                    sta2 = {"equip_id": x.equip_id, 
+                            "equip_user": "", 
+                            "scene":x.scene,
+                            "equip_name": x.equip_name,
+                            "equip_add_time": x.equip_add_time,
+                            "equip_type": x.equip_type.type_id,
+                            "equip_location": x.equip_location} 
+                    dat.append(sta2)
+        # data = serializers.serialize("json", equip_list)
+        data = {'dat':dat,'nums':equip_list.count()}
+        data = json.dumps(data, cls=CJSONEncoder)
+        # print("data:",data)
+        return HttpResponse(data)
+
+
+
+# 气象站添加定位
+class QXZ_Location(ListView):
+    def get(self, request):
+        e_id = request.GET.get('e_id')
+        imei = Equip.objects.get(equip_id=e_id)
+        if QXZ_Base_Info.objects.filter(equip_id=imei).exists():
+            equip_obj = QXZ_Base_Info.objects.get(equip_id=e_id)
+        else:
+            QXZ_Base_Info.objects.create(equip_id=imei, volt="",rssi="",iccid="",lng="",lat="",led="")
+            equip_obj = QXZ_Base_Info.objects.get(equip_id=e_id)
+        data = {"lat":equip_obj.lat,"lng":equip_obj.lng}
+        print(data)
+        data = json.dumps(data)
+        return HttpResponse(data)
+    def post(self, request):
+        e_id = request.POST.get('e_id')
+        lng = request.POST.get('lng')
+        lat = request.POST.get('lat')
+        try:
+            equip_obj = QXZ_Base_Info.objects.get(equip_id=e_id)
+            equip_obj.lng = lng
+            equip_obj.lat = lat
+            equip_obj.save()
+            return HttpResponse("0")
+        except:
+            return HttpResponse("1")

+ 2 - 0
apps/EquipManage/__init__.py

@@ -0,0 +1,2 @@
+
+default_app_config = 'apps.EquipManage.apps.EquipmanageConfig'

File diff suppressed because it is too large
+ 2079 - 0
apps/EquipManage/admin.py


+ 70 - 0
apps/EquipManage/adminx.py

@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+
+import xadmin
+from xadmin import views
+from apps.SystemManage.models import MyUser
+import xadmin
+from .models import QXdata,SCDdata,CBDdata
+
+
+#Admin actions:
+def ds_off(modeladmin, request, queryset):
+    queryset.update(ds=False)
+ds_off.short_description = "关闭设备"    
+def ds_on(modeladmin, request, queryset):
+    queryset.update(ds=True)
+ds_on.short_description = "打开设备" 
+
+'''
+class BaseSetting(object):
+    enable_themes = True
+    use_bootswatch = True   #注意use  不是user,以及bootSwatch的拼写
+
+
+xadmin.site.register(views.BaseAdminView,BaseSetting)
+
+
+#杀虫灯数据SCDdata模型注册和装饰:
+@admin.register(SCDdata)
+class SCDdataAdmin(admin.ModelAdmin):
+    from user.models import MyUser
+    #from equiplist.models import Equip
+    actions_on_bottom = False
+    actions_on_top = True
+    #打开详情之后显示的:
+    fields= ['equip_id','equip_user','equip_upl_time','cv','ci','bv','wv','wi','ds','st','et','tt','rt','uctp','ts','tbs','lcs','ltps','ops','at','ct','ah','equip_online']
+    #列表显示的:
+    list_display= ['equip_id','equip_user','equip_upl_time','cv','ci','bv','wv','wi','ds','ts','tbs','lcs','ltps','ops','at','ct','ah','equip_online']
+    #筛选过滤项:
+    list_filter = ('equip_upl_time','equip_online','ds')
+    #搜索:
+    search_fields = ['equip_id__equip_id','equip_user__username']#
+    #动作:
+    actions = [ds_off,ds_on]
+    #外键:
+    fk_fields = ('equip_id','equip_user')
+    #链接:无
+    list_display_links = None
+'''
+
+
+class SCDdataAdmin(object):
+    #from equiplist.models import Equip
+    actions_on_bottom = False
+    actions_on_top = True
+    #打开详情之后显示的:
+    fields= ['equip_id','equip_upl_time','cv','ci','bv','wv','wi','ds','st','et','tt','rt','uctp','ts','tbs','lcs','ltps','ops','at','ct','ah','equip_online']
+    #列表显示的:
+    list_display= ['equip_id','equip_upl_time','cv','ci','bv','wv','wi','ds','ts','tbs','lcs','ltps','ops','at','ct','ah','equip_online']
+    #筛选过滤项:
+    list_filter = ('equip_upl_time','equip_online','ds')
+    #搜索:
+    search_fields = ['equip_id__equip_id']#
+    #动作:
+    actions = [ds_off,ds_on]
+    #外键:
+    fk_fields = ('equip_id')
+    #链接:无
+    list_display_links = None
+
+xadmin.site.register(SCDdata,SCDdataAdmin)

+ 8 - 0
apps/EquipManage/apps.py

@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from django.apps import AppConfig
+
+
+class EquipmanageConfig(AppConfig):
+    name = 'apps.EquipManage'
+    verbose_name = u'设备管理'

+ 0 - 0
apps/EquipManage/migrations/__init__.py


+ 3 - 0
apps/EquipManage/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/EquipManage/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 205 - 0
apps/EquipManage/urls.py

@@ -0,0 +1,205 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+from .views import SCDManage_View,CBDManage_View,SCD_Mqtt,CBDManage_detail_View,CBD_Mqtt,Sex_Trap_View,YBQ_Mqtt, Sex_Trap_Detail,JKManage_View,QXZManage_View,BZYManage_View,\
+BZYManage_detail_View, QXZ_Switch_Name, QXZ_Mqtt, QXZ_Auto, QXZ_Value_Mqtt, QXZ_Timing, QXZ_Timing_Mqtt, JK_Page, JK_View, JKManage_View1, Equip_Simiccid, Jk_Image, JkImage_Del,\
+QXZ_Status, QXZ_Data, QXZ_Data_Chart, QXZ_Title_Conf, QXZ_Day_Data, CBD_Old_Imei, QXZ_Led, NVR_View, QXZ_Base_View, Sex_Trap_Detail,YBQ_Mqtt_Detail,YBQ_Mqtt,YBQ_Data,YBQ_Photo,\
+YBQ_Photo_List, YBQ_At_Ah, CBDManage_explore, SCDManage_explore, QXZ_Alarm_View, QXZ_Alarm_Recv, CbdBatchOperate, CBD_Mqtt_All, QXZ_Delete, QXZ_Record_View, YBQ_Mqtt_V1,SCD_Mqtt_All,\
+CBD_csq, Tccb_View, Tccb_Detail, Tccb_Data, TCCB_Photo, TCCB_Photo_List, Tccb_Mqtt, RTU_Data, RTU_View, RTU_Chart, TCCB_Chart, RTU_Mqtt, CBD_Dver, TCCBImage_Del,CBD_Mqtt_Configure,\
+YBQ_Pest_Set
+
+
+# 远程升级接口:
+from .views import Update, BZY_Mqtt, CBDStatus_all, SCDStatus_all
+
+# 开放API接口
+from .views import CBD_Mqtt_Read, CBD_Mqtt_Set, SCD_Mqtt_Set, SCD_Mqtt_Switch, SCD_Mqtt_Read
+
+
+from django.views.decorators.csrf import csrf_exempt
+from django.views.static import serve
+
+
+
+app_name = 'apps.EquipManage'
+urlpatterns = [
+    url(r'^equipmanage_scd$', SCDManage_View.as_view(), name='equipmanage_scd'),
+    url(r'^scdstatus_all$', SCDStatus_all.as_view(), name='scdstatus_all'),
+    url(r'^scd_mqtt$', SCD_Mqtt.as_view(), name='scd_mqtt'),
+
+    url(r'^scd_mqtt_all$', SCD_Mqtt_All.as_view(), name='scd_mqtt_all'),
+
+    
+    url(r'^cbd_dver$', CBD_Dver.as_view(), name='cbd_dver'),
+
+    url(r'^equipmanage_cbd$', CBDManage_View.as_view(), name='equipmanage_cbd'),
+    url(r'^cbdstatus_all$', CBDStatus_all.as_view(), name='cbdstatus_all'),
+    url(r'^equipmanage_cbd_detail$', CBDManage_detail_View.as_view(), name='equipmanage_cbd_detail'),
+    url(r'^cbd_mqtt$', CBD_Mqtt.as_view(), name='cbd_mqtt'),
+    
+    url(r'^cbd_csq$', CBD_csq.as_view(), name='cbd_csq'),
+
+    url(r'^equipmanage_qx$', views.equipmanage_qx, name='equipmanage_qx'),
+    url(r'^equipmanage_nycl$', views.equipmanage_nycl, name='equipmanage_nycl'),
+
+    url(r'^update/firmware_upgrade$', Update.as_view(), name='update'),
+    
+    # url(r'^update/qxz_bin/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/update/qxz_bin'}),#小服务器
+    url(r'^update/qxz_bin/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/update/qxz_bin'}),#正式服务器
+    
+    # RTU页面
+    url(r'^rtu_data$', RTU_Data.as_view(), name='rtu_data'),
+    url(r'^rtu_view$', RTU_View.as_view(), name='rtu_view'),
+    url(r'^rtu_chart$', RTU_Chart.as_view(), name='rtu_chart'),
+    url(r'^rtu_mqtt$', RTU_Mqtt.as_view(), name='rtu_mqtt'),
+    
+    
+    # 糖醋测报页面
+    url(r'^tccb_view$', Tccb_View.as_view(), name='tccb_view'),
+    url(r'^tccb_detail$', Tccb_Detail.as_view(), name='tccb_detail'),
+    url(r'^tccb_data$', Tccb_Data.as_view(), name='tccb_data'),
+    url(r'^tccb_mqtt$', Tccb_Mqtt.as_view(), name='tccb_mqtt'),
+    url(r'^tccb_chart$', TCCB_Chart.as_view(), name='tccb_chart'),
+    url(r'^tccbimg_del$', TCCBImage_Del.as_view(), name='tccbimg_del'),
+    
+    
+    url(r'^tccb_photo$', TCCB_Photo.as_view(), name='tccb_photo'),
+    url(r'^tccb_photo_list$', TCCB_Photo_List.as_view(), name='tccb_photo_list'),
+    
+    # 性诱设备页面
+    url(r'^sex_trap_view$', Sex_Trap_View.as_view(), name='sex_trap_view'),
+    url(r'^sex_trap_detail$', Sex_Trap_Detail.as_view(), name='sex_trap_detail'),
+    url(r'^sex_mqtt$', YBQ_Mqtt.as_view(), name='sex_mqtt'),
+
+    url(r'^sex_mqtt_v1$', YBQ_Mqtt_V1.as_view(), name='sex_mqtt_v1'),
+    
+    url(r'^ybq_pest_set$', YBQ_Pest_Set.as_view(), name='ybq_pest_set'),
+    
+    
+
+    url(r'^sex_mqtt_detail$', YBQ_Mqtt_Detail.as_view(), name='sex_mqtt_detail'),
+    url(r'^sex_trap_data$', YBQ_Data.as_view(), name='sex_trap_data'),
+    url(r'^sex_trap_photo$', YBQ_Photo.as_view(), name='sex_trap_photo'),
+    url(r'^sex_photo_list$', YBQ_Photo_List.as_view(), name='sex_photo_list'),
+    url(r'^sex_at_ah$', YBQ_At_Ah.as_view(), name='sex_at_ah'),
+
+    # 路由加上bzy,为将来其他类型设备区分路由,如微型测报:wxcbd/pyftp/
+    # url(r'^pyftp/ftp_file/bzy_photo/(?P<path>.*)', serve, {'document_root': 'G:\\YFWLW\\yfwlw\\pyftp\\ftp_file\\bzy_photo'}), #本地
+    # url(r'^pyftp/ftp_file/sex_photo1(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/pyftp/ftp_file/sex_photo1'}),#小服务器
+    url(r'^pyftp/ftp_file/sex_photo1(?P<path>.*)', serve, {'document_root': '/data/yfwlw/pyftp/ftp_file/sex_photo1'}),#大服务器
+    
+    # 糖醋测报图片
+    url(r'^pyftp/ftp_file/tccb_photo1(?P<path>.*)', serve, {'document_root': '/data/yfwlw/pyftp/ftp_file/tccb_photo1'}),#大服务器
+    
+    # 杀虫灯列表页导出excel
+    url(r'^scdmanage_explore$', SCDManage_explore.as_view(), name='scdmanage_explore'),
+
+
+    # 测报灯列表页导出excel
+    url(r'^cbdmanage_explore$', CBDManage_explore.as_view(), name='cbdmanage_explore'),
+
+
+    # 批量操作页面
+    url(r'^cbdbatchoperate$', CbdBatchOperate.as_view(), name='cbdbatchoperate'),
+    url(r'^cbd_mqtt_all$', CBD_Mqtt_All.as_view(), name='cbd_mqtt_all'),
+    
+    
+    
+    
+
+
+
+
+    url(r'^ybq_mqtt$', YBQ_Mqtt.as_view(), name='ybq_mqtt'),
+    # url(r'^equipmanage_ybq_detail$', YBQManage_detail_View.as_view(), name='equipmanage_ybq_detail'),
+
+    url(r'^equipmanage_qxz$', QXZManage_View.as_view(), name='equipmanage_qxz'),
+
+    
+    url(r'^equipmanage_bzy$', BZYManage_View.as_view(), name='equipmanage_bzy'),
+    url(r'^equipmanage_bzy_detail$', BZYManage_detail_View.as_view(), name='equipmanage_bzy_detail'),
+    url(r'^bzy_mqtt$', BZY_Mqtt.as_view(), name='bzy_mqtt'),
+
+    # 测报灯API
+    url(r'^cbd_mqtt_read$', CBD_Mqtt_Read.as_view(), name='cbd_mqtt_read'),
+    url(r'^cbd_mqtt_set$', CBD_Mqtt_Set.as_view(), name='cbd_mqtt_set'),
+
+    url(r'^cbd_old_imei$', CBD_Old_Imei.as_view(), name='cbd_old_imei'),
+
+    
+
+    # 杀虫灯API
+    url(r'^scd_mqtt_set$', SCD_Mqtt_Set.as_view(), name='scd_mqtt_set'),
+    url(r'^scd_mqtt_switch$', SCD_Mqtt_Switch.as_view(), name='scd_mqtt_switch'),
+    url(r'^scd_mqtt_read$', SCD_Mqtt_Read.as_view(), name='scd_mqtt_read'),
+
+    # 气象站控制
+    url(r'^qxz_switch_name$', QXZ_Switch_Name.as_view(), name='qxz_switch_name'),
+    url(r'^qxz_switch$', QXZ_Mqtt.as_view(), name='qxz_switch'),
+    # 气象站阈值
+    url(r'^qxz_auto$', QXZ_Auto.as_view(), name='qxz_auto'),
+    url(r'^qxz_value_mqtt$', QXZ_Value_Mqtt.as_view(), name='qxz_value_mqtt'),
+
+    # 气象站LED屏下发
+    url(r'^qxz_led$', QXZ_Led.as_view(), name='qxz_led'),
+    
+    # 气象站短信预警
+    url(r'^qxz_alarm$', QXZ_Alarm_View.as_view(), name='qxz_alarm'),
+    url(r'^qxz_alarm_recv$', QXZ_Alarm_Recv.as_view(), name='qxz_alarm_recv'),
+    
+    url(r'^qxz_delete$', QXZ_Delete.as_view(), name='qxz_delete'),
+
+    url(r'^qxz_record$', QXZ_Record_View.as_view(), name='qxz_record'),
+
+    
+    
+    
+
+    url(r'^qxz_status$', QXZ_Status.as_view(), name='qxz_status'),
+    url(r'^qxz_data$', QXZ_Data.as_view(), name='qxz_data'),
+    url(r'^qxz_data_chart$', QXZ_Data_Chart.as_view(), name='qxz_data_chart'),
+    url(r'^qxz_title_conf$', QXZ_Title_Conf.as_view(), name='qxz_title_conf'),
+    url(r'^qxz_day_data$', QXZ_Day_Data.as_view(), name='qxz_day_data'),
+
+    url(r'^qxz_base_view$', QXZ_Base_View.as_view(), name='qxz_base_view'),
+
+    
+
+    
+
+    
+    
+    
+
+    # 气象站定时
+    url(r'^qxz_timing$', QXZ_Timing.as_view(), name='qxz_timing'),
+    url(r'^qxz_timing_mqtt$', QXZ_Timing_Mqtt.as_view(), name='qxz_timing_mqtt'),
+
+    # 监控设备列表
+    url(r'^equipmanage_jk1$', JKManage_View1.as_view(), name='equipmanage_jk1'),
+    url(r'^equipmanage_jk$', JKManage_View.as_view(), name='equipmanage_jk'),
+    url(r'^jk_page$', JK_Page.as_view(), name='jk_page'),
+    url(r'^jk_view$', JK_View.as_view(), name='jk_view'),
+    url(r'^jk_image$', Jk_Image.as_view(), name='jk_image'),
+    url(r'^jkimage_del$', JkImage_Del.as_view(), name='jkimage_del'),
+
+    # 硬盘录像机接口
+    url(r'^nvr_view$', NVR_View.as_view(), name='nvr_view'),
+    
+
+    
+    
+    # 测报灯sim卡绑定
+    url(r'^equip_simiccid$', Equip_Simiccid.as_view(), name='equip_simiccid'),
+
+    # 监控路由注册
+    url(r'^pyftp/ftp_file/jk_photo1(?P<path>.*)', serve, {'document_root': '/data/yfwlw/pyftp/ftp_file/jk_photo1'}),#大服务器
+    
+    
+    #测报灯开放APi 光控时控
+    url(r'^cbd_mqtt_configure$', CBD_Mqtt_Configure.as_view(), name='cbd_mqtt_configure'),
+    
+    
+]

File diff suppressed because it is too large
+ 5173 - 0
apps/EquipManage/views.py


+ 1 - 0
apps/ExpertDiag/__init__.py

@@ -0,0 +1 @@
+default_app_config = 'apps.ExpertDiag.apps.ExpertdiagConfig'

+ 20 - 0
apps/ExpertDiag/admin.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+
+from django.contrib import admin
+from apps.AppInfoManage.models import Diag
+# Register your models here.
+# Diag   'diag_title','diag_content','diag_time','diag_oper'
+
+# 定制专家诊断列表Diag的 Admin 后台
+
+
+class DiagAdmin(admin.ModelAdmin):
+    list_display = [
+        'diag_title',
+        'diag_content',
+        'diag_time',
+        'diag_oper'
+    ]
+
+
+admin.site.register(Diag, DiagAdmin)

+ 8 - 0
apps/ExpertDiag/apps.py

@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from django.apps import AppConfig
+
+
+class ExpertdiagConfig(AppConfig):
+    name = 'apps.ExpertDiag'
+    verbose_name = u'专家诊断­'

+ 0 - 0
apps/ExpertDiag/migrations/__init__.py


+ 2 - 0
apps/ExpertDiag/models.py

@@ -0,0 +1,2 @@
+from django.db import models
+# Create your models here.

+ 3 - 0
apps/ExpertDiag/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 10 - 0
apps/ExpertDiag/urls.py

@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+from django.conf.urls import url
+
+from . import views
+
+app_name = 'apps.ExpertDiag'
+urlpatterns = [
+    url(r'^expertdiag$', views.expertdiag, name='expertdiag'),
+    url(r'^expertdiag_list$', views.expertdiag_list, name='expertdiag_list'),
+]

+ 17 - 0
apps/ExpertDiag/views.py

@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render
+from apps.AppInfoManage.models import User_Log
+
+# 专家诊断管理视图:
+def expertdiag_list(request):
+    User_Log.objects.create(log_user=request.user.username,
+                               log_ip=request.META['REMOTE_ADDR'], log_desc='专家诊断-专家诊断列表')
+    return render(request, 'expertdiag/expertdiag_list.html', context={})
+
+
+# 专家诊断列表管理视图:
+def expertdiag(request):
+    User_Log.objects.create(log_user=request.user.username,
+                               log_ip=request.META['REMOTE_ADDR'], log_desc='专家诊断-专家诊断')
+    return render(request, 'expertdiag/expertdiag.html', context={})

+ 1 - 0
apps/HelpCenter/__init__.py

@@ -0,0 +1 @@
+default_app_config = 'apps.HelpCenter.apps.HelpcenterConfig'

+ 36 - 0
apps/HelpCenter/admin.py

@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+from django.contrib import admin
+
+from apps.AppInfoManage.models import Help,Problem
+# Register your models here.
+# Help   'help_title','help_ask','help_answer','help_edit_time'
+
+# 定制帮助列表Help的 Admin 后台
+
+
+class HelpAdmin(admin.ModelAdmin):
+    list_display = [
+        'help_title',
+        'help_ask',
+        'help_answer',
+        'help_edit_time'
+    ]
+
+
+admin.site.register(Help, HelpAdmin)
+
+
+# 定制帮助下的问题反馈 Admin 后台
+class ProblemAdmin(admin.ModelAdmin):
+    list_display = [
+        'prob_ask',
+        'prob_cre_time',
+        'prob_cre_people',
+        'prob_answer',
+        'prob_answer_people',
+        'prob_cre_time'
+    ]
+
+
+admin.site.register(Problem, ProblemAdmin)

+ 8 - 0
apps/HelpCenter/apps.py

@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from django.apps import AppConfig
+
+
+class HelpcenterConfig(AppConfig):
+    name = 'apps.HelpCenter'
+    verbose_name = u'帮助中心'

+ 0 - 0
apps/HelpCenter/migrations/__init__.py


+ 3 - 0
apps/HelpCenter/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/HelpCenter/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 14 - 0
apps/HelpCenter/urls.py

@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+from .views import HelpView,ProblemFeedback,ProblemDetail
+
+
+app_name = 'apps.HelpCenter'
+urlpatterns = [
+    url(r'^help_center$', HelpView.as_view(), name='help_center'),
+    url(r'^problem_feedback$', ProblemFeedback.as_view(), name='problem_feedback'),
+    url(r'^problem_detail$', ProblemDetail.as_view(), name='problem_detail'),
+]

+ 26 - 0
apps/HelpCenter/views.py

@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render
+
+from django.views.generic.base import View
+from apps.AppInfoManage.models import Help, User_Log
+
+
+class HelpView(View):
+    def get(self, request):
+        User_Log.objects.create(log_user=request.user.username,
+                                   log_ip=request.META['REMOTE_ADDR'], log_desc='帮助中心')
+        help_list = Help.objects.all()
+        return render(request, 'helpcenter/help_center.html', context={'help_list': help_list})
+
+
+class ProblemFeedback(View):
+    def get(self,request):
+        User_Log.objects.create(log_user=request.user.username,
+                            log_ip=request.META['REMOTE_ADDR'], log_desc='问题反馈')
+        # help_list = Help.objects.all()
+        return render(request, 'helpcenter/problem_feedback.html', context={})
+
+class ProblemDetail(View):
+    def get(self,request):
+        return render(request, 'helpcenter/problem_detail.html', context={})

+ 0 - 0
apps/Home/__init__.py


+ 3 - 0
apps/Home/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 8 - 0
apps/Home/apps.py

@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from django.apps import AppConfig
+
+
+class HomeConfig(AppConfig):
+    name = 'Home'
+    verbose_name = u'??'

+ 219 - 0
apps/Home/forms.py

@@ -0,0 +1,219 @@
+# -*- coding: utf-8 -*-
+
+from django import forms
+from django.conf import settings
+from django.contrib.auth import get_user_model
+from django.contrib.auth import authenticate
+from django.utils.translation import ugettext, ugettext_lazy as _
+
+import re
+
+from django.contrib.auth.forms import UserCreationForm
+from apps.AppInfoManage.models import MyUser
+
+
+def lowercase_email(email):
+    """
+    Normalize the address by lowercasing the domain part of the email
+    address.
+    """
+    email = email or ''
+    try:
+        email_name, domain_part = email.strip().rsplit('@', 1)
+    except ValueError:
+        pass
+    else:
+        email = '@'.join([email_name.lower(), domain_part.lower()])
+    return email
+
+
+class LoginForm (forms.ModelForm):
+
+    username = forms.CharField(
+        label='用户名', required=True, error_messages={'required': '请填写你的用户名', 'max_length': '最多只能输入15个字符', 'min_length': '至少输入3个字符'}, max_length=15, min_length=3, widget=forms.TextInput(attrs={'placeholder': '3~15位字母/数字/汉字'}))
+    # email = forms.EmailField( error_messages={'required': '请填写你的email','invalid':'email格式不正确'},
+    #	label='邮箱',required=True,widget=forms.EmailInput(attrs={'placeholder':'填写正确的email以便激活你的账户'}))
+    password = forms.CharField(error_messages={'required': '请输入密码', 'max_length': '最多只能输入20个字符', 'min_length': '至少输入6个字符'},
+                               label='密码', required=True, max_length=20, widget=forms.PasswordInput(attrs={'placeholder': '长度在6~20个字符以内'}))
+
+
+    class Meta:
+        model = get_user_model()
+        fields = ("username", "password")  # "email",
+
+
+'''
+	def clean_email(self):
+		UserModel = get_user_model()
+		email=self.cleaned_data["email"]
+		lower_email=lowercase_email(email)
+		try:
+			UserModel._default_manager.get(email=lower_email)
+		except UserModel.DoesNotExist:
+			return lower_email
+		raise forms.ValidationError("有人已经注册了这个email地址")
+
+	def clean_confirm_password(self):
+		#cleaned_data=super(SignupForm,self).clean()
+		password = self.cleaned_data.get("password",False)
+		confirm_password = self.cleaned_data["confirm_password"]
+		if  not( password == confirm_password):
+			raise forms.ValidationError("确认密码和密码不一致")
+		return confirm_password
+
+		
+'''
+
+
+def clean_username(self):
+    UserModel = get_user_model()
+    username = self.cleaned_data["username"]
+    '''
+	#过滤用户名敏感词的注册用户
+	n=re.sub('[^\u4e00-\u9fa5a-zA-Z]','',username)
+	mgc=['admin','']		
+	if n in mgc:
+		raise forms.ValidationError("这么好的名字当然被人提前预定啦,换一个试试^-^")
+
+	try:
+		UserModel._default_manager.get(username = username)
+
+	except UserModel.DoesNotExist:
+		return username
+	raise forms.ValidationError("有人已经注册了这个用户名")
+	'''
+
+
+
+# 自己写的用户注册表单:
+class UserRegisterForm(forms.ModelForm):
+    username = forms.CharField(error_messages={'required': '请输入用户名',
+                                               'max_length': '最多只能输入20个字符',
+                                               'min_length': '至少输入6个字符'},
+                               label='用户名',
+                               required=True,
+                               max_length=20,
+                               widget=forms.TextInput(attrs={'placeholder': '3~15位字母/数字/汉字'
+                                                             }
+                                                      )
+                               )
+    email = forms.EmailField(error_messages={'required': '请填写你的email',
+                                             'invalid': 'email格式不正确'
+                                             },
+                             label='邮箱',
+                             required=True,
+                             widget=forms.EmailInput(attrs={'placeholder': '填写正确的email以便激活你的账户'
+                                                            }
+                                                     )
+                             )
+    user_phone = forms.CharField(error_messages={'required': '请输入手机号码',
+                                                 'max_length': '最多只能输入11个字符',
+                                                 'min_length': '至少输入11个字符'},
+                                 label='手机号码',
+                                 required=True,
+                                 max_length=20,
+                                 widget=forms.TextInput(attrs={'placeholder': '请输入手机号码'
+                                                               }
+                                                        )
+                                 )
+    password = forms.CharField(error_messages={'required': '请输入密码',
+                                               'max_length': '最多只能输入20个字符',
+                                               'min_length': '至少输入6个字符'},
+                               label='密码',
+                               required=True,
+                               max_length=20,
+                               widget=forms.PasswordInput(attrs={'placeholder': '长度在6~20个字符以内'
+                                                                 }
+                                                          )
+                               )
+    password2 = forms.CharField(error_messages={'required': '请输入密码',
+                                                'max_length': '最多只能输入20个字符',
+                                                'min_length': '至少输入6个字符'},
+                                label='确认密码',
+                                required=True,
+                                max_length=20,
+                                min_length=6,
+                                widget=forms.PasswordInput(attrs={'placeholder': '长度在6~20个字符以内'
+                                                                  }
+                                                           )
+                                )
+
+    class Meta:
+        model = get_user_model()
+        fields = ("username", "email", "password", "password2")
+
+    def clean_email(self):
+        UserModel = get_user_model()
+        email = self.cleaned_data["email"]
+        lower_email = lowercase_email(email)
+        try:
+            UserModel._default_manager.get(email=lower_email)
+        except UserModel.DoesNotExist:
+            return lower_email
+        raise forms.ValidationError("有人已经注册了这个email地址")
+
+    def clean_password2(self):
+        password = self.cleaned_data.get("password", False)
+        password2 = self.cleaned_data["password2"]
+        if not(password == password2):
+            raise forms.ValidationError("确认密码和密码不一致")
+        return password2
+
+    def clean_username(self):
+        UserModel = get_user_model()
+        username = self.cleaned_data["username"]
+        # 过滤用户名敏感词的注册用户
+        n = re.sub('[^\u4e00-\u9fa5a-zA-Z]', '', username)
+        mgc = ['admin', 'yunfei', '管理']
+        if n in mgc:
+            raise forms.ValidationError("这么好的名字当然被人提前预定啦,换一个试试^-^")
+        try:
+            UserModel._default_manager.get(username=username)
+        except UserModel.DoesNotExist:
+            return username
+        raise forms.ValidationError("有人已经注册了这个用户名")
+
+
+class ChangePwdForm (forms.ModelForm):
+    old_pwd = forms.CharField(error_messages={'required': '请输入密码',
+                                              'max_length': '最多只能输入20个字符',
+                                              'min_length': '至少输入6个字符'},
+                              label='密码',
+                              required=True,
+                              max_length=20,
+                              widget=forms.PasswordInput(attrs={'placeholder': '请输入原始密码'
+                                                                }
+                                                         )
+                              )
+    password = forms.CharField(error_messages={'required': '请输入密码',
+                                               'max_length': '最多只能输入20个字符',
+                                               'min_length': '至少输入6个字符'},
+                               label='密码',
+                               required=True,
+                               max_length=20,
+                               widget=forms.PasswordInput(attrs={'placeholder': '长度在6~20个字符以内'
+                                                                 }
+                                                          )
+                               )
+    confirm_password = forms.CharField(error_messages={'required': '请输入密码',
+                                                       'max_length': '最多只能输入20个字符',
+                                                       'min_length': '至少输入6个字符'},
+                                       label='确认密码',
+                                       required=True,
+                                       max_length=20,
+                                       min_length=6,
+                                       widget=forms.PasswordInput(attrs={'placeholder': '长度在6~20个字符以内'
+                                                                         }
+                                                                  )
+                                       )
+
+    class Meta:
+        model = get_user_model()
+        fields = ("password",)
+
+    def clean_confirm_password(self):
+        password = self.cleaned_data.get("password", False)
+        confirm_password = self.cleaned_data["confirm_password"]
+        if not(password == confirm_password):
+            raise forms.ValidationError("确认密码和密码不一致")
+        return confirm_password

+ 0 - 0
apps/Home/migrations/__init__.py


+ 3 - 0
apps/Home/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/Home/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 103 - 0
apps/Home/urls.py

@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+from apps.Home.views import Login_View, Register_View, Personal_Info_View, Map_Locat_View, User_Remaining_Days, VR_Display, Big_Data, Equip_Sim, User_Judge, User_Display, CBD_Display,\
+BZY_Display, QXZ_Display, Display_Map, User_Base, User_Base_Save,Home_VR, VR_Upload, VR_List, VR_Delete, App_Img, App_Img_Upload, App_Img_Delete, User_Location, Map_Scd_All, SCD_Alarm
+from django.views.decorators.csrf import csrf_exempt
+from django.views.static import serve
+
+app_name = 'apps.Home'
+urlpatterns = [
+    # 云飞的登录界面:
+    # 匹配空和login,即127.0.0.1:8000和127.0.0.1:8000/login为登录界面
+    url(r'^$', Login_View.as_view(), name='login'),
+    url(r'^login$', csrf_exempt(Login_View.as_view()), name='login'),
+
+    url(r'^register$', Register_View.as_view(), name='register'),
+    url(r'^home$', views.home, name='home'),
+    url(r'^home_map.html$', views.home_map, name='home_map'),
+    url(r'^home_map/map_locat$', Map_Locat_View.as_view(), name='map_locat'),
+
+    url(r'^logout$', views.logout, name='logout'),
+    url(r'^personal_info$', Personal_Info_View.as_view(), name='personal_info'),
+
+    # 用户头像路由:
+    # url(r'^user_photo/(?P<path>.*)', serve, {'document_root': 'F:\\YFWLW\\yfwlw\\user_photo'}), #本地
+    url(r'^user_photo/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/user_photo'}),#大服务器
+
+    # 用户基地展示图路由
+    # url(r'^base_show/(?P<path>.*)', serve, {'document_root': 'G:\\YFWLW\\yfwlw\\base_show'}), #本地
+    url(r'^base_show/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/base_show'}),#大服务器
+
+    url(r'^change_pwd$', views.change_pwd, name='change_pwd'),
+    url(r'^user_remaining_days$', User_Remaining_Days.as_view(), name='user_remaining_days'),
+
+    
+    url(r'^home_vr$', Home_VR.as_view(), name='home_vr'),
+
+
+    # 展示页面
+    url(r'^big_data$', Big_Data.as_view(), name='big_data'),
+
+    # 流量提醒
+    url(r'^equip_sim$', Equip_Sim.as_view(), name='equip_sim'),
+
+    # 判断是否四情用户
+    url(r'^user_judge$', User_Judge.as_view(), name='user_judge'),
+
+    # 数据展示页面
+    url(r'^user_display$', User_Display.as_view(), name='user_display'),
+
+    # 测报灯展示页面
+    url(r'^cbd_display$', CBD_Display.as_view(), name='cbd_display'),
+
+    # 孢子仪展示页面
+    url(r'^bzy_display$', BZY_Display.as_view(), name='bzy_display'),
+
+    # 气象站展示页面
+    url(r'^qxz_display$', QXZ_Display.as_view(), name='qxz_display'),
+
+    # 地图页面
+    url(r'^display_map$', Display_Map.as_view(), name='display_map'),
+
+    # 用户基地编辑
+    url(r'^user_base$', User_Base.as_view(), name='user_base'),
+    url(r'^user_base_save$', User_Base_Save.as_view(), name='user_base_save'),
+
+    # vr测试
+    url(r'^vr_photo/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/vr_photo'}), #线上
+    # url(r'^vr_photo/(?P<path>.*)', serve, {'document_root': 'G:\\YFWLW\\yfwlw\\vr_photo'}), #本地
+
+    url(r'^vr_display$', VR_Display.as_view(), name='vr_display'),
+
+    url(r'^vr_upload$', VR_Upload.as_view(), name='vr_upload'),
+    url(r'^vr_list$', VR_List.as_view(), name='vr_list'),
+    url(r'^vr_delete$', VR_Delete.as_view(), name='vr_delete'),
+
+    # APP轮播图上传
+    url(r'^app_img$', App_Img.as_view(), name='app_img'),
+    url(r'^app_img_upload$', App_Img_Upload.as_view(), name='app_img_upload'),
+    url(r'^app_img_delete$', App_Img_Delete.as_view(), name='app_img_delete'),
+
+
+    # 用户定位
+    url(r'^user_location$', User_Location.as_view(), name='user_location'),
+
+
+
+
+    url(r'^map_scd_all$', Map_Scd_All.as_view(), name='map_scd_all'),
+    
+    url(r'^scd_alarm$', SCD_Alarm.as_view(), name='scd_alarm'),
+    
+    
+
+
+    
+    
+    
+    
+    
+]

File diff suppressed because it is too large
+ 1357 - 0
apps/Home/views.py


+ 0 - 0
apps/MsgAlarm/__init__.py


+ 3 - 0
apps/MsgAlarm/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 5 - 0
apps/MsgAlarm/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class MsgalarmConfig(AppConfig):
+    name = 'MsgAlarm'

+ 0 - 0
apps/MsgAlarm/migrations/__init__.py


+ 3 - 0
apps/MsgAlarm/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/MsgAlarm/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 29 - 0
apps/MsgAlarm/urls.py

@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+
+from .views import CBDMsg_View, CBDMsg_Conf, MsgConf_Save, AlarmRange_View,AlarmHistory_View, Sim_Flow, Sim_Flow_View, Sim_Save
+from django.views.decorators.csrf import csrf_exempt
+from django.views.static import serve
+
+
+app_name = 'apps.MsgAlarm'
+urlpatterns = [
+
+    url(r'^cbdmsg_view$', CBDMsg_View.as_view(), name='cbdmsg_view'),
+    url(r'^cbdmsg_conf$', CBDMsg_Conf.as_view(), name='cbdmsg_conf'),
+    url(r'^msgconf_save$', MsgConf_Save.as_view(), name='msgconf_save'),
+
+
+    url(r'^alarm_map.html$', views.alarm_map, name='alarm_map'),
+    url(r'^alarm_range$', AlarmRange_View.as_view(), name='alarm_range'),
+    url(r'^alarm_history/$', AlarmHistory_View.as_view(), name='alarm_history'),
+    
+    # 流量卡到期提醒页面
+    url(r'^sim_flow$', Sim_Flow.as_view(), name='sim_flow'),
+    url(r'^sim_flow_view$', Sim_Flow_View.as_view(), name='sim_flow_view'),
+    url(r'^sim_save$', Sim_Save.as_view(), name='sim_save'),
+    
+]

+ 419 - 0
apps/MsgAlarm/views.py

@@ -0,0 +1,419 @@
+# -*- coding: utf-8 -*-
+
+import array
+from django.shortcuts import render
+from django.views.generic.base import View
+from itertools import chain
+import requests
+from requests.auth import HTTPBasicAuth
+
+from django.core.exceptions import ObjectDoesNotExist
+from django.http import JsonResponse, HttpResponse
+from django.views.generic import ListView
+from django.core import serializers
+
+from datetime import datetime, date
+from PIL import Image
+import time
+import json
+
+from io import BytesIO
+from apps.AppInfoManage.models import MyUser, User_Log, Equip, SCDdata, SCDstatus, CBDdata, CBDstatus, YBQdata, YBQstatus, JKdata, BZYstatus, BZYdata, SCDstatus_all, CBDstatus_all,\
+QXZswitchstatus, QXZswitchdata, QXZAutoswitch, QXZstatus, QXZTimingswitch, Msg_Conf, CBDphoto, Equip_SimInfo
+# 引用查询流量接口
+from apps.SimInfo.views import get_siminfo
+# 引用全局变量
+from django.conf import settings
+from django.views.decorators.csrf import csrf_exempt
+
+
+# 测报灯管理视图:
+class CBDMsg_View(ListView):
+    def get(self, request):
+        # x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
+        # if x_forwarded_for:
+        #     ip = x_forwarded_for.split(',')[0]#所以这里是真实的ip
+        #     print("------------real ip")
+        # else:
+        #     ip = request.META.get('REMOTE_ADDR')#这里获得代理ip
+        #     print("------------unreal ip")
+        # 获取主机名
+        # hostname = socket.gethostname()
+        # #获取IP
+        # ip = socket.gethostbyname(hostname)
+        # print("获取的IP为:",ip)
+
+
+        current_user = request.session.get('username')
+        current_user = MyUser.objects.get(username=current_user)
+        if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
+            print("---用户")
+            role = "user"
+            nums = CBDstatus.objects.filter(
+                equip_id__equip_user=current_user).count()
+        elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
+            print("---代理商")
+            role = "user"
+            nums = CBDstatus.objects.filter(
+                equip_id__equip_agency=current_user.user_agency).count()
+        else:
+            print("---管理员")
+            role = "superuser"
+            nums = CBDstatus.objects.all().count()
+        return render(request, 'warnmanage/cbd_list.html', context={"nums": nums,"role": role})
+
+    def post(self, request):
+        if request.is_ajax():
+            print("ajax-post!")
+            req = request.POST.get('req')
+            print("req:", req)
+            # 请求数据:
+            if req == "dat":
+                print("---请求数据的post!")
+                page = int(request.POST.get('page'))
+                print("page:", page)
+                current_user = request.session.get('username')
+                print("current_user:", current_user)
+                current_user = MyUser.objects.get(username=current_user)
+                if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
+                    print("---不是管理员")
+                    # sta1 = CBDstatus.objects.filter(
+                    #     equip_id__equip_user=current_user, equip_id__equip_type=3)[(10*(page-1)):(page*10)]  # .order_by("-equip_id__equip_add_time")
+                    sta1 = CBDstatus.objects.filter(equip_id__equip_user=current_user)[(10*(page-1)):(page*10)]
+                elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
+                    print("---代理商")
+                    # sta1 = CBDstatus.objects.filter(
+                    #     equip_id__equip_agency=current_user.user_agency, equip_id__equip_type=3)[(10*(page-1)):(page*10)]
+                    sta1 = CBDstatus.objects.filter(equip_id__equip_agency=current_user.user_agency)[(10*(page-1)):(page*10)]
+                else:
+                    print("---管理员")
+                    # sta1 = CBDstatus.objects.filter(equip_id__equip_type=3)[(
+                    #     10*(page-1)):(page*10)]  # .order_by("-equip_id__equip_add_time")
+                    sta1 = CBDstatus.objects.all()[(10*(page-1)):(page*10)]
+                sta2 = [{"cbd_status": x.cbd_status, "upl_time": x.upl_time,
+                         "paramconf": x.paramconf, "serverconf": x.serverconf,
+                         "equip_name": x.equip_id.equip_name, "equip_desc": x.equip_id.equip_desc,
+                         "is_online": x.is_online, "off_time": x.off_time} for x in sta1]
+                data = json.dumps(sta2, cls=CJSONEncoder, indent=4)
+                # print("data:",data)
+                return HttpResponse(data)
+            elif req == "filter":
+                f_name = request.POST.get('ename')
+                print("f_name:", f_name)
+
+                f_id = request.POST.get('f_id')
+                print("f_id:", f_id)
+
+                page = int(request.POST.get('page'))
+                print("page:", page)
+
+                dver = request.POST.get('dver')
+                print("dver",dver)
+
+                is_online = request.POST.get('is_online')
+                print("is_online",is_online)
+
+                # 读取当前用户:
+                current_user = request.session.get('username')
+                print("current_user:", current_user)
+                current_user = MyUser.objects.get(username=current_user)
+                if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
+                    print("---不是管理员")
+                    if f_name == "" and f_id == '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_user=current_user)
+                    elif f_name == "" and f_id != '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id)
+                    elif f_name != "" and f_id == '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_user=current_user, equip_id__equip_name__contains=f_name)
+                    elif f_name != "" and f_id != '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_user=current_user, equip_id__equip_name__contains=f_name, equip_id__equip_id__contains=f_id)
+                elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
+                    print("---代理商")
+                    if f_name == "" and f_id == '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_agency=current_user.user_agency)
+                    elif f_name == "" and f_id != '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id)
+                    elif f_name != "" and f_id == '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=f_name)
+                    elif f_name != "" and f_id != '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=f_name, equip_id__equip_id__contains=f_id)
+                else:
+                    print("---管理员")
+                    if f_name == "" and f_id == '':
+                        sta1 = CBDstatus.objects.all()
+                    elif f_name == "" and f_id != '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_id__contains=f_id)
+
+                    elif f_name != "" and f_id == '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_name__contains=f_name)
+                    elif f_name != "" and f_id != '':
+                        sta1 = CBDstatus.objects.filter(
+                            equip_id__equip_name__contains=f_name, equip_id__equip_id__contains=f_id)
+                print("在线状态------------>",is_online)
+                # -----------------------------------------------------------------------------------------
+                # 版本号筛选设备
+                if dver != "" and is_online == "":
+                    sta3 = []
+                    for i in sta1:
+                        fir_v = eval(i.cbd_status)["dver"].split(".")
+                        if fir_v[0] == dver:
+                            sta3.append({"cbd_status": i.cbd_status, "upl_time": i.upl_time,
+                            "paramconf": i.paramconf, "serverconf": i.serverconf,
+                            "equip_name": i.equip_id.equip_name, "equip_desc": i.equip_id.equip_desc,
+                            "is_online": i.is_online, "off_time": i.off_time})
+                    data = {"dat": sta3[(10*(page-1)):(page*10)],
+                        "nums": len(sta3)}
+                    print("-------------",len(sta3))
+                    data = json.dumps(data, cls=CJSONEncoder)
+                    # print("data:",data)
+                    return HttpResponse(data)
+                # -----------------------------------------------------------------------------------------
+                # 在线状态筛选设备
+                elif is_online != "" and dver == "":
+                    sta4 = []
+                    for i in sta1:
+                        if is_online == i.is_online:
+                            sta4.append({"cbd_status": i.cbd_status, "upl_time": i.upl_time,
+                            "paramconf": i.paramconf, "serverconf": i.serverconf,
+                            "equip_name": i.equip_id.equip_name, "equip_desc": i.equip_id.equip_desc,
+                            "is_online": i.is_online, "off_time": i.off_time})
+                    data = {"dat": sta4[(10*(page-1)):(page*10)],
+                        "nums": len(sta4)}
+                    print("-------------",len(sta4))
+                    data = json.dumps(data, cls=CJSONEncoder)
+                    # print("data:",data)
+                    return HttpResponse(data)
+                # -----------------------------------------------------------------------------------------
+                # 版本号和在线状态同时筛选设备
+                elif is_online != "" and dver != "":
+                    sta3 = []
+                    for i in sta1:
+                        fir_v = eval(i.cbd_status)["dver"].split(".")
+                        if fir_v[0] == dver and i.is_online == is_online:
+                            sta3.append({"cbd_status": i.cbd_status, "upl_time": i.upl_time,
+                            "paramconf": i.paramconf, "serverconf": i.serverconf,
+                            "equip_name": i.equip_id.equip_name, "equip_desc": i.equip_id.equip_desc,
+                            "is_online": i.is_online, "off_time": i.off_time})
+                    data = {"dat": sta3[(10*(page-1)):(page*10)],
+                        "nums": len(sta3)}
+                    print("-------------",len(sta3))
+                    data = json.dumps(data, cls=CJSONEncoder)
+                    # print("data:",data)
+                    return HttpResponse(data)
+                # -----------------------------------------------------------------------------------------
+
+
+                sta2 = [{"cbd_status": x.cbd_status, "upl_time": x.upl_time,
+                         "paramconf": x.paramconf, "serverconf": x.serverconf,
+                         "equip_name": x.equip_id.equip_name, "equip_desc": x.equip_id.equip_desc,
+                         "is_online": x.is_online, "off_time": x.off_time} for x in sta1]
+                data = {"dat": sta2[(10*(page-1)):(page*10)],
+                        "nums": sta1.count()}
+                data = json.dumps(data, cls=CJSONEncoder)
+                # print("data:",data)
+                return HttpResponse(data)
+            elif req == "paramconf":
+                equip_id = request.POST.get('id')
+                print("equip_id:", equip_id)
+
+                # 读取当前设备的参数配置信息:
+                sta1 = CBDstatus.objects.filter(equip_id=equip_id)
+                for x in sta1:
+                    sta2 = {"paramconf": x.paramconf}
+                data = json.dumps(sta2, cls=CJSONEncoder)
+                print("配置信息的data:", data)
+                return HttpResponse(data)
+            elif req == "change":
+                equip_id = request.POST.get('id')
+                print("equip_id:", equip_id)
+                equip_desc = request.POST.get('desc')
+                equip_obj = Equip.objects.get(equip_id=equip_id)
+                try:
+                    equip_obj.equip_desc = equip_desc
+                    equip_obj.save()
+                    data = "0"
+                except:
+                    data = "1"
+                return HttpResponse(data)
+
+
+# 测报灯短信配置
+class CBDMsg_Conf(ListView):
+    def get(self,request):
+        pass
+    def post(self,request):
+        e_id = request.POST.get("e_id")
+        try:
+            msgconf = Msg_Conf.objects.get(equip_id=e_id)
+            data = msgconf.conf
+        except:
+            data = ""
+        return HttpResponse(data)
+
+
+# 测报灯短信配置保存
+class MsgConf_Save(ListView):
+    def get(self,request):
+        pass
+    def post(self,request):
+        e_id = request.POST.get("e_id")
+        e_conf = request.POST.get("conf")
+        equip_obj = Equip.objects.get(equip_id=e_id)
+        if Msg_Conf.objects.filter(equip_id=equip_obj).exists():
+            msgconf = Msg_Conf.objects.get(equip_id=equip_obj)
+            msgconf.conf = e_conf
+            msgconf.save()
+        else:
+            Msg_Conf.objects.create(equip_id=equip_obj,conf=e_conf)
+        return HttpResponse("0")
+
+
+
+
+class AlarmRange_View(View):
+    def get(self, request):
+        e_id = request.GET.get("e_id")
+        return render(request, 'warnmanage/alarm_range.html', context={"e_id":e_id})
+    def post(self, request):
+        e_id = request.POST.get("e_id")
+        pest_num = 0
+        pest_name = []
+        pest_nums = []
+        pest_dict = {}
+        pest_dict_new = {}
+        cbd_list = CBDphoto.objects.filter(equip_id=e_id)
+        for x in cbd_list:
+            if x.indentify_result == None or x.indentify_result == "":
+                pass
+            else:
+                for a in x.indentify_result.split("#"):
+                    pest_num = pest_num + int(a.split(",")[1])
+                    pest_name.append(int(a.split(",")[0]))
+                    pest_nums.append(int(a.split(",")[1]))
+
+        for xx in range(len(pest_name)):
+            c = {pest_name[xx]:pest_nums[xx]}
+            for d in c:
+                if d in pest_dict:
+                    pest_dict[d] = pest_dict[d] + c[d]
+                else:
+                    pest_dict.update(c)
+        print(pest_dict)
+        pest_list = []
+        for i in pest_dict:
+            pest_list.append(i)
+        data = {"pest_list":pest_list}
+        data = json.dumps(data)
+        return HttpResponse(data)
+
+
+
+class AlarmHistory_View(View):
+    def get(self, request):
+        current_user = request.session.get('username')
+        print("current_user:", current_user)
+        current_user = MyUser.objects.get(username=current_user)
+        if current_user.is_superuser != True and current_user.is_staff != True:  # __username
+            print("---不是管理员")
+            alarm_record = Alarm_record.objects.filter(equip_id__equip_user=current_user)[0:10]
+        else:
+            print("---管理员")
+            alarm_record = Alarm_record.objects.all()
+        return render(request, 'warnmanage/alarm_history.html', context={'alarm_record':alarm_record})
+
+
+def alarm_map(request):
+    return render(request, 'warnmanage/alarm_map.html', context={})
+
+
+
+
+# sim卡流量提醒
+class Sim_Flow(ListView):
+    def get(self,request):
+        return render(request, 'warnmanage/sim_list.html', context={})
+
+
+class Sim_Flow_View(ListView):
+    def get(self,request):
+        current_user = request.session.get('username')
+        current_user = MyUser.objects.get(username=current_user)
+        page = int(request.GET.get("page"))
+        e_id = request.GET.get("e_id")
+        iccid = request.GET.get("iccid")
+        status = request.GET.get("status")
+        if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
+            print("---用户")
+            if e_id:
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,equip_id__equip_id__contains=e_id)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,equip_id__equip_id__contains=e_id).count()
+            elif iccid:
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,iccid__contains=iccid)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,iccid__contains=iccid).count()
+            elif status:
+                status = int(status)
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status).count()
+            else:
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user).count()
+        elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
+            print("---代理商")
+            if e_id:
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,equip_id__equip_id__contains=e_id)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,equip_id__equip_id__contains=e_id).count()
+            elif iccid:
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,iccid__contains=iccid)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,iccid__contains=iccid).count()
+            elif status:
+                status = int(status)
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status).count()
+            else:
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency).count()
+        else:
+            print("---管理员")
+            if e_id:
+                simlist = Equip_SimInfo.objects.filter(equip_id__equip_id__contains=e_id)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(equip_id__equip_id__contains=e_id).count()
+            elif iccid:
+                simlist = Equip_SimInfo.objects.filter(iccid__contains=iccid)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(iccid__contains=iccid).count()
+            elif status:
+                status = int(status)
+                simlist = Equip_SimInfo.objects.filter(account_status=status)[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.filter(account_status=status).count()
+            else:
+                simlist = Equip_SimInfo.objects.all()[(10*(page-1)):(page*10)]
+                nums = Equip_SimInfo.objects.all().count()
+        return render(request, 'warnmanage/siminfoList.html', context={"simlist":simlist,"nums":nums})
+
+
+
+# 手机号保存
+class Sim_Save(ListView):
+    def get(self,request):
+        pass
+    def post(self,request):
+        e_id = request.POST.get("e_id")
+        mobile = request.POST.get("mobile")
+        try:
+            sim_obj = Equip_SimInfo.objects.get(equip_id=e_id)
+            sim_obj.sim_alarm = mobile
+            sim_obj.save()   
+        except Exception as e:
+            print(e)
+            return HttpResponse("1")
+        return HttpResponse("0")
+        

+ 0 - 0
apps/PestPC/__init__.py


+ 338 - 0
apps/PestPC/admin.py

@@ -0,0 +1,338 @@
+from django.contrib import admin
+from apps.AppInfoManage.models import Pest_Harm_New,User_Month,User_Data_Table_New,Insect_Edition,User_Reporter,Address_Province,Encryption,Insecta_Sort,Purchase
+
+
+#种类表
+@admin.register(Pest_Harm_New)
+class Pest_Harm_New_Admin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'pest',
+        'pest_sort',
+        'pest_name',
+        'month_id',
+        'user_id',
+        'crop_sort'
+    ]
+    # 列表显示项:
+    list_display = [
+        'pest',
+        'pest_sort',
+        'pest_name',
+        'month_id',
+        'user_id',
+        'crop_sort'
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('pest','pest_name','month_id',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['pest','pest_name','month_id']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    fk_fields = ('month_id','user_id',)
+
+    raw_id_fields = ('month_id','user_id',)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+
+#月份表
+@admin.register(User_Month)
+class User_Month_Admin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'month',
+        'addr_id',
+    ]
+    # 列表显示项:
+    list_display = [
+        'month',
+        'addr_id',
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('month','addr_id',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['month','addr_id']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    fk_fields = ('month','addr_id',)
+
+    raw_id_fields = ('addr_id',)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+
+#用户数据表
+@admin.register(User_Data_Table_New)
+class User_Data_Table_New_Admin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'harm_id',
+        'user_id',
+        'lng',
+        'lat',
+        'upl_time',
+        'area',
+        'growth_stages',
+        'pestname',
+        'cens_method',
+        'defa',
+        'addr_photo',
+    ]
+    # 列表显示项:
+    list_display = [
+        'harm_id',
+        'user_id',
+        'lng',
+        'lat',
+        'upl_time',
+        'area',
+        'growth_stages',
+        'pestname',
+        'cens_method',
+        'defa',
+        'addr_photo',
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('harm_id','user_id',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['harm_id','user_id']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    fk_fields = ('harm_id','user_id',)
+
+    raw_id_fields = ('harm_id','user_id',)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+#病虫害调查统计器app升级表
+@admin.register(Insect_Edition)
+class Insect_Editionadmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'app_name',
+        'app_num',
+        'app_desc',
+        'upl_time'
+    ]
+    # 列表显示项:
+    list_display = [
+        'app_name',
+        'app_num',
+        'app_desc',
+        'upl_time'
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('app_name',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['app_name','app_num']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    # fk_fields = ('reporters',)
+
+    # raw_id_fields = ("reporters",)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+
+#测试员表
+@admin.register(User_Reporter)
+class User_AccountAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'user_id',
+        'name',
+        'photo',
+        'addr',
+        'time',
+        'phone',
+        'password'
+    ]
+    # 列表显示项:
+    list_display = [
+        'user_id',
+        'name',
+        'photo',
+        'addr',
+        'time',
+        'phone',
+        'password'
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('user_id',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['name']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    fk_fields = ('user_id',)
+
+    raw_id_fields = ("user_id",)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+
+
+#省市区表
+@admin.register(Address_Province)
+class User_AccountAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'code',
+        'name',
+        'parent_code',
+    ]
+    # 列表显示项:
+    list_display = [
+        'code',
+        'name',
+        'parent_code',
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('code',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['name']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    # fk_fields = ('user_id',)
+
+    # raw_id_fields = ("id",)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+
+#加密表
+@admin.register(Encryption)
+class EncryptionAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'time',
+        'meid',
+        'cipher',
+    ]
+    # 列表显示项:
+    list_display = [
+        'time',
+        'meid',
+        'cipher',
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('meid',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['meid']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    # fk_fields = ('user_id',)
+
+    # raw_id_fields = ("id",)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+
+
+    
+# #虫害分类表
+# @admin.register(Insecta_Sort)
+# class Insecta_SortAdmin(admin.ModelAdmin):
+#     actions_on_bottom = False
+#     actions_on_top = True
+#     # 详情显示项:
+#     fields = [
+#         'code',
+#         'sort',
+#         'sort_code',
+#     ]
+#     # 列表显示项:
+#     list_display = [
+#         'code',
+#         'sort',
+#         'sort_code',
+#     ]
+#     # 点击进入详情修改项:
+#     list_display_links = ('code',)
+#     # 链接:无
+#     # list_display_links = None
+#     # 搜索字段项:
+#     search_fields = ['sort','code']
+#     # # 动作:
+#     # actions = [ds_off, ds_on]
+#     # 设置显示外键字段
+#     # fk_fields = ('user_id',)
+
+#     # raw_id_fields = ("id",)
+#     # 设置每页显示记录数:
+#     list_per_page = 10
+
+
+
+
+#购买用户列表
+@admin.register(Purchase)
+class Purchase(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'time',
+        'userid',
+    ]
+    # 列表显示项:
+    list_display = [
+        'time',
+        'userid',
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('userid',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+    search_fields = ['userid',]
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    fk_fields = ('userid',)
+
+    raw_id_fields = ("userid",)
+    # 设置每页显示记录数:
+    list_per_page = 10

+ 5 - 0
apps/PestPC/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class PestpcConfig(AppConfig):
+    name = 'PestPC'

+ 0 - 0
apps/PestPC/migrations/__init__.py


+ 3 - 0
apps/PestPC/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/PestPC/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 66 - 0
apps/PestPC/urls.py

@@ -0,0 +1,66 @@
+
+from django.conf.urls import url
+from django.views.static import serve
+
+from .views import *
+
+app_name = 'apps.PestPC'
+urlpatterns = [
+    url(r'^cate_insect$', Cate_Insect.as_view(), name='cate_insect'),#新增数据省市县三级联动
+    url(r'^look_user$', Look_User.as_view(), name='look_user'),#查看采集数据详情和当前账号下所有测报员信息
+    url(r'^look_account$', Look_Account.as_view(), name='look_account'),#查看指定测报员下的数据,
+    
+    url(r'^new_reporter$', New_Reporter.as_view(), name='new_reporter'),#分配测报员账号
+    url(r'^activation_code$', Activation_Code.as_view(), name='activation_code'),#生成激活码
+
+    url(r'^judge_user$', Judge_User.as_view(), name='judge_user'),#判断登录用户身份
+    url(r'^new_code$', New_Code.as_view(), name='new_code'),#生成激活码子用户
+    url(r'^see_account$', See_Account.as_view(), name='see_account'),#测报员数据页面
+    url(r'^see_mation$', See_Mation.as_view(), name='see_mation'),#测报员数据详情页面
+    url(r'^screen_name$', Screen_Name.as_view(), name='screen_name'),#按病虫害名字进行筛选
+    url(r'^screen_hour$', Screen_Hour.as_view(), name='screen_hour'),#按创建范围时间进行筛选
+    # url(r'^screen_pests_name$', Screen_Pests_Name.as_view(), name='screen_pests_name'),#测报员下病虫害名字筛选
+    url(r'^screen_extent_time$', Screen_Extent_Time.as_view(), name='screen_extent_time'),#测报员下时间段筛选
+    url(r"^pie_chart$",Pie_Chart.as_view(),name="pie_chart"),#已录信息饼状图统计页面
+    url(r"^show_pie_chart$",Show_Pie_Chart.as_view(),name="show_pie_chart"),#已录信息饼状图数据展示
+    url(r"^reporting$",Reporting.as_view(),name="reporting"),#已录信息害虫统计报表
+    url(r"^line_chart$",Line_Chart.as_view(),name="line_chart"),#已录信息折线图
+    
+    url(r"^export_excel$",Export_Excel.as_view(),name="export_excel"),#导出测报员数据
+    url(r"^export_mation$",Export_Mation.as_view(),name="export_mation"),#主账号下所有数据
+    # url(r"^user_purchase$",User_Purchase.as_view(),name="user_purchase"),#分配用户
+
+    url(r"^allocation$",Allocation.as_view(),name="allocation"),#购买用户列表页
+    url(r"^cancel_branch$",Cancel_Branch.as_view(),name="cancel_branch"),#取消分配
+    
+    url(r"^user_account$",User_Account.as_view(),name="user_account"),#查看主账号下测报员信息
+
+    url(r"^check_account$",Check_Account.as_view(),name="check_account"),#查看所有测报员识别记录数据
+
+
+    url(r"^del_account$",Del_Account.as_view(),name="del_account"),#删除测报员账号
+    url(r"^del_mation$",Del_Mation.as_view(),name="del_mation"),#删除指定数据
+
+    url(r"^app_upder$",App_Upder.as_view(),name="app_upder"),# 扫码下载
+    url(r"^app_upder2$",App_Upder2.as_view(),name="app_upder2"),# 扫码下载(针对赵珍统计器)
+    
+    url(r"^again_data$",again_data.as_view(),name="again_data"),# 数据重传
+
+
+    url(r"^down_img$",down_img.as_view(),name="down_img"),# 下载图片接口
+
+    # url(r"^qr_code$",qr_code.as_view(),name="qr_code"),# 下载图片接口
+
+    # url(r"^test_log$",test_log.as_view(),name="test_log"),# 下载图片接口
+    
+    # url(r'^qr_code/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\qr_code'}),#扫码下载升级,
+    
+    # url(r"^test_photos$",test_photos.as_view(),name="test_photos"),# 测试图片的清晰度
+
+    # url(r'^download_app/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/download_app'}),#扫码下载升级,小服务器
+
+    # url(r'^/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/download_app'}),#扫码下载升级,大服务器
+    # url(r'^download_app/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\download_app'}),#扫码下载升级,
+
+
+]

File diff suppressed because it is too large
+ 1254 - 0
apps/PestPC/views.py


+ 0 - 0
apps/Pestapp/__init__.py


+ 194 - 0
apps/Pestapp/admin.py

@@ -0,0 +1,194 @@
+from django.contrib import admin
+
+# Register your models here.
+from apps.AppInfoManage.models import Diseases,App_Insect,App_Plant,Feedback
+
+
+#病虫害知识库表
+@admin.register(Diseases)
+class DiseasesAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'name',
+        'course',
+        'prevention',
+        'img_urls',
+        'time',
+        'ret',
+      
+    ]
+    # 列表显示项:
+    list_display = [
+        'name',
+        'course',
+        'prevention',
+        'img_urls',
+        'time',
+        'ret',
+       
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('name',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+        
+    search_fields = ['name','course']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    # fk_fields = ('ids',)
+
+    # raw_id_fields = ("ids",)
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+
+#虫害识别保存表
+@admin.register(App_Insect)
+class App_InsectAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'name',
+        'course',
+        'prevention',
+        'img_urls',
+        'time',
+        'reporter_id',
+        'img',
+        'addr',
+        'lng',
+        'lat',
+        'userid'
+        
+       
+        
+    ]
+    # 列表显示项:
+    list_display = [
+        'name',
+        'course',
+        'prevention',
+        'img_urls',
+        'time',
+        'reporter_id',
+        'img',
+        'addr',
+        'lng',
+        'lat',
+        'userid'
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('name',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+        
+    search_fields = ['name','course']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    fk_fields = ('reporter_id',"userid")
+
+    raw_id_fields = ("reporter_id","userid")
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+#植物识别表
+@admin.register(App_Plant)
+class App_PlantAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'name',
+        'course',
+        'prevention',
+        'img_urls',
+        'time',
+        'reporter_id',
+        'img',
+        'addr',
+        'lng',
+        'lat',
+        'userid'
+       
+    ]
+    # 列表显示项:
+    list_display = [
+        'name',
+        'course',
+        'prevention',
+        'img_urls',
+        'time',
+        'reporter_id',
+        'img',
+        'addr',
+        'lng',
+        'lat',
+        'userid'
+       
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('name',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+        
+    search_fields = ['name','course']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    fk_fields = ('reporter_id',"userid")
+
+    raw_id_fields = ("reporter_id","userid")
+    # 设置每页显示记录数:
+    list_per_page = 10
+
+
+#用户反馈表
+@admin.register(Feedback)
+class FeedbackAdmin(admin.ModelAdmin):
+    actions_on_bottom = False
+    actions_on_top = True
+    # 详情显示项:
+    fields = [
+        'name',
+        'phone',
+        'proposal',
+        'count',
+        'time',
+        'store',
+       
+    ]
+    # 列表显示项:
+    list_display = [
+        'name',
+        'phone',
+        'proposal',
+        'count',
+        'time',
+        'store',
+       
+    ]
+    # 点击进入详情修改项:
+    list_display_links = ('name',)
+    # 链接:无
+    # list_display_links = None
+    # 搜索字段项:
+        
+    search_fields = ['name','phone']
+    # # 动作:
+    # actions = [ds_off, ds_on]
+    # 设置显示外键字段
+    # fk_fields = ('ids',)
+
+    # raw_id_fields = ("ids",)
+    # 设置每页显示记录数:
+    list_per_page = 10

+ 5 - 0
apps/Pestapp/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class PestappConfig(AppConfig):
+    name = 'Pestapp'

+ 0 - 0
apps/Pestapp/migrations/__init__.py


+ 3 - 0
apps/Pestapp/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/Pestapp/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 104 - 0
apps/Pestapp/urls.py

@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+from django.conf.urls import url
+from django.views.static import serve
+
+from . import views
+from .views import *
+   
+
+app_name = 'apps.Pestapp'
+urlpatterns = [
+    url(r'^app_log$', app_log.as_view(), name='app_log'),#登录
+    url(r'^app_out$', views.app_out, name='app_out'),#退出
+    url(r'^app_user_in$', app_user_in.as_view(), name='app_user_in'),#个人信息
+    url(r'^app_user_head$', app_user_head.as_view(), name='app_user_head'),#修改头像
+
+    url(r"^city$",Citys.as_view(),name="city"), # 县 市区
+    url(r"^cate$",Cate_Collector_User.as_view(),name="cate"),# 新建采集人信息 
+    url(r"^seeuser$",SeeUser.as_view(),name="seeuser"),#已录信息病害查看
+
+    url(r"^app_insect$",app_insect.as_view(),name="app_insect"),# 虫害识别
+
+    url(r"^app_plant$",app_plant.as_view(),name="app_plant"),# 病害识别接口
+   
+    url(r"^app_insect_plant$",app_insect_plant.as_view(),name="app_insect_plant"), #识别虫害(测试用)
+    
+    url(r"^expores$",Exportes.as_view(),name="expores"),#数据导出指定单条数据和多条数据或者病害、虫害全部数据
+
+    url(r"^app_upgrade$",App_Upgrade.as_view(),name="app_upgrade"),#app在线升级
+
+    url(r"^insect_base$",Insect_Base.as_view(),name="insect_base"),#知识库详情与查看详情病害
+    url(r"^plant_base$",Plant_Base.as_view(),name="plant_base"),#知识库列表,作物
+    url(r"^search$",Search.as_view(),name="search"),#搜索知识库
+
+
+    url(r"^insect_record$",Insect_Record.as_view(),name="insect_record"),#保存昆虫病害识别结果
+    url(r"^plant_record$",Plant_Record.as_view(),name="plant_record"),#保存植物病害识别结果
+
+    url(r"^insect_details$",Insect_Details.as_view(),name="insect_details"),#查看昆虫病害识别结果列表与详情
+    url(r"^plant_details$",Plant_Details.as_view(),name="plant_details"),#查看植物病害识别结果列表详情
+
+    url(r"^del_record$",Del_Record.as_view(),name="del_record"),#删除识别记录
+    url(r"^make_data$",Make_Data.as_view(),name="make_data"),# 识别记录用户进行补充
+    url(r"^upload_photos$",Upload_Photos.as_view(),name="upload_photos"),# 识别失败用户上传的照片
+    url(r"^del_insect_photo$",Del_Insect_Photo.as_view(),name="del_insect_photo"),# 删除识别记录用户上传的图片
+    url(r"^count_plant$",Count_Plant.as_view(),name="count_plant"),#用户反馈
+
+    url(r"^check_leaving$",Check_Leaving.as_view(),name="check_leaving"),##返回用户反馈(管理员可见)
+
+    url(r"^user_pro$",User_Pro.as_view(),name="user_pro"),#用户反馈
+
+    url(r"^account_photo$",Account_Photo.as_view(),name="account_photo"),#接受新建页面病虫害上传的图片
+
+    url(r"^del_account_photo$",Del_Account_Photo.as_view(),name="del_account_photo"),#删除新建页面病虫害上传的图片
+
+    url(r"^census$",Census.as_view(),name="census"),#加密处理
+
+    url(r"^decide$",Decide.as_view(),name="decide"),#判断手机是否注册
+
+    url(r"^plus_insect$",Plus_Insect.as_view(),name="plus_insect"),#添加病虫害知识库数据接口
+
+    url(r"^app_all$",App_All.as_view(),name="app_all"),#版本历史记录
+    url(r"^scrapy_insect$",scrapy_insect.as_view(),name="scrapy_insect"),#版本历史记录
+    # url(r"^daoru$",daoru.as_view(),name="daoru"),#版本历史记录
+    # url(r'^harm_photos/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\harm_photos'}),
+    # url(r'^harm_photos/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\harm_photos'}),#接受新建页面病虫害上传的图片
+    # url(r'^level_app/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\level_app'}),#本地测试升级,
+    # url(r'^insect_photos/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\insect_photos'}),#成功昆虫病害图片
+    # url(r'^insect_photos_fail/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\insect_photos_fail'}),#失败昆虫病害图片
+    # url(r'^plant_photos/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\plant_photos'}),#成功植物病害图片
+    # url(r'^plant_photos_fail/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\plant_photos_fail'}),#失败植物病害图片
+
+    # url(r'^harm_base_photos/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\harm_base_photos'}),# 知识库添加图片
+    
+    # url(r'^sexport_file/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\sexport_file'}),#测试导出功能
+
+    # url(r'^ce_cuser_head/(?P<path>.*)', serve, {'document_root': 'C:\线上\yfwlw\ce_cuser_head'}),#测报员头像
+
+    
+
+    # # # # 小服务器图片存储路径
+    # url(r'^level_app/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/level_app'}),#本地测试升级,
+    # url(r'^insect_photos/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/insect_photos'}),#成功昆虫病害图片
+    # url(r'^insect_photos_fail/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/insect_photos_fail'}),#失败昆虫病害图片
+    # url(r'^plant_photos/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/plant_photos'}),#成功植物病害图片
+    # url(r'^plant_photos_fail/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/plant_photos_fail'}),#失败植物病害图片
+    # url(r'^harm_base_photos/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/harm_base_photos'}),#知识库图片
+    # url(r'^ce_cuser_head/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/ce_cuser_head'}),#测报员头像
+    # url(r'^harm_photos/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/harm_photos'}),#接受新建页面病虫害上传的图片
+    # url(r'^sexport_file/(?P<path>.*)', serve, {'document_root': '/home/web/yfwlw/sexport_file'}),#导出功能
+ 
+
+
+    # 大服务器图片存储路径
+    url(r'^level_app/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/level_app'}),#本地测试升级,
+    url(r'^insect_photos/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/insect_photos'}),#成功昆虫病害图片
+    url(r'^insect_photos_fail/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/insect_photos_fail'}),#失败昆虫病害图片
+    url(r'^plant_photos/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/plant_photos'}),#成功植物病害图片
+    url(r'^plant_photos_fail/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/plant_photos_fail'}),#失败植物病害图片
+    url(r'^harm_base_photos/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/harm_base_photos'}),#知识库图片
+    url(r'^ce_cuser_head/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/ce_cuser_head'}),#测报员头像
+    url(r'^harm_photos/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/harm_photos'}),#接受新建页面病虫害上传的图片
+    url(r'^sexport_file/(?P<path>.*)', serve, {'document_root': '/data/yfwlw/sexport_file'}),#导出功能
+
+]

File diff suppressed because it is too large
+ 1498 - 0
apps/Pestapp/views.py


+ 0 - 0
apps/Products/__init__.py


+ 3 - 0
apps/Products/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 5 - 0
apps/Products/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class ProductsConfig(AppConfig):
+    name = 'Products'

+ 0 - 0
apps/Products/migrations/__init__.py


+ 3 - 0
apps/Products/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/Products/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 60 - 0
apps/Products/urls.py

@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+from django.conf.urls import url
+
+from . import views
+from .views import Product_Introduce,UAV,Forest_Fireproofing,Machine_Manage,Machine_List,Seed_Manage,Seed_ManageAdd,User_Manage,User_Add,\
+Crop_Manage,Crop_Add,Manure_Manage,Manure_Add,Pesticide_Manage,Pesticide_Add,Farm_Product,Farm_ProductAdd,Job_Name,Job_NameAdd,Detection,\
+Detection_Add,Project,Project_Add,Cal_Unit,Cal_UnitAdd,Trace_Batch,breed_Center,breed_Center_List,Water_Fertilizer_Ctrl
+
+
+from django.views.decorators.csrf import csrf_exempt
+from django.views.static import serve
+
+
+app_name = 'apps.Products'
+urlpatterns = [
+    url(r'^product_introduce$', Product_Introduce.as_view(), name='product_introduce'),
+    url(r'^uav$', UAV.as_view(), name='uav'),
+    url(r'^forestFireproofing$', Forest_Fireproofing.as_view(), name='forestFireproofing'),
+    url(r'^machineManage$', Machine_Manage.as_view(), name='machineManage'),
+    url(r'^machineList$', Machine_List.as_view(), name='machineList'),
+    # 种子种苗管理
+    url(r'^seed_manage$', Seed_Manage.as_view(), name='seed_manage'),
+    url(r'^seed_manageadd$', Seed_ManageAdd.as_view(), name='seed_manageadd'),
+    # 人员管理
+    url(r'^user_manage$', User_Manage.as_view(), name='user_manage'),
+    url(r'^user_add$', User_Add.as_view(), name='user_add'),
+    # 作物管理
+    url(r'^crop_manage$', Crop_Manage.as_view(), name='crop_manage'),
+    url(r'^crop_add$', Crop_Add.as_view(), name='crop_add'),
+     # 肥料管理
+    url(r'^manure_manage$', Manure_Manage.as_view(), name='manure_manage'),
+    url(r'^manure_add$', Manure_Add.as_view(), name='manure_add'),
+    # 农药管理
+    url(r'^pesticide_manage$', Pesticide_Manage.as_view(), name='pesticide_manage'),
+    url(r'^pesticide_add$', Pesticide_Add.as_view(), name='pesticide_add'),
+      # 农资供应商
+    url(r'^farm_product$', Farm_Product.as_view(), name='farm_product'),
+    url(r'^farm_productadd$', Farm_ProductAdd.as_view(), name='farm_productadd'),
+      # 作业名称
+    url(r'^job_name$', Job_Name.as_view(), name='job_name'),
+    url(r'^job_nameadd$', Job_NameAdd.as_view(), name='job_nameadd'),
+    # 检测机构
+    url(r'^detection$', Detection.as_view(), name='detection'),
+    url(r'^detection_add$', Detection_Add.as_view(), name='detection_add'),
+    # 计量单位
+    url(r'^cal_unit$', Cal_Unit.as_view(), name='cal_unit'),
+    url(r'^cal_unitadd$', Cal_UnitAdd.as_view(), name='cal_unitadd'),
+    # 项目字典
+    url(r'^project$', Project.as_view(), name='project'),
+    url(r'^project_add$', Project_Add.as_view(), name='project_add'),
+    # 溯源批次
+    url(r'^trace_batch$', Trace_Batch.as_view(), name='trace_batch'),
+    # 养殖中心
+    url(r'^breedCenter$', breed_Center.as_view(), name='breedCenter'),
+    # 养殖列表
+    url(r'^breed_center_list$', breed_Center_List.as_view(), name='breed_center_list'),
+    # 水肥控制
+    url(r'^water_fertilizer_ctrl$', Water_Fertilizer_Ctrl.as_view(), name='water_fertilizer_ctrl'),
+]

+ 234 - 0
apps/Products/views.py

@@ -0,0 +1,234 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render
+from apps.AppInfoManage.models import Equip, User_Log, MyUser 
+from apps.AppInfoManage.models import SCDdata, SCDstatus, RecentSCDdata, YBQdata, YBQstatus, QXZstatus, QXZdata, Trapstatus, Trapdata, Trapphoto, Equip_SimInfo
+from apps.AppInfoManage.models import CBDstatus, CBDdata, CBDphoto, CBDpest, CBDphoto_desc, YBQphoto, BZYstatus, BZYdata, BZYphoto, Spore_Exist, QXZswitchstatus, QXZswitchdata,\
+RecentCBDdata, QXZTimingswitch, QXZAutoswitch, Msg_Conf
+
+from itertools import chain
+
+from django.views.generic import ListView
+import json
+# from apps.AppInfoManage.common import CJSONEncoder
+from apps.EquipManage.views import CJSONEncoder
+
+from django.http.response import HttpResponse
+from django.core import serializers
+import random
+# from io import BytesIO, StringIO
+import os
+from imutils import paths
+import stat
+import time
+import datetime
+import re
+import copy
+from django.utils.decorators import method_decorator
+from django.views.decorators.csrf import csrf_exempt
+# import xlrd
+from apps.SimInfo.views import get_siminfo
+import requests
+from io import BytesIO
+import sys
+from PIL import Image
+import argparse
+import cv2
+import shutil
+import glob
+
+from apps.ReportManage.all_dict import qxz_dict, insect_dict, insect_dict_new
+
+
+# 网上商城
+class Product_Introduce(ListView):
+    def get(self, request):
+        return render(request, 'newModule/productIntroduce.html', context={})
+# 无人机
+class UAV(ListView):
+    def get(self, request):
+        return render(request, 'newModule/uav.html', context={})
+# 森林防火
+class Forest_Fireproofing(ListView):
+    def get(self, request):
+        return render(request, 'newModule/forestFireproofing.html', context={})
+# 农机管理
+class Machine_Manage(ListView):
+    def get(self, request):
+        return render(request, 'newModule/machineManage.html', context={})
+# 农机使用列表
+class Machine_List(ListView):
+    def get(self, request):
+        return render(request, 'newModule/machineUseList.html', context={})
+# 种子种苗管理
+class Seed_Manage(ListView):
+    def get(self,request):
+        return render(request, 'yield/seedManage.html', context={})
+    def post(self,request):
+        pass
+# 种子种苗管理
+class Seed_ManageAdd(ListView):
+    def get(self,request):
+        return render(request, 'yield/seedManageAdd.html', context={})
+    def post(self,request):
+        pass
+
+# 人员管理
+class User_Manage(ListView):
+    def get(self,request):
+        return render(request, 'yield/staffManage.html', context={})
+    def post(self,request):
+        pass
+# 人员新增
+class User_Add(ListView):
+    def get(self,request):
+        return render(request, 'yield/staffManageAdd.html', context={})
+    def post(self,request):
+        pass
+# 作物管理
+class Crop_Manage(ListView):
+    def get(self,request):
+        return render(request, 'yield/cropManage.html', context={})
+    def post(self,request):
+        pass
+# 作物新增
+class Crop_Add(ListView):
+    def get(self,request):
+        return render(request, 'yield/cropManageAdd.html', context={})
+    def post(self,request):
+        pass
+# 肥料字典
+class Manure_Manage(ListView):
+    def get(self,request):
+        return render(request, 'yield/manureManage.html', context={})
+    def post(self,request):
+        pass
+
+
+# 肥料新增
+class Manure_Add(ListView):
+    def get(self,request):
+        return render(request, 'yield/manureManageAdd.html', context={})
+    def post(self,request):
+        pass
+# 农药字典
+class Pesticide_Manage(ListView):
+    def get(self,request):
+        return render(request, 'yield/pesticideManage.html', context={})
+    def post(self,request):
+        pass
+
+
+# 农药新增
+class Pesticide_Add(ListView):
+    def get(self,request):
+        return render(request, 'yield/pesticideManageAdd.html', context={})
+    def post(self,request):
+        pass
+
+# 农资供应商
+class Farm_Product(ListView):
+    def get(self,request):
+        return render(request, 'yield/farmProductSupplier.html', context={})
+    def post(self,request):
+        pass
+
+
+# 农资供应商新增
+class Farm_ProductAdd(ListView):
+    def get(self,request):
+        return render(request, 'yield/farmProductSupplierAdd.html', context={})
+    def post(self,request):
+        pass
+
+# 作业名称
+class Job_Name(ListView):
+    def get(self,request):
+        return render(request, 'yield/jobName.html', context={})
+    def post(self,request):
+        pass
+
+
+
+# 作业名称新增
+class Job_NameAdd(ListView):
+    def get(self,request):
+        return render(request, 'yield/jobNameAdd.html', context={})
+    def post(self,request):
+        pass
+
+# 检测机构管理
+class Detection(ListView):
+    def get(self,request):
+        return render(request, 'yield/detectionGroup.html', context={})
+    def post(self,request):
+        pass
+
+
+
+# 检测机构新增
+class Detection_Add(ListView):
+    def get(self,request):
+        return render(request, 'yield/detectionGroupAdd.html', context={})
+    def post(self,request):
+        pass
+
+# 计量单位管理
+class Cal_Unit(ListView):
+    def get(self,request):
+        return render(request, 'yield/calculateUnit.html', context={})
+    def post(self,request):
+        pass
+
+
+
+
+# 计量单位管理新增
+class Cal_UnitAdd(ListView):
+    def get(self,request):
+        return render(request, 'yield/calculateUnitAdd.html', context={})
+    def post(self,request):
+        pass
+
+# 项目字典
+class Project(ListView):
+    def get(self,request):
+        return render(request, 'yield/projectManage.html', context={})
+    def post(self,request):
+        pass
+
+
+# 项目字典新增
+class Project_Add(ListView):
+    def get(self,request):
+        return render(request, 'yield/projectManageAdd.html', context={})
+    def post(self,request):
+        pass
+        
+# 溯源批次
+class Trace_Batch(ListView):
+    def get(self,request):
+        return render(request, 'traceCenter/trace_basic.html', context={})
+    def post(self,request):
+        pass
+        
+# 养殖中心
+class breed_Center(ListView):
+    def get(self,request):
+        return render(request, 'traceCenter/breed_Center.html', context={})
+    def post(self,request):
+         pass
+        
+# 养殖列表
+class breed_Center_List(ListView):
+    def get(self,request):
+        return render(request, 'traceCenter/breed_Center_list.html', context={})
+    def post(self,request):
+        pass
+
+# 水肥控制
+class Water_Fertilizer_Ctrl(ListView):
+    def get(self,request):
+        return render(request, 'traceCenter/water_fertilizer_ctrl.html', context={})
+    def post(self,request):
+        pass

+ 2 - 0
apps/ReportManage/__init__.py

@@ -0,0 +1,2 @@
+
+default_app_config = 'apps.ReportManage.apps.ReportmanageConfig'

+ 0 - 0
apps/ReportManage/admin.py


Some files were not shown because too many files changed in this diff