64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from flask import Blueprint, jsonify, g
							 | 
						|||
| 
								 | 
							
								import sqlite3
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								bp = Blueprint('shebei', __name__, url_prefix='/device')
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 修正路由路径,移除空格
							 | 
						|||
| 
								 | 
							
								@bp.route('/status-statistics', methods=['GET'])
							 | 
						|||
| 
								 | 
							
								def get_device_status_statistics():
							 | 
						|||
| 
								 | 
							
								    """
							 | 
						|||
| 
								 | 
							
								    获取设备状态统计信息,用于饼图展示
							 | 
						|||
| 
								 | 
							
								    """
							 | 
						|||
| 
								 | 
							
								    try:
							 | 
						|||
| 
								 | 
							
								        db = g.get_db()
							 | 
						|||
| 
								 | 
							
								        cursor = db.execute('''
							 | 
						|||
| 
								 | 
							
								            SELECT status, COUNT(*) as count
							 | 
						|||
| 
								 | 
							
								            FROM device
							 | 
						|||
| 
								 | 
							
								            GROUP BY status
							 | 
						|||
| 
								 | 
							
								        ''')
							 | 
						|||
| 
								 | 
							
								        status_counts = cursor.fetchall()
							 | 
						|||
| 
								 | 
							
								        total_devices = sum([count['count'] for count in status_counts])
							 | 
						|||
| 
								 | 
							
								        status_percentages = []
							 | 
						|||
| 
								 | 
							
								        status_color_mapping = {
							 | 
						|||
| 
								 | 
							
								            'normal': '#4bb118',
							 | 
						|||
| 
								 | 
							
								            'warning': '#faad14',
							 | 
						|||
| 
								 | 
							
								            'fault': '#f5222d',
							 | 
						|||
| 
								 | 
							
								            'offline': '#bfbfbf'
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        for status_count in status_counts:
							 | 
						|||
| 
								 | 
							
								            status = status_count['status']
							 | 
						|||
| 
								 | 
							
								            percentage = (status_count['count'] / total_devices) * 100
							 | 
						|||
| 
								 | 
							
								            color = status_color_mapping.get(status, '#bfbfbf')
							 | 
						|||
| 
								 | 
							
								            status_percentages.append({
							 | 
						|||
| 
								 | 
							
								                "status": status,
							 | 
						|||
| 
								 | 
							
								                "percentage": percentage,
							 | 
						|||
| 
								 | 
							
								                "color": color
							 | 
						|||
| 
								 | 
							
								            })
							 | 
						|||
| 
								 | 
							
								        return jsonify({"success": True, "data": status_percentages})
							 | 
						|||
| 
								 | 
							
								    except sqlite3.Error as e:
							 | 
						|||
| 
								 | 
							
								        return jsonify({"success": False, "message": f"数据库查询错误: {str(e)}"}), 500
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 修正路由路径,移除空格
							 | 
						|||
| 
								 | 
							
								@bp.route('/<int:device_id>/temperature-humidity-data', methods=['GET'])
							 | 
						|||
| 
								 | 
							
								def get_device_temperature_humidity_data(device_id):
							 | 
						|||
| 
								 | 
							
								    """
							 | 
						|||
| 
								 | 
							
								    获取指定设备的温湿度数据
							 | 
						|||
| 
								 | 
							
								    """
							 | 
						|||
| 
								 | 
							
								    try:
							 | 
						|||
| 
								 | 
							
								        db = g.get_db()
							 | 
						|||
| 
								 | 
							
								        cursor = db.execute('''
							 | 
						|||
| 
								 | 
							
								            SELECT temperature, humidity, timestamp
							 | 
						|||
| 
								 | 
							
								            FROM temperature_data
							 | 
						|||
| 
								 | 
							
								            WHERE device_id =?
							 | 
						|||
| 
								 | 
							
								        ''', (device_id,))
							 | 
						|||
| 
								 | 
							
								        data = cursor.fetchall()
							 | 
						|||
| 
								 | 
							
								        result = []
							 | 
						|||
| 
								 | 
							
								        for row in data:
							 | 
						|||
| 
								 | 
							
								            result.append({
							 | 
						|||
| 
								 | 
							
								                "temperature": row['temperature'],
							 | 
						|||
| 
								 | 
							
								                "humidity": row['humidity'],
							 | 
						|||
| 
								 | 
							
								                "timestamp": row['timestamp']
							 | 
						|||
| 
								 | 
							
								            })
							 | 
						|||
| 
								 | 
							
								        return jsonify({"success": True, "data": result})
							 | 
						|||
| 
								 | 
							
								    except sqlite3.Error as e:
							 | 
						|||
| 
								 | 
							
								        return jsonify({"success": False, "message": f"数据库查询错误: {str(e)}"}), 500
							 |