from api import API from back_ground_module import CommonModule import datetime import pandas as pd from log_config import configure_task_logger, configure_error_task_logger api_instance = API() common_module = CommonModule() start_time = datetime.datetime.now() # 获取已经配置好的常规日志记录器 logger = configure_task_logger() # 获取已经配置好的错误任务日志记录器 error_task_logger = configure_error_task_logger() class InstallEventDispatcher: """安装服务历史派发""" def __init__(self): # 直接在初始化时设置映射关系 self.services_list = None self.reversed_field_mapping = { "省": "_widget_1750301534569", "市": "_widget_1750301534570", "区": "_widget_1750301534571", "门店名称": "_widget_1750301534572", "门店id": "_widget_1750301534573", "负责人": "_widget_1750301534574", "联系电话": "_widget_1750301534575", "线索状态": "_widget_1750301534577", "线索来源": "_widget_1750301534576", } self.field_mapping = { "省": "_widget_1744177321450", "市": "_widget_1744182647145", "区": "_widget_1744182647146", "门店名称": "_widget_1744177321449", "门店id": "_widget_1744177321451", "负责人": "_widget_1744177321452", "联系电话": "_widget_1744177321453", "线索来源": "_widget_1744187212674", } self.install_service_lead = None def load_all_data(self): """加载所有必要的数据表""" # 安装服务线索池 payload = {"api_key": "66f3a68c6e56814df2c6b1af", "entry_id": "68537b5e60a6295c6c09b464"} json_dict = api_instance.entry_data_list(payload) self.install_service_lead = json_dict.get("data") # 安装服务客服表 payload = {"api_key": "66f3a68c6e56814df2c6b1af", "entry_id": "6809d4ef063ece5c83fc61ad"} json_dict = api_instance.entry_data_list(payload) self.services_list = json_dict.get("data") def row_to_dict(self, row, field_mapping): """将一行数据转换为指定格式的字典""" result = {} for col_name, widget_id in field_mapping.items(): if col_name in row: value = row[col_name] clean_value = None if pd.isna(value) else value result[widget_id] = {"value": clean_value} return result def reversed_dict(self, old_dict, field_mapping): """将字段ID映射回中文名称""" id_to_name = {v: k for k, v in field_mapping.items()} new_dict = {} for old_key, value in old_dict.items(): # 使用get方法实现高效查找,未找到时保留原键 new_key = id_to_name.get(old_key, old_key) new_dict[new_key] = value return new_dict def main(self): """主函数""" start_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") try: # 1.加载所有数据 self.load_all_data() install_service_lead_list = self.install_service_lead # 将list的字段映射为中文 new_sign_abnormal_data = [ self.reversed_dict(old_dict, self.reversed_field_mapping) for old_dict in install_service_lead_list ] logger.info(f"加载数据完成") # 2.获取今日值班客服 today_duty_staff = [] for item in self.services_list: if item.get("_widget_1740117343937") == "开": today_duty_staff.append(item.get("_widget_1740042824214").get("username")) count = len(today_duty_staff) if count == 0: logger.warning(f"今日值班客服为空,请检查数据") common_module.send_task_error(start_time, "安装服务历史派发", "今日值班客服为空") return logger.info(f"今日值班客服为:{today_duty_staff}") # 3.数据准备 new_sign_abnormal_data = [item for item in new_sign_abnormal_data if item["线索状态"] != "已派发"] # 截取今日需要派发的数据 new_sign_abnormal_data = new_sign_abnormal_data[:count] # 获取今日要派发数据的id id_list = [item["_id"] for item in new_sign_abnormal_data] new_sign_abnormal_data = [ self.row_to_dict(row, self.field_mapping) for row in new_sign_abnormal_data] logger.info(f"数据准备完成") # 4.派发今日数据 i = 0 for item in new_sign_abnormal_data: item.update({"_widget_1744182647149": {"value": today_duty_staff[i]}}) data = { 'api_key': "66f3a68c6e56814df2c6b1af", 'entry_id': "67f5dc467a9f5b2710da965a", # 安装服务意向表 # 'entry_id': "6853c7cc512ffef038917440", # 测试表 "data": item } res = api_instance.data_batch_create(data) logger.info(f"数据派发:{res}") i += 1 logger.info(f"数据派发完成") # 5.修改原数据状态为已派发 for id in id_list: data = { 'api_key': "66f3a68c6e56814df2c6b1af", 'entry_id': "68537b5e60a6295c6c09b464", "data_id": id, "data": {"_widget_1750301534577": {"value": "已派发"}} } res = api_instance.entry_data_update(data) logger.info(f"数据状态修改:{res}") logger.info(f"数据状态修改完成") common_module.send_task_status(start_time, "安装服务历史派发") logger.info("安装服务历史任务完成") except Exception as e: common_module.send_task_error(start_time, "安装服务历史派发", str(e)) error_task_logger.error(f"安装服务历史派发任务执行失败: {e}") if __name__ == "__main__": install_event_dispatcher = InstallEventDispatcher() install_event_dispatcher.main()