diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index 0a770f9d..51a5bd92 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -376,7 +376,7 @@ class Sf_Dashboard_Connect(http.Controller): :param kw: :return: """ - res = {'status': 1, 'message': '成功', 'data': []} + res = {'status': 1, 'message': '成功', 'data': {}} plan_obj = request.env['sf.production.plan'].sudo() line_list = ast.literal_eval(kw['line_list']) begin_time_str = kw['begin_time'].strip('"') @@ -409,24 +409,73 @@ class Sf_Dashboard_Connect(http.Controller): 'date': date.strftime('%Y-%m-%d'), 'order_count': len(orders) }) + # 外面包一层,没什么是包一层不能解决的,包一层就能区分了,类似于包一层div + # 外面包一层的好处是,可以把多个数据结构打包在一起,方便前端处理 - res['data'] = order_counts - return json.dumps(res) + # date_list_dict = {line: order_counts} - # # 实时产量 - # @http.route('/api/RealTimeProduct', type='http', auth='public', methods=['GET', 'POST'], csrf=False, cors="*") - # def RealTimeProduct(self, **kw): - # """ - # 获取实时产量 - # :param kw: - # :return: - # """ - # - # def get_real_time_product(line_list): - # res = {'status': 1, 'message': '成功', 'data': []} - # plan_obj = request.env['sf.production.plan'].sudo() - # for line in line_list: - # plan_data = plan_obj.search([('production_line_id.name', '=', line)]) + res['data'][line] = order_counts + return json.dumps(res) + + # 实时产量 + @http.route('/api/RealTimeProduct', type='http', auth='public', methods=['GET', 'POST'], csrf=False, cors="*") + def RealTimeProduct(self, **kw): + """ + 获取实时产量 + :param kw: + :return: + """ + res = {'status': 1, 'message': '成功', 'data': {}} + plan_obj = request.env['sf.production.plan'].sudo() + 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') + + def get_hourly_intervals(start_time, end_time): + intervals = [] + current_time = start_time + while current_time < end_time: + next_hour = current_time + timedelta(hours=1) + intervals.append((current_time, min(next_hour, end_time))) + current_time = next_hour + return intervals + + # 当班计划量 + for line in line_list: + plan_order_nums = plan_obj.search_count( + [('production_line_id.name', '=', line), ('state', 'not in', ['draft']), + ('date_planned_start', '>=', begin_time), + ('date_planned_start', '<', end_time) + ]) + finish_order_nums = plan_obj.search_count( + [('production_line_id.name', '=', line), ('state', 'in', ['finished']), + ('date_planned_start', '>=', begin_time), + ('date_planned_start', '<', end_time) + ]) + hourly_intervals = get_hourly_intervals(begin_time, end_time) + production_counts = [] + + for start, end in hourly_intervals: + orders = plan_obj.search([ + ('actual_end_time', '>=', start.strftime('%Y-%m-%d %H:%M:%S')), + ('actual_end_time', '<', end.strftime('%Y-%m-%d %H:%M:%S')), + ('production_line_id.name', '=', line) + ]) + production_counts.append({ + 'start_time': start.strftime('%Y-%m-%d %H:%M:%S'), + 'end_time': end.strftime('%Y-%m-%d %H:%M:%S'), + 'production_count': len(orders) + }) + production_counts_dict = {'production_counts': production_counts, + 'plan_order_nums': plan_order_nums, + 'finish_order_nums': finish_order_nums, + } + + res['data'][line] = production_counts_dict + # res['data'].append({line: production_counts}) + return json.dumps(res) # 工单明细 @http.route('/api/OrderDetail', type='http', auth='public', methods=['GET', 'POST'], csrf=False, cors="*") @@ -437,7 +486,8 @@ class Sf_Dashboard_Connect(http.Controller): :return: """ - res = {'status': 1, 'message': '成功', 'not_done_data': [], 'done_data': []} + # res = {'status': 1, 'message': '成功', 'not_done_data': [], 'done_data': []} + res = {'status': 1, 'message': '成功', 'data': {}} plan_obj = request.env['sf.production.plan'].sudo() line_list = ast.literal_eval(kw['line_list']) begin_time_str = kw['begin_time'].strip('"') @@ -445,6 +495,9 @@ 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) + not_done_data = [] + done_data = [] + final_data = {} for line in line_list: # 未完成订单 @@ -506,7 +559,7 @@ class Sf_Dashboard_Connect(http.Controller): 'state': state_dict[order.state], } - res['not_done_data'].append(line_dict) + not_done_data.append(line_dict) for finish_order in finish_orders: blank_name = '' @@ -532,6 +585,8 @@ class Sf_Dashboard_Connect(http.Controller): 'finish_time': finish_order.actual_end_time.strftime('%Y-%m-%d %H:%M:%S'), } - res['done_data'].append(line_dict) + done_data.append(line_dict) + # 开始包一层 + res['data'][line] = {'not_done_data': not_done_data, 'done_data': done_data} return json.dumps(res)