from auto_sliceing_operate.utils.import_all_file import modify_file_dialog_path_and_import_all from auto_sliceing_operate.utils.click_soft_button import clickFileIMportShow, clickBegingSlice,checkIsSliceingText import time from auto_sliceing_operate.utils.oss_redis import redisClient from auto_sliceing_operate.utils.exe_operate import start_exe, click_confirm, close from auto_sliceing_operate.utils.logs import log import os from auto_sliceing_operate.utils.miniIo import upload_file from auto_sliceing_operate.utils.request import requestApiToUpdateSliceStatusComplate from utils.config import cfg def upLoadSliceFileToOSS(data): exe_path = cfg('exe.small_exe', None) if not exe_path: print(f"错误:exe_path 未配置") exit(1) dataFolder = exe_path.replace('NormalTek.ThreeDPrinter.UI.exe','data') if not os.path.exists(dataFolder): print(f"错误:dataFolder 文件夹不存在 - {dataFolder}") exit(1) dataFilePath = "" print(f"开始上传文件: {dataFolder},{os.listdir(dataFolder)}") for file1 in os.listdir(dataFolder): if os.path.isdir(os.path.join(dataFolder,file1)): dataFilePath = os.path.join(dataFolder,file1, 'data.snslc') if os.path.exists(dataFilePath): print(f"开始上传文件: {dataFilePath},文件存在") return upload_file(f"slice/complate/{data}/data.snslc", dataFilePath) print(f"开始上传文件: {dataFilePath},文件不存在") return False #"C:/test/10192_small_No4/data" def BeginSliceing(batchId,machineId, folderPath,data): # 打开3d切片软件 start_exe(data) time.sleep(5) #点击确认按钮 # click_confirm() #先打开导入文件的弹框 clickFileIMportShow() time.sleep(1) #在输入路径导入obj文件 isSuccess = modify_file_dialog_path_and_import_all(folderPath) if not isSuccess: print("导入文件失败") exit() #点击开始切片 time.sleep(5) log("开始切片") clickBegingSlice() #开启是循环,判断切片是否完成 while True: time.sleep(60) sliceTime = checkIsSliceingText() if sliceTime is not True: print(f"还未切完,切片时长: {sliceTime} 分钟") time.sleep(60) elif sliceTime is True: break # 开启死循环,判断文件是否全部导入成功 log("切片结束") time.sleep(5) res = upLoadSliceFileToOSS(data) if not res: print("上传切片文件失败") exit(1) #切片完成之后,将切片文件打包成zip文件,上传到OSS,并且请求api 更新批次状态为切片完成 # requestApiToUpdateSliceStatusComplate(batchId, 0) # sadd 插入对应的队列 r = redisClient() r.sadd('pb:begin_print_machine_'+machineId, data) def main(work_dir=None): r = redisClient() while True: #判断队列连接是否正常,进行重连 if not r.ping(): log("队列连接异常,进行重连") r = redisClient() time.sleep(10) continue data = r.spop('pb:to_sliceing') if data is None: log("队列为空") time.sleep(10) continue data = data.decode('utf-8') # data = "10192_small_No4" # 判断是否是字符串 if not isinstance(data, str): log("取出的数据不是字符串") time.sleep(10) continue folderPath = os.path.join(work_dir,"batchPrint", data,"data") # 判断目录是否存在 if not os.path.exists(folderPath): log(f"目录不存在: {folderPath}") time.sleep(10) continue # data 格式为 batchId_machineType_No machineId batchId = data.split('_')[0] #批次ID # machineType = data.split('_')[1] #机型类型 machineId = data.split('_')[2].replace('No', '') #机器ID BeginSliceing(batchId,machineId,folderPath,data) time.sleep(10)