Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
hh_ccs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贺阳
hh_ccs
Commits
bef8276e
提交
bef8276e
authored
8月 06, 2025
作者:
贺阳
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
扫码记录的 操作人优化
增加尾程快递交货检查时间的优化
上级
afef8d8f
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
60 行增加
和
25 行删除
+60
-25
order_controller.py
ccs_connect_tiktok/controllers/order_controller.py
+60
-25
没有找到文件。
ccs_connect_tiktok/controllers/order_controller.py
浏览文件 @
bef8276e
...
...
@@ -154,10 +154,15 @@ class OrderController(http.Controller):
action_type
=
kwargs
.
get
(
'action_type'
)
or
'tally'
# tally / handover
operation
=
'bill_tally'
if
action_type
==
'tally'
else
'bill_handover'
bl_obj
=
False
tally_user_id
=
False
# 理货人ID
try
:
logging
.
info
(
'update_big_package_tally_detail kw:
%
s'
%
kwargs
)
if
kwargs
.
get
(
'bl_no'
)
and
action_type
and
(
kwargs
.
get
(
'big_package_arr'
)
or
kwargs
.
get
(
'ship_package_arr'
)
or
kwargs
.
get
(
'pallet_arr'
)):
tally_user_id
=
kwargs
[
'big_package_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
'big_package_arr'
)
else
(
kwargs
[
'ship_package_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
'ship_package_arr'
)
else
(
kwargs
[
'pallet_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
'pallet_arr'
)
else
False
))
bl_no
=
kwargs
[
'bl_no'
]
state_arr
=
[
'draft'
,
'ccing'
]
bl_obj
=
request
.
env
[
'cc.bl'
]
.
sudo
()
.
deal_bl_no_and_transfer_bl_no
(
...
...
@@ -291,7 +296,8 @@ class OrderController(http.Controller):
transfer_number
=
bl_obj
.
transfer_bl_no
,
state
=
'success'
,
bl_id
=
bl_obj
.
id
,
operation_time
=
latest_operation_time
)
operation_time
=
latest_operation_time
,
operator_id
=
tally_user_id
)
logging
.
info
(
'update_big_package_tally_detail ship_packages:
%
s'
%
len
(
ship_packages
))
# 有小包 就更新小包状态和同步
...
...
@@ -328,8 +334,9 @@ class OrderController(http.Controller):
bill_number
=
bl_obj
.
bl_no
,
transfer_number
=
bl_obj
.
transfer_bl_no
,
state
=
'failed'
,
bl_id
=
bl_obj
.
id
,
failure_reason
=
error
)
bl_id
=
bl_obj
.
id
,
failure_reason
=
error
,
operator_id
=
tally_user_id
)
else
:
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
...
...
@@ -337,7 +344,8 @@ class OrderController(http.Controller):
bill_number
=
''
,
transfer_number
=
''
,
state
=
'failed'
,
failure_reason
=
error
)
failure_reason
=
error
,
operator_id
=
tally_user_id
)
logging
.
info
(
'res:
%
s'
%
res
)
return
res
...
...
@@ -353,10 +361,13 @@ class OrderController(http.Controller):
res
=
{
'state'
:
201
,
'message'
:
''
}
action_type
=
kwargs
.
get
(
'action_type'
)
or
'tally'
# tally / handover
operation
=
'tail_tally'
if
action_type
==
'tally'
else
'tail_handover'
tally_user_id
=
False
# 理货人ID
ship_packages
=
[]
try
:
logging
.
info
(
'update_pro_big_package_tally_detail kw:
%
s'
%
kwargs
)
if
action_type
and
(
kwargs
.
get
(
'big_package_arr'
)
or
kwargs
.
get
(
'ship_package_arr'
)):
tally_user_id
=
kwargs
[
'big_package_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
'big_package_arr'
)
else
(
kwargs
[
'ship_package_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
'ship_package_arr'
)
else
False
)
big_package_exception_arr
=
{}
ship_package_exception_arr
=
{}
...
...
@@ -476,7 +487,8 @@ class OrderController(http.Controller):
transfer_number
=
bl
.
transfer_bl_no
,
state
=
'success'
,
bl_id
=
bl
.
id
,
operation_time
=
latest_operation_time
)
operation_time
=
latest_operation_time
,
operator_id
=
tally_user_id
)
redis_conn
=
request
.
env
[
'common.common'
]
.
sudo
()
.
get_redis
()
if
redis_conn
and
redis_conn
!=
'no'
:
bl_ids
=
[
ship_package
.
get
(
'bl_id'
)
for
ship_package
in
ship_packages
]
...
...
@@ -512,7 +524,8 @@ class OrderController(http.Controller):
transfer_number
=
bl
.
transfer_bl_no
,
state
=
'failed'
,
bl_id
=
bl
.
id
,
failure_reason
=
error
)
failure_reason
=
error
,
operator_id
=
tally_user_id
)
else
:
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
...
...
@@ -520,7 +533,8 @@ class OrderController(http.Controller):
bill_number
=
''
,
transfer_number
=
''
,
state
=
'failed'
,
failure_reason
=
error
)
failure_reason
=
error
,
operator_id
=
tally_user_id
)
logging
.
info
(
'res:
%
s'
%
res
)
return
res
...
...
@@ -569,8 +583,7 @@ class OrderController(http.Controller):
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
}
logging
.
info
(
'last_mile_tally error:
%
s'
%
e
)
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
# _('System parsing error, the reason for the error is %s', e) # 系统解析错误,错误原因是
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
# _('System parsing error, the reason for the error is %s', e) # 系统解析错误,错误原因是
logging
.
info
(
'last_mile_tally res:
%
s'
%
res
)
return
res
...
...
@@ -585,28 +598,48 @@ class OrderController(http.Controller):
try
:
logging
.
info
(
'last_mile_delivery kwargs:
%
s'
%
kwargs
)
# 按尾程交货时,检查时间风险 大包或小包对应的提单是否已存在成功扫码记录
res
=
self
.
_get_last_mile_grouped
(
'checked_goods'
,
pda_lang
)
all_bl_ids_in_request
=
res
[
'bl_ids'
]
res
=
self
.
_get_last_mile_grouped
(
'checked_goods'
,
pda_lang
)
return
res
except
Exception
as
e
:
exceptions_msg_dic
=
{
'en'
:
'System parsing error, the reason for the error is
%
s'
%
e
,
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
}
logging
.
info
(
'last_mile_delivery error:
%
s'
%
e
)
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
# _('System parsing error, the reason for the error is %s', e) # 系统解析错误,错误原因是
logging
.
info
(
'last_mile_delivery res:
%
s'
%
res
)
return
res
@http.route
(
'/api/last_mile/delivery/time_check'
,
type
=
'json'
,
auth
=
'public'
,
csrf
=
False
)
def
last_mile_delivery_time_check
(
self
):
"""
按尾程快递交货接口,查询系统所有清关中的提单,且大包状态为已理货的数量,按下一阶段服务商名称分组,下一个阶段服务商名称匹配尾程快递传给PDA。传输字段与理货的一致。
"""
kwargs
=
json
.
loads
(
request
.
httprequest
.
data
)
pda_lang
=
kwargs
.
get
(
'pda_lang'
)
or
'zh'
res
=
{
'state'
:
201
,
'message'
:
''
}
try
:
logging
.
info
(
'last_mile_delivery_time_check kwargs:
%
s'
%
kwargs
)
all_bl_ids_in_request
=
kwargs
[
'bl_ids'
]
logging
.
info
(
f
"all_bl_ids_in_request: {all_bl_ids_in_request}"
)
if
all_bl_ids_in_request
:
bl_objs
=
request
.
env
[
'cc.bl'
]
.
sudo
()
.
search
([(
'id'
,
'in'
,
all_bl_ids_in_request
)])
bl_objs
=
request
.
env
[
'cc.bl'
]
.
sudo
()
.
search
([(
'id'
,
'in'
,
all_bl_ids_in_request
)])
for
bl_obj
in
bl_objs
:
time_check_result
=
self
.
_check_delivery_time_risk
(
bl_obj
,
pda_lang
,
'tail_tally'
)
time_check_result
=
self
.
_check_delivery_time_risk
(
bl_obj
,
pda_lang
)
if
time_check_result
[
'has_risk'
]:
res
[
'state'
]
=
400
res
[
'message'
]
=
time_check_result
[
'message'
]
return
res
res
[
'state'
]
=
200
return
res
except
Exception
as
e
:
exceptions_msg_dic
=
{
'en'
:
'System parsing error, the reason for the error is
%
s'
%
e
,
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
}
logging
.
info
(
'last_mile_delivery error:
%
s'
%
e
)
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
# _('System parsing error, the reason for the error is %s', e) # 系统解析错误,错误原因是
logging
.
info
(
'last_mile_delivery res:
%
s'
%
res
)
logging
.
info
(
'last_mile_delivery_time_check error:
%
s'
%
e
)
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
logging
.
info
(
'last_mile_delivery_time_check res:
%
s'
%
res
)
return
res
def
_get_last_mile_grouped
(
self
,
tally_state
,
pda_lang
):
...
...
@@ -641,9 +674,10 @@ class OrderController(http.Controller):
provider_info_arr
=
list
(
group_dict
.
values
())
# 按服务商名称升序排序
provider_info_arr
.
sort
(
key
=
lambda
x
:
x
.
get
(
'name'
,
''
))
return
{
'provider_info_arr'
:
provider_info_arr
,
'state'
:
200
,
'bl_ids'
:
list
(
map
(
lambda
x
:
x
.
bl_id
.
id
,
big_packages
))}
return
{
'provider_info_arr'
:
provider_info_arr
,
'state'
:
200
,
'bl_ids'
:
list
(
set
(
list
(
map
(
lambda
x
:
x
.
bl_id
.
id
,
big_packages
))))}
def
_check_delivery_time_risk
(
self
,
bl_obj
,
pda_lang
=
'zh'
,
operation
=
'bill_tally'
):
def
_check_delivery_time_risk
(
self
,
bl_obj
,
pda_lang
=
'zh'
):
"""
检查提单交货时间倒序风险
:param bl_obj: 提单对象
...
...
@@ -658,7 +692,7 @@ class OrderController(http.Controller):
# 查找该提单的PDA扫码记录,类型为理货的
pda_records
=
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
search
([
(
'bl_id'
,
'='
,
bl_obj
.
id
),
(
'
operation'
,
'='
,
operation
),
# 理货类型
(
'
record_type'
,
'='
,
'tally'
),
# 理货类型
(
'state'
,
'='
,
'success'
)
# 成功状态
],
order
=
'operation_time desc'
,
limit
=
1
)
...
...
@@ -692,14 +726,15 @@ class OrderController(http.Controller):
def
_get_latest_operation_time
(
self
,
ship_packages
):
"""
获取最晚的操作时间
(理货时间或交货时间)
获取最晚的操作时间
:param ship_packages: 小包列表
:return: 最晚的操作时间字符串
"""
latest_time
=
None
for
ship_package
in
ship_packages
:
tally_time
=
ship_package
.
get
(
'tally_time'
)
if
tally_time
:
# 如果tally_time是字符串,转换为datetime对象进行比较
if
isinstance
(
tally_time
,
str
):
...
...
@@ -717,8 +752,8 @@ class OrderController(http.Controller):
# 如果已经是datetime对象
if
latest_time
is
None
or
tally_time
>
latest_time
:
latest_time
=
tally_time
# 返回最晚时间的字符串格式
,如果没有找到则返回当前时间
# 返回最晚时间的字符串格式
if
latest_time
:
return
latest_time
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
else
:
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论