diff --git a/app/services/daily.py b/app/services/daily.py index 12fadc6..b41f577 100644 --- a/app/services/daily.py +++ b/app/services/daily.py @@ -119,7 +119,7 @@ class DailyDataService(BaseService[DailyData]): ] if point_ids: base_conditions.append(SettlementData.point_id.in_(point_ids)) - + # 子查询 subquery = ( select(*model_columns, row_num) diff --git a/app/utils/construction_monitor.py b/app/utils/construction_monitor.py index c7ec4a0..affcc09 100644 --- a/app/utils/construction_monitor.py +++ b/app/utils/construction_monitor.py @@ -11,24 +11,23 @@ class ConstructionMonitorUtils: def __init__(self): # 原始工况周期映射表(保持不变) self.base_periods = { - - "仰拱(底板)施工完成后,第1个月": 7, - "仰拱(底板)施工完成后,第2至3个月": 14, - "仰拱(底板)施工完成后,3个月以后": 30, - "无砟轨道铺设后,第1至3个月": 30, - "无砟轨道铺设后,4至12个月": 90, - "无砟轨道铺设后,12个月以后": 180, - "墩台施工到一定高度": 30, - "墩台混凝土施工": 30, - "预制梁桥,架梁前": 30, - "预制梁桥,预制梁架设前": 1, - "预制梁桥,预制梁架设后": 7, - "桥位施工桥梁,制梁前": 30, - "桥位施工桥梁,上部结构施工中": 1, - "架桥机(运梁车)通过": 7, - "桥梁主体工程完工后,第1至3个月": 7, # 包含英文逗号的原始数据 - "桥梁主体工程完工后,第4至6个月": 14, - "桥梁主体工程完工后,6个月以后": 30, + "仰拱(底板)施工完成后,第1个月": 7, # 原:仰拱(底板)施工完成后,第1个月 + "仰拱(底板)施工完成后,第2至3个月": 14, # 原:仰拱(底板)施工完成后,第2至3个月 + "仰拱(底板)施工完成后,3个月以后": 30, # 原:仰拱(底板)施工完成后,3个月以后 + "无砟轨道铺设后,第1至3个月": 30, # 原:无砟轨道铺设后,第1至3个月 + "无砟轨道铺设后,4至12个月": 90, # 原:无砟轨道铺设后,4至12个月 + "无砟轨道铺设后,12个月以后": 180, # 原:无砟轨道铺设后,12个月以后 + "墩台施工到一定高度": 30, # 无格式差异,保留原样 + "墩台混凝土施工": 30, # 无格式差异,保留原样 + "预制梁桥,架梁前": 30, # 原:预制梁桥,架梁前 + "预制梁桥,预制梁架设前": 1, # 原:预制梁桥,预制梁架设前 + "预制梁桥,预制梁架设后": 7, # 原:预制梁桥,预制梁架设后 + "桥位施工桥梁,制梁前": 30, # 原:桥位施工桥梁,制梁前 + "桥位施工桥梁,上部结构施工中": 1, # 原:桥位施工桥梁,上部结构施工中 + "架桥机(运梁车)通过": 7, # 无格式差异,保留原样 + "桥梁主体工程完工后,第1至3个月": 7, # 原:桥梁主体工程完工后,第1至3个月 + "桥梁主体工程完工后,第4至6个月": 14, # 原:桥梁主体工程完工后,第4至6个月 + "桥梁主体工程完工后,6个月以后": 30, # 原:桥梁主体工程完工后,6个月以后 "轨道铺设期间,前": 30, "轨道铺设期间,后": 14, "轨道铺设完成后,第1个月": 14, @@ -37,16 +36,16 @@ class ConstructionMonitorUtils: "轨道铺设完成后,12个月以后": 180, "填筑或堆载,一般情况": 1, "填筑或堆载,沉降量突变情况": 1, - "填筑或堆载,两次填筑间隔时间较长情况": 3, # 该工况原周期为3天 - "堆载预压或路基填筑完成,第1至3个月": 7, - "堆载预压或路基填筑完成,第4至6个月": 14, - "堆载预压或路基填筑完成,6个月以后": 30, - "架桥机(运梁车)首次通过前": 1, - "架桥机(运梁车)首次通过后,前3天": 1, - "架桥机(运梁车)首次通过后": 7, - "轨道板(道床)铺设后,第1个月": 14, - "轨道板(道床)铺设后,第2至3个月": 30, - "轨道板(道床)铺设后,3个月以后": 90 + "填筑或堆载,两次填筑间隔时间较长情况": 3, + "堆载预压或路基填筑完成,第1至3个月": 7, # 原:堆载预压或路基填筑完成,第1至3个月 + "堆载预压或路基填筑完成,第4至6个月": 14, # 原:堆载预压或路基填筑完成,第4至6个月 + "堆载预压或路基填筑完成,6个月以后": 30, # 原:堆载预压或路基填筑完成,6个月以后 + "架桥机(运梁车) 首次通过前": 1, # 原:架桥机(运梁车)首次通过前(仅加空格) + "架桥机(运梁车) 首次通过后,前3天": 1, # 原:架桥机(运梁车)首次通过后,前3天 + "架桥机(运梁车) 首次通过后": 7, # 原:架桥机(运梁车)首次通过后(仅加空格) + "轨道板(道床)铺设后,第1个月": 14, # 原:轨道板(道床)铺设后,第1个月 + "轨道板(道床)铺设后,第2至3个月": 30, # 原:轨道板(道床)铺设后,第2至3个月 + "轨道板(道床)铺设后,3个月以后": 90 # 未出现在待处理集,保留原始格式 } # 构建中英文括号+逗号兼容映射表 self.compatible_periods = self._build_compatible_brackets_map() @@ -153,10 +152,10 @@ class ConstructionMonitorUtils: break item_copy = copy.deepcopy(latest_item) - create_date_val = latest_item.get("createdate") + create_date_val = latest_item.get("MTIME_W") if not create_date_val: result["error_data"].append(item_copy) - warnings.warn(f"【数据错误】测点{point_idx}的最新数据缺少'createdate'字段", UserWarning) + warnings.warn(f"【数据错误】测点{point_idx}的最新数据缺少'MTIME_W'字段", UserWarning) continue try: @@ -215,5 +214,9 @@ class ConstructionMonitorUtils: nyid_min_remaining[nyid] = record result["data"] = list(nyid_min_remaining.values()) - + # logger.warning(f"【数据错误】共发现{len(result['error_data'])}条错误数据") + # logger.warning(result) + # import json + # with open("./error_data.json", "w", encoding="utf-8") as f: + # json.dump(result["error_data"], f, ensure_ascii=False, indent=4) return result \ No newline at end of file diff --git a/app/utils/scheduler.py b/app/utils/scheduler.py index 2cdfc1d..5332ff7 100644 --- a/app/utils/scheduler.py +++ b/app/utils/scheduler.py @@ -230,8 +230,7 @@ def scheduled_get_max_nyid_by_point_id(start: int = 0,end: int = 0): # 核心新增:清空DailyData表所有数据 # delete_count = db.query(DailyData).delete() # db.commit() - db.execute(text(f"TRUNCATE TABLE {DailyData.__tablename__}")) - db.commit() # 必须提交事务 + # logger.info(f"DailyData表清空完成,共删除{delete_count}条历史记录") # 1. 获取沉降数据(返回 List[List[dict]]) @@ -242,7 +241,6 @@ def scheduled_get_max_nyid_by_point_id(start: int = 0,end: int = 0): monitor = ConstructionMonitorUtils() daily_data = monitor.get_due_data(result,start=start,end=end) print(daily_data) - # time.sleep(10000) data = daily_data['data'] error_data = daily_data['error_data'] @@ -257,6 +255,8 @@ def scheduled_get_max_nyid_by_point_id(start: int = 0,end: int = 0): print(max_num) # 提取冬休数据的point_id列表 new_list = [int(w['point_id']) for w in winters] + if new_list == []: + break # 获取更多历史记录 nyid_list = daily_service.get_nyid_by_point_id(db, new_list, max_num) w_list = monitor.get_due_data(nyid_list,start=start,end=end) @@ -319,12 +319,17 @@ def scheduled_get_max_nyid_by_point_id(start: int = 0,end: int = 0): nyids.append(d['NYID']) daily_create_data.append(tem) # 批量创建记录 + print(daily_create_data) if daily_create_data: + db.execute(text(f"TRUNCATE TABLE {DailyData.__tablename__}")) + db.commit() # 必须提交事务 # with open('data.json', 'w', encoding='utf-8') as f: # json.dump(daily_create_data, f, ensure_ascii=False, indent=4) created_records = daily_service.batch_create_by_account_nyid(db, daily_create_data) logger.info(f"定时任务完成:成功创建{len(created_records)}条DailyData记录,共处理{len(data)}个point_id数据") else: + db.execute(text(f"TRUNCATE TABLE {DailyData.__tablename__}")) + db.commit() # 必须提交事务 logger.warning("定时任务完成:无有效数据可创建DailyData记录") except Exception as e: