Browse Source

Merge branch 'zsj_devp' of Ding/AcidificationModel into master

Ding 3 months ago
parent
commit
82ff662897
1 changed files with 198 additions and 20 deletions
  1. 198 20
      api/app/routes.py

+ 198 - 20
api/app/routes.py

@@ -350,48 +350,87 @@ def list_tables():
 
 @bp.route('/models/<int:model_id>', methods=['GET'])
 def get_model(model_id):
+    """
+    获取单个模型信息的API接口
+    
+    @param model_id: 模型ID
+    @return: JSON响应
+    """
+    Session = sessionmaker(bind=db.engine)
+    session = Session()
+    
     try:
-        model = Models.query.filter_by(ModelID=model_id).first()
+        model = session.query(Models).filter_by(ModelID=model_id).first()
         if model:
             return jsonify({
                 'ModelID': model.ModelID,
-                'ModelName': model.ModelName,
-                'ModelType': model.ModelType,
-                'CreatedAt': model.CreatedAt.strftime('%Y-%m-%d %H:%M:%S'),
-                'Description': model.Description
+                'Model_name': model.Model_name,
+                'Model_type': model.Model_type,
+                'Created_at': model.Created_at.strftime('%Y-%m-%d %H:%M:%S'),
+                'Description': model.Description,
+                'Performance_score': float(model.Performance_score) if model.Performance_score else None,
+                'Data_type': model.Data_type
             })
         else:
-            return jsonify({'message': 'Model not found'}), 404
+            return jsonify({'message': '未找到模型'}), 404
+            
     except Exception as e:
-        return jsonify({'error': 'Internal server error', 'message': str(e)}), 500
+        logger.error(f'获取模型信息失败: {str(e)}')
+        return jsonify({'error': '服务器内部错误', 'message': str(e)}), 500
+        
+    finally:
+        session.close()
 
 
 @bp.route('/models', methods=['GET'])
 def get_all_models():
+    """
+    获取所有模型信息的API接口
+    
+    @return: JSON响应
+    """
+    Session = sessionmaker(bind=db.engine)
+    session = Session()
+    
     try:
-        models = Models.query.all()  # 获取所有模型数据
+        models = session.query(Models).all()
         if models:
             result = [
                 {
                     'ModelID': model.ModelID,
-                    'ModelName': model.ModelName,
-                    'ModelType': model.ModelType,
-                    'CreatedAt': model.CreatedAt.strftime('%Y-%m-%d %H:%M:%S'),
-                    'Description': model.Description
+                    'Model_name': model.Model_name,
+                    'Model_type': model.Model_type,
+                    'Created_at': model.Created_at.strftime('%Y-%m-%d %H:%M:%S'),
+                    'Description': model.Description,
+                    'Performance_score': float(model.Performance_score) if model.Performance_score else None,
+                    'Data_type': model.Data_type
                 }
                 for model in models
             ]
             return jsonify(result)
         else:
-            return jsonify({'message': 'No models found'}), 404
+            return jsonify({'message': '未找到任何模型'}), 404
+            
     except Exception as e:
-        return jsonify({'error': 'Internal server error', 'message': str(e)}), 500
+        logger.error(f'获取所有模型信息失败: {str(e)}')
+        return jsonify({'error': '服务器内部错误', 'message': str(e)}), 500
+        
+    finally:
+        session.close()
 
 
 @bp.route('/model-parameters', methods=['GET'])
 def get_all_model_parameters():
+    """
+    获取所有模型参数的API接口
+    
+    @return: JSON响应
+    """
+    Session = sessionmaker(bind=db.engine)
+    session = Session()
+    
     try:
-        parameters = ModelParameters.query.all()  # 获取所有参数数据
+        parameters = session.query(ModelParameters).all()
         if parameters:
             result = [
                 {
@@ -404,9 +443,14 @@ def get_all_model_parameters():
             ]
             return jsonify(result)
         else:
-            return jsonify({'message': 'No parameters found'}), 404
+            return jsonify({'message': '未找到任何参数'}), 404
+            
     except Exception as e:
-        return jsonify({'error': 'Internal server error', 'message': str(e)}), 500
+        logger.error(f'获取所有模型参数失败: {str(e)}')
+        return jsonify({'error': '服务器内部错误', 'message': str(e)}), 500
+        
+    finally:
+        session.close()
 
 
 @bp.route('/models/<int:model_id>/parameters', methods=['GET'])
@@ -817,7 +861,14 @@ def get_task_status(task_id):
 
 
 @bp.route('/delete-model/<int:model_id>', methods=['DELETE'])
-def delete_model(model_id):
+def delete_model_route(model_id):
+    # 将URL参数转换为布尔值
+    delete_dataset_param = request.args.get('delete_dataset', 'False').lower() == 'true'
+    
+    # 调用原始函数
+    return delete_model(model_id, delete_dataset=delete_dataset_param)
+
+def delete_model(model_id, delete_dataset=False):
     """
     删除指定模型的API接口
     
@@ -853,7 +904,6 @@ def delete_model(model_id):
                 return jsonify({'error': f'删除模型文件失败: {str(e)}'}), 500
 
         # 3. 如果需要删除关联的数据集
-        delete_dataset = request.args.get('delete_dataset', 'false').lower() == 'true'
         if delete_dataset and dataset_id:
             try:
                 dataset_response = delete_dataset_endpoint(dataset_id)
@@ -879,7 +929,6 @@ def delete_model(model_id):
                 'dataset_id': dataset_id,
                 'message': '关联数据集已删除'
             }
-            
         return jsonify(response_data), 200
         
     except Exception as e:
@@ -1456,3 +1505,132 @@ def get_model_history(data_type):
         
     finally:
         session.close()
+
+@bp.route('/batch-delete-datasets', methods=['POST'])
+def batch_delete_datasets():
+    """
+    批量删除数据集的API接口
+    
+    @body_param dataset_ids: 要删除的数据集ID列表
+    @return: JSON响应
+    """
+    try:
+        data = request.get_json()
+        dataset_ids = data.get('dataset_ids', [])
+        
+        if not dataset_ids:
+            return jsonify({'error': '未提供数据集ID列表'}), 400
+            
+        results = {
+            'success': [],
+            'failed': [],
+            'protected': []  # 被模型使用的数据集
+        }
+        
+        for dataset_id in dataset_ids:
+            try:
+                # 调用单个删除接口
+                response = delete_dataset_endpoint(dataset_id)
+                
+                # 解析响应
+                if response[1] == 200:
+                    results['success'].append(dataset_id)
+                elif response[1] == 400 and 'models' in response[0].json:
+                    # 数据集被模型保护
+                    results['protected'].append({
+                        'id': dataset_id,
+                        'models': response[0].json['models']
+                    })
+                else:
+                    results['failed'].append({
+                        'id': dataset_id,
+                        'reason': response[0].json.get('error', '删除失败')
+                    })
+                    
+            except Exception as e:
+                logger.error(f'删除数据集 {dataset_id} 失败: {str(e)}')
+                results['failed'].append({
+                    'id': dataset_id,
+                    'reason': str(e)
+                })
+        
+        # 构建响应消息
+        message = f"成功删除 {len(results['success'])} 个数据集"
+        if results['protected']:
+            message += f", {len(results['protected'])} 个数据集被保护"
+        if results['failed']:
+            message += f", {len(results['failed'])} 个数据集删除失败"
+            
+        return jsonify({
+            'message': message,
+            'results': results
+        }), 200
+        
+    except Exception as e:
+        logger.error(f'批量删除数据集失败: {str(e)}')
+        return jsonify({'error': str(e)}), 500
+
+@bp.route('/batch-delete-models', methods=['POST'])
+def batch_delete_models():
+    """
+    批量删除模型的API接口
+    
+    @body_param model_ids: 要删除的模型ID列表
+    @query_param delete_datasets: 布尔值,是否同时删除关联的数据集,默认为False
+    @return: JSON响应
+    """
+    try:
+        data = request.get_json()
+        model_ids = data.get('model_ids', [])
+        delete_datasets = request.args.get('delete_datasets', 'false').lower() == 'true'
+        
+        if not model_ids:
+            return jsonify({'error': '未提供模型ID列表'}), 400
+            
+        results = {
+            'success': [],
+            'failed': [],
+            'datasets_deleted': []  # 如果delete_datasets为true,记录被删除的数据集
+        }
+        
+        for model_id in model_ids:
+            try:
+                # 调用单个删除接口
+                response = delete_model(model_id, delete_dataset=delete_datasets)
+                
+                # 解析响应
+                if response[1] == 200:
+                    results['success'].append(model_id)
+                    # 如果删除了关联数据集,记录数据集ID
+                    if 'dataset_info' in response[0].json:
+                        results['datasets_deleted'].append(
+                            response[0].json['dataset_info']['dataset_id']
+                        )
+                else:
+                    results['failed'].append({
+                        'id': model_id,
+                        'reason': response[0].json.get('error', '删除失败')
+                    })
+                    
+            except Exception as e:
+                logger.error(f'删除模型 {model_id} 失败: {str(e)}')
+                results['failed'].append({
+                    'id': model_id,
+                    'reason': str(e)
+                })
+        
+        # 构建响应消息
+        message = f"成功删除 {len(results['success'])} 个模型"
+        if results['datasets_deleted']:
+            message += f", {len(results['datasets_deleted'])} 个关联数据集"
+        if results['failed']:
+            message += f", {len(results['failed'])} 个模型删除失败"
+            
+        return jsonify({
+            'message': message,
+            'results': results
+        }), 200
+        
+    except Exception as e:
+        logger.error(f'批量删除模型失败: {str(e)}')
+        return jsonify({'error': str(e)}), 500