3 changed files with 234 additions and 38 deletions
@ -0,0 +1,134 @@ |
|||||||
|
import os,shutil |
||||||
|
import redis |
||||||
|
import oss2,time,sys |
||||||
|
import requests |
||||||
|
import argparse,json |
||||||
|
|
||||||
|
# 将当前脚本所在目录添加到 Python 路径,以便导入 utils 模块 |
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) |
||||||
|
|
||||||
|
# from download_print_out import download_transform_save_by_json |
||||||
|
from utils.oss_redis import redisClient |
||||||
|
from utils.funcs import downloadJsonAndJpgFileAndMoveToCorrectDir, downloadDataByOssAndTransformSave |
||||||
|
# 默认使用脚本所在目录 |
||||||
|
currentDir = os.path.dirname(os.path.abspath(__file__)) |
||||||
|
|
||||||
|
ENV = 'prod' |
||||||
|
url = 'https://mp.api.suwa3d.com' |
||||||
|
if ENV == 'dev': |
||||||
|
url = 'http://mp.api.dev.com' |
||||||
|
elif ENV == 'prod': |
||||||
|
url = 'https://mp.api.suwa3d.com' |
||||||
|
|
||||||
|
|
||||||
|
#判断是否上传了 JSON 文件 |
||||||
|
def step1(versionId): |
||||||
|
|
||||||
|
# 下载json 文件 和 图片 |
||||||
|
dirName,machineInfo = downloadJsonAndJpgFileAndMoveToCorrectDir(versionId,currentDir) |
||||||
|
if not dirName: |
||||||
|
return False |
||||||
|
|
||||||
|
#判断是否是小机台 |
||||||
|
isSmallMachine = False |
||||||
|
if str(machineInfo["machine_type"]) == '1': |
||||||
|
isSmallMachine = True |
||||||
|
|
||||||
|
|
||||||
|
#下载数据,转换数据 |
||||||
|
res = downloadDataByOssAndTransformSave(dirName,isSmallMachine) |
||||||
|
if not res: |
||||||
|
return False |
||||||
|
|
||||||
|
#判断下载的obj文件数量和json里的是否一致,排除arrange文件夹 |
||||||
|
objFilePath = os.path.join(dirName, 'data') |
||||||
|
objCounts = 0 |
||||||
|
for file in os.listdir(objFilePath): |
||||||
|
if file == 'arrange': |
||||||
|
continue |
||||||
|
if file.endswith('.obj'): |
||||||
|
objCounts += 1 |
||||||
|
|
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 下载处理完成的obj文件数量: {objCounts}') |
||||||
|
# requestApiToUpdateSliceStatus(versionId,objCounts) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 读取 队列中一个数据出来 |
||||||
|
def main(work_dir=None): |
||||||
|
|
||||||
|
|
||||||
|
# 如果指定了工作目录,使用指定的目录 |
||||||
|
if work_dir: |
||||||
|
work_dir = os.path.abspath(work_dir) |
||||||
|
if not os.path.exists(work_dir): |
||||||
|
print(f'指定的工作目录不存在: {work_dir},将创建该目录') |
||||||
|
os.makedirs(work_dir, exist_ok=True) |
||||||
|
currentDir = work_dir |
||||||
|
print(f'使用指定的工作目录: {currentDir}') |
||||||
|
else: |
||||||
|
print(f'没有指定工作目录,退出') |
||||||
|
exit(0) |
||||||
|
|
||||||
|
# 循环处理,直到队列为空 |
||||||
|
while True: |
||||||
|
r = redisClient() |
||||||
|
#检测队列是否有值 |
||||||
|
if r.scard('pb:sliceing') == 0: |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 队列为空,等待10秒') |
||||||
|
time.sleep(10) |
||||||
|
continue |
||||||
|
#获取队列中的值 |
||||||
|
data = r.spop('pb:sliceing') |
||||||
|
if data is None: |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 取出的数据为空,等待10秒') |
||||||
|
time.sleep(10) |
||||||
|
continue |
||||||
|
data = data.decode('utf-8') |
||||||
|
#判断是否是数字 |
||||||
|
if not data.isdigit(): |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 取出的数据不是数字,等待10秒') |
||||||
|
time.sleep(10) |
||||||
|
continue |
||||||
|
|
||||||
|
versionId = str(data) |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 正在处理版次ID={versionId}') |
||||||
|
res = step1(versionId) |
||||||
|
if res == False: |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} JSON文件下载数据失败,等待10秒') |
||||||
|
time.sleep(10) |
||||||
|
continue |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 在长时间操作后,确保 Redis 连接仍然有效 |
||||||
|
# 通过重新获取客户端来触发连接检查 |
||||||
|
try: |
||||||
|
r = redisClient() |
||||||
|
r.ping() # 测试连接 |
||||||
|
except Exception as e: |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} Redis连接检查失败: {str(e)},将在下次循环时自动重连') |
||||||
|
|
||||||
|
#time.sleep(10) |
||||||
|
|
||||||
|
|
||||||
|
def testMain(): |
||||||
|
global currentDir |
||||||
|
currentDir = "/Users/dcx/code/make2/script/factory_sliceing_v2/tempData" |
||||||
|
versionId = '10153' #'10153 10158' |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 正在处理版次ID={versionId}') |
||||||
|
res = step1(versionId) |
||||||
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 处理完成,res={res}') |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
testMain() |
||||||
|
# parser = argparse.ArgumentParser(description='排版打印订单处理程序') |
||||||
|
# parser.add_argument( |
||||||
|
# '--work-dir', |
||||||
|
# type=str, |
||||||
|
# default=None, |
||||||
|
# help='指定工作目录(磁盘路径),例如: D:/work 或 /Users/username/work。如果不指定,则使用脚本所在目录' |
||||||
|
# ) |
||||||
|
# args = parser.parse_args() |
||||||
|
# main(work_dir=args.work_dir) |
||||||
Loading…
Reference in new issue