提交 bef8276e authored 作者: 贺阳's avatar 贺阳

扫码记录的 操作人优化

增加尾程快递交货检查时间的优化
上级 afef8d8f
...@@ -154,10 +154,15 @@ class OrderController(http.Controller): ...@@ -154,10 +154,15 @@ class OrderController(http.Controller):
action_type = kwargs.get('action_type') or 'tally' # tally / handover action_type = kwargs.get('action_type') or 'tally' # tally / handover
operation = 'bill_tally' if action_type == 'tally' else 'bill_handover' operation = 'bill_tally' if action_type == 'tally' else 'bill_handover'
bl_obj = False bl_obj = False
tally_user_id = False # 理货人ID
try: try:
logging.info('update_big_package_tally_detail kw:%s' % kwargs) logging.info('update_big_package_tally_detail kw:%s' % kwargs)
if kwargs.get('bl_no') and action_type and ( 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')): 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'] bl_no = kwargs['bl_no']
state_arr = ['draft', 'ccing'] state_arr = ['draft', 'ccing']
bl_obj = request.env['cc.bl'].sudo().deal_bl_no_and_transfer_bl_no( bl_obj = request.env['cc.bl'].sudo().deal_bl_no_and_transfer_bl_no(
...@@ -291,7 +296,8 @@ class OrderController(http.Controller): ...@@ -291,7 +296,8 @@ class OrderController(http.Controller):
transfer_number=bl_obj.transfer_bl_no, transfer_number=bl_obj.transfer_bl_no,
state='success', state='success',
bl_id=bl_obj.id, bl_id=bl_obj.id,
operation_time=latest_operation_time) operation_time=latest_operation_time,
operator_id=tally_user_id)
logging.info( logging.info(
'update_big_package_tally_detail ship_packages:%s' % len(ship_packages)) 'update_big_package_tally_detail ship_packages:%s' % len(ship_packages))
# 有小包 就更新小包状态和同步 # 有小包 就更新小包状态和同步
...@@ -328,8 +334,9 @@ class OrderController(http.Controller): ...@@ -328,8 +334,9 @@ class OrderController(http.Controller):
bill_number=bl_obj.bl_no, bill_number=bl_obj.bl_no,
transfer_number=bl_obj.transfer_bl_no, transfer_number=bl_obj.transfer_bl_no,
state='failed', state='failed',
bl_id=bl_obj.id, bl_id=bl_obj.id,
failure_reason=error) failure_reason=error,
operator_id=tally_user_id)
else: else:
request.env['pda.scan.record'].sudo().create_scan_record( request.env['pda.scan.record'].sudo().create_scan_record(
operation=operation, operation=operation,
...@@ -337,7 +344,8 @@ class OrderController(http.Controller): ...@@ -337,7 +344,8 @@ class OrderController(http.Controller):
bill_number='', bill_number='',
transfer_number='', transfer_number='',
state='failed', state='failed',
failure_reason=error) failure_reason=error,
operator_id=tally_user_id)
logging.info('res:%s' % res) logging.info('res:%s' % res)
return res return res
...@@ -353,10 +361,13 @@ class OrderController(http.Controller): ...@@ -353,10 +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
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 (
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 = {}
...@@ -476,7 +487,8 @@ class OrderController(http.Controller): ...@@ -476,7 +487,8 @@ class OrderController(http.Controller):
transfer_number=bl.transfer_bl_no, transfer_number=bl.transfer_bl_no,
state='success', state='success',
bl_id=bl.id, 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() redis_conn = request.env['common.common'].sudo().get_redis()
if redis_conn and redis_conn != 'no': if redis_conn and redis_conn != 'no':
bl_ids = [ship_package.get('bl_id') for ship_package in ship_packages] bl_ids = [ship_package.get('bl_id') for ship_package in ship_packages]
...@@ -512,7 +524,8 @@ class OrderController(http.Controller): ...@@ -512,7 +524,8 @@ class OrderController(http.Controller):
transfer_number=bl.transfer_bl_no, transfer_number=bl.transfer_bl_no,
state='failed', state='failed',
bl_id=bl.id, bl_id=bl.id,
failure_reason=error) failure_reason=error,
operator_id=tally_user_id)
else: else:
request.env['pda.scan.record'].sudo().create_scan_record( request.env['pda.scan.record'].sudo().create_scan_record(
operation=operation, operation=operation,
...@@ -520,7 +533,8 @@ class OrderController(http.Controller): ...@@ -520,7 +533,8 @@ class OrderController(http.Controller):
bill_number='', bill_number='',
transfer_number='', transfer_number='',
state='failed', state='failed',
failure_reason=error) failure_reason=error,
operator_id=tally_user_id)
logging.info('res:%s' % res) logging.info('res:%s' % res)
return res return res
...@@ -569,8 +583,7 @@ class OrderController(http.Controller): ...@@ -569,8 +583,7 @@ 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[ res['message'] = exceptions_msg_dic[pda_lang] # _('System parsing error, the reason for the error is %s', e) # 系统解析错误,错误原因是
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
...@@ -585,28 +598,48 @@ class OrderController(http.Controller): ...@@ -585,28 +598,48 @@ class OrderController(http.Controller):
try: try:
logging.info('last_mile_delivery kwargs:%s' % kwargs) logging.info('last_mile_delivery kwargs:%s' % kwargs)
# 按尾程交货时,检查时间风险 大包或小包对应的提单是否已存在成功扫码记录 # 按尾程交货时,检查时间风险 大包或小包对应的提单是否已存在成功扫码记录
res= self._get_last_mile_grouped('checked_goods', pda_lang) res = self._get_last_mile_grouped('checked_goods', pda_lang)
all_bl_ids_in_request=res['bl_ids'] 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}") logging.info(f"all_bl_ids_in_request: {all_bl_ids_in_request}")
if 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: 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']: if time_check_result['has_risk']:
res['state'] = 400 res['state'] = 400
res['message'] = time_check_result['message'] res['message'] = time_check_result['message']
return res return res
res['state'] = 200 res['state'] = 200
return res
except Exception as e: except Exception as e:
exceptions_msg_dic = { exceptions_msg_dic = {
'en': 'System parsing error, the reason for the error is %s' % e, 'en': 'System parsing error, the reason for the error is %s' % e,
'zh': '系统解析错误,错误原因是%s' % e 'zh': '系统解析错误,错误原因是%s' % e
} }
logging.info('last_mile_delivery error:%s' % e) logging.info('last_mile_delivery_time_check error:%s' % e)
res['message'] = exceptions_msg_dic[ res['message'] = exceptions_msg_dic[pda_lang]
pda_lang] # _('System parsing error, the reason for the error is %s', e) # 系统解析错误,错误原因是 logging.info('last_mile_delivery_time_check res:%s' % res)
logging.info('last_mile_delivery res:%s' % res)
return res return res
def _get_last_mile_grouped(self, tally_state, pda_lang): def _get_last_mile_grouped(self, tally_state, pda_lang):
...@@ -641,9 +674,10 @@ class OrderController(http.Controller): ...@@ -641,9 +674,10 @@ class OrderController(http.Controller):
provider_info_arr = list(group_dict.values()) provider_info_arr = list(group_dict.values())
# 按服务商名称升序排序 # 按服务商名称升序排序
provider_info_arr.sort(key=lambda x: x.get('name', '')) 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: 提单对象 :param bl_obj: 提单对象
...@@ -658,7 +692,7 @@ class OrderController(http.Controller): ...@@ -658,7 +692,7 @@ class OrderController(http.Controller):
# 查找该提单的PDA扫码记录,类型为理货的 # 查找该提单的PDA扫码记录,类型为理货的
pda_records = request.env['pda.scan.record'].sudo().search([ pda_records = request.env['pda.scan.record'].sudo().search([
('bl_id', '=', bl_obj.id), ('bl_id', '=', bl_obj.id),
('operation', '=', operation), # 理货类型 ('record_type', '=', 'tally'), # 理货类型
('state', '=', 'success') # 成功状态 ('state', '=', 'success') # 成功状态
], order='operation_time desc', limit=1) ], order='operation_time desc', limit=1)
...@@ -692,14 +726,15 @@ class OrderController(http.Controller): ...@@ -692,14 +726,15 @@ class OrderController(http.Controller):
def _get_latest_operation_time(self, ship_packages): def _get_latest_operation_time(self, ship_packages):
""" """
获取最晚的操作时间(理货时间或交货时间) 获取最晚的操作时间
:param ship_packages: 小包列表 :param ship_packages: 小包列表
:return: 最晚的操作时间字符串 :return: 最晚的操作时间字符串
""" """
latest_time = None latest_time = None
for ship_package in ship_packages: for ship_package in ship_packages:
tally_time = ship_package.get('tally_time') tally_time = ship_package.get('tally_time')
if tally_time: if tally_time:
# 如果tally_time是字符串,转换为datetime对象进行比较 # 如果tally_time是字符串,转换为datetime对象进行比较
if isinstance(tally_time, str): if isinstance(tally_time, str):
...@@ -717,8 +752,8 @@ class OrderController(http.Controller): ...@@ -717,8 +752,8 @@ class OrderController(http.Controller):
# 如果已经是datetime对象 # 如果已经是datetime对象
if latest_time is None or tally_time > latest_time: if latest_time is None or tally_time > latest_time:
latest_time = tally_time latest_time = tally_time
# 返回最晚时间的字符串格式,如果没有找到则返回当前时间 # 返回最晚时间的字符串格式
if latest_time: if latest_time:
return latest_time.strftime('%Y-%m-%d %H:%M:%S') return latest_time.strftime('%Y-%m-%d %H:%M:%S')
else: else:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论