Browse Source

4567789

master
dongchangxi 2 weeks ago
parent
commit
160a06bdb6
  1. 8
      factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py
  2. 50
      factory_sliceing/auto_sliceing_operate/main_download_zip.py
  3. 59
      factory_sliceing/build_exe.py
  4. 4
      factory_sliceing/config.toml
  5. 2
      factory_sliceing/download_batch_data/main_download_batch_data_and_trans.py
  6. 7
      factory_sliceing/main.py
  7. 3
      factory_sliceing/requirements.txt

8
factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py

@ -10,7 +10,7 @@ from .utils.request import requestApiToUpdateSliceStatusComplate
from utils.config import cfg from utils.config import cfg
def upLoadSliceFileToOSS(folderPath): def upLoadSliceFileToOSS(data):
exe_path = cfg('exe.small_exe', None) exe_path = cfg('exe.small_exe', None)
if not exe_path: if not exe_path:
print(f"错误:exe_path 未配置") print(f"错误:exe_path 未配置")
@ -24,7 +24,7 @@ def upLoadSliceFileToOSS(folderPath):
if os.path.isdir(file1): if os.path.isdir(file1):
dataFilePath = os.path.join(dataFolder,file1, 'data.snslc') dataFilePath = os.path.join(dataFolder,file1, 'data.snslc')
if os.path.exists(dataFilePath): 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" #"C:/test/10192_small_No4/data"
@ -59,7 +59,7 @@ def BeginSliceing(batchId,machineId, folderPath,data):
# 开启死循环,判断文件是否全部导入成功 # 开启死循环,判断文件是否全部导入成功
log("切片结束") log("切片结束")
time.sleep(5) time.sleep(5)
res = upLoadSliceFileToOSS(folderPath) res = upLoadSliceFileToOSS(data)
if not res: if not res:
print("上传切片文件失败") print("上传切片文件失败")
exit(1) exit(1)
@ -67,7 +67,7 @@ def BeginSliceing(batchId,machineId, folderPath,data):
# requestApiToUpdateSliceStatusComplate(batchId, 0) # requestApiToUpdateSliceStatusComplate(batchId, 0)
# sadd 插入对应的队列 # sadd 插入对应的队列
r = redisClient() r = redisClient()
r.sadd('pb:begin_print_machine_'+machineId, batchId) r.sadd('pb:begin_print_machine_'+machineId, data)
def main(work_dir=None): def main(work_dir=None):
r = redisClient() r = redisClient()

50
factory_sliceing/auto_sliceing_operate/main_download_zip.py

@ -3,7 +3,7 @@ import zipfile,time
import os import os
from .utils.oss_redis import redisClient from .utils.oss_redis import redisClient
from .utils.logs import log from .utils.logs import log
from utils.config import cfg
# 打印机旁边的电脑下载切片文件到本地 # 打印机旁边的电脑下载切片文件到本地
# 解压压缩包,将数据移动到指定的目录 # 解压压缩包,将数据移动到指定的目录
# #
@ -26,19 +26,29 @@ def unzip(localZipPath, localUnzipPath):
def getCurrentMachineId(): def getCurrentMachineId():
# 获取当前电脑的id # 获取当前电脑的id
return "1" machineId = cfg('machine.id', None)
if machineId is None:
log("获取当前电脑id失败")
exit(0)
return machineId
def main(work_dir=None): def main(work_dir=None):
if work_dir is None: # if work_dir is None:
log("工作目录不能为空") # log("工作目录不能为空")
exit(0) # exit(0)
# redis 获取队列中的数据 # redis 获取队列中的数据
r = redisClient() r = redisClient()
machineId = getCurrentMachineId() machineId = getCurrentMachineId()
if machineId is None: if machineId is None:
log("获取当前电脑id失败") log("获取当前电脑id失败")
exit(0) exit(0)
downloadPath = cfg('machine.download_path', None)
if downloadPath is None:
log("数据存放路径失败没有设置")
exit(0)
while True: while True:
data = r.lpop('pb:begin_print_machine_'+machineId) data = r.lpop('pb:begin_print_machine_'+machineId)
if data is None: if data is None:
@ -47,24 +57,24 @@ def main(work_dir=None):
continue continue
data = data.decode('utf-8') data = data.decode('utf-8')
# 判断是否是数字 # 判断是否是数字
if not data.isdigit(): if data.isdigit():
log("取出的数据是数字") log("取出的数据是数字")
time.sleep(10) time.sleep(10)
continue continue
batchId = str(data) # batchId = str(data)
ossZipPath = f'data/slice/{batchId}.zip' ossZipPath = f'slice/complate/{data}/data.snslc'
localZipPath = os.path.join(work_dir,batchId, f'{batchId}.zip') localPath = os.path.join(downloadPath, f'data.snslc')
# 判断目录是否存在,不存在就创建 # 判断目录是否存在,不存在就创建
if not os.path.exists(os.path.join(work_dir,batchId)): if not os.path.exists(os.path.join(downloadPath)):
os.makedirs(os.path.join(work_dir,batchId)) os.makedirs(os.path.join(downloadPath))
else: else:
# 删除目录下的所有文件 # 删除目录下的所有文件
for file in os.listdir(os.path.join(work_dir,batchId)): for file in os.listdir(os.path.join(downloadPath)):
os.remove(os.path.join(work_dir,batchId, file)) os.remove(os.path.join(downloadPath, file))
# 下载 zip 文件 # 下载 zip 文件
downloadZip(ossZipPath, localZipPath) downloadZip(ossZipPath, localPath)
# 解压 zip 文件 # # 解压 zip 文件
localUnzipPath = os.path.join(work_dir,batchId) # localUnzipPath = os.path.join(work_dir,batchId)
unzip(localZipPath, localUnzipPath) # unzip(localZipPath, localUnzipPath)
# 触发打印处理 # # 触发打印处理

59
factory_sliceing/build_exe.py

@ -39,7 +39,22 @@ def build_exe():
'--hidden-import=download_batch_data', '--hidden-import=download_batch_data',
'--hidden-import=download_batch_data.main_download_batch_data_and_trans', '--hidden-import=download_batch_data.main_download_batch_data_and_trans',
'--hidden-import=auto_sliceing_operate.utils', '--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',
'--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 自动化相关模块 # UI 自动化相关模块
'--hidden-import=uiautomation', '--hidden-import=uiautomation',
@ -58,6 +73,36 @@ def build_exe():
# 其他可能需要的模块 # 其他可能需要的模块
'--hidden-import=psutil', # 进程管理(可选,但有 try-except) '--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 客户端相关模块 # MinIO 客户端相关模块
'--hidden-import=minio', '--hidden-import=minio',
'--hidden-import=minio.error', '--hidden-import=minio.error',
@ -161,9 +206,19 @@ def build_exe():
print() print()
print("使用方法:") print("使用方法:")
print(" factory_sliceing.exe <command> [work_dir]") print(" factory_sliceing.exe <command> [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()
print("注意: 配置文件 config.toml 需要放在 exe 同级目录") print("注意:")
print(" - 配置文件 config.toml 需要放在 exe 同级目录")
print(" - work_dir 参数可选,如果未提供将从配置文件读取默认值")
return True return True
else: else:
print("打包失败!") print("打包失败!")

4
factory_sliceing/config.toml

@ -42,3 +42,7 @@ soft_name = "赛纳3D打印控制系统 V1.4.3.6"
big_exe = "" 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" 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 = ""

2
factory_sliceing/download_batch_data/main_download_batch_data_and_trans.py

@ -52,6 +52,8 @@ def step1(versionId):
elif str(machineInfo["machine_type"]) == '2': elif str(machineInfo["machine_type"]) == '2':
machineType = 'big' machineType = 'big'
keyValue = f'{versionId}_{machineType}_No{machineInfo["id"]}' keyValue = f'{versionId}_{machineType}_No{machineInfo["id"]}'
# 小机台才塞入我的切片队列,大机台有自己的切片队列
if machineType == 'small':
r = redisClient() r = redisClient()
r.sadd('pb:to_sliceing', keyValue) r.sadd('pb:to_sliceing', keyValue)
return True return True

7
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 <command> [work_dir]') print('Usage: python main.py <command> [work_dir]')
print('可用命令:', ' | '.join(command_handlers.keys())) print('可用命令:', ' | '.join(command_handlers.keys()))
print('\n注意: work_dir 参数可选,如果未提供将从配置文件读取默认值') print('\n注意: work_dir 参数可选,如果未提供将从配置文件读取默认值')
@ -29,14 +29,15 @@ if __name__ == '__main__':
print('可用命令:', ' | '.join(command_handlers.keys())) print('可用命令:', ' | '.join(command_handlers.keys()))
sys.exit(1) sys.exit(1)
# 获取工作目录:优先使用命令行参数,其次使用配置文件,最后使用当前目录 # 获取工作目录:优先使用命令行参数,其次使用配置文件,最后使用 None
work_dir = sys.argv[2] work_dir = sys.argv[2]
# 打印配置信息(可选,用于调试) # 打印配置信息(可选,用于调试)
if cfg('log.level', 'INFO') == 'DEBUG': if cfg('log.level', 'INFO') == 'DEBUG':
print(f'配置信息:') print(f'配置信息:')
print(f' - API URL: {cfg("api.base_url", "未配置")}') print(f' - API URL: {cfg("api.base_url", "未配置")}')
print(f' - Redis Host: {cfg("redis.host", "未配置")}') 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) command_handlers[command](work_dir=work_dir)

3
factory_sliceing/requirements.txt

@ -12,6 +12,9 @@ oss2>=2.17.0
# HTTP 请求 # HTTP 请求
requests>=2.28.0 requests>=2.28.0
# 数值计算(用于 small_machine_transform.py)
numpy>=1.20.0
# UI 自动化(Windows) # UI 自动化(Windows)
uiautomation>=2.0.0 uiautomation>=2.0.0

Loading…
Cancel
Save