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