# globalData.py import json import redis from config import redis_url class GlobalData: # 数据字段 standard_company_program = {} standard_company_name_list = [] simply_to_standard_company_name_map = {} pinyin_simply_to_standard_company_name_map = {} standard_project_name_list = [] simply_to_standard_project_name_map = {} pinyin_simply_to_standard_project_name_map = {} standard_construct_name_list = [] simply_to_standard_construct_name_map = {} pinyin_simply_to_standard_construct_name_map = {} standard_constractor_name_list = [] simply_to_standard_constractor_name_map = {} pinyin_simply_to_standard_constractor_name_map = {} standard_team_leader_name_list = [] simply_to_standard_team_leader_name_map = {} pinyin_simply_to_standard_team_leader_name_map = {} @classmethod def update_from_redis(cls): import sys from utils import ( clean_useless_company_name, clean_useless_project_name, clean_useless_team_leader_name ) #实施组织(分公司)和项目名 cls._update_company_program() total_size = sys.getsizeof(GlobalData.standard_company_program) + sys.getsizeof(GlobalData.standard_company_name_list) + sys.getsizeof(GlobalData.simply_to_standard_company_name_map)+ sys.getsizeof(GlobalData.pinyin_simply_to_standard_company_name_map) print(f"standard_company size: {total_size} bytes") #工程名 cls._update_list_data('SBD_QUERY_DATA:PROJECT_NAME', './standard_data/standard_project.txt', cls.standard_project_name_list, cls.simply_to_standard_project_name_map, cls.pinyin_simply_to_standard_project_name_map, clean_useless_project_name) print(f"工程名数量:{len(cls.standard_project_name_list)}") #建管单位 cls._update_list_data('SBD_QUERY_DATA:CONSTRUCTION_UNIT', './standard_data/construct_unit.txt', cls.standard_construct_name_list, cls.simply_to_standard_construct_name_map, cls.pinyin_simply_to_standard_construct_name_map, clean_useless_company_name) print(f"建管单位数量:{len(cls.standard_construct_name_list)}") #分包单位 cls._update_list_data('SBD_QUERY_DATA:SUBCONTRACTOR', './standard_data/sub_contract.txt', cls.standard_constractor_name_list, cls.simply_to_standard_constractor_name_map, cls.pinyin_simply_to_standard_constractor_name_map, clean_useless_company_name) print(f"分包单位数量:{len(cls.standard_constractor_name_list)}") #班组名称 cls._update_list_data('SBD_QUERY_DATA:TEAM', './standard_data/team_leader.txt', cls.standard_team_leader_name_list, cls.simply_to_standard_team_leader_name_map, cls.pinyin_simply_to_standard_team_leader_name_map, clean_useless_team_leader_name) print(f"班组名称数量:{len(cls.standard_team_leader_name_list)}") @classmethod def _update_company_program(cls): from utils import ( load_standard_json_data, save_dict_to_file, clean_useless_company_name, text_to_pinyin ) # 公司与项目关系数据 try: r = redis.from_url(redis_url, decode_responses=True) json_str = r.get('SBD_QUERY_DATA:STANDARD_COMPANY_PROGRAM') if json_str: temp_data = json.loads(json_str) save_dict_to_file(temp_data,"./standard_data/standard_company_program.json") print("[Info] Loaded STANDARD_COMPANY_PROGRAM from Redis") else: raise ValueError("Redis key not found") except Exception as e: print(f"[Error] Error loading STANDARD_COMPANY_PROGRAM: {e}") temp_data = load_standard_json_data("./standard_data/standard_company_program.json") if temp_data != cls.standard_company_program: cls.standard_company_program.clear() cls.standard_company_program.update(temp_data) cls.standard_company_name_list.clear() cls.standard_company_name_list.extend(list(temp_data.keys())) cls.simply_to_standard_company_name_map.clear() cls.simply_to_standard_company_name_map.update({ clean_useless_company_name(kw): kw for kw in cls.standard_company_name_list }) cls.pinyin_simply_to_standard_company_name_map.clear() cls.pinyin_simply_to_standard_company_name_map.update({ text_to_pinyin(clean_useless_company_name(kw)): kw for kw in cls.standard_company_name_list }) @classmethod def _update_list_data(cls, redis_key, local_path, target_list, simple_map, pinyin_map, cleaner): from utils import ( load_standard_name_list, save_standard_name_list_to_file, text_to_pinyin ) try: r = redis.from_url(redis_url, decode_responses=True) json_str = r.get(redis_key) except Exception as e: print(f"[Error] Redis error on key '{redis_key}': {e}") json_str = None if json_str: try: temp_list = json.loads(json_str) save_standard_name_list_to_file(temp_list,local_path) print(f"[Info] Loaded {redis_key} from Redis") except json.JSONDecodeError as e: print(f"[Warning] JSON decode error on key '{redis_key}': {e}") temp_list = load_standard_name_list(local_path) else: print(f"[Info] Redis key '{redis_key}' not found. Loading from local file...") temp_list = load_standard_name_list(local_path) if temp_list != target_list: target_list.clear() target_list.extend(temp_list) simple_map.clear() simple_map.update({ cleaner(kw): kw for kw in temp_list }) pinyin_map.clear() pinyin_map.update({ text_to_pinyin(cleaner(kw)): kw for kw in temp_list })