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.
102 lines
3.8 KiB
102 lines
3.8 KiB
|
2 days ago
|
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
|