diff --git a/lib/api/sum_data_api.py b/lib/api/sum_data_api.py index 1947794..9d014e1 100644 --- a/lib/api/sum_data_api.py +++ b/lib/api/sum_data_api.py @@ -149,26 +149,48 @@ def batch_delete_sum_data_api(): @sum_data_bp.route('/sum-data/batch-query', methods=['POST']) def batch_query_sum_data(): - """根据ID列表批量查询求和数据""" + """根据ID列表或条件批量查询求和数据""" try: data = request.json ids = data.get('ids', []) - log_info(f'[求和数据API] 批量查询求和数据,ID数量: {len(ids)}', 'api') - - if not ids: - return jsonify({'success': False, 'message': '请提供ID列表'}), 400 + conditions = data.get('conditions', {}) from lib.db import execute_query - placeholders = ','.join(['%s'] * len(ids)) - sql = f'SELECT * FROM t_daily_report_sum_data WHERE id IN ({placeholders})' + # 支持按ID列表查询 + if ids: + log_info(f'[求和数据API] 按ID批量查询求和数据,ID数量: {len(ids)}', 'api') + placeholders = ','.join(['%s'] * len(ids)) + sql = f'SELECT * FROM t_daily_report_sum_data WHERE id IN ({placeholders})' + result = execute_query(sql, tuple(ids)) + return jsonify({ + 'success': True, + 'data': result + }) - result = execute_query(sql, tuple(ids)) + # 支持按条件查询 + if conditions: + log_info(f'[求和数据API] 按条件查询求和数据,条件: {conditions}', 'api') + where_clauses = [] + params = [] + + for key, value in conditions.items(): + if value is not None and value != '': + where_clauses.append(f'{key} = %s') + params.append(value) + + if not where_clauses: + return jsonify({'success': False, 'message': '请提供有效的查询条件'}), 400 + + sql = f'SELECT * FROM t_daily_report_sum_data WHERE {" AND ".join(where_clauses)}' + result = execute_query(sql, tuple(params)) + + return jsonify({ + 'success': True, + 'data': result + }) - return jsonify({ - 'success': True, - 'data': result - }) + return jsonify({'success': False, 'message': '请提供ID列表或查询条件'}), 400 except Exception as e: log_error(f'[求和数据API] 批量查询求和数据失败: {e}', 'api') return jsonify({'success': False, 'message': str(e)}), 500 diff --git a/public/static/js/sum_data.js b/public/static/js/sum_data.js index d463704..e730aea 100644 --- a/public/static/js/sum_data.js +++ b/public/static/js/sum_data.js @@ -424,7 +424,37 @@ async function saveSumData() { try { // 分组编辑模式 if (editingGroupIds && editingGroupIds.length > 0) { - // 读取动态字段值 + // 先获取分组信息,确定需要删除的自动采集记录 + if (editingGroupData && editingGroupData.length > 0) { + const chargeItem = editingGroupData.find(i => i.sum_field_key === 'charge_degree') || editingGroupData[0]; + + // 查询该分组下所有字段的ID(用于删除重复的自动采集记录) + const deleteResponse = await fetch('/api/sum-data/batch-query', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + conditions: { + report_date: chargeItem.report_date, + config_id: chargeItem.config_id, + split_type: chargeItem.split_type, + split_value: chargeItem.split_value, + data_source: 'auto' + } + }) + }); + const deleteResult = await deleteResponse.json(); + + // 删除所有自动采集的记录(避免重复) + if (deleteResult.success && deleteResult.data && deleteResult.data.length > 0) { + const autoIds = deleteResult.data.map(d => d.id); + for (const autoId of autoIds) { + await fetch(`/api/sum-data/${autoId}`, { method: 'DELETE' }); + } + console.log(`已删除 ${autoIds.length} 条自动采集记录`); + } + } + + // 读取动态字段值(这些是手动编辑后的记录) const fieldInputs = document.querySelectorAll('#sum-data-dynamic-fields input[data-field-key]'); let successCount = 0;