Browse Source

增加测报灯图片统计

yf_yzl 2 năm trước cách đây
mục cha
commit
234f7ff295

+ 0 - 0
apps/DeviceCount/__init__.py


+ 3 - 0
apps/DeviceCount/admin.py

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

+ 5 - 0
apps/DeviceCount/apps.py

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

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


+ 19 - 0
apps/DeviceCount/models.py

@@ -0,0 +1,19 @@
+from django.db import models
+
+# Create your models here.
+
+
+# 统计测报灯设备每天源图片增长量,A识别图片量,B识别图片量,C识别图片量
+class CbdPhoto(models.Model):
+
+    id = models.AutoField("ID", primary_key=True)
+    day = models.CharField("年月日", max_length=11, blank=True, null=True)
+    device_id = models.CharField("设备ID", max_length=64, blank=True, null=True)
+    org_photo_ct = models.PositiveIntegerField("源图片数量", default=0)
+    discern_a_ct = models.PositiveIntegerField("A识别数量", default=0)
+    discern_b_ct = models.PositiveIntegerField("B识别数量", default=0)
+    discern_c_ct = models.PositiveIntegerField("C识别数量", default=0)
+
+    class Meta:
+        db_table = "ct_cbd_photo"
+    

+ 10 - 0
apps/DeviceCount/serializers.py

@@ -0,0 +1,10 @@
+# coding=utf-8
+from rest_framework import serializers
+from apps.DeviceCount.models import CbdPhoto
+
+
+class CbdPhotoSerializers(serializers.ModelSerializer):
+
+    class Meta:
+        model = CbdPhoto
+        fields = "__all__"

+ 3 - 0
apps/DeviceCount/tests.py

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

+ 13 - 0
apps/DeviceCount/views.py

@@ -0,0 +1,13 @@
+from django.shortcuts import render
+from rest_framework.views import APIView
+from rest_framework.views import Response
+from apps.DeviceCount.models import CbdPhoto
+from apps.DeviceCount.serializers import CbdPhotoSerializers
+
+
+class CbdPhotoCount(APIView):
+
+    def post(self, request):
+        query = CbdPhoto.objects.all().order_by("-id")
+        serializer = CbdPhotoSerializers(query, many=True)
+        return Response({"data": serializer.data}, status=200)

+ 22 - 13
apps/IOTCard/views.py

@@ -328,19 +328,28 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
                 save_data["ICCID"].append(str(sim))
                 save_data["ICCID"].append(str(sim))
                 card_queryset = self.get_queryset().filter(simId=str(sim).strip())
                 card_queryset = self.get_queryset().filter(simId=str(sim).strip())
                 if card_queryset.exists():
                 if card_queryset.exists():
-                    card_obj = card_queryset.last()
-                    deviceId = card_obj.deviceId
-                    save_data["设备ID"].append(deviceId)
-                    device_info_list = DeviceInfoUtils().get_equip_list(d_id=deviceId, isfullId=1)
-                    if device_info_list:
-                        device_info = device_info_list[0]
-                        save_data["所属平台"].append(device_info["plat"])
-                        save_data["设备类型"].append(device_info["device_type"])
-                        save_data["任务单号"].append(device_info["order_id"])
-                        save_data["所属用户"].append(device_info["owen_user"])
-                        save_data["设备状态"].append(device_info["status"])
-                        save_data["设备位置"].append(device_info["location"])
-                    else:
+                    try:
+                        card_obj = card_queryset.last()
+                        deviceId = card_obj.deviceId
+                        save_data["设备ID"].append(deviceId)
+                        device_info_list = DeviceInfoUtils().get_equip_list(d_id=deviceId, isfullId=1)
+                        if device_info_list:
+                            device_info = device_info_list[0]
+                            save_data["所属平台"].append(device_info["plat"])
+                            save_data["设备类型"].append(device_info["device_type"])
+                            save_data["任务单号"].append(device_info["order_id"])
+                            save_data["所属用户"].append(device_info["owen_user"])
+                            save_data["设备状态"].append(device_info["status"])
+                            save_data["设备位置"].append(device_info["location"])
+                        else:
+                            save_data["所属平台"].append("")
+                            save_data["设备类型"].append("")
+                            save_data["任务单号"].append("")
+                            save_data["所属用户"].append("")
+                            save_data["设备状态"].append("")
+                            save_data["设备位置"].append("")
+                    except Exception as e:
+                        save_data["设备ID"].append("")
                         save_data["所属平台"].append("")
                         save_data["所属平台"].append("")
                         save_data["设备类型"].append("")
                         save_data["设备类型"].append("")
                         save_data["任务单号"].append("")
                         save_data["任务单号"].append("")

+ 2 - 1
bigdataAPI/settings.py

@@ -58,7 +58,8 @@ INSTALLED_APPS = [
     'apps.PestAnalysis',
     'apps.PestAnalysis',
     'apps.Equipment',
     'apps.Equipment',
     'apps.QxzApp',
     'apps.QxzApp',
-    'apps.Weather'
+    'apps.Weather',
+    'apps.DeviceCount'
 ]
 ]
 
 
 MIDDLEWARE = [
 MIDDLEWARE = [

+ 3 - 1
bigdataAPI/urls.py

@@ -16,6 +16,7 @@ Including another URLconf
 from django.contrib import admin
 from django.contrib import admin
 from django.urls import path, include
 from django.urls import path, include
 from apps.Weather.views import GetWeather, TestAPI
 from apps.Weather.views import GetWeather, TestAPI
+from apps.DeviceCount.views import CbdPhotoCount
 
 
 urlpatterns = [
 urlpatterns = [
     path('admin/', admin.site.urls),
     path('admin/', admin.site.urls),
@@ -25,5 +26,6 @@ urlpatterns = [
     path('pestanalysis/', include('apps.PestAnalysis.urls')),
     path('pestanalysis/', include('apps.PestAnalysis.urls')),
     path('qxzconfig/', include('apps.QxzApp.urls')),
     path('qxzconfig/', include('apps.QxzApp.urls')),
     path("yf_weather", GetWeather.as_view(), name="weather"),
     path("yf_weather", GetWeather.as_view(), name="weather"),
-    path("test", TestAPI.as_view(), name="test")
+    path("test", TestAPI.as_view(), name="test"),
+    path("cbd_count/", CbdPhotoCount.as_view(), name="cbd_count")
 ]
 ]

+ 85 - 0
crond_script/ct_cbd.py

@@ -0,0 +1,85 @@
+# coding=utf-8
+import os 
+import sys
+import time 
+import datetime
+import pymongo
+from urllib import parse
+import django
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+sys.path.append(BASE_DIR)
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings')
+django.setup()
+from apps.DeviceCount.models import CbdPhoto
+
+user = parse.quote_plus("root")
+passwd = parse.quote_plus("yfkj@6020")
+# 账号密码方式连接MongoDB | "mongodb://用户名:密码@公网ip:端口/"
+myclient = pymongo.MongoClient("mongodb://{0}:{1}@8.136.98.49:57017/".format(user,passwd))
+db = myclient.smartfarming
+device = db.sa_device
+cbdphoto_a_collection = db.sa_device_cbdphoto
+cbdphoto_b_collection = db.sa_device_cbdphoto
+cbdphoto_c_collection = db.sa_device_cbdphoto
+
+
+
+def main():
+    now = time.time()
+    # 过去 16.5 小时间戳
+    last = int(now) - 16.5 * 3600
+    date_format = datetime.datetime.fromtimestamp(now).strftime("%Y-%m-%d")
+    query = [
+        {
+            "$match": {
+                "addtime":{
+                    "$gte": last
+                }
+                
+            }
+        },
+        {
+            "$group": {
+                "_id": "$device_id",
+                "count": {"$sum": 1}
+            }
+        },
+        {
+            "$sort": {"count": -1}
+        }
+        ,
+        {
+            "$match": {
+                "count": {
+                    "$gte": 100
+                }
+            }
+        }
+    ]
+    a_result = cbdphoto_a_collection.aggregate(query)
+    a_result_lst = list(a_result)
+    ids = [int(i.get("_id")) for i in a_result_lst]
+    devices = device.find({"id": {"$in": ids}}, {"device_id": 1, "id": 1, "_id": 0})
+    id_de = {
+        str(i.get("id")): i.get("device_id")
+        for i in list(devices)
+    }
+    for k in a_result_lst:
+        id = k.get("_id")
+        org_photo_ct = k.get("count")
+        device_id = id_de.get(id)
+        cbd_photo, is_created = CbdPhoto.objects.get_or_create(
+            day = date_format,
+            device_id = device_id,
+            defaults={
+                "day": date_format,
+                "device_id": device_id,
+                "org_photo_ct": org_photo_ct
+            }
+        )
+        print(cbd_photo, is_created)
+    myclient.close()
+
+
+if __name__ == "__main__":
+    main()

+ 4 - 4
test.json

@@ -1,24 +1,24 @@
 {
 {
 	"mysql": {
 	"mysql": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": 3306,
 		"port": 3306,
 		"user": "root",
 		"user": "root",
 		"pwd": "yfkj@6020"
 		"pwd": "yfkj@6020"
 	},
 	},
 	"redis": {
 	"redis": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": "56379",
 		"port": "56379",
 		"password": "yf6021",
 		"password": "yf6021",
         "url": "redis://:yf6021@127.0.0.1:56379/12"
         "url": "redis://:yf6021@127.0.0.1:56379/12"
 	},
 	},
 	"bigdatamysql": {
 	"bigdatamysql": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": 3306,
 		"port": 3306,
 		"user": "root",
 		"user": "root",
 		"pwd": "yfkj@6020"
 		"pwd": "yfkj@6020"
 	},
 	},
 	"bigdatamongo": {
 	"bigdatamongo": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": 27017,
 		"port": 27017,
 		"user": "root",
 		"user": "root",
 		"pwd": "yfkj@6020"
 		"pwd": "yfkj@6020"