Browse Source

最新版

master
dongchangxi 1 week ago
parent
commit
47bad0c0cb
  1. 3
      .gitignore
  2. 15
      factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py
  3. 31
      factory_sliceing/auto_sliceing_operate/main_download_zip.py
  4. 10
      factory_sliceing/auto_sliceing_operate/test.py
  5. 1
      factory_sliceing/auto_sliceing_operate/test.txt
  6. 28
      factory_sliceing/auto_sliceing_operate/utils/miniIo.py
  7. 13
      factory_sliceing/config.toml
  8. 6
      factory_sliceing/main.py
  9. 20
      factory_sliceing/test.py
  10. 1
      factory_sliceing/test.txt
  11. 1
      factory_sliceing/testAAA.txt

3
.gitignore vendored

@ -15,7 +15,7 @@ test/test1.py
timer/29.zip timer/29.zip
yj_local_build/main_step1.spec yj_local_build/main_step1.spec
yj_local_build/建模source_code.zip yj_local_build/建模source_code.zip
apps/__pycache__/fix_up_color_two_a.cpython-310.pyc apps/__pycache__/
apps/__pycache__/ps_image_shadow_up_ag_two_a.cpython-310.pyc apps/__pycache__/ps_image_shadow_up_ag_two_a.cpython-310.pyc
apps/__pycache__/white_purification_v3.cpython-310.pyc apps/__pycache__/white_purification_v3.cpython-310.pyc
apps/__pycache__/white_purification_v4.cpython-310.pyc apps/__pycache__/white_purification_v4.cpython-310.pyc
@ -84,3 +84,4 @@ factory_sliceing/utils/__pycache__/__init__.cpython-311.pyc
factory_sliceing/utils/__pycache__/ factory_sliceing/utils/__pycache__/
factory_sliceing/auto_sliceing_operate/utils/__pycache__/ factory_sliceing/auto_sliceing_operate/utils/__pycache__/
factory_sliceing/@AutomationLog.txt factory_sliceing/@AutomationLog.txt
factory_sliceing/auto_sliceing_operate/utils/__pycache__/logs.cpython-311.pyc

15
factory_sliceing/auto_sliceing_operate/main_begin_sliceing.py

@ -20,11 +20,15 @@ def upLoadSliceFileToOSS(data):
print(f"错误:dataFolder 文件夹不存在 - {dataFolder}") print(f"错误:dataFolder 文件夹不存在 - {dataFolder}")
exit(1) exit(1)
dataFilePath = "" dataFilePath = ""
print(f"开始上传文件: {dataFolder},{os.listdir(dataFolder)}")
for file1 in os.listdir(dataFolder): for file1 in os.listdir(dataFolder):
if os.path.isdir(file1): if os.path.isdir(os.path.join(dataFolder,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"slice/complate/{data}/data.snslc", 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" #"C:/test/10192_small_No4/data"
@ -87,12 +91,19 @@ def main(work_dir=None):
time.sleep(10) time.sleep(10)
continue continue
data = data.decode('utf-8') data = data.decode('utf-8')
# data = "10192_small_No4"
# 判断是否是字符串 # 判断是否是字符串
if not isinstance(data, str): if not isinstance(data, str):
log("取出的数据不是字符串") log("取出的数据不是字符串")
time.sleep(10) time.sleep(10)
continue continue
folderPath = os.path.join(work_dir,"batchPrint", data,"data") 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 # data 格式为 batchId_machineType_No machineId
batchId = data.split('_')[0] #批次ID batchId = data.split('_')[0] #批次ID
# machineType = data.split('_')[1] #机型类型 # machineType = data.split('_')[1] #机型类型

31
factory_sliceing/auto_sliceing_operate/main_download_zip.py

@ -33,24 +33,23 @@ def getCurrentMachineId():
return machineId return machineId
def main(work_dir=None): def main(work_dir=None):
# if work_dir is None:
# log("工作目录不能为空")
# exit(0)
# redis 获取队列中的数据
r = redisClient()
machineId = getCurrentMachineId()
if machineId is None:
log("获取当前电脑id失败")
exit(0)
downloadPath = cfg('machine.download_path', None) downloadPath = cfg('machine.download_path', None)
if downloadPath is None: if downloadPath is None:
log("数据存放路径失败没有设置") log("工作目录不能为空")
exit(0) exit(0)
if not os.path.exists(downloadPath):
os.makedirs(downloadPath)
r = redisClient()
machineId = getCurrentMachineId()
if machineId is None:
log("获取当前电脑id失败")
exit(0)
while True: while True:
data = r.lpop('pb:begin_print_machine_'+machineId) data = r.spop('pb:begin_print_machine_'+machineId)
if data is None: if data is None:
log("队列为空") log("队列为空")
time.sleep(10) time.sleep(10)
@ -63,17 +62,17 @@ def main(work_dir=None):
continue continue
# batchId = str(data) # batchId = str(data)
ossZipPath = f'slice/complate/{data}/data.snslc' ossZipPath = f'slice/complate/{data}/data.snslc'
localPath = os.path.join(downloadPath, f'data.snslc') localPath = os.path.join(downloadPath,data, f'data.snslc')
# 判断目录是否存在,不存在就创建 # 判断目录是否存在,不存在就创建
if not os.path.exists(os.path.join(downloadPath)): if not os.path.exists(os.path.join(downloadPath)):
os.makedirs(os.path.join(downloadPath)) os.makedirs(os.path.join(downloadPath))
else: else:
# 删除目录下的所有文件 # 删除目录下指定文件,如果存在
for file in os.listdir(os.path.join(downloadPath)): if os.path.exists(os.path.join(downloadPath,data, f'data.snslc')):
os.remove(os.path.join(downloadPath, file)) os.remove(os.path.join(downloadPath,data, f'data.snslc'))
# 下载 zip 文件 # 下载 zip 文件
downloadZip(ossZipPath, localPath) downloadZip(ossZipPath, localPath)
th, localPath)
# # 解压 zip 文件 # # 解压 zip 文件
# localUnzipPath = os.path.join(work_dir,batchId) # localUnzipPath = os.path.join(work_dir,batchId)
# unzip(localZipPath, localUnzipPath) # unzip(localZipPath, localUnzipPath)

10
factory_sliceing/auto_sliceing_operate/test.py

@ -0,0 +1,10 @@
from .utils.miniIo import upload_file
# 测试上传文件
def test_upload_file():
upload_file("test.txt", "test.txt")
if __name__ == "__main__":
test_upload_file()

1
factory_sliceing/auto_sliceing_operate/test.txt

@ -0,0 +1 @@
AAAAAAAAAAA

28
factory_sliceing/auto_sliceing_operate/utils/miniIo.py

@ -15,7 +15,7 @@ def get_bucket_name():
global _bucket_name global _bucket_name
if _bucket_name is None: if _bucket_name is None:
# 优先从配置文件读取,如果没有则从环境变量读取,最后使用默认值 # 优先从配置文件读取,如果没有则从环境变量读取,最后使用默认值
_bucket_name = cfg('minio.bucket', None) or os.getenv('MINIO_BUCKET', 'default-bucket') _bucket_name = cfg('minio.bucket', None)
log(f"MiniIO 存储桶名称: {_bucket_name}") log(f"MiniIO 存储桶名称: {_bucket_name}")
return _bucket_name return _bucket_name
@ -33,10 +33,17 @@ class MiniIOClientSingleton:
if self._client is None: if self._client is None:
# MiniIO 连接配置 # MiniIO 连接配置
# 可以从环境变量或配置文件中读取 # 可以从环境变量或配置文件中读取
endpoint = os.getenv('MINIO_ENDPOINT', 'localhost:9000') endpoint = cfg('minio.endpoint', 'localhost:9000')
access_key = os.getenv('MINIO_ACCESS_KEY', 'minioadmin') access_key = cfg('minio.access_key', 'minioadmin')
secret_key = os.getenv('MINIO_SECRET_KEY', 'minioadmin') secret_key = cfg('minio.secret_key', 'minioadmin')
secure = os.getenv('MINIO_SECURE', 'False').lower() == 'true' # secure 参数:True 使用 HTTPS,False 使用 HTTP
# 从配置文件读取,如果没有配置则默认为 False(HTTP)
secure_config = cfg('minio.secure', False)
# 确保是布尔值(处理字符串 'true'/'false' 的情况)
if isinstance(secure_config, str):
secure = secure_config.lower() in ('true', '1', 'yes')
else:
secure = bool(secure_config)
try: try:
self._client = Minio( self._client = Minio(
@ -45,9 +52,16 @@ class MiniIOClientSingleton:
secret_key=secret_key, secret_key=secret_key,
secure=secure secure=secure
) )
log(f"MiniIO 客户端初始化成功: {endpoint}") log(f"MiniIO 客户端初始化成功: {endpoint} (secure={secure})")
except Exception as e: except Exception as e:
log(f"MiniIO 客户端初始化失败: {str(e)}") error_msg = str(e)
# 检查是否是端口错误
if "API port" in error_msg or "InvalidArgument" in error_msg:
log(f"MiniIO 连接失败: 请确保使用的是 API 端口(通常是 9000),而不是 Console 端口(通常是 9001)")
log(f"当前配置的 endpoint: {endpoint}")
log(f"错误详情: {error_msg}")
else:
log(f"MiniIO 客户端初始化失败: {error_msg}")
raise raise
return self._client return self._client

13
factory_sliceing/config.toml

@ -23,6 +23,15 @@ access_key_secret = "8ywTDF9upPAtvgXtLKALY2iMYHIxdS"
endpoint = "oss-cn-shanghai.aliyuncs.com" endpoint = "oss-cn-shanghai.aliyuncs.com"
bucket = "suwa3d-securedata" bucket = "suwa3d-securedata"
#minio
[minio]
bucket="slicedata"
# endpoint 必须使用 API 端口(通常是 9000),不是 Console 端口(通常是 9001)
# Console 端口用于 Web 管理界面,API 端口用于 S3 API 操作
endpoint="192.168.10.102:9000"
access_key="minio"
secret_key="MinIO@suwa3d2025."
# API 配置 # API 配置
[api] [api]
base_url = "https://mp.api.suwa3d.com" base_url = "https://mp.api.suwa3d.com"
@ -44,5 +53,5 @@ small_exe = "C:/Users/Administrator/print_factory_type_setting/software/小机
#机器编号 #机器编号
[machine] [machine]
id=1 id="4"
download_path = "" download_path = "C://work/batchPrintSlice"

6
factory_sliceing/main.py

@ -11,11 +11,11 @@ if __name__ == '__main__':
command_handlers = { command_handlers = {
'batch_download': main_download_batch_data_and_trans.main, 'batch_download': main_download_batch_data_and_trans.main,
'begin_sliceing': main_begin_sliceing.main, 'begin_sliceing': main_begin_sliceing.main,
'download_zip': main_download_zip.main, 'download_slice': main_download_zip.main,
} }
# 检查参数数量 # 检查参数数量
if len(sys.argv) < 2 and sys.argv[1] != 'download_zip': if len(sys.argv) < 2 and sys.argv[1] != 'download_slice':
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 参数可选,如果未提供将从配置文件读取默认值')
@ -30,6 +30,8 @@ if __name__ == '__main__':
sys.exit(1) sys.exit(1)
# 获取工作目录:优先使用命令行参数,其次使用配置文件,最后使用 None # 获取工作目录:优先使用命令行参数,其次使用配置文件,最后使用 None
work_dir = None
if len(sys.argv) > 2:
work_dir = sys.argv[2] work_dir = sys.argv[2]
# 打印配置信息(可选,用于调试) # 打印配置信息(可选,用于调试)

20
factory_sliceing/test.py

@ -0,0 +1,20 @@
from auto_sliceing_operate.utils.miniIo import upload_file,check_file_exists,delete_file,download_file
# 测试上传文件
def test_upload_file():
upload_file("test.txt", "test.txt")
# 测试下载文件
def test_download_file():
download_file("test.txt", "testAAA.txt")
# 测试删除文件
def test_delete_file():
delete_file("test.txt")
# 测试检查文件是否存在
def test_check_file_exists():
print(check_file_exists("test.txt"))
test_download_file()

1
factory_sliceing/test.txt

@ -0,0 +1 @@
AAAAAAAAAAA

1
factory_sliceing/testAAA.txt

@ -0,0 +1 @@
AAAAAAAAAAA
Loading…
Cancel
Save