Explorar o código

增加测报灯图片统计

yf_yzl %!s(int64=2) %!d(string=hai) anos
pai
achega
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))
                 card_queryset = self.get_queryset().filter(simId=str(sim).strip())
                 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("")

+ 2 - 1
bigdataAPI/settings.py

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

+ 3 - 1
bigdataAPI/urls.py

@@ -16,6 +16,7 @@ Including another URLconf
 from django.contrib import admin
 from django.urls import path, include
 from apps.Weather.views import GetWeather, TestAPI
+from apps.DeviceCount.views import CbdPhotoCount
 
 urlpatterns = [
     path('admin/', admin.site.urls),
@@ -25,5 +26,6 @@ urlpatterns = [
     path('pestanalysis/', include('apps.PestAnalysis.urls')),
     path('qxzconfig/', include('apps.QxzApp.urls')),
     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": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": 3306,
 		"user": "root",
 		"pwd": "yfkj@6020"
 	},
 	"redis": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": "56379",
 		"password": "yf6021",
         "url": "redis://:yf6021@127.0.0.1:56379/12"
 	},
 	"bigdatamysql": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": 3306,
 		"user": "root",
 		"pwd": "yfkj@6020"
 	},
 	"bigdatamongo": {
-		"host": "localhost",
+		"host": "114.55.0.7",
 		"port": 27017,
 		"user": "root",
 		"pwd": "yfkj@6020"