修改大屏数据接口,日完成量统计,获取产线产量相关,获取工单明细
This commit is contained in:
@@ -635,25 +635,32 @@ class Sf_Dashboard_Connect(http.Controller):
|
||||
return date_list
|
||||
|
||||
|
||||
for line in line_list:
|
||||
date_field_name = 'date_finished' # 替换为你模型中的实际字段名
|
||||
order_counts = []
|
||||
if time_unit == 'hour':
|
||||
|
||||
for line in line_list:
|
||||
date_field_name = 'date_finished' # 替换为你模型中的实际字段名
|
||||
order_counts = []
|
||||
|
||||
if line == '业绩总览':
|
||||
work_order_domain = [('routing_type', 'in', ['人工线下加工', 'CNC加工'])]
|
||||
elif line == '人工线下加工中心':
|
||||
work_order_domain = [('routing_type', '=', '人工线下加工')]
|
||||
else:
|
||||
work_order_domain = [
|
||||
('production_line_id.name', '=', line),
|
||||
('routing_type', '=', 'CNC加工')
|
||||
]
|
||||
|
||||
if time_unit == 'hour':
|
||||
if line == '业绩总览':
|
||||
work_order_domain = [('routing_type', 'in', ['人工线下加工', 'CNC加工'])]
|
||||
elif line == '人工线下加工中心':
|
||||
work_order_domain = [('routing_type', '=', '人工线下加工')]
|
||||
else:
|
||||
work_order_domain = [
|
||||
('production_line_id.name', '=', line),
|
||||
('routing_type', '=', 'CNC加工')
|
||||
]
|
||||
time_intervals = get_time_intervals(begin_time, end_time, time_unit)
|
||||
print('============================= %s' % time_intervals)
|
||||
|
||||
time_count_dict = {}
|
||||
plan_count_dict = {}
|
||||
|
||||
orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['done']),
|
||||
(date_field_name, '>=', begin_time.strftime('%Y-%m-%d %H:%M:%S')),
|
||||
(date_field_name, '<=', end_time.strftime('%Y-%m-%d %H:%M:%S'))
|
||||
])
|
||||
|
||||
for time_interval in time_intervals:
|
||||
start_time, end_time = time_interval
|
||||
@@ -665,55 +672,106 @@ class Sf_Dashboard_Connect(http.Controller):
|
||||
# (date_field_name, '<=', end_time.strftime('%Y-%m-%d %H:%M:%S')) # 包括结束时间
|
||||
# ])
|
||||
|
||||
orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['done']),
|
||||
(date_field_name, '>=', start_time.strftime('%Y-%m-%d %H:%M:%S')),
|
||||
(date_field_name, '<=', end_time.strftime('%Y-%m-%d %H:%M:%S'))
|
||||
])
|
||||
interval_orders = orders.filtered(
|
||||
lambda o: o[date_field_name] >= start_time
|
||||
and o[date_field_name] <= end_time
|
||||
)
|
||||
|
||||
# 使用小时和分钟作为键,确保每个小时的数据有独立的键
|
||||
key = start_time.strftime('%H:%M:%S') # 只取小时:分钟:秒作为键
|
||||
# time_count_dict[key] = len(orders)
|
||||
time_count_dict[key] = sum(orders.mapped('qty_produced'))
|
||||
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
|
||||
|
||||
# orders = plan_obj.search([
|
||||
# ('production_line_id.name', '=', line),
|
||||
# ('state', 'in', ['done']),
|
||||
# (date_field_name, '>=', start_time.strftime('%Y-%m-%d %H:%M:%S')),
|
||||
# (date_field_name, '<=', end_time.strftime('%Y-%m-%d %H:%M:%S')) # 包括结束时间
|
||||
# ])
|
||||
|
||||
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().browse(interval_plan_orders.mapped('res_id'))
|
||||
if line == '业绩总览':
|
||||
interval_orders = interval_orders.filtered(lambda o: o.routing_type in ['人工线下加工', 'CNC加工'])
|
||||
elif line == '人工线下加工中心':
|
||||
interval_orders = interval_orders.filtered(lambda o: o.routing_type == '人工线下加工')
|
||||
else:
|
||||
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') # 只取小时:分钟:秒作为键
|
||||
# time_count_dict[key] = len(orders)
|
||||
plan_count_dict[key] = sum(interval_orders.mapped('qty_produced'))
|
||||
|
||||
# order_counts.append()
|
||||
res['data'][line] = {
|
||||
'finish_order_nums': time_count_dict,
|
||||
'plan_order_nums': 28
|
||||
'plan_order_nums': plan_count_dict
|
||||
}
|
||||
return json.dumps(res)
|
||||
else:
|
||||
|
||||
date_list = get_date_list(begin_time, end_time)
|
||||
for line in line_list:
|
||||
date_field_name = 'date_finished' # 替换为你模型中的实际字段名
|
||||
order_counts = []
|
||||
|
||||
for date in date_list:
|
||||
next_day = date + timedelta(days=1)
|
||||
orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['done']),
|
||||
(date_field_name, '>=', date.strftime('%Y-%m-%d 00:00:00')),
|
||||
(date_field_name, '<', next_day.strftime('%Y-%m-%d 00:00:00'))
|
||||
])
|
||||
if line == '业绩总览':
|
||||
work_order_domain = [('routing_type', 'in', ['人工线下加工', 'CNC加工'])]
|
||||
elif line == '人工线下加工中心':
|
||||
work_order_domain = [('routing_type', '=', '人工线下加工')]
|
||||
else:
|
||||
work_order_domain = [
|
||||
('production_line_id.name', '=', line),
|
||||
('routing_type', '=', 'CNC加工')
|
||||
]
|
||||
|
||||
rework_orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['rework']),
|
||||
(date_field_name, '>=', date.strftime('%Y-%m-%d 00:00:00')),
|
||||
(date_field_name, '<', next_day.strftime('%Y-%m-%d 00:00:00'))
|
||||
])
|
||||
not_passed_orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['scrap', 'cancel']),
|
||||
(date_field_name, '>=', date.strftime('%Y-%m-%d 00:00:00')),
|
||||
(date_field_name, '<', next_day.strftime('%Y-%m-%d 00:00:00'))
|
||||
])
|
||||
order_counts.append({
|
||||
'date': date.strftime('%Y-%m-%d'),
|
||||
'order_count': sum(orders.mapped('qty_produced')),
|
||||
'rework_orders': sum(rework_orders.mapped('qty_produced')),
|
||||
'not_passed_orders': sum(not_passed_orders.mapped('qty_produced'))
|
||||
})
|
||||
# 外面包一层,没什么是包一层不能解决的,包一层就能区分了,类似于包一层div
|
||||
# 外面包一层的好处是,可以把多个数据结构打包在一起,方便前端处理
|
||||
date_list = get_date_list(begin_time, end_time)
|
||||
|
||||
# date_list_dict = {line: order_counts}
|
||||
for date in date_list:
|
||||
next_day = date + timedelta(days=1)
|
||||
orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['done']),
|
||||
(date_field_name, '>=', date.strftime('%Y-%m-%d 00:00:00')),
|
||||
(date_field_name, '<', next_day.strftime('%Y-%m-%d 00:00:00'))
|
||||
])
|
||||
|
||||
res['data'][line] = order_counts
|
||||
rework_orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['rework']),
|
||||
(date_field_name, '>=', date.strftime('%Y-%m-%d 00:00:00')),
|
||||
(date_field_name, '<', next_day.strftime('%Y-%m-%d 00:00:00'))
|
||||
])
|
||||
not_passed_orders = request.env['mrp.workorder'].sudo().search(work_order_domain + [
|
||||
('state', 'in', ['scrap', 'cancel']),
|
||||
(date_field_name, '>=', date.strftime('%Y-%m-%d 00:00:00')),
|
||||
(date_field_name, '<', next_day.strftime('%Y-%m-%d 00:00:00'))
|
||||
])
|
||||
order_counts.append({
|
||||
'date': date.strftime('%Y-%m-%d'),
|
||||
'order_count': sum(orders.mapped('qty_produced')),
|
||||
'rework_orders': sum(rework_orders.mapped('qty_produced')),
|
||||
'not_passed_orders': sum(not_passed_orders.mapped('qty_produced'))
|
||||
})
|
||||
# 外面包一层,没什么是包一层不能解决的,包一层就能区分了,类似于包一层div
|
||||
# 外面包一层的好处是,可以把多个数据结构打包在一起,方便前端处理
|
||||
|
||||
# date_list_dict = {line: order_counts}
|
||||
|
||||
res['data'][line] = order_counts
|
||||
return json.dumps(res)
|
||||
|
||||
# 实时产量
|
||||
@@ -799,7 +857,7 @@ class Sf_Dashboard_Connect(http.Controller):
|
||||
:param kw:
|
||||
:return:
|
||||
"""
|
||||
|
||||
request.env['stock.warehouse'].browse(request.env.company.id).pbm_loc_id
|
||||
# res = {'status': 1, 'message': '成功', 'not_done_data': [], 'done_data': []}
|
||||
res = {'status': 1, 'message': '成功', 'data': {}}
|
||||
plan_obj = request.env['sf.production.plan'].sudo()
|
||||
|
||||
Reference in New Issue
Block a user