dingxin_toolbox
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

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