Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
hh_ccs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贺阳
hh_ccs
Commits
a14cd1d3
提交
a14cd1d3
authored
10月 28, 2025
作者:
贺阳
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
尾程匹配节点时间和前序节点推送的优化
上级
9441f0b7
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
30 行增加
和
27 行删除
+30
-27
order_state_change_rule.py
ccs_base/models/order_state_change_rule.py
+5
-4
batch_get_pod_info_wizard.py
ccs_base/wizard/batch_get_pod_info_wizard.py
+1
-0
cc_bill_loading.py
ccs_connect_tiktok/models/cc_bill_loading.py
+20
-19
mail_push.py
consumers/mail_push.py
+4
-4
没有找到文件。
ccs_base/models/order_state_change_rule.py
浏览文件 @
a14cd1d3
...
@@ -5,15 +5,15 @@ import base64
...
@@ -5,15 +5,15 @@ import base64
import
json
import
json
import
logging
import
logging
import
re
import
re
import
tempfile
from
datetime
import
datetime
,
timedelta
from
datetime
import
datetime
,
timedelta
from
io
import
BytesIO
from
io
import
BytesIO
import
pdfplumber
import
pdfplumber
import
xlrd
import
xlrd
from
aip.ocr
import
AipOcr
from
odoo
import
models
from
odoo
import
models
from
odoo.exceptions
import
ValidationError
from
odoo.exceptions
import
ValidationError
import
tempfile
from
aip.ocr
import
AipOcr
from
pdf2image
import
convert_from_path
from
pdf2image
import
convert_from_path
_logger
=
logging
.
getLogger
(
__name__
)
_logger
=
logging
.
getLogger
(
__name__
)
...
@@ -265,7 +265,8 @@ class OrderStateChangeRule(models.Model):
...
@@ -265,7 +265,8 @@ class OrderStateChangeRule(models.Model):
ids
=
[
i
[
0
]
for
i
in
result
]
ids
=
[
i
[
0
]
for
i
in
result
]
bl_objs
=
self
.
env
[
'cc.bl'
]
.
sudo
()
.
search
([(
'id'
,
'in'
,
ids
)])
if
result
else
False
bl_objs
=
self
.
env
[
'cc.bl'
]
.
sudo
()
.
search
([(
'id'
,
'in'
,
ids
)])
if
result
else
False
if
bl_objs
and
attachment_tuple_arr
:
if
bl_objs
and
attachment_tuple_arr
:
file_objs
=
self
.
env
[
'cc.clearance.file'
]
.
sudo
()
.
search
([(
'file_name'
,
'='
,
'尾程交接POD(待大包数量和箱号)'
),
file_objs
=
self
.
env
[
'cc.clearance.file'
]
.
sudo
()
.
search
(
[(
'file_name'
,
'='
,
'尾程交接POD(待大包数量和箱号)'
),
(
'bl_id'
,
'in'
,
bl_objs
.
ids
)])
(
'bl_id'
,
'in'
,
bl_objs
.
ids
)])
file_objs
.
unlink
()
file_objs
.
unlink
()
for
attachment_tuple
in
attachment_tuple_arr
:
for
attachment_tuple
in
attachment_tuple_arr
:
...
@@ -362,7 +363,7 @@ class OrderStateChangeRule(models.Model):
...
@@ -362,7 +363,7 @@ class OrderStateChangeRule(models.Model):
# poppler_path = r"E:\poppler-23.08.0\Library\bin"
# poppler_path = r"E:\poppler-23.08.0\Library\bin"
# images = convert_from_path(pdf_path, poppler_path=poppler_path)
# images = convert_from_path(pdf_path, poppler_path=poppler_path)
# 非本地代码
# 非本地代码
images
=
convert_from_path
(
pdf_path
)
#
如果文件损坏的会报错,需要处理
images
=
convert_from_path
(
pdf_path
)
#
如果文件损坏的会报错,需要处理
# 保存每一页为图片文件
# 保存每一页为图片文件
for
i
,
image
in
enumerate
(
images
):
for
i
,
image
in
enumerate
(
images
):
if
i
==
0
:
if
i
==
0
:
...
...
ccs_base/wizard/batch_get_pod_info_wizard.py
浏览文件 @
a14cd1d3
...
@@ -883,6 +883,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
...
@@ -883,6 +883,7 @@ class BatchGetPodInfoWizard(models.TransientModel):
if
redis_conn
and
redis_conn
!=
'no'
and
pod_node_id
:
if
redis_conn
and
redis_conn
!=
'no'
and
pod_node_id
:
redis_conn
.
lpush
(
'mail_push_package_list'
,
json
.
dumps
(
redis_conn
.
lpush
(
'mail_push_package_list'
,
json
.
dumps
(
{
'ids'
:
bl_objs
.
ids
,
'ship_packages'
:
str
(
ship_packages
),
'action_type'
:
'push_match_node'
,
{
'ids'
:
bl_objs
.
ids
,
'ship_packages'
:
str
(
ship_packages
),
'action_type'
:
'push_match_node'
,
'user_login'
:
self
.
env
.
user
.
login
,
'pod_node_id'
:
pod_node_id
}))
'pod_node_id'
:
pod_node_id
}))
def
_extract_time_from_pdf
(
self
,
file_data
,
bl_no
,
ocr_texts
=
None
):
def
_extract_time_from_pdf
(
self
,
file_data
,
bl_no
,
ocr_texts
=
None
):
...
...
ccs_connect_tiktok/models/cc_bill_loading.py
浏览文件 @
a14cd1d3
...
@@ -1271,17 +1271,27 @@ class CcBl(models.Model):
...
@@ -1271,17 +1271,27 @@ class CcBl(models.Model):
if
package
.
get
(
'tally_time'
):
if
package
.
get
(
'tally_time'
):
for
single_id
in
package
[
'id'
]:
for
single_id
in
package
[
'id'
]:
ship_packages_dict
[
single_id
]
=
package
[
'tally_time'
]
ship_packages_dict
[
single_id
]
=
package
[
'tally_time'
]
if
action_type
!=
'push_match_node'
:
if
action_type
==
'push_match_node'
and
pod_node_id
:
#尾程匹配的节点包括前序节点
node_obj
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([(
'id'
,
'='
,
pod_node_id
)])
else
:
tally_state
=
'checked_goods'
if
action_type
==
'tally'
else
(
tally_state
=
'checked_goods'
if
action_type
==
'tally'
else
(
'picked_up'
if
action_type
==
'pickup'
else
'handover_completed'
)
'picked_up'
if
action_type
==
'pickup'
else
'handover_completed'
)
#
后续节点
#
检查理货或尾程交接的节点,根据排序进行升序
node_obj
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([
node_obj
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([
(
'node_type'
,
'='
,
'package'
),
(
'node_type'
,
'='
,
'package'
),
(
'tally_state'
,
'='
,
tally_state
)
# 检查理货或尾程交接的节点,根据排序进行升序
(
'tally_state'
,
'='
,
tally_state
)
],
order
=
'seq asc'
)
],
order
=
'seq asc'
)
if
node_obj
:
if
not
node_obj
:
return
True
# 前序节点 理货或尾程交接之前没有生成的节点
# 前序节点 理货或尾程交接之前没有生成的节点
before_node_obj
=
node_obj
[
0
]
.
get_before_node
()
before_node_obj
=
node_obj
[
0
]
.
get_before_node
()
if
pod_node_id
:
# 合并前序节点和当前节点,去重
before_node_obj
=
before_node_obj
|
node_obj
[
0
]
logging
.
info
(
'before_node_obj:
%
s'
,
before_node_obj
)
# 理货或尾程交接之前没有生成的节点
# 理货或尾程交接之前没有生成的节点
for
before_node
in
before_node_obj
:
for
before_node
in
before_node_obj
:
before_minutes
=
before_node
.
calculate_total_interval
(
node_obj
[
0
])
before_minutes
=
before_node
.
calculate_total_interval
(
node_obj
[
0
])
...
@@ -1293,10 +1303,9 @@ class CcBl(models.Model):
...
@@ -1293,10 +1303,9 @@ class CcBl(models.Model):
package_id
,
set
()):
package_id
,
set
()):
tally_time
=
ship_packages_dict
.
get
(
package_id
)
tally_time
=
ship_packages_dict
.
get
(
package_id
)
if
tally_time
:
if
tally_time
:
operation_time
=
(
tally_time
=
datetime
.
strptime
(
tally_time
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
datetime
.
strptime
(
tally_time
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
-
timedelta
(
operation_time
=
tally_time
if
pod_node_id
and
pod_node_id
==
before_node
.
id
else
((
minutes
=
before_minutes
))
if
tally_time
else
fields
.
Datetime
.
now
()
-
timedelta
(
tally_time
-
timedelta
(
minutes
=
before_minutes
))
if
tally_time
else
fields
.
Datetime
.
now
()
-
timedelta
(
minutes
=
before_minutes
))
minutes
=
before_minutes
)
update_data
.
append
((
update_data
.
append
((
package_id
,
package_id
,
before_node
.
id
,
before_node
.
id
,
...
@@ -1327,15 +1336,9 @@ class CcBl(models.Model):
...
@@ -1327,15 +1336,9 @@ class CcBl(models.Model):
item
.
try_callback_track
(
max_retries
=
2
,
ship_package_ids
=
ship_package_ids
,
item
.
try_callback_track
(
max_retries
=
2
,
ship_package_ids
=
ship_package_ids
,
user_obj
=
user_obj
)
user_obj
=
user_obj
)
# 理货或尾程交接的节点
# 理货或尾程交接的节点
#pda需要生成后续节点
if
action_type
!=
'push_match_node'
:
# 预先获取所有状态节点
# 预先获取所有状态节点
if
action_type
==
'push_match_node'
and
pod_node_id
:
#尾程匹配的节点包括前序节点
match_node_obj
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([(
'id'
,
'='
,
pod_node_id
)])
if
match_node_obj
:
node_obj
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([(
'node_type'
,
'='
,
'package'
),(
'seq'
,
'<='
,
match_node_obj
.
seq
),(
'is_must'
,
'='
,
True
)],
order
=
'seq asc'
)
logging
.
info
(
'node_obj:
%
s'
,
node_obj
)
if
not
node_obj
:
return
False
all_state_nodes
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([
all_state_nodes
=
self
.
env
[
'cc.node'
]
.
sudo
()
.
search
([
(
'node_type'
,
'='
,
'package'
)
(
'node_type'
,
'='
,
'package'
)
])
])
...
@@ -1349,9 +1352,7 @@ class CcBl(models.Model):
...
@@ -1349,9 +1352,7 @@ class CcBl(models.Model):
if
current_state_node
.
seq
<
node
.
seq
:
if
current_state_node
.
seq
<
node
.
seq
:
tally_time
=
ship_packages_dict
.
get
(
package
.
id
)
tally_time
=
ship_packages_dict
.
get
(
package
.
id
)
if
tally_time
:
if
tally_time
:
operation_time
=
(
operation_time
=
(
datetime
.
strptime
(
tally_time
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
+
timedelta
(
minutes
=
next_minutes
*
index
))
if
tally_time
else
fields
.
Datetime
.
now
()
+
timedelta
(
datetime
.
strptime
(
tally_time
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
+
timedelta
(
minutes
=
next_minutes
*
index
))
if
tally_time
else
fields
.
Datetime
.
now
()
+
timedelta
(
minutes
=
next_minutes
*
index
)
minutes
=
next_minutes
*
index
)
update_data
.
append
((
update_data
.
append
((
package
.
id
,
package
.
id
,
...
...
consumers/mail_push.py
浏览文件 @
a14cd1d3
...
@@ -8,12 +8,12 @@ import redis
...
@@ -8,12 +8,12 @@ import redis
import
config
import
config
# 默认字符gbk
# 默认字符gbk
#
logging.basicConfig(filename='./push_data_logger.log', level=logging.INFO)
logging
.
basicConfig
(
filename
=
'./push_data_logger.log'
,
level
=
logging
.
INFO
)
# 设置文件字符为utf-8
# 设置文件字符为utf-8
logging
.
basicConfig
(
handlers
=
[
logging
.
FileHandler
(
'logs/mail_push.log'
,
'a'
,
'utf-8'
)],
#
logging.basicConfig(handlers=[logging.FileHandler('logs/mail_push.log', 'a', 'utf-8')],
format
=
'
%(asctime)
s
%(levelname)
s
%(message)
s'
,
level
=
logging
.
INFO
)
#
format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
class
Order_dispose
(
object
):
class
Order_dispose
(
object
):
...
@@ -45,7 +45,7 @@ class Order_dispose(object):
...
@@ -45,7 +45,7 @@ class Order_dispose(object):
utc_time
=
data
.
get
(
'utc_time'
)
utc_time
=
data
.
get
(
'utc_time'
)
user_login
=
data
.
get
(
'user_login'
)
user_login
=
data
.
get
(
'user_login'
)
pod_node_id
=
data
.
get
(
'pod_node_id'
)
pod_node_id
=
data
.
get
(
'pod_node_id'
)
bl_record
.
mail_auto_push
(
utc_time
,
ship_packages
,
action_type
,
user_login
,
config
.
pda_db_user
,
bl_record
.
mail_auto_push
(
utc_time
,
ship_packages
,
action_type
,
user_login
,
user_login
or
config
.
pda_db_user
,
pod_node_id
=
pod_node_id
)
pod_node_id
=
pod_node_id
)
except
Exception
as
ex
:
except
Exception
as
ex
:
logging
.
error
(
'mail_auto_push error:
%
s'
%
str
(
ex
))
logging
.
error
(
'mail_auto_push error:
%
s'
%
str
(
ex
))
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论