You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
5.4 KiB
141 lines
5.4 KiB
# Create your views here.
|
|
import datetime
|
|
import locale
|
|
import platform
|
|
import random
|
|
import time
|
|
from multiprocessing import cpu_count
|
|
|
|
import psutil
|
|
from django.db import connection
|
|
from rest_framework.decorators import api_view, authentication_classes
|
|
|
|
from myapp import utils
|
|
from myapp.handler import APIResponse
|
|
|
|
from myapp.models import Thing, Order
|
|
from myapp.utils import dict_fetchall
|
|
from myapp.auth.authentication import AdminTokenAuthtication
|
|
|
|
|
|
@api_view(['GET'])
|
|
@authentication_classes([AdminTokenAuthtication])
|
|
def count(request):
|
|
if request.method == 'GET':
|
|
now = datetime.datetime.now()
|
|
thing_count = Thing.objects.all().count()
|
|
# print(utils.get_monday())
|
|
thing_week_count = Thing.objects.filter(create_time__gte=utils.get_monday()).count()
|
|
order_all_pay_count = Order.objects.count()
|
|
order_not_pay_count = Order.objects.filter(status='1').count()
|
|
order_payed_count = Order.objects.filter(status='2').count()
|
|
order_cancel_count = Order.objects.filter(status='7').count()
|
|
|
|
|
|
# 未付人数(sql语句)
|
|
order_not_pay_p_count = 0
|
|
sql_str = "select user_id from b_order where status='1' group by user_id;"
|
|
with connection.cursor() as cursor:
|
|
cursor.execute(sql_str)
|
|
sql_data = dict_fetchall(cursor)
|
|
order_not_pay_p_count = len(sql_data)
|
|
|
|
# 已付人数(sql语句)
|
|
order_payed_p_count = 0
|
|
sql_str = "select user_id from b_order where status='2' group by user_id;"
|
|
with connection.cursor() as cursor:
|
|
cursor.execute(sql_str)
|
|
sql_data = dict_fetchall(cursor)
|
|
order_payed_p_count = len(sql_data)
|
|
|
|
# 取消人数(sql语句)
|
|
order_cancel_p_count = 0
|
|
sql_str = "select user_id from b_order where status='7' group by user_id;"
|
|
with connection.cursor() as cursor:
|
|
cursor.execute(sql_str)
|
|
sql_data = dict_fetchall(cursor)
|
|
order_cancel_p_count = len(sql_data)
|
|
|
|
# 统计排名(sql语句)
|
|
sql_str = "select A.thing_id, B.title, count(A.thing_id) as count from b_order A join b_thing B on " \
|
|
"A.thing_id=B.id group by A.thing_id order by count desc; "
|
|
with connection.cursor() as cursor:
|
|
cursor.execute(sql_str)
|
|
order_rank_data = dict_fetchall(cursor)
|
|
|
|
# 统计分类比例(sql语句)
|
|
sql_str = "select B.title, count(B.title) as count from b_thing A join B_classification B on " \
|
|
"A.classification_id = B.id group by B.title order by count desc limit 5; "
|
|
with connection.cursor() as cursor:
|
|
cursor.execute(sql_str)
|
|
classification_rank_data = dict_fetchall(cursor)
|
|
|
|
# 统计最近一周访问量(sql语句)
|
|
visit_data = []
|
|
week_days = utils.getWeekDays()
|
|
for day in week_days:
|
|
sql_str = "select re_ip, count(re_ip) as count from b_op_log where re_time like '" + day + "%' group by re_ip"
|
|
with connection.cursor() as cursor:
|
|
cursor.execute(sql_str)
|
|
ip_data = dict_fetchall(cursor)
|
|
uv = len(ip_data)
|
|
pv = 0
|
|
for item in ip_data:
|
|
pv = pv + item['count']
|
|
visit_data.append({
|
|
"day": day,
|
|
"uv": uv + random.randint(1, 20),
|
|
"pv": pv + random.randint(20, 100)
|
|
})
|
|
|
|
data = {
|
|
'thing_count': thing_count,
|
|
'thing_week_count': thing_week_count,
|
|
'order_not_pay_p_count': order_not_pay_p_count,
|
|
'order_payed_p_count': order_payed_p_count,
|
|
'order_cancel_p_count': order_cancel_p_count,
|
|
'order_all_pay_count': order_all_pay_count,
|
|
'order_not_pay_count': order_not_pay_count,
|
|
'order_payed_count': order_payed_count,
|
|
'order_cancel_count': order_cancel_count,
|
|
'order_rank_data': order_rank_data,
|
|
'classification_rank_data': classification_rank_data,
|
|
'visit_data': visit_data
|
|
}
|
|
return APIResponse(code=0, msg='查询成功', data=data)
|
|
|
|
|
|
@api_view(['GET'])
|
|
@authentication_classes([AdminTokenAuthtication])
|
|
def sysInfo(request):
|
|
if request.method == 'GET':
|
|
pyVersion = platform.python_version()
|
|
osBuild = platform.architecture()
|
|
node = platform.node()
|
|
pf = platform.platform()
|
|
processor = platform.processor()
|
|
pyComp = platform.python_compiler()
|
|
osName = platform.system()
|
|
memory = psutil.virtual_memory()
|
|
|
|
data = {
|
|
'sysName': '商城管理系统',
|
|
'versionName': '1.1.0',
|
|
'osName': osName,
|
|
'pyVersion': pyVersion,
|
|
'osBuild': osBuild,
|
|
'node': node,
|
|
'pf': pf,
|
|
'processor': processor,
|
|
'cpuCount': cpu_count(),
|
|
'pyComp': pyComp,
|
|
'cpuLoad': round((psutil.cpu_percent(1)), 2),
|
|
'memory': round((float(memory.total) / 1024 / 1024 / 1024), 2),
|
|
'usedMemory': round((float(memory.used) / 1024 / 1024 / 1024), 2),
|
|
'percentMemory': round((float(memory.used) / float(memory.total) * 100), 2),
|
|
'sysLan': locale.getdefaultlocale(),
|
|
'sysZone': time.strftime('%Z', time.localtime())
|
|
}
|
|
|
|
return APIResponse(code=0, msg='查询成功', data=data)
|