@@ -437,7 +437,7 @@ class Sf_Dashboard_Connect(http.Controller):
( ' state ' , ' in ' , [ ' ready ' , ' progress ' , ' done ' ] )
] )
plan_data_total_counts = sum ( plan_data_total . mapped ( ' qty_produced ' ) )
plan_data_total_counts = sum ( plan_data_total . mapped ( ' qty_production ' ) )
# # 工单完成量
# plan_data_finish_counts = plan_obj.search_count(
@@ -601,8 +601,11 @@ class Sf_Dashboard_Connect(http.Controller):
line_list = ast . literal_eval ( kw [ ' line_list ' ] )
begin_time_str = kw [ ' begin_time ' ] . strip ( ' " ' )
end_time_str = kw [ ' end_time ' ] . strip ( ' " ' )
begin_time = datetime . strptime ( begin_time_str , ' % Y- % m- %d % H: % M: % S ' )
end _time = datetime . strptime ( end _time_str, ' % Y- % m- %d % H: % M: % S ' )
# 将时间减去8小时( UTC+8转UTC)
begin _time = ( datetime . strptime ( begin _time_str, ' % Y- % m- %d % H: % M: % S ' ) - timedelta ( hours = 8 ) )
end_time = ( datetime . strptime ( end_time_str , ' % Y- % m- %d % H: % M: % S ' ) - timedelta ( hours = 8 ) )
# begin_time = datetime.strptime(begin_time_str, '%Y-%m-%d %H:%M:%S')
# end_time = datetime.strptime(end_time_str, '%Y-%m-%d %H:%M:%S')
# print('line_list: %s' % line_list)
print ( ' kw ' , kw )
time_unit = kw . get ( ' time_unit ' , ' day ' ) . strip ( ' " ' ) # 默认单位为天
@@ -636,6 +639,15 @@ class Sf_Dashboard_Connect(http.Controller):
if time_unit == ' hour ' :
# 计划量, 目前只能从mail.message中筛选出
plan_order_messages = request . env [ ' mail.message ' ] . sudo ( ) . search ( [
( ' model ' , ' = ' , ' mrp.workorder ' ) ,
( ' create_date ' , ' >= ' , begin_time . strftime ( ' % Y- % m- %d % H: % M: % S ' ) ) ,
( ' create_date ' , ' <= ' , end_time . strftime ( ' % Y- % m- %d % H: % M: % S ' ) ) ,
( ' tracking_value_ids.field_desc ' , ' = ' , ' 状态 ' ) ,
( ' tracking_value_ids.new_value_char ' , ' = ' , ' 就绪 ' )
] )
for line in line_list :
date_field_name = ' date_finished ' # 替换为你模型中的实际字段名
@@ -678,19 +690,10 @@ class Sf_Dashboard_Connect(http.Controller):
)
# 使用小时和分钟作为键,确保每个小时的数据有独立的键
key = start_time . strftime ( ' % H: % M: % S ' ) # 只取小时:分钟:秒作为键
key = ( start_time + timedelta ( hours = 8 ) ) . strftime ( ' % H: % M: % S ' ) # 只取小时:分钟:秒作为键
# time_count_dict[key] = len(orders)
time_count_dict [ key ] = sum ( interval_orders . mapped ( ' qty_produced ' ) )
# 计划量, 目前只能从mail.message中筛选出
plan_order_messages = request . env [ ' mail.message ' ] . sudo ( ) . search ( [
( ' model ' , ' = ' , ' mrp.workorder ' ) ,
( ' create_date ' , ' >= ' , begin_time . strftime ( ' % Y- % m- %d % H: % M: % S ' ) ) ,
( ' create_date ' , ' <= ' , end_time . strftime ( ' % Y- % m- %d % H: % M: % S ' ) ) ,
( ' tracking_value_ids.field_desc ' , ' = ' , ' 状态 ' ) ,
( ' tracking_value_ids.new_value_char ' , ' = ' , ' 就绪 ' )
] )
for time_interval in time_intervals :
start_time , end_time = time_interval
@@ -704,9 +707,11 @@ class Sf_Dashboard_Connect(http.Controller):
interval_plan_orders = plan_order_messages . filtered (
lambda o : o . create_date > = start_time
and o . create_date < = end_time
)
)
interval_orders = request . env [ ' mrp.workorder ' ] . sudo ( ) . brow se( interval_plan_orders . mapped ( ' res_id ' ) )
interval_order_id s = set ( interval_plan_orders . mapped ( ' res_id ' ) )
interval_orders = request . env [ ' mrp.workorder ' ] . sudo ( ) . browse ( interval_order_ids )
if line == ' 业绩总览 ' :
interval_orders = interval_orders . filtered ( lambda o : o . routing_type in [ ' 人工线下加工 ' , ' CNC加工 ' ] )
elif line == ' 人工线下加工中心 ' :
@@ -715,9 +720,9 @@ class Sf_Dashboard_Connect(http.Controller):
interval_orders = interval_orders . filtered ( lambda o : o . routing_type == ' CNC加工 ' and o . production_line_id . name == line )
# 使用小时和分钟作为键,确保每个小时的数据有独立的键
key = start_time . strftime ( ' % H: % M: % S ' ) # 只取小时:分钟:秒作为键
key = ( start_time + timedelta ( hours = 8 ) ) . strftime ( ' % H: % M: % S ' ) # 只取小时:分钟:秒作为键
# time_count_dict[key] = len(orders)
plan_count_dict [ key ] = sum ( interval_orders . mapped ( ' qty_produced ' ) )
plan_count_dict [ key ] = sum ( interval_orders . mapped ( ' qty_production ' ) )
# order_counts.append()
res [ ' data ' ] [ line ] = {
@@ -859,21 +864,37 @@ class Sf_Dashboard_Connect(http.Controller):
"""
# res = {'status': 1, 'message': '成功', 'not_done_data': [], 'done_data': []}
res = { ' status ' : 1 , ' message ' : ' 成功 ' , ' data ' : { } }
# 解决产品名称取到英文的问题
request . update_context ( lang = ' zh_CN ' )
plan_obj = request . env [ ' sf.production.plan ' ] . sudo ( )
work_order_obj = request . env [ ' mrp.workorder ' ] . sudo ( )
# 获取mrp.workorder的state字段的selection内容
state_dict = dict ( request . env [ ' mrp.workorder ' ] . sudo ( ) . _fields [ ' state ' ] . selection )
line_list = ast . literal_eval ( kw [ ' line_list ' ] )
begin_time_str = kw [ ' begin_time ' ] . strip ( ' " ' )
end_time_str = kw [ ' end_time ' ] . strip ( ' " ' )
begin_time = datetime . strptime ( begin_time_str , ' % Y- % m- %d % H: % M: % S ' )
end_time = datetime . strptime ( end_time_str , ' % Y- % m- %d % H: % M: % S ' )
# print('line_list: %s' % line_list)
not_done_data = [ ]
done_data = [ ]
final_data = { }
not_done_index = 1
done_index = 1
# 获取当前时间, 并计算24小时前的时间
current_time = datetime . now ( )
time_48_hours_ago = current_time - timedelta ( hours = 48 )
# # 计划量, 目前只能从mail.message中筛选出
# plan_order_messages = request.env['mail.message'].sudo().search([
# ('model', '=', 'mrp.workorder'),
# ('create_date', '>=', time_48_hours_ago.strftime('%Y-%m-%d %H:%M:%S')),
# ('tracking_value_ids.field_desc', '=', '状态'),
# ('tracking_value_ids.new_value_char', 'in', ['就绪', '生产中'])
# ])
for line in line_list :
not_done_data = [ ]
done_data = [ ]
not_done_index = 1
done_index = 1
if line == ' 业绩总览 ' :
work_order_domain = [ ( ' routing_type ' , ' in ' , [ ' 人工线下加工 ' , ' CNC加工 ' ] ) ]
@@ -889,21 +910,24 @@ class Sf_Dashboard_Connect(http.Controller):
# [('production_line_id.name', '=', line), ('state', 'not in', ['finished']),
# ('production_id.state', 'not in', ['cancel', 'done']), ('active', '=', True)
# ])
not_done_orders = work_order_obj . search ( work_order_domain +
[ ( ' state ' , ' in ' , [ ' ready ' , ' progress ' ] ) ] , order = ' id asc '
not_done_orders = work_order_obj . search ( work_order_domain + [
( ' state ' , ' in ' , [ ' ready ' , ' progress ' ] ) ,
( ' date_planned_start ' , ' >= ' , time_48_hours_ago ) ,
( ' date_planned_start ' , ' <= ' , current_time )
] , order = ' id asc '
)
# 完成订单
# 获取当前时间, 并计算24小时前的时间
current_time = datetime. now ( )
time_24_hours_ago = current_time - timedelta( hours = 24 )
# current_time = datetime.now( )
# time_24_hours_ago = current_time - timedelta(hours=24 )
finish_orders = work_order_obj . search ( work_order_domain + [
( ' state ' , ' in ' , [ ' finished ' ] ) ,
( ' state ' , ' in ' , [ ' done ' ] ) ,
( ' production_id.state ' , ' not in ' , [ ' cancel ' ] ) ,
( ' date_finished ' , ' >= ' , time_2 4_hours_ago )
( ' date_finished ' , ' >= ' , time_48 _hours_ago )
] , order = ' id asc ' )
# print( finish_orders)
# logging.info('完成订单: %s' % finish_orders)
# 获取所有未完成订单的ID列表
order_ids = [ order . id for order in not_done_orders ]
@@ -939,14 +963,6 @@ class Sf_Dashboard_Connect(http.Controller):
material_match = re . search ( material_pattern , blank_name )
material = material_match . group ( 1 ) if material_match else ' No match found '
state_dict = {
' draft ' : ' 待排程 ' ,
' done ' : ' 已排程 ' ,
' processing ' : ' 生产中 ' ,
' finished ' : ' 已完成 ' ,
' ready ' : ' 待加工 ' ,
' progress ' : ' 生产中 ' ,
}
line_dict = {
' sequence ' : not_done_index ,
@@ -962,8 +978,6 @@ class Sf_Dashboard_Connect(http.Controller):
not_done_index + = 1
for finish_order in finish_orders :
if not finish_order . actual_end_time :
continue
blank_name = ' '
try :
blank_name = finish_order . production_id . move_raw_ids [ 0 ] . product_id . name
@@ -979,13 +993,13 @@ class Sf_Dashboard_Connect(http.Controller):
line_dict = {
' sequence ' : done_index ,
' workorder_name ' : finish_order . name ,
' workorder_name ' : finish_order . production_id . name,
' blank_name ' : blank_name ,
' material ' : material ,
' dimensions ' : dimensions ,
' order_qty ' : order . qty_produced ,
' finish_time ' : finish_order . actual_end_time . strftime (
' % Y- % m- %d % H: % M: % S ' ) if finish_order . actual_end_time else ' '
' order_qty ' : finish_ order. qty_produced ,
' finish_time ' : finish_order . date_finished . strftime (
' % Y- % m- %d % H: % M: % S ' ) if finish_order . date_finished else ' '
}
done_data . append ( line_dict )