1
This commit is contained in:
1 parent
344bab6448
commit
0c1ee63522
1 file changed
+202
+202
@@ -0,0 +1,202 @@
|
||||
from ctypes import util
|
||||
import os, oss2, time, redis, requests, shutil, sys, subprocess, json, platform,random
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
from retrying import retry
|
||||
import atexit,platform
|
||||
import get_preview_image
|
||||
# if platform.system() == 'Windows':
|
||||
# sys.path.append('libs\\')
|
||||
sys.path.append('/home/acprint/code/libs/')
|
||||
import common
|
||||
|
||||
def create_redis_connection():
|
||||
"""创建 Redis 连接,若连接失败则重试"""
|
||||
while True:
|
||||
try:
|
||||
r = redis.Redis(host="106.14.158.208", password="kcV2000", port=6379, db=6)
|
||||
# 尝试进行一次操作,检查连接是否有效
|
||||
r.ping() # ping 操作是一个简单的连接测试
|
||||
print("Redis连接成功!")
|
||||
return r
|
||||
except ConnectionError:
|
||||
print("Redis连接失败,正在重试...")
|
||||
time.sleep(5)
|
||||
|
||||
|
||||
def main(r):
|
||||
while True:
|
||||
try:
|
||||
#构建打印文件
|
||||
make3d4print_task(r)
|
||||
except Exception as e:
|
||||
print(f'出现异常:{e}')
|
||||
time.sleep(15)
|
||||
r = create_redis_connection()
|
||||
continue
|
||||
|
||||
#根据pid获取orderId
|
||||
def getPidFromOrderId(orderId):
|
||||
getPidFromOrderId_url = 'https://mp.api.suwa3d.com/api/printOrder/info'
|
||||
print(f'{getPidFromOrderId_url}?id={orderId}')
|
||||
res = requests.get(f'{getPidFromOrderId_url}?id={orderId}')
|
||||
resCode = res.json()['code']
|
||||
if int(resCode) != 1000:
|
||||
return -1
|
||||
print(res.text)
|
||||
return res.json()['data']
|
||||
|
||||
def down_obj_fromoss(pid, print_type=1, order_id=None,download_flag="print_build"):
|
||||
# print_type:// 打印状态 1:正常打印 2:重打 3:加打,4: 样品
|
||||
print('开始下载obj文件...' , pid)
|
||||
|
||||
if not order_id is None:
|
||||
path = os.path.join(workdir, 'print', f'{pid}_{order_id}')
|
||||
|
||||
if not os.path.exists(path): os.makedirs(path)
|
||||
|
||||
# 根据前缀获取文件列表
|
||||
prefix = f'objs/print/{pid}/'
|
||||
# #根据order_id 获取文件在 oss 上的存储路径
|
||||
# if order_id is not None:
|
||||
# tempURL = "https://mp.api.suwa3d.com/api/order/getOssSuffixByOrderId?orderId="+str(order_id)
|
||||
# res = requests.get(tempURL)
|
||||
# resCode = res.json()['code']
|
||||
# if int(resCode) != 1000:
|
||||
# return -1
|
||||
# print(res.text)
|
||||
# if res.json()['data'] != "":
|
||||
# prefix = f'objs/print/{pid}/{res.json()["data"]}/'
|
||||
|
||||
|
||||
filelist = oss2.ObjectIteratorV2(oss_client, prefix=prefix)
|
||||
find = False
|
||||
findTex1Jpg = False
|
||||
for file in filelist:
|
||||
filename = file.key.split('/')[-1]
|
||||
if filename == '': continue
|
||||
if filename.endswith(f'{pid}.obj'):
|
||||
find = True
|
||||
|
||||
if download_flag == "print_build":
|
||||
if filename != str(pid)+".obj" and filename != str(pid)+".mtl" and filename != str(pid)+"Tex1.jpg":
|
||||
continue
|
||||
localfile = os.path.join(path, filename)
|
||||
res = oss_client.get_object_to_file(file.key, localfile)
|
||||
print(f'下载文件:{file.key},状态:{res.status}')
|
||||
|
||||
if not find:
|
||||
filelist = oss2.ObjectIteratorV2(oss_client, prefix=prefix)
|
||||
for file in filelist:
|
||||
filename = file.key.split('/')[-1]
|
||||
if filename == '': continue
|
||||
if filename.endswith(f'.obj'):
|
||||
find = True
|
||||
|
||||
# if download_flag == "print_build":
|
||||
# if filename != str(pid)+".obj" and filename != str(pid)+".mtl" and filename != str(pid)+"Tex1.jpg":
|
||||
# continue
|
||||
localfile = os.path.join(path, filename)
|
||||
res = oss_client.get_object_to_file(file.key, localfile)
|
||||
print(f'下载文件:{file.key},状态:{res.status}')
|
||||
break
|
||||
|
||||
if find:
|
||||
os.rename(localfile, os.path.join(path,f"{pid}.obj"))
|
||||
#重命名文件
|
||||
|
||||
#判断是否有Tex1.jpg
|
||||
if not os.path.exists(os.path.join(path,f"{pid}Tex1.jpg")):
|
||||
filelist = oss2.ObjectIteratorV2(oss_client, prefix=prefix)
|
||||
for file in filelist:
|
||||
filename = file.key.split('/')[-1]
|
||||
if filename == '': continue
|
||||
if filename.endswith(f'{pid}.jpg'):
|
||||
findTex1Jpg = True
|
||||
|
||||
|
||||
localfile = os.path.join(path, filename)
|
||||
res = oss_client.get_object_to_file(file.key, localfile)
|
||||
print(f'下载文件:{file.key},状态:{res.status}')
|
||||
break
|
||||
|
||||
if findTex1Jpg:
|
||||
os.rename(localfile, os.path.join(path,f"{pid}Tex1.jpg"))
|
||||
#重命名文件
|
||||
|
||||
|
||||
|
||||
|
||||
def make3d4print_task(orderId):
|
||||
res = getPidFromOrderId(orderId)
|
||||
if res == -1:
|
||||
print("查询打印订单信息失败,重新开启进程")
|
||||
#os.system(f'python auto_convert3d.py')
|
||||
return
|
||||
pid = str(res['pid'])
|
||||
if pid == "88985":
|
||||
return
|
||||
if pid == "":
|
||||
return
|
||||
|
||||
down_obj_fromoss(pid, print_type, orderId,download_flag="print_build")
|
||||
|
||||
|
||||
path = os.path.join(workdir, 'print', f'{pid}_{orderId}')
|
||||
|
||||
|
||||
# 如果指定文件夹目标文件存在,则先删除
|
||||
if os.path.exists(os.path.join(workdir, f'complate/objs/{pid}/order_{orderId}/')):
|
||||
delete_files_in_directory(os.path.join(workdir, f'complate/objs/{pid}/order_{orderId}/'))
|
||||
|
||||
for file in os.listdir(path):
|
||||
# 跳过一些不需要上传的文件
|
||||
if file in [f'{pid}.png',f'{pid}_old.jpg', f'{pid}.obj', f'{pid}_decimate.glb', f'{pid}_decimate.obj', f'{pid}_decimate.mtl', f'{pid}Tex1_decimate.jpg', f'{pid}_original.obj', f'{pid}_original.mtl']: continue
|
||||
print("当前目录",os.path.join(path, file))
|
||||
|
||||
#将文件移动到指定目录
|
||||
if not os.path.exists(os.path.join(workdir, f'complate/objs/{pid}/')):
|
||||
os.makedirs(os.path.join(workdir, f'complate/objs/{pid}/'),mode=0o777, exist_ok=True)
|
||||
|
||||
if not os.path.exists(os.path.join(workdir, f'complate/objs/{pid}/order_{orderId}/')):
|
||||
os.makedirs(os.path.join(workdir, f'complate/objs/{pid}/order_{orderId}/'),mode=0o777, exist_ok=True)
|
||||
|
||||
shutil.move(os.path.join(path, file), os.path.join(workdir, f'complate/objs/{pid}/order_{orderId}/'))
|
||||
|
||||
|
||||
|
||||
res = requests.get(f'{update_makeprintobj_status_url}?id={orderId}')
|
||||
print('更新打印状态:', res.text)
|
||||
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), f'orderId:{orderId} pid:{pid} 上传生成的模型 end')
|
||||
#生成封面图片
|
||||
print('小票封面图处理中....')
|
||||
get_preview_image.createImage(pid)
|
||||
#os.system(f'python get_preview_image.py {pid}')
|
||||
print(f"{pid}-已处理结束")
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# atexit.register(common.notify,"虚拟机,生成打印任务程序停止")
|
||||
AccessKeyId = 'LTAI5tSReWm8hz7dSYxxth8f'
|
||||
AccessKeySecret = '8ywTDF9upPAtvgXtLKALY2iMYHIxdS'
|
||||
Endpoint = 'oss-cn-shanghai.aliyuncs.com'
|
||||
Bucket = 'suwa3d-securedata'
|
||||
oss_client = oss2.Bucket(oss2.Auth(AccessKeyId, AccessKeySecret), Endpoint, Bucket)
|
||||
update_check_url = 'https://mp.api.suwa3d.com/api/customerP3dLog/updateStatusToWaitingPlatformCheckingStatus'
|
||||
update_team_check_url = 'https://mp.api.suwa3d.com/api/customerP3dLog/updateStatusToWaitingTeamCheckingStatus'
|
||||
update_status_printstatus_url = 'https://mp.api.suwa3d.com/api/customerP3dLog/updateBuildPrintModelStatus'
|
||||
update_makeprintobj_status_url = 'https://mp.api.suwa3d.com/api/printOrder/updateMakePrintObjSucceed'
|
||||
getRepairInfo_url = 'https://repair.api.suwa3d.com/api/modelRepairOrder/teamCheckGLBInfo'
|
||||
update_repair_status_url = 'https://repair.api.suwa3d.com/api/modelRepairOrder/updateStatusToWaitingTeamCheckingStatus'
|
||||
if platform.system() == 'Windows':
|
||||
workdir = 'E:\\'
|
||||
else:
|
||||
workdir = '/data/datasets/'
|
||||
blenderbin = find_blender_bin_path()
|
||||
|
||||
r = create_redis_connection()
|
||||
#E:\\complate/objs/147852_54579/
|
||||
# os.remove(os.path.join(workdir, f'complate/objs/147852_54579/'))
|
||||
main(r)
|
||||
Reference in new issue
Block a user