# -*- coding: utf-8 -*- import base64 import datetime import time from pathlib import Path from random import Random import ipdb import simplejson as json from django.core import serializers from django.utils import timezone from pyipip import IPIPDatabase from Ansjer.config import BASE_DIR, UNICODE_ASCII_CHARACTER_SET # 复用性且公用较高封装代码在这 from Controller.CheckUserData import RandomStr from Service.ModelService import ModelService class CommonService: # 添加模糊搜索 @staticmethod def get_kwargs(data={}): kwargs = {} for (k, v) in data.items(): if v is not None and v != u'': kwargs[k + '__icontains'] = v return kwargs # 定义静态方法 # 格式化query_set转dict @staticmethod def qs_to_dict(query_set): sqlJSON = serializers.serialize('json', query_set) sqlList = json.loads(sqlJSON) sqlDict = dict(zip(["datas"], [sqlList])) return sqlDict # 获取文件大小 @staticmethod def get_file_size(file_path='', suffix_type='', decimal_point=0): # for x in ['bytes', 'KB', 'MB', 'GB', 'TB']: # path = Path() / 'D:/TestServer/123444.mp4' path = Path() / file_path size = path.stat().st_size mb_size = 0.0 if suffix_type == 'MB': mb_size = size / 1024.0 / 1024.0 if decimal_point != 0: mb_size = round(mb_size, decimal_point) return mb_size @staticmethod def get_param_flag(data=[]): # print(data) flag = True for v in data: if v is None: flag = False break return flag @staticmethod def get_ip_address(request): """ 获取ip地址 :param request: :return: """ try: real_ip = request.META['HTTP_X_FORWARDED_FOR'] clientIP = real_ip.split(",")[0] except: try: clientIP = request.META['REMOTE_ADDR'] except Exception as e: clientIP = '' return clientIP # @获取一天每个小时的datetime.datetime @staticmethod def getTimeDict(times): time_dict = {} t = 0 for x in range(24): if x < 10: x = '0' + str(x) else: x = str(x) a = times.strftime("%Y-%m-%d") + " " + x + ":00:00" time_dict[t] = timezone.datetime.strptime(a, '%Y-%m-%d %H:%M:%S') t += 1 return time_dict # 根据ip获取地址 @staticmethod def getAddr(ip): print('start_time=' + str(time.time())) base_dir = BASE_DIR # ip数据库 db = IPIPDatabase(base_dir + '/DB/17monipdb.dat') addr = db.lookup(ip) # ModelService.add_tmp_log(addr) ts = addr.split('\t')[0] print('end_time=' + str(time.time())) return ts # 通过ip检索ipip指定信息 lang为CN或EN @staticmethod def getIpIpInfo(ip, lang, update=False): ipbd_dir = BASE_DIR + "/DB/mydata4vipday2.ipdb" db = ipdb.City(ipbd_dir) if update: rr = db.reload(ipbd_dir) info = db.find_map(ip, lang) return info @staticmethod def getUserID(userPhone='13800138000', getUser=True, setOTAID=False, μs=True): if μs == True: if getUser == True: timeID = str(round(time.time() * 1000000)) userID = timeID + userPhone return userID else: if setOTAID == False: timeID = str(round(time.time() * 1000000)) ID = userPhone + timeID return ID else: timeID = str(round(time.time() * 1000000)) eID = '13800' + timeID + '138000' return eID else: if getUser == True: timeID = str(round(time.time() * 1000)) userID = timeID + userPhone return userID else: if setOTAID == False: timeID = str(round(time.time() * 1000)) ID = userPhone + timeID return ID else: timeID = str(round(time.time() * 1000)) eID = '13800' + timeID + '138000' return eID # 生成随机数 @staticmethod def RandomStr(randomlength=8, number=True): str = '' if number == False: characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsT' \ 'tUuVvWwXxYyZz0123456789' else: characterSet = '0123456789' length = len(characterSet) - 1 random = Random() for index in range(randomlength): str += characterSet[random.randint(0, length)] return str # 生成订单好 @staticmethod def createOrderID(): random_id = CommonService.RandomStr(6, True) order_id = datetime.datetime.now().strftime('%Y%m%d%H%M%S') + str(random_id) print('orderID:') print(order_id) return order_id # qs转换list datetime处理 @staticmethod def qs_to_list(qs): res = [] # print(qs) for ps in qs: try: if 'add_time' in ps: ps['add_time'] = ps['add_time'].strftime("%Y-%m-%d %H:%M:%S") if 'update_time' in ps: ps['update_time'] = ps['update_time'].strftime("%Y-%m-%d %H:%M:%S") if 'end_time' in ps: ps['end_time'] = ps['end_time'].strftime("%Y-%m-%d %H:%M:%S") if 'data_joined' in ps: if ps['data_joined']: ps['data_joined'] = ps['data_joined'].strftime("%Y-%m-%d %H:%M:%S") else: ps['data_joined'] = '' if 'userID__data_joined' in ps: if ps['userID__data_joined']: ps['userID__data_joined'] = ps['userID__data_joined'].strftime("%Y-%m-%d %H:%M:%S") else: ps['userID__data_joined'] = '' except Exception as e: pass res.append(ps) return res # 获取当前时间 @staticmethod def get_now_time_str(n_time, tz, lang): print(n_time) print(tz) print(lang) n_time = int(n_time) + 3600 * float(tz) if lang == 'cn': return time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(int(n_time))) else: return time.strftime('%m-%d-%Y %H:%M:%S', time.gmtime(int(n_time))) # 生成随机数 @staticmethod def encrypt_data(randomlength=8, number=False): str = '' if number == False: characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsT' \ 'tUuVvWwXxYyZz0123456789' else: characterSet = '0123456789' length = len(characterSet) - 1 random = Random() for index in range(randomlength): str += characterSet[random.randint(0, length)] return str @staticmethod def decode_data(content, start=1, end=4): try: for i in range(start, end): if i == 1: content = base64.b64decode(content) content = content.decode('utf-8') content = content[1:-1] if i == 2: content = base64.b64decode(content) content = content.decode('utf-8') content = content[2:-2] if i == 3: content = base64.b64decode(content) content = content.decode('utf-8') content = content[3:-3] return content except Exception as e: print(e) return None @staticmethod def encode_data(content, start=1, end=4): for i in range(start, end): if i == 1: content = RandomStr(3, False)+content+RandomStr(3, False) content = base64.b64encode(str(content).encode("utf-8")).decode('utf8') if i == 2: content = RandomStr(2, False)+str(content)+RandomStr(2, False) content = base64.b64encode(str(content).encode("utf-8")).decode('utf8') if i == 3: content = RandomStr(1, False)+str(content)+RandomStr(1, False) content = base64.b64encode(str(content).encode("utf-8")).decode('utf8') return content #把格式化时间转换成时间戳 @staticmethod def str_to_timestamp(str_time=None, format='%Y-%m-%d %H:%M:%S'): if str_time: time_tuple = time.strptime(str_time, format) # 把格式化好的时间转换成元祖 result = time.mktime(time_tuple) # 把时间元祖转换成时间戳 return int(result) return int(time.time()) # 把时间戳转换成格式化 @staticmethod def timestamp_to_str(timestamp=None, format='%Y-%m-%d %H:%M:%S'): if timestamp: time_tuple = time.localtime(timestamp) # 把时间戳转换成时间元祖 result = time.strftime(format, time_tuple) # 把时间元祖转换成格式化好的时间 return result else: return time.strptime(format) #计算N个月后的时间戳 @staticmethod def calcMonthLater(addMonth, unix_timestamp=None): if unix_timestamp: now_year = time.localtime(unix_timestamp).tm_year now_month = time.localtime(unix_timestamp).tm_mon now_day = time.localtime(unix_timestamp).tm_mday now_hour = time.localtime(unix_timestamp).tm_hour now_min = time.localtime(unix_timestamp).tm_min now_second = time.localtime(unix_timestamp).tm_sec else: now_year = datetime.datetime.now().year now_month = datetime.datetime.now().month now_day = datetime.datetime.now().day now_hour = datetime.datetime.now().hour now_min = datetime.datetime.now().minute now_second = datetime.datetime.now().second for add in range(addMonth): if now_month == 12: now_year += 1 now_month = 1 else: now_month += 1 for is_format in range(4): try: date_format = '{now_year}-{now_month}-{now_day} {now_hour}:{now_min}:{now_second}' \ .format(now_year=now_year,now_month=now_month,now_day=now_day,now_hour=now_hour, now_min=now_min,now_second=now_second) timestamps = CommonService.str_to_timestamp(date_format) except Exception as e: if str(e) == 'day is out of range for month': now_day = now_day - 1 return timestamps @staticmethod def updateMac(mac: str): macArray = mac.split(':') macArray[0] = int(macArray[0], 16) macArray[1] = int(macArray[1], 16) macArray[2] = int(macArray[2], 16) first = int(macArray[5], 16) second = int(macArray[4], 16) three = int(macArray[3], 16) # print(macArray) # print(first) # print(second) # print(three) if first == 255 and second == 255 and three == 255: return None first += 1 if first / 256 == 1: second += 1 first = first % 256 if second / 256 == 1: three += 1 second = second % 256 macArray[3] = three macArray[4] = second macArray[5] = first # print(macArray) tmp = ':'.join(map(lambda x: "%02x" % x, macArray)) # print(tmp) return tmp.upper() @staticmethod def decode_data(content, start=1, end=4): try: for i in range(start, end): if i == 1: content = base64.b64decode(content) content = content.decode('utf-8') content = content[1:-1] if i == 2: content = base64.b64decode(content) content = content.decode('utf-8') content = content[2:-2] if i == 3: content = base64.b64decode(content) content = content.decode('utf-8') content = content[3:-3] print(content) return content except Exception as e: print(e) return None @staticmethod def encode_data(content, start=1, end=4): for i in range(start, end): if i == 1: content = CommonService.RandomStr(3, False) + content + CommonService.RandomStr(3, False) content = base64.b64encode(str(content).encode("utf-8")).decode('utf8') if i == 2: content = CommonService.RandomStr(2, False) + str(content) + CommonService.RandomStr(2, False) content = base64.b64encode(str(content).encode("utf-8")).decode('utf8') if i == 3: content = CommonService.RandomStr(1, False) + str(content) + CommonService.RandomStr(1, False) content = base64.b64encode(str(content).encode("utf-8")).decode('utf8') return content @staticmethod def encode_data_without_salt(content): return base64.b64encode(str(content).encode("utf-8")).decode('utf8')