Procházet zdrojové kódy

物联网卡功能调整,设备搜索使用内网查询,提升速度测试

yf_fyh před 3 roky
rodič
revize
338fd4678d
4 změnil soubory, kde provedl 413 přidání a 25 odebrání
  1. 6 6
      apps/IOTCard/views.py
  2. 390 0
      crond_script/sim_info.py
  3. binární
      requirements.txt
  4. 17 19
      utils/utils.py

+ 6 - 6
apps/IOTCard/views.py

@@ -17,7 +17,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 get_equip_list, Get_SIM_info
+from utils.utils import get_equip_list, GetSIMInfo
 
 
 # Create your views here.
@@ -33,7 +33,7 @@ def time_dif(checkdatetime):
 class PlatformIOTCardViewSet(viewsets.ModelViewSet):
     serializer_class = PlatSimInfoSerializer
     pagination_class = CustomPagination
-    queryset = PlatSimInfo.objects.all().order_by("expiry_date")
+    queryset = PlatSimInfo.objects.all().order_by("-expiry_date")
 
     def list(self, request, *args, **kwargs):
         device_type = request.query_params.get("device_type")
@@ -92,7 +92,7 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
         requests.post(url="http://www.yfzhwlw.com/equip_simiccid", data={"e_id": device_id, "iccid": simId}, timeout=10)
         requests.post(url="http://127.0.0.1:8002/api/api_gateway?method=forecast.send_control.device_sim",
                       data={"device_id": device_id, "iccid": simId, "type": "change"}, timeout=10)
-        sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = Get_SIM_info(
+        sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = GetSIMInfo(
             simId).get_sim_info()
         request_data = {
             "simId": simId,
@@ -119,7 +119,7 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
         instance = self.get_object()
         if req == "upgrade":
             iccid = instance.simId
-            sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = Get_SIM_info(
+            sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = GetSIMInfo(
                 iccid).get_sim_info()
             update_data = {
                 "sim_operators": sim_operators,
@@ -146,7 +146,7 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
                               data={"device_id": deviceId, "iccid": simId, "type": "change"}, timeout=10)
             except:
                 pass
-            sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = Get_SIM_info(
+            sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = GetSIMInfo(
                 simId).get_sim_info()
             update_data = {
                 "simId": simId,
@@ -334,7 +334,7 @@ class PlatformIOTCardViewSet(viewsets.ModelViewSet):
     def inquiries(self, request):
         iccid = request.data.get("iccid")
         if iccid:
-            sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = Get_SIM_info(
+            sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = GetSIMInfo(
                 iccid).get_sim_info()
             data = {
                 "simId": iccid,

+ 390 - 0
crond_script/sim_info.py

@@ -0,0 +1,390 @@
+import os
+import django
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings')
+django.setup()
+
+import pymysql
+import pymongo
+import ast
+import datetime
+from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
+
+from django.conf import settings
+from apps.IOTCard.models import PlatSimInfo
+
+from utils.utils import GetSIMInfo, get_equip_list
+
+
+class SIMUpdate(object):
+    def __init__(self,deviceId,iccid,device_type,platform) -> None:
+        self.deviceId = deviceId
+        self.iccid = iccid
+        self.device_type = device_type
+        self.platform = platform
+
+    def zhuban_sim(self):
+        """更新主板卡,即设备读取卡"""
+        if self.sim_verify() == False:
+            return
+        self.__update(input_type=1)
+        
+    def photo_sim(self):
+        """更新图片卡,即人为录入卡"""
+        if self.sim_verify() == False:
+            return
+        self.__update(input_type=2)
+
+    def sim_verify(self):
+        """卡号校验"""
+        try:
+            card_value = int(self.iccid)
+        except:
+            card_value = 1
+        if self.iccid and self.iccid.startswith("12345") == False and (len(self.iccid) > 18 and len(self.iccid) <= 20) and card_value != 0:
+            return True
+        else:
+            return False
+
+    def __update(self,input_type):
+        sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date = GetSIMInfo(self.iccid).get_sim_info()
+        sim_query = PlatSimInfo.objects.filter(deviceId=self.deviceId,input_type=input_type)
+        if sim_query:
+            sim_obj = sim_query[0]
+            sim_obj.simId = self.iccid
+            sim_obj.sim_operators = sim_operators  
+            sim_obj.platform = self.platform
+            sim_obj.account_status = account_status
+            sim_obj.active_date = active_date
+            sim_obj.data_plan = data_plan
+            sim_obj.data_usage = data_usage
+            sim_obj.data_balance = data_balance
+            sim_obj.expiry_date = expiry_date
+            sim_obj.upl_time = datetime.datetime.now()
+            sim_obj.save()
+        else:
+            PlatSimInfo.objects.create(
+                simId = self.iccid,
+                sim_operators = sim_operators,
+                input_type = input_type,
+                deviceId = self.deviceId,
+                device_type = self.device_type,
+                platform = self.platform,
+                account_status = account_status,
+                active_date = active_date,
+                data_plan = data_plan,
+                data_usage = data_usage,
+                data_balance = data_balance,
+                expiry_date = expiry_date
+            )
+
+
+class SQ_SIMUpdate(object):
+    def __init__(self) -> None:
+        self.sq_config = {
+            'host': '172.16.220.3',
+            'port': 3306,
+            'user': 'yfwlw',
+            'password': 'sql_yfkj_6019',
+            'db': 'yfwlw',
+            'charset': 'utf8mb4',
+            'cursorclass': pymysql.cursors.DictCursor,
+        }
+        self.connection = pymysql.connect(**self.sq_config)
+        self.cursor = self.connection.cursor()
+
+    def sql_ping(self):
+        try:
+            self.connection.ping()
+        except:
+            self.connection = pymysql.connect(**self.sq_config)
+            self.cursor = self.connection.cursor()
+
+    def scd_sim(self):
+        self.sql_ping()
+        self.cursor.execute("SELECT equip_id_id,scd_status FROM AppInfoManage_scdstatus")
+        scd_cursor = self.cursor.fetchall()
+        for i in scd_cursor:
+            device_id = i["equip_id_id"]
+            scd_status = i["scd_status"]
+            equip_status = ast.literal_eval(scd_status)
+            iccid = equip_status.get("iccid","")
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="四情平台":
+                SIMUpdate(deviceId=device_id,iccid=iccid,device_type="杀虫灯",platform=1).zhuban_sim()
+    
+    def cbd_sim(self):
+        self.sql_ping()
+        self.cursor.execute("SELECT equip_id_id,cbd_status,simid FROM AppInfoManage_cbdstatus;")
+        cbd_cursor = self.cursor.fetchall()
+        for i in cbd_cursor:
+            device_id = i["equip_id_id"]
+            cbd_status = i["cbd_status"]
+            photo_iccid = i["simid"]
+            equip_status = ast.literal_eval(cbd_status)
+            zhuban_iccid = equip_status.get("iccid","")
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="四情平台":
+                SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="测报灯",platform=1).zhuban_sim()
+                if photo_iccid and photo_iccid != zhuban_iccid:
+                    SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="测报灯",platform=1).photo_sim()
+
+    def xycb_sim(self):
+        self.sql_ping()
+        self.cursor.execute("SELECT equip_id_id,ybq_status FROM AppInfoManage_ybqstatus;")
+        xycb_cursor = self.cursor.fetchall()
+        for i in xycb_cursor:
+            device_id = i["equip_id_id"]
+            xycb_status = i["ybq_status"]
+            equip_status = ast.literal_eval(xycb_status)
+            iccid = equip_status.get("iccid","")
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="四情平台":
+                SIMUpdate(deviceId=device_id,iccid=iccid,device_type="性诱测报",platform=1).zhuban_sim()
+    
+    def qxz_sim(self):
+        self.sql_ping()
+        self.cursor.execute("SELECT equip_id_id,iccid FROM AppInfoManage_qxz_base_info;")
+        qxz_cursor = self.cursor.fetchall()
+        for i in qxz_cursor:
+            device_id = i["equip_id_id"]
+            iccid = i["iccid"]
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="四情平台":
+                SIMUpdate(deviceId=device_id,iccid=iccid,device_type="气象站",platform=1).zhuban_sim()
+    
+    def bzy_sim(self):
+        self.sql_ping()
+        self.cursor.execute("SELECT equip_id_id,bzy_status,simid FROM AppInfoManage_bzystatus;")
+        bzy_cursor = self.cursor.fetchall()
+        for i in bzy_cursor:
+            device_id = i["equip_id_id"]
+            bzy_status = i["bzy_status"]
+            photo_iccid = i["simid"]
+            equip_status = ast.literal_eval(bzy_status)
+            zhuban_iccid = equip_status.get("iccid","")
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="四情平台":
+                SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="孢子仪",platform=1).zhuban_sim()
+                if photo_iccid and photo_iccid != zhuban_iccid:
+                    SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="孢子仪",platform=1).photo_sim()
+
+    def run(self):
+        self.scd_sim()
+        print("四情杀虫灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.cbd_sim()
+        print("四情测报灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.xycb_sim()
+        print("四情性诱测报更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.qxz_sim()
+        print("四情气象站更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.bzy_sim()
+        print("四情孢子仪更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.cursor.close()
+        self.connection.close()
+            
+
+class BD_SIMUpdate(object):
+    def __init__(self) -> None:
+        config = settings.CONFIG["bigdatamongo"]
+        self.host, self.port = config['host'], config['port']
+        self.user, self.password = config['user'], config['pwd']
+        self.client = pymongo.MongoClient(host=self.host, port=self.port, username=self.user, password=self.password)
+        self.db = self.client.smartfarming
+        self.device_collection = self.db.sa_device
+        self.scd_collection = self.db.sa_device_scd_data
+        self.cbd_collection = self.db.sa_device_cbd_data
+        self.xycb_collection = self.db.sa_device_xycb_data
+        self.qxz_collection = self.db.sa_qxz_base_info
+        self.bzy_collection = self.db.sa_device_bzy_data
+
+    def mongo_ping(self):
+        try:
+            self.client.admin.command('ping')
+        except:
+            self.client = pymongo.MongoClient(host=self.host, port=self.port, username=self.user, password=self.password)
+            self.db = self.client.smartfarming
+            self.device_collection = self.db.sa_device
+            self.scd_collection = self.db.sa_device_scd_data
+            self.cbd_collection = self.db.sa_device_cbd_data
+            self.xycb_collection = self.db.sa_device_xycb_data
+            self.qxz_collection = self.db.sa_qxz_base_info
+            self.bzy_collection = self.db.sa_device_bzy_data
+
+    def device_list(self, type_id):
+        device_list_cursor = self.device_collection.find(
+            filter={
+                "device_type_id": type_id
+            },
+            projection={
+                "_id": False,
+                "d_id": "$id",
+                "device_id": "$device_id",
+                "simid": "$simid"
+            }
+        )
+        if not device_list_cursor:
+            device_list_cursor = []
+        return device_list_cursor
+
+    def scd_sim(self):
+        self.mongo_ping()
+        scd_list = self.device_list(type_id=2)
+        for i in scd_list:
+            d_id = i["d_id"]
+            device_id = i["device_id"]
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="大数据平台":
+                scd_data_cursor = self.scd_collection.find_one(
+                    filter={
+                        "device_id": d_id
+                    },
+                    projection={
+                        "_id": False,
+                        "device_data": "$device_data"
+                    },
+                    sort=[
+                        ('_id', pymongo.DESCENDING)
+                    ]
+                )
+                if scd_data_cursor:
+                    device_data = ast.literal_eval(scd_data_cursor["device_data"])
+                    iccid = device_data.get("iccid","")
+                    SIMUpdate(deviceId=device_id,iccid=iccid,device_type="杀虫灯",platform=2).zhuban_sim()
+    
+    def cbd_sim(self):
+        self.mongo_ping()
+        cbd_list = self.device_list(type_id=3)
+        for i in cbd_list:
+            d_id = i["d_id"]
+            device_id = i["device_id"]
+            photo_iccid = i["simid"]
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="大数据平台":
+                cbd_data_cursor = self.cbd_collection.find_one(
+                    filter={
+                        "device_id": d_id
+                    },
+                    projection={
+                        "_id": False,
+                        "device_data": "$device_data"
+                    },
+                    sort=[
+                        ('_id', pymongo.DESCENDING)
+                    ]
+                )
+                if cbd_data_cursor:
+                    device_data = ast.literal_eval(cbd_data_cursor["device_data"])
+                    zhuban_iccid = device_data.get("iccid","")
+                    SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="测报灯",platform=2).zhuban_sim()
+                if photo_iccid and photo_iccid != zhuban_iccid:
+                    SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="测报灯",platform=2).photo_sim()
+
+
+        cbd_cursor = self.cursor.fetchall()
+        for i in cbd_cursor:
+            device_id = i["equip_id_id"]
+            cbd_status = i["cbd_status"]
+            photo_iccid = i["simid"]
+            equip_status = ast.literal_eval(cbd_status)
+            zhuban_iccid = equip_status.get("iccid","")
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="四情平台":
+                SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="测报灯",platform=1).zhuban_sim()
+                SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="测报灯",platform=1).photo_sim()
+
+    def xycb_sim(self):
+        self.mongo_ping()
+        xycb_list = self.device_list(type_id=4)
+        for i in xycb_list:
+            d_id = i["d_id"]
+            device_id = i["device_id"]
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="大数据平台":
+                xycb_data_cursor = self.xycb_collection.find_one(
+                    filter={
+                        "device_id": d_id
+                    },
+                    projection={
+                        "_id": False,
+                        "device_data": "$device_data"
+                    },
+                    sort=[
+                        ('_id', pymongo.DESCENDING)
+                    ]
+                )
+                if xycb_data_cursor:
+                    device_data = ast.literal_eval(xycb_data_cursor["device_data"])
+                    iccid = device_data.get("iccid","")
+                    SIMUpdate(deviceId=device_id,iccid=iccid,device_type="性诱测报",platform=2).zhuban_sim()
+    
+    def qxz_sim(self):
+        self.mongo_ping()
+        qxz_list_cursor = self.qxz_collection.find(
+            filter={},
+            projection={
+                "_id": False,
+                "device_id": "$device_id",
+                "iccid": "$iccid"
+            },
+        )
+        if qxz_list_cursor:
+            for i in qxz_list_cursor:
+                device_id = i["device_id"]
+                iccid = i["iccid"]
+                device_info = get_equip_list(d_id=device_id, isfullId=1)
+                if device_info and device_info[0]["plat"]=="大数据平台":
+                    SIMUpdate(deviceId=device_id,iccid=iccid,device_type="气象站",platform=2).zhuban_sim()
+    
+    def bzy_sim(self):
+        self.mongo_ping()
+        bzy_list = self.device_list(type_id=7)
+        for i in bzy_list:
+            d_id = i["d_id"]
+            device_id = i["device_id"]
+            photo_iccid = i["simid"]
+            device_info = get_equip_list(d_id=device_id, isfullId=1)
+            if device_info and device_info[0]["plat"]=="大数据平台":
+                bzy_data_cursor = self.bzy_collection.find_one(
+                    filter={
+                        "device_id": d_id
+                    },
+                    projection={
+                        "_id": False,
+                        "device_data": "$device_data"
+                    },
+                    sort=[
+                        ('_id', pymongo.DESCENDING)
+                    ]
+                )
+                if bzy_data_cursor:
+                    device_data = ast.literal_eval(bzy_data_cursor["device_data"])
+                    zhuban_iccid = device_data.get("iccid","")
+                    SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="孢子仪",platform=2).zhuban_sim()
+                if photo_iccid and photo_iccid != zhuban_iccid:
+                    SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="孢子仪",platform=2).photo_sim()
+
+    def run(self):
+        self.scd_sim()
+        print("大数据杀虫灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.cbd_sim()
+        print("大数据测报灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.xycb_sim()
+        print("大数据性诱测报更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.qxz_sim()
+        print("大数据气象站更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+        self.bzy_sim()
+        print("大数据孢子仪更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+
+if __name__ == "__main__":
+    print("SIM卡信息开始更新----------%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+    print("")
+    Execution_POOL= ThreadPoolExecutor(max_workers=2)
+    all_tasks = [
+        Execution_POOL.submit(SQ_SIMUpdate().run()),
+        Execution_POOL.submit(BD_SIMUpdate().run())
+    ]
+    wait(all_tasks, return_when=ALL_COMPLETED)
+
+    print("SIM卡信息更新完毕----------%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
+    print("")
+    print("")

binární
requirements.txt


+ 17 - 19
utils/utils.py

@@ -19,7 +19,7 @@ def get_equip_list(d_id, isfullId=0):
         except:
             bigdata_dict = {}
         try:
-            siqing_res = requests.post("http://www.yfzhwlw.com/search/equip", data={"device_id": d_id, "isfullId": "1"},timeout=10)
+            siqing_res = requests.post("http://172.16.220.3/search/equip", data={"device_id": d_id, "isfullId": "1"},timeout=10)
             siqing_dict = json.loads(siqing_res.content.decode())
         except:
             siqing_dict = {}
@@ -30,7 +30,7 @@ def get_equip_list(d_id, isfullId=0):
         except:
             bigdata_dict = {}
         try:
-            siqing_res = requests.post("http://www.yfzhwlw.com/search/equip", data={"device_id": d_id}, timeout=10)
+            siqing_res = requests.post("http://172.16.220.3/search/equip", data={"device_id": d_id}, timeout=10)
             siqing_dict = json.loads(siqing_res.content.decode())
         except:
             siqing_dict = {}
@@ -46,12 +46,11 @@ def get_equip_list(d_id, isfullId=0):
     return data
 
 
-class Get_SIM_info(object):
+class GetSIMInfo(object):
     """
     自定义获取SIM卡对应卡商及数据
     """
-
-    def __init__(self, iccid) -> None:
+    def __init__(self,iccid) -> None:
         self.iccid = iccid
         self.hz_status = {
             0: "未知",
@@ -74,17 +73,18 @@ class Get_SIM_info(object):
 
     def hz_sim_info(self):
         """获取合宙流量卡信息"""
-        url = "http://api.openluat.com/sim/iotcard/card"
+        url = "http://sim.brlink.cn/api/open/iotcard/card"
         payload = {
             'iccid': self.iccid,
         }
-        appkey = 'KDlhc9VY4rWSXkbM'
-        appsecret = 'DmwxcSB1b8dx7kLWqWMJNRLgyQhCvPJ7DHIfLdHIz9A18CifSHqJk3nWZ1vHv4cR'
+        appkey = 'iaO2DKgS8KdlnVgU'
+        appsecret = 'qzKgO4sBdzMrjRwv9H22S9ufepNv8Hl5ehPqkYVD31DCICjyKwqUdj7zihQQKfgx'
         auth = HTTPBasicAuth(appkey, appsecret)
         try:
-            res = requests.post(url, json=payload, auth=auth, timeout=5)
+            res = requests.post(url, json=payload, auth=auth)
             data = json.loads(res.text)
         except Exception as e:
+            print(self.iccid,"合宙接口异常",e)
             data = {'code': 99999, 'msg': '接口调用异常异常'}
         return data
 
@@ -92,19 +92,18 @@ class Get_SIM_info(object):
         """ 获取企鹏(SIMBOSS)流量卡信息 """
         url = "https://api.simboss.com/2.0/device/detail"
         current_milli_time = lambda: int(round(time.time() * 1000))
-        data_1 = "appid=%s&iccid=%s&timestamp=%s%s" % (
-            "102420177762", self.iccid, current_milli_time(), "6397d7e6a56589f1d93284e9800493e1")
+        data_1 = "appid=%s&iccid=%s&timestamp=%s%s"%("102420177762",self.iccid,current_milli_time(),"6397d7e6a56589f1d93284e9800493e1")
         sign = hashlib.sha256(data_1.encode('utf-8')).hexdigest()
-        data = {"appid": "102420177762", "iccid": self.iccid, "timestamp": current_milli_time(), "sign": sign}
+        data = {"appid": "102420177762", "iccid": self.iccid, "timestamp":current_milli_time(),"sign":sign}
         try:
-            res = requests.post(url, data=data, timeout=5)
+            res = requests.post(url, data=data)
             data = json.loads(res.text)
         except Exception as e:
+            print(self.iccid,"SIMBOSS接口异常",e)
             data = {'code': 99999, 'msg': '接口调用异常异常'}
         return data
-
+    
     def get_sim_info(self):
-        """未知卡商情况下获取卡信息"""
         hz_data = self.hz_sim_info()
         if hz_data["code"] == 0:  # 合宙
             sim_operators = 1
@@ -126,7 +125,7 @@ class Get_SIM_info(object):
             if qp_data["code"] == "0":
                 sim_operators = 2
                 account_status = self.qp_status[qp_data["data"]["status"]]
-                active_date = qp_data["data"].get("startDate", "")
+                active_date = qp_data["data"].get("startDate","")
                 if active_date:
                     if qp_data["data"]["useCountAsVolume"] == False:
                         data_plan = str(qp_data["data"]["totalDataVolume"]) + "M"
@@ -135,8 +134,7 @@ class Get_SIM_info(object):
                     else:
                         data_plan = str(qp_data["data"]["totalDataVolume"] * 1024) + "M"
                         data_usage = str(qp_data["data"]["usedDataVolume"] * 1024) + "M"
-                        data_balance = str(
-                            (qp_data["data"]["totalDataVolume"] - qp_data["data"]["usedDataVolume"]) * 1024) + "M"
+                        data_balance = str((qp_data["data"]["totalDataVolume"] - qp_data["data"]["usedDataVolume"])*1024) + "M"
                     expiry_date = qp_data["data"]["expireDate"]
                 else:
                     data_plan = "未激活"
@@ -151,4 +149,4 @@ class Get_SIM_info(object):
                 data_usage = "未知"
                 data_balance = "未知"
                 expiry_date = "未知"
-        return sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date
+        return sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date