diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index e8c5c226..4f99f319 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -447,6 +447,27 @@ class Sf_Dashboard_Connect(http.Controller): 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('"') # 默认单位为天 + print('time_unit: %s' % time_unit) + + # 日期或小时循环生成器,根据time_unit决定是按天还是按小时 + def get_time_intervals(start_time, end_time, time_unit): + intervals = [] + current_time = start_time + if time_unit == 'hour': + delta = timedelta(hours=1) + else: + delta = timedelta(days=1) + + while current_time < end_time: + next_time = current_time + delta + # 确保最后一个时间段不会超出end_time + if next_time > end_time: + next_time = end_time + intervals.append((current_time, next_time)) + current_time = next_time + return intervals def get_date_list(start_date, end_date): date_list = [] @@ -457,10 +478,33 @@ class Sf_Dashboard_Connect(http.Controller): return date_list for line in line_list: - date_list = get_date_list(begin_time, end_time) + date_field_name = 'actual_end_time' # 替换为你模型中的实际字段名 order_counts = [] - date_field_name = 'actual_end_time' # 替换为你模型中的实际字段名 + if time_unit == 'hour': + time_intervals = get_time_intervals(begin_time, end_time, time_unit) + print('============================= %s' % time_intervals) + + time_count_dict = {} + + for time_interval in time_intervals: + start_time, end_time = time_interval + # print(start_time, end_time) + orders = plan_obj.search([('production_line_id.name', '=', line), ('state', 'in', ['finished']), + (date_field_name, '>=', start_time.strftime('%Y-%m-%d 00:00:00')), + (date_field_name, '<', end_time.strftime('%Y-%m-%d 00:00:00')) + ]) + # 使用小时和分钟作为键,确保每个小时的数据有独立的键 + key = start_time.strftime('%H:%M:%S') # 只取小时:分钟:秒作为键 + time_count_dict[key] = len(orders) + order_counts.append({ + 'finish_order_nums': time_count_dict, + 'plan_order_nums': 28 + }) + res['data'][line] = order_counts + return json.dumps(res) + + date_list = get_date_list(begin_time, end_time) for date in date_list: next_day = date + timedelta(days=1) @@ -483,9 +527,7 @@ class Sf_Dashboard_Connect(http.Controller): 'date': date.strftime('%Y-%m-%d'), 'order_count': len(orders), 'rework_orders': len(rework_orders), - 'not_passed_orders': len(not_passed_orders), - 'finish_order_nums': len(orders), - 'plan_order_nums': 20, + 'not_passed_orders': len(not_passed_orders) }) # 外面包一层,没什么是包一层不能解决的,包一层就能区分了,类似于包一层div # 外面包一层的好处是,可以把多个数据结构打包在一起,方便前端处理