bug处理
This commit is contained in:
1 parent
824a918659
commit
1262b65412
2 files changed
+84
-14
No files matched your search
@@ -55,18 +55,31 @@ class DataTransfer:
|
|||||||
# 列出所有对象
|
# 列出所有对象
|
||||||
objects = []
|
objects = []
|
||||||
prefix = self.oss_path.lstrip('/') # 移除开头的 '/' 以匹配 OSS 格式
|
prefix = self.oss_path.lstrip('/') # 移除开头的 '/' 以匹配 OSS 格式
|
||||||
|
ishaveCodeJpg = False
|
||||||
for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix):
|
for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix):
|
||||||
if obj.key != prefix: # 跳过目录本身
|
if obj.key != prefix: # 跳过目录本身
|
||||||
objects.append(obj.key)
|
print(f"obj.key={obj.key}")
|
||||||
|
if ".jpg" in obj.key:
|
||||||
|
if obj.key.endswith(f"printId_{json_model_info.print_id}Tex1.jpg"):
|
||||||
|
objects.append(obj.key)
|
||||||
|
ishaveCodeJpg = True
|
||||||
|
else:
|
||||||
|
objects.append(obj.key)
|
||||||
|
|
||||||
|
if not ishaveCodeJpg:
|
||||||
|
for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix):
|
||||||
|
if obj.key == f"{json_model_info.pid}Tex1.jpg":
|
||||||
|
objects.append(obj.key)
|
||||||
|
break
|
||||||
|
|
||||||
|
print(f"objects={objects}")
|
||||||
# 下载所有文件,添加进度条
|
# 下载所有文件,添加进度条
|
||||||
for obj_key in tqdm(objects, desc="下载进度"):
|
for obj_key in tqdm(objects, desc="下载进度"):
|
||||||
if obj_key.endswith('/'):
|
if obj_key.endswith('/'):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if "printId" in obj_key:
|
# if "printId" in obj_key:
|
||||||
continue
|
# continue
|
||||||
|
|
||||||
# 计算相对路径
|
# 计算相对路径
|
||||||
rel_path = obj_key[len(prefix):].lstrip('/')
|
rel_path = obj_key[len(prefix):].lstrip('/')
|
||||||
@@ -76,6 +89,9 @@ class DataTransfer:
|
|||||||
|
|
||||||
# 根据文件后缀名进行重命名
|
# 根据文件后缀名进行重命名
|
||||||
if file_ext.lower() in ['.mtl', '.jpg', '.jpeg', '.png']:
|
if file_ext.lower() in ['.mtl', '.jpg', '.jpeg', '.png']:
|
||||||
|
if file_name.endswith(f"printId_{json_model_info.print_id}Tex1.jpg"):
|
||||||
|
file_name = file_name.replace(f"printId_{json_model_info.print_id}Tex1.jpg", f"{json_model_info.pid}Tex1.jpg")
|
||||||
|
|
||||||
# 对于.mtl和图片文件,在原名前加order_id
|
# 对于.mtl和图片文件,在原名前加order_id
|
||||||
new_file_name = f"{json_model_info.order_id}_{file_name}"
|
new_file_name = f"{json_model_info.order_id}_{file_name}"
|
||||||
# new_file_name = file_name
|
# new_file_name = file_name
|
||||||
@@ -186,6 +202,7 @@ class JSONModelInfo:
|
|||||||
order_id: str
|
order_id: str
|
||||||
pid: str
|
pid: str
|
||||||
model_height: str
|
model_height: str
|
||||||
|
print_id: str
|
||||||
|
|
||||||
def read_pids_from_json(pid_file):
|
def read_pids_from_json(pid_file):
|
||||||
"""从文件读取所有PID"""
|
"""从文件读取所有PID"""
|
||||||
@@ -230,6 +247,7 @@ def read_pids_from_json(pid_file):
|
|||||||
parts = obj_name.split('_')
|
parts = obj_name.split('_')
|
||||||
|
|
||||||
order_id = parts[0]
|
order_id = parts[0]
|
||||||
|
print_id = parts[2].replace("P", "")
|
||||||
pid = parts[1]
|
pid = parts[1]
|
||||||
model_height = parts[3]
|
model_height = parts[3]
|
||||||
|
|
||||||
@@ -237,7 +255,8 @@ def read_pids_from_json(pid_file):
|
|||||||
obj_name=obj_name,
|
obj_name=obj_name,
|
||||||
order_id=order_id,
|
order_id=order_id,
|
||||||
pid=pid,
|
pid=pid,
|
||||||
model_height=model_height
|
model_height=model_height,
|
||||||
|
print_id=print_id
|
||||||
)
|
)
|
||||||
list_model_info.append(model_info)
|
list_model_info.append(model_info)
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,40 @@ class RedisClientSingleton:
|
|||||||
|
|
||||||
def get_client(self):
|
def get_client(self):
|
||||||
if self._client is None:
|
if self._client is None:
|
||||||
self._client = redis.Redis(host='mp.api.suwa3d.com', password='kcV2000', port=6379, db=6)
|
# 添加超时参数,防止连接超时
|
||||||
|
# socket_timeout: 每次操作的超时时间(秒)
|
||||||
|
# socket_connect_timeout: 连接超时时间(秒)
|
||||||
|
# socket_keepalive: 启用 TCP keepalive
|
||||||
|
# socket_keepalive_options: keepalive 选项
|
||||||
|
self._client = redis.Redis(
|
||||||
|
host='mp.api.suwa3d.com',
|
||||||
|
password='kcV2000',
|
||||||
|
port=6379,
|
||||||
|
db=6,
|
||||||
|
socket_timeout=30, # 操作超时30秒
|
||||||
|
socket_connect_timeout=10, # 连接超时10秒
|
||||||
|
socket_keepalive=True, # 启用 TCP keepalive
|
||||||
|
socket_keepalive_options={}, # keepalive 选项
|
||||||
|
health_check_interval=30 # 健康检查间隔30秒
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# 检查连接是否有效,如果断开则重新连接
|
||||||
|
try:
|
||||||
|
self._client.ping()
|
||||||
|
except (redis.ConnectionError, redis.TimeoutError, AttributeError):
|
||||||
|
# 连接断开,重新创建连接
|
||||||
|
self._client = None
|
||||||
|
self._client = redis.Redis(
|
||||||
|
host='mp.api.suwa3d.com',
|
||||||
|
password='kcV2000',
|
||||||
|
port=6379,
|
||||||
|
db=6,
|
||||||
|
socket_timeout=30,
|
||||||
|
socket_connect_timeout=10,
|
||||||
|
socket_keepalive=True,
|
||||||
|
socket_keepalive_options={},
|
||||||
|
health_check_interval=30
|
||||||
|
)
|
||||||
return self._client
|
return self._client
|
||||||
|
|
||||||
|
|
||||||
@@ -67,12 +100,20 @@ def redisClient():
|
|||||||
def requestApiToUpdateSliceStatus(versionId,downloadCounts):
|
def requestApiToUpdateSliceStatus(versionId,downloadCounts):
|
||||||
api_url = f"{url}/api/printTypeSettingOrder/updateBatchSliceing?batch_id={versionId}&download_counts="+str(downloadCounts)
|
api_url = f"{url}/api/printTypeSettingOrder/updateBatchSliceing?batch_id={versionId}&download_counts="+str(downloadCounts)
|
||||||
print(f'发起状态变更请求url={api_url}, versionId={versionId}')
|
print(f'发起状态变更请求url={api_url}, versionId={versionId}')
|
||||||
res = requests.post(api_url)
|
try:
|
||||||
if res.status_code != 200:
|
# 添加超时参数,防止请求时间过长
|
||||||
print(f'状态变更请求失败, res={res.text}')
|
res = requests.post(api_url, timeout=60) # 60秒超时
|
||||||
|
if res.status_code != 200:
|
||||||
|
print(f'状态变更请求失败, res={res.text}')
|
||||||
|
return False
|
||||||
|
print(f'状态变更请求成功, res={res.text}')
|
||||||
|
return True
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
print(f'状态变更请求超时, url={api_url}')
|
||||||
|
return False
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
print(f'状态变更请求异常, error={str(e)}')
|
||||||
return False
|
return False
|
||||||
print(f'状态变更请求成功, res={res.text}')
|
|
||||||
return True
|
|
||||||
|
|
||||||
#判断是否上传了 JSON 文件
|
#判断是否上传了 JSON 文件
|
||||||
def step1(versionId):
|
def step1(versionId):
|
||||||
@@ -144,6 +185,7 @@ def step2(jsonFilePath,folder, versionId):
|
|||||||
# 直接调用函数,而不是通过os.system执行python命令
|
# 直接调用函数,而不是通过os.system执行python命令
|
||||||
# 这样可以避免在打包成exe后找不到python命令的问题
|
# 这样可以避免在打包成exe后找不到python命令的问题
|
||||||
workdir = os.path.join(folder, 'data')
|
workdir = os.path.join(folder, 'data')
|
||||||
|
print(f"模型数据存储目录={workdir}, jsonFilePath={jsonFilePath}")
|
||||||
download_transform_save_by_json(jsonFilePath, workdir, '')
|
download_transform_save_by_json(jsonFilePath, workdir, '')
|
||||||
|
|
||||||
|
|
||||||
@@ -186,11 +228,11 @@ def main(work_dir=None):
|
|||||||
versionId = str(data)
|
versionId = str(data)
|
||||||
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 正在处理版次ID={versionId}')
|
print(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())} 正在处理版次ID={versionId}')
|
||||||
|
|
||||||
#执行前,先删除可能存在的旧数据目录(包括 _big 和 _small)
|
#执行前,先删除可能存在的旧数据目录(包括 _big 和 _small),删除整个目录
|
||||||
for suffix in ['_big', '_small']:
|
for suffix in ['_big', '_small']:
|
||||||
objFilePath = os.path.join(currentDir, 'batchPrint', versionId + suffix, 'data')
|
objFilePath = os.path.join(currentDir, 'batchPrint', versionId + suffix)
|
||||||
if os.path.exists(objFilePath):
|
if os.path.exists(objFilePath):
|
||||||
shutil.rmtree(objFilePath)
|
shutil.rmtree(objFilePath, ignore_errors=True)
|
||||||
|
|
||||||
res = step1(versionId)
|
res = step1(versionId)
|
||||||
if res == False:
|
if res == False:
|
||||||
@@ -215,6 +257,15 @@ def main(work_dir=None):
|
|||||||
if file.endswith('.obj'):
|
if file.endswith('.obj'):
|
||||||
objCounts += 1
|
objCounts += 1
|
||||||
requestApiToUpdateSliceStatus(versionId,objCounts)
|
requestApiToUpdateSliceStatus(versionId,objCounts)
|
||||||
|
|
||||||
|
# 在长时间操作后,确保 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)
|
#time.sleep(10)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user