You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
4.0 KiB
113 lines
4.0 KiB
from .utils.import_all_file import modify_file_dialog_path_and_import_all |
|
from .utils.click_soft_button import clickFileIMportShow, clickBegingSlice,checkIsSliceingText |
|
import time |
|
from .utils.oss_redis import redisClient |
|
from .utils.exe_operate import start_exe, click_confirm, close |
|
from .utils.logs import log |
|
import os |
|
from .utils.miniIo import upload_file |
|
from .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) |
|
|
|
|