Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
hh_ccs
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贺阳
hh_ccs
Commits
cde63e51
提交
cde63e51
authored
9月 11, 2025
作者:
贺阳
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、按托盘理货和交货的接口
上级
24b04c21
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
214 行增加
和
266 行删除
+214
-266
order_controller.py
ccs_connect_tiktok/controllers/order_controller.py
+163
-218
cc_pallet.py
ccs_connect_tiktok/models/cc_pallet.py
+4
-3
cc_pallet.py
ccs_pallet/models/cc_pallet.py
+47
-45
没有找到文件。
ccs_connect_tiktok/controllers/order_controller.py
浏览文件 @
cde63e51
...
@@ -3,7 +3,7 @@ import json
...
@@ -3,7 +3,7 @@ import json
import
logging
import
logging
from
datetime
import
datetime
from
datetime
import
datetime
from
odoo
import
http
,
exceptions
,
_
from
odoo
import
http
,
exceptions
# from odoo.addons.queue_job import job
# from odoo.addons.queue_job import job
from
odoo.http
import
request
from
odoo.http
import
request
...
@@ -361,12 +361,13 @@ class OrderController(http.Controller):
...
@@ -361,12 +361,13 @@ class OrderController(http.Controller):
res
=
{
'state'
:
201
,
'message'
:
''
}
res
=
{
'state'
:
201
,
'message'
:
''
}
action_type
=
kwargs
.
get
(
'action_type'
)
or
'tally'
# tally / handover
action_type
=
kwargs
.
get
(
'action_type'
)
or
'tally'
# tally / handover
operation
=
'tail_tally'
if
action_type
==
'tally'
else
'tail_handover'
operation
=
'tail_tally'
if
action_type
==
'tally'
else
'tail_handover'
tally_user_id
=
False
# 理货人ID
tally_user_id
=
False
# 理货人ID
ship_packages
=
[]
ship_packages
=
[]
try
:
try
:
logging
.
info
(
'update_pro_big_package_tally_detail kw:
%
s'
%
kwargs
)
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'
)):
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
(
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
)
kwargs
[
'ship_package_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
'ship_package_arr'
)
else
False
)
big_package_exception_arr
=
{}
big_package_exception_arr
=
{}
ship_package_exception_arr
=
{}
ship_package_exception_arr
=
{}
...
@@ -583,7 +584,8 @@ class OrderController(http.Controller):
...
@@ -583,7 +584,8 @@ class OrderController(http.Controller):
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
}
}
logging
.
info
(
'last_mile_tally error:
%
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
)
logging
.
info
(
'last_mile_tally res:
%
s'
%
res
)
return
res
return
res
...
@@ -647,11 +649,12 @@ class OrderController(http.Controller):
...
@@ -647,11 +649,12 @@ class OrderController(http.Controller):
# if is_pallet:
# if is_pallet:
# domain=[('state', '!=', 'done')]# 1. 按托盘理货时,查非已完成状态的提单
# domain=[('state', '!=', 'done')]# 1. 按托盘理货时,查非已完成状态的提单
# else:
# else:
#先都查清关中的,如果以后要查非已完成状态的提单,再修改domain。而且查尾程快递和对应的大包或托盘信息得分两个接口
#
先都查清关中的,如果以后要查非已完成状态的提单,再修改domain。而且查尾程快递和对应的大包或托盘信息得分两个接口
domain
=
[(
'state'
,
'='
,
'ccing'
)]
# 1. 按尾程理货时,查所有清关中提单
domain
=
[(
'state'
,
'='
,
'ccing'
)]
# 1. 按尾程理货时,查所有清关中提单
bls
=
request
.
env
[
'cc.bl'
]
.
sudo
()
.
search
(
domain
)
bls
=
request
.
env
[
'cc.bl'
]
.
sudo
()
.
search
(
domain
)
# 2. 查所有大包
# 2. 查所有大包
big_packages
=
request
.
env
[
'cc.big.package'
]
.
sudo
()
.
search
([(
'bl_id'
,
'in'
,
bls
.
ids
),(
'tally_state'
,
'='
,
tally_state
)])
big_packages
=
request
.
env
[
'cc.big.package'
]
.
sudo
()
.
search
(
[(
'bl_id'
,
'in'
,
bls
.
ids
),
(
'tally_state'
,
'='
,
tally_state
)])
# 3. 按"下一阶段服务商名称"分组
# 3. 按"下一阶段服务商名称"分组
group_dict
=
{}
group_dict
=
{}
for
pkg
in
big_packages
:
for
pkg
in
big_packages
:
...
@@ -663,21 +666,28 @@ class OrderController(http.Controller):
...
@@ -663,21 +666,28 @@ class OrderController(http.Controller):
if
key
not
in
group_dict
:
if
key
not
in
group_dict
:
group_dict
[
key
]
=
provider
.
search_pro_info
()
# 查询快递信息
group_dict
[
key
]
=
provider
.
search_pro_info
()
# 查询快递信息
group_dict
[
key
][
'count'
]
=
0
group_dict
[
key
][
'count'
]
=
0
group_dict
[
key
][
'big_package_arr'
]
=
[]
#
大包信息
group_dict
[
key
][
'big_package_arr'
]
=
[]
#
大包信息
group_dict
[
key
][
'ship_package_arr'
]
=
[]
#
小包信息
group_dict
[
key
][
'ship_package_arr'
]
=
[]
#
小包信息
group_dict
[
key
][
'pallet_info_arr'
]
=
[]
#
托盘信息
group_dict
[
key
][
'pallet_info_arr'
]
=
[]
#
托盘信息
group_dict
[
key
][
'count'
]
+=
1
group_dict
[
key
][
'count'
]
+=
1
group_dict
[
key
][
'big_package_arr'
]
.
append
(
pkg
.
search_big_package_info
(
pda_lang
=
pda_lang
,
type
=
tally_state
))
if
tally_state
==
'unprocessed_goods'
or
(
tally_state
==
'checked_goods'
and
not
is_pallet
):
#按托盘理货时返回未使用的托盘信息,按尾程时返回小包信息
group_dict
[
key
][
'big_package_arr'
]
.
append
(
pkg
.
search_big_package_info
(
pda_lang
=
pda_lang
,
type
=
tally_state
))
# 按托盘理货时返回未使用的托盘信息,按尾程时返回小包信息
if
is_pallet
:
if
is_pallet
:
unused_pallets
=
request
.
env
[
'cc.pallet'
]
.
sudo
()
.
search
([(
'usage_state'
,
'='
,
'unused'
),(
'express_company_id'
,
'='
,
key
)])
# 如果是未理货,查未使用托盘;如果是已理货,查已使用托盘
pallet_info_arr
=
[
pallet
.
search_pallet_info
()
for
pallet
in
unused_pallets
]
if
tally_state
==
'unprocessed_goods'
:
domain
=
[(
'usage_state'
,
'='
,
'unused'
)]
else
:
domain
=
[(
'usage_state'
,
'='
,
'used'
)]
unused_pallets
=
request
.
env
[
'cc.pallet'
]
.
sudo
()
.
search
([(
'express_company_id'
,
'='
,
key
)]
+
domain
)
pallet_info_arr
=
[
pallet
.
search_pallet_info
()
for
pallet
in
unused_pallets
]
group_dict
[
key
][
'pallet_info_arr'
]
=
pallet_info_arr
group_dict
[
key
][
'pallet_info_arr'
]
=
pallet_info_arr
group_dict
[
key
][
'pallet_info_arr'
]
.
sort
(
key
=
lambda
x
:
x
.
get
(
'name'
,
''
))
#
根据托盘号升序排序
group_dict
[
key
][
'pallet_info_arr'
]
.
sort
(
key
=
lambda
x
:
x
.
get
(
'name'
,
''
))
#
根据托盘号升序排序
else
:
else
:
group_dict
[
key
][
'ship_package_arr'
]
.
extend
(
group_dict
[
key
][
'ship_package_arr'
]
.
extend
(
[
ship_package_item
.
search_ship_package_info
(
pda_lang
=
pda_lang
)
for
ship_package_item
in
[
ship_package_item
.
search_ship_package_info
(
pda_lang
=
pda_lang
)
for
ship_package_item
in
pkg
.
ship_package_ids
])
pkg
.
ship_package_ids
])
# 4. 返回
# 4. 返回
provider_info_arr
=
list
(
group_dict
.
values
())
provider_info_arr
=
list
(
group_dict
.
values
())
# 按服务商名称升序排序
# 按服务商名称升序排序
...
@@ -785,86 +795,11 @@ class OrderController(http.Controller):
...
@@ -785,86 +795,11 @@ class OrderController(http.Controller):
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
}
}
logging
.
info
(
'pallet_tally error:
%
s'
%
e
)
logging
.
info
(
'pallet_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
(
'pallet_tally res:
%
s'
%
res
)
logging
.
info
(
'pallet_tally res:
%
s'
%
res
)
return
res
return
res
@http.route
(
'/api/pallet/tally/complete'
,
type
=
'json'
,
auth
=
'public'
,
csrf
=
False
)
def
pallet_tally_complete
(
self
):
"""
按托盘理货完成接口
处理理货完成后的数据
"""
kwargs
=
json
.
loads
(
request
.
httprequest
.
data
)
pda_lang
=
kwargs
.
get
(
'pda_lang'
)
or
'zh'
res
=
{
'state'
:
201
,
'message'
:
''
}
operation
=
'pallet_tally'
tally_user_id
=
kwargs
.
get
(
'tally_user_id'
)
try
:
logging
.
info
(
'pallet_tally_complete kwargs:
%
s'
%
kwargs
)
pallet_data
=
kwargs
.
get
(
'pallet_data'
,
[])
if
not
pallet_data
:
res
[
'message'
]
=
{
'en'
:
'Pallet data is required'
,
'zh'
:
'托盘数据必须提供'
}[
pda_lang
]
return
res
for
pallet_item
in
pallet_data
:
pallet_id
=
pallet_item
.
get
(
'pallet_id'
)
usage_time
=
pallet_item
.
get
(
'usage_time'
)
big_package_nos
=
pallet_item
.
get
(
'big_package_nos'
,
[])
if
not
pallet_id
or
not
usage_time
or
not
big_package_nos
:
continue
# 获取托盘对象
pallet
=
request
.
env
[
'cc.pallet'
]
.
sudo
()
.
browse
(
pallet_id
)
if
not
pallet
.
exists
():
continue
# 获取大包对象
big_packages
=
request
.
env
[
'cc.big.package'
]
.
sudo
()
.
search
([
(
'big_package_no'
,
'in'
,
big_package_nos
)
])
if
big_packages
:
# 更新托盘状态为已使用
pallet
.
update_usage_state
(
big_packages
,
usage_time
)
# 创建成功的PDA扫码记录
bl_obj
=
big_packages
[
0
]
.
bl_id
if
big_packages
else
None
if
bl_obj
:
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
record_type
=
'tally'
,
bill_number
=
bl_obj
.
bl_no
,
transfer_number
=
bl_obj
.
transfer_bl_no
,
state
=
'success'
,
bl_id
=
bl_obj
.
id
,
operation_time
=
usage_time
,
operator_id
=
tally_user_id
)
res
[
'state'
]
=
200
except
Exception
as
e
:
error
=
str
(
e
)
logging
.
info
(
'pallet_tally_complete error:
%
s'
%
error
)
exceptions_msg_dic
=
{
'en'
:
'System parsing error, the reason for the error is
%
s'
%
error
,
'zh'
:
'系统解析错误,错误原因是
%
s'
%
error
}
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
# 创建失败的PDA扫码记录
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
record_type
=
'tally'
,
bill_number
=
''
,
transfer_number
=
''
,
state
=
'failed'
,
failure_reason
=
error
,
operator_id
=
tally_user_id
)
logging
.
info
(
'pallet_tally_complete res:
%
s'
%
res
)
return
res
@http.route
(
'/api/pallet/handover'
,
type
=
'json'
,
auth
=
'public'
,
csrf
=
False
)
@http.route
(
'/api/pallet/handover'
,
type
=
'json'
,
auth
=
'public'
,
csrf
=
False
)
def
pallet_handover
(
self
):
def
pallet_handover
(
self
):
"""
"""
...
@@ -883,112 +818,29 @@ class OrderController(http.Controller):
...
@@ -883,112 +818,29 @@ class OrderController(http.Controller):
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
'zh'
:
'系统解析错误,错误原因是
%
s'
%
e
}
}
logging
.
info
(
'pallet_handover error:
%
s'
%
e
)
logging
.
info
(
'pallet_handover 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
(
'pallet_handover res:
%
s'
%
res
)
logging
.
info
(
'pallet_handover res:
%
s'
%
res
)
return
res
return
res
@http.route
(
'/api/pallet/handover/complete'
,
type
=
'json'
,
auth
=
'public'
,
csrf
=
False
)
def
pallet_handover_complete
(
self
):
"""
按托盘交货完成接口
处理交货完成后的数据
"""
kwargs
=
json
.
loads
(
request
.
httprequest
.
data
)
pda_lang
=
kwargs
.
get
(
'pda_lang'
)
or
'zh'
res
=
{
'state'
:
201
,
'message'
:
''
}
operation
=
'pallet_handover'
tally_user_id
=
kwargs
.
get
(
'tally_user_id'
)
try
:
logging
.
info
(
'pallet_handover_complete kwargs:
%
s'
%
kwargs
)
pallet_data
=
kwargs
.
get
(
'pallet_data'
,
[])
if
not
pallet_data
:
res
[
'message'
]
=
{
'en'
:
'Pallet data is required'
,
'zh'
:
'托盘数据必须提供'
}[
pda_lang
]
return
res
for
pallet_item
in
pallet_data
:
pallet_id
=
pallet_item
.
get
(
'pallet_id'
)
handover_time
=
pallet_item
.
get
(
'handover_time'
)
plate_number
=
pallet_item
.
get
(
'plate_number'
,
''
)
if
not
pallet_id
or
not
handover_time
:
continue
# 获取托盘对象
pallet
=
request
.
env
[
'cc.pallet'
]
.
sudo
()
.
browse
(
pallet_id
)
if
not
pallet
.
exists
():
continue
# 更新托盘交货时间和车牌号
pallet
.
delivery_plate_number
=
plate_number
# 更新托盘关联的大包交货信息
for
pkg
in
pallet
.
package_ids
:
pkg
.
update_big_package_info
(
action_type
=
'handover'
,
tally_state
=
'handover_completed'
,
tally_user_id
=
tally_user_id
,
tally_time
=
handover_time
)
# 创建成功的PDA扫码记录
if
pallet
.
package_ids
:
bl_obj
=
pallet
.
package_ids
[
0
]
.
bl_id
if
bl_obj
:
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
record_type
=
'handover'
,
bill_number
=
bl_obj
.
bl_no
,
transfer_number
=
bl_obj
.
transfer_bl_no
,
state
=
'success'
,
bl_id
=
bl_obj
.
id
,
operation_time
=
handover_time
,
operator_id
=
tally_user_id
)
res
[
'state'
]
=
200
except
Exception
as
e
:
error
=
str
(
e
)
logging
.
info
(
'pallet_handover_complete error:
%
s'
%
error
)
exceptions_msg_dic
=
{
'en'
:
'System parsing error, the reason for the error is
%
s'
%
error
,
'zh'
:
'系统解析错误,错误原因是
%
s'
%
error
}
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
# 创建失败的PDA扫码记录
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
record_type
=
'handover'
,
bill_number
=
''
,
transfer_number
=
''
,
state
=
'failed'
,
failure_reason
=
error
,
operator_id
=
tally_user_id
)
logging
.
info
(
'pallet_handover_complete res:
%
s'
%
res
)
return
res
@http.route
(
'/api/update/pallet/big/package/tally/detail'
,
type
=
'json'
,
auth
=
'public'
,
methods
=
[
'GET'
,
'POST'
],
@http.route
(
'/api/update/pallet/big/package/tally/detail'
,
type
=
'json'
,
auth
=
'public'
,
methods
=
[
'GET'
,
'POST'
],
csrf
=
False
)
csrf
=
False
)
def
update_pallet_big_package_tally_detail
(
self
):
def
update_pallet_big_package_tally_detail
(
self
):
"""
"""
修改尾程快递按托盘号的理货
/交货
信息
修改尾程快递按托盘号的理货信息
:return:
:return:
"""
"""
kwargs
=
json
.
loads
(
request
.
httprequest
.
data
)
kwargs
=
json
.
loads
(
request
.
httprequest
.
data
)
pda_lang
=
kwargs
.
get
(
'pda_lang'
)
or
'zh'
pda_lang
=
kwargs
.
get
(
'pda_lang'
)
or
'zh'
res
=
{
'state'
:
201
,
'message'
:
''
}
res
=
{
'state'
:
201
,
'message'
:
''
}
action_type
=
kwargs
.
get
(
'action_type'
)
or
'tally'
# tally / handover
action_type
=
'tally'
operation
=
'pallet_tally'
if
action_type
==
'tally'
else
'pallet_handover'
#按托盘理货/交
货
operation
=
'pallet_tally'
# 按托盘理
货
tally_user_id
=
False
# 理货人ID
tally_user_id
=
False
# 理货人ID
ship_packages
=
[]
ship_packages
=
[]
try
:
try
:
logging
.
info
(
'update_pallet_big_package_tally_detail kw:
%
s'
%
kwargs
)
logging
.
info
(
'update_pallet_big_package_tally_detail kw:
%
s'
%
kwargs
)
if
action_type
and
kwargs
.
get
(
'pallet_arr'
):
if
kwargs
.
get
(
'pallet_arr'
):
#判断托盘数组里面的托盘号在托盘表里面是否存在
#
判断托盘数组里面的托盘号在托盘表里面是否存在
pallet_nos
=
[
pallet_item
.
get
(
'pallet_number'
)
for
pallet_item
in
kwargs
.
get
(
'pallet_arr'
)]
pallet_nos
=
[
pallet_item
.
get
(
'pallet_number'
)
for
pallet_item
in
kwargs
.
get
(
'pallet_arr'
)]
pallet_obj
=
request
.
env
[
'cc.pallet'
]
.
sudo
()
.
search
([(
'name'
,
'in'
,
pallet_nos
)])
pallet_obj
=
request
.
env
[
'cc.pallet'
]
.
sudo
()
.
search
([(
'name'
,
'in'
,
pallet_nos
)])
if
not
pallet_obj
:
if
not
pallet_obj
:
...
@@ -997,13 +849,14 @@ class OrderController(http.Controller):
...
@@ -997,13 +849,14 @@ class OrderController(http.Controller):
'zh'
:
'托盘号[
%
s]不存在'
%
','
.
join
(
pallet_nos
)
'zh'
:
'托盘号[
%
s]不存在'
%
','
.
join
(
pallet_nos
)
}[
pda_lang
]
}[
pda_lang
]
return
res
return
res
# 将托盘状态更新为已使用
# 将托盘状态更新为已使用
all_big_package_arr
=
[]
for
pallet_item
in
kwargs
.
get
(
'pallet_arr'
):
for
pallet_item
in
kwargs
.
get
(
'pallet_arr'
):
pallet_number
=
pallet_item
.
get
(
'pallet_number'
)
pallet_number
=
pallet_item
.
get
(
'pallet_number'
)
# 托盘号
pallet_use_date
=
pallet_item
.
get
(
'pallet_use_date'
)
pallet_use_date
=
pallet_item
.
get
(
'pallet_use_date'
)
# 托盘使用日期
big_package_arr
=
pallet_item
.
get
(
'big_package_arr'
,
[])
big_package_arr
=
pallet_item
.
get
(
'big_package_arr'
,
[])
# 大包号数组
all_big_package_arr
.
extend
(
big_package_arr
)
# 找到对应的托盘对象
# 找到对应的托盘对象
pallet
=
pallet_obj
.
filtered
(
lambda
p
:
p
.
name
==
pallet_number
)
pallet
=
pallet_obj
.
filtered
(
lambda
p
:
p
.
name
==
pallet_number
)
if
pallet
and
big_package_arr
:
if
pallet
and
big_package_arr
:
...
@@ -1014,34 +867,18 @@ class OrderController(http.Controller):
...
@@ -1014,34 +867,18 @@ class OrderController(http.Controller):
if
big_package_objs
:
if
big_package_objs
:
# 调用托盘的update_usage_state方法
# 调用托盘的update_usage_state方法
pallet
.
update_usage_state
(
big_package_objs
,
pallet_use_date
)
pallet
.
update_usage_state
(
big_package_objs
,
pallet_use_date
)
big_package_arr
=
[]
tally_user_id
=
kwargs
[
'big_package_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
error_no_arr
=
[]
'big_package_arr'
)
else
False
for
pallet_item
in
kwargs
.
get
(
'pallet_arr'
):
#检查托盘内的大包号是否存在
big_package_arr
.
extend
(
pallet_item
.
get
(
'big_package_arr'
))
if
big_package_arr
:
big_package_obj
=
request
.
env
[
'cc.big.package'
]
.
sudo
()
.
search
([(
'big_package_no'
,
'in'
,
big_package_arr
)])
if
not
big_package_obj
:
error_no_arr
.
extend
(
big_package_arr
)
if
error_no_arr
:
res
[
'message'
]
=
{
'en'
:
'Big package number [
%
s] does not exist'
%
','
.
join
(
error_no_arr
),
'zh'
:
'大包号[
%
s]不存在'
%
','
.
join
(
error_no_arr
)
}[
pda_lang
]
return
res
tally_user_id
=
kwargs
[
'big_package_arr'
][
0
]
.
get
(
'tally_user_id'
)
if
kwargs
.
get
(
'big_package_arr'
)
else
False
big_package_exception_arr
=
{}
big_package_exception_arr
=
{}
# 处理包裹信息
# 处理包裹信息
def
process_packages
(
package_arr
,
package_type
,
ship_packages
):
def
process_packages
(
package_arr
,
ship_packages
):
error_no_set
=
set
()
# 使用集合来存储错误信息
error_no_set
=
set
()
# 使用集合来存储错误信息
for
package_item
in
package_arr
:
for
package_item
in
package_arr
:
file_str
=
'big_package_no'
# 大包号
package_no
=
package_item
.
get
(
'big_package_no'
)
# 包裹号
package_no
=
package_item
.
get
(
file_str
)
# 包裹号
exception_cause_ids
=
package_item
.
get
(
'exception_cause_ids'
)
# 异常原因id数组
exception_cause_ids
=
package_item
.
get
(
'exception_cause_ids'
)
# 异常原因id数组
package_obj
=
request
.
env
[
f
'cc.big.package'
]
.
sudo
()
.
search
(
package_obj
=
request
.
env
[
f
'cc.big.package'
]
.
sudo
()
.
search
(
[(
file_str
,
'='
,
package_no
)])
# 大包 1个
[(
'big_package_no'
,
'='
,
package_no
)])
# 大包 1个
if
package_obj
:
if
package_obj
:
if
exception_cause_ids
:
if
exception_cause_ids
:
for
excep_item
in
exception_cause_ids
:
for
excep_item
in
exception_cause_ids
:
...
@@ -1076,9 +913,8 @@ class OrderController(http.Controller):
...
@@ -1076,9 +913,8 @@ class OrderController(http.Controller):
return
error_no_set
return
error_no_set
# 处理大包
# 处理大包
if
kwargs
.
get
(
'big_package_arr'
):
if
all_big_package_arr
:
error_no_arr
=
process_packages
(
error_no_arr
=
process_packages
(
all_big_package_arr
,
ship_packages
)
kwargs
[
'big_package_arr'
],
'big'
,
ship_packages
)
if
error_no_arr
:
if
error_no_arr
:
res
[
'message'
]
=
{
res
[
'message'
]
=
{
'en'
:
'Big package number [
%
s] does not exist'
%
','
.
join
(
error_no_arr
),
'en'
:
'Big package number [
%
s] does not exist'
%
','
.
join
(
error_no_arr
),
...
@@ -1127,8 +963,8 @@ class OrderController(http.Controller):
...
@@ -1127,8 +963,8 @@ class OrderController(http.Controller):
else
:
else
:
null_msg_dic
=
{
null_msg_dic
=
{
'en'
:
'The
bill of lading number and action type must be provided; at least one of the following is required: big package data or pallet data
.'
,
'en'
:
'The
pallet data must be provided
.'
,
'zh'
:
'
类型必须提供;大包数据或托盘数据至少需要提供一个
。'
'zh'
:
'
托盘数据必须提供
。'
}
}
res
[
'message'
]
=
null_msg_dic
[
pda_lang
]
res
[
'message'
]
=
null_msg_dic
[
pda_lang
]
except
Exception
as
e
:
except
Exception
as
e
:
...
@@ -1166,3 +1002,112 @@ class OrderController(http.Controller):
...
@@ -1166,3 +1002,112 @@ class OrderController(http.Controller):
logging
.
info
(
'update_pallet_big_package_tally_detail res:
%
s'
%
res
)
logging
.
info
(
'update_pallet_big_package_tally_detail res:
%
s'
%
res
)
return
res
return
res
@http.route
(
'/api/pallet/handover/complete'
,
type
=
'json'
,
auth
=
'public'
,
csrf
=
False
)
def
pallet_handover_complete
(
self
):
"""
按托盘交货完成接口
处理交货完成后的数据
"""
kwargs
=
json
.
loads
(
request
.
httprequest
.
data
)
pda_lang
=
kwargs
.
get
(
'pda_lang'
)
or
'zh'
res
=
{
'state'
:
201
,
'message'
:
''
}
operation
=
'pallet_handover'
handover_user_id
=
kwargs
.
get
(
'handover_user_id'
)
ship_packages
=
[]
try
:
logging
.
info
(
'pallet_handover_complete kwargs:
%
s'
%
kwargs
)
pallet_arr
=
kwargs
.
get
(
'pallet_arr'
,
[])
if
not
pallet_arr
:
res
[
'message'
]
=
{
'en'
:
'Pallet data is required'
,
'zh'
:
'托盘数据必须提供'
}[
pda_lang
]
return
res
# 获取交货人
if
not
handover_user_id
:
handover_user_id
=
kwargs
.
get
(
'pallet_arr'
)[
0
]
.
get
(
'handover_user_id'
)
# 交货人
# 处理托盘以及大包信息
def
process_packages
(
pallet_data
,
ship_packages
):
error_no_set
=
set
()
# 使用集合来存储错误信息
for
pallet_item
in
pallet_data
:
pallet_number
=
pallet_item
.
get
(
'pallet_number'
)
# 托盘号
pallet_obj
=
request
.
env
[
'cc.pallet'
]
.
sudo
()
.
search
([(
'name'
,
'='
,
pallet_number
)])
if
not
pallet_obj
:
error_no_set
.
add
(
pallet_number
)
continue
plate_number
=
pallet_item
.
get
(
'plate_number'
,
''
)
# 车牌号
handover_time
=
pallet_item
.
get
(
'handover_time'
)
# 交货时间
pallet_obj
.
update_pallet_info
(
delivery_plate_number
=
plate_number
)
# 更新托盘车牌号
package_obj
=
pallet_obj
.
package_ids
# 获取托盘下的大包
if
package_obj
:
for
package
in
package_obj
:
# 添加小包信息
ship_packages
.
append
({
'id'
:
package
.
ship_package_ids
.
ids
,
'bl_id'
:
package
.
bl_id
.
id
,
'tally_time'
:
handover_time
})
# 小包
# 更新大包交货信息
package_obj
.
update_big_package_info
(
action_type
=
'handover'
,
tally_state
=
'handover_completed'
,
tally_user_id
=
handover_user_id
,
tally_time
=
handover_time
)
# 修改交货信息
return
error_no_set
# 处理大包
error_no_arr
=
process_packages
(
pallet_arr
,
ship_packages
)
if
error_no_arr
:
res
[
'message'
]
=
{
'en'
:
'Big package number [
%
s] does not exist'
%
','
.
join
(
error_no_arr
),
'zh'
:
'大包号[
%
s]不存在'
%
','
.
join
(
error_no_arr
)
}[
pda_lang
]
return
res
res
[
'state'
]
=
200
# 有小包 就更新小包状态和同步
if
ship_packages
:
# 获取最晚的操作时间
latest_operation_time
=
self
.
_get_latest_operation_time
(
ship_packages
)
# 在这里创建成功的pda扫码记录
bl_obj
=
request
.
env
[
'cc.bl'
]
.
sudo
()
.
search
(
[(
'id'
,
'in'
,
[
ship_package
.
get
(
'bl_id'
)
for
ship_package
in
ship_packages
])])
logging
.
info
(
f
"bl_obj: {bl_obj}"
)
for
bl
in
bl_obj
:
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
record_type
=
'handover'
,
bill_number
=
bl
.
bl_no
,
transfer_number
=
bl
.
transfer_bl_no
,
state
=
'success'
,
bl_id
=
bl
.
id
,
operation_time
=
latest_operation_time
,
operator_id
=
handover_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
]
logging
.
info
(
'bl_ids:
%
s'
%
bl_ids
)
redis_conn
.
lpush
(
'mail_push_package_list'
,
json
.
dumps
(
{
'ids'
:
list
(
set
(
bl_ids
)),
'ship_packages'
:
str
(
ship_packages
),
'action_type'
:
'handover'
}))
except
Exception
as
e
:
error
=
str
(
e
)
logging
.
info
(
'pallet_handover_complete error:
%
s'
%
error
)
exceptions_msg_dic
=
{
'en'
:
'System parsing error, the reason for the error is
%
s'
%
error
,
'zh'
:
'系统解析错误,错误原因是
%
s'
%
error
}
res
[
'message'
]
=
exceptions_msg_dic
[
pda_lang
]
# 创建失败的PDA扫码记录
request
.
env
[
'pda.scan.record'
]
.
sudo
()
.
create_scan_record
(
operation
=
operation
,
record_type
=
'handover'
,
bill_number
=
''
,
transfer_number
=
''
,
state
=
'failed'
,
failure_reason
=
error
,
operator_id
=
handover_user_id
)
logging
.
info
(
'pallet_handover_complete res:
%
s'
%
res
)
return
res
ccs_connect_tiktok/models/cc_pallet.py
浏览文件 @
cde63e51
...
@@ -24,10 +24,10 @@ class CcPallet(models.Model):
...
@@ -24,10 +24,10 @@ class CcPallet(models.Model):
'express_company_name'
:
self
.
express_company_id
.
name
,
#快递公司名称
'express_company_name'
:
self
.
express_company_id
.
name
,
#快递公司名称
'usage_state'
:
self
.
usage_state
,
#使用状态 unused未使用 used已使用
'usage_state'
:
self
.
usage_state
,
#使用状态 unused未使用 used已使用
'print_state'
:
self
.
print_state
,
#打印状态 unprinted未打印 printed已打印
'print_state'
:
self
.
print_state
,
#打印状态 unprinted未打印 printed已打印
'sorting_time'
:
s
elf
.
sorting_time
,
#托盘理货时间
'sorting_time'
:
s
tr
(
self
.
sorting_time
)
if
self
.
sorting_time
else
''
,
#托盘理货时间
'delivery_time'
:
s
elf
.
delivery_time
,
#托盘交货时间
'delivery_time'
:
s
tr
(
self
.
delivery_time
)
if
self
.
delivery_time
else
''
,
#托盘交货时间
'package_count'
:
self
.
package_count
,
#大包数量
'package_count'
:
self
.
package_count
,
#大包数量
'partner_id'
:
self
.
partner_id
.
id
,
#使用客户id
'partner_id'
:
self
.
partner_id
.
id
,
#使用客户id
'partner_name'
:
self
.
partner_id
.
name
,
#使用客户名称
'partner_name'
:
self
.
partner_id
.
name
,
#使用客户名称
'delivery_plate_number'
:
self
.
delivery_plate_number
,
#托盘交付车牌号
'delivery_plate_number'
:
self
.
delivery_plate_number
or
''
,
#托盘交付车牌号
}
}
\ No newline at end of file
ccs_pallet/models/cc_pallet.py
浏览文件 @
cde63e51
...
@@ -9,6 +9,7 @@ from odoo import models, fields, api, _
...
@@ -9,6 +9,7 @@ from odoo import models, fields, api, _
_logger
=
logging
.
getLogger
(
__name__
)
_logger
=
logging
.
getLogger
(
__name__
)
from
odoo.exceptions
import
ValidationError
from
odoo.exceptions
import
ValidationError
class
CcPallet
(
models
.
Model
):
class
CcPallet
(
models
.
Model
):
# 模型名称
# 模型名称
_name
=
'cc.pallet'
_name
=
'cc.pallet'
...
@@ -43,7 +44,7 @@ class CcPallet(models.Model):
...
@@ -43,7 +44,7 @@ class CcPallet(models.Model):
默认给值,随机选一个未存档的客户
默认给值,随机选一个未存档的客户
"""
"""
return
self
.
env
[
'res.partner'
]
.
search
([(
'is_customer'
,
'='
,
True
),
(
'active'
,
'='
,
True
)],
limit
=
1
)
.
id
return
self
.
env
[
'res.partner'
]
.
search
([(
'is_customer'
,
'='
,
True
),
(
'active'
,
'='
,
True
)],
limit
=
1
)
.
id
# 计算字段:大包数量
# 计算字段:大包数量
@api.depends
(
'package_ids'
)
@api.depends
(
'package_ids'
)
def
_compute_package_count
(
self
):
def
_compute_package_count
(
self
):
...
@@ -61,7 +62,7 @@ class CcPallet(models.Model):
...
@@ -61,7 +62,7 @@ class CcPallet(models.Model):
pallet
.
sorting_time
=
max
(
sorting_times
)
pallet
.
sorting_time
=
max
(
sorting_times
)
else
:
else
:
pallet
.
sorting_time
=
False
pallet
.
sorting_time
=
False
# 获取所有关联大包的尾程交货时间,取最晚的时间
# 获取所有关联大包的尾程交货时间,取最晚的时间
delivery_times
=
pallet
.
package_ids
.
filtered
(
'delivery_time'
)
.
mapped
(
'delivery_time'
)
delivery_times
=
pallet
.
package_ids
.
filtered
(
'delivery_time'
)
.
mapped
(
'delivery_time'
)
if
delivery_times
:
if
delivery_times
:
...
@@ -73,7 +74,7 @@ class CcPallet(models.Model):
...
@@ -73,7 +74,7 @@ class CcPallet(models.Model):
pallet
.
delivery_time
=
False
pallet
.
delivery_time
=
False
# 托盘号(年月+4位数,不能重复生成)
# 托盘号(年月+4位数,不能重复生成)
name
=
fields
.
Char
(
string
=
_
(
'Pallet Number'
),
copy
=
False
,
help
=
_
(
'Pallet number format: YYYYMM + 4 digits'
))
name
=
fields
.
Char
(
string
=
_
(
'Pallet Number'
),
copy
=
False
,
help
=
_
(
'Pallet number format: YYYYMM + 4 digits'
))
# 托盘归属快递
# 托盘归属快递
express_company_id
=
fields
.
Many2one
(
'cc.last.mile.provider'
,
string
=
_
(
'Express Company'
),
index
=
True
)
express_company_id
=
fields
.
Many2one
(
'cc.last.mile.provider'
,
string
=
_
(
'Express Company'
),
index
=
True
)
# 使用状态
# 使用状态
...
@@ -98,56 +99,57 @@ class CcPallet(models.Model):
...
@@ -98,56 +99,57 @@ class CcPallet(models.Model):
# 使用客户
# 使用客户
partner_id
=
fields
.
Many2one
(
'res.partner'
,
string
=
_
(
'Customer'
),
default
=
get_partner_id
,
partner_id
=
fields
.
Many2one
(
'res.partner'
,
string
=
_
(
'Customer'
),
default
=
get_partner_id
,
domain
=
[(
'is_customer'
,
'='
,
True
)])
domain
=
[(
'is_customer'
,
'='
,
True
)])
# 托盘交付车牌号
# 托盘交付车牌号
delivery_plate_number
=
fields
.
Char
(
string
=
_
(
'Delivery Plate Number'
))
delivery_plate_number
=
fields
.
Char
(
string
=
_
(
'Delivery Plate Number'
))
def
update_pallet_info
(
self
,
**
kwargs
):
"""更新托盘信息"""
if
kwargs
.
get
(
'delivery_plate_number'
,
''
):
self
.
delivery_plate_number
=
kwargs
[
'delivery_plate_number'
]
# 当大包关联到托盘时,自动更新使用状态
# 当大包关联到托盘时,自动更新使用状态
def
update_usage_state
(
self
,
success_package
,
usage_date
):
def
update_usage_state
(
self
,
success_package
,
usage_date
):
"""更新托盘使用状态"""
"""更新托盘使用状态"""
for
pallet
in
self
:
for
pallet
in
self
:
if
pallet
.
package_ids
:
pallet
.
usage_state
=
'used'
pallet
.
usage_state
=
'used'
# 关联大包到托盘
# 关联大包到托盘
pallet
.
package_ids
=
[(
4
,
package_id
.
id
,
0
)
for
package_id
in
success_package
]
pallet
.
package_ids
=
[(
4
,
package_id
.
id
,
0
)
for
package_id
in
success_package
]
# 更新大包的托盘信息
for
package
in
success_package
:
old_pallet_number
=
package
.
pallet_number
new_pallet_number
=
pallet
.
name
# 使用托盘的编号
old_usage_date
=
package
.
pallet_usage_date
# 同一提单,同一托盘号,使用日期必须一致
related_packages
=
package
.
bl_id
.
big_package_ids
.
filtered
(
lambda
p
:
p
.
pallet_number
==
new_pallet_number
)
# 查找对应提单下相同托盘号的所有大包
warning_package_arr
=
[
related_package
.
big_package_no
for
related_package
in
related_packages
if
str
(
related_package
.
pallet_usage_date
)
!=
usage_date
]
if
warning_package_arr
:
raise
ValidationError
(
_
(
'Big Package No :
%
s ,The same bill of lading, same pallet number, and usage date must be consistent!'
)
%
(
'
\n
'
.
join
(
warning_package_arr
)))
# 大包号关联的同一提单,同一托盘号,使用日期必须一致
# 更新大包的托盘信息
# 更新大包的托盘信息
for
package
in
success_package
:
package
.
update_pallet_info
(
new_pallet_number
,
usage_date
,
pallet
.
id
)
old_pallet_number
=
package
.
pallet_number
new_pallet_number
=
pallet
.
name
# 使用托盘的编号
if
old_pallet_number
:
old_usage_date
=
package
.
pallet_usage_date
# %s %s更改了托盘号,由%s变更为%s,托盘使用日期%s变更为%s
body
=
_
(
# 同一提单,同一托盘号,使用日期必须一致
'
%
s at
%
s changed the pallet number from
%
s to
%
s, and the pallet usage date from
%
s to
%
s'
)
%
(
related_packages
=
package
.
bl_id
.
big_package_ids
.
filtered
(
self
.
env
.
user
.
name
,
fields
.
Datetime
.
now
(),
old_pallet_number
,
new_pallet_number
,
lambda
p
:
p
.
pallet_number
==
new_pallet_number
)
# 查找对应提单下相同托盘号的所有大包
old_usage_date
,
warning_package_arr
=
[
related_package
.
big_package_no
for
related_package
in
related_packages
if
usage_date
)
related_package
.
pallet_usage_date
!=
usage_date
]
else
:
if
warning_package_arr
:
# 某人某时关联了托盘xxx,托盘使用日期xxxx
raise
ValidationError
(
body
=
_
(
'
%
s at
%
s associated tray
%
s, with a tray usage date of
%
s'
)
%
(
_
(
'Big Package No :
%
s ,The same bill of lading, same pallet number, and usage date must be consistent!'
)
%
(
self
.
env
.
user
.
name
,
fields
.
Datetime
.
now
(),
new_pallet_number
,
usage_date
)
'
\n
'
.
join
(
warning_package_arr
)))
# 大包号关联的同一提单,同一托盘号,使用日期必须一致
package
.
message_post
(
body
=
body
)
# 更新大包的托盘信息
# 记录托盘关联日志
package
.
update_pallet_info
(
new_pallet_number
,
usage_date
,
pallet
.
id
)
body
=
_
(
'
%
s at
%
s associated
%
d packages to pallet
%
s'
)
%
(
self
.
env
.
user
.
name
,
fields
.
Datetime
.
now
(),
len
(
success_package
),
pallet
.
name
)
if
old_pallet_number
:
pallet
.
message_post
(
body
=
body
)
# %s %s更改了托盘号,由%s变更为%s,托盘使用日期%s变更为%s
body
=
_
(
'
%
s at
%
s changed the pallet number from
%
s to
%
s, and the pallet usage date from
%
s to
%
s'
)
%
(
self
.
env
.
user
.
name
,
fields
.
Datetime
.
now
(),
old_pallet_number
,
new_pallet_number
,
old_usage_date
,
usage_date
)
else
:
# 某人某时关联了托盘xxx,托盘使用日期xxxx
body
=
_
(
'
%
s at
%
s associated tray
%
s, with a tray usage date of
%
s'
)
%
(
self
.
env
.
user
.
name
,
fields
.
Datetime
.
now
(),
new_pallet_number
,
usage_date
)
package
.
message_post
(
body
=
body
)
# 记录托盘关联日志
body
=
_
(
'
%
s at
%
s associated
%
d packages to pallet
%
s'
)
%
(
self
.
env
.
user
.
name
,
fields
.
Datetime
.
now
(),
len
(
success_package
),
pallet
.
name
)
pallet
.
message_post
(
body
=
body
)
else
:
pallet
.
usage_state
=
'unused'
def
action_print_labels
(
self
):
def
action_print_labels
(
self
):
"""打印标签动作"""
"""打印标签动作"""
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论