You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.8 KiB
101 lines
3.8 KiB
import pymysql |
|
import json |
|
from datetime import datetime |
|
from pymysql.cursors import DictCursor |
|
from group.models import * |
|
from group.models import Group |
|
from group.utils.get_group_info import * |
|
from django_redis import get_redis_connection |
|
|
|
group_database_info = { |
|
'host': '10.10.1.52', |
|
'port': 3306, |
|
'user': 'dgp_read', |
|
'password': '1d8qB83F9s63kpS', |
|
} |
|
|
|
|
|
class UpdateGroupData: |
|
def __init__(self): |
|
self.db_conn = pymysql.connect(**group_database_info) |
|
self.db_cursor = self.db_conn.cursor(cursor=DictCursor) |
|
|
|
# 根据func获取集团数据,如果集团不存在则插入集团数据 |
|
def update_group_data(self, func): |
|
group_info = GetGroupInfo() |
|
self.db_cursor.execute(func.exec_sql) |
|
data = self.db_cursor.fetchall() |
|
failed_list = [] |
|
for d in data: |
|
code = d.get('group_code') |
|
print(func.func_model, func.func_name, d.get('group_code'), d.get('data'), d.get('last_time')) |
|
if g_obj := group_info.is_group_exist(code): |
|
print('找到集团插入数据') |
|
if GroupData.objects.filter(group=g_obj, func=func).first() is not None: |
|
gd = GroupData.objects.get(group=g_obj, func=func) |
|
gd.data_count = d.get('data') |
|
gd.data_lasttime = d.get('last_time') |
|
gd.save() |
|
else: |
|
GroupData.objects.create(group=g_obj, |
|
func=func, |
|
data_count=d.get('data'), |
|
data_lasttime=d.get('last_time')) |
|
|
|
else: |
|
print('没有找到集团') |
|
failed_list.append({'func_name': func.func_name, 'group_code': d.get('group_code')}) |
|
if len(failed_list) > 0: |
|
return failed_list |
|
return True |
|
|
|
|
|
# 组装返回数据并写入json |
|
def set_group_data_to_redis(): |
|
# 准备数据 |
|
groups = Group.objects.order_by('-cinema_count').all() |
|
funcs = GroupFuncs.objects.all() |
|
result = {'groups_data': [], |
|
'update_datetime': GroupRuntime.objects.filter(runtime_key='update_datetime').first().runtime_value, } |
|
for group in groups: |
|
print(group.group_code) |
|
group_data = { |
|
'group_info': { |
|
'group_code': group.group_code, |
|
'group_name': group.group_name, |
|
'group_address': group.group_address, |
|
'cinema_count': group.cinema_count |
|
}, |
|
'group_data': [] |
|
} |
|
for func in funcs: |
|
print(func.func_name) |
|
data = GroupData.objects.filter(group=group, func=func).first() |
|
if data is not None: |
|
data_count = data.data_count |
|
data_lasttime = datetime.strftime(data.data_lasttime, '%Y-%m-%d %H:%M:%S') |
|
else: |
|
data_count = 0 |
|
data_lasttime = '' |
|
group_data['group_data'].append({ |
|
'func_id': func.id, |
|
'func_model': func.func_model, |
|
'func_name': func.func_name, |
|
'data_count': data_count, |
|
'data_lasttime': data_lasttime, |
|
}) |
|
print({ |
|
'func_model': func.func_model, |
|
'func_name': func.func_name, |
|
'data_count': data_count, |
|
'data_lasttime': data_lasttime, |
|
}) |
|
result['groups_data'].append(group_data) |
|
# 写入Redis |
|
print("写入Redis") |
|
redis_conn = get_redis_connection() |
|
redis_key = f"group_data_{datetime.strftime(datetime.now(), '%Y-%m-%d')}" |
|
if redis_conn.exists(redis_key): |
|
redis_conn.delete(redis_key) |
|
redis_conn.set(redis_key, json.dumps(result), 3600 * 48) |
|
return result
|
|
|