建模程序 多个定时程序
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.
 
 

102 lines
3.5 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 = ""
for file1 in os.listdir(dataFolder):
if os.path.isdir(file1):
dataFilePath = os.path.join(dataFolder,file1, 'data.snslc')
if os.path.exists(dataFilePath):
upload_file(f"slice/complate/{data}/data.snslc", dataFilePath)
#"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')
# 判断是否是字符串
if not isinstance(data, str):
log("取出的数据不是字符串")
time.sleep(10)
continue
folderPath = os.path.join(work_dir,"batchPrint", data,"data")
# 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)