From 5e7876c25e195d013c8ed30f9bbe5b7c70ee54a5 Mon Sep 17 00:00:00 2001 From: RogerWork Date: Fri, 15 Aug 2025 18:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BD=B1=E9=99=A2=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=92=8C=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exec_sql/__init__.py | 0 exec_sql/admin.py | 3 ++ exec_sql/apps.py | 6 +++ exec_sql/migrations/__init__.py | 0 exec_sql/models.py | 3 ++ exec_sql/tests.py | 3 ++ exec_sql/views.py | 3 ++ update/migrations/0028_cinema_is_delete.py | 18 ++++++++ .../0029_cinema_comments_cinema_is_online.py | 23 +++++++++++ update/models.py | 2 + update/serializers.py | 2 +- update/utils/get_version.py | 41 +++++++++++-------- update/views.py | 2 +- 13 files changed, 87 insertions(+), 19 deletions(-) create mode 100644 exec_sql/__init__.py create mode 100644 exec_sql/admin.py create mode 100644 exec_sql/apps.py create mode 100644 exec_sql/migrations/__init__.py create mode 100644 exec_sql/models.py create mode 100644 exec_sql/tests.py create mode 100644 exec_sql/views.py create mode 100644 update/migrations/0028_cinema_is_delete.py create mode 100644 update/migrations/0029_cinema_comments_cinema_is_online.py diff --git a/exec_sql/__init__.py b/exec_sql/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exec_sql/admin.py b/exec_sql/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/exec_sql/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/exec_sql/apps.py b/exec_sql/apps.py new file mode 100644 index 0000000..68bb83f --- /dev/null +++ b/exec_sql/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ExecSqlConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'exec_sql' diff --git a/exec_sql/migrations/__init__.py b/exec_sql/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exec_sql/models.py b/exec_sql/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/exec_sql/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/exec_sql/tests.py b/exec_sql/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/exec_sql/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/exec_sql/views.py b/exec_sql/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/exec_sql/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/update/migrations/0028_cinema_is_delete.py b/update/migrations/0028_cinema_is_delete.py new file mode 100644 index 0000000..65a3ce6 --- /dev/null +++ b/update/migrations/0028_cinema_is_delete.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.7 on 2025-07-18 08:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('update', '0027_updatecommand_combo_cmd_alter_updatecommand_run'), + ] + + operations = [ + migrations.AddField( + model_name='cinema', + name='is_delete', + field=models.BooleanField(default=False, help_text='是否删除', verbose_name='是否删除'), + ), + ] diff --git a/update/migrations/0029_cinema_comments_cinema_is_online.py b/update/migrations/0029_cinema_comments_cinema_is_online.py new file mode 100644 index 0000000..4997074 --- /dev/null +++ b/update/migrations/0029_cinema_comments_cinema_is_online.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.7 on 2025-08-15 09:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('update', '0028_cinema_is_delete'), + ] + + operations = [ + migrations.AddField( + model_name='cinema', + name='comments', + field=models.TextField(help_text='备注', null=True, verbose_name='备注'), + ), + migrations.AddField( + model_name='cinema', + name='is_online', + field=models.BooleanField(default=False, help_text='是否在线', verbose_name='是否在线'), + ), + ] diff --git a/update/models.py b/update/models.py index 060bd2e..c40e4c9 100644 --- a/update/models.py +++ b/update/models.py @@ -22,6 +22,8 @@ class Cinema(BaseModels): help_text='远程办公id') ver_id = models.IntegerField(verbose_name='版本id', null=False, default=0, help_text='版本id') is_delete = models.BooleanField(verbose_name='是否删除', default=False, help_text='是否删除') + is_online = models.BooleanField(verbose_name='是否在线', default=False, help_text='是否在线') + comments = models.TextField(verbose_name='备注', null=True, help_text='备注') def __str__(self): return self.ip diff --git a/update/serializers.py b/update/serializers.py index 7f77a22..ef00188 100644 --- a/update/serializers.py +++ b/update/serializers.py @@ -9,7 +9,7 @@ class CinemaSerializer(serializers.ModelSerializer): model = Cinema fields = ( 'id', 'name', 'ip', 'zz_num', 'inner_id', 'db_user', 'db_pwd', 'sys_ver', 'client_ver', 'user', - 'update_time', 'is_cloud', 'remote_label', 'ver_id', 'is_delete') + 'update_time', 'is_cloud', 'remote_label', 'ver_id', 'is_delete', 'is_online', 'comments') class CinemaUserSerializer(serializers.ModelSerializer): diff --git a/update/utils/get_version.py b/update/utils/get_version.py index 9410655..0bc35b4 100644 --- a/update/utils/get_version.py +++ b/update/utils/get_version.py @@ -62,23 +62,30 @@ class GetVersion(object): 'connect_timeout': 5, } db_conn = pymysql.Connect(**db_config) - db_cursor = db_conn.cursor(cursor=DictCursor) - db_cursor.execute(sql_str) - res = db_cursor.fetchone() - update_data = { - 'name': res['cinema_name'], - 'zz_num': res['cinema_num'], - 'inner_id': res['cinema_id'], - 'sys_ver': res['server_version'], - 'client_ver': res['client_version'], - # 'update_time': datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') - 'update_time': timezone.now(), - 'is_cloud': '云版本' if res.get('dx_sys_version', '--') == 'CLOUD' else '--', - 'remote_label': res.get('cinema_label', '--') if res.get('cinema_label', '--') != '' else '--', - 'ver_id': int(res['server_version'][13:17]) if res['server_version'].startswith('Cloud_') else int(res['server_version'][7:11]) - } - print(ip, update_data, db_config) - cinema_obj = Cinema.objects.filter(ip=ip).update(**update_data) + try: + with db_conn.cursor(cursor=DictCursor) as db_cursor: + db_cursor.execute(sql_str) + res = db_cursor.fetchone() + update_data = { + 'name': res['cinema_name'], + 'zz_num': res['cinema_num'], + 'inner_id': res['cinema_id'], + 'sys_ver': res['server_version'], + 'client_ver': res['client_version'], + # 'update_time': datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') + 'update_time': timezone.now(), + 'is_cloud': '云版本' if res.get('dx_sys_version', '--') == 'CLOUD' else '--', + 'remote_label': res.get('cinema_label', '--') if res.get('cinema_label', '--') != '' else '--', + 'ver_id': int(res['server_version'][13:17]) if res['server_version'].startswith('Cloud_') else int(res['server_version'][7:11]), + 'is_online': True + } + print(ip, update_data, db_config) + cinema_obj = Cinema.objects.filter(ip=ip).update(**update_data) + except Exception as e: + print(e) + cinema_obj = Cinema.objects.filter(ip=ip).update(is_online=False) + finally: + db_conn.close() def get_cinema_ver_by_ip(ip): diff --git a/update/views.py b/update/views.py index 0610c5e..5f3ccb2 100644 --- a/update/views.py +++ b/update/views.py @@ -51,7 +51,7 @@ class CinemaViewSet(CacheResponseMixin, viewsets.ModelViewSet): search_fields = ('sys_ver',) # filter_fields = ('ip',) filterset_fields = ('ip',) - GetVersion().main_process() + GetVersion().main_process() # 修改数据model时需要注释调 @action(methods=['get'], detail=False) @method_decorator(cache_page(60 * 1))