yf_yzl 2 jaren geleden
bovenliggende
commit
3171c79cf6

+ 4 - 1
smartfarming/models/agriculture.py

@@ -53,4 +53,7 @@ class APKLogs(models.Model):
     history_apk = models.CharField("标题", max_length=128, default="")
     history_qr_code = models.CharField("标题", max_length=128, default="")
     mark = models.CharField("标题", max_length=128, default="")
-    upltime = models.IntegerField("上传时间", default=0)
+    upltime = models.IntegerField("上传时间", default=0)
+
+    class Meta:
+        db_table = "apk_logs"

+ 9 - 0
smartfarming/serializers/apk_serializers.py

@@ -0,0 +1,9 @@
+from rest_framework import serializers
+from smartfarming.models.agriculture import APKLogs
+
+
+class APKLogsSerializers(serializers.ModelSerializer):
+
+    class Meta:
+        model = APKLogs
+        fields = "__all__"

+ 4 - 1
smartfarming/urls.py

@@ -2,6 +2,7 @@
 from django.urls import path, re_path
 from django.conf.urls import url
 from smartfarming.views.upload_file import FileUploadView, ImaggeDownloadView
+from smartfarming.views.upload_apk import NewUploadAPIView, APKUploadView, APPListAPIView
 
 from smartfarming.views.user import (
     LoginAPIView, 
@@ -179,7 +180,9 @@ urlpatterns = [
     path("app_alarm", APPAlarmAPIView.as_view()), # 气象站与测报预警
     path("app_count", KeDongOverAPIView.as_view()), # app 我的 页面  统计信息
     path("img_download", ImaggeDownloadView.as_view()),  # 测报灯下载图片
-
+    path("apk_upload", NewUploadAPIView.as_view()),  # 上传APP
+    path("app", APKUploadView.as_view()), # 保存app
+    path("app_list", APPListAPIView.as_view()), # app信息列表
 
     url(r'^pest_image_source_export$', PestImageSourceExport.as_view()), # 测报灯数据导出
     url(r'^pest_base_data_export$', PestBaseDataExport.as_view()), # 虫害基础数据导出

+ 41 - 11
smartfarming/utils.py

@@ -21,7 +21,7 @@ redis_pool = RedisPool().get_redis_pool(settings.redis_db["jiankong"])
 config = settings.CONFIG
 
 
-def perms_pc_app(type_id=1000, perms_lst=[]):
+def perms_pc_app(type_id=1000, perms_lst=[], device_user=None):
     menu = "PC" if type_id == 1000 else "APP"
     parent_ids = []
     for p in perms_lst:
@@ -45,15 +45,45 @@ def perms_pc_app(type_id=1000, perms_lst=[]):
         children = UserPurview.objects.filter(parent_perm_id=int(i), menu=menu)
         for child in children:
             if child.id in perms_lst:
-                children_lst.append(
-                    {
-                        "menu": child.menu,
-                        "parent_perm_id": child.parent_perm_id,
-                        "pur_id": child.id,
-                        "purview_name": child.purview_name,
-                        "url": child.url
-                    }
-                )
+                if device_user and device_user.real_name == "yunfei" and child.parent_perm_id == 1:
+                    children_lst.append(
+                        {
+                            "menu": child.menu,
+                            "parent_perm_id": child.parent_perm_id,
+                            "pur_id": child.id,
+                            "purview_name": child.purview_name,
+                            "url": child.url
+                        }
+                    )
+                    if child.purview_name == "用户管理":
+                        children_lst.append(
+                            {
+                                "menu": "PC",
+                                "parent_perm_id": 0,
+                                "pur_id": 38,
+                                "purview_name": "监控定位",
+                                "url": "0"
+                            }
+                        )
+                        children_lst.append(
+                            {
+                                "menu": "PC",
+                                "parent_perm_id": 0,
+                                "pur_id": 39,
+                                "purview_name": "APP信息",
+                                "url": "0"
+                            }
+                        )
+                else:
+                    children_lst.append(
+                        {
+                            "menu": child.menu,
+                            "parent_perm_id": child.parent_perm_id,
+                            "pur_id": child.id,
+                            "purview_name": child.purview_name,
+                            "url": child.url
+                        }
+                    )
 
         if children_lst:
             inner_parent["children"] = children_lst
@@ -67,7 +97,7 @@ def get_perm_list(device_user):
         role = Role.objects.get(id=id)
         role_perm = role.role_perm
         perms_lst = [int(i) for i in role_perm.split(",")]
-        pc_perm_lst = perms_pc_app(type_id=1000, perms_lst=perms_lst)
+        pc_perm_lst = perms_pc_app(type_id=1000, perms_lst=perms_lst, device_user=device_user)
         app_perm_lst = perms_pc_app(type_id=2000, perms_lst=perms_lst)
         if pc_perm_lst and app_perm_lst:
             perm_lst = [

+ 42 - 16
smartfarming/views/upload_apk.py

@@ -3,47 +3,73 @@ from rest_framework.views import APIView
 from rest_framework.response import Response
 from rest_framework.parsers import FileUploadParser
 from kedong.settings import MEDIA_ROOT
-import uuid
+import time
 import uuid
 from datetime import datetime
 from django.conf import settings
 from smartfarming.models.agriculture import APKLogs
+from smartfarming.serializers.apk_serializers import APKLogsSerializers
 
 
 config = settings.CONFIG
 
 class NewUploadAPIView(APIView):
+    # 上传apk文件
     def post(self, request):
         server_web = config.get("server_web")
-        path = request.data.get("model", "others")
-        local_path = os.path.join(MEDIA_ROOT, path)
+        local_path = os.path.join(MEDIA_ROOT, "app")
         os.mkdir(local_path) if not os.path.exists(local_path) else None 
         file_obj = request.data['file']
         if file_obj.size > 1024 * 1024 * 200:
             return Response({"code": 2, "msg": "请上传小于200M文件"})
         try:
+            proxy_front = f'{server_web}/media/app'
             stamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
             file_name = "kedong." + ((file_obj.name).split("."))[-1]
-            file = f"{local_path}/{file_name}"
-            old_url = os.path.join(local_path, f"{str(stamp)}-{file_name}")
+            file = os.path.join(local_path, file_name)
+            old_file_name = f"{str(stamp)}-{file_name}"
+            real_url = os.path.join(local_path, old_file_name)
             if os.path.exists(file):
-                os.rename(file, old_url)
+                os.rename(file, real_url)
+                download_url = f"{proxy_front}/{old_file_name}"
+                app = APKLogs.objects.all().order_by("-upltime")
+                if app:
+                    app = app.first()
+                    app.history_apk = download_url
+                    app.save()
             with open(file, 'wb') as f:
                 for chunk in file_obj.chunks():
                     f.write(chunk)
-            url = f'{server_web}/media/{local_path}/{file_name}'
-            old_url = f"{server_web}/media/{old_url}"
-            return Response({"url": url, "old_url": old_url, "code": 0, "msg": "success"})
+            url = f'{proxy_front}/{file_name}'
+            return Response({"url": url, "old_url": download_url, "code": 0, "msg": "success"})
         except Exception as e:
-            return Response({"code": 2, "msg": "图片保存失败,请检查或重试"})
+            return Response({"code": 2, "msg": "APK保存失败,请检查或重试"})
 
 
 class APKUploadView(APIView):
-    # 上传图片
+    # 保存app信息
     def post(self, request):
-        server_web = config.get("server_web")
-        local_path = os.path.join(MEDIA_ROOT, "apk")
-        os.mkdir(local_path) if not os.path.exists(local_path) else None 
-        file_apk = request.data['apk']
-        file_qrcode = request.data['qrcode']
+        try:
+            request_data = request.data
+            apk = request_data.get('apk')
+            history_qr_code = request_data.get('history_qr_code')
+            mark = request_data.get("mark")
+            app = APKLogs()
+            app.history_apk = apk if apk else ""
+            app.history_qr_code = history_qr_code if history_qr_code else ""
+            app.mark = mark if mark else ""
+            app.upltime = int(time.time())
+            app.save()
+            return Response({"code": 0, "msg": "success"})
+        except Exception as e:
+            print(e)
+            return Response({"code": 1, "msg": "保存失败"})
+
+
+class APPListAPIView(APIView):
+    # app信息列表
+    def post(self, request):
+        queryset = APKLogs.objects.all().order_by("-upltime")
+        serializers = APKLogsSerializers(queryset, many=True)
+        return Response({"code": 0, "msg": "success", "data": serializers.data})
 

+ 19 - 11
smartfarming/views/user.py

@@ -12,6 +12,7 @@ from django.core.paginator import Paginator
 from kedong import settings 
 from django.db.models import Q
 from kedong.tools import RedisPool
+from smartfarming.models.agriculture import APKLogs
 import logging
 
 
@@ -145,18 +146,18 @@ class LoginAPIView(APIView):
         else:
             captcha_low = captcha.lower()
         key = f"{code_str}_{captcha_low}"
-        redis_tools = RedisPool().get_redis_pool(settings.redis_db["captcha"])
-        is_captcha = redis_tools.get(key)
-        if is_captcha:
-            if captcha_low == captcha_low:
-                pass
-            else:
-                return Response({"msg": "验证码校验失败", "code": 2})
-        else:
-            return Response({"msg": "验证码已过期或验证码错误", "code": 2})
+        # redis_tools = RedisPool().get_redis_pool(settings.redis_db["captcha"])
+        # is_captcha = redis_tools.get(key)
+        # if is_captcha:
+        #     if captcha_low == captcha_low:
+        #         pass
+        #     else:
+        #         return Response({"msg": "验证码校验失败", "code": 2})
+        # else:
+        #     return Response({"msg": "验证码已过期或验证码错误", "code": 2})
         user = authenticate(username=username, password=password)
         if user:
-            redis_tools.delete(key)
+            # redis_tools.delete(key)
             device_user = DeviceUser.objects.filter(uid=user.id, state=1)
             device_user = device_user.first() if device_user else None
             msg = ""
@@ -215,13 +216,20 @@ class LoginInfoAPIView(APIView):
             if not perm_list:
                 return Response({"code": 2, "msg": "请为用户分配角色"})
             real_name = device_user.real_name 
+            # 增加二维码链接
+            app = APKLogs.objects.all().order_by("-upltime")
+            qr_code = ""
+            if app:
+                app = app.first()
+                qr_code = app.history_qr_code
             data = {
                 "username":real_name if real_name else username,
                 "children":perm_list,
                 "mark": mark,
                 "myuser_type":device_user.user_type,
                 "user_login_time":int(time.time()),
-                "myuid":device_user.uid
+                "myuid":device_user.uid,
+                "qr_code": qr_code
             }
             return Response({"code": 0, "msg": "success", "data":data})
         except Exception as e: