| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 | #!/usr/bin/env python3# -*- coding: utf-8 -*-import jsonimport timefrom django.db.models import Countfrom django.views.decorators.csrf import csrf_exemptfrom Model.models import UserAppFrequencyModel, AppFrequencyStatisticsModel, Device_User, \    AppFrequencyYearStatisticsModel, Equipment_Info, EquipmentInfoExStatisticsModelfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObject@csrf_exemptdef statistcsAppFrequency(request):    request.encoding = 'utf-8'    response = ResponseObject()    if request.method == 'POST':        request_dict = request.POST    elif request.method == 'GET':        request_dict = request.GET    else:        return response.json(444)    token = TokenObject(request_dict.get('token', None))    if token.code != 0:        return response.json(token.code)    target_year = request_dict.get('year', None)    target_month = request_dict.get('month', None)    localtime = time.localtime()    current_month = localtime.tm_mon    current_year = localtime.tm_year    if target_year and target_month:        current_year = int(target_year)        current_month = int(target_month)    time_struct = [current_year, 1, 1, 0, 0, 0, 0, 0, 0]    distance_time = 8 * 60 * 60    # 该月的开始时间    time_struct[1] = current_month    start_time = time.mktime(tuple(time_struct))    start_time = start_time - time.timezone - distance_time    # 该月的结束时间    time_struct[1] = current_month + 1    end_time = time.mktime(tuple(time_struct))    end_time = end_time - time.timezone - distance_time    # 统计该月的数据    uaf_qs = UserAppFrequencyModel.objects.filter(data_time__gte=start_time, data_time__lt=end_time) \        .values('type').annotate(quantity=Count('id')).order_by()    afs_qs = AppFrequencyStatisticsModel.objects.filter(year=current_year, month=current_month)    if afs_qs.exists():        afs_qs.update(data=json.dumps(uaf_qs))    else:        data = {            'data': json.dumps(list(uaf_qs)),            'month': current_month,            'year': current_year        }        AppFrequencyStatisticsModel.objects.create(**data)    return response.json(0)@csrf_exemptdef statistcsAppFrequencyYear(request):    request.encoding = 'utf-8'    response = ResponseObject()    if request.method == 'POST':        request_dict = request.POST    elif request.method == 'GET':        request_dict = request.GET    else:        return response.json(444)    token = TokenObject(request_dict.get('token', None))    if token.code != 0:        return response.json(token.code)    year = request_dict.get('year', None)    localtime = time.localtime()    current_year = localtime.tm_year    if year:        current_year = int(year)    afs_qs = AppFrequencyStatisticsModel.objects.filter(year=current_year).values('data', 'month')    # num = Device_User.objects.count()    num = 300000    res = []    result = {        0: 0,        1: 0,        2: 0,        3: 0,        4: 0,        5: 0,        6: 0    }    quantity = 0    for afs in afs_qs:        data = json.loads(afs['data'])        for item in data:            result[item['type']] += item['quantity']            quantity += item['quantity']    tmps = []    for k, v in result.items():        tmp = {            'type': k,            'value': round(v / 12 / num, 3)        }        tmps.append(tmp)    res.append({        'year': current_year,        'data': tmps    })    print(res)    afys_qs = AppFrequencyYearStatisticsModel.objects.filter(year=current_year)    #    if afys_qs.exists():        afys_qs.update(data=json.dumps(res))    else:        data = {            'data': json.dumps(res),            'year': current_year,            'num': num        }        AppFrequencyYearStatisticsModel.objects.create(**data)    return response.json(0)@csrf_exemptdef statistcsPushDay(request):    request.encoding = 'utf-8'    response = ResponseObject()    if request.method == 'POST':        request_dict = request.POST    elif request.method == 'GET':        request_dict = request.GET    else:        return response.json(444)    token = TokenObject(request_dict.get('token', None))    if token.code != 0:        return response.json(token.code)    current_time = int(time.time())    count = int((current_time + 8 * 3600) / (24 * 3600))    end_time = count * 24 * 3600 - 8 * 3600    start_time = end_time - 24 * 3600    print(start_time)    print(end_time)    eq_qs = Equipment_Info.objects.filter(addTime__gte=start_time, addTime__lte=end_time)    print(eq_qs.values())    # 0:APNS推送,1:谷歌推送,2:极光推送    now_time = int(time.time())    jpush = EquipmentInfoExStatisticsModel(push_type=2, statistics_date=start_time, add_time=now_time, date_type=0)    apns = EquipmentInfoExStatisticsModel(push_type=0, statistics_date=start_time, add_time=now_time, date_type=0)    gcm = EquipmentInfoExStatisticsModel(push_type=1, statistics_date=start_time, add_time=now_time, date_type=0)    total = EquipmentInfoExStatisticsModel(push_type=-1, statistics_date=start_time, add_time=now_time, date_type=0)    for eq in eq_qs:        if eq.push_type == 0:            do_sum(eq, apns)        elif eq.push_type == 1:            do_sum(eq, gcm)        elif eq.push_type == 2:            do_sum(eq, jpush)        do_sum(eq, total)    datas = []    datas.append(apns)    datas.append(gcm)    datas.append(jpush)    datas.append(total)    EquipmentInfoExStatisticsModel.objects.bulk_create(datas)    return response.json(0)@csrf_exemptdef statistcsPushMonth(request):    request.encoding = 'utf-8'    response = ResponseObject()    if request.method == 'POST':        request_dict = request.POST    elif request.method == 'GET':        request_dict = request.GET    else:        return response.json(444)    token = TokenObject(request_dict.get('token', None))    if token.code != 0:        return response.json(token.code)    gmtime = time.gmtime(int(time.time()) + 28800)    current_month = gmtime.tm_mon - 1    # print(current_month)    time_struct = [gmtime.tm_year, current_month, 1, 0, 0, 0, 0, 0, gmtime.tm_isdst]    start_time = int(time.mktime(tuple(time_struct))) - 28800    # print(start_time)    time_struct[1] = current_month + 1    end_time = int(time.mktime(tuple(time_struct))) - 28800    # print(end_time)    eq_qs = EquipmentInfoExStatisticsModel.objects.filter(statistics_date__gte=start_time, statistics_date__lte=end_time, date_type=0)    # 0:APNS推送,1:谷歌推送,2:极光推送    now_time = int(time.time())    jpush = EquipmentInfoExStatisticsModel(push_type=2, statistics_date=start_time, add_time=now_time, date_type=1)    apns = EquipmentInfoExStatisticsModel(push_type=0, statistics_date=start_time, add_time=now_time, date_type=1)    gcm = EquipmentInfoExStatisticsModel(push_type=1, statistics_date=start_time, add_time=now_time, date_type=1)    total = EquipmentInfoExStatisticsModel(push_type=-1, statistics_date=start_time, add_time=now_time, date_type=1)    for eq in eq_qs:        if eq.push_type == 0:            do_sum_two(eq, apns)        elif eq.push_type == 1:            do_sum_two(eq, gcm)        elif eq.push_type == 2:            do_sum_two(eq, jpush)        elif eq.push_type == -1:            do_sum_two(eq, total)    datas = []    datas.append(apns)    datas.append(gcm)    datas.append(jpush)    datas.append(total)    EquipmentInfoExStatisticsModel.objects.bulk_create(datas)    return response.json(0)def do_sum(eq: Equipment_Info, target: EquipmentInfoExStatisticsModel):    if eq.push_server_status == 200:        target.number_of_successes += 1    else:        target.number_of_failures += 1    if eq.push_device_status == 1:        target.number_of_arrival += 1def do_sum_two(eq: EquipmentInfoExStatisticsModel, target: EquipmentInfoExStatisticsModel):    target.number_of_successes += eq.number_of_successes    target.number_of_failures += eq.number_of_failures    target.number_of_arrival += eq.number_of_arrival
 |