提交 7eab946f authored 作者: 刘擎阳's avatar 刘擎阳

1.尾程pod同步

上级 67b95c33
...@@ -151,6 +151,10 @@ class FetchmailServer(models.Model): ...@@ -151,6 +151,10 @@ class FetchmailServer(models.Model):
elif email_body: elif email_body:
rule_obj = self.env['order.state.change.rule'].sudo() rule_obj = self.env['order.state.change.rule'].sudo()
rule_obj.fetch_mail_dlv(email_body=email_body, year=year) rule_obj.fetch_mail_dlv(email_body=email_body, year=year)
if 'POD' in subject.upper():
if attachment_arr:
rule_obj = self.env['order.state.change.rule'].sudo()
rule_obj.fetch_final_mail_dlv(attachment_arr=attachment_arr, email_body=email_body)
imap_server.store(num, '-FLAGS', '\\Seen') imap_server.store(num, '-FLAGS', '\\Seen')
try: try:
pass pass
......
...@@ -113,6 +113,43 @@ class OrderStateChangeRule(models.Model): ...@@ -113,6 +113,43 @@ class OrderStateChangeRule(models.Model):
file_obj.is_upload = False file_obj.is_upload = False
file_obj.action_sync() file_obj.action_sync()
def upload_pod_attachment(self, bl_obj, name, data):
"""尾程交接POD(待大包数量和箱号) 文件上传与同步"""
file_objs = self.env['cc.clearance.file'].sudo().search([('file_name', '=', '尾程交接POD(待大包数量和箱号)'),
('bl_id', 'in', bl_obj.ids)])
# 最大重试次数
max_retries = 2
for file_obj in file_objs:
retries = 0
while retries <= max_retries:
try:
# 设置文件内容
file_obj.file = base64.encodebytes(data)
file_obj.attachment_name = name
file_obj.is_upload = False # 确保文件状态是未上传
# 尝试上传操作
file_obj.action_sync()
# 检查是否上传成功,假设 is_upload 为 False 表示上传失败
if file_obj.is_upload is False:
retries += 1 # 上传失败,增加重试次数
if retries > max_retries:
_logger.info(f"上传文件 {file_obj.attachment_name} 失败,已尝试 {max_retries} 次,仍然失败。")
break # 超过最大重试次数后跳出循环
else:
_logger.info(f"上传文件 {file_obj.attachment_name} 失败,正在重新尝试第 {retries} 次...")
else:
# 如果上传成功,退出重试循环
_logger.info(f"文件 {file_obj.attachment_name} 上传成功")
break
except Exception as e:
# 捕获任何异常并重试
retries += 1
_logger.info(f"发生异常:{e},正在重新尝试第 {retries} 次上传文件 {file_obj.attachment_name}...")
if retries > max_retries:
_logger.info(f"上传文件 {file_obj.attachment_name} 失败,已尝试 {max_retries} 次,仍然失败。")
break # 超过最大重试次数后跳出循环
def fetch_mail_dlv_attachment(self, **kwargs): def fetch_mail_dlv_attachment(self, **kwargs):
attachment_arr = kwargs['attachment_arr'] attachment_arr = kwargs['attachment_arr']
for attachment_tuple in attachment_arr: for attachment_tuple in attachment_arr:
...@@ -144,6 +181,41 @@ class OrderStateChangeRule(models.Model): ...@@ -144,6 +181,41 @@ class OrderStateChangeRule(models.Model):
except Exception as err: except Exception as err:
logging.error('fetch_mail_dlv_attachment--error:%s' % str(err)) logging.error('fetch_mail_dlv_attachment--error:%s' % str(err))
def find_final_email_text(self, email_body):
"""匹配尾程pod邮件内容"""
pattern = re.compile("\\d{3}-\\d{8}\s*")
data_re = re.compile(pattern)
data_arr = data_re.findall(email_body)
data_arr = [i.replace('\r\n', '') for i in data_arr]
return data_arr
def fetch_final_mail_dlv(self, **kwargs):
"""尾程交接邮件提取"""
email_body = kwargs['email_body']
email_body = html.unescape(email_body)
text_arr = self.find_final_email_text(email_body)
logging.info('data_arr: %s' % text_arr)
attachment_arr = kwargs['attachment_arr']
attachment_tuple = attachment_arr[0] if attachment_arr else []
# order_obj_arr = []
try:
text_arr = [i.replace('-', '').replace(' ', '') for i in text_arr]
sql = "select id from cc_bl where UPPER(REPLACE(REPLACE(REPLACE(bl_no, ' ', ''), '-', ''), '/', '')) in %s"
self._cr.execute(sql, (tuple(text_arr),))
result = self._cr.fetchall()
ids = [i[0] for i in result]
bl_objs = self.env['cc.bl'].sudo().search([('id', 'in', ids)]) if result else False
if bl_objs and attachment_tuple:
attachment_name, attachment_data = attachment_tuple
self.upload_pod_attachment(bl_objs, attachment_name, attachment_data)
# redis_conn = self.env['common.common'].sudo().get_redis()
# if redis_conn == 'no':
# raise ValidationError('未连接redis')
# else:
# redis_conn.lpush('mail_push_package_list', json.dumps({'id': bl_obj.id, 'utc_time': utc_time.strftime("%Y-%m-%d %H:%M:%S")}))
except Exception as err:
logging.error('fetch_final_mail_dlv--error:%s' % str(err))
def fetch_mail_dlv(self, **kwargs): def fetch_mail_dlv(self, **kwargs):
email_body = kwargs['email_body'] email_body = kwargs['email_body']
year = kwargs['year'] year = kwargs['year']
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论