diff --git a/factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py b/factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py index 947b29c..6caea69 100644 --- a/factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py +++ b/factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py @@ -10,7 +10,7 @@ from .utils.request import requestApiToUpdateSliceStatusComplate from utils.config import cfg -def upLoadSliceFileToOSS(folderPath): +def upLoadSliceFileToOSS(data): exe_path = cfg('exe.small_exe', None) if not exe_path: print(f"错误:exe_path 未配置") @@ -24,7 +24,7 @@ def upLoadSliceFileToOSS(folderPath): if os.path.isdir(file1): dataFilePath = os.path.join(dataFolder,file1, 'data.snslc') if os.path.exists(dataFilePath): - upload_file(f"complatte/slice/{folderPath}/data.snslc", dataFilePath) + upload_file(f"slice/complate/{data}/data.snslc", dataFilePath) #"C:/test/10192_small_No4/data" @@ -59,7 +59,7 @@ def BeginSliceing(batchId,machineId, folderPath,data): # 开启死循环,判断文件是否全部导入成功 log("切片结束") time.sleep(5) - res = upLoadSliceFileToOSS(folderPath) + res = upLoadSliceFileToOSS(data) if not res: print("上传切片文件失败") exit(1) @@ -67,7 +67,7 @@ def BeginSliceing(batchId,machineId, folderPath,data): # requestApiToUpdateSliceStatusComplate(batchId, 0) # sadd 插入对应的队列 r = redisClient() - r.sadd('pb:begin_print_machine_'+machineId, batchId) + r.sadd('pb:begin_print_machine_'+machineId, data) def main(work_dir=None): r = redisClient() diff --git a/factory_sliceing/auto_sliceing_operate/main_download_zip.py b/factory_sliceing/auto_sliceing_operate/main_download_zip.py index f7fd097..c9119ef 100644 --- a/factory_sliceing/auto_sliceing_operate/main_download_zip.py +++ b/factory_sliceing/auto_sliceing_operate/main_download_zip.py @@ -3,7 +3,7 @@ import zipfile,time import os from .utils.oss_redis import redisClient from .utils.logs import log - +from utils.config import cfg # 打印机旁边的电脑下载切片文件到本地 # 解压压缩包,将数据移动到指定的目录 # @@ -26,19 +26,29 @@ def unzip(localZipPath, localUnzipPath): def getCurrentMachineId(): # 获取当前电脑的id - return "1" - + machineId = cfg('machine.id', None) + if machineId is None: + log("获取当前电脑id失败") + exit(0) + return machineId def main(work_dir=None): - if work_dir is None: - log("工作目录不能为空") - exit(0) + # if work_dir is None: + # log("工作目录不能为空") + # exit(0) # redis 获取队列中的数据 r = redisClient() machineId = getCurrentMachineId() if machineId is None: log("获取当前电脑id失败") exit(0) + + downloadPath = cfg('machine.download_path', None) + if downloadPath is None: + log("数据存放路径失败没有设置") + exit(0) + + while True: data = r.lpop('pb:begin_print_machine_'+machineId) if data is None: @@ -47,24 +57,24 @@ def main(work_dir=None): continue data = data.decode('utf-8') # 判断是否是数字 - if not data.isdigit(): - log("取出的数据不是数字") + if data.isdigit(): + log("取出的数据是数字") time.sleep(10) continue - batchId = str(data) - ossZipPath = f'data/slice/{batchId}.zip' - localZipPath = os.path.join(work_dir,batchId, f'{batchId}.zip') + # batchId = str(data) + ossZipPath = f'slice/complate/{data}/data.snslc' + localPath = os.path.join(downloadPath, f'data.snslc') # 判断目录是否存在,不存在就创建 - if not os.path.exists(os.path.join(work_dir,batchId)): - os.makedirs(os.path.join(work_dir,batchId)) + if not os.path.exists(os.path.join(downloadPath)): + os.makedirs(os.path.join(downloadPath)) else: # 删除目录下的所有文件 - for file in os.listdir(os.path.join(work_dir,batchId)): - os.remove(os.path.join(work_dir,batchId, file)) + for file in os.listdir(os.path.join(downloadPath)): + os.remove(os.path.join(downloadPath, file)) # 下载 zip 文件 - downloadZip(ossZipPath, localZipPath) - # 解压 zip 文件 - localUnzipPath = os.path.join(work_dir,batchId) - unzip(localZipPath, localUnzipPath) - # 触发打印处理 + downloadZip(ossZipPath, localPath) + # # 解压 zip 文件 + # localUnzipPath = os.path.join(work_dir,batchId) + # unzip(localZipPath, localUnzipPath) + # # 触发打印处理 diff --git a/factory_sliceing/build_exe.py b/factory_sliceing/build_exe.py index e632c65..1486bd3 100644 --- a/factory_sliceing/build_exe.py +++ b/factory_sliceing/build_exe.py @@ -39,7 +39,22 @@ def build_exe(): '--hidden-import=download_batch_data', '--hidden-import=download_batch_data.main_download_batch_data_and_trans', '--hidden-import=auto_sliceing_operate.utils', + '--hidden-import=auto_sliceing_operate.utils.exe_operate', + '--hidden-import=auto_sliceing_operate.utils.click_soft_button', + '--hidden-import=auto_sliceing_operate.utils.import_all_file', + '--hidden-import=auto_sliceing_operate.utils.miniIo', + '--hidden-import=auto_sliceing_operate.utils.oss_redis', + '--hidden-import=auto_sliceing_operate.utils.request', + '--hidden-import=auto_sliceing_operate.utils.logs', '--hidden-import=download_batch_data.utils', + '--hidden-import=download_batch_data.utils.funcs', + '--hidden-import=download_batch_data.utils.small_machine_transform', + '--hidden-import=download_batch_data.utils.oss_redis', + '--hidden-import=download_batch_data.utils.oss_func', + '--hidden-import=download_batch_data.utils.changeFiles', + '--hidden-import=download_batch_data.utils.logs', + '--hidden-import=utils', + '--hidden-import=utils.config', # UI 自动化相关模块 '--hidden-import=uiautomation', @@ -58,6 +73,36 @@ def build_exe(): # 其他可能需要的模块 '--hidden-import=psutil', # 进程管理(可选,但有 try-except) + # NumPy 相关模块(用于 small_machine_transform.py) + '--hidden-import=numpy', + '--hidden-import=numpy.core', + '--hidden-import=numpy.core._methods', + '--hidden-import=numpy.lib', + '--hidden-import=numpy.lib.format', + '--collect-all=numpy', # 收集 numpy 的所有子模块和依赖 + + # OSS2 客户端相关模块 + '--hidden-import=oss2', + '--hidden-import=oss2.models', + '--hidden-import=oss2.exceptions', + '--collect-all=oss2', # 收集 oss2 的所有子模块和依赖 + + # Redis 客户端相关模块 + '--hidden-import=redis', + '--hidden-import=redis.connection', + '--hidden-import=redis.client', + '--collect-all=redis', # 收集 redis 的所有子模块和依赖 + + # Requests 相关模块 + '--hidden-import=requests', + '--hidden-import=requests.adapters', + '--hidden-import=urllib3', + '--collect-all=requests', # 收集 requests 的所有子模块和依赖 + + # TOML 配置文件解析模块 + '--hidden-import=toml', # 如果 Python < 3.11 需要 toml 包 + '--hidden-import=tomllib', # Python 3.11+ 内置模块 + # MinIO 客户端相关模块 '--hidden-import=minio', '--hidden-import=minio.error', @@ -161,9 +206,19 @@ def build_exe(): print() print("使用方法:") print(" factory_sliceing.exe [work_dir]") - print(" 可用命令: batch_download | begin_sliceing | download_zip") + print(" 可用命令:") + print(" - batch_download: 批量下载数据并转换") + print(" - begin_sliceing: 开始切片处理") + print(" - download_zip: 下载切片文件") + print() + print(" 示例:") + print(" factory_sliceing.exe batch_download D:/work") + print(" factory_sliceing.exe begin_sliceing") + print(" factory_sliceing.exe download_zip") print() - print("注意: 配置文件 config.toml 需要放在 exe 同级目录") + print("注意:") + print(" - 配置文件 config.toml 需要放在 exe 同级目录") + print(" - work_dir 参数可选,如果未提供将从配置文件读取默认值") return True else: print("打包失败!") diff --git a/factory_sliceing/config.toml b/factory_sliceing/config.toml index 544c51c..7b9ad53 100644 --- a/factory_sliceing/config.toml +++ b/factory_sliceing/config.toml @@ -42,3 +42,7 @@ soft_name = "赛纳3D打印控制系统 V1.4.3.6" big_exe = "" small_exe = "C:/Users/Administrator/print_factory_type_setting/software/小机型 切片软件/切片软件V1.4.3.6_2/切片软件V1.4.3.6_2/NormalTek.ThreeDPrinter.UI.exe" +#机器编号 +[machine] +id=1 +download_path = "" \ No newline at end of file diff --git a/factory_sliceing/download_batch_data/main_download_batch_data_and_trans.py b/factory_sliceing/download_batch_data/main_download_batch_data_and_trans.py index fc516cb..f2c4a0f 100644 --- a/factory_sliceing/download_batch_data/main_download_batch_data_and_trans.py +++ b/factory_sliceing/download_batch_data/main_download_batch_data_and_trans.py @@ -52,8 +52,10 @@ def step1(versionId): elif str(machineInfo["machine_type"]) == '2': machineType = 'big' keyValue = f'{versionId}_{machineType}_No{machineInfo["id"]}' - r = redisClient() - r.sadd('pb:to_sliceing', keyValue) + # 小机台才塞入我的切片队列,大机台有自己的切片队列 + if machineType == 'small': + r = redisClient() + r.sadd('pb:to_sliceing', keyValue) return True diff --git a/factory_sliceing/main.py b/factory_sliceing/main.py index effe4a0..a1fa2f2 100644 --- a/factory_sliceing/main.py +++ b/factory_sliceing/main.py @@ -15,7 +15,7 @@ if __name__ == '__main__': } # 检查参数数量 - if len(sys.argv) < 2: + if len(sys.argv) < 2 and sys.argv[1] != 'download_zip': print('Usage: python main.py [work_dir]') print('可用命令:', ' | '.join(command_handlers.keys())) print('\n注意: work_dir 参数可选,如果未提供将从配置文件读取默认值') @@ -29,14 +29,15 @@ if __name__ == '__main__': print('可用命令:', ' | '.join(command_handlers.keys())) sys.exit(1) - # 获取工作目录:优先使用命令行参数,其次使用配置文件,最后使用当前目录 + # 获取工作目录:优先使用命令行参数,其次使用配置文件,最后使用 None work_dir = sys.argv[2] + # 打印配置信息(可选,用于调试) if cfg('log.level', 'INFO') == 'DEBUG': print(f'配置信息:') print(f' - API URL: {cfg("api.base_url", "未配置")}') print(f' - Redis Host: {cfg("redis.host", "未配置")}') - print(f' - 工作目录: {work_dir}') + print(f' - 工作目录: {work_dir if work_dir else "未指定(将使用默认值)"}') # 执行对应的处理函数 command_handlers[command](work_dir=work_dir) \ No newline at end of file diff --git a/factory_sliceing/requirements.txt b/factory_sliceing/requirements.txt index ec81314..09b0504 100644 --- a/factory_sliceing/requirements.txt +++ b/factory_sliceing/requirements.txt @@ -12,6 +12,9 @@ oss2>=2.17.0 # HTTP 请求 requests>=2.28.0 +# 数值计算(用于 small_machine_transform.py) +numpy>=1.20.0 + # UI 自动化(Windows) uiautomation>=2.0.0