diff --git a/system/LiveStream/models.py b/system/LiveStream/models.py index a448a61d24795df01b2ae91fb1c9c95c7e1fbc2d..2481947d963b226cd079c385230f9cd1eed118bd 100644 Binary files a/system/LiveStream/models.py and b/system/LiveStream/models.py differ diff --git a/system/login/models.py b/system/login/models.py index e81d9a20e123320c5da1302f2bc2d67618a4b4c5..a9cc70f8523fa352bbdb010c8f1107c76496cc23 100644 --- a/system/login/models.py +++ b/system/login/models.py @@ -168,18 +168,6 @@ class GoodsInfo(models.Model): -class SalesInfo(models.Model): - eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True) - sales_name = models.CharField(max_length=10, blank=True, null=True) - sales_duty = models.CharField(max_length=20, blank=True, null=True) - login_status = models.IntegerField(blank=True, null=True) - salary = models.FloatField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'sales_info' - - class Jbj4Renqi(models.Model): tim = models.DateTimeField(blank=True, null=True) peo = models.IntegerField(blank=True, null=True) @@ -246,8 +234,6 @@ class LiveroomInfo(models.Model): db_table = 'liveroom_info' - - class OrderDetails(models.Model): order_id = models.CharField(primary_key=True, max_length=25) # The composite primary key (order_id, goods_id) found, that is not supported. The first column is selected. goods = models.ForeignKey(GoodsInfo, models.DO_NOTHING) @@ -274,6 +260,155 @@ class OrderInfo(models.Model): db_table = 'order_info' +class ProcureAdmin(models.Model): + eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True) + pro_name = models.CharField(max_length=10, blank=True, null=True) + + class Meta: + managed = False + db_table = 'procure_admin' + + +class ProcureOrder(models.Model): + sup = models.OneToOneField('SupplyInfo', models.DO_NOTHING, + primary_key=True) # The composite primary key (sup_id, procure_id) found, that is not supported. The first column is selected. + procure = models.ForeignKey('ProcurePlan', models.DO_NOTHING) + procure_price = models.FloatField() + procure_num = models.IntegerField() + + class Meta: + managed = False + db_table = 'procure_order' + unique_together = (('sup', 'procure'),) + + +class ProcurePlan(models.Model): + procure = models.OneToOneField('ReplenishRequest', models.DO_NOTHING, primary_key=True) + check_status = models.CharField(max_length=8) + project_intro = models.CharField(max_length=1024, blank=True, null=True) + procure_rule = models.CharField(max_length=1024, blank=True, null=True) + procure_comtent = models.CharField(max_length=1024, blank=True, null=True) + + class Meta: + managed = False + db_table = 'procure_plan' + + +class Receivables(models.Model): + recv_id = models.CharField(primary_key=True, max_length=20) + order = models.ForeignKey(OrderInfo, models.DO_NOTHING) + invoice_id = models.CharField(max_length=20, blank=True, null=True) + + class Meta: + managed = False + db_table = 'receivables' + + +class ReplenishRequest(models.Model): + request_num = models.IntegerField() + request_time = models.DateTimeField() + procure_id = models.CharField(primary_key=True, max_length=10) + eid = models.ForeignKey(ProcureAdmin, models.DO_NOTHING, db_column='eid') + goods = models.ForeignKey('StockInfo', models.DO_NOTHING, blank=True, null=True) + + class Meta: + managed = False + db_table = 'replenish_request' + + +class ReturnInfo(models.Model): + return_id = models.CharField(primary_key=True, max_length=20) + order = models.ForeignKey(OrderInfo, models.DO_NOTHING) + apply_time = models.DateTimeField(blank=True, null=True) + process_time = models.DateTimeField(blank=True, null=True) + process_way = models.CharField(max_length=20, blank=True, null=True) + retrun_status = models.CharField(max_length=20, blank=True, null=True) + + class Meta: + managed = False + db_table = 'return_info' + + +class SalesIndex(models.Model): + goods = models.OneToOneField(GoodsInfo, models.DO_NOTHING, + primary_key=True) # The composite primary key (goods_id, index_month) found, that is not supported. The first column is selected. + profit_rate = models.FloatField(blank=True, null=True) + sales_num = models.IntegerField(blank=True, null=True) + return_rate = models.FloatField(blank=True, null=True) + kpi_rate = models.FloatField(blank=True, null=True) + index_month = models.IntegerField() + + class Meta: + managed = False + db_table = 'sales_index' + unique_together = (('goods', 'index_month'),) + + +class SalesInfo(models.Model): + eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True) + sales_name = models.CharField(max_length=10, blank=True, null=True) + sales_duty = models.CharField(max_length=20, blank=True, null=True) + login_status = models.IntegerField(blank=True, null=True) + salary = models.FloatField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'sales_info' + + +class SalesPerformance(models.Model): + sales_performance = models.IntegerField(blank=True, null=True) + performance_rank = models.IntegerField(blank=True, null=True) + performance_month = models.IntegerField( + primary_key=True) # The composite primary key (performance_month, eid) found, that is not supported. The first column is selected. + eid = models.ForeignKey(EmployeeInfo, models.DO_NOTHING, db_column='eid') + + class Meta: + managed = False + db_table = 'sales_performance' + unique_together = (('performance_month', 'eid'),) + + +class StockAdmin(models.Model): + eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True) + st_name = models.CharField(max_length=10, blank=True, null=True) + + class Meta: + managed = False + db_table = 'stock_admin' + + +class StockInfo(models.Model): + goods = models.OneToOneField(GoodsInfo, models.DO_NOTHING, primary_key=True) + goods_details = models.CharField(max_length=1024, blank=True, null=True) + stock_num = models.IntegerField() + + class Meta: + managed = False + db_table = 'stock_info' + + +class StockOut(models.Model): + goods = models.OneToOneField(StockInfo, models.DO_NOTHING, primary_key=True) + out_time = models.DateTimeField() + out_num = models.IntegerField() + + class Meta: + managed = False + db_table = 'stock_out' + + +class SupplyInfo(models.Model): + sup_id = models.CharField(primary_key=True, max_length=10) + sup_name = models.CharField(max_length=20) + sup_contact = models.CharField(max_length=15) + sup_serve = models.CharField(max_length=1024) + sup_level = models.CharField(max_length=10) + + class Meta: + managed = False + db_table = 'supply_info' + class ZbInfo(models.Model): eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True) diff --git a/system/login/urls.py b/system/login/urls.py index 7a4e6051597cf0b26d7ca83b9728fece75200e55..bc9d835cfd92a3a05d4a5e0dcea3f72f1600313d 100644 --- a/system/login/urls.py +++ b/system/login/urls.py @@ -1,7 +1,7 @@ from django.urls import path, include from django.urls import re_path as url from . import views -from . import view1 +from . import view2 app_name='login'#需要添加app名称,不然include无法找到该model,在html文件里需要加上app名 urlpatterns = [ @@ -10,15 +10,37 @@ urlpatterns = [ path('index1/', views.index_1, name='index1'), path('register/', views.register, name='register'), path('create/', views.create, name='create'), - url(r'^bar/$', views.ChartView_bar.as_view(), name='i_graph1'), - path('i_graph1/', views.bar_page, name='i_graph1'), path('index1/Proc_index/', views.proc_index, name='proc_index'), path('index1/Warehouse_index/', include('warehouse.urls')), path('index1/live_info', views.Stream_info, name='stream_info'), - path('index1/Sales_index/', include('sales.urls')), - url(r'^line/$', views.ChartView.as_view(), name='demo'), - url(r'^lineUpdate/$', views.ChartUpdateView.as_view(), name='demo'), - url(r'^line_test/$', views.home_page, name='demo'), - path('index1/tim/', views.my_view, name='tim') + url(r'^line/$', views.ChartView4.as_view(), name='demo4'), + url(r'^lineUpdate/$', views.ChartUpdateView4.as_view(), name='demo4'), + url(r'^line_test/$', views.home_page4, name='demo4'), + url(r'^line5/$', views.ChartView5.as_view(), name='demo5'), + url(r'^lineUpdate5/$', views.ChartUpdateView5.as_view(), name='demo5'), + url(r'^line_test5/$', views.home_page5, name='demo5'), + url(r'^line6/$', views.ChartView6.as_view(), name='demo6'), + url(r'^lineUpdate6/$', views.ChartUpdateView6.as_view(), name='demo6'), + url(r'^line_test6/$', views.home_page6, name='demo6'), + url(r'^line7/$', views.ChartView7.as_view(), name='demo7'), + url(r'^lineUpdate7/$', views.ChartUpdateView7.as_view(), name='demo7'), + url(r'^line_test7/$', views.home_page7, name='demo7'), + url(r'^line8/$', views.ChartView8.as_view(), name='demo8'), + url(r'^lineUpdate8/$', views.ChartUpdateView8.as_view(), name='demo8'), + url(r'^line_test8/$', views.home_page8, name='demo8'), + path('index1/tim/', views.tim, name='tim'), + url(r'^rank/$',view2.table_sales_rank,name='sa_rank'), + url(r'^index1/tim/$', views.my_view, name='tim'), + url(r'^bar4/$', views.ChartView_bar4.as_view(), name='i_graph1'), + path('i_graph1/', views.bar_page4, name='i_graph1'), + url(r'^bar5/$', views.ChartView_bar5.as_view(), name='i_graph2'), + path('i_graph2/', views.bar_page5, name='i_graph2'), + url(r'^bar6/$', views.ChartView_bar6.as_view(), name='i_graph3'), + path('i_graph3/', views.bar_page6, name='i_graph3'), + url(r'^bar7/$', views.ChartView_bar7.as_view(), name='i_graph4'), + path('i_graph4/', views.bar_page7, name='i_graph4'), + url(r'^bar8/$', views.ChartView_bar8.as_view(), name='i_graph5'), + path('i_graph5/', views.bar_page8, name='i_graph5'), + url(r'^rank/1/$', view2.zb_yj, name='zb'), ] diff --git a/system/login/view1.py b/system/login/view1.py deleted file mode 100644 index 40f32b0e34e65470a2667cb4a71e3d9aee481cc5..0000000000000000000000000000000000000000 --- a/system/login/view1.py +++ /dev/null @@ -1,106 +0,0 @@ -from django.shortcuts import render -import json -from random import randrange - -from django.http import HttpResponse -from rest_framework.views import APIView - -from pyecharts.charts import Line -from pyecharts import options as opts -from pyecharts.charts import Bar -from pyecharts.commons.utils import JsCode -from pyecharts.globals import ThemeType -from pyecharts.faker import Faker - - -# Create your views here. -def response_as_json(data): - json_str = json.dumps(data) - response = HttpResponse( - json_str, - content_type="application/json", - ) - response["Access-Control-Allow-Origin"] = "*" - return response - - -def json_response(data, code=200): - data = { - "code": code, - "msg": "success", - "data": data, - } - return response_as_json(data) - - -def json_error(error_string="error", code=500, **kwargs): - data = { - "code": code, - "msg": error_string, - "data": {} - } - data.update(kwargs) - return response_as_json(data) - - -JsonResponse = json_response -JsonError = json_error - - -def line_base() -> Line:##表示生成数据的函数,此时输入的是一个静态的数据 - line = ( - Line() - .add_xaxis(list(range(10))) - .add_yaxis(series_name="", y_axis=[randrange(0, 100) for _ in range(10)]) - .set_global_opts( - title_opts=opts.TitleOpts(title="动态数据"), - xaxis_opts=opts.AxisOpts(type_="value"), - yaxis_opts=opts.AxisOpts(type_="value") - ) - .dump_options_with_quotes() - ) - return line - - -class ChartView(APIView):##生成一个展示数据的,用于交互的json文件,导入html - def get(self, request, *args, **kwargs): - return JsonResponse(json.loads(line_base())) - -cnt = 9 - -class ChartUpdateView(APIView):#通过该函数进行动态输入 - def get(self, request, *args, **kwargs): - global cnt - cnt = cnt + 1 - print(cnt) - return JsonResponse({"name": cnt, "value": randrange(0, 100)}) - -def home_page(request):#返回展示数据的模板 - return render(request,'../templates/Pye_chart/test.html',{}) - -def bar_base() -> Bar:##表示生成数据的函数,此时输入的是一个静态的数据 - bar = ( - Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) - .add_xaxis(Faker.choose()) - .add_yaxis("商品A", Faker.values(), itemstyle_opts=opts.ItemStyleOpts(color="#00CD96")) # 自定义颜色 - .add_yaxis("商品B", Faker.values(), itemstyle_opts=opts.ItemStyleOpts(color="#00CD00")) - .set_global_opts( - title_opts={"text": "标准柱状图"}, - brush_opts=opts.BrushOpts(), # 设置操作图表的画笔功能 - toolbox_opts=opts.ToolboxOpts(), # 设置操作图表的工具箱功能 - yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} 元/day"), name="Y轴名称"), - # 设置Y轴名称、定制化刻度单位 - xaxis_opts=opts.AxisOpts(name="X轴名称"), ) # 设置X轴名称 - .dump_options_with_quotes() - ) - return bar - - -class ChartView_bar(APIView):##生成一个展示数据的,用于交互的json文件,导入html - def get(self, request, *args, **kwargs): - return JsonResponse(json.loads(bar_base())) - -def bar_page(request):#返回展示数据的模板 - return render(request,'../templates/graph/test_graph_1.html',{}) - - diff --git a/system/login/view2.py b/system/login/view2.py new file mode 100644 index 0000000000000000000000000000000000000000..27fc0871361c125016a84aa00a24d7324ebb84a2 --- /dev/null +++ b/system/login/view2.py @@ -0,0 +1,202 @@ +import datetime +import time +import random +from django.shortcuts import render +import json +from random import randrange + +from django.http import HttpResponse +from rest_framework.views import APIView + +from pyecharts.charts import Bar +from pyecharts.charts import Line +from pyecharts import options as opts +from .models import * +from django.db.models import Q + + +def response_as_json(data): + json_str = json.dumps(data) + response = HttpResponse( + json_str, + content_type="application/json", + ) + response["Access-Control-Allow-Origin"] = "*" + return response + + +def json_response(data, code=200): + data = { + "code": code, + "msg": "success", + "data": data, + } + return response_as_json(data) + + +def json_error(error_string="error", code=500, **kwargs): + data = { + "code": code, + "msg": error_string, + "data": {} + } + data.update(kwargs) + return response_as_json(data) + + +JsonResponse = json_response +JsonError = json_error + + +def table_sales_rank(request): + if request.method == 'POST': + month_in = request.POST.get('month_inp') + s = SalesPerformance.objects.filter(performance_month=month_in).order_by('performance_rank') + x_lis = [i.eid.eid for i in s] + y_lis = [i.sales_performance for i in s] + si = SalesIndex.objects.filter(index_month=month_in) + for i in si: + i.count = (i.sales_num / i.goods.gprice) + gx_lis = [i.goods.goods_id for i in si] + gy1_lis = [i.profit_rate for i in si] + gy2_lis = [i.kpi_rate for i in si] + gy3_lis = [i.sales_num for i in si] + gy4_lis = [i.return_rate for i in si] + gyc_lis = [i.count for i in si] + x_type = list(set([i.goods.goods_type for i in si])) + gy10_lis = [0 for i in range(len(x_type))] + gy20_lis = [0 for i in range(len(x_type))] + gy30_lis = [0 for i in range(len(x_type))] + gy40_lis = [0 for i in range(len(x_type))] + gyc0_lis = [0 for i in range(len(x_type))] + dic1 = [] + dic2 = [] + dic3 = [] + dic4 = [] + dic5 = [] + dic0 = [] + c1 = 0 + c2 = 0 + c3 = 0 + c4 = 0 + c5 = 0 + for i in si: + if i.goods.goods_type == x_type[0]: + c1 += 1 + gy10_lis[0] += i.profit_rate + gy20_lis[0] += i.kpi_rate + gy30_lis[0] += i.sales_num + gy40_lis[0] += i.return_rate + gyc0_lis[0] += i.count + dic1.append({'name': i.goods.goods_id, 'value': i.count}) + elif i.goods.goods_type == x_type[1]: + c2 += 1 + gy10_lis[1] += i.profit_rate + gy20_lis[1] += i.kpi_rate + gy30_lis[1] += i.sales_num + gy40_lis[1] += i.return_rate + gyc0_lis[1] += i.count + dic2.append({'name': i.goods.goods_id, 'value': i.count}) + + elif i.goods.goods_type == x_type[2]: + c3 += 1 + gy10_lis[2] += i.profit_rate + gy20_lis[2] += i.kpi_rate + gy30_lis[2] += i.sales_num + gy40_lis[2] += i.return_rate + gyc0_lis[2] += i.count + dic3.append({'name': i.goods.goods_id, 'value': i.count}) + elif i.goods.goods_type == x_type[3]: + c4 += 1 + gy10_lis[3] += i.profit_rate + gy20_lis[3] += i.kpi_rate + gy30_lis[3] += i.sales_num + gy40_lis[3] += i.return_rate + gyc0_lis[3] += i.count + dic4.append({'name': i.goods.goods_id, 'value': i.count}) + elif i.goods.goods_type == x_type[4]: + c5 += 1 + gy10_lis[4] += i.profit_rate + gy20_lis[4] += i.kpi_rate + gy30_lis[4] += i.sales_num + gy40_lis[4] += i.return_rate + gyc0_lis[4] += i.count + dic5.append({'name': i.goods.goods_id, 'value': i.count}) + if c1 == 0: + c1 = 1 + if c2 == 0: + c2 = 1 + if c3 == 0: + c3 = 1 + if c4 == 0: + c4 = 1 + if c5 == 0: + c5 = 1 + dic0.append({'name': x_type[0], 'value': gyc0_lis[0]}) + dic0.append({'name': x_type[1], 'value': gyc0_lis[1]}) + dic0.append({'name': x_type[2], 'value': gyc0_lis[2]}) + dic0.append({'name': x_type[3], 'value': gyc0_lis[3]}) + dic0.append({'name': x_type[4], 'value': gyc0_lis[4]}) + gy10_lis[0] = gy10_lis[0] / c1 + gy10_lis[1] = gy10_lis[1] / c2 + gy10_lis[2] = gy10_lis[2] / c3 + gy10_lis[3] = gy10_lis[3] / c4 + gy10_lis[4] = gy10_lis[4] / c5 + + gy20_lis[0] = gy10_lis[0] / c1 + gy20_lis[1] = gy10_lis[1] / c2 + gy20_lis[2] = gy10_lis[2] / c3 + gy20_lis[3] = gy10_lis[3] / c4 + gy20_lis[4] = gy10_lis[4] / c5 + + gy40_lis[0] = gy10_lis[0] / c1 + gy40_lis[1] = gy10_lis[1] / c2 + gy40_lis[2] = gy10_lis[2] / c3 + gy40_lis[3] = gy10_lis[3] / c4 + gy40_lis[4] = gy10_lis[4] / c5 + + return render(request, '../templates/index.html', + {'s': s, 'x': x_lis, 'y': y_lis, 'si': si, 'gx_lis': gx_lis, 'gy1_lis': gy1_lis, + 'gy2_lis': gy2_lis, 'gy3_lis': gy3_lis, 'gy4_lis': gy4_lis, 'gyc_lis': gyc_lis, 'x_type': x_type, + 'gy10_lis': gy10_lis, 'gy20_lis': gy20_lis, 'gy30_lis': gy30_lis, 'gy40_lis': gy40_lis, + 'gyc0_lis': gyc0_lis + , 'dic1': dic1, 'dic2': dic2, 'dic3': dic3, 'dic4': dic4, 'dic5': dic5, 'dic0': dic0}) +def zb_yj(request): + ak=LiveRecord.objects.all() + zb=list(set([i.eid.eid.eid for i in ak])) + zbif=ZbInfo.objects.all() + od=OrderInfo.objects.all() + zblive=[] + zbname=[] + for i in zb: + lis=[] + for j in ak: + if j.eid.eid.eid == i: + lis.append(j.live_record_id) + zblive.append(lis) + for k in zbif: + if k.eid.eid == i: + zbname.append(k.zbname) + zbsum=[] + print(zbname) + print(zblive) + zb_sum=[] + for i in zblive: + sum=0 + for j in i: + for k in od: + if k.live_record_id == j : + sum+=k.sum_price + zb_sum.append(sum) + print(zb_sum) + diclis=[] + arr=['抖音','斗鱼','B站'] + for i in range(len(zb)): + dic={} + dic["id"]=zb[i] + dic['name']=zbname[i] + dic['sum']=zb_sum[i] + dic['rate']=random.random()*0.5 + dic['plat']=random.choice(arr) + diclis.append(dic) + return render(request,'../templates/index.html', {'dic':diclis}) diff --git a/system/login/views.py b/system/login/views.py index e3b59aa0a3a54243172e0597bd349e70af7f6c3e..457c44ea14aa65085fa8666368e17b352d3fc24e 100644 --- a/system/login/views.py +++ b/system/login/views.py @@ -1,3 +1,6 @@ +from collections import Counter + +import jieba from django.shortcuts import render # Create your views here. @@ -31,19 +34,15 @@ import queue from django.shortcuts import render import json from random import randrange + from django.http import HttpResponse from rest_framework.views import APIView + from pyecharts.charts import Line +from pyecharts import options as opts from pyecharts.charts import Bar from pyecharts.globals import ThemeType from pyecharts.faker import Faker -from django.views.generic import TemplateView -from django_htmx_refresh.mixins import HtmxResponseMixin -from wordcloud import WordCloud -import jieba -from collections import Counter -from pyecharts import options as opts -from pyecharts.charts import WordCloud ren4=queue.Queue() @@ -185,8 +184,8 @@ def my_view(request): class live: - def __init__(self,ID,path,record,live_nu,host,start,end): - global danmu5,danmu6,danmu7,danmu8,danmu4 + def __init__(self,ID,path,mod1,record,live_nu,host,start,end): + global danmu5, danmu6, danmu7, danmu8, danmu4 if ID==4: danmu4=[] ren4.queue.clear() @@ -212,6 +211,7 @@ class live: ren8.queue.clear() self.d = danmu8 self.ren = ren8 + self.mod1=mod1 self.record=record# 直播记录号 self.live_nu=live_nu#直播间号 self.host=host#主播号 @@ -251,15 +251,18 @@ class live: sec = 1 now = self.start re = self.record + lis = self._y() while (now < self.end): # 循环生成一个 ren={} ren['人数']=renshu ren['时间']=now.strftime("%Y-%m-%d %H:%M:%S") self.ren.put(ren) + print(renshu) + self.mod1.objects.create(tim=ren['时间'],peo=renshu) await asyncio.sleep(sec) - renshu=self._y(x) + renshu=lis[x] sec = 2 # 弹幕发送的随机间隔 - x=x+sec*20 + x=x+sec*2 now = now + timedelta(seconds=sec) @@ -317,11 +320,11 @@ class live: sequence.append(value) # append the value to the list return sequence # return the list - def _y(self,x): + def _y(self): lis1 = [random.randint(i, i + 5000) for i in range(0, 45000, 450)] lis2 = self.random_walk(3300) lis = lis1 + lis2 - return (lis[x]) + return (lis) # return ceil(random.uniform(0,1)*(5000-x)+randint(-500,300))#生成一个随机的y @@ -365,14 +368,14 @@ JsonResponse = json_response JsonError = json_error -def line_base() -> Line:##表示生成数据的函数,此时输入的是一个静态的数据 +def line_base4() -> Line:##表示生成数据的函数,此时输入的是一个静态的数据 line = ( Line() - .add_xaxis(list(range(10))) - .add_yaxis(series_name="", y_axis=[0 for _ in range(10)]) + .add_xaxis([]) + .add_yaxis(series_name="", y_axis=[]) .set_global_opts( - title_opts=opts.TitleOpts(title="直播间人气变化"), - xaxis_opts=opts.AxisOpts(type_="time"), + title_opts=opts.TitleOpts(title="直播间人数"), + xaxis_opts=opts.AxisOpts(type_="value"), yaxis_opts=opts.AxisOpts(type_="value") ) .dump_options_with_quotes() @@ -380,21 +383,144 @@ def line_base() -> Line:##表示生成数据的函数,此时输入的是一个 return line -class ChartView(APIView):##生成一个展示数据的,用于交互的json文件,导入html +class ChartView4(APIView):##生成一个展示数据的,用于交互的json文件,导入html def get(self, request, *args, **kwargs): - return JsonResponse(json.loads(line_base())) + return JsonResponse(json.loads(line_base4())) -class ChartUpdateView(APIView):#通过该函数进行动态输入 +class ChartUpdateView4(APIView):#通过该函数进行动态输入 def get(self, request, *args, **kwargs): - s=ren4.get() - print(s) - return JsonResponse({"name": s["时间"], "value": s["人数"]}) + s4=ren4.get() + #print(s) + return JsonResponse({"name": s4["时间"], "value": s4["人数"]}) -def home_page(request):#返回展示数据的模板 +def home_page4(request):#返回展示数据的模板 return render(request,'../templates/Pye_chart/test.html',{}) -def bar_base() -> Bar:##表示生成数据的函数,此时输入的是一个静态的数据 +def line_base5() -> Line:##表示生成数据的函数,此时输入的是一个静态的数据 + line = ( + Line() + .add_xaxis([]) + .add_yaxis(series_name="", y_axis=[]) + .set_global_opts( + title_opts=opts.TitleOpts(title="直播间人数"), + xaxis_opts=opts.AxisOpts(type_="value"), + yaxis_opts=opts.AxisOpts(type_="value") + ) + .dump_options_with_quotes() + ) + return line + + +class ChartView5(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(line_base5())) + + +class ChartUpdateView5(APIView):#通过该函数进行动态输入 + def get(self, request, *args, **kwargs): + s4=ren5.get() + #print(s) + return JsonResponse({"name": s4["时间"], "value": s4["人数"]}) + +def home_page5(request):#返回展示数据的模板 + return render(request,'../templates/Pye_chart/test5.html',{}) + +def line_base6() -> Line:##表示生成数据的函数,此时输入的是一个静态的数据 + line = ( + Line() + .add_xaxis([]) + .add_yaxis(series_name="", y_axis=[]) + .set_global_opts( + title_opts=opts.TitleOpts(title="直播间人数"), + xaxis_opts=opts.AxisOpts(type_="value"), + yaxis_opts=opts.AxisOpts(type_="value") + ) + .dump_options_with_quotes() + ) + return line + + +class ChartView6(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(line_base6())) + + +class ChartUpdateView6(APIView):#通过该函数进行动态输入 + def get(self, request, *args, **kwargs): + s4=ren6.get() + #print(s) + return JsonResponse({"name": s4["时间"], "value": s4["人数"]}) + +def home_page6(request):#返回展示数据的模板 + return render(request,'../templates/Pye_chart/test6.html',{}) + +def line_base7() -> Line:##表示生成数据的函数,此时输入的是一个静态的数据 + line = ( + Line() + .add_xaxis([]) + .add_yaxis(series_name="", y_axis=[]) + .set_global_opts( + title_opts=opts.TitleOpts(title="直播间人数"), + xaxis_opts=opts.AxisOpts(type_="value"), + yaxis_opts=opts.AxisOpts(type_="value") + ) + .dump_options_with_quotes() + ) + return line + + +class ChartView7(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(line_base7())) + + +class ChartUpdateView7(APIView):#通过该函数进行动态输入 + def get(self, request, *args, **kwargs): + s4=ren7.get() + #print(s) + return JsonResponse({"name": s4["时间"], "value": s4["人数"]}) + +def home_page7(request):#返回展示数据的模板 + return render(request,'../templates/Pye_chart/test7.html',{}) + +def line_base8() -> Line:##表示生成数据的函数,此时输入的是一个静态的数据 + line = ( + Line() + .add_xaxis([]) + .add_yaxis(series_name="", y_axis=[]) + .set_global_opts( + title_opts=opts.TitleOpts(title="直播间人数"), + xaxis_opts=opts.AxisOpts(type_="value"), + yaxis_opts=opts.AxisOpts(type_="value") + ) + .dump_options_with_quotes() + ) + return line + + +class ChartView8(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(line_base8())) + + +class ChartUpdateView8(APIView):#通过该函数进行动态输入 + def get(self, request, *args, **kwargs): + s4=ren8.get() + #print(s) + return JsonResponse({"name": s4["时间"], "value": s4["人数"]}) + +def home_page8(request):#返回展示数据的模板 + return render(request,'../templates/Pye_chart/test8.html',{}) + + + + + + + + +def bar_base4() -> Bar:##表示生成数据的函数,此时输入的是一个静态的数据 text="" le=len(danmu4) for i in range(le): @@ -422,11 +548,149 @@ def bar_base() -> Bar:##表示生成数据的函数,此时输入的是一个静 return bar -class ChartView_bar(APIView):##生成一个展示数据的,用于交互的json文件,导入html +class ChartView_bar4(APIView):##生成一个展示数据的,用于交互的json文件,导入html def get(self, request, *args, **kwargs): - return JsonResponse(json.loads(bar_base())) + return JsonResponse(json.loads(bar_base4())) -def bar_page(request):#返回展示数据的模板 +def bar_page4(request):#返回展示数据的模板 return render(request,'../templates/graph/test_graph_1.html',{}) +def bar_base5() -> Bar:##表示生成数据的函数,此时输入的是一个静态的数据 + text="" + le=len(danmu5) + for i in range(le): + text=text+danmu5.pop(0) + # 如果文本不为空,生成词云图并保存为图片文件 + words = jieba.lcut(text) + counter = Counter(words) + top10 = counter.most_common(10) + print(top10) + words = [item[0] for item in top10] # 提取词语 + freqs = [item[1] for item in top10] # 提取频数 + bar = ( + Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) + .add_xaxis(words) + .add_yaxis("词频", freqs, itemstyle_opts=opts.ItemStyleOpts(color="#00CD96")) # 自定义颜色 + .set_global_opts( + title_opts={"text": "弹幕关键词前10"}, + brush_opts=opts.BrushOpts(), # 设置操作图表的画笔功能 + toolbox_opts=opts.ToolboxOpts(), # 设置操作图表的工具箱功能 + yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="词频"), name="Y轴名称"), + # 设置Y轴名称、定制化刻度单位 + xaxis_opts=opts.AxisOpts(name="X轴名称"), ) # 设置X轴名称 + .dump_options_with_quotes() + ) + return bar + + +class ChartView_bar5(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(bar_base5())) + +def bar_page5(request):#返回展示数据的模板 + return render(request,'../templates/graph/test_graph_2.html',{}) + +def bar_base6() -> Bar:##表示生成数据的函数,此时输入的是一个静态的数据 + text="" + le=len(danmu6) + for i in range(le): + text=text+danmu6.pop(0) + # 如果文本不为空,生成词云图并保存为图片文件 + words = jieba.lcut(text) + counter = Counter(words) + top10 = counter.most_common(10) + print(top10) + words = [item[0] for item in top10] # 提取词语 + freqs = [item[1] for item in top10] # 提取频数 + bar = ( + Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) + .add_xaxis(words) + .add_yaxis("词频", freqs, itemstyle_opts=opts.ItemStyleOpts(color="#00CD96")) # 自定义颜色 + .set_global_opts( + title_opts={"text": "弹幕关键词前10"}, + brush_opts=opts.BrushOpts(), # 设置操作图表的画笔功能 + toolbox_opts=opts.ToolboxOpts(), # 设置操作图表的工具箱功能 + yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="词频"), name="Y轴名称"), + # 设置Y轴名称、定制化刻度单位 + xaxis_opts=opts.AxisOpts(name="X轴名称"), ) # 设置X轴名称 + .dump_options_with_quotes() + ) + return bar + + +class ChartView_bar6(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(bar_base6())) + +def bar_page6(request):#返回展示数据的模板 + return render(request,'../templates/graph/test_graph_3.html',{}) + +def bar_base7() -> Bar:##表示生成数据的函数,此时输入的是一个静态的数据 + text="" + le=len(danmu7) + for i in range(le): + text=text+danmu7.pop(0) + # 如果文本不为空,生成词云图并保存为图片文件 + words = jieba.lcut(text) + counter = Counter(words) + top10 = counter.most_common(10) + print(top10) + words = [item[0] for item in top10] # 提取词语 + freqs = [item[1] for item in top10] # 提取频数 + bar = ( + Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) + .add_xaxis(words) + .add_yaxis("词频", freqs, itemstyle_opts=opts.ItemStyleOpts(color="#00CD96")) # 自定义颜色 + .set_global_opts( + title_opts={"text": "弹幕关键词前10"}, + brush_opts=opts.BrushOpts(), # 设置操作图表的画笔功能 + toolbox_opts=opts.ToolboxOpts(), # 设置操作图表的工具箱功能 + yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="词频"), name="Y轴名称"), + # 设置Y轴名称、定制化刻度单位 + xaxis_opts=opts.AxisOpts(name="X轴名称"), ) # 设置X轴名称 + .dump_options_with_quotes() + ) + return bar + + +class ChartView_bar7(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(bar_base7())) + +def bar_page7(request):#返回展示数据的模板 + return render(request,'../templates/graph/test_graph_4.html',{}) + +def bar_base8() -> Bar:##表示生成数据的函数,此时输入的是一个静态的数据 + text="" + le=len(danmu8) + for i in range(le): + text=text+danmu8.pop(0) + # 如果文本不为空,生成词云图并保存为图片文件 + words = jieba.lcut(text) + counter = Counter(words) + top10 = counter.most_common(10) + print(top10) + words = [item[0] for item in top10] # 提取词语 + freqs = [item[1] for item in top10] # 提取频数 + bar = ( + Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) + .add_xaxis(words) + .add_yaxis("词频", freqs, itemstyle_opts=opts.ItemStyleOpts(color="#00CD96")) # 自定义颜色 + .set_global_opts( + title_opts={"text": "弹幕关键词前10"}, + brush_opts=opts.BrushOpts(), # 设置操作图表的画笔功能 + toolbox_opts=opts.ToolboxOpts(), # 设置操作图表的工具箱功能 + yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="词频"), name="Y轴名称"), + # 设置Y轴名称、定制化刻度单位 + xaxis_opts=opts.AxisOpts(name="X轴名称"), ) # 设置X轴名称 + .dump_options_with_quotes() + ) + return bar + + +class ChartView_bar8(APIView):##生成一个展示数据的,用于交互的json文件,导入html + def get(self, request, *args, **kwargs): + return JsonResponse(json.loads(bar_base8())) +def bar_page8(request):#返回展示数据的模板 + return render(request,'../templates/graph/test_graph_5.html',{}) \ No newline at end of file diff --git a/system/templates/Pye_chart/sales_index_movement.html b/system/templates/Pye_chart/sales_index_movement.html index 713d718ca89f498bc4edca1d14e43c3909b72bae..d2601cdeb38de0b8c42dd05e5e485552070d8ab0 100644 --- a/system/templates/Pye_chart/sales_index_movement.html +++ b/system/templates/Pye_chart/sales_index_movement.html @@ -8,11 +8,13 @@
- + +