Files
ylt_diy/lib/api/sum_data_api.py

194 lines
5.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
求和数据管理 API
"""
from flask import request, jsonify
from lib.sum_data_collector import (
collect_sum_data_from_history,
get_sum_data_list,
add_sum_data,
update_sum_data,
delete_sum_data,
batch_delete_sum_data,
get_monthly_charge_degree_total,
export_sum_data_to_excel
)
from . import sum_data_bp
@sum_data_bp.route('/sum-data/collect', methods=['POST'])
def collect_sum_data():
"""从历史记录采集求和数据"""
try:
data = request.json or {}
history_id = data.get('history_id')
result = collect_sum_data_from_history(history_id)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500
@sum_data_bp.route('/sum-data', methods=['GET'])
def list_sum_data():
"""查询求和数据列表"""
try:
page = int(request.args.get('page', 1))
page_size = int(request.args.get('page_size', 20))
start_date = request.args.get('start_date')
end_date = request.args.get('end_date')
config_id = request.args.get('config_id')
config_name = request.args.get('config_name')
sum_field_key = request.args.get('sum_field_key')
data_source = request.args.get('data_source')
result = get_sum_data_list(
page=page,
page_size=page_size,
start_date=start_date,
end_date=end_date,
config_id=config_id,
config_name=config_name,
sum_field_key=sum_field_key,
data_source=data_source
)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500
@sum_data_bp.route('/sum-data', methods=['POST'])
def create_sum_data():
"""手动添加求和数据"""
try:
data = request.json
result = add_sum_data(data)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500
@sum_data_bp.route('/sum-data/<int:sum_data_id>', methods=['PUT'])
def update_sum_data_api(sum_data_id):
"""更新求和数据"""
try:
data = request.json
result = update_sum_data(sum_data_id, data)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500
@sum_data_bp.route('/sum-data/<int:sum_data_id>', methods=['DELETE'])
def delete_sum_data_api(sum_data_id):
"""删除求和数据"""
try:
result = delete_sum_data(sum_data_id)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500
@sum_data_bp.route('/sum-data/batch-delete', methods=['POST'])
def batch_delete_sum_data_api():
"""批量删除求和数据"""
try:
data = request.json
ids = data.get('ids', [])
if not ids:
return jsonify({'success': False, 'message': '请选择要删除的记录'}), 400
result = batch_delete_sum_data(ids)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500
@sum_data_bp.route('/sum-data/monthly-total', methods=['GET'])
def monthly_charge_degree_total():
"""获取指定配置当月充电电量累计从sum_data表查询对账后的数据
参数:
config_id: 配置ID可选不传则查所有配置总和
month: 月份,格式 YYYY-MM可选默认当月
"""
try:
config_id = request.args.get('config_id')
month = request.args.get('month')
result = get_monthly_charge_degree_total(config_id, month)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500
@sum_data_bp.route('/sum-data/export', methods=['GET'])
def export_sum_data():
"""导出求和数据为Excel
参数:
start_date: 开始日期(可选)
end_date: 结束日期(可选)
config_id: 配置ID可选
data_source: 数据来源(可选)
keyword: 配置名称关键词(可选)
"""
try:
start_date = request.args.get('start_date')
end_date = request.args.get('end_date')
config_id = request.args.get('config_id')
data_source = request.args.get('data_source')
keyword = request.args.get('keyword')
result = export_sum_data_to_excel(
start_date=start_date,
end_date=end_date,
config_id=config_id,
data_source=data_source,
keyword=keyword
)
if result['success']:
return jsonify(result)
else:
return jsonify(result), 400
except Exception as e:
import traceback
traceback.print_exc()
return jsonify({'success': False, 'message': str(e)}), 500