From ac2bbc62e902713710c0f7f3402700d1ea6d0ae3 Mon Sep 17 00:00:00 2001 From: Hongyan Liu Date: Fri, 26 May 2023 16:52:56 +0800 Subject: [PATCH 01/20] =?UTF-8?q?=E9=94=80=E5=94=AE=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E4=B8=9A=E7=BB=A9=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 50 +-- system/LiveStream/models.py | 169 +-------- system/LiveStream/settings.py | 10 +- system/login/models.py | 430 +---------------------- system/login/tests.py | 3 + system/login/urls.py | 8 +- system/login/view1.py | 35 +- system/login/views.py | 69 +--- system/templates/Pye_chart/test.html | 28 +- system/templates/graph/test_graph_1.html | 240 ++++++++++--- system/templates/index.html | 104 ++++-- system/templates/live-info.html | 20 +- system/templates/login.html | 13 +- 13 files changed, 341 insertions(+), 838 deletions(-) diff --git a/README.txt b/README.txt index 892bf9b..ea0c4db 100644 --- a/README.txt +++ b/README.txt @@ -114,52 +114,4 @@ Django服务器接收到客户端发送过来的请求后,会将提交上来 https://www.jianshu.com/p/7a0718e07068--介绍response https://blog.csdn.net/qq_45261963/article/details/123981719--APIview -在body后的style里设置尺寸 - -{% csrf_token %}数据库调用的安全认证 - - 方法名称中 "Id" 的大小写必须正确才能使代码正常运行;getElementByID() 是无效且无法正常运行的,无论它看起来是多么自然。 - - getOption()这个方法是把数据克隆了一份,所以直接修改是没有效果的 -setOption()这个方法就可以直接修改图表里的数据并且会有效果 -test.html使用的echart的方法 - -https://echarts.apache.org/handbook/zh/get-started -动态图逻辑,通过函数生成js数据格式,再将js数据格式传入javascript写法的echart生成图表文件中 -对应的option值方法,echart.js是一些方法的集合吧,包含echart功能的文件,test.html是一个图表 - var option = { - title: { - text: 'ECharts 入门示例' - }, - tooltip: {}, - legend: { - data: ['销量'] - }, - xAxis: { - data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'] - }, - yAxis: {}, - series: [ - { - name: '销量', - type: 'bar', - data: [5, 20, 36, 10, 10, 20] - } - ] - }; - - pyechart生成的js格式的echart - - os.environ['DJANGO_ALLOW_ASYNC_UNSAFE'] = 'true'增加异步调用 - module_dir = os.path.dirname(__file__) -path = os.path.join(module_dir, '飞天狙想要努力变胖.csv')使得view函数可以调用本地文件 - -document.getElementById("GetStartTime").value - -Django学习报错之Cannot assign ... must be a ... instance - -ZBJ1235 ZB12346 ZBJJL1234567902 2023-05-25 21:36:00 2023-05-25 23:36:00 - -USE_TZ = False防止时区上的报错 - -''.join(random.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',10))生成随机序列 \ No newline at end of file +在body后的style里设置尺寸 \ No newline at end of file diff --git a/system/LiveStream/models.py b/system/LiveStream/models.py index c47066e..3965efd 100644 --- a/system/LiveStream/models.py +++ b/system/LiveStream/models.py @@ -8,75 +8,6 @@ from django.db import models -class AuthGroup(models.Model): - name = models.CharField(unique=True, max_length=150) - - class Meta: - managed = False - db_table = 'auth_group' - - -class AuthGroupPermissions(models.Model): - id = models.BigAutoField(primary_key=True) - group = models.ForeignKey(AuthGroup, models.DO_NOTHING) - permission = models.ForeignKey('AuthPermission', models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'auth_group_permissions' - unique_together = (('group', 'permission'),) - - -class AuthPermission(models.Model): - name = models.CharField(max_length=255) - content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING) - codename = models.CharField(max_length=100) - - class Meta: - managed = False - db_table = 'auth_permission' - unique_together = (('content_type', 'codename'),) - - -class AuthUser(models.Model): - password = models.CharField(max_length=128) - last_login = models.DateTimeField(blank=True, null=True) - is_superuser = models.IntegerField() - username = models.CharField(unique=True, max_length=150) - first_name = models.CharField(max_length=150) - last_name = models.CharField(max_length=150) - email = models.CharField(max_length=254) - is_staff = models.IntegerField() - is_active = models.IntegerField() - date_joined = models.DateTimeField() - - class Meta: - managed = False - db_table = 'auth_user' - - -class AuthUserGroups(models.Model): - id = models.BigAutoField(primary_key=True) - user = models.ForeignKey(AuthUser, models.DO_NOTHING) - group = models.ForeignKey(AuthGroup, models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'auth_user_groups' - unique_together = (('user', 'group'),) - - -class AuthUserUserPermissions(models.Model): - id = models.BigAutoField(primary_key=True) - user = models.ForeignKey(AuthUser, models.DO_NOTHING) - permission = models.ForeignKey(AuthPermission, models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'auth_user_user_permissions' - unique_together = (('user', 'permission'),) - - class BackgroundEmp(models.Model): eid = models.OneToOneField('EmployeeInfo', models.DO_NOTHING, db_column='eid', primary_key=True) bge_name = models.CharField(max_length=10, blank=True, null=True) @@ -100,7 +31,13 @@ class CollectingNotes(models.Model): db_table = 'collecting_notes' +class CustomerInfo(models.Model): + cid = models.CharField(primary_key=True, max_length=20) + clevel = models.CharField(max_length=10, blank=True, null=True) + class Meta: + managed = False + db_table = 'customer_info' class Danmu(models.Model): @@ -115,51 +52,6 @@ class Danmu(models.Model): db_table = 'danmu' -class DjangoAdminLog(models.Model): - action_time = models.DateTimeField() - object_id = models.TextField(blank=True, null=True) - object_repr = models.CharField(max_length=200) - action_flag = models.PositiveSmallIntegerField() - change_message = models.TextField() - content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING, blank=True, null=True) - user = models.ForeignKey(AuthUser, models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'django_admin_log' - - -class DjangoContentType(models.Model): - app_label = models.CharField(max_length=100) - model = models.CharField(max_length=100) - - class Meta: - managed = False - db_table = 'django_content_type' - unique_together = (('app_label', 'model'),) - - -class DjangoMigrations(models.Model): - id = models.BigAutoField(primary_key=True) - app = models.CharField(max_length=255) - name = models.CharField(max_length=255) - applied = models.DateTimeField() - - class Meta: - managed = False - db_table = 'django_migrations' - - -class DjangoSession(models.Model): - session_key = models.CharField(primary_key=True, max_length=40) - session_data = models.TextField() - expire_date = models.DateTimeField() - - class Meta: - managed = False - db_table = 'django_session' - - class EmployeeInfo(models.Model): eid = models.CharField(primary_key=True, max_length=10) ename = models.CharField(max_length=10, blank=True, null=True) @@ -202,51 +94,6 @@ class Inventory(models.Model): unique_together = (('inv', 'goods'),) -class Jbj4_Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj4_renqi' - - -class Jbj5_Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj5_renqi' - - -class Jbj6_Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj6_renqi' - - -class Jbj_7Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj7_renqi' - - -class Jbj8_Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj8_renqi' - - class LiveRecord(models.Model): live_record_id = models.CharField(primary_key=True, max_length=20) liveroom = models.ForeignKey('LiveroomInfo', models.DO_NOTHING) @@ -296,7 +143,7 @@ class OrderDetails(models.Model): class OrderInfo(models.Model): order_id = models.CharField(primary_key=True, max_length=25) live_record = models.ForeignKey(LiveRecord, models.DO_NOTHING) - cid = models.CharField(max_length=10, blank=True, null=True) + cid = models.ForeignKey(CustomerInfo, models.DO_NOTHING, db_column='cid') eid = models.ForeignKey('SalesInfo', models.DO_NOTHING, db_column='eid') order_time = models.DateTimeField(blank=True, null=True) address = models.CharField(max_length=100, blank=True, null=True) @@ -419,7 +266,7 @@ class SalesInfo(models.Model): class SalesPerformance(models.Model): sales_performance = models.IntegerField(blank=True, null=True) performance_rank = models.IntegerField(blank=True, null=True) - performance_month = models.DateTimeField(primary_key=True) # The composite primary key (performance_month, eid) found, that is not supported. The first column is selected. + 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: diff --git a/system/LiveStream/settings.py b/system/LiveStream/settings.py index 646ea9c..e05f641 100644 --- a/system/LiveStream/settings.py +++ b/system/LiveStream/settings.py @@ -16,7 +16,6 @@ import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent -os.environ['DJANGO_ALLOW_ASYNC_UNSAFE'] = 'true' # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ @@ -85,12 +84,9 @@ DATABASES = { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'livestream', 'USER': 'root', - 'PASSWORD': '123456', + 'PASSWORD': 'fantasticbaby250', 'HOST': 'localhost', - 'PORT': '3306', - 'TEST': { - 'NAME': 'django_db_test' # 用于单元测试的数据库 - } + 'PORT': '3306' } } @@ -123,7 +119,7 @@ TIME_ZONE = 'Asia/Shanghai' USE_I18N = True -USE_TZ = False +USE_TZ = True # Static files (CSS, JavaScript, Images) diff --git a/system/login/models.py b/system/login/models.py index 8fe3ad0..d5783ab 100644 --- a/system/login/models.py +++ b/system/login/models.py @@ -1,384 +1,25 @@ -# This is an auto-generated Django model module. -# You'll have to do the following manually to clean this up: -# * Rearrange models' order -# * Make sure each model has one field with primary_key=True -# * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior -# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table -# Feel free to rename the models, but don't rename db_table values or field names. from django.db import models - -class AuthGroup(models.Model): - name = models.CharField(unique=True, max_length=150) - - class Meta: - managed = False - db_table = 'auth_group' - - -class AuthGroupPermissions(models.Model): - id = models.BigAutoField(primary_key=True) - group = models.ForeignKey(AuthGroup, models.DO_NOTHING) - permission = models.ForeignKey('AuthPermission', models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'auth_group_permissions' - unique_together = (('group', 'permission'),) - - -class AuthPermission(models.Model): - name = models.CharField(max_length=255) - content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING) - codename = models.CharField(max_length=100) - - class Meta: - managed = False - db_table = 'auth_permission' - unique_together = (('content_type', 'codename'),) - - -class AuthUser(models.Model): - password = models.CharField(max_length=128) - last_login = models.DateTimeField(blank=True, null=True) - is_superuser = models.IntegerField() - username = models.CharField(unique=True, max_length=150) - first_name = models.CharField(max_length=150) - last_name = models.CharField(max_length=150) - email = models.CharField(max_length=254) - is_staff = models.IntegerField() - is_active = models.IntegerField() - date_joined = models.DateTimeField() - - class Meta: - managed = False - db_table = 'auth_user' - - -class AuthUserGroups(models.Model): - id = models.BigAutoField(primary_key=True) - user = models.ForeignKey(AuthUser, models.DO_NOTHING) - group = models.ForeignKey(AuthGroup, models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'auth_user_groups' - unique_together = (('user', 'group'),) - - -class AuthUserUserPermissions(models.Model): - id = models.BigAutoField(primary_key=True) - user = models.ForeignKey(AuthUser, models.DO_NOTHING) - permission = models.ForeignKey(AuthPermission, models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'auth_user_user_permissions' - unique_together = (('user', 'permission'),) - - -class BackgroundEmp(models.Model): - eid = models.OneToOneField('EmployeeInfo', models.DO_NOTHING, db_column='eid', primary_key=True) - bge_name = models.CharField(max_length=10, blank=True, null=True) - bge_duty = models.CharField(max_length=10, blank=True, null=True) - login_status = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'background_emp' - - -class CollectingNotes(models.Model): - collect_id = models.CharField(primary_key=True, max_length=20) - recv = models.ForeignKey('Receivables', models.DO_NOTHING) - collect_name = models.CharField(max_length=20, blank=True, null=True) - collect_way = models.CharField(max_length=20, blank=True, null=True) - collect_num = models.FloatField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'collecting_notes' - - -class Danmu(models.Model): - dm_id = models.CharField(primary_key=True, max_length=25) - live_record = models.ForeignKey('LiveRecord', models.DO_NOTHING) - user_name = models.CharField(max_length=50, blank=True, null=True) - send_time = models.DateTimeField(blank=True, null=True) - send_text = models.CharField(max_length=256, blank=True, null=True) - - class Meta: - managed = False - db_table = 'danmu' - - -class DjangoAdminLog(models.Model): - action_time = models.DateTimeField() - object_id = models.TextField(blank=True, null=True) - object_repr = models.CharField(max_length=200) - action_flag = models.PositiveSmallIntegerField() - change_message = models.TextField() - content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING, blank=True, null=True) - user = models.ForeignKey(AuthUser, models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'django_admin_log' - - -class DjangoContentType(models.Model): - app_label = models.CharField(max_length=100) - model = models.CharField(max_length=100) - - class Meta: - managed = False - db_table = 'django_content_type' - unique_together = (('app_label', 'model'),) - - -class DjangoMigrations(models.Model): - id = models.BigAutoField(primary_key=True) - app = models.CharField(max_length=255) - name = models.CharField(max_length=255) - applied = models.DateTimeField() - - class Meta: - managed = False - db_table = 'django_migrations' - - -class DjangoSession(models.Model): - session_key = models.CharField(primary_key=True, max_length=40) - session_data = models.TextField() - expire_date = models.DateTimeField() - - class Meta: - managed = False - db_table = 'django_session' - - -class EmployeeInfo(models.Model): +class EmployeeInfo(models.Model):#Ա eid = models.CharField(primary_key=True, max_length=10) ename = models.CharField(max_length=10, blank=True, null=True) psword = models.CharField(max_length=20, blank=True, null=True) etype = models.CharField(max_length=20, blank=True, null=True) class Meta: - managed = False + managed = True db_table = 'employee_info' -class GoodsInfo(models.Model): - goods_id = models.CharField(primary_key=True, max_length=10) - goods_name = models.CharField(max_length=20, blank=True, null=True) - goods_type = models.CharField(max_length=20, blank=True, null=True) - gprice = models.FloatField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'goods_info' - - -class GoodsInv(models.Model): - inv_id = models.CharField(primary_key=True, max_length=10) - eid = models.ForeignKey('StockAdmin', models.DO_NOTHING, db_column='eid') - inv_time = models.DateTimeField() - - class Meta: - managed = False - db_table = 'goods_inv' - - -class Inventory(models.Model): - inv = models.OneToOneField(GoodsInv, models.DO_NOTHING, primary_key=True) # The composite primary key (inv_id, goods_id) found, that is not supported. The first column is selected. - goods = models.ForeignKey('StockInfo', models.DO_NOTHING) - - class Meta: - managed = False - db_table = 'inventory' - unique_together = (('inv', 'goods'),) - - -class Jbj4Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj4_renqi' - - -class Jbj5Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj5_renqi' - - -class Jbj6Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj6_renqi' - - -class Jbj7Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj7_renqi' - - -class Jbj8Renqi(models.Model): - tim = models.DateTimeField(blank=True, null=True) - peo = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'jbj8_renqi' - - -class LiveRecord(models.Model): - live_record_id = models.CharField(primary_key=True, max_length=20) - liveroom = models.ForeignKey('LiveroomInfo', models.DO_NOTHING) - eid = models.ForeignKey('ZbInfo', models.DO_NOTHING, db_column='eid') - live_starttime = models.DateTimeField(blank=True, null=True) - live_endtime = models.DateTimeField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'live_record' - - -class LiveroomInfo(models.Model): - liveroom_id = models.CharField(primary_key=True, max_length=10) - liveroom_status = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'liveroom_info' - - - -class OrderDetails(models.Model): - order = models.OneToOneField('OrderInfo', models.DO_NOTHING, primary_key=True) # 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) - goods_num = models.IntegerField(blank=True, null=True) - - class Meta: - managed = False - db_table = 'order_details' - unique_together = (('order', 'goods'),) - - -class OrderInfo(models.Model): - order_id = models.CharField(primary_key=True, max_length=25) - live_record = models.ForeignKey(LiveRecord, models.DO_NOTHING) - cid = models.CharField(max_length=20) - eid = models.ForeignKey('SalesInfo', models.DO_NOTHING, db_column='eid') - order_time = models.DateTimeField(blank=True, null=True) - address = models.CharField(max_length=100, blank=True, null=True) - sum_price = models.FloatField(blank=True, null=True) - process_status = models.CharField(max_length=10, blank=True, null=True) - - class Meta: - managed = False - db_table = 'order_info' - - -class ProcureAdmin(models.Model): +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 + managed = True 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.DateTimeField() - - class Meta: - managed = False - db_table = 'sales_index' - unique_together = (('goods', 'index_month'),) - - -class SalesInfo(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) @@ -389,20 +30,7 @@ class SalesInfo(models.Model): 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.DateTimeField(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): +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) @@ -410,40 +38,7 @@ class StockAdmin(models.Model): 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): +class ZbInfo(models.Model):# eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True) zbname = models.CharField(max_length=10, blank=True, null=True) zblevel = models.CharField(max_length=1024, blank=True, null=True) @@ -452,3 +47,14 @@ class ZbInfo(models.Model): class Meta: managed = False db_table = 'zb_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'),) diff --git a/system/login/tests.py b/system/login/tests.py index e69de29..7ce503c 100644 --- a/system/login/tests.py +++ b/system/login/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/system/login/urls.py b/system/login/urls.py index ae14566..67d316b 100644 --- a/system/login/urls.py +++ b/system/login/urls.py @@ -2,6 +2,7 @@ from django.urls import path 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,8 +11,7 @@ urlpatterns = [ path('index1/', views.index_1, name='index1'), path('register/', views.register, name='register'), path('create/', views.create, name='create'), - url(r'^bar/$', view1.ChartView_bar.as_view(), name='i_graph1'), - path('i_graph1/', view1.bar_page, name='i_graph1'), + path('i_graph1/', views.index_graph1, name='i_graph1'), path('index1/Proc_index/', views.proc_index, name='proc_index'), path('index1/Sales_index/', views.sale_index, name='sale_index'), path('index1/Warehouse_index/', views.Warehouse_index, name='warehouse_index'), @@ -19,6 +19,8 @@ urlpatterns = [ url(r'^line/$', view1.ChartView.as_view(), name='demo'), url(r'^lineUpdate/$', view1.ChartUpdateView.as_view(), name='demo'), url(r'^line_test/$', view1.home_page, name='demo'), - path('index1/tim/', views.time, name='tim'), + url(r'^rank/$',view2.table_sales_rank,name='sa_rank'), + #url(r'^sales_bar_pic/$',view2.BarView.as_view(),name='sale_bar'), + #url(r'^sales_bar_index/$',view2.IndexView.as_view(),name='bar_ind') ] diff --git a/system/login/view1.py b/system/login/view1.py index 40f32b0..36a1671 100644 --- a/system/login/view1.py +++ b/system/login/view1.py @@ -5,12 +5,9 @@ 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 pyecharts.charts import Bar -from pyecharts.commons.utils import JsCode -from pyecharts.globals import ThemeType -from pyecharts.faker import Faker # Create your views here. @@ -66,41 +63,13 @@ class ChartView(APIView):##生成一个展示数据的,用于交互的json文 def get(self, request, *args, **kwargs): return JsonResponse(json.loads(line_base())) -cnt = 9 +cnt = 1 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/views.py b/system/login/views.py index 19d0958..cbaf9bf 100644 --- a/system/login/views.py +++ b/system/login/views.py @@ -5,15 +5,6 @@ from django.shortcuts import render from django.shortcuts import render from django.http import HttpResponse from .models import * -from .virtual import live -import asyncio -import os -from django.contrib import messages -from django.http import HttpResponseRedirect -from django.urls import reverse - -module_dir = os.path.dirname(__file__) -path = os.path.join(module_dir, '飞天狙想要努力变胖.csv') def index_1(request): res={}##填入方框的数据 @@ -72,61 +63,7 @@ def Warehouse_index(request): return render(request, '../templates/Warehouse/index.html') def Stream_info(request): - itemid=0 - sql_cmd = "select live_record_id from live_record order by live_record_id" - for item in LiveRecord.objects.raw(sql_cmd): - itemid = int(item.live_record_id[5:]) - itemid += 1 - return render(request, '../templates/live-info.html', {"record_id": itemid}) -def time(request): - if request.method == 'POST': - res = {} - live_id = request.POST['liveroom_id'] - eid = request.POST['eid'] - start = " ".join(request.POST['live_starttime'].split("T"))+":00" - end = " ".join(request.POST['live_endtime'].split("T"))+":00" - record_id = request.POST['live_record_id'] - print(f"{ live_id} {eid} {record_id} {start} {end}") - if live_id=='ZBJ1234': - Jbj4Renqi.objects.all().delete()#将表内数据清空 - j4=live(path,Jbj4Renqi,Danmu,OrderInfo,OrderDetails,GoodsInfo,record_id,live_id,eid,start,end) - asyncio.run(j4.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - elif live_id == 'ZBJ1235': - Jbj5Renqi.objects.all().delete() - j5 = live(path,Jbj5Renqi, Danmu, OrderInfo,OrderDetails,GoodsInfo,record_id, live_id, eid, start, end) - asyncio.run(j5.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - - elif live_id == 'ZBJ1236': - Jbj6Renqi.objects.all().delete() - j6 = live(path,Jbj6Renqi, Danmu, OrderInfo,OrderDetails,GoodsInfo,record_id, live_id, eid, start, end) - asyncio.run(j6.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - - elif live_id == 'ZBJ1237': - Jbj7Renqi.objects.all().delete() - j7 = live(path,Jbj7Renqi, Danmu, OrderInfo,OrderDetails,GoodsInfo,record_id, live_id, eid, start, end) - asyncio.run(j7.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - elif live_id == 'ZBJ1238': - Jbj8Renqi.objects.all().delete() - j8 = live(path,Jbj8Renqi, Danmu, OrderInfo,OrderDetails,GoodsInfo,record_id, live_id, eid, start, end) - asyncio.run(j8.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - - else: - res={} - res['rlt']="抱歉,不存在该直播间" - return render(request,"../templates/live-info.html",res) + return render(request, '../templates/live-info.html') +def index_graph1(request): + return render(request,'../templates/graph/test_graph_1.html') diff --git a/system/templates/Pye_chart/test.html b/system/templates/Pye_chart/test.html index 67c9411..9f4c79a 100644 --- a/system/templates/Pye_chart/test.html +++ b/system/templates/Pye_chart/test.html @@ -8,25 +8,25 @@ -
+
- + Awesome-pyecharts + -
+
diff --git a/system/templates/index.html b/system/templates/index.html index 9911353..80feeb5 100644 --- a/system/templates/index.html +++ b/system/templates/index.html @@ -222,6 +222,45 @@ +
+ + +
+
+ {% csrf_token %} +
+ +
+
+ +
+
+
+ +

销售排名

+
+ + + + + + + + + {% for i in s %} + + + + + {% endfor %} + + +
销售人员工号排名
{{i.eid.eid}}{{i.performance_rank}}
+
+ +
+
+
@@ -282,23 +321,22 @@
-

今日直播间

+

直播间概况

- + @@ -336,7 +374,7 @@
-
+
@@ -352,27 +390,10 @@ +
-
-
-
-
-
-
-
-
-
-
-
-

直播间销售商品占比

- -
- -
@@ -408,7 +429,34 @@ - + + + - {% endif %}
@@ -205,10 +196,9 @@ } } - + + + + +
+ + + -- Gitee From f7f8073d68b93b906ac8d4ef0a7a02865606a2ec Mon Sep 17 00:00:00 2001 From: Hongyan Liu Date: Sat, 27 May 2023 11:59:25 +0800 Subject: [PATCH 03/20] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=A1=A5=E4=BA=A4?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=94=80=E5=94=AE=E4=B8=9A=E7=BB=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/LiveStream/model.py | 2 +- system/login/models.py | 430 ++++++++++++++++++++++++++++++++++-- system/login/urls.py | 7 +- system/templates/index.html | 166 +++++++------- 4 files changed, 507 insertions(+), 98 deletions(-) diff --git a/system/LiveStream/model.py b/system/LiveStream/model.py index 388d716..4747e56 100644 --- a/system/LiveStream/model.py +++ b/system/LiveStream/model.py @@ -416,7 +416,7 @@ class SalesInfo(models.Model): class SalesPerformance(models.Model): sales_performance = models.IntegerField(blank=True, null=True) performance_rank = models.IntegerField(blank=True, null=True) - performance_month = models.DateTimeField(primary_key=True) # The composite primary key (performance_month, eid) found, that is not supported. The first column is selected. + 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: diff --git a/system/login/models.py b/system/login/models.py index d5783ab..275fe20 100644 --- a/system/login/models.py +++ b/system/login/models.py @@ -1,25 +1,384 @@ +# This is an auto-generated Django model module. +# You'll have to do the following manually to clean this up: +# * Rearrange models' order +# * Make sure each model has one field with primary_key=True +# * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior +# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table +# Feel free to rename the models, but don't rename db_table values or field names. from django.db import models -class EmployeeInfo(models.Model):#Ա + +class AuthGroup(models.Model): + name = models.CharField(unique=True, max_length=150) + + class Meta: + managed = False + db_table = 'auth_group' + + +class AuthGroupPermissions(models.Model): + id = models.BigAutoField(primary_key=True) + group = models.ForeignKey(AuthGroup, models.DO_NOTHING) + permission = models.ForeignKey('AuthPermission', models.DO_NOTHING) + + class Meta: + managed = False + db_table = 'auth_group_permissions' + unique_together = (('group', 'permission'),) + + +class AuthPermission(models.Model): + name = models.CharField(max_length=255) + content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING) + codename = models.CharField(max_length=100) + + class Meta: + managed = False + db_table = 'auth_permission' + unique_together = (('content_type', 'codename'),) + + +class AuthUser(models.Model): + password = models.CharField(max_length=128) + last_login = models.DateTimeField(blank=True, null=True) + is_superuser = models.IntegerField() + username = models.CharField(unique=True, max_length=150) + first_name = models.CharField(max_length=150) + last_name = models.CharField(max_length=150) + email = models.CharField(max_length=254) + is_staff = models.IntegerField() + is_active = models.IntegerField() + date_joined = models.DateTimeField() + + class Meta: + managed = False + db_table = 'auth_user' + + +class AuthUserGroups(models.Model): + id = models.BigAutoField(primary_key=True) + user = models.ForeignKey(AuthUser, models.DO_NOTHING) + group = models.ForeignKey(AuthGroup, models.DO_NOTHING) + + class Meta: + managed = False + db_table = 'auth_user_groups' + unique_together = (('user', 'group'),) + + +class AuthUserUserPermissions(models.Model): + id = models.BigAutoField(primary_key=True) + user = models.ForeignKey(AuthUser, models.DO_NOTHING) + permission = models.ForeignKey(AuthPermission, models.DO_NOTHING) + + class Meta: + managed = False + db_table = 'auth_user_user_permissions' + unique_together = (('user', 'permission'),) + + +class BackgroundEmp(models.Model): + eid = models.OneToOneField('EmployeeInfo', models.DO_NOTHING, db_column='eid', primary_key=True) + bge_name = models.CharField(max_length=10, blank=True, null=True) + bge_duty = models.CharField(max_length=10, blank=True, null=True) + login_status = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'background_emp' + + +class CollectingNotes(models.Model): + collect_id = models.CharField(primary_key=True, max_length=20) + recv = models.ForeignKey('Receivables', models.DO_NOTHING) + collect_name = models.CharField(max_length=20, blank=True, null=True) + collect_way = models.CharField(max_length=20, blank=True, null=True) + collect_num = models.FloatField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'collecting_notes' + + +class Danmu(models.Model): + dm_id = models.CharField(primary_key=True, max_length=25) + live_record = models.ForeignKey('LiveRecord', models.DO_NOTHING) + user_name = models.CharField(max_length=50, blank=True, null=True) + send_time = models.DateTimeField(blank=True, null=True) + send_text = models.CharField(max_length=256, blank=True, null=True) + + class Meta: + managed = False + db_table = 'danmu' + + +class DjangoAdminLog(models.Model): + action_time = models.DateTimeField() + object_id = models.TextField(blank=True, null=True) + object_repr = models.CharField(max_length=200) + action_flag = models.PositiveSmallIntegerField() + change_message = models.TextField() + content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING, blank=True, null=True) + user = models.ForeignKey(AuthUser, models.DO_NOTHING) + + class Meta: + managed = False + db_table = 'django_admin_log' + + +class DjangoContentType(models.Model): + app_label = models.CharField(max_length=100) + model = models.CharField(max_length=100) + + class Meta: + managed = False + db_table = 'django_content_type' + unique_together = (('app_label', 'model'),) + + +class DjangoMigrations(models.Model): + id = models.BigAutoField(primary_key=True) + app = models.CharField(max_length=255) + name = models.CharField(max_length=255) + applied = models.DateTimeField() + + class Meta: + managed = False + db_table = 'django_migrations' + + +class DjangoSession(models.Model): + session_key = models.CharField(primary_key=True, max_length=40) + session_data = models.TextField() + expire_date = models.DateTimeField() + + class Meta: + managed = False + db_table = 'django_session' + + +class EmployeeInfo(models.Model): eid = models.CharField(primary_key=True, max_length=10) ename = models.CharField(max_length=10, blank=True, null=True) psword = models.CharField(max_length=20, blank=True, null=True) etype = models.CharField(max_length=20, blank=True, null=True) class Meta: - managed = True + managed = False db_table = 'employee_info' -class ProcureAdmin(models.Model):#ɹԱ +class GoodsInfo(models.Model): + goods_id = models.CharField(primary_key=True, max_length=10) + goods_name = models.CharField(max_length=20, blank=True, null=True) + goods_type = models.CharField(max_length=20, blank=True, null=True) + gprice = models.FloatField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'goods_info' + + +class GoodsInv(models.Model): + inv_id = models.CharField(primary_key=True, max_length=10) + eid = models.ForeignKey('StockAdmin', models.DO_NOTHING, db_column='eid') + inv_time = models.DateTimeField() + + class Meta: + managed = False + db_table = 'goods_inv' + + +class Inventory(models.Model): + inv = models.OneToOneField(GoodsInv, models.DO_NOTHING, primary_key=True) # The composite primary key (inv_id, goods_id) found, that is not supported. The first column is selected. + goods = models.ForeignKey('StockInfo', models.DO_NOTHING) + + class Meta: + managed = False + db_table = 'inventory' + unique_together = (('inv', 'goods'),) + + +class Jbj4Renqi(models.Model): + tim = models.DateTimeField(blank=True, null=True) + peo = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'jbj4_renqi' + + +class Jbj5Renqi(models.Model): + tim = models.DateTimeField(blank=True, null=True) + peo = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'jbj5_renqi' + + +class Jbj6Renqi(models.Model): + tim = models.DateTimeField(blank=True, null=True) + peo = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'jbj6_renqi' + + +class Jbj7Renqi(models.Model): + tim = models.DateTimeField(blank=True, null=True) + peo = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'jbj7_renqi' + + +class Jbj8Renqi(models.Model): + tim = models.DateTimeField(blank=True, null=True) + peo = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'jbj8_renqi' + + +class LiveRecord(models.Model): + live_record_id = models.CharField(primary_key=True, max_length=20) + liveroom = models.ForeignKey('LiveroomInfo', models.DO_NOTHING) + eid = models.ForeignKey('ZbInfo', models.DO_NOTHING, db_column='eid') + live_starttime = models.DateTimeField(blank=True, null=True) + live_endtime = models.DateTimeField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'live_record' + + +class LiveroomInfo(models.Model): + liveroom_id = models.CharField(primary_key=True, max_length=10) + liveroom_status = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'liveroom_info' + + + +class OrderDetails(models.Model): + order = models.OneToOneField('OrderInfo', models.DO_NOTHING, primary_key=True) # 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) + goods_num = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'order_details' + unique_together = (('order', 'goods'),) + + +class OrderInfo(models.Model): + order_id = models.CharField(primary_key=True, max_length=25) + live_record = models.ForeignKey(LiveRecord, models.DO_NOTHING) + cid = models.CharField(max_length=20) + eid = models.ForeignKey('SalesInfo', models.DO_NOTHING, db_column='eid') + order_time = models.DateTimeField(blank=True, null=True) + address = models.CharField(max_length=100, blank=True, null=True) + sum_price = models.FloatField(blank=True, null=True) + process_status = models.CharField(max_length=10, blank=True, null=True) + + class Meta: + managed = False + 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 = True + managed = False db_table = 'procure_admin' -class SalesInfo(models.Model):#Ա + +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.DateTimeField() + + 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) @@ -30,7 +389,20 @@ class SalesInfo(models.Model):# managed = False db_table = 'sales_info' -class StockAdmin(models.Model):#Ա + +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) @@ -38,7 +410,40 @@ class StockAdmin(models.Model):# managed = False db_table = 'stock_admin' -class ZbInfo(models.Model):# + +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) zbname = models.CharField(max_length=10, blank=True, null=True) zblevel = models.CharField(max_length=1024, blank=True, null=True) @@ -47,14 +452,3 @@ class ZbInfo(models.Model):# class Meta: managed = False db_table = 'zb_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'),) diff --git a/system/login/urls.py b/system/login/urls.py index 67d316b..f64f1a7 100644 --- a/system/login/urls.py +++ b/system/login/urls.py @@ -11,7 +11,8 @@ urlpatterns = [ path('index1/', views.index_1, name='index1'), path('register/', views.register, name='register'), path('create/', views.create, name='create'), - path('i_graph1/', views.index_graph1, name='i_graph1'), + url(r'^bar/$', view1.ChartView_bar.as_view(), name='i_graph1'), + path('i_graph1/', view1.bar_page, name='i_graph1'), path('index1/Proc_index/', views.proc_index, name='proc_index'), path('index1/Sales_index/', views.sale_index, name='sale_index'), path('index1/Warehouse_index/', views.Warehouse_index, name='warehouse_index'), @@ -19,8 +20,8 @@ urlpatterns = [ url(r'^line/$', view1.ChartView.as_view(), name='demo'), url(r'^lineUpdate/$', view1.ChartUpdateView.as_view(), name='demo'), url(r'^line_test/$', view1.home_page, name='demo'), + path('index1/tim/', views.time, name='tim'), url(r'^rank/$',view2.table_sales_rank,name='sa_rank'), - #url(r'^sales_bar_pic/$',view2.BarView.as_view(),name='sale_bar'), - #url(r'^sales_bar_index/$',view2.IndexView.as_view(),name='bar_ind') + ] diff --git a/system/templates/index.html b/system/templates/index.html index 80feeb5..fd91b57 100644 --- a/system/templates/index.html +++ b/system/templates/index.html @@ -184,6 +184,43 @@
+
+ + +
+
+ {% csrf_token %} +
+ +
+
+ +
+
+
+

销售业绩表

+
+ + + + + + + + {% for i in s %} + + + + + + + {% endfor %} +
销售工号销售业绩
{{i.eid.eid}}{{i.performance_rank}}
+
+
+
+
+
@@ -222,45 +259,6 @@
-
- - -
-
- {% csrf_token %} -
- -
-
- -
-
-
- -

销售排名

-
- - - - - - - - - {% for i in s %} - - - - - {% endfor %} - - -
销售人员工号排名
{{i.eid.eid}}{{i.performance_rank}}
-
- -
-
-
@@ -321,22 +319,23 @@
-

直播间概况

+

今日直播间

- + @@ -374,7 +373,7 @@
-
+
@@ -390,10 +389,27 @@ -
+
+
+
+
+
+
+
+
+
+
+
+

直播间销售商品占比

+ +
+ +
@@ -429,35 +445,33 @@ - - - + + + + + + + +
+ + + diff --git a/system/templates/Pye_chart/test6.html b/system/templates/Pye_chart/test6.html new file mode 100644 index 0000000..9f38068 --- /dev/null +++ b/system/templates/Pye_chart/test6.html @@ -0,0 +1,73 @@ + + + + + echarts-ajax + + + + + +
+ + + diff --git a/system/templates/Pye_chart/test7.html b/system/templates/Pye_chart/test7.html new file mode 100644 index 0000000..c48287c --- /dev/null +++ b/system/templates/Pye_chart/test7.html @@ -0,0 +1,73 @@ + + + + + echarts-ajax + + + + + +
+ + + diff --git a/system/templates/Pye_chart/test8.html b/system/templates/Pye_chart/test8.html new file mode 100644 index 0000000..bedbd44 --- /dev/null +++ b/system/templates/Pye_chart/test8.html @@ -0,0 +1,73 @@ + + + + + echarts-ajax + + + + + +
+ + + diff --git a/system/templates/index.html b/system/templates/index.html index fd91b57..0c851cf 100644 --- a/system/templates/index.html +++ b/system/templates/index.html @@ -156,13 +156,50 @@
-

销售整体推移

- +

直播间:ZBJ1234

+
+ +
+
+ +
+
+
+
+

直播间:ZBJ1235

+
+ +
+
+ +
+
+
+
+

直播间:ZBJ1236

- + +
+
+
+

直播间:ZBJ1237

+
+ +
+
+ +
+
+
+

直播间:ZBJ1238

+
+ +
+
+
@@ -186,8 +223,6 @@
- -
{% csrf_token %}
@@ -197,6 +232,8 @@
+
+

销售业绩表

@@ -231,31 +268,46 @@ 商品代码 - 商品名称 + 商品类别 供货商 库存量 - 成本价 零售价 销售量 销售额 - 利润 + 利润率 + {% for i in si%} + {{i.goods.goods_id}} + {{i.goods.goods_type}} ? ? - ? - ? - ? - ? - ? - ? - ? + {{i.goods.gprice}} + {{i.count}} + {{i.sales_num}} + {{i.profit_rate}} + {% endfor %}
+

+ +
+ +
@@ -266,6 +318,7 @@
+ @@ -274,7 +327,6 @@ - @@ -286,29 +338,6 @@ - - - - - - - - - - -
主播昵称 直播间号热度 订阅数 成交额选中
? ? ? - -
??????? - -
@@ -347,27 +376,6 @@
$577545
-
- -
- 总热度 -
9833550
-
-
-
- -
- 弹幕数量 -
2233783
-
-
-
- -
- 直播间订阅数 -
3497843
-
-
@@ -392,24 +400,6 @@ -
-
-
-
-
-
-
-
-
-
-
-

直播间销售商品占比

- -
- -
@@ -446,9 +436,12 @@ + + + + + + - + \ No newline at end of file -- Gitee From 2dcf2d5bbcad8705cc4b994cc9c9f78abe0ec470 Mon Sep 17 00:00:00 2001 From: Rui Xue <1345359360@qq.com> Date: Tue, 23 May 2023 08:52:12 +0800 Subject: [PATCH 06/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=94=80?= =?UTF-8?q?=E5=94=AE=E7=9A=84=E8=B7=AF=E5=BE=84url=EF=BC=8C=E5=88=B6?= =?UTF-8?q?=E4=BD=9C=E4=BA=86=E8=AE=A2=E5=8D=95=E6=98=BE=E7=A4=BA=E5=92=8C?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=A4=84=E7=90=86=E7=9A=84=E5=8F=82=E8=80=83?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/login/urls.py | 4 +- system/login/views.py | 469 +------------------------ system/sales/models.py | 114 ++++++ system/sales/urls.py | 2 + system/sales/views.py | 26 +- system/templates/Sales/index.html | 14 +- system/templates/Sales/order-page.html | 32 +- system/templates/index.html | 2 +- system/templates/live-info.html | 3 +- system/templates/register.html | 2 +- 10 files changed, 174 insertions(+), 494 deletions(-) diff --git a/system/login/urls.py b/system/login/urls.py index d7affe9..5671de6 100644 --- a/system/login/urls.py +++ b/system/login/urls.py @@ -1,4 +1,4 @@ -from django.urls import path +from django.urls import path, include from django.urls import re_path as url from . import views from . import view2 @@ -13,7 +13,7 @@ urlpatterns = [ 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/Sales_index/', views.sale_index, name='sale_index'), + path('index1/Sales_index/', include('sales.urls')), path('index1/Warehouse_index/', views.Warehouse_index, name='warehouse_index'), path('index1/live_info', views.Stream_info, name='stream_info'), url(r'^line/$', views.ChartView4.as_view(), name='demo4'), diff --git a/system/login/views.py b/system/login/views.py index 5e50915..cae2d52 100644 --- a/system/login/views.py +++ b/system/login/views.py @@ -5,57 +5,6 @@ from django.shortcuts import render from django.shortcuts import render from django.http import HttpResponse from .models import * -import os -from django.contrib import messages -from django.http import HttpResponseRedirect -from django.urls import reverse -import threading -import random -from random import randint -import pandas as pd -import time -import datetime -from datetime import datetime -from datetime import timedelta -from math import * -from .models import Danmu -from .models import GoodsInfo -from .models import LiveRecord -from .models import OrderDetails -from .models import OrderInfo -from .models import ZbInfo -from .models import LiveroomInfo -from .models import SalesInfo -import asyncio -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 - - -ren4=queue.Queue() -ren5=queue.Queue() -ren6=queue.Queue() -ren7=queue.Queue() -ren8=queue.Queue() - -danmu4=queue.Queue() -danmu5=queue.Queue() -danmu6=queue.Queue() -danmu7=queue.Queue() -danmu8=queue.Queue() - -module_dir = os.path.dirname(__file__) -path = os.path.join(module_dir, '飞天狙想要努力变胖.csv') def index_1(request): res={}##填入方框的数据 @@ -108,420 +57,8 @@ def proc_index(request): def Warehouse_index(request): return render(request, '../templates/Warehouse/index.html') -def sale_index(request): - return render(request, '../templates/Sales/index.html') - def Stream_info(request): - itemid=0 - sql_cmd = "select live_record_id from live_record order by live_record_id" - for item in LiveRecord.objects.raw(sql_cmd): - itemid = int(item.live_record_id[5:]) - itemid += 1 - return render(request, '../templates/live-info.html', {"record_id": itemid}) -def tim(request): - if request.method == 'POST': - res = {} - live_id = request.POST['liveroom_id'] - eid = request.POST['eid'] - start = " ".join(request.POST['live_starttime'].split("T"))+":00" - end = " ".join(request.POST['live_endtime'].split("T"))+":00" - record_id = request.POST['live_record_id'] - print(f"{ live_id} {eid} {record_id} {start} {end}") - LiveroomInfo.objects.filter(liveroom_id=live_id).update(liveroom_status=1) - if live_id=='ZBJ1234': - Jbj4Renqi.objects.all().delete()#将表内数据清空 - j4=live(4,path,Jbj4Renqi,record_id,live_id,eid,start,end) - asyncio.run(j4.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - elif live_id == 'ZBJ1235': - Jbj5Renqi.objects.all().delete() - j5 = live(5,path,Jbj5Renqi,record_id, live_id, eid, start, end) - asyncio.run(j5.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - - elif live_id == 'ZBJ1236': - Jbj6Renqi.objects.all().delete() - j6 = live(6,path,Jbj6Renqi,record_id, live_id, eid, start, end) - asyncio.run(j6.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - - elif live_id == 'ZBJ1237': - Jbj7Renqi.objects.all().delete() - j7 = live(7,path,Jbj7Renqi,record_id, live_id, eid, start, end) - asyncio.run(j7.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - elif live_id == 'ZBJ1238': - Jbj8Renqi.objects.all().delete() - j8 = live(8,path,Jbj8Renqi, record_id, live_id, eid, start, end) - asyncio.run(j8.main()) - messages.info(request, '开始监控直播') - return HttpResponseRedirect(reverse('index')) - - - else: - res={} - res['rlt']="抱歉,不存在该直播间,请核查待填写信息并重新填写" - return render(request,"../templates/live-info.html",res) - #return Stream_info(request) - -def my_view(request): - # 创建一个新的线程 - t = threading.Thread(target=tim,args=(request,)) - # 设置为守护线程,不会阻塞主线程退出 - t.setDaemon(True) - # 启动线程 - t.start() - # 使用render函数渲染一个模板文件,传入一些变量 - return render(request, "../templates/start.html") - - -class live: - def __init__(self,ID,path,mod1,record,live_nu,host,start,end): - if ID==4: - danmu4.queue.clear() - ren4.queue.clear() - self.d=danmu4 - self.ren=ren4 - elif ID==5: - danmu5.queue.clear() - ren5.queue.clear() - self.d = danmu5 - self.ren = ren5 - elif ID == 6: - danmu6.queue.clear() - ren6.queue.clear() - self.d = danmu6 - self.ren = ren6 - elif ID==7: - danmu7.queue.clear() - ren7.queue.clear() - self.d = danmu7 - self.ren = ren7 - elif ID==8: - danmu8.queue.clear() - ren8.queue.clear() - self.d = danmu8 - self.ren = ren8 - self.mod1=mod1 - self.record=record# 直播记录号 - self.live_nu=live_nu#直播间号 - self.host=host#主播号 - self.start=datetime.strptime(start,'%Y-%m-%d %H:%M:%S') - self.end=datetime.strptime(end,'%Y-%m-%d %H:%M:%S') - df=pd.read_csv(path) - self.danmu=list(df['弹幕数据']) - self.guest=list(df['用户名']) - ho=ZbInfo.objects.get(eid=host) - live=LiveroomInfo.objects.get(liveroom_id=live_nu) - LiveRecord.objects.create(live_record_id=record,liveroom=live,eid=ho,live_starttime=self.start,live_endtime=self.end) - - async def create_danmu(self): - le=len(self.danmu)#记录弹幕数量,准备生成循环 - sign=0 - now=self.start - sec=1 - self.dan=[]#生成一个记录列表,之后可以想想办法插入 - re = self.record - while(now 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 ChartView4(APIView):##生成一个展示数据的,用于交互的json文件,导入html - def get(self, request, *args, **kwargs): - return JsonResponse(json.loads(line_base4())) - - -class ChartUpdateView4(APIView):#通过该函数进行动态输入 - def get(self, request, *args, **kwargs): - s4=ren4.get() - #print(s) - return JsonResponse({"name": s4["时间"], "value": s4["人数"]}) - -def home_page4(request):#返回展示数据的模板 - return render(request,'../templates/Pye_chart/test.html',{}) - -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_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',{}) - - + return render(request, '../templates/live-info.html') +def index_graph1(request): + return render(request,'../templates/graph/test_graph_1.html') diff --git a/system/sales/models.py b/system/sales/models.py index 71a8362..e4ac254 100644 --- a/system/sales/models.py +++ b/system/sales/models.py @@ -1,3 +1,117 @@ from django.db import models # Create your models here. + + +class EmployeeInfo(models.Model): + eid = models.CharField(primary_key=True, max_length=10) + ename = models.CharField(max_length=10, blank=True, null=True) + psword = models.CharField(max_length=20, blank=True, null=True) + etype = models.CharField(max_length=20, blank=True, null=True) + + class Meta: + managed = False + db_table = 'employee_info' + + +class LiveroomInfo(models.Model): + liveroom_id = models.CharField(primary_key=True, max_length=10) + liveroom_status = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'liveroom_info' + + +class GoodsInfo(models.Model): + goods_id = models.CharField(primary_key=True, max_length=10) + goods_name = models.CharField(max_length=20, blank=True, null=True) + goods_type = models.CharField(max_length=20, blank=True, null=True) + gprice = models.FloatField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'goods_info' + + +class CustomerInfo(models.Model): + cid = models.CharField(primary_key=True, max_length=20) + clevel = models.CharField(max_length=10, blank=True, null=True) + + class Meta: + managed = False + db_table = 'customer_info' + + +class ZbInfo(models.Model): + eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True) + zbname = models.CharField(max_length=10, blank=True, null=True) + zblevel = models.CharField(max_length=1024, blank=True, null=True) + login_status = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'zb_info' + + +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 LiveRecord(models.Model): + live_record_id = models.CharField(primary_key=True, max_length=20) + liveroom = models.ForeignKey(LiveroomInfo, models.DO_NOTHING) + eid = models.ForeignKey(ZbInfo, models.DO_NOTHING, db_column='eid') + live_starttime = models.DateTimeField(blank=True, null=True) + live_endtime = models.DateTimeField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'live_record' + + +class OrderInfo(models.Model): + order_id = models.CharField(primary_key=True, max_length=25) + live_record = models.ForeignKey(LiveRecord, models.DO_NOTHING) + cid = models.ForeignKey(CustomerInfo, models.DO_NOTHING, db_column='cid') + eid = models.ForeignKey(SalesInfo, models.DO_NOTHING, db_column='eid') + order_time = models.DateTimeField(blank=True, null=True) + address = models.CharField(max_length=100, blank=True, null=True) + sum_price = models.FloatField(blank=True, null=True) + process_status = models.CharField(max_length=10, blank=True, null=True) + + class Meta: + managed = True + db_table = 'order_info' + + +class OrderDetails(models.Model): + order = models.OneToOneField(OrderInfo, models.DO_NOTHING, primary_key=True) # 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) + goods_num = models.IntegerField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'order_details' + unique_together = (('order', 'goods'),) + + +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' diff --git a/system/sales/urls.py b/system/sales/urls.py index c2805f9..4f2cdc0 100644 --- a/system/sales/urls.py +++ b/system/sales/urls.py @@ -6,6 +6,8 @@ app_name='sales'#需要添加app名称,不然include无法找到该model,在ht urlpatterns = [ # 主页,用来显示类别等其他数据 + path('', views.sale_index, name='sale_index'), path('order', views.sale_order, name='sale_order'), + path('order_p', views.order_process, name='next_order'), ] diff --git a/system/sales/views.py b/system/sales/views.py index 5bde43e..706022d 100644 --- a/system/sales/views.py +++ b/system/sales/views.py @@ -1,8 +1,32 @@ from django.shortcuts import render +from sales import models # Create your views here. from django.http import HttpResponse +def sale_index(request): + info = models.OrderInfo.objects.filter(eid='SA42376', process_status='未处理') + if info.exists(): + return render(request, '../templates/Sales/index.html', {'order': info}) + else: + return render(request, '../templates/Sales/index.html') + + def sale_order(request): - return render(request, '../templates/Sales/order-page.html') \ No newline at end of file + info = models.OrderInfo.objects.filter(eid='SA42376', process_status='未处理') + if info.exists(): + return render(request, '../templates/Sales/order-page.html', {'order': info[0]}) + else: + return render(request, '../templates/Sales/order-page.html') + + +def order_process(request): + if request.method == "POST": + order_id = request.POST["order_id"] + models.OrderInfo.objects.filter(order_id=order_id).update(process_status="已处理") + # order.process_status = "已处理" + # order.save() + return sale_order(request) + else: + return sale_order(request) diff --git a/system/templates/Sales/index.html b/system/templates/Sales/index.html index 8d68ee0..5600d2c 100644 --- a/system/templates/Sales/index.html +++ b/system/templates/Sales/index.html @@ -80,7 +80,7 @@
diff --git a/system/templates/Sales/order-page.html b/system/templates/Sales/order-page.html index 7cffd50..3b8bdb5 100644 --- a/system/templates/Sales/order-page.html +++ b/system/templates/Sales/order-page.html @@ -83,7 +83,7 @@
diff --git a/system/templates/index.html b/system/templates/index.html index 0c851cf..e45fc09 100644 --- a/system/templates/index.html +++ b/system/templates/index.html @@ -88,7 +88,7 @@