Browse Source

更新流量程序

林轩 1 year atrás
parent
commit
b5cd6f3bb6
3 changed files with 233 additions and 8 deletions
  1. 20 0
      .vscode/launch.json
  2. 16 8
      apps/IOTCard/views.py
  3. 197 0
      utils/utils.py

+ 20 - 0
.vscode/launch.json

@@ -0,0 +1,20 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Python: Django",
+            "type": "python",
+            "request": "launch",
+            "program": "${workspaceFolder}\\manage.py",
+            "args": [
+                "runserver",
+                "0.0.0.0:10001"
+            ],
+            "django": true,
+            "justMyCode": true
+        }
+    ]
+}

+ 16 - 8
apps/IOTCard/views.py

@@ -16,7 +16,7 @@ from django.utils.encoding import escape_uri_path
 from .serializers import PlatSimInfoSerializer
 from .models import PlatSimInfo
 from utils.paginations import CustomPagination
-from utils.utils import DeviceInfoUtils, GetSIMInfo
+from utils.utils import DeviceInfoUtils, GetSIMInfo, GetDashujuSiqingDeviceInfo
 
 
 # Create your views here.
@@ -28,6 +28,11 @@ def time_dif(checkdatetime):
     timedif = nowdatetime - checkdatetime
     return timedif.days
 
+def time_dif_new(stamp):
+    nowdatetime = datetime.datetime.now()
+    check = datetime.datetime.fromtimestamp(stamp)
+    timedif = nowdatetime - check
+    return timedif.days
 
 class PlatformIOTCardViewSet(viewsets.ModelViewSet):
     serializer_class = PlatSimInfoSerializer
@@ -267,6 +272,7 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
         simtype = request.data.get("simtype")
         renew_file = request.FILES.get("file")
         file_dataframe = pd.read_excel(renew_file)
+        dashuju_siqing = GetDashujuSiqingDeviceInfo()
         if simtype == "1":  # 合宙卡
             save_data = dict(ICCID=[],续费价格=[],是否需要充值=[],设备ID=[],所属平台=[],设备类型=[],任务单号=[],所属用户=[],设备状态=[],设备位置=[])
             sim_list = list(file_dataframe["ICCID"])
@@ -280,9 +286,10 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
                     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)
+                    # device_info_list = DeviceInfoUtils().get_equip_list(d_id=deviceId, isfullId=1)
+                    device_info_list = dashuju_siqing.get_together(device_id=deviceId)
                     if device_info_list:
-                        device_info = device_info_list[0]
+                        device_info = device_info_list
                         uptime = device_info["uptime"]
                         save_data["所属平台"].append(device_info["plat"])
                         save_data["设备类型"].append(device_info["device_type"])
@@ -313,7 +320,7 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
                     usage_value = ""
                 if usage_value == 0 or usage_value == "":
                     if uptime:
-                        time_diff_days = time_dif(uptime)
+                        time_diff_days = time_dif_new(uptime)
                         if time_diff_days > 270:
                             save_data["是否需要充值"].append("否")
                         else:
@@ -332,13 +339,14 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
                         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)
+                        # device_info_list = DeviceInfoUtils().get_equip_list(d_id=deviceId, isfullId=1)
+                        device_info_list = dashuju_siqing.get_together(device_id=deviceId)
                         if device_info_list:
-                            device_info = device_info_list[0]
+                            device_info = device_info_list
                             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["owner_user"])
                             save_data["设备状态"].append(device_info["status"])
                             save_data["设备位置"].append(device_info["location"])
                         else:
@@ -373,7 +381,7 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
                     save_data["是否需要充值"].append("是")
                 else:
                     save_data["是否需要充值"].append("否")
-
+        dashuju_siqing.conn.close()
         df = pd.DataFrame(data=save_data)
         save_filename = str(uuid.uuid4()) + ".xlsx"
         now_dir = os.path.dirname(__file__)

+ 197 - 0
utils/utils.py

@@ -1,9 +1,13 @@
 import json
 import hashlib
 import time
+import traceback
 import requests
 from requests.auth import HTTPBasicAuth
 import asyncio
+import pymongo
+import pymysql
+from urllib import parse
 
 
 class DeviceInfoUtils(object):
@@ -55,6 +59,199 @@ class DeviceInfoUtils(object):
         return data
 
 
+class GetDashujuSiqingDeviceInfo(object):
+
+    def __init__(self):
+        # 大数据平台mongo连接 
+        user = parse.quote_plus("root")
+        passwd = parse.quote_plus("yfkj@6020")
+        da_shuju = "1270.0.01"
+        si_qing = "172.16.220.3"
+        myclient = pymongo.MongoClient("mongodb://{0}:{1}@{2}:57017/".format(user,passwd, da_shuju))
+        db = myclient.smartfarming
+        self.sa_device = db.sa_device
+        sa_device_type = db.sa_device_type 
+        device_tps = sa_device_type.find({}, {"_id": 0, "id": 1, "type_name": 1})
+        self.device_tps = {str(i.get("id")): i.get("type_name") for i in list(device_tps)}
+        # 大数据平台查询用户id与real_name
+        da_conn = pymysql.connect(
+            host=da_shuju,
+            port=61882,
+            user='root',
+            password='yfkj@6020',
+            database='smartfarming'
+        )
+        cursor = da_conn.cursor()
+        cursor.execute("select uid, real_name from sa_device_user")
+        result = cursor.fetchall()
+        self.rk = {str(i[0]): i[1] for i in result}
+        cursor.close()
+        da_conn.close()
+        # 四情 mysql 连接
+        self.conn = pymysql.connect(
+            host=si_qing,
+            port=3306,
+            user='yfwlw',
+            password='sql_yfkj_6019',
+            database='yfwlw'
+        )
+        si_qing_cursor = self.conn.cursor()
+        si_qing_cursor.execute("select id, username from AppInfoManage_myuser")
+        si_result = si_qing_cursor.fetchall()
+        self.si_rk = {str(i[0]): i[1] for i in si_result}
+        si_qing_cursor.execute("select type_id, type_name from AppInfoManage_equip_type")
+        si_device_type = si_qing_cursor.fetchall()
+        self.si_device_type = {str(i[0]): i[1] for i in si_device_type}
+        si_qing_cursor.close()
+
+    def get_dashuju(self, device_id):
+        # 大数据查询设备信息
+        result = self.sa_device.find_one(
+            {"device_id": device_id}, 
+            { 
+                'device_type_id': 1, 
+                'salesman_task_number': 1, 
+                'owner_uid': 1, 
+                'device_status': 1, 
+                'province': 1, 
+                'city': 1, 
+                'district': 1, 
+                'uptime': 1, 
+                'device_id': 1,
+                'user_dealer': 1,
+                '_id': 0
+            }
+        )
+        if not result:
+            return {}
+        if result.get("user_dealer"):
+            result["owner_user"] = self.rk.get(str(result.get("user_dealer")))
+        elif result.get("owner_uid"):
+            result["owner_user"] = self.rk.get(str(result.get("owner_uid")))
+        else:
+            result["owner_user"] = "未分配"
+        # 排除指定设备类型状态判断
+        if result.get("device_type_id") in [11, 13, 19, 20]:
+            result["status"] = "未知"
+        else:
+            if result.get("device_status") == 1:
+                result["status"] = "在线"
+            else:
+                result["status"] = "离线"
+        result["device_type"] = self.device_tps.get(str(result.get("device_type_id")), "-")
+        result["plat"] = "大数据平台"
+        result["order_id"] = result.get("salesman_task_number") if result.get("salesman_task_number") !="0" else "——"
+        if result.get("province"):
+            result["location"] = result.get("province") + "," + result.get("city") + "," + result.get("district")
+        else:
+            result["location"] = "暂无定位"
+        return result
+    def get_siqing(self, device_id):
+        cursor = self.conn.cursor()
+        cursor.execute("select equip_id, equip_user_id, equip_type_id, equip_city from AppInfoManage_equip where equip_id = %s", (device_id, ))
+        cursor_result = cursor.fetchone()
+        if not cursor_result:
+            return {}
+        columns = [desc[0] for desc in cursor.description]
+        result = dict(zip(columns, cursor_result))
+        result["plat"] = "四情平台"
+        if result.get("equip_user_id"):
+            result["owner_user"] = self.si_rk.get(str(result.get("equip_user_id")))
+        else:
+            result["owner_user"] = "未分配"
+        equip_type_id = result.get("equip_type_id")
+        if equip_type_id == 0:
+            status = "未知"
+            uptime = 0
+        elif equip_type_id == 2:
+            cursor.execute("select upl_time, is_online from AppInfoManage_scdstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 3:
+            cursor.execute("select upl_time, is_online from AppInfoManage_cbdstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 4:
+            cursor.execute("select upl_time, is_online from AppInfoManage_ybqstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 5:
+            cursor.execute("select upl_time, is_online from AppInfoManage_qxzstatus_new where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 6:
+            cursor.execute("select upl_time, is_online from AppInfoManage_jkdata where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 7:
+            cursor.execute("select upl_time, is_online from AppInfoManage_bzystatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 8:
+            cursor.execute("select upl_time, is_online from AppInfoManage_trapstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 9:
+            cursor.execute("select upl_time, is_online from AppInfoManage_tccbstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 10:
+            cursor.execute("select upl_time, is_online from AppInfoManage_rtustatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 11:
+            cursor.execute("select upl_time, is_online from AppInfoManage_wheatstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 15:
+            cursor.execute("select upl_time, is_online from AppInfoManage_wheatstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        elif equip_type_id == 16:
+            cursor.execute("select upl_time, is_online from AppInfoManage_wheatstatus where equip_id_id = %s", (device_id, ))
+            scd_status = cursor.fetchone()
+            uptime = int((scd_status[0]).timestamp())
+            status = "在线" if scd_status[1] == "1" else "离线"
+        result["uptime"] = uptime
+        result["status"] = status
+        result["device_type"] = self.si_device_type.get(str(equip_type_id))
+        if result.get("equip_city") and result.get("equip_city") != '0':
+            result["location"] = result.get("equip_city")
+        else:
+            result["location"] = "暂无定位"
+        result["order_id"] = "——"
+        return result
+    
+    def get_together(self, device_id):
+        try:
+            dashuju = self.get_dashuju(device_id)
+            siqing = self.get_siqing(device_id)
+            if dashuju and siqing:
+                if dashuju.get("uptime") > siqing.get("uptime"):
+                    return dashuju
+                else:
+                    return siqing
+            elif dashuju and (not siqing):
+                return dashuju
+            elif (not dashuju) and siqing:
+                return siqing
+            else:
+                return {}
+        except Exception as e:
+            traceback.print_exc()
+
+
 class GetSIMInfo(object):
     """
     自定义获取SIM卡对应卡商及数据