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.oss_redis_intranet import redisClientIntranet 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(60) 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 插入对应的队列 rIntranet = redisClientIntranet() rIntranet.sadd('pb:begin_print_machine_'+machineId, data) #关闭切片软件 close() # 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)