diff --git a/sf_quality/data/insepection_report_template.xml b/sf_quality/data/insepection_report_template.xml
index afe7148b..4f28173b 100644
--- a/sf_quality/data/insepection_report_template.xml
+++ b/sf_quality/data/insepection_report_template.xml
@@ -73,7 +73,8 @@
| 产品名称: |
- |
+
+ |
材料: |
|
diff --git a/tool_service/装夹自动保存检测文件服务/app.py b/tool_service/装夹自动保存检测文件服务/app.py
index ba41f666..06a0f2bd 100644
--- a/tool_service/装夹自动保存检测文件服务/app.py
+++ b/tool_service/装夹自动保存检测文件服务/app.py
@@ -6,10 +6,7 @@ import win32gui
import win32con
import logging
import time
-
-# 配置日志记录
-logging.basicConfig(filename='service.log', level=logging.INFO,
- format='%(asctime)s - %(levelname)s - %(message)s')
+import re
app = FastAPI()
@@ -19,11 +16,11 @@ class FileUploadRequest(BaseModel):
# FTP 服务器配置信息
-ftp_host = '110.52.114.162'
-ftp_port = 10021
+ftp_host = '47.119.33.43'
+ftp_port = 21
ftp_user = 'ftpuser'
-ftp_password = '123456'
-ftp_directory = '/home/ftp/ftp_root/ThreeTest/XT/Before/'
+ftp_password = 'FTPftp123'
+ftp_directory = 'ThreeTest/XT/Before/'
def find_child_window(parent_hwnd, class_name):
@@ -63,25 +60,95 @@ def find_child_window_by_title(parent_hwnd, title):
return child_hwnds
+# 获取 ComboBox 的句柄
+def get_combobox_handle(parent_handle):
+ combo_handle = win32gui.FindWindowEx(parent_handle, 0, "ComboBox", None)
+ if combo_handle == 0:
+ raise Exception("ComboBox not found")
+ return combo_handle
+
+
+# 获取 ComboBox 中的所有选项
+def get_combobox_items(combo_handle):
+ count = win32gui.SendMessage(combo_handle, win32con.CB_GETCOUNT, 0, 0)
+ items = []
+ for i in range(count):
+ length = win32gui.SendMessage(combo_handle, win32con.CB_GETLBTEXTLEN, i, 0)
+ buffer = win32gui.PyMakeBuffer(length + 1)
+ win32gui.SendMessage(combo_handle, win32con.CB_GETLBTEXT, i, buffer)
+ byte_data = buffer.tobytes()
+
+ # 尝试多种编码方式
+ text = None
+ # 尝试多种编码方式,包括utf-16le
+ for encoding in ['utf-16le', 'utf-8', 'gbk', 'latin-1']:
+ try:
+ decoded_text = byte_data.decode(encoding).rstrip('\x00')
+ # 如果解码后的文本看起来是合理的,就接受它
+ if any(char.isprintable() for char in decoded_text):
+ text = decoded_text
+ break
+ except UnicodeDecodeError:
+ continue
+
+ # 如果所有解码方式都失败,或者内容仍有大量乱码,显示为十六进制字符串
+ if text is None or not all(char.isprintable() or char.isspace() for char in text):
+ text = byte_data.hex()
+
+ items.append(text)
+ return items
+
+
+# 获取当前选定项
+def get_combobox_selected(combo_handle):
+ index = win32gui.SendMessage(combo_handle, win32con.CB_GETCURSEL, 0, 0)
+ if index == -1:
+ return None
+ length = win32gui.SendMessage(combo_handle, win32con.CB_GETLBTEXTLEN, index, 0)
+ buffer = win32gui.PyMakeBuffer(1024) # 调整缓冲区大小
+ win32gui.SendMessage(combo_handle, win32con.CB_GETLBTEXT, index, buffer)
+
+ # 尝试多种编码方式进行解码
+ for encoding in ['utf-16le', 'utf-8', 'latin-1']:
+ try:
+ # 解码
+ raw_text = buffer.tobytes().decode(encoding, errors='ignore').rstrip('\x00')
+ # 使用正则表达式查找 "数字 + 月" 格式的部分
+ match = re.search(r'\d+月', raw_text)
+ if match:
+ return match.group()
+ # 使用正则表达式提取有效字符(中文、数字、字母和常见标点)
+ filtered_text = re.findall(r'[\w\u4e00-\u9fa5]+', raw_text)
+ # 返回匹配到的第一个有效部分
+ if filtered_text:
+ return filtered_text[0].strip()
+ except UnicodeDecodeError:
+ continue # 尝试下一个编码方式
+
+ # 如果所有解码方式都失败,返回 None
+ return None
+
+
+# 设置 ComboBox 的值
+def set_combobox_value(combo_handle, value):
+ items = get_combobox_items(combo_handle)
+ try:
+ index = items.index(value)
+ win32gui.SendMessage(combo_handle, win32con.CB_SETCURSEL, index, 0)
+ except ValueError:
+ raise Exception("Value not found in ComboBox")
+
+
def set_path_and_save(filename):
- parent_hwnd = win32gui.FindWindow(None, '另存为')
+ parent_hwnd = win32gui.FindWindow(None, '保存Excel文件')
if parent_hwnd == 0:
raise HTTPException(status_code=404, detail="没有找到保存报告的窗口,请检查!")
- # 这里假设“地址:”是你需要的部分标题
- address_hwnds = find_child_window_by_partial_title(parent_hwnd, "地址:")
-
- # 确保找到的窗口句柄有效
- if not address_hwnds:
- raise HTTPException(status_code=404, detail="未找到地址框,请联系管理员!")
-
- # 假设找到的第一个窗口是目标组件
- address_hwnd = address_hwnds[0]
- logging.info(f"找到地址框地址: {win32gui.GetWindowText(address_hwnd)}")
-
- # 设置路径
- local_file_path = os.path.join(win32gui.GetWindowText(address_hwnd).split(' ')[1], filename)
+ combo_handle = get_combobox_handle(parent_hwnd)
+ #logging.info(f"ComboBox Items: {get_combobox_items(combo_handle)}")
+ logging.info(f"Current Selected: {get_combobox_selected(combo_handle)}")
+ local_file_path = "C:\\RationalDMIS64\\Output\\" + get_combobox_selected(combo_handle) + "\\" + filename
logging.info(f"设置路径: {local_file_path}")
path_hwnds = find_child_window(parent_hwnd, 'Edit')
@@ -115,7 +182,6 @@ def wait_for_file_to_save(filepath, timeout=30):
def upload_file_to_ftp(local_file):
-
if not os.path.isfile(local_file):
raise HTTPException(status_code=204, detail="文件未找到")
@@ -157,4 +223,4 @@ async def upload_file(request: FileUploadRequest):
if __name__ == "__main__":
import uvicorn
- uvicorn.run(app, host="0.0.0.0", port=8000)
+ uvicorn.run(app, host="0.0.0.0", port=8999)