dongchangxi 10 months ago
parent
commit
0c1ee63522
  1. 202
      no_resize.py

202
no_resize.py

@ -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)
Loading…
Cancel
Save