Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
hh_ccs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贺阳
hh_ccs
Commits
1567de5b
提交
1567de5b
authored
6月 29, 2026
作者:
贺阳
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
提单巡查性能优化
上级
db3c7f82
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
31 行增加
和
12 行删除
+31
-12
bl_patrol.py
ccs_connect_tiktok/models/bl_patrol.py
+6
-2
cc_bill_loading.py
ccs_connect_tiktok/models/cc_bill_loading.py
+25
-10
没有找到文件。
ccs_connect_tiktok/models/bl_patrol.py
浏览文件 @
1567de5b
...
@@ -63,9 +63,13 @@ class BlPatrol(models.Model):
...
@@ -63,9 +63,13 @@ class BlPatrol(models.Model):
_logger
.
info
(
f
"提单巡查完成: {patrol.name}, 发现问题: {result['issue_count']}"
)
_logger
.
info
(
f
"提单巡查完成: {patrol.name}, 发现问题: {result['issue_count']}"
)
except
MemoryError
as
e
:
_logger
.
exception
(
"提单巡查失败: MemoryError"
)
raise
UserError
(
"巡查失败: MemoryError(内存不足),请减少巡查范围或优化巡查逻辑"
)
except
Exception
as
e
:
except
Exception
as
e
:
_logger
.
error
(
f
"提单巡查失败: {str(e)}"
)
_logger
.
exception
(
"提单巡查失败"
)
raise
UserError
(
f
"巡查失败: {str(e)}"
)
msg
=
str
(
e
)
or
repr
(
e
)
or
type
(
e
)
.
__name__
raise
UserError
(
f
"巡查失败: {msg}"
)
def
_execute_patrol
(
self
):
def
_execute_patrol
(
self
):
"""
"""
...
...
ccs_connect_tiktok/models/cc_bill_loading.py
浏览文件 @
1567de5b
...
@@ -5,6 +5,7 @@ import logging
...
@@ -5,6 +5,7 @@ import logging
import
re
import
re
import
ssl
import
ssl
from
datetime
import
timedelta
,
datetime
from
datetime
import
timedelta
,
datetime
from
types
import
SimpleNamespace
import
aiohttp
import
aiohttp
import
certifi
import
certifi
...
@@ -622,6 +623,25 @@ class CcBl(models.Model):
...
@@ -622,6 +623,25 @@ class CcBl(models.Model):
'bl_issues'
:
'
\n
'
.
join
(
error_bl_issues
)
if
error_bl_issues
else
''
'bl_issues'
:
'
\n
'
.
join
(
error_bl_issues
)
if
error_bl_issues
else
''
}
}
def
_read_latest_package_sync_logs
(
self
,
package_ids
):
if
not
package_ids
:
return
{}
self
.
env
.
cr
.
execute
(
"""
SELECT DISTINCT ON (package_id, process_code)
package_id, process_code, sync_time, operate_time
FROM cc_ship_package_sync_log
WHERE package_id = ANY(
%
s)
ORDER BY package_id, process_code, sync_time DESC NULLS LAST, id ASC
"""
,
(
list
(
package_ids
),))
res
=
{}
for
package_id
,
process_code
,
sync_time
,
operate_time
in
self
.
env
.
cr
.
fetchall
():
res
.
setdefault
(
package_id
,
{})[
process_code
]
=
SimpleNamespace
(
process_code
=
process_code
,
sync_time
=
sync_time
,
operate_time
=
operate_time
,
)
return
res
def
_check_package_tracking_issues
(
self
,
bl
):
def
_check_package_tracking_issues
(
self
,
bl
):
"""
"""
检查小包轨迹问题 - 只检查真正的小包节点,不检查关务节点
检查小包轨迹问题 - 只检查真正的小包节点,不检查关务节点
...
@@ -632,16 +652,10 @@ class CcBl(models.Model):
...
@@ -632,16 +652,10 @@ class CcBl(models.Model):
missing_issues
=
{}
# 漏推问题
missing_issues
=
{}
# 漏推问题
# 获取该提单下所有小包的同步日志
# 获取该提单下所有小包的同步日志
ship_packages
=
bl
.
ship_package_ids
ship_packages
=
bl
.
ship_package_ids
latest_logs_by_package
=
self
.
_read_latest_package_sync_logs
(
ship_packages
.
ids
)
for
package
in
ship_packages
:
for
package
in
ship_packages
:
# 按节点编码分组,根据同步时间降序,得到对应的同步日志对象,然后再根据节点编码的顺序排序,得到同步日志对象数组
# 按节点编码分组,根据同步时间降序,得到对应的同步日志对象,然后再根据节点编码的顺序排序,得到同步日志对象数组
logs_by_process
=
{}
logs_by_process
=
latest_logs_by_package
.
get
(
package
.
id
,
{})
for
log
in
package
.
sync_log_ids
:
if
log
.
process_code
not
in
logs_by_process
:
logs_by_process
[
log
.
process_code
]
=
log
else
:
# 如果已有该节点的日志,比较sync_time,保留最新的
if
log
.
sync_time
and
log
.
sync_time
>
logs_by_process
[
log
.
process_code
]
.
sync_time
:
logs_by_process
[
log
.
process_code
]
=
log
# 方法1: 根据节点的seq进行排序(推荐)
# 方法1: 根据节点的seq进行排序(推荐)
sync_logs
=
[]
sync_logs
=
[]
bl_nodes
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([(
'node_type'
,
'='
,
'package'
),
(
'is_patrol_node'
,
'='
,
True
)],
bl_nodes
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([(
'node_type'
,
'='
,
'package'
),
(
'is_patrol_node'
,
'='
,
True
)],
...
@@ -650,8 +664,9 @@ class CcBl(models.Model):
...
@@ -650,8 +664,9 @@ class CcBl(models.Model):
for
node
in
bl_nodes
:
for
node
in
bl_nodes
:
if
node
.
is_default
:
if
node
.
is_default
:
continue
continue
if
node
.
tk_code
in
logs_by_process
:
log
=
logs_by_process
.
get
(
node
.
tk_code
)
sync_logs
.
append
(
logs_by_process
[
node
.
tk_code
])
if
log
:
sync_logs
.
append
(
log
)
sync_logs
=
[
log
for
log
in
sync_logs
if
log
is
not
None
]
sync_logs
=
[
log
for
log
in
sync_logs
if
log
is
not
None
]
# 根据key排序获取logs
# 根据key排序获取logs
if
len
(
sync_logs
)
>=
2
:
if
len
(
sync_logs
)
>=
2
:
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论