From 09f5c303f03e562a5d5c338459d21cb59cd3a154 Mon Sep 17 00:00:00 2001 From: wangxu <1318272526@qq.com> Date: Tue, 12 May 2026 17:36:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B7=AF=E5=8F=A3=E5=B7=A1?= =?UTF-8?q?=E6=A3=80=E6=8A=A5=E5=91=8A=E5=91=A8=E6=8A=A5=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/task_worker.py | 4 +- app/tmnet_db_func.py | 7 ++ ...XX周路口巡检周报(模板).docx | Bin 30097 -> 30084 bytes tool/cross_monitor_week_report.py | 80 ++++-------------- tool/qcos_func.py | 20 +++++ 5 files changed, 45 insertions(+), 66 deletions(-) diff --git a/app/task_worker.py b/app/task_worker.py index 0070c79..c97784b 100644 --- a/app/task_worker.py +++ b/app/task_worker.py @@ -2901,9 +2901,9 @@ def upload_cross_monitor_record_file(params): cos_client.put_object(Bucket=g_cos_bucket, Key=cos_key, Body=file_stream) download_url = f'{g_cos_root}/{cos_key}' record_info[item_class][item_key]['upload_file_path'].append(download_url) - # record_info_json = json.loads(record_info) + record_info_json = json.dumps(record_info, ensure_ascii=False) update_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') - ret = db_task.save_cross_monitor_record_info_sql(nodeid, area_id, recordid, task_no, crossid, err_num, process_func, record_info, operator, operator_id, record_status, update_time, special_time_range, monitor_date, monitor_type) + ret = db_task.save_cross_monitor_record_info_sql(nodeid, area_id, recordid, task_no, crossid, err_num, process_func, record_info_json, operator, operator_id, record_status, update_time, special_time_range, monitor_date, monitor_type) if ret: return json.dumps(make_common_res(0, 'ok')) else: diff --git a/app/tmnet_db_func.py b/app/tmnet_db_func.py index d7a5e8f..d87b8b3 100644 --- a/app/tmnet_db_func.py +++ b/app/tmnet_db_func.py @@ -781,3 +781,10 @@ class TmnetDbHelper(TableDbHelperBase): res = self.do_select(sql) return res[0]['center'] if res else None + def gen_cross_type_dict(self): + sql = """ + select mapping_code, web_tag from tags.cross_tag_meta where field_eng_name = 'cross_type' + """ + res = self.do_select(sql) + cross_type_dict = {item['mapping_code']: item['web_tag'] for item in res} + return cross_type_dict \ No newline at end of file diff --git a/tool/XX市第XX周路口巡检周报(模板).docx b/tool/XX市第XX周路口巡检周报(模板).docx index 78986c5a39ac2efb581ecd52e71b2e73233ea2e8..7d05010c8d3f138405ee0c9907281b6bcedff43b 100644 GIT binary patch delta 9099 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 delta 9040 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 P3sv>zL1}jTkMzF)jLRd! diff --git a/tool/cross_monitor_week_report.py b/tool/cross_monitor_week_report.py index 15fe2cb..77872f6 100644 --- a/tool/cross_monitor_week_report.py +++ b/tool/cross_monitor_week_report.py @@ -8,6 +8,8 @@ 3. 表格 -> data['part2'] """ import io +import logging +import re from datetime import datetime from docx import Document @@ -218,6 +220,7 @@ def add_merged_table_rows(table, table_data, cell_style): except Exception as e: print(f"合并单元格失败: {e}") + def process_merged_table(doc, data): table_data = data.get('part2', {}).get('data', []) table_cell_style = get_style_table_cell(doc) @@ -254,9 +257,20 @@ def fill_report_template(data): # 2. 替换正文和日期 replace_basic_placeholders(doc, data) - + tabel_style = get_style_table_cell(doc) # 3. 处理表格 process_merged_table(doc, data) + + for table in doc.tables: + if len(table.rows) > 0 and len(table.rows[0].cells) == 5: + for row_index, row in enumerate(table.rows): + if row_index == 0: + continue + columns = [table.columns[0], table.columns[1], table.columns[2]] + for column in columns: + for cell in column.cells: + set_cell_content(cell, cell.text.replace('\n', ''), tabel_style) + city_name = data.get('title', {}).get('city', '') week_num = data.get('title', {}).get('week_num', '') file_stream = io.BytesIO() @@ -275,69 +289,7 @@ def fill_report_template(data): # ================= 3. 测试运行 ================= if __name__ == "__main__": # 使用您提供的新数据结构 - report_data = { - 'title': { - 'city': 'XX', - 'week_num': 15, - }, - 'date': '2024年4月8日-2024年4月14日', - 'part1': { - 'total': 120, - 'normal_cross_num': 85, - 'focus_cross_num': 35, - 'error_cross_num': 8, - 'usually_err_info': '信号灯故障3起', - 'phase_err_num': '相位异常2起', - 'static_org_num': '标志标线问题2起', - 'static_device_num': '设备损坏1起', - }, - 'part2': { - 'data': [ - { - 'name': '信号系统', - 'item_data': [ - { - 'name': '信号灯', - 'num': 3, - 'item_data': [ - {'cross_name': '中山路-解放路', 'process_func': '已更换LED模块'}, - {'cross_name': '人民路-建设路', 'process_func': '已修复电源线路'}, - {'cross_name': '光明路-新华路', 'process_func': '已调整配时方案'} - ] - }, - { - 'name': '相位控制', - 'num': 2, - 'item_data': [ - {'cross_name': '胜利路-和平路', 'process_func': '已重新配置相位'}, - {'cross_name': '东风路-红旗路', 'process_func': '已优化绿信比'} - ] - } - ] - }, - { - 'name': '静态设施', - 'item_data': [ - { - 'name': '交通标志', - 'num': 2, - 'item_data': [ - {'cross_name': '文化路-教育路', 'process_func': '已更换破损标志'}, - {'cross_name': '体育路-健康路', 'process_func': '已补充缺失标线'} - ] - }, - { - 'name': '设备设施', - 'num': 1, - 'item_data': [ - {'cross_name': '科技路-创新路', 'process_func': '已维修检测设备'} - ] - } - ] - } - ] - } - } + report_data = {'title': {'city': '福州市', 'week_num': 19}, 'date': '2026年05月12日', 'part1': {'total': 3, 'normal_cross_num': 3, 'focus_cross_num': 0, 'error_cross_num': 2, 'usually_err_info': '异常最多的巡检项为机动车多次排队(2个)、路口周期过大(2个)。', 'phase_err_num': '需要优化路口方案的路口0个', 'static_org_num': '需要调整交通组织路口2个', 'static_device_num': '需要调整交通设施路口1个'}, 'part2': {'data': [{'name': '台账录入情况', 'item_data': [{'name': '录入渠化台账信息与现场不符', 'num': 0, 'item_data': []}, {'name': '录入配时方案与实际运行方案不符', 'num': 0, 'item_data': []}]}, {'name': '路口运行情况', 'item_data': [{'name': '机动车多次排队', 'num': 2, 'item_data': [{'cross_name': '康达路与清展街交叉口', 'process_func': ''}, {'cross_name': '清展街与福和路交叉口', 'process_func': '调整交通组织,其他处置措施'}]}, {'name': '停车次数较高', 'num': 0, 'item_data': []}]}, {'name': '配时方案情况', 'item_data': [{'name': '路口周期过大', 'num': 2, 'item_data': [{'cross_name': '康达路与清展街交叉口', 'process_func': ''}, {'cross_name': '清展街与福和路交叉口', 'process_func': '调整交通组织,其他处置措施'}]}, {'name': '行人过街时间不足', 'num': 0, 'item_data': []}]}, {'name': '设备设施情况', 'item_data': [{'name': '信号灯缺、损', 'num': 0, 'item_data': []}]}]}} fill_report_template( report_data diff --git a/tool/qcos_func.py b/tool/qcos_func.py index 1954cb9..2458bf2 100644 --- a/tool/qcos_func.py +++ b/tool/qcos_func.py @@ -142,6 +142,26 @@ class CosFolderManager: self.create_folder(folder_path) return False + def file_exists(self, file_path): + """ + 判断文件是否存在 + :param file_path: 文件路径,如 'data/test.txt' 或 '/data/test.txt' + :return: True/False + """ + # 1. 去除开头的 /,保证路径格式统一 + key = file_path.lstrip('/') + + if not key: + return False # 空路径视为文件不存在 + + try: + # 2. 调用 SDK 自带的 object_exists 方法进行判断 + return self.client.object_exists(Bucket=self.bucket, Key=key) + except Exception as e: + # 3. 捕获其他可能的异常(如网络错误、权限不足等),按需处理 + print(f"检查文件存在性时发生错误: {e}") + return False + if __name__ == '__main__': idx_to_localfile = {0:'D:/slgwork/slgcode/wave_survey/1739430848000.jpg',